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.