Hex Artifact Content
Not logged in

Artifact 24924cb693d1755631ecf99c7c559ea8ee21ef1f:

File tools/cvs2fossil/lib/c2f_pbreakscycle.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 49 58 2e 20 54 68 69 73 20 70 61 73 73 20  s IX. This pass 
0210: 67 6f 65 73 20 6f 76 65 72 20 74 68 65 20 73 65  goes over the se
0220: 74 20 6f 66 20 73 79 6d 62 6f 6c 20 62 61 73 65  t of symbol base
0230: 64 20 63 68 61 6e 67 65 73 65 74 73 20 61 6e 64  d changesets and
0240: 0a 23 23 20 62 72 65 61 6b 73 20 61 6c 6c 20 64  .## breaks all d
0250: 65 70 65 6e 64 65 6e 63 79 20 63 79 63 6c 65 73  ependency cycles
0260: 20 74 68 65 79 20 6d 61 79 20 62 65 20 69 6e 2e   they may be in.
0270: 20 57 65 20 6e 65 65 64 20 61 20 64 65 70 65 6e   We need a depen
0280: 64 65 6e 63 79 0a 23 23 20 74 72 65 65 2e 20 49  dency.## tree. I
0290: 64 65 6e 74 69 63 61 6c 20 74 6f 20 70 61 73 73  dentical to pass
02a0: 20 56 49 49 2c 20 65 78 63 65 70 74 20 66 6f 72   VII, except for
02b0: 20 74 68 65 20 73 65 6c 65 63 74 69 6f 6e 20 6f   the selection o
02c0: 66 20 74 68 65 0a 23 23 20 63 68 61 6e 67 65 73  f the.## changes
02d0: 65 74 73 2e 0a 0a 23 20 23 20 23 23 20 23 23 23  ets...# # ## ###
02e0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23  ############# ##
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65  ###.## Requireme
0320: 6e 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71  nts..package req
0330: 75 69 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20  uire 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 3b                 ;
0360: 20 23 20 52 65 71 75 69 72 65 64 20 72 75 6e 74   # Required runt
0370: 69 6d 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71  ime..package req
0380: 75 69 72 65 20 73 6e 69 74 20 20 20 20 20 20 20  uire 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 3b                 ;
03b0: 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61   # OO system..pa
03c0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 74  ckage require st
03d0: 72 75 63 74 3a 3a 6c 69 73 74 20 20 20 20 20 20  ruct::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 3b 20 23 20 48 69 67 68          ; # High
0400: 65 72 20 6f 72 64 65 72 20 6c 69 73 74 20 6f 70  er order list op
0410: 65 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67  erations..packag
0420: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f  e require vc::to
0430: 6f 6c 73 3a 3a 6c 6f 67 20 20 20 20 20 20 20 20  ols::log        
0440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0450: 20 20 20 20 3b 20 23 20 55 73 65 72 20 66 65 65      ; # User fee
0460: 64 62 61 63 6b 2e 0a 70 61 63 6b 61 67 65 20 72  dback..package r
0470: 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69  equire vc::fossi
0480: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
0490: 63 79 63 6c 65 62 72 65 61 6b 65 72 20 20 20 20  cyclebreaker    
04a0: 20 3b 20 23 20 42 72 65 61 6b 69 6e 67 20 64 65   ; # Breaking de
04b0: 70 65 6e 64 65 6e 63 79 20 63 79 63 6c 65 73 2e  pendency cycles.
04c0: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
04d0: 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70   vc::fossil::imp
04e0: 6f 72 74 3a 3a 63 76 73 3a 3a 72 65 70 6f 73 69  ort::cvs::reposi
04f0: 74 6f 72 79 20 20 20 20 20 20 20 3b 20 23 20 52  tory       ; # R
0500: 65 70 6f 73 69 74 6f 72 79 20 6d 61 6e 61 67 65  epository manage
0510: 6d 65 6e 74 2e 0a 70 61 63 6b 61 67 65 20 72 65  ment..package re
0520: 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c  quire vc::fossil
0530: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73  ::import::cvs::s
0540: 74 61 74 65 20 20 20 20 20 20 20 20 20 20 20 20  tate            
0550: 3b 20 23 20 53 74 61 74 65 20 73 74 6f 72 61 67  ; # State storag
0560: 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  e..package requi
0570: 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69  re vc::fossil::i
0580: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65  mport::cvs::inte
0590: 67 72 69 74 79 20 20 20 20 20 20 20 20 3b 20 23  grity        ; #
05a0: 20 53 74 61 74 65 20 69 6e 74 65 67 72 69 74 79   State integrity
05b0: 20 63 68 65 63 6b 73 2e 0a 70 61 63 6b 61 67 65   checks..package
05c0: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
05d0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
05e0: 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 20 20  ::project::rev  
05f0: 20 20 20 3b 20 23 20 50 72 6f 6a 65 63 74 20 6c     ; # Project l
0600: 65 76 65 6c 20 63 68 61 6e 67 65 73 65 74 73 0a  evel changesets.
0610: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23  .# # ## ### ####
0620: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
0630: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
0650: 23 20 52 65 67 69 73 74 65 72 20 74 68 65 20 70  # Register the p
0660: 61 73 73 20 77 69 74 68 20 74 68 65 20 6d 61 6e  ass with the man
0670: 61 67 65 6d 65 6e 74 0a 0a 76 63 3a 3a 66 6f 73  agement..vc::fos
0680: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
0690: 3a 3a 70 61 73 73 20 64 65 66 69 6e 65 20 5c 0a  ::pass define \.
06a0: 20 20 20 20 42 72 65 61 6b 53 79 6d 43 73 65 74      BreakSymCset
06b0: 43 79 63 6c 65 73 20 5c 0a 20 20 20 20 7b 42 72  Cycles \.    {Br
06c0: 65 61 6b 20 53 79 6d 62 6f 6c 20 43 68 61 6e 67  eak Symbol Chang
06d0: 65 53 65 74 20 44 65 70 65 6e 64 65 6e 63 79 20  eSet Dependency 
06e0: 43 79 63 6c 65 73 7d 20 5c 0a 20 20 20 20 3a 3a  Cycles} \.    ::
06f0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0700: 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 62  rt::cvs::pass::b
0710: 72 65 61 6b 73 63 79 63 6c 65 0a 0a 23 20 23 20  reakscycle..# # 
0720: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
0730: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0740: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
0750: 23 23 23 23 23 23 23 23 23 0a 23 23 0a 0a 73 6e  #########.##..sn
0760: 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66  it::type ::vc::f
0770: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
0780: 76 73 3a 3a 70 61 73 73 3a 3a 62 72 65 61 6b 73  vs::pass::breaks
0790: 63 79 63 6c 65 20 7b 0a 20 20 20 20 23 20 23 20  cycle {.    # # 
07a0: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
07b0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
07c0: 23 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69  ###.    ## Publi
07d0: 63 20 41 50 49 0a 0a 20 20 20 20 74 79 70 65 6d  c API..    typem
07e0: 65 74 68 6f 64 20 73 65 74 75 70 20 7b 7d 20 7b  ethod setup {} {
07f0: 0a 09 23 20 44 65 66 69 6e 65 20 74 68 65 20 6e  ..# Define the n
0800: 61 6d 65 73 20 61 6e 64 20 73 74 72 75 63 74 75  ames and structu
0810: 72 65 20 6f 66 20 74 68 65 20 70 65 72 73 69 73  re of the persis
0820: 74 65 6e 74 20 73 74 61 74 65 20 6f 66 0a 09 23  tent state of..#
0830: 20 74 68 69 73 20 70 61 73 73 2e 0a 0a 09 73 74   this pass....st
0840: 61 74 65 20 72 65 61 64 69 6e 67 20 72 65 76 69  ate reading revi
0850: 73 69 6f 6e 0a 09 73 74 61 74 65 20 72 65 61 64  sion..state read
0860: 69 6e 67 20 63 68 61 6e 67 65 73 65 74 0a 09 73  ing changeset..s
0870: 74 61 74 65 20 72 65 61 64 69 6e 67 20 63 73 69  tate reading csi
0880: 74 65 6d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  tem..return.    
0890: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f  }..    typemetho
08a0: 64 20 6c 6f 61 64 20 7b 7d 20 7b 0a 09 23 20 50  d load {} {..# P
08b0: 61 73 73 20 6d 61 6e 61 67 65 72 20 69 6e 74 65  ass manager inte
08c0: 72 66 61 63 65 2e 20 45 78 65 63 75 74 65 64 20  rface. Executed 
08d0: 74 6f 20 6c 6f 61 64 20 64 61 74 61 20 63 6f 6d  to load data com
08e0: 70 75 74 65 64 20 62 79 0a 09 23 20 74 68 69 73  puted by..# this
08f0: 20 70 61 73 73 20 69 6e 74 6f 20 6d 65 6d 6f 72   pass into memor
0900: 79 20 77 68 65 6e 20 74 68 69 73 20 70 61 73 73  y when this pass
0910: 20 69 73 20 73 6b 69 70 70 65 64 20 69 6e 73 74   is skipped inst
0920: 65 61 64 20 6f 66 0a 09 23 20 65 78 65 63 75 74  ead of..# execut
0930: 65 64 2e 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ed...return.    
0940: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f  }..    typemetho
0950: 64 20 72 75 6e 20 7b 7d 20 7b 0a 09 23 20 50 61  d run {} {..# Pa
0960: 73 73 20 6d 61 6e 61 67 65 72 20 69 6e 74 65 72  ss manager inter
0970: 66 61 63 65 2e 20 45 78 65 63 75 74 65 64 20 74  face. Executed t
0980: 6f 20 70 65 72 66 6f 72 6d 20 74 68 65 0a 09 23  o perform the..#
0990: 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 6f   functionality o
09a0: 66 20 74 68 65 20 70 61 73 73 2e 0a 0a 09 63 79  f the pass....cy
09b0: 63 6c 65 62 72 65 61 6b 65 72 20 62 72 65 61 6b  clebreaker break
09c0: 63 6d 64 20 7b 3a 3a 76 63 3a 3a 66 6f 73 73 69  cmd {::vc::fossi
09d0: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
09e0: 63 79 63 6c 65 62 72 65 61 6b 65 72 20 62 72 65  cyclebreaker bre
09f0: 61 6b 7d 0a 0a 09 73 74 61 74 65 20 74 72 61 6e  ak}...state tran
0a00: 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 63  saction {..    c
0a10: 79 63 6c 65 62 72 65 61 6b 65 72 20 72 75 6e 20  yclebreaker run 
0a20: 62 72 65 61 6b 2d 73 79 6d 20 5b 6d 79 70 72 6f  break-sym [mypro
0a30: 63 20 43 68 61 6e 67 65 73 65 74 73 5d 0a 09 7d  c Changesets]..}
0a40: 0a 0a 09 72 65 70 6f 73 69 74 6f 72 79 20 70 72  ...repository pr
0a50: 69 6e 74 63 73 65 74 73 74 61 74 69 73 74 69 63  intcsetstatistic
0a60: 73 0a 09 69 6e 74 65 67 72 69 74 79 20 63 68 61  s..integrity cha
0a70: 6e 67 65 73 65 74 73 0a 09 72 65 74 75 72 6e 0a  ngesets..return.
0a80: 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d      }..    typem
0a90: 65 74 68 6f 64 20 64 69 73 63 61 72 64 20 7b 7d  ethod discard {}
0aa0: 20 7b 0a 09 23 20 50 61 73 73 20 6d 61 6e 61 67   {..# Pass manag
0ab0: 65 72 20 69 6e 74 65 72 66 61 63 65 2e 20 45 78  er interface. Ex
0ac0: 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20 70  ecuted for all p
0ad0: 61 73 73 65 73 20 61 66 74 65 72 20 74 68 65 0a  asses after the.
0ae0: 09 23 20 72 75 6e 20 70 61 73 73 65 73 2c 20 74  .# run passes, t
0af0: 6f 20 72 65 6d 6f 76 65 20 61 6c 6c 20 64 61 74  o remove all dat
0b00: 61 20 6f 66 20 74 68 69 73 20 70 61 73 73 20 66  a of this pass f
0b10: 72 6f 6d 20 74 68 65 20 73 74 61 74 65 2c 0a 09  rom the state,..
0b20: 23 20 61 73 20 62 65 69 6e 67 20 6f 75 74 20 6f  # as being out o
0b30: 66 20 64 61 74 65 2e 0a 09 72 65 74 75 72 6e 0a  f date...return.
0b40: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23      }..    # # #
0b50: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
0b60: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
0b70: 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e  ##.    ## Intern
0b80: 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20  al methods..    
0b90: 70 72 6f 63 20 43 68 61 6e 67 65 73 65 74 73 20  proc Changesets 
0ba0: 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20  {} {..log write 
0bb0: 32 20 62 72 65 61 6b 73 63 79 63 6c 65 20 7b 53  2 breakscycle {S
0bc0: 65 6c 65 63 74 69 6e 67 20 74 68 65 20 73 79 6d  electing the sym
0bd0: 62 6f 6c 20 63 68 61 6e 67 65 73 65 74 73 7d 0a  bol changesets}.
0be0: 09 72 65 74 75 72 6e 20 5b 70 72 6f 6a 65 63 74  .return [project
0bf0: 3a 3a 72 65 76 20 73 79 6d 5d 0a 20 20 20 20 7d  ::rev sym].    }
0c00: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
0c10: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
0c20: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
0c30: 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69    ## Configurati
0c40: 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d  on..    pragma -
0c50: 68 61 73 69 6e 73 74 61 6e 63 65 73 20 20 20 6e  hasinstances   n
0c60: 6f 20 3b 20 23 20 73 69 6e 67 6c 65 74 6f 6e 0a  o ; # singleton.
0c70: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74      pragma -hast
0c80: 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 3b 20  ypeinfo    no ; 
0c90: 23 20 6e 6f 20 69 6e 74 72 6f 73 70 65 63 74 69  # no introspecti
0ca0: 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68  on.    pragma -h
0cb0: 61 73 74 79 70 65 64 65 73 74 72 6f 79 20 6e 6f  astypedestroy no
0cc0: 20 3b 20 23 20 69 6d 6d 6f 72 74 61 6c 0a 0a 20   ; # immortal.. 
0cd0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
0ce0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0cf0: 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61  ##########.}..na
0d00: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76  mespace eval ::v
0d10: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0d20: 74 3a 3a 63 76 73 3a 3a 70 61 73 73 20 7b 0a 20  t::cvs::pass {. 
0d30: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70     namespace exp
0d40: 6f 72 74 20 62 72 65 61 6b 73 63 79 63 6c 65 0a  ort breakscycle.
0d50: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76      namespace ev
0d60: 61 6c 20 62 72 65 61 6b 73 63 79 63 6c 65 20 7b  al breakscycle {
0d70: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  ..namespace impo
0d80: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  rt ::vc::fossil:
0d90: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 63 79  :import::cvs::cy
0da0: 63 6c 65 62 72 65 61 6b 65 72 0a 09 6e 61 6d 65  clebreaker..name
0db0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
0dc0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0dd0: 74 3a 3a 63 76 73 3a 3a 72 65 70 6f 73 69 74 6f  t::cvs::reposito
0de0: 72 79 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d  ry..namespace im
0df0: 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69  port ::vc::fossi
0e00: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
0e10: 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 65  state..namespace
0e20: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
0e30: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
0e40: 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 6e 61  s::integrity..na
0e50: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 70 72 6f  mespace eval pro
0e60: 6a 65 63 74 20 7b 0a 09 20 20 20 20 6e 61 6d 65  ject {..    name
0e70: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
0e80: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0e90: 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a  t::cvs::project:
0ea0: 3a 72 65 76 0a 09 7d 0a 09 6e 61 6d 65 73 70 61  :rev..}..namespa
0eb0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
0ec0: 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6c 6f 67 20  tools::log..log 
0ed0: 72 65 67 69 73 74 65 72 20 62 72 65 61 6b 73 63  register breaksc
0ee0: 79 63 6c 65 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20  ycle.    }.}..# 
0ef0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
0f00: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0f10: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0f20: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52  ###########.## R
0f30: 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72  eady..package pr
0f40: 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c  ovide vc::fossil
0f50: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70  ::import::cvs::p
0f60: 61 73 73 3a 3a 62 72 65 61 6b 73 63 79 63 6c 65  ass::breakscycle
0f70: 20 31 2e 30 0a 72 65 74 75 72 6e 0a               1.0.return.