Artifact c92253ed909c7883d7c243104ee4ed28544c555b:
File
tools/cvs2fossil/lib/c2f_pbreakacycle.tcl
part of check-in
[7f15be9078]
- Added the ability to export the changeset graphs processed by the passes 6 to 8 using GraphViz's dot-format. This is activated by using the switch '--dots'. Bugfixes in the cycle breaker. First corrected variable names, I forgot to use the standard 'myXXX' format for the typevariables. Second, fixed a bug uncovered by looking at the exported graphs, which caused the system to loose arcs, possibly breaking cycles without actually breaking them, leaving them in the dependencies.
by
aku on
2007-11-20 06:59:03.
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 49 2e 20 54 68 69 73 20 69 73 20 s VIII. This is
0210: 74 68 65 20 66 69 6e 61 6c 20 70 61 73 73 20 66 the final pass f
0220: 6f 72 20 62 72 65 61 6b 69 6e 67 20 63 68 61 6e or breaking chan
0230: 67 65 73 65 74 20 64 65 70 65 6e 64 65 6e 63 79 geset dependency
0240: 0a 23 23 20 63 79 63 6c 65 73 2e 20 54 68 65 20 .## cycles. The
0250: 74 77 6f 20 70 72 65 76 69 6f 75 73 20 70 61 73 two previous pas
0260: 73 65 73 20 62 72 6f 6b 65 20 63 79 63 6c 65 73 ses broke cycles
0270: 20 63 6f 76 65 72 69 6e 67 20 72 65 76 69 73 69 covering revisi
0280: 6f 6e 20 61 6e 64 0a 23 23 20 73 79 6d 62 6f 6c on and.## symbol
0290: 20 63 68 61 6e 67 65 73 65 74 73 2c 20 72 65 73 changesets, res
02a0: 70 65 63 74 69 76 65 6c 79 2e 20 54 68 69 73 20 pectively. This
02b0: 70 61 73 73 20 6e 6f 77 20 62 72 65 61 6b 73 20 pass now breaks
02c0: 61 6e 79 20 72 65 6d 61 69 6e 69 6e 67 0a 23 23 any remaining.##
02d0: 20 63 79 63 6c 65 73 20 65 61 63 68 20 6f 66 20 cycles each of
02e0: 77 68 69 63 68 20 68 61 73 20 74 6f 20 63 6f 6e which has to con
02f0: 74 61 69 6e 20 61 74 20 6c 65 61 73 74 20 6f 6e tain at least on
0300: 65 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 61 e revision and a
0310: 74 0a 23 23 20 6c 65 61 73 74 20 6f 6e 65 20 73 t.## least one s
0320: 79 6d 62 6f 6c 20 63 68 61 6e 67 65 73 65 74 2e ymbol changeset.
0330: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 ..# # ## ### ###
0340: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
0350: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######### ######
0360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a ###############.
0370: 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 0a ## Requirements.
0380: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 .package require
0390: 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 20 20 Tcl 8.4
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03b0: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 52 ; # R
03c0: 65 71 75 69 72 65 64 20 72 75 6e 74 69 6d 65 2e equired runtime.
03d0: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 .package require
03e0: 20 73 6e 69 74 20 20 20 20 20 20 20 20 20 20 20 snit
03f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0400: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 4f ; # O
0410: 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b 61 67 O system..packag
0420: 65 20 72 65 71 75 69 72 65 20 73 74 72 75 63 74 e require struct
0430: 3a 3a 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 ::list
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 48 69 67 68 65 72 20 6f ; # Higher o
0460: 72 64 65 72 20 6c 69 73 74 20 6f 70 65 72 61 74 rder list operat
0470: 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 ions..package re
0480: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a quire vc::tools:
0490: 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20 20 :log
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
04b0: 3b 20 23 20 55 73 65 72 20 66 65 65 64 62 61 63 ; # User feedbac
04c0: 6b 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 k..package requi
04d0: 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 re vc::fossil::i
04e0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 63 79 63 6c mport::cvs::cycl
04f0: 65 62 72 65 61 6b 65 72 20 20 20 20 20 3b 20 23 ebreaker ; #
0500: 20 42 72 65 61 6b 69 6e 67 20 64 65 70 65 6e 64 Breaking depend
0510: 65 6e 63 79 20 63 79 63 6c 65 73 2e 0a 70 61 63 ency cycles..pac
0520: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a kage require vc:
0530: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
0540: 3a 63 76 73 3a 3a 73 74 61 74 65 20 20 20 20 20 :cvs::state
0550: 20 20 20 20 20 20 20 3b 20 23 20 53 74 61 74 65 ; # State
0560: 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 6b 61 67 storage..packag
0570: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f e require vc::fo
0580: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
0590: 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 72 65 76 20 s::project::rev
05a0: 20 20 20 20 3b 20 23 20 50 72 6f 6a 65 63 74 20 ; # Project
05b0: 6c 65 76 65 6c 20 63 68 61 6e 67 65 73 65 74 73 level changesets
05c0: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 ..# # ## ### ###
05d0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
05e0: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######### ######
05f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a ###############.
0600: 23 23 20 52 65 67 69 73 74 65 72 20 74 68 65 20 ## Register the
0610: 70 61 73 73 20 77 69 74 68 20 74 68 65 20 6d 61 pass with the ma
0620: 6e 61 67 65 6d 65 6e 74 0a 0a 76 63 3a 3a 66 6f nagement..vc::fo
0630: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
0640: 73 3a 3a 70 61 73 73 20 64 65 66 69 6e 65 20 5c s::pass define \
0650: 0a 20 20 20 20 42 72 65 61 6b 41 6c 6c 43 73 65 . BreakAllCse
0660: 74 43 79 63 6c 65 73 20 5c 0a 20 20 20 20 7b 42 tCycles \. {B
0670: 72 65 61 6b 20 52 65 6d 61 69 6e 69 6e 67 20 43 reak Remaining C
0680: 68 61 6e 67 65 53 65 74 20 44 65 70 65 6e 64 65 hangeSet Depende
0690: 6e 63 79 20 43 79 63 6c 65 73 7d 20 5c 0a 20 20 ncy Cycles} \.
06a0: 20 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a ::vc::fossil::
06b0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 import::cvs::pas
06c0: 73 3a 3a 62 72 65 61 6b 61 63 79 63 6c 65 0a 0a s::breakacycle..
06d0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
06e0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
06f0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
0700: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 #############.##
0710: 20 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a ..snit::type ::
0720: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
0730: 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 62 rt::cvs::pass::b
0740: 72 65 61 6b 61 63 79 63 6c 65 20 7b 0a 20 20 20 reakacycle {.
0750: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
0760: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
0770: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 ########. ##
0780: 50 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 Public API..
0790: 74 79 70 65 6d 65 74 68 6f 64 20 73 65 74 75 70 typemethod setup
07a0: 20 7b 7d 20 7b 0a 09 23 20 44 65 66 69 6e 65 20 {} {..# Define
07b0: 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 73 74 the names and st
07c0: 72 75 63 74 75 72 65 20 6f 66 20 74 68 65 20 70 ructure of the p
07d0: 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 20 ersistent state
07e0: 6f 66 0a 09 23 20 74 68 69 73 20 70 61 73 73 2e of..# this pass.
07f0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
0800: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c typemethod l
0810: 6f 61 64 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73 oad {} {..# Pass
0820: 20 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 66 61 manager interfa
0830: 63 65 2e 20 45 78 65 63 75 74 65 64 20 74 6f 20 ce. Executed to
0840: 6c 6f 61 64 20 64 61 74 61 20 63 6f 6d 70 75 74 load data comput
0850: 65 64 20 62 79 0a 09 23 20 74 68 69 73 20 70 61 ed by..# this pa
0860: 73 73 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 77 ss into memory w
0870: 68 65 6e 20 74 68 69 73 20 70 61 73 73 20 69 73 hen this pass is
0880: 20 73 6b 69 70 70 65 64 20 69 6e 73 74 65 61 64 skipped instead
0890: 20 6f 66 0a 09 23 20 65 78 65 63 75 74 65 64 2e of..# executed.
08a0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
08b0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 72 typemethod r
08c0: 75 6e 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73 20 un {} {..# Pass
08d0: 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 66 61 63 manager interfac
08e0: 65 2e 20 45 78 65 63 75 74 65 64 20 74 6f 20 70 e. Executed to p
08f0: 65 72 66 6f 72 6d 20 74 68 65 0a 09 23 20 66 75 erform the..# fu
0900: 6e 63 74 69 6f 6e 61 6c 69 74 79 20 6f 66 20 74 nctionality of t
0910: 68 65 20 70 61 73 73 2e 0a 0a 09 73 65 74 20 63 he pass....set c
0920: 68 61 6e 67 65 73 65 74 73 20 5b 70 72 6f 6a 65 hangesets [proje
0930: 63 74 3a 3a 72 65 76 20 61 6c 6c 5d 0a 09 63 79 ct::rev all]..cy
0940: 63 6c 65 62 72 65 61 6b 65 72 20 64 6f 74 20 62 clebreaker dot b
0950: 72 65 61 6b 2d 61 6c 6c 2d 73 74 61 72 74 20 24 reak-all-start $
0960: 63 68 61 6e 67 65 73 65 74 73 0a 0a 09 72 65 74 changesets...ret
0970: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 urn. }.. t
0980: 79 70 65 6d 65 74 68 6f 64 20 64 69 73 63 61 72 ypemethod discar
0990: 64 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73 20 6d d {} {..# Pass m
09a0: 61 6e 61 67 65 72 20 69 6e 74 65 72 66 61 63 65 anager interface
09b0: 2e 20 45 78 65 63 75 74 65 64 20 66 6f 72 20 61 . Executed for a
09c0: 6c 6c 20 70 61 73 73 65 73 20 61 66 74 65 72 20 ll passes after
09d0: 74 68 65 0a 09 23 20 72 75 6e 20 70 61 73 73 65 the..# run passe
09e0: 73 2c 20 74 6f 20 72 65 6d 6f 76 65 20 61 6c 6c s, to remove all
09f0: 20 64 61 74 61 20 6f 66 20 74 68 69 73 20 70 61 data of this pa
0a00: 73 73 20 66 72 6f 6d 20 74 68 65 20 73 74 61 74 ss from the stat
0a10: 65 2c 0a 09 23 20 61 73 20 62 65 69 6e 67 20 6f e,..# as being o
0a20: 75 74 20 6f 66 20 64 61 74 65 2e 0a 09 72 65 74 ut of date...ret
0a30: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 urn. }.. #
0a40: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
0a50: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
0a60: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e ######. ## In
0a70: 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a ternal methods..
0a80: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
0a90: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
0aa0: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 ###########.
0ab0: 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e ## Configuration
0ac0: 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 .. pragma -ha
0ad0: 73 69 6e 73 74 61 6e 63 65 73 20 20 20 6e 6f 20 sinstances no
0ae0: 3b 20 23 20 73 69 6e 67 6c 65 74 6f 6e 0a 20 20 ; # singleton.
0af0: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 pragma -hastyp
0b00: 65 69 6e 66 6f 20 20 20 20 6e 6f 20 3b 20 23 20 einfo no ; #
0b10: 6e 6f 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e no introspection
0b20: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 . pragma -has
0b30: 74 79 70 65 64 65 73 74 72 6f 79 20 6e 6f 20 3b typedestroy no ;
0b40: 20 23 20 69 6d 6d 6f 72 74 61 6c 0a 0a 20 20 20 # immortal..
0b50: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
0b60: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
0b70: 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 ########.}..name
0b80: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a space eval ::vc:
0b90: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
0ba0: 3a 63 76 73 3a 3a 70 61 73 73 20 7b 0a 20 20 20 :cvs::pass {.
0bb0: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 namespace expor
0bc0: 74 20 62 72 65 61 6b 61 63 79 63 6c 65 0a 20 20 t breakacycle.
0bd0: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c namespace eval
0be0: 20 62 72 65 61 6b 61 63 79 63 6c 65 20 7b 0a 09 breakacycle {..
0bf0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
0c00: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
0c10: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 63 79 63 6c mport::cvs::cycl
0c20: 65 62 72 65 61 6b 65 72 0a 09 6e 61 6d 65 73 70 ebreaker..namesp
0c30: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
0c40: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
0c50: 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d :cvs::state..nam
0c60: 65 73 70 61 63 65 20 65 76 61 6c 20 70 72 6f 6a espace eval proj
0c70: 65 63 74 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 ect {.. names
0c80: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 pace import ::vc
0c90: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 ::fossil::import
0ca0: 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a ::cvs::project::
0cb0: 72 65 76 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 rev..}..namespac
0cc0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 e import ::vc::t
0cd0: 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6c 6f 67 20 72 ools::log..log r
0ce0: 65 67 69 73 74 65 72 20 62 72 65 61 6b 61 63 79 egister breakacy
0cf0: 63 6c 65 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 cle. }.}..# #
0d00: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
0d10: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0d20: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
0d30: 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 ##########.## Re
0d40: 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f ady..package pro
0d50: 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a vide vc::fossil:
0d60: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 :import::cvs::pa
0d70: 73 73 3a 3a 62 72 65 61 6b 61 63 79 63 6c 65 20 ss::breakacycle
0d80: 31 2e 30 0a 72 65 74 75 72 6e 0a 1.0.return.