Hex Artifact Content
Not logged in

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.