Artifact f4f21fda7f279277c72eccdfafc6bf8464046765:
File
tools/cvs2fossil/lib/c2f_frev.tcl
part of check-in
[510cd02303]
- Continued the work on pass II, wrangling a file into shape. Completed handling of unnecessary initial deletions on branches.
by
aku on
2007-10-19 07:23:57.
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 52 65 76 ########..## Rev
0200: 69 73 69 6f 6e 73 20 70 65 72 20 66 69 6c 65 2e isions per file.
0210: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 ..# # ## ### ###
0220: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
0230: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######### ######
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a ###############.
0250: 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 0a ## Requirements.
0260: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 .package require
0270: 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 20 20 Tcl 8.4
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0290: 20 20 20 20 20 3b 20 23 20 52 65 71 75 69 72 65 ; # Require
02a0: 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 d runtime..packa
02b0: 67 65 20 72 65 71 75 69 72 65 20 73 6e 69 74 20 ge require snit
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ;
02e0: 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61 # OO system..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 ckage require vc
0300: 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 ::tools::misc
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0320: 20 20 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61 ; # Text forma
0330: 74 74 69 6e 67 0a 0a 23 20 23 20 23 23 20 23 23 tting..# # ## ##
0340: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
0350: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 ############# #
0360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0370: 23 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74 3a 3a ####.## ..snit::
0380: 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 type ::vc::fossi
0390: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a l::import::cvs::
03a0: 66 69 6c 65 3a 3a 72 65 76 20 7b 0a 20 20 20 20 file::rev {.
03b0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
03c0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
03d0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 50 #######. ## P
03e0: 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 63 ublic API.. c
03f0: 6f 6e 73 74 72 75 63 74 6f 72 20 7b 72 65 76 6e onstructor {revn
0400: 72 20 64 61 74 65 20 73 74 61 74 65 20 74 68 65 r date state the
0410: 66 69 6c 65 7d 20 7b 0a 09 73 65 74 20 6d 79 72 file} {..set myr
0420: 65 76 6e 72 20 20 20 20 24 72 65 76 6e 72 0a 09 evnr $revnr..
0430: 73 65 74 20 6d 79 64 61 74 65 20 20 20 20 20 24 set mydate $
0440: 64 61 74 65 0a 09 73 65 74 20 6d 79 6f 72 69 67 date..set myorig
0450: 64 61 74 65 20 24 64 61 74 65 0a 09 73 65 74 20 date $date..set
0460: 6d 79 73 74 61 74 65 20 20 20 20 24 73 74 61 74 mystate $stat
0470: 65 0a 09 73 65 74 20 6d 79 66 69 6c 65 20 20 20 e..set myfile
0480: 20 20 24 74 68 65 66 69 6c 65 0a 09 72 65 74 75 $thefile..retu
0490: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 rn. }.. #
04a0: 42 61 73 69 63 20 70 69 65 63 65 73 20 5f 5f 5f Basic pieces ___
04b0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ________________
04c0: 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f _____.. metho
04d0: 64 20 68 61 73 6d 65 74 61 20 7b 7d 20 7b 20 72 d hasmeta {} { r
04e0: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 eturn [expr {$my
04f0: 6d 65 74 61 69 64 20 6e 65 20 22 22 7d 5d 20 7d metaid ne ""}] }
0500: 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61 73 74 . method hast
0510: 65 78 74 20 7b 7d 20 7b 0a 09 73 74 72 75 63 74 ext {} {..struct
0520: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 6d ::list assign $m
0530: 79 74 65 78 74 20 73 20 65 0a 09 72 65 74 75 72 ytext s e..retur
0540: 6e 20 5b 65 78 70 72 20 7b 24 73 20 3c 3d 20 24 n [expr {$s <= $
0550: 65 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d e}]. }.. m
0560: 65 74 68 6f 64 20 73 65 74 6d 65 74 61 20 7b 6d ethod setmeta {m
0570: 65 74 61 7d 20 7b 20 73 65 74 20 6d 79 6d 65 74 eta} { set mymet
0580: 61 69 64 20 24 6d 65 74 61 20 3b 20 72 65 74 75 aid $meta ; retu
0590: 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 rn }. method
05a0: 73 65 74 74 65 78 74 20 7b 74 65 78 74 7d 20 7b settext {text} {
05b0: 20 73 65 74 20 6d 79 74 65 78 74 20 20 20 24 74 set mytext $t
05c0: 65 78 74 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20 ext ; return }.
05d0: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 6c 6f 64 method setlod
05e0: 20 20 7b 6c 6f 64 7d 20 20 7b 20 73 65 74 20 6d {lod} { set m
05f0: 79 6c 6f 64 20 20 20 20 24 6c 6f 64 20 20 3b 20 ylod $lod ;
0600: 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 return }.. me
0610: 74 68 6f 64 20 72 65 76 6e 72 20 7b 7d 20 7b 20 thod revnr {} {
0620: 72 65 74 75 72 6e 20 24 6d 79 72 65 76 6e 72 20 return $myrevnr
0630: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 74 61 }. method sta
0640: 74 65 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 te {} { return $
0650: 6d 79 73 74 61 74 65 20 7d 0a 20 20 20 20 6d 65 mystate }. me
0660: 74 68 6f 64 20 6c 6f 64 20 20 20 7b 7d 20 7b 20 thod lod {} {
0670: 72 65 74 75 72 6e 20 24 6d 79 6c 6f 64 20 20 20 return $mylod
0680: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 61 74 }. method dat
0690: 65 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 e {} { return $
06a0: 6d 79 64 61 74 65 20 20 7d 0a 0a 20 20 20 20 6d mydate }.. m
06b0: 65 74 68 6f 64 20 69 73 6e 65 65 64 65 64 20 7b ethod isneeded {
06c0: 7d 20 7b 0a 09 69 66 20 7b 24 6d 79 6f 70 65 72 } {..if {$myoper
06d0: 61 74 69 6f 6e 20 6e 65 20 22 6e 6f 74 68 69 6e ation ne "nothin
06e0: 67 22 7d 20 20 20 20 20 20 20 20 20 7b 72 65 74 g"} {ret
06f0: 75 72 6e 20 31 7d 0a 09 69 66 20 7b 24 6d 79 72 urn 1}..if {$myr
0700: 65 76 6e 72 20 6e 65 20 22 31 2e 31 22 7d 20 20 evnr ne "1.1"}
0710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b {
0720: 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 20 7b 21 return 1}..if {!
0730: 5b 24 6d 79 6c 6f 64 20 69 73 74 72 75 6e 6b 5d [$mylod istrunk]
0740: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 }
0750: 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 {return 1}..if
0760: 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 62 {![llength $myb
0770: 72 61 6e 63 68 65 73 5d 7d 20 20 20 20 20 20 20 ranches]}
0780: 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a {return 1}.
0790: 09 73 65 74 20 66 69 72 73 74 62 72 61 6e 63 68 .set firstbranch
07a0: 20 5b 6c 69 6e 64 65 78 20 24 6d 79 62 72 61 6e [lindex $mybran
07b0: 63 68 65 73 20 30 5d 0a 09 69 66 20 7b 21 5b 24 ches 0]..if {![$
07c0: 66 69 72 73 74 62 72 61 6e 63 68 20 68 61 73 63 firstbranch hasc
07d0: 68 69 6c 64 5d 7d 20 20 20 20 20 20 20 20 20 20 hild]}
07e0: 7b 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 20 7b {return 1}..if {
07f0: 24 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 $myisondefaultbr
0800: 61 6e 63 68 7d 20 20 20 20 20 20 20 20 20 20 20 anch}
0810: 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a 0a 09 {return 1}...
0820: 23 20 46 49 58 3a 20 54 68 69 73 20 6d 65 73 73 # FIX: This mess
0830: 61 67 65 20 77 69 6c 6c 20 6e 6f 74 20 6d 61 74 age will not mat
0840: 63 68 20 69 66 20 74 68 65 20 52 43 53 20 66 69 ch if the RCS fi
0850: 6c 65 20 77 61 73 20 72 65 6e 61 6d 65 64 0a 09 le was renamed..
0860: 23 20 6d 61 6e 75 61 6c 6c 79 20 61 66 74 65 72 # manually after
0870: 20 69 74 20 77 61 73 20 63 72 65 61 74 65 64 2e it was created.
0880: 0a 0a 09 73 65 74 20 67 65 6e 20 22 66 69 6c 65 ...set gen "file
0890: 20 5b 66 69 6c 65 20 74 61 69 6c 20 5b 24 6d 79 [file tail [$my
08a0: 66 69 6c 65 20 75 73 72 70 61 74 68 5d 5d 20 77 file usrpath]] w
08b0: 61 73 20 69 6e 69 74 69 61 6c 6c 79 20 61 64 64 as initially add
08c0: 65 64 20 6f 6e 20 62 72 61 6e 63 68 20 5b 24 66 ed on branch [$f
08d0: 69 72 73 74 62 72 61 6e 63 68 20 6e 61 6d 65 5d irstbranch name]
08e0: 2e 22 0a 09 73 65 74 20 6c 6f 67 20 5b 24 6d 79 ."..set log [$my
08f0: 66 69 6c 65 20 63 6f 6d 6d 69 74 6d 65 73 73 61 file commitmessa
0900: 67 65 6f 66 20 24 6d 79 6d 65 74 61 69 64 5d 0a geof $mymetaid].
0910: 0a 09 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b ..return [expr {
0920: 24 6c 6f 67 20 6e 65 20 24 67 65 6e 7d 5d 0a 20 $log ne $gen}].
0930: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
0940: 20 69 73 6e 65 65 64 65 64 62 72 61 6e 63 68 64 isneededbranchd
0950: 65 6c 20 7b 7d 20 7b 0a 09 69 66 20 7b 24 6d 79 el {} {..if {$my
0960: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 65 71 20 parentbranch eq
0970: 22 22 7d 20 20 20 20 20 20 20 20 20 20 20 7b 72 ""} {r
0980: 65 74 75 72 6e 20 31 7d 20 3b 20 23 20 6e 6f 74 eturn 1} ; # not
0990: 20 66 69 72 73 74 20 6f 6e 20 61 20 62 72 61 6e first on a bran
09a0: 63 68 2c 20 6e 65 65 64 65 64 0a 09 73 65 74 20 ch, needed..set
09b0: 62 61 73 65 20 5b 24 6d 79 70 61 72 65 6e 74 62 base [$myparentb
09c0: 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 0a 09 69 ranch parent]..i
09d0: 66 20 7b 24 62 61 73 65 20 20 20 20 20 20 20 20 f {$base
09e0: 20 20 20 65 71 20 22 22 7d 20 20 20 20 20 20 20 eq ""}
09f0: 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b {return 1} ;
0a00: 20 23 20 62 72 61 6e 63 68 20 68 61 73 20 70 61 # branch has pa
0a10: 72 65 6e 74 20 6c 6f 64 2c 20 6e 65 65 64 65 64 rent lod, needed
0a20: 0a 09 69 66 20 7b 5b 24 73 65 6c 66 20 4c 4f 44 ..if {[$self LOD
0a30: 4c 65 6e 67 74 68 5d 20 3c 20 32 7d 20 20 20 20 Length] < 2}
0a40: 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31 {return 1
0a50: 7d 20 3b 20 23 20 6f 75 72 20 6c 6f 64 20 63 6f } ; # our lod co
0a60: 6e 74 61 69 6e 73 20 6f 6e 6c 79 20 6f 75 72 73 ntains only ours
0a70: 65 6c 76 65 73 2c 20 6e 65 65 64 65 64 2e 0a 09 elves, needed...
0a80: 69 66 20 7b 24 6d 79 6f 70 65 72 61 74 69 6f 6e if {$myoperation
0a90: 20 6e 65 20 22 64 65 6c 65 74 65 22 7d 20 20 20 ne "delete"}
0aa0: 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 20 {return 1}
0ab0: 3b 20 23 20 4e 6f 74 20 61 20 64 65 6c 65 74 69 ; # Not a deleti
0ac0: 6f 6e 2c 20 6e 65 65 64 65 64 0a 09 69 66 20 7b on, needed..if {
0ad0: 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 74 61 67 73 [llength $mytags
0ae0: 5d 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ]}
0af0: 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b 20 23 20 {return 1} ; #
0b00: 48 61 76 65 20 74 61 67 73 2c 20 6e 65 65 64 65 Have tags, neede
0b10: 64 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 d..if {[llength
0b20: 24 6d 79 62 72 61 6e 63 68 65 73 5d 7d 20 20 20 $mybranches]}
0b30: 20 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e 20 {return
0b40: 31 7d 20 3b 20 23 20 48 61 76 65 20 6f 74 68 65 1} ; # Have othe
0b50: 72 20 62 72 61 6e 63 68 65 73 2c 20 6e 65 65 64 r branches, need
0b60: 65 64 0a 09 69 66 20 7b 61 62 73 28 24 6d 79 64 ed..if {abs($myd
0b70: 61 74 65 20 2d 20 5b 24 62 61 73 65 20 64 61 74 ate - [$base dat
0b80: 65 5d 29 20 3e 20 32 7d 20 7b 72 65 74 75 72 6e e]) > 2} {return
0b90: 20 31 7d 20 3b 20 23 20 4e 65 78 74 20 72 65 76 1} ; # Next rev
0ba0: 20 3e 20 32 20 73 65 63 6f 6e 64 73 20 61 70 61 > 2 seconds apa
0bb0: 72 74 2c 20 6e 65 65 64 65 64 0a 0a 20 20 20 20 rt, needed..
0bc0: 20 20 20 20 23 20 46 49 58 4d 45 3a 20 54 68 69 # FIXME: Thi
0bd0: 73 20 6d 65 73 73 61 67 65 20 77 69 6c 6c 20 6e s message will n
0be0: 6f 74 20 6d 61 74 63 68 20 69 66 20 74 68 65 20 ot match if the
0bf0: 52 43 53 20 66 69 6c 65 20 77 61 73 0a 20 20 20 RCS file was.
0c00: 20 20 20 20 20 23 20 72 65 6e 61 6d 65 64 20 6d # renamed m
0c10: 61 6e 75 61 6c 6c 79 20 61 66 74 65 72 20 69 74 anually after it
0c20: 20 77 61 73 20 63 72 65 61 74 65 64 2e 0a 0a 09 was created....
0c30: 73 65 74 20 71 66 69 6c 65 20 5b 73 74 72 69 6e set qfile [strin
0c40: 67 20 6d 61 70 20 7b 0a 09 20 20 20 20 2e 20 20 g map {.. .
0c50: 5c 5c 2e 20 20 3f 20 20 5c 5c 3f 20 20 2a 20 20 \\. ? \\? *
0c60: 5c 5c 2a 20 20 5c 5c 20 5c 5c 5c 5c 20 2b 20 20 \\* \\ \\\\ +
0c70: 5c 5c 2b 20 20 5e 20 5c 5c 5e 20 24 20 5c 5c 24 \\+ ^ \\^ $ \\$
0c80: 0a 09 20 20 20 20 5c 5b 20 5c 5c 5c 5b 20 5c 5d .. \[ \\\[ \]
0c90: 20 5c 5c 5c 5d 20 28 20 20 5c 5c 28 20 20 20 29 \\\] ( \\( )
0ca0: 20 5c 5c 29 20 20 5c 7b 20 5c 5c 5c 7b 20 5c 7d \\) \{ \\\{ \}
0cb0: 20 5c 5c 5c 7d 0a 09 7d 20 5b 66 69 6c 65 20 74 \\\}..} [file t
0cc0: 61 69 6c 20 5b 24 6d 79 66 69 6c 65 20 75 73 72 ail [$myfile usr
0cd0: 70 61 74 68 5d 5d 5d 0a 09 73 65 74 20 70 61 74 path]]]..set pat
0ce0: 74 65 72 6e 20 22 66 69 6c 65 20 24 71 66 69 6c tern "file $qfil
0cf0: 65 20 77 61 73 20 61 64 64 65 64 20 6f 6e 20 62 e was added on b
0d00: 72 61 6e 63 68 20 2e 2a 20 6f 6e 20 5c 5c 64 7b ranch .* on \\d{
0d10: 34 7d 2d 5c 5c 64 7b 32 7d 2d 5c 5c 64 7b 32 7d 4}-\\d{2}-\\d{2}
0d20: 20 5c 5c 64 7b 32 7d 3a 5c 5c 64 7b 32 7d 3a 5c \\d{2}:\\d{2}:\
0d30: 5c 64 7b 32 7d 28 20 5c 5b 2b 2d 5c 5d 5c 5c 64 \d{2}( \[+-\]\\d
0d40: 7b 34 7d 29 3f 22 0a 09 73 65 74 20 6c 6f 67 20 {4})?"..set log
0d50: 20 20 20 20 5b 24 6d 79 66 69 6c 65 20 63 6f 6d [$myfile com
0d60: 6d 69 74 6d 65 73 73 61 67 65 6f 66 20 24 6d 79 mitmessageof $my
0d70: 6d 65 74 61 69 64 5d 0a 0a 09 23 20 4e 6f 74 20 metaid]...# Not
0d80: 74 68 65 20 73 70 65 63 69 61 6c 20 6d 65 73 73 the special mess
0d90: 61 67 65 2c 20 6e 65 65 64 65 64 0a 09 69 66 20 age, needed..if
0da0: 7b 21 5b 72 65 67 65 78 70 20 2d 2d 20 24 70 61 {![regexp -- $pa
0db0: 74 74 65 72 6e 20 24 6c 6f 67 5d 7d 20 7b 72 65 ttern $log]} {re
0dc0: 74 75 72 6e 20 31 7d 0a 0a 09 23 20 54 68 69 73 turn 1}...# This
0dd0: 20 69 73 20 61 6e 20 75 6e 6e 65 65 64 65 64 20 is an unneeded
0de0: 69 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20 64 initial branch d
0df0: 65 6c 65 74 65 2e 0a 09 72 65 74 75 72 6e 20 30 elete...return 0
0e00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
0e10: 6f 64 20 4c 4f 44 4c 65 6e 67 74 68 20 7b 7d 20 od LODLength {}
0e20: 7b 0a 09 73 65 74 20 6e 20 31 20 3b 20 23 20 63 {..set n 1 ; # c
0e30: 6f 75 6e 74 20 73 65 6c 66 0a 09 73 65 74 20 72 ount self..set r
0e40: 65 76 20 24 6d 79 63 68 69 6c 64 0a 09 77 68 69 ev $mychild..whi
0e50: 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 le {$rev ne ""}
0e60: 7b 0a 09 20 20 20 20 69 6e 63 72 20 6e 0a 09 20 {.. incr n..
0e70: 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 set rev [$rev
0e80: 20 63 68 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 child]..}..retu
0e90: 72 6e 20 24 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 rn $n. }..
0ea0: 20 23 20 42 61 73 69 63 20 70 61 72 65 6e 74 2f # Basic parent/
0eb0: 63 68 69 6c 64 20 6c 69 6e 6b 61 67 65 20 5f 5f child linkage __
0ec0: 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 ________.. me
0ed0: 74 68 6f 64 20 68 61 73 70 61 72 65 6e 74 20 7b thod hasparent {
0ee0: 7d 20 7b 20 72 65 74 75 72 6e 20 5b 65 78 70 72 } { return [expr
0ef0: 20 7b 24 6d 79 70 61 72 65 6e 74 20 6e 65 20 22 {$myparent ne "
0f00: 22 7d 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 "}] }. method
0f10: 20 68 61 73 63 68 69 6c 64 20 20 7b 7d 20 7b 20 haschild {} {
0f20: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d return [expr {$m
0f30: 79 63 68 69 6c 64 20 20 6e 65 20 22 22 7d 5d 20 ychild ne ""}]
0f40: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 }.. method se
0f50: 74 70 61 72 65 6e 74 20 7b 70 61 72 65 6e 74 7d tparent {parent}
0f60: 20 7b 0a 09 69 66 20 7b 24 6d 79 70 61 72 65 6e {..if {$myparen
0f70: 74 20 6e 65 20 22 22 7d 20 7b 20 74 72 6f 75 62 t ne ""} { troub
0f80: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 50 61 72 le internal "Par
0f90: 65 6e 74 20 61 6c 72 65 61 64 79 20 64 65 66 69 ent already defi
0fa0: 6e 65 64 22 20 7d 0a 09 73 65 74 20 6d 79 70 61 ned" }..set mypa
0fb0: 72 65 6e 74 20 24 70 61 72 65 6e 74 0a 09 72 65 rent $parent..re
0fc0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
0fd0: 6d 65 74 68 6f 64 20 63 75 74 66 72 6f 6d 70 61 method cutfrompa
0fe0: 72 65 6e 74 20 7b 7d 20 7b 20 73 65 74 20 6d 79 rent {} { set my
0ff0: 70 61 72 65 6e 74 20 22 22 20 3b 20 72 65 74 75 parent "" ; retu
1000: 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 rn }. method
1010: 63 75 74 66 72 6f 6d 63 68 69 6c 64 20 20 7b 7d cutfromchild {}
1020: 20 7b 20 73 65 74 20 6d 79 63 68 69 6c 64 20 20 { set mychild
1030: 22 22 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 "" ; return }..
1040: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 63 68 69 method setchi
1050: 6c 64 20 7b 63 68 69 6c 64 7d 20 7b 0a 09 69 66 ld {child} {..if
1060: 20 7b 24 6d 79 63 68 69 6c 64 20 6e 65 20 22 22 {$mychild ne ""
1070: 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 } { trouble inte
1080: 72 6e 61 6c 20 22 43 68 69 6c 64 20 61 6c 72 65 rnal "Child alre
1090: 61 64 79 20 64 65 66 69 6e 65 64 22 20 7d 0a 09 ady defined" }..
10a0: 73 65 74 20 6d 79 63 68 69 6c 64 20 24 63 68 69 set mychild $chi
10b0: 6c 64 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d ld..return. }
10c0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 61 72 .. method par
10d0: 65 6e 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 ent {} { return
10e0: 24 6d 79 70 61 72 65 6e 74 20 7d 0a 20 20 20 20 $myparent }.
10f0: 6d 65 74 68 6f 64 20 63 68 69 6c 64 20 20 7b 7d method child {}
1100: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 63 68 69 { return $mychi
1110: 6c 64 20 20 7d 0a 0a 20 20 20 20 23 20 42 72 61 ld }.. # Bra
1120: 6e 63 68 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f nch linkage ____
1130: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ________________
1140: 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 __.. method s
1150: 65 74 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b etparentbranch {
1160: 62 72 61 6e 63 68 7d 20 7b 0a 09 69 66 20 7b 24 branch} {..if {$
1170: 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20 6e myparentbranch n
1180: 65 20 22 22 7d 20 7b 20 74 72 6f 75 62 6c 65 20 e ""} { trouble
1190: 69 6e 74 65 72 6e 61 6c 20 22 42 72 61 6e 63 68 internal "Branch
11a0: 20 70 61 72 65 6e 74 20 61 6c 72 65 61 64 79 20 parent already
11b0: 64 65 66 69 6e 65 64 22 20 7d 0a 09 73 65 74 20 defined" }..set
11c0: 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 myparentbranch $
11d0: 62 72 61 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20 branch..return.
11e0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
11f0: 20 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d parentbranch {}
1200: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 61 72 { return $mypar
1210: 65 6e 74 62 72 61 6e 63 68 20 7d 0a 20 20 20 20 entbranch }.
1220: 6d 65 74 68 6f 64 20 62 72 61 6e 63 68 65 73 20 method branches
1230: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 {} { return
1240: 24 6d 79 62 72 61 6e 63 68 65 73 20 7d 0a 0a 20 $mybranches }..
1250: 20 20 20 6d 65 74 68 6f 64 20 61 64 64 62 72 61 method addbra
1260: 6e 63 68 20 7b 62 72 61 6e 63 68 7d 20 7b 0a 09 nch {branch} {..
1270: 6c 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63 68 lappend mybranch
1280: 65 73 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75 es $branch..retu
1290: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
12a0: 74 68 6f 64 20 61 64 64 63 68 69 6c 64 6f 6e 62 thod addchildonb
12b0: 72 61 6e 63 68 20 7b 63 68 69 6c 64 7d 20 7b 0a ranch {child} {.
12c0: 09 6c 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63 .lappend mybranc
12d0: 68 63 68 69 6c 64 72 65 6e 20 24 63 68 69 6c 64 hchildren $child
12e0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
12f0: 20 20 20 20 6d 65 74 68 6f 64 20 63 75 74 66 72 method cutfr
1300: 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b omparentbranch {
1310: 7d 20 7b 20 73 65 74 20 6d 79 70 61 72 65 6e 74 } { set myparent
1320: 62 72 61 6e 63 68 20 22 22 20 3b 20 72 65 74 75 branch "" ; retu
1330: 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 rn }.. method
1340: 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 7b 62 removebranch {b
1350: 72 61 6e 63 68 7d 20 7b 0a 09 6c 64 65 6c 65 74 ranch} {..ldelet
1360: 65 20 6d 79 62 72 61 6e 63 68 65 73 20 24 62 72 e mybranches $br
1370: 61 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20 20 20 anch..return.
1380: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 }.. method r
1390: 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e emovechildonbran
13a0: 63 68 20 7b 72 65 76 7d 20 7b 0a 09 6c 64 65 6c ch {rev} {..ldel
13b0: 65 74 65 20 6d 79 62 72 61 6e 63 68 63 68 69 6c ete mybranchchil
13c0: 64 72 65 6e 20 24 72 65 76 0a 09 72 65 74 75 72 dren $rev..retur
13d0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
13e0: 68 6f 64 20 73 6f 72 74 62 72 61 6e 63 68 65 73 hod sortbranches
13f0: 20 7b 7d 20 7b 0a 09 69 66 20 7b 21 5b 6c 6c 65 {} {..if {![lle
1400: 6e 67 74 68 20 24 6d 79 62 72 61 6e 63 68 65 73 ngth $mybranches
1410: 5d 7d 20 72 65 74 75 72 6e 0a 0a 09 23 20 53 6f ]} return...# So
1420: 72 74 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 rt the branches
1430: 73 70 61 77 6e 65 64 20 62 79 20 74 68 69 73 20 spawned by this
1440: 72 65 76 69 73 69 6f 6e 20 69 6e 20 63 72 65 61 revision in crea
1450: 74 69 6f 6e 0a 09 23 20 6f 72 64 65 72 2e 20 54 tion..# order. T
1460: 6f 20 68 65 6c 70 20 69 6e 20 74 68 69 73 20 6f o help in this o
1470: 75 72 20 66 69 6c 65 20 67 61 76 65 20 61 6c 6c ur file gave all
1480: 20 62 72 61 6e 63 68 65 73 20 61 20 70 6f 73 69 branches a posi
1490: 74 69 6f 6e 0a 09 23 20 69 64 2c 20 69 6e 20 6f tion..# id, in o
14a0: 72 64 65 72 20 6f 66 20 74 68 65 69 72 20 64 65 rder of their de
14b0: 66 69 6e 69 74 69 6f 6e 20 62 79 20 74 68 65 20 finition by the
14c0: 52 43 53 20 61 72 63 68 69 76 65 2e 0a 09 23 0a RCS archive...#.
14d0: 09 23 20 54 68 65 20 63 72 65 61 74 69 6f 6e 20 .# The creation
14e0: 6f 72 64 65 72 20 69 73 20 28 61 70 70 61 72 65 order is (appare
14f0: 6e 74 6c 79 29 20 74 68 65 20 72 65 76 65 72 73 ntly) the revers
1500: 65 20 6f 66 20 74 68 65 0a 09 23 20 64 65 66 69 e of the..# defi
1510: 6e 69 74 69 6f 6e 20 6f 72 64 65 72 2e 20 28 49 nition order. (I
1520: 66 20 61 20 62 72 61 6e 63 68 20 69 73 20 63 72 f a branch is cr
1530: 65 61 74 65 64 20 74 68 65 6e 20 64 65 6c 65 74 eated then delet
1540: 65 64 2c 20 61 0a 09 23 20 6c 61 74 65 72 20 62 ed, a..# later b
1550: 72 61 6e 63 68 20 63 61 6e 20 62 65 20 61 73 73 ranch can be ass
1560: 69 67 6e 65 64 20 74 68 65 20 72 65 63 79 63 6c igned the recycl
1570: 65 64 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 ed branch number
1580: 3b 0a 09 23 20 74 68 65 72 65 66 6f 72 65 20 62 ;..# therefore b
1590: 72 61 6e 63 68 20 6e 75 6d 62 65 72 73 20 61 72 ranch numbers ar
15a0: 65 20 6e 6f 74 20 61 6e 20 69 6e 64 69 63 61 74 e not an indicat
15b0: 69 6f 6e 20 6f 66 20 63 72 65 61 74 69 6f 6e 0a ion of creation.
15c0: 09 23 20 6f 72 64 65 72 2e 29 0a 0a 09 73 65 74 .# order.)...set
15d0: 20 74 6d 70 20 7b 7d 0a 09 66 6f 72 65 61 63 68 tmp {}..foreach
15e0: 20 62 72 61 6e 63 68 20 24 6d 79 62 72 61 6e 63 branch $mybranc
15f0: 68 65 73 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 hes {.. lappe
1600: 6e 64 20 74 6d 70 20 5b 6c 69 73 74 20 24 62 72 nd tmp [list $br
1610: 61 6e 63 68 20 5b 24 62 72 61 6e 63 68 20 70 6f anch [$branch po
1620: 73 69 74 69 6f 6e 5d 5d 0a 09 7d 0a 0a 09 73 65 sition]]..}...se
1630: 74 20 6d 79 62 72 61 6e 63 68 65 73 20 7b 7d 0a t mybranches {}.
1640: 09 66 6f 72 65 61 63 68 20 69 74 65 6d 20 5b 6c .foreach item [l
1650: 73 6f 72 74 20 2d 69 6e 64 65 78 20 31 20 2d 64 sort -index 1 -d
1660: 65 63 72 65 61 73 69 6e 67 20 24 74 6d 70 5d 20 ecreasing $tmp]
1670: 7b 0a 09 20 20 20 20 73 74 72 75 63 74 3a 3a 6c {.. struct::l
1680: 69 73 74 20 61 73 73 69 67 6e 20 24 69 74 65 6d ist assign $item
1690: 20 62 72 61 6e 63 68 20 70 6f 73 69 74 69 6f 6e branch position
16a0: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 .. lappend my
16b0: 62 72 61 6e 63 68 65 73 20 24 62 72 61 6e 63 68 branches $branch
16c0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
16d0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6d 6f }.. method mo
16e0: 76 65 62 72 61 6e 63 68 65 73 74 6f 20 7b 72 65 vebranchesto {re
16f0: 76 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 6f 64 v} {..set revlod
1700: 20 5b 24 72 65 76 20 6c 6f 64 5d 0a 09 66 6f 72 [$rev lod]..for
1710: 65 61 63 68 20 62 72 61 6e 63 68 20 24 6d 79 62 each branch $myb
1720: 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 24 ranches {.. $
1730: 72 65 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 rev addbranch $b
1740: 72 61 6e 63 68 0a 09 20 20 20 20 24 62 72 61 6e ranch.. $bran
1750: 63 68 20 73 65 74 70 61 72 65 6e 74 20 24 72 65 ch setparent $re
1760: 76 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 v.. $branch s
1770: 65 74 6c 6f 64 20 24 72 65 76 6c 6f 64 0a 09 7d etlod $revlod..}
1780: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 ..foreach branch
1790: 72 65 76 20 24 6d 79 62 72 61 6e 63 68 63 68 69 rev $mybranchchi
17a0: 6c 64 72 65 6e 20 7b 0a 09 20 20 20 20 24 72 65 ldren {.. $re
17b0: 76 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e v addchildonbran
17c0: 63 68 20 24 62 72 61 6e 63 68 72 65 76 0a 09 20 ch $branchrev..
17d0: 20 20 20 24 62 72 61 6e 63 68 72 65 76 20 63 75 $branchrev cu
17e0: 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 20 20 20 tfromparent..
17f0: 20 24 62 72 61 6e 63 68 72 65 76 20 73 65 74 70 $branchrev setp
1800: 61 72 65 6e 74 20 24 72 65 76 0a 09 7d 0a 09 73 arent $rev..}..s
1810: 65 74 20 6d 79 62 72 61 6e 63 68 65 73 20 20 20 et mybranches
1820: 20 20 20 20 7b 7d 0a 09 73 65 74 20 6d 79 62 72 {}..set mybr
1830: 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d 0a anchchildren {}.
1840: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
1850: 20 20 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65 method remove
1860: 61 6c 6c 62 72 61 6e 63 68 65 73 20 7b 7d 20 7b allbranches {} {
1870: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 ..foreach branch
1880: 20 24 6d 79 62 72 61 6e 63 68 65 73 20 7b 0a 09 $mybranches {..
1890: 20 20 20 20 24 62 72 61 6e 63 68 20 64 65 73 74 $branch dest
18a0: 72 6f 79 0a 09 7d 0a 09 73 65 74 20 6d 79 62 72 roy..}..set mybr
18b0: 61 6e 63 68 65 73 20 20 20 20 20 20 20 7b 7d 0a anches {}.
18c0: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 63 68 69 .set mybranchchi
18d0: 6c 64 72 65 6e 20 7b 7d 0a 09 72 65 74 75 72 6e ldren {}..return
18e0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 54 61 . }.. # Ta
18f0: 67 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f g linkage ______
1900: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ________________
1910: 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 ___.. method
1920: 61 64 64 74 61 67 20 7b 74 61 67 7d 20 7b 0a 09 addtag {tag} {..
1930: 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 20 24 lappend mytags $
1940: 74 61 67 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 tag..return.
1950: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65 }.. method re
1960: 6d 6f 76 65 61 6c 6c 74 61 67 73 20 7b 7d 20 7b movealltags {} {
1970: 0a 09 66 6f 72 65 61 63 68 20 74 61 67 20 24 6d ..foreach tag $m
1980: 79 74 61 67 73 20 7b 20 24 74 61 67 20 64 65 73 ytags { $tag des
1990: 74 72 6f 79 20 7d 0a 09 73 65 74 20 6d 79 74 61 troy }..set myta
19a0: 67 73 20 7b 7d 0a 09 72 65 74 75 72 6e 0a 20 20 gs {}..return.
19b0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
19c0: 6d 6f 76 65 74 61 67 73 74 6f 20 7b 72 65 76 7d movetagsto {rev}
19d0: 20 7b 0a 09 73 65 74 20 72 65 76 6c 6f 64 20 5b {..set revlod [
19e0: 24 72 65 76 20 6c 6f 64 5d 0a 09 66 6f 72 65 61 $rev lod]..forea
19f0: 63 68 20 74 61 67 20 24 6d 79 74 61 67 73 20 7b ch tag $mytags {
1a00: 0a 09 20 20 20 20 24 72 65 76 20 61 64 64 74 61 .. $rev addta
1a10: 67 20 24 74 61 67 0a 09 20 20 20 20 24 74 61 67 g $tag.. $tag
1a20: 20 73 65 74 74 61 67 72 65 76 20 24 72 65 76 0a settagrev $rev.
1a30: 09 20 20 20 20 24 74 61 67 20 73 65 74 6c 6f 64 . $tag setlod
1a40: 20 24 72 65 76 6c 6f 64 0a 09 7d 0a 09 73 65 74 $revlod..}..set
1a50: 20 6d 79 74 61 67 73 20 7b 7d 0a 09 72 65 74 75 mytags {}..retu
1a60: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 rn. }.. #
1a70: 67 65 6e 65 72 61 6c 20 73 79 6d 62 6f 6c 20 6f general symbol o
1a80: 70 65 72 61 74 69 6f 6e 73 20 5f 5f 5f 5f 5f 5f perations ______
1a90: 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f _____.. metho
1aa0: 64 20 6d 6f 76 65 73 79 6d 62 6f 6c 73 74 6f 20 d movesymbolsto
1ab0: 7b 72 65 76 7d 20 7b 0a 09 23 20 4d 6f 76 65 20 {rev} {..# Move
1ac0: 74 68 65 20 74 61 67 73 20 61 6e 64 20 62 72 61 the tags and bra
1ad0: 6e 63 68 65 73 20 61 74 74 61 63 68 65 64 20 74 nches attached t
1ae0: 6f 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 o this revision
1af0: 74 6f 20 74 68 65 0a 09 23 20 64 65 73 74 69 6e to the..# destin
1b00: 61 74 69 6f 6e 20 61 6e 64 20 66 69 78 20 61 6c ation and fix al
1b10: 6c 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 24 73 l pointers....$s
1b20: 65 6c 66 20 6d 6f 76 65 74 61 67 73 74 6f 20 20 elf movetagsto
1b30: 20 20 20 24 72 65 76 0a 09 24 73 65 6c 66 20 6d $rev..$self m
1b40: 6f 76 65 62 72 61 6e 63 68 65 73 74 6f 20 24 72 ovebranchesto $r
1b50: 65 76 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d ev..return. }
1b60: 0a 0a 20 20 20 20 23 20 44 65 72 69 76 65 64 20 .. # Derived
1b70: 73 74 75 66 66 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f stuff __________
1b80: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 _____________..
1b90: 20 20 20 6d 65 74 68 6f 64 20 64 65 74 65 72 6d method determ
1ba0: 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20 7b 7d 20 ineoperation {}
1bb0: 7b 0a 09 23 20 4c 6f 6f 6b 20 61 74 20 74 68 65 {..# Look at the
1bc0: 20 73 74 61 74 65 20 6f 66 20 62 6f 74 68 20 74 state of both t
1bd0: 68 69 73 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 his revision and
1be0: 20 69 74 73 20 70 61 72 65 6e 74 20 74 6f 0a 09 its parent to..
1bf0: 23 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 # determine the
1c00: 74 79 70 65 20 6f 70 66 20 6f 70 65 72 61 74 69 type opf operati
1c10: 6f 6e 20 77 68 69 63 68 20 77 61 73 20 70 65 72 on which was per
1c20: 66 6f 72 6d 65 64 20 28 61 64 64 2c 0a 09 23 20 formed (add,..#
1c30: 6d 6f 64 69 66 79 2c 20 64 65 6c 65 74 65 2c 20 modify, delete,
1c40: 6e 6f 6e 65 29 2e 0a 09 23 0a 09 23 20 54 68 65 none)...#..# The
1c50: 20 69 6d 70 6f 72 74 61 6e 74 20 69 6e 66 6f 72 important infor
1c60: 6d 61 74 69 6f 6e 20 69 73 20 64 65 61 64 20 76 mation is dead v
1c70: 73 20 6e 6f 74 2d 64 65 61 64 20 66 6f 72 20 62 s not-dead for b
1c80: 6f 74 68 2c 0a 09 23 20 67 69 76 69 6e 67 20 72 oth,..# giving r
1c90: 69 73 65 20 74 6f 20 66 6f 75 72 20 70 6f 73 73 ise to four poss
1ca0: 69 62 6c 65 20 74 79 70 65 73 2e 0a 0a 09 73 65 ible types....se
1cb0: 74 20 73 64 65 61 64 20 5b 65 78 70 72 20 7b 24 t sdead [expr {$
1cc0: 6d 79 73 74 61 74 65 20 65 71 20 22 64 65 61 64 mystate eq "dead
1cd0: 22 7d 5d 0a 09 73 65 74 20 70 64 65 61 64 20 5b "}]..set pdead [
1ce0: 65 78 70 72 20 7b 24 6d 79 70 61 72 65 6e 74 20 expr {$myparent
1cf0: 65 71 20 22 22 20 7c 7c 20 5b 24 6d 79 70 61 72 eq "" || [$mypar
1d00: 65 6e 74 20 73 74 61 74 65 5d 20 65 71 20 22 64 ent state] eq "d
1d10: 65 61 64 22 7d 5d 0a 0a 09 73 65 74 20 6d 79 6f ead"}]...set myo
1d20: 70 65 72 61 74 69 6f 6e 20 24 6d 79 6f 70 73 74 peration $myopst
1d30: 61 74 65 28 5b 6c 69 73 74 20 24 70 64 65 61 64 ate([list $pdead
1d40: 20 24 73 64 65 61 64 5d 29 0a 09 72 65 74 75 72 $sdead])..retur
1d50: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
1d60: 68 6f 64 20 6f 70 65 72 61 74 69 6f 6e 20 7b 7d hod operation {}
1d70: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 6f 70 65 { return $myope
1d80: 72 61 74 69 6f 6e 20 7d 0a 20 20 20 20 6d 65 74 ration }. met
1d90: 68 6f 64 20 72 65 74 79 70 65 20 7b 78 7d 20 7b hod retype {x} {
1da0: 20 73 65 74 20 6d 79 6f 70 65 72 61 74 69 6f 6e set myoperation
1db0: 20 24 78 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a $x ; return }..
1dc0: 20 20 20 20 6d 65 74 68 6f 64 20 69 73 6f 6e 64 method isond
1dd0: 65 66 61 75 6c 74 62 72 61 6e 63 68 20 7b 7d 20 efaultbranch {}
1de0: 7b 20 73 65 74 20 6d 79 69 73 6f 6e 64 65 66 61 { set myisondefa
1df0: 75 6c 74 62 72 61 6e 63 68 20 31 20 3b 20 72 65 ultbranch 1 ; re
1e00: 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 turn }.. meth
1e10: 6f 64 20 73 65 74 64 65 66 61 75 6c 74 62 72 61 od setdefaultbra
1e20: 6e 63 68 63 68 69 6c 64 20 20 7b 72 65 76 7d 20 nchchild {rev}
1e30: 7b 20 73 65 74 20 6d 79 64 62 63 68 69 6c 64 20 { set mydbchild
1e40: 24 72 65 76 20 3b 20 72 65 74 75 72 6e 20 7d 0a $rev ; return }.
1e50: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 64 65 method setde
1e60: 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e faultbranchparen
1e70: 74 20 7b 72 65 76 7d 20 7b 0a 09 73 65 74 20 6d t {rev} {..set m
1e80: 79 64 62 70 61 72 65 6e 74 20 24 72 65 76 0a 0a ydbparent $rev..
1e90: 09 23 20 52 65 74 79 70 65 20 74 68 65 20 72 65 .# Retype the re
1ea0: 76 69 73 69 6f 6e 20 28 6d 61 79 20 63 68 61 6e vision (may chan
1eb0: 67 65 20 66 72 6f 6d 20 27 61 64 64 27 20 74 6f ge from 'add' to
1ec0: 20 27 63 68 61 6e 67 65 27 29 2e 0a 0a 09 73 65 'change')....se
1ed0: 74 20 73 64 65 61 64 20 5b 65 78 70 72 20 7b 24 t sdead [expr {$
1ee0: 6d 79 6f 70 65 72 61 74 69 6f 6e 20 20 20 20 20 myoperation
1ef0: 6e 65 20 22 63 68 61 6e 67 65 22 7d 5d 0a 09 73 ne "change"}]..s
1f00: 65 74 20 70 64 65 61 64 20 5b 65 78 70 72 20 7b et pdead [expr {
1f10: 5b 24 72 65 76 20 6f 70 65 72 61 74 69 6f 6e 5d [$rev operation]
1f20: 20 6e 65 20 22 63 68 61 6e 67 65 22 7d 5d 0a 09 ne "change"}]..
1f30: 73 65 74 20 6d 79 6f 70 65 72 61 74 69 6f 6e 20 set myoperation
1f40: 24 6d 79 6f 70 73 74 61 74 65 28 5b 6c 69 73 74 $myopstate([list
1f50: 20 24 70 64 65 61 64 20 24 73 64 65 61 64 5d 29 $pdead $sdead])
1f60: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
1f70: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
1f80: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
1f90: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 ###########.
1fa0: 23 23 20 54 79 70 65 20 41 50 49 0a 0a 20 20 20 ## Type API..
1fb0: 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 74 72 typemethod istr
1fc0: 75 6e 6b 72 65 76 6e 72 20 7b 72 65 76 6e 72 7d unkrevnr {revnr}
1fd0: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 65 78 70 72 {..return [expr
1fe0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 73 70 6c 69 {[llength [spli
1ff0: 74 20 24 72 65 76 6e 72 20 2e 5d 5d 20 3d 3d 20 t $revnr .]] ==
2000: 32 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 2}]. }.. t
2010: 79 70 65 6d 65 74 68 6f 64 20 69 73 62 72 61 6e ypemethod isbran
2020: 63 68 72 65 76 6e 72 20 7b 72 65 76 6e 72 20 5f chrevnr {revnr _
2030: 20 62 76 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 67 bv} {..if {[reg
2040: 65 78 70 20 24 6d 79 62 72 61 6e 63 68 70 61 74 exp $mybranchpat
2050: 74 65 72 6e 20 24 72 65 76 6e 72 20 2d 3e 20 68 tern $revnr -> h
2060: 65 61 64 20 74 61 69 6c 5d 7d 20 7b 0a 09 20 20 ead tail]} {..
2070: 20 20 75 70 76 61 72 20 31 20 24 62 76 20 62 72 upvar 1 $bv br
2080: 61 6e 63 68 6e 72 0a 09 20 20 20 20 73 65 74 20 anchnr.. set
2090: 62 72 61 6e 63 68 6e 72 20 24 7b 68 65 61 64 7d branchnr ${head}
20a0: 24 74 61 69 6c 0a 09 20 20 20 20 72 65 74 75 72 $tail.. retur
20b0: 6e 20 31 0a 09 7d 0a 09 72 65 74 75 72 6e 20 30 n 1..}..return 0
20c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 . }.. type
20d0: 6d 65 74 68 6f 64 20 32 62 72 61 6e 63 68 6e 72 method 2branchnr
20e0: 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 23 20 49 6e {revnr} {..# In
20f0: 70 75 74 20 69 73 20 61 20 62 72 61 6e 63 68 20 put is a branch
2100: 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 2c revision number,
2110: 20 69 2e 65 2e 20 61 20 72 65 76 69 73 69 6f 6e i.e. a revision
2120: 20 6e 75 6d 62 65 72 0a 09 23 20 77 69 74 68 20 number..# with
2130: 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f an even number o
2140: 66 20 63 6f 6d 70 6f 6e 65 6e 74 73 3b 20 66 6f f components; fo
2150: 72 20 65 78 61 6d 70 6c 65 20 27 32 2e 39 2e 32 r example '2.9.2
2160: 2e 31 27 0a 09 23 20 28 6e 65 76 65 72 20 27 32 .1'..# (never '2
2170: 2e 39 2e 32 27 20 6e 6f 72 20 27 32 2e 39 2e 30 .9.2' nor '2.9.0
2180: 2e 32 27 29 2e 20 20 54 68 65 20 72 65 74 75 72 .2'). The retur
2190: 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 0a 09 n value is the..
21a0: 23 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 # branch number
21b0: 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 27 32 (for example, '2
21c0: 2e 39 2e 32 27 29 2e 20 20 46 6f 72 20 74 72 75 .9.2'). For tru
21d0: 6e 6b 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 23 nk revisions,..#
21e0: 20 6c 69 6b 65 20 27 33 2e 34 27 2c 20 77 65 20 like '3.4', we
21f0: 72 65 74 75 72 6e 20 74 68 65 20 65 6d 70 74 79 return the empty
2200: 20 73 74 72 69 6e 67 2e 0a 0a 09 69 66 20 7b 5b string....if {[
2210: 24 74 79 70 65 20 69 73 74 72 75 6e 6b 72 65 76 $type istrunkrev
2220: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 nr $revnr]} {..
2230: 20 20 20 72 65 74 75 72 6e 20 22 22 0a 09 7d 0a return ""..}.
2240: 09 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b 6c .return [join [l
2250: 72 61 6e 67 65 20 5b 73 70 6c 69 74 20 24 72 65 range [split $re
2260: 76 6e 72 20 2e 5d 20 30 20 65 6e 64 2d 31 5d 20 vnr .] 0 end-1]
2270: 2e 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 .]. }.. ty
2280: 70 65 6d 65 74 68 6f 64 20 32 62 72 61 6e 63 68 pemethod 2branch
2290: 70 61 72 65 6e 74 72 65 76 6e 72 20 7b 62 72 61 parentrevnr {bra
22a0: 6e 63 68 6e 72 7d 20 7b 0a 09 23 20 43 68 6f 70 nchnr} {..# Chop
22b0: 20 74 68 65 20 6c 61 73 74 20 73 65 67 6d 65 6e the last segmen
22c0: 74 20 6f 66 66 0a 09 72 65 74 75 72 6e 20 5b 6a t off..return [j
22d0: 6f 69 6e 20 5b 6c 72 61 6e 67 65 20 5b 73 70 6c oin [lrange [spl
22e0: 69 74 20 24 62 72 61 6e 63 68 6e 72 20 2e 5d 20 it $branchnr .]
22f0: 30 20 65 6e 64 2d 31 5d 20 2e 5d 0a 20 20 20 20 0 end-1] .].
2300: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ##
2310: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
2320: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############.
2330: 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20 20 20 ## State..
2340: 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 typevariable my
2350: 62 72 61 6e 63 68 70 61 74 74 65 72 6e 20 7b 5e branchpattern {^
2360: 28 28 3f 3a 5c 64 2b 5c 2e 5c 64 2b 5c 2e 29 2b ((?:\d+\.\d+\.)+
2370: 29 28 3f 3a 30 5c 2e 29 3f 28 5c 64 2b 29 24 7d )(?:0\.)?(\d+)$}
2380: 0a 20 20 20 20 23 20 46 69 72 73 74 20 61 20 6e . # First a n
2390: 6f 6e 7a 65 72 6f 20 65 76 65 6e 20 6e 75 6d 62 onzero even numb
23a0: 65 72 20 6f 66 20 64 69 67 69 74 20 67 72 6f 75 er of digit grou
23b0: 70 73 20 77 69 74 68 20 74 72 61 69 6c 69 6e 67 ps with trailing
23c0: 20 64 6f 74 0a 20 20 20 20 23 20 43 56 53 20 74 dot. # CVS t
23d0: 68 65 6e 20 73 74 69 63 6b 73 20 61 6e 20 65 78 hen sticks an ex
23e0: 74 72 61 20 30 20 69 6e 20 68 65 72 65 3b 20 52 tra 0 in here; R
23f0: 43 53 20 64 6f 65 73 20 6e 6f 74 2e 0a 20 20 20 CS does not..
2400: 20 23 20 41 6e 64 20 74 68 65 20 6c 61 73 74 20 # And the last
2410: 64 69 67 69 74 20 67 72 6f 75 70 2e 0a 0a 20 20 digit group...
2420: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65 76 variable myrev
2430: 6e 72 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 nr {} ; # Re
2440: 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 6f 66 vision number of
2450: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a 20 the revision..
2460: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 61 variable myda
2470: 74 65 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 54 te {} ; # T
2480: 69 6d 65 73 74 61 6d 70 20 6f 66 20 74 68 65 20 imestamp of the
2490: 72 65 76 69 73 69 6f 6e 2c 20 73 65 63 6f 6e 64 revision, second
24a0: 73 20 73 69 6e 63 65 20 65 70 6f 63 68 0a 20 20 s since epoch.
24b0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6f 72 69 variable myori
24c0: 67 64 61 74 65 20 20 7b 7d 20 3b 20 23 20 4f 72 gdate {} ; # Or
24d0: 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66 69 65 iginal unmodifie
24e0: 64 20 74 69 6d 65 73 74 61 6d 70 2e 0a 20 20 20 d timestamp..
24f0: 20 76 61 72 69 61 62 6c 65 20 6d 79 73 74 61 74 variable mystat
2500: 65 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 74 61 e {} ; # Sta
2510: 74 65 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 te of the revisi
2520: 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 on.. variable
2530: 20 6d 79 66 69 6c 65 20 20 20 20 20 20 7b 7d 20 myfile {}
2540: 3b 20 23 20 52 65 66 20 74 6f 20 74 68 65 20 66 ; # Ref to the f
2550: 69 6c 65 20 6f 62 6a 65 63 74 20 74 68 65 20 72 ile object the r
2560: 65 76 69 73 69 6f 6e 20 62 65 6c 6f 6e 67 73 20 evision belongs
2570: 74 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 to.. variable
2580: 20 6d 79 74 65 78 74 20 20 20 20 20 20 7b 7d 20 mytext {}
2590: 3b 20 23 20 52 61 6e 67 65 20 6f 66 20 74 68 65 ; # Range of the
25a0: 20 28 64 65 6c 74 61 29 20 74 65 78 74 20 66 6f (delta) text fo
25b0: 72 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 r this revision
25c0: 69 6e 20 74 68 65 20 66 69 6c 65 2e 0a 20 20 20 in the file..
25d0: 20 76 61 72 69 61 62 6c 65 20 6d 79 6d 65 74 61 variable mymeta
25e0: 69 64 20 20 20 20 7b 7d 20 3b 20 23 20 49 64 20 id {} ; # Id
25f0: 6f 66 20 74 68 65 20 6d 65 74 61 20 64 61 74 61 of the meta data
2600: 20 67 72 6f 75 70 20 74 68 65 20 72 65 76 69 73 group the revis
2610: 69 6f 6e 0a 09 09 09 20 20 20 20 20 20 23 20 62 ion.... # b
2620: 65 6c 6f 6e 67 73 20 74 6f 2e 20 54 68 69 73 20 elongs to. This
2630: 69 73 20 6c 61 74 65 72 20 75 73 65 64 20 74 6f is later used to
2640: 20 70 75 74 0a 09 09 09 20 20 20 20 20 20 23 20 put.... #
2650: 74 68 65 20 66 69 6c 65 20 72 65 76 69 73 69 6f the file revisio
2660: 6e 73 20 69 6e 74 6f 20 70 72 65 6c 69 6d 69 6e ns into prelimin
2670: 61 72 79 0a 09 09 09 20 20 20 20 20 20 23 20 63 ary.... # c
2680: 68 61 6e 67 65 73 65 74 73 20 28 61 6b 61 20 70 hangesets (aka p
2690: 72 6f 6a 65 63 74 20 72 65 76 69 73 69 6f 6e 73 roject revisions
26a0: 29 2e 0a 09 09 09 20 20 20 20 20 20 23 20 54 68 )..... # Th
26b0: 69 73 20 69 64 20 65 6e 63 6f 64 65 73 20 34 20 is id encodes 4
26c0: 70 69 65 63 65 73 20 6f 66 20 64 61 74 61 2c 0a pieces of data,.
26d0: 09 09 09 20 20 20 20 20 20 23 20 6e 61 6d 65 6c ... # namel
26e0: 79 3a 20 74 68 65 20 70 72 6f 6a 65 63 74 20 61 y: the project a
26f0: 6e 64 20 62 72 61 6e 63 68 20 74 68 65 0a 09 09 nd branch the...
2700: 09 20 20 20 20 20 20 23 20 72 65 76 69 73 69 6f . # revisio
2710: 6e 20 77 61 73 20 63 6f 6d 6d 69 74 74 65 64 20 n was committed
2720: 74 6f 2c 20 74 68 65 20 61 75 74 68 6f 72 0a 09 to, the author..
2730: 09 09 20 20 20 20 20 20 23 20 77 68 6f 20 64 69 .. # who di
2740: 64 20 74 68 65 20 63 6f 6d 6d 69 74 2c 20 61 6e d the commit, an
2750: 64 20 74 68 65 20 6d 65 73 73 61 67 65 0a 09 09 d the message...
2760: 09 20 20 20 20 20 20 23 20 75 73 65 64 2e 0a 20 . # used..
2770: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6c 6f variable mylo
2780: 64 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 d {} ; # R
2790: 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 eference to the
27a0: 6c 69 6e 65 2d 6f 66 2d 64 65 76 65 6c 6f 70 6d line-of-developm
27b0: 65 6e 74 0a 09 09 09 20 20 20 20 20 20 23 20 6f ent.... # o
27c0: 62 6a 65 63 74 20 74 68 65 20 72 65 76 69 73 69 bject the revisi
27d0: 6f 6e 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 20 41 on belongs to. A
27e0: 6e 0a 09 09 09 20 20 20 20 20 20 23 20 61 6c 74 n.... # alt
27f0: 65 72 6e 61 74 69 76 65 20 69 64 69 6f 6d 20 77 ernative idiom w
2800: 6f 75 6c 64 20 62 65 20 74 6f 20 63 61 6c 6c 20 ould be to call
2810: 69 74 0a 09 09 09 20 20 20 20 20 20 23 20 74 68 it.... # th
2820: 65 20 62 72 61 6e 63 68 20 74 68 65 20 72 65 76 e branch the rev
2830: 69 73 69 6f 6e 20 69 73 20 6f 6e 2e 20 54 68 69 ision is on. Thi
2840: 73 0a 09 09 09 20 20 20 20 20 20 23 20 72 65 66 s.... # ref
2850: 65 72 65 6e 63 65 20 69 73 20 74 6f 20 61 20 70 erence is to a p
2860: 72 6f 6a 65 63 74 2d 6c 65 76 65 6c 20 6f 62 6a roject-level obj
2870: 65 63 74 0a 09 09 09 20 20 20 20 20 20 23 20 28 ect.... # (
2880: 73 79 6d 62 6f 6c 20 6f 72 20 74 72 75 6e 6b 29 symbol or trunk)
2890: 2e 0a 0a 20 20 20 20 23 20 42 61 73 69 63 20 70 ... # Basic p
28a0: 61 72 65 6e 74 2f 63 68 69 6c 64 20 6c 69 6e 6b arent/child link
28b0: 61 67 65 20 28 6c 69 6e 65 73 20 6f 66 20 64 65 age (lines of de
28c0: 76 65 6c 6f 70 6d 65 6e 74 29 0a 0a 20 20 20 20 velopment)..
28d0: 76 61 72 69 61 62 6c 65 20 6d 79 70 61 72 65 6e variable myparen
28e0: 74 20 7b 7d 20 3b 20 23 20 52 65 66 20 74 6f 20 t {} ; # Ref to
28f0: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 20 parent revision
2900: 6f 62 6a 65 63 74 2e 20 4c 69 6e 6b 20 72 65 71 object. Link req
2910: 75 69 72 65 64 20 62 65 63 61 75 73 65 20 6f 66 uired because of
2920: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 . #
2930: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 27 63 ; # 'c
2940: 76 73 61 64 6d 69 6e 20 2d 6f 27 2c 20 77 68 69 vsadmin -o', whi
2950: 63 68 20 63 61 6e 20 63 72 65 61 74 65 20 61 72 ch can create ar
2960: 62 69 74 72 61 72 79 20 67 61 70 73 20 69 6e 20 bitrary gaps in
2970: 74 68 65 0a 20 20 20 20 23 20 20 20 20 20 20 20 the. #
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 ; #
2990: 20 6e 75 6d 62 65 72 69 6e 67 20 73 65 71 75 65 numbering seque
29a0: 6e 63 65 2e 20 54 68 69 73 20 69 73 20 69 6e 20 nce. This is in
29b0: 74 68 65 20 73 61 6d 65 20 6c 69 6e 65 20 6f 66 the same line of
29c0: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 0a 20 20 20 development.
29d0: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 #
29e0: 20 20 20 20 20 20 3b 20 23 20 4e 6f 74 65 3a 20 ; # Note:
29f0: 46 6f 72 20 74 68 65 20 66 69 72 73 74 20 72 65 For the first re
2a00: 76 69 73 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e vision on a bran
2a10: 63 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a ch the revision.
2a20: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 #
2a30: 20 20 20 20 20 20 20 20 20 3b 20 23 20 69 74 20 ; # it
2a40: 77 61 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d was spawned from
2a50: 20 69 73 20 74 68 65 20 70 61 72 65 6e 74 2e 20 is the parent.
2a60: 4f 6e 6c 79 20 74 68 65 20 72 6f 6f 74 20 72 65 Only the root re
2a70: 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 20 20 20 vision. #
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a90: 3b 20 23 20 6f 66 20 6d 79 66 69 6c 65 27 73 20 ; # of myfile's
2aa0: 72 65 76 69 73 69 6f 6e 20 74 72 65 65 20 68 61 revision tree ha
2ab0: 73 20 6e 6f 74 68 69 6e 67 20 73 65 74 20 68 65 s nothing set he
2ac0: 72 65 2e 0a 20 20 20 20 23 20 20 20 20 20 20 20 re.. #
2ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 ; #
2ae0: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
2af0: 79 63 68 69 6c 64 20 20 7b 7d 20 3b 20 23 20 52 ychild {} ; # R
2b00: 65 66 20 74 6f 20 74 68 65 20 70 72 69 6d 61 72 ef to the primar
2b10: 79 20 63 68 69 6c 64 20 72 65 76 69 73 69 6f 6e y child revision
2b20: 20 6f 62 6a 65 63 74 2c 20 69 2e 65 2e 20 74 68 object, i.e. th
2b30: 65 20 6e 65 78 74 0a 20 20 20 20 23 20 20 20 20 e next. #
2b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2b50: 3b 20 23 20 72 65 76 69 73 69 6f 6e 20 69 6e 20 ; # revision in
2b60: 74 68 65 20 73 61 6d 65 20 6c 69 6e 65 20 6f 66 the same line of
2b70: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a 0a 20 development...
2b80: 20 20 20 23 20 42 72 61 6e 63 68 20 6c 69 6e 6b # Branch link
2b90: 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f age ____________
2ba0: 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 76 61 ________.. va
2bb0: 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 65 riable mybranche
2bc0: 73 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 s {} ; # Lis
2bd0: 74 20 6f 66 20 74 68 65 20 62 72 61 6e 63 68 65 t of the branche
2be0: 73 20 28 6f 62 6a 73 29 20 73 70 61 77 6e 65 64 s (objs) spawned
2bf0: 20 62 79 20 74 68 69 73 20 72 65 76 69 73 69 6f by this revisio
2c00: 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 n.. variable
2c10: 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b myparentbranch {
2c20: 7d 20 3b 20 23 20 46 6f 72 20 74 68 65 20 66 69 } ; # For the fi
2c30: 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 rst revision on
2c40: 61 20 62 72 61 6e 63 68 20 74 68 65 20 72 65 6c a branch the rel
2c50: 65 76 61 6e 74 0a 20 20 20 20 23 20 20 20 20 20 evant. #
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c70: 20 20 20 20 20 3b 20 23 20 62 72 61 6e 63 68 20 ; # branch
2c80: 6f 62 6a 65 63 74 2e 20 54 68 69 73 20 61 6c 73 object. This als
2c90: 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 64 o allows us to d
2ca0: 65 74 65 72 6d 69 6e 65 20 69 66 0a 20 20 20 20 etermine if.
2cb0: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 #
2cc0: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 6d ; # m
2cd0: 79 70 61 72 65 6e 74 20 69 73 20 69 6e 20 74 68 yparent is in th
2ce0: 65 20 73 61 6d 65 20 4c 4f 44 2c 20 6f 72 20 74 e same LOD, or t
2cf0: 68 65 20 72 65 76 69 73 69 6f 6e 20 74 68 65 0a he revision the.
2d00: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 #
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ;
2d20: 20 23 20 62 72 61 6e 63 68 20 73 70 61 77 6e 65 # branch spawne
2d30: 64 20 66 72 6f 6d 2e 0a 0a 20 20 20 20 23 20 4c d from... # L
2d40: 69 73 74 20 6f 66 20 74 68 65 20 72 65 76 69 73 ist of the revis
2d50: 69 6f 6e 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 ion objects of t
2d60: 68 65 20 66 69 72 73 74 20 63 6f 6d 6d 69 74 73 he first commits
2d70: 20 6f 6e 20 61 6e 79 0a 20 20 20 20 23 20 62 72 on any. # br
2d80: 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 62 anches spawned b
2d90: 79 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 y this revision
2da0: 6f 6e 20 77 68 69 63 68 20 63 6f 6d 6d 69 74 73 on which commits
2db0: 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20 23 occurred.. #
2dc0: 20 54 68 69 73 20 64 65 70 65 6e 64 65 6e 63 79 This dependency
2dd0: 20 69 73 20 6b 65 70 74 20 65 78 70 6c 69 63 69 is kept explici
2de0: 74 6c 79 20 62 65 63 61 75 73 65 20 6f 74 68 65 tly because othe
2df0: 72 77 69 73 65 20 61 0a 20 20 20 20 23 20 72 65 rwise a. # re
2e00: 76 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74 6f 70 6f vision-only topo
2e10: 6c 6f 67 69 63 61 6c 20 73 6f 72 74 20 77 6f 75 logical sort wou
2e20: 6c 64 20 6d 69 73 73 20 74 68 65 20 64 65 70 65 ld miss the depe
2e30: 6e 64 65 6e 63 79 20 74 68 61 74 0a 20 20 20 20 ndency that.
2e40: 23 20 65 78 69 73 74 73 20 76 69 61 20 2d 3e 20 # exists via ->
2e50: 6d 79 62 72 61 6e 63 68 65 73 2e 0a 0a 20 20 20 mybranches...
2e60: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e variable mybran
2e70: 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d 20 3b 20 chchildren {} ;
2e80: 23 20 4c 69 73 74 20 6f 66 20 74 68 65 20 72 65 # List of the re
2e90: 76 69 73 69 6f 6e 73 20 28 6f 62 6a 73 29 20 77 visions (objs) w
2ea0: 68 69 63 68 20 61 72 65 20 74 68 65 20 66 69 72 hich are the fir
2eb0: 73 74 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 st. #
2ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ed0: 20 20 20 20 3b 20 23 20 63 6f 6d 6d 69 74 73 20 ; # commits
2ee0: 6f 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 62 72 on any of the br
2ef0: 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 66 anches spawned f
2f00: 72 6f 6d 20 74 68 69 73 0a 20 20 20 20 23 20 20 rom this. #
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2f20: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 72 65 ; # re
2f30: 76 69 73 69 6f 6e 2e 20 54 68 65 20 64 65 70 65 vision. The depe
2f40: 6e 64 65 6e 63 79 20 69 73 20 6b 65 70 74 20 65 ndency is kept e
2f50: 78 70 6c 69 63 69 74 6c 79 20 74 6f 0a 20 20 20 xplicitly to.
2f60: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 #
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 ;
2f80: 23 20 65 6e 73 75 72 65 20 74 68 61 74 20 61 20 # ensure that a
2f90: 72 65 76 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74 6f revision-only to
2fa0: 70 6f 6c 6f 67 69 63 61 6c 20 73 6f 72 74 20 77 pological sort w
2fb0: 69 6c 6c 0a 20 20 20 20 23 20 20 20 20 20 20 20 ill. #
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2fd0: 20 20 20 20 20 3b 20 23 20 6e 6f 74 20 6d 69 73 ; # not mis
2fe0: 73 20 69 74 2c 20 61 73 20 69 74 20 6f 74 68 65 s it, as it othe
2ff0: 72 77 69 73 65 20 65 78 69 73 74 73 20 6f 6e 6c rwise exists onl
3000: 79 20 76 69 61 0a 20 20 20 20 23 20 20 20 20 20 y via. #
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
3020: 20 20 20 20 20 20 20 3b 20 23 20 6d 79 62 72 61 ; # mybra
3030: 6e 63 68 65 73 2e 0a 0a 20 20 20 20 23 20 54 61 nches... # Ta
3040: 67 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f g linkage ______
3050: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f ________________
3060: 5f 5f 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 __.. variable
3070: 20 6d 79 74 61 67 73 20 7b 7d 20 3b 20 23 20 4c mytags {} ; # L
3080: 69 73 74 20 6f 66 20 74 61 67 73 20 28 6f 62 6a ist of tags (obj
3090: 73 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 s) associated wi
30a0: 74 68 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e th this revision
30b0: 2e 0a 0a 20 20 20 20 23 20 4d 6f 72 65 20 64 65 ... # More de
30c0: 72 69 76 65 64 20 64 61 74 61 0a 0a 20 20 20 20 rived data..
30d0: 76 61 72 69 61 62 6c 65 20 6d 79 6f 70 65 72 61 variable myopera
30e0: 74 69 6f 6e 20 20 20 20 20 20 20 20 7b 7d 20 3b tion {} ;
30f0: 20 23 20 4f 6e 65 20 6f 66 20 27 61 64 64 27 2c # One of 'add',
3100: 20 27 63 68 61 6e 67 65 27 2c 20 27 64 65 6c 65 'change', 'dele
3110: 74 65 27 2c 20 6f 72 0a 09 09 09 20 20 20 20 20 te', or....
3120: 20 20 20 20 20 20 20 20 23 20 27 6e 6f 74 68 69 # 'nothi
3130: 6e 67 27 2e 20 44 65 72 69 76 65 64 20 66 72 6f ng'. Derived fro
3140: 6d 20 6f 75 72 20 61 6e 64 0a 09 09 09 20 20 20 m our and....
3150: 20 20 20 20 20 20 20 20 20 20 23 20 69 74 73 20 # its
3160: 70 61 72 65 6e 74 27 73 20 73 74 61 74 65 2e 0a parent's state..
3170: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 variable myi
3180: 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 sondefaultbranch
3190: 20 30 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 0 ; # Boolean f
31a0: 6c 61 67 2c 20 73 65 74 20 69 66 20 74 68 65 0a lag, set if the.
31b0: 09 09 09 09 20 20 20 20 20 23 20 72 65 76 69 73 .... # revis
31c0: 69 6f 6e 20 69 73 20 6f 6e 20 74 68 65 20 6e 6f ion is on the no
31d0: 6e 2d 74 72 75 6e 6b 0a 09 09 09 09 20 20 20 20 n-trunk.....
31e0: 20 23 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 # default branc
31f0: 68 2c 20 61 6b 61 20 76 65 6e 64 6f 72 0a 09 09 h, aka vendor...
3200: 09 09 20 20 20 20 20 23 20 62 72 61 6e 63 68 2e .. # branch.
3210: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
3220: 64 62 70 61 72 65 6e 74 20 20 20 20 20 20 20 20 dbparent
3230: 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 {} ; # Referenc
3240: 65 20 74 6f 20 74 68 65 20 6c 61 73 74 20 72 65 e to the last re
3250: 76 69 73 69 6f 6e 0a 09 09 09 09 20 20 20 20 20 vision.....
3260: 23 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 # on the vendor
3270: 62 72 61 6e 63 68 20 69 66 20 74 68 69 73 20 69 branch if this i
3280: 73 0a 09 09 09 09 20 20 20 20 20 23 20 74 68 65 s..... # the
3290: 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f primary child o
32a0: 66 20 74 68 65 0a 09 09 09 09 20 20 20 20 20 23 f the..... #
32b0: 20 72 65 67 75 6c 61 72 20 72 6f 6f 74 2e 0a 20 regular root..
32c0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 62 variable mydb
32d0: 63 68 69 6c 64 20 20 20 20 20 20 20 20 20 20 7b child {
32e0: 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 } ; # Reference
32f0: 74 6f 20 74 68 65 20 70 72 69 6d 61 72 79 20 63 to the primary c
3300: 68 69 6c 64 0a 09 09 09 09 20 20 20 20 20 23 20 hild..... #
3310: 6f 66 20 74 68 65 20 72 65 67 75 6c 61 72 20 72 of the regular r
3320: 6f 6f 74 20 69 66 20 74 68 69 73 20 69 73 0a 09 oot if this is..
3330: 09 09 09 20 20 20 20 20 23 20 74 68 65 20 6c 61 ... # the la
3340: 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 st revision on t
3350: 68 65 20 76 65 6e 64 6f 72 0a 09 09 09 09 20 20 he vendor.....
3360: 20 20 20 23 20 62 72 61 6e 63 68 2e 0a 0a 20 20 # branch...
3370: 20 20 23 20 64 65 61 64 28 73 65 6c 66 29 20 78 # dead(self) x
3380: 20 64 65 61 64 28 70 61 72 65 6e 74 29 20 2d 3e dead(parent) ->
3390: 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 20 20 74 operation. t
33a0: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6f 70 ypevariable myop
33b0: 73 74 61 74 65 20 2d 61 72 72 61 79 20 7b 0a 09 state -array {..
33c0: 7b 30 20 30 7d 20 63 68 61 6e 67 65 0a 09 7b 30 {0 0} change..{0
33d0: 20 31 7d 20 64 65 6c 65 74 65 0a 09 7b 31 20 30 1} delete..{1 0
33e0: 7d 20 61 64 64 0a 09 7b 31 20 31 7d 20 6e 6f 74 } add..{1 1} not
33f0: 68 69 6e 67 0a 20 20 20 20 7d 0a 0a 20 20 20 20 hing. }..
3400: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
3410: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
3420: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 #######. ## I
3430: 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a nternal methods.
3440: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
3450: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
3460: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 ############.
3470: 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f ## Configuratio
3480: 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 n.. pragma -h
3490: 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f astypeinfo no
34a0: 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69 6e ; # no type in
34b0: 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 trospection.
34c0: 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f 20 pragma -hasinfo
34d0: 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e no ; # n
34e0: 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 70 o object introsp
34f0: 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d ection. pragm
3500: 61 20 2d 73 69 6d 70 6c 65 64 69 73 70 61 74 63 a -simpledispatc
3510: 68 20 79 65 73 20 3b 20 23 20 73 69 6d 70 6c 65 h yes ; # simple
3520: 20 66 61 73 74 20 64 69 73 70 61 74 63 68 0a 0a fast dispatch..
3530: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
3540: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
3550: 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e ###########.}..n
3560: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a amespace eval ::
3570: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
3580: 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 7b 0a rt::cvs::file {.
3590: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 namespace ex
35a0: 70 6f 72 74 20 72 65 76 0a 20 20 20 20 6e 61 6d port rev. nam
35b0: 65 73 70 61 63 65 20 65 76 61 6c 20 72 65 76 20 espace eval rev
35c0: 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 {..namespace imp
35d0: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ort ::vc::tools:
35e0: 3a 6d 69 73 63 3a 3a 2a 0a 20 20 20 20 7d 0a 7d :misc::*. }.}
35f0: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 ..# # ## ### ###
3600: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
3610: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######### ######
3620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a ###############.
3630: 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 ## Ready..packag
3640: 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f e provide vc::fo
3650: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
3660: 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 31 2e 30 s::file::rev 1.0
3670: 0a 72 65 74 75 72 6e 0a .return.