Hex Artifact Content
Not logged in

Artifact 3c073e957a33edde844003a8e018bbf946820cb2:

File tools/cvs2fossil/lib/c2f_pbreakrcycle.tcl part of check-in [00bf8c198e] - The performance was still not satisfying, even with faster recomputing of successors. Doing it multiple times (Building the graph in each breaker and sort passes) eats time. Caching in memory blows the memory. Chosen solution: Cache this information in the database.

Created a new pass 'CsetDeps' which is run between 'InitCsets' and 'BreakRevCsetCycles' (i.e. changeset creation and first breaker pass). It computes the changeset dependencies from the file-level dependencies once and saves the result in the state, in the new table 'cssuccessor'. Now the breaker and sort passes can get the information quickly, with virtually no effort. The dependencies are recomputed incrementally when a changeset is split by one of the breaker passes, for its fragments and its predecessors.

The loop check is now trivial, and integrated into the successor computation, with the heavy lifting for the detailed analysis and reporting moved down into the type-dependent SQL queries. The relevant new method is 'loops'. Now that the loop check is incremental the pass based checks have been removed from the integrity module, and the option '--loopcheck' has been eliminated. For paranoia the graph setup and modification code got its loop check reinstated as an assert, redusing the changeset report code.

Renumbered the breaker and sort passes. A number of places, like graph setup and traversal, loading of changesets, etc. got feedback indicators to show their progress.

The selection of revision and symbol changesets for the associated breaker passes was a bit on the slow side. We now keep changeset lists sorted by type (during loading or general construction) and access them directly.

by aku on 2007-12-02 20:04:40.

0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23  ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69  07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66  es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65  tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69  d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e  n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20  SE, which.# you 
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65  should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ived as part of 
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f  this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74  n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72   voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79  ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75   many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20  als.  For exact 
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73  contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65  tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79  vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c   and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66  able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e  ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23  com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 50 61 73  ########..## Pas
0200: 73 20 56 49 49 2e 20 54 68 69 73 20 70 61 73 73  s VII. This pass
0210: 20 67 6f 65 73 20 6f 76 65 72 20 74 68 65 20 73   goes over the s
0220: 65 74 20 6f 66 20 72 65 76 69 73 69 6f 6e 20 62  et of revision b
0230: 61 73 65 64 20 63 68 61 6e 67 65 73 65 74 73 0a  ased changesets.
0240: 23 23 20 61 6e 64 20 62 72 65 61 6b 73 20 61 6c  ## and breaks al
0250: 6c 20 64 65 70 65 6e 64 65 6e 63 79 20 63 79 63  l dependency cyc
0260: 6c 65 73 20 74 68 65 79 20 6d 61 79 20 62 65 20  les they may be 
0270: 69 6e 2e 20 57 65 20 6e 65 65 64 20 61 0a 23 23  in. We need a.##
0280: 20 64 65 70 65 6e 64 65 6e 63 79 20 74 72 65 65   dependency tree
0290: 2e 20 49 64 65 6e 74 69 63 61 6c 20 74 6f 20 70  . Identical to p
02a0: 61 73 73 20 49 58 2c 20 65 78 63 65 70 74 20 66  ass IX, except f
02b0: 6f 72 20 74 68 65 20 73 65 6c 65 63 74 69 6f 6e  or the selection
02c0: 20 6f 66 0a 23 23 20 74 68 65 20 63 68 61 6e 67   of.## the chang
02d0: 65 73 65 74 73 2e 0a 0a 23 20 23 20 23 23 20 23  esets...# # ## #
02e0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
02f0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20  # ############# 
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 0a 23 23 20 52 65 71 75 69 72 65  #####.## Require
0320: 6d 65 6e 74 73 0a 0a 70 61 63 6b 61 67 65 20 72  ments..package r
0330: 65 71 75 69 72 65 20 54 63 6c 20 38 2e 34 20 20  equire Tcl 8.4  
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0360: 20 3b 20 23 20 52 65 71 75 69 72 65 64 20 72 75   ; # Required ru
0370: 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 67 65 20 72  ntime..package r
0380: 65 71 75 69 72 65 20 73 6e 69 74 20 20 20 20 20  equire snit     
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03b0: 20 3b 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e 0a   ; # OO system..
03c0: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
03d0: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 20 20 20  struct::list    
03e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03f0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 48 69            ; # Hi
0400: 67 68 65 72 20 6f 72 64 65 72 20 6c 69 73 74 20  gher order list 
0410: 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b  operations..pack
0420: 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a  age require vc::
0430: 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 20 20 20 20 20  tools::log      
0440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0450: 20 20 20 20 20 20 3b 20 23 20 55 73 65 72 20 66        ; # User f
0460: 65 65 64 62 61 63 6b 2e 0a 70 61 63 6b 61 67 65  eedback..package
0470: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
0480: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
0490: 3a 3a 72 65 70 6f 73 69 74 6f 72 79 20 20 20 20  ::repository    
04a0: 20 20 20 3b 20 23 20 52 65 70 6f 73 69 74 6f 72     ; # Repositor
04b0: 79 20 6d 61 6e 61 67 65 6d 65 6e 74 2e 0a 70 61  y management..pa
04c0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63  ckage require vc
04d0: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
04e0: 3a 3a 63 76 73 3a 3a 63 79 63 6c 65 62 72 65 61  ::cvs::cyclebrea
04f0: 6b 65 72 20 20 20 20 20 3b 20 23 20 42 72 65 61  ker     ; # Brea
0500: 6b 69 6e 67 20 64 65 70 65 6e 64 65 6e 63 79 20  king dependency 
0510: 63 79 63 6c 65 73 2e 0a 70 61 63 6b 61 67 65 20  cycles..package 
0520: 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73  require vc::foss
0530: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
0540: 3a 73 74 61 74 65 20 20 20 20 20 20 20 20 20 20  :state          
0550: 20 20 3b 20 23 20 53 74 61 74 65 20 73 74 6f 72    ; # State stor
0560: 61 67 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71  age..package req
0570: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a  uire vc::fossil:
0580: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e  :import::cvs::in
0590: 74 65 67 72 69 74 79 20 20 20 20 20 20 20 20 3b  tegrity        ;
05a0: 20 23 20 53 74 61 74 65 20 69 6e 74 65 67 72 69   # State integri
05b0: 74 79 20 63 68 65 63 6b 73 2e 0a 70 61 63 6b 61  ty checks..packa
05c0: 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66  ge require vc::f
05d0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
05e0: 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76  vs::project::rev
05f0: 20 20 20 20 20 3b 20 23 20 50 72 6f 6a 65 63 74       ; # Project
0600: 20 6c 65 76 65 6c 20 63 68 61 6e 67 65 73 65 74   level changeset
0610: 73 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  s..# # ## ### ##
0620: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0630: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
0640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0650: 0a 23 23 20 52 65 67 69 73 74 65 72 20 74 68 65  .## Register the
0660: 20 70 61 73 73 20 77 69 74 68 20 74 68 65 20 6d   pass with the m
0670: 61 6e 61 67 65 6d 65 6e 74 0a 0a 76 63 3a 3a 66  anagement..vc::f
0680: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
0690: 76 73 3a 3a 70 61 73 73 20 64 65 66 69 6e 65 20  vs::pass define 
06a0: 5c 0a 20 20 20 20 42 72 65 61 6b 52 65 76 43 73  \.    BreakRevCs
06b0: 65 74 43 79 63 6c 65 73 20 5c 0a 20 20 20 20 7b  etCycles \.    {
06c0: 42 72 65 61 6b 20 52 65 76 69 73 69 6f 6e 20 43  Break Revision C
06d0: 68 61 6e 67 65 53 65 74 20 44 65 70 65 6e 64 65  hangeSet Depende
06e0: 6e 63 79 20 43 79 63 6c 65 73 7d 20 5c 0a 20 20  ncy Cycles} \.  
06f0: 20 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a    ::vc::fossil::
0700: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73  import::cvs::pas
0710: 73 3a 3a 62 72 65 61 6b 72 63 79 63 6c 65 0a 0a  s::breakrcycle..
0720: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
0730: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
0740: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0750: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
0760: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76  ..snit::type ::v
0770: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0780: 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 62 72  t::cvs::pass::br
0790: 65 61 6b 72 63 79 63 6c 65 20 7b 0a 20 20 20 20  eakrcycle {.    
07a0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
07b0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
07c0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 50  #######.    ## P
07d0: 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 74  ublic API..    t
07e0: 79 70 65 6d 65 74 68 6f 64 20 73 65 74 75 70 20  ypemethod setup 
07f0: 7b 7d 20 7b 0a 09 23 20 44 65 66 69 6e 65 20 74  {} {..# Define t
0800: 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 73 74 72  he names and str
0810: 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 70 65  ucture of the pe
0820: 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f  rsistent state o
0830: 66 0a 09 23 20 74 68 69 73 20 70 61 73 73 2e 0a  f..# this pass..
0840: 0a 09 73 74 61 74 65 20 72 65 61 64 69 6e 67 20  ..state reading 
0850: 72 65 76 69 73 69 6f 6e 0a 09 73 74 61 74 65 20  revision..state 
0860: 72 65 61 64 69 6e 67 20 63 68 61 6e 67 65 73 65  reading changese
0870: 74 0a 09 73 74 61 74 65 20 72 65 61 64 69 6e 67  t..state reading
0880: 20 63 73 69 74 65 6d 0a 09 72 65 74 75 72 6e 0a   csitem..return.
0890: 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d      }..    typem
08a0: 65 74 68 6f 64 20 6c 6f 61 64 20 7b 7d 20 7b 0a  ethod load {} {.
08b0: 09 23 20 50 61 73 73 20 6d 61 6e 61 67 65 72 20  .# Pass manager 
08c0: 69 6e 74 65 72 66 61 63 65 2e 20 45 78 65 63 75  interface. Execu
08d0: 74 65 64 20 74 6f 20 6c 6f 61 64 20 64 61 74 61  ted to load data
08e0: 20 63 6f 6d 70 75 74 65 64 20 62 79 0a 09 23 20   computed by..# 
08f0: 74 68 69 73 20 70 61 73 73 20 69 6e 74 6f 20 6d  this pass into m
0900: 65 6d 6f 72 79 20 77 68 65 6e 20 74 68 69 73 20  emory when this 
0910: 70 61 73 73 20 69 73 20 73 6b 69 70 70 65 64 20  pass is skipped 
0920: 69 6e 73 74 65 61 64 20 6f 66 0a 09 23 20 65 78  instead of..# ex
0930: 65 63 75 74 65 64 2e 0a 09 72 65 74 75 72 6e 0a  ecuted...return.
0940: 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d      }..    typem
0950: 65 74 68 6f 64 20 72 75 6e 20 7b 7d 20 7b 0a 09  ethod run {} {..
0960: 23 20 50 61 73 73 20 6d 61 6e 61 67 65 72 20 69  # Pass manager i
0970: 6e 74 65 72 66 61 63 65 2e 20 45 78 65 63 75 74  nterface. Execut
0980: 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20 74 68  ed to perform th
0990: 65 0a 09 23 20 66 75 6e 63 74 69 6f 6e 61 6c 69  e..# functionali
09a0: 74 79 20 6f 66 20 74 68 65 20 70 61 73 73 2e 0a  ty of the pass..
09b0: 0a 09 63 79 63 6c 65 62 72 65 61 6b 65 72 20 62  ..cyclebreaker b
09c0: 72 65 61 6b 63 6d 64 20 7b 3a 3a 76 63 3a 3a 66  reakcmd {::vc::f
09d0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
09e0: 76 73 3a 3a 63 79 63 6c 65 62 72 65 61 6b 65 72  vs::cyclebreaker
09f0: 20 62 72 65 61 6b 7d 0a 0a 09 73 74 61 74 65 20   break}...state 
0a00: 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20  transaction {.. 
0a10: 20 20 20 63 79 63 6c 65 62 72 65 61 6b 65 72 20     cyclebreaker 
0a20: 72 75 6e 20 62 72 65 61 6b 2d 72 65 76 20 5b 6d  run break-rev [m
0a30: 79 70 72 6f 63 20 43 68 61 6e 67 65 73 65 74 73  yproc Changesets
0a40: 5d 0a 09 7d 0a 0a 09 72 65 70 6f 73 69 74 6f 72  ]..}...repositor
0a50: 79 20 70 72 69 6e 74 63 73 65 74 73 74 61 74 69  y printcsetstati
0a60: 73 74 69 63 73 0a 09 69 6e 74 65 67 72 69 74 79  stics..integrity
0a70: 20 63 68 61 6e 67 65 73 65 74 73 0a 09 72 65 74   changesets..ret
0a80: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74  urn.    }..    t
0a90: 79 70 65 6d 65 74 68 6f 64 20 64 69 73 63 61 72  ypemethod discar
0aa0: 64 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73 20 6d  d {} {..# Pass m
0ab0: 61 6e 61 67 65 72 20 69 6e 74 65 72 66 61 63 65  anager interface
0ac0: 2e 20 45 78 65 63 75 74 65 64 20 66 6f 72 20 61  . Executed for a
0ad0: 6c 6c 20 70 61 73 73 65 73 20 61 66 74 65 72 20  ll passes after 
0ae0: 74 68 65 0a 09 23 20 72 75 6e 20 70 61 73 73 65  the..# run passe
0af0: 73 2c 20 74 6f 20 72 65 6d 6f 76 65 20 61 6c 6c  s, to remove all
0b00: 20 64 61 74 61 20 6f 66 20 74 68 69 73 20 70 61   data of this pa
0b10: 73 73 20 66 72 6f 6d 20 74 68 65 20 73 74 61 74  ss from the stat
0b20: 65 2c 0a 09 23 20 61 73 20 62 65 69 6e 67 20 6f  e,..# as being o
0b30: 75 74 20 6f 66 20 64 61 74 65 2e 0a 09 72 65 74  ut of date...ret
0b40: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
0b50: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0b60: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0b70: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e  ######.    ## In
0b80: 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a  ternal methods..
0b90: 20 20 20 20 70 72 6f 63 20 43 68 61 6e 67 65 73      proc Changes
0ba0: 65 74 73 20 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72  ets {} {..log wr
0bb0: 69 74 65 20 32 20 62 72 65 61 6b 72 63 79 63 6c  ite 2 breakrcycl
0bc0: 65 20 7b 53 65 6c 65 63 74 69 6e 67 20 74 68 65  e {Selecting the
0bd0: 20 72 65 76 69 73 69 6f 6e 20 63 68 61 6e 67 65   revision change
0be0: 73 65 74 73 7d 0a 09 72 65 74 75 72 6e 20 5b 70  sets}..return [p
0bf0: 72 6f 6a 65 63 74 3a 3a 72 65 76 20 72 65 76 5d  roject::rev rev]
0c00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20  .    }..    # # 
0c10: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
0c20: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0c30: 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e 66 69  ###.    ## Confi
0c40: 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72  guration..    pr
0c50: 61 67 6d 61 20 2d 68 61 73 69 6e 73 74 61 6e 63  agma -hasinstanc
0c60: 65 73 20 20 20 6e 6f 20 3b 20 23 20 73 69 6e 67  es   no ; # sing
0c70: 6c 65 74 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61  leton.    pragma
0c80: 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20   -hastypeinfo   
0c90: 20 6e 6f 20 3b 20 23 20 6e 6f 20 69 6e 74 72 6f   no ; # no intro
0ca0: 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61  spection.    pra
0cb0: 67 6d 61 20 2d 68 61 73 74 79 70 65 64 65 73 74  gma -hastypedest
0cc0: 72 6f 79 20 6e 6f 20 3b 20 23 20 69 6d 6d 6f 72  roy no ; # immor
0cd0: 74 61 6c 0a 0a 20 20 20 20 23 20 23 20 23 23 20  tal..    # # ## 
0ce0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
0cf0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
0d00: 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76  .}..namespace ev
0d10: 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  al ::vc::fossil:
0d20: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61  :import::cvs::pa
0d30: 73 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61  ss {.    namespa
0d40: 63 65 20 65 78 70 6f 72 74 20 62 72 65 61 6b 72  ce export breakr
0d50: 63 79 63 6c 65 0a 20 20 20 20 6e 61 6d 65 73 70  cycle.    namesp
0d60: 61 63 65 20 65 76 61 6c 20 62 72 65 61 6b 72 63  ace eval breakrc
0d70: 79 63 6c 65 20 7b 0a 09 6e 61 6d 65 73 70 61 63  ycle {..namespac
0d80: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
0d90: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
0da0: 76 73 3a 3a 63 79 63 6c 65 62 72 65 61 6b 65 72  vs::cyclebreaker
0db0: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  ..namespace impo
0dc0: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  rt ::vc::fossil:
0dd0: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 72 65  :import::cvs::re
0de0: 70 6f 73 69 74 6f 72 79 0a 09 6e 61 6d 65 73 70  pository..namesp
0df0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
0e00: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
0e10: 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d  :cvs::state..nam
0e20: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
0e30: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0e40: 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69  rt::cvs::integri
0e50: 74 79 0a 09 6e 61 6d 65 73 70 61 63 65 20 65 76  ty..namespace ev
0e60: 61 6c 20 70 72 6f 6a 65 63 74 20 7b 0a 09 20 20  al project {..  
0e70: 20 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f    namespace impo
0e80: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  rt ::vc::fossil:
0e90: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72  :import::cvs::pr
0ea0: 6f 6a 65 63 74 3a 3a 72 65 76 0a 09 7d 0a 09 6e  oject::rev..}..n
0eb0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
0ec0: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67  ::vc::tools::log
0ed0: 0a 09 6c 6f 67 20 72 65 67 69 73 74 65 72 20 62  ..log register b
0ee0: 72 65 61 6b 72 63 79 63 6c 65 0a 20 20 20 20 7d  reakrcycle.    }
0ef0: 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23  .}..# # ## ### #
0f00: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
0f10: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23  ########### ####
0f20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0f30: 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b  #.## Ready..pack
0f40: 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a  age provide vc::
0f50: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
0f60: 63 76 73 3a 3a 70 61 73 73 3a 3a 62 72 65 61 6b  cvs::pass::break
0f70: 72 63 79 63 6c 65 20 31 2e 30 0a 72 65 74 75 72  rcycle 1.0.retur
0f80: 6e 0a                                            n.