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 46 69 6c ########..## Fil
0200: 65 2c 20 70 61 72 74 20 6f 66 20 61 20 70 72 6f e, part of a pro
0210: 6a 65 63 74 2c 20 70 61 72 74 20 6f 66 20 61 20 ject, part of a
0220: 43 56 53 20 72 65 70 6f 73 69 74 6f 72 79 2e 20 CVS repository.
0230: 4d 75 6c 74 69 70 6c 65 0a 23 23 20 69 6e 73 74 Multiple.## inst
0240: 61 6e 63 65 73 20 61 72 65 20 70 6f 73 73 69 62 ances are possib
0250: 6c 65 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20 le...# # ## ###
0260: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
0270: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 ############ ###
0280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0290: 23 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e ##.## Requiremen
02a0: 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 ts..package requ
02b0: 69 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20 ire Tcl 8.4
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 3b 20 23 20 52 65 71 75 ; # Requ
02e0: 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61 ired runtime..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 6e ckage require sn
0300: 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 it
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0320: 20 20 3b 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e ; # OO system.
0330: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 .package require
0340: 20 73 74 72 75 63 74 3a 3a 73 65 74 20 20 20 20 struct::set
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0360: 20 20 20 20 20 3b 20 23 20 53 65 74 20 6f 70 65 ; # Set ope
0370: 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 rations..package
0380: 20 72 65 71 75 69 72 65 20 73 74 72 75 63 74 3a require struct:
0390: 3a 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20 :list
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 ; #
03b0: 20 48 69 67 68 65 72 20 6f 72 64 65 72 20 6f 70 Higher order op
03c0: 65 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 erations..packag
03d0: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f e require vc::fo
03e0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
03f0: 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 20 3b 20 s::file::rev ;
0400: 23 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 72 # CVS per file r
0410: 65 76 69 73 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 evisions..packag
0420: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f e require vc::fo
0430: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
0440: 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 3b 20 s::file::sym ;
0450: 23 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 73 # CVS per file s
0460: 79 6d 62 6f 6c 73 2e 0a 70 61 63 6b 61 67 65 20 ymbols..package
0470: 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 require vc::foss
0480: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
0490: 3a 73 74 61 74 65 20 20 20 20 20 20 3b 20 23 20 :state ; #
04a0: 53 74 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 State storage..p
04b0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 ackage require v
04c0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
04d0: 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 t::cvs::integrit
04e0: 79 20 20 3b 20 23 20 53 74 61 74 65 20 69 6e 74 y ; # State int
04f0: 65 67 72 69 74 79 20 63 68 65 63 6b 73 2e 0a 70 egrity checks..p
0500: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 ackage require v
0510: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
0520: 74 3a 3a 63 76 73 3a 3a 67 74 63 6f 72 65 20 20 t::cvs::gtcore
0530: 20 20 20 3b 20 23 20 47 72 61 70 68 20 74 72 61 ; # Graph tra
0540: 76 65 72 73 61 6c 20 63 6f 72 65 2e 0a 70 61 63 versal core..pac
0550: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a kage require vc:
0560: 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 20 :tools::trouble
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0580: 20 3b 20 23 20 45 72 72 6f 72 20 72 65 70 6f 72 ; # Error repor
0590: 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72 65 ting..package re
05a0: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a quire vc::tools:
05b0: 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20 20 :log
05c0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 55 73 ; # Us
05d0: 65 72 20 66 65 65 64 62 61 63 6b 0a 70 61 63 6b er feedback.pack
05e0: 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a age require vc::
05f0: 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 20 20 tools::misc
0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0610: 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61 74 74 ; # Text formatt
0620: 69 6e 67 0a 0a 23 20 23 20 23 23 20 23 23 23 20 ing..# # ## ###
0630: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
0640: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 ############ ###
0650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0660: 23 23 0a 23 23 0a 0a 73 6e 69 74 3a 3a 74 79 70 ##.##..snit::typ
0670: 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a e ::vc::fossil::
0680: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c import::cvs::fil
0690: 65 20 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23 e {. # # ## #
06a0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
06b0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
06c0: 20 20 20 20 23 23 20 50 75 62 6c 69 63 20 41 50 ## Public AP
06d0: 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72 75 63 74 I.. construct
06e0: 6f 72 20 7b 69 64 20 70 61 74 68 20 75 73 72 70 or {id path usrp
06f0: 61 74 68 20 65 78 65 63 75 74 61 62 6c 65 20 70 ath executable p
0700: 72 6f 6a 65 63 74 7d 20 7b 0a 09 73 65 74 20 6d roject} {..set m
0710: 79 69 64 20 20 20 20 20 20 20 20 20 24 69 64 0a yid $id.
0720: 09 73 65 74 20 6d 79 70 61 74 68 20 20 20 20 20 .set mypath
0730: 20 20 24 70 61 74 68 0a 09 73 65 74 20 6d 79 75 $path..set myu
0740: 73 72 70 61 74 68 20 20 20 20 24 75 73 72 70 61 srpath $usrpa
0750: 74 68 0a 09 73 65 74 20 6d 79 65 78 65 63 75 74 th..set myexecut
0760: 61 62 6c 65 20 24 65 78 65 63 75 74 61 62 6c 65 able $executable
0770: 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 63 74 20 ..set myproject
0780: 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73 65 74 $project..set
0790: 20 6d 79 74 72 75 6e 6b 20 20 20 20 20 20 5b 24 mytrunk [$
07a0: 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e 6b 5d myproject trunk]
07b0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
07c0: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 69 64 method setid
07d0: 20 7b 69 64 7d 20 7b 0a 09 69 6e 74 65 67 72 69 {id} {..integri
07e0: 74 79 20 61 73 73 65 72 74 20 7b 24 6d 79 69 64 ty assert {$myid
07f0: 20 65 71 20 22 22 7d 20 7b 46 69 6c 65 20 27 24 eq ""} {File '$
0800: 6d 79 70 61 74 68 27 20 61 6c 72 65 61 64 79 20 mypath' already
0810: 68 61 73 20 61 6e 20 69 64 2c 20 27 24 6d 79 69 has an id, '$myi
0820: 64 27 7d 0a 09 73 65 74 20 6d 79 69 64 20 24 69 d'}..set myid $i
0830: 64 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a d..return. }.
0840: 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 64 20 20 . method id
0850: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 {} { return
0860: 24 6d 79 69 64 20 7d 0a 20 20 20 20 6d 65 74 68 $myid }. meth
0870: 6f 64 20 70 61 74 68 20 20 20 20 7b 7d 20 7b 20 od path {} {
0880: 72 65 74 75 72 6e 20 24 6d 79 70 61 74 68 20 7d return $mypath }
0890: 0a 20 20 20 20 6d 65 74 68 6f 64 20 75 73 72 70 . method usrp
08a0: 61 74 68 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 ath {} { return
08b0: 24 6d 79 75 73 72 70 61 74 68 20 7d 0a 20 20 20 $myusrpath }.
08c0: 20 6d 65 74 68 6f 64 20 70 72 6f 6a 65 63 74 20 method project
08d0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 {} { return $myp
08e0: 72 6f 6a 65 63 74 20 7d 0a 0a 20 20 20 20 64 65 roject }.. de
08f0: 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 63 6f legate method co
0900: 6d 6d 69 74 6d 65 73 73 61 67 65 6f 66 20 74 6f mmitmessageof to
0910: 20 6d 79 70 72 6f 6a 65 63 74 0a 0a 20 20 20 20 myproject..
0920: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
0930: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
0940: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 4d #######. ## M
0950: 65 74 68 6f 64 73 20 72 65 71 75 69 72 65 64 20 ethods required
0960: 66 6f 72 20 74 68 65 20 63 6c 61 73 73 20 74 6f for the class to
0970: 20 62 65 20 61 20 73 69 6e 6b 20 6f 66 20 74 68 be a sink of th
0980: 65 20 72 63 73 20 70 61 72 73 65 72 0a 0a 20 20 e rcs parser..
0990: 20 20 23 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 #method begin
09a0: 7b 7d 20 7b 70 75 74 73 20 62 65 67 69 6e 7d 0a {} {puts begin}.
09b0: 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 68 #method seth
09c0: 65 61 64 20 7b 68 7d 20 7b 70 75 74 73 20 68 65 ead {h} {puts he
09d0: 61 64 3d 24 68 7d 0a 20 20 20 20 23 6d 65 74 68 ad=$h}. #meth
09e0: 6f 64 20 73 65 74 70 72 69 6e 63 69 70 61 6c 62 od setprincipalb
09f0: 72 61 6e 63 68 20 7b 62 7d 20 7b 70 75 74 73 20 ranch {b} {puts
0a00: 70 62 3d 24 62 7d 0a 20 20 20 20 23 6d 65 74 68 pb=$b}. #meth
0a10: 6f 64 20 64 65 66 74 61 67 20 7b 73 20 72 7d 20 od deftag {s r}
0a20: 7b 70 75 74 73 20 24 73 3d 24 72 7d 0a 20 20 20 {puts $s=$r}.
0a30: 20 23 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d #method setcomm
0a40: 65 6e 74 20 7b 63 7d 20 7b 70 75 74 73 20 63 6f ent {c} {puts co
0a50: 6d 6d 65 6e 74 3d 24 63 7d 0a 20 20 20 20 23 6d mment=$c}. #m
0a60: 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 20 ethod admindone
0a70: 7b 7d 20 7b 70 75 74 73 20 61 64 6d 69 6e 64 6f {} {puts admindo
0a80: 6e 65 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 ne}. #method
0a90: 64 65 66 20 7b 72 65 76 20 64 61 74 65 20 61 75 def {rev date au
0aa0: 74 68 6f 72 20 73 74 61 74 65 20 6e 65 78 74 20 thor state next
0ab0: 62 72 61 6e 63 68 65 73 7d 20 7b 70 75 74 73 20 branches} {puts
0ac0: 22 64 65 66 20 24 72 65 76 20 24 64 61 74 65 20 "def $rev $date
0ad0: 24 61 75 74 68 6f 72 20 24 73 74 61 74 65 20 24 $author $state $
0ae0: 6e 65 78 74 20 24 62 72 61 6e 63 68 65 73 22 7d next $branches"}
0af0: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66 . #method def
0b00: 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 65 done {} {puts de
0b10: 66 2d 64 6f 6e 65 7d 0a 20 20 20 20 23 6d 65 74 f-done}. #met
0b20: 68 6f 64 20 73 65 74 64 65 73 63 20 7b 64 7d 20 hod setdesc {d}
0b30: 7b 70 75 74 73 20 64 65 73 63 3d 24 64 7d 0a 20 {puts desc=$d}.
0b40: 20 20 20 23 6d 65 74 68 6f 64 20 65 78 74 65 6e #method exten
0b50: 64 20 7b 72 65 76 20 63 6f 6d 6d 69 74 6d 73 67 d {rev commitmsg
0b60: 20 64 65 6c 74 61 72 61 6e 67 65 7d 20 7b 70 75 deltarange} {pu
0b70: 74 73 20 22 65 78 74 65 6e 64 20 24 63 6f 6d 6d ts "extend $comm
0b80: 69 74 6d 73 67 20 24 64 65 6c 74 61 72 61 6e 67 itmsg $deltarang
0b90: 65 22 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 e"}. #method
0ba0: 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 6f done {} {puts do
0bb0: 6e 65 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 ne}.. # # ##
0bc0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
0bd0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
0be0: 0a 20 20 20 20 23 23 20 50 65 72 73 69 73 74 65 . ## Persiste
0bf0: 6e 63 65 20 28 70 61 73 73 20 49 49 29 0a 0a 20 nce (pass II)..
0c00: 20 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73 method persis
0c10: 74 20 7b 7d 20 7b 0a 09 23 20 46 69 72 73 74 20 t {} {..# First
0c20: 63 6f 6c 6c 65 63 74 20 74 68 65 20 72 65 61 63 collect the reac
0c30: 68 61 62 6c 65 20 72 65 76 69 73 69 6f 6e 73 20 hable revisions
0c40: 61 6e 64 20 73 79 6d 62 6f 6c 73 2c 20 74 68 65 and symbols, the
0c50: 6e 0a 09 23 20 61 73 73 69 67 6e 20 69 64 27 73 n..# assign id's
0c60: 20 74 6f 20 61 6c 6c 2e 20 54 68 65 79 20 61 72 to all. They ar
0c70: 65 20 73 6f 72 74 65 64 20 73 6f 20 74 68 61 74 e sorted so that
0c80: 20 77 65 20 77 69 6c 6c 20 68 61 76 65 20 69 64 we will have id
0c90: 73 0a 09 23 20 77 68 69 63 68 20 73 6f 72 74 20 s..# which sort
0ca0: 69 6e 20 6f 72 64 65 72 20 6f 66 20 63 72 65 61 in order of crea
0cb0: 74 69 6f 6e 2e 20 54 68 65 6e 20 77 65 20 63 61 tion. Then we ca
0cc0: 6e 20 73 61 76 65 20 74 68 65 6d 2e 20 54 68 69 n save them. Thi
0cd0: 73 0a 09 23 20 69 73 20 64 6f 6e 65 20 62 6f 74 s..# is done bot
0ce0: 74 6f 6d 20 75 70 2e 20 52 65 76 69 73 69 6f 6e tom up. Revision
0cf0: 73 2c 20 74 68 65 6e 20 73 79 6d 62 6f 6c 73 2e s, then symbols.
0d00: 20 5f 5f 4e 4f 54 45 5f 5f 20 54 68 69 73 0a 09 __NOTE__ This..
0d10: 23 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 62 65 63 # works only bec
0d20: 61 75 73 65 20 73 71 6c 69 74 65 20 69 73 20 6e ause sqlite is n
0d30: 6f 74 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 ot checking fore
0d40: 69 67 6e 20 6b 65 79 0a 09 23 20 72 65 66 65 72 ign key..# refer
0d50: 65 6e 63 65 73 20 64 75 72 69 6e 67 20 69 6e 73 ences during ins
0d60: 65 72 74 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 ert. This allows
0d70: 20 74 6f 20 68 61 76 65 20 64 61 6e 67 6c 69 6e to have danglin
0d80: 67 0a 09 23 20 72 65 66 65 72 65 6e 63 65 73 20 g..# references
0d90: 77 68 69 63 68 20 61 72 65 20 66 69 78 65 64 20 which are fixed
0da0: 6c 61 74 65 72 2e 20 54 68 65 20 6c 6f 6e 67 65 later. The longe
0db0: 73 74 20 64 61 6e 67 6c 69 6e 67 0a 09 23 20 72 st dangling..# r
0dc0: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 66 6f eferences are fo
0dd0: 72 20 74 68 65 20 70 72 6f 6a 65 63 74 20 6c 65 r the project le
0de0: 76 65 6c 20 73 79 6d 62 6f 6c 73 2c 20 74 68 65 vel symbols, the
0df0: 73 65 20 77 65 20 64 6f 0a 09 23 20 6e 6f 74 20 se we do..# not
0e00: 73 61 76 65 20 68 65 72 65 2c 20 62 75 74 20 61 save here, but a
0e10: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 t the end of the
0e20: 20 70 61 73 73 2e 20 57 68 61 74 20 77 65 20 6e pass. What we n
0e30: 65 65 64 20 61 72 65 0a 09 23 20 74 68 65 20 69 eed are..# the i
0e40: 64 73 2c 20 68 65 6e 63 65 20 74 68 65 20 74 77 ds, hence the tw
0e50: 6f 20 70 68 61 73 65 73 2e 0a 0a 09 73 74 72 75 o phases....stru
0e60: 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 ct::list assign
0e70: 5b 24 73 65 6c 66 20 41 63 74 69 76 65 5d 20 72 [$self Active] r
0e80: 65 76 69 73 69 6f 6e 73 20 73 79 6d 62 6f 6c 73 evisions symbols
0e90: 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 72 ..foreach rev $r
0ea0: 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 evisions { $rev
0eb0: 64 65 66 69 64 20 7d 0a 09 66 6f 72 65 61 63 68 defid }..foreach
0ec0: 20 73 79 6d 20 24 73 79 6d 62 6f 6c 73 20 20 20 sym $symbols
0ed0: 7b 20 24 73 79 6d 20 64 65 66 69 64 20 7d 0a 0a { $sym defid }..
0ee0: 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74 69 .state transacti
0ef0: 6f 6e 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 on {.. foreac
0f00: 68 20 72 65 76 20 24 72 65 76 69 73 69 6f 6e 73 h rev $revisions
0f10: 20 7b 20 24 72 65 76 20 70 65 72 73 69 73 74 20 { $rev persist
0f20: 7d 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 73 }.. foreach s
0f30: 79 6d 20 24 73 79 6d 62 6f 6c 73 20 20 20 7b 20 ym $symbols {
0f40: 24 73 79 6d 20 70 65 72 73 69 73 74 20 7d 0a 09 $sym persist }..
0f50: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
0f60: 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 72 6f 70 . method drop
0f70: 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b {} {..foreach {
0f80: 5f 20 72 65 76 7d 20 20 20 20 5b 61 72 72 61 79 _ rev} [array
0f90: 20 67 65 74 20 6d 79 72 65 76 5d 20 20 20 20 20 get myrev]
0fa0: 20 7b 20 24 72 65 76 20 64 65 73 74 72 6f 79 20 { $rev destroy
0fb0: 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62 72 }..foreach {_ br
0fc0: 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74 anch} [array get
0fd0: 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 20 24 mybranches] { $
0fe0: 62 72 61 6e 63 68 20 64 65 73 74 72 6f 79 20 7d branch destroy }
0ff0: 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 ..foreach {_ tag
1000: 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 list} [array get
1010: 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 mytags] {..
1020: 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 foreach tag $tag
1030: 6c 69 73 74 20 7b 20 24 74 61 67 20 64 65 73 74 list { $tag dest
1040: 72 6f 79 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e roy }..}..return
1050: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 . }.. # #
1060: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
1070: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
1080: 23 23 23 0a 20 20 20 20 23 23 20 49 6d 70 6c 65 ###. ## Imple
1090: 6d 65 6e 74 20 74 68 65 20 73 69 6e 6b 0a 0a 20 ment the sink..
10a0: 20 20 20 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 method begin
10b0: 7b 7d 20 7b 23 69 67 6e 6f 72 65 7d 0a 0a 20 20 {} {#ignore}..
10c0: 20 20 6d 65 74 68 6f 64 20 73 65 74 68 65 61 64 method sethead
10d0: 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 {revnr} {..set
10e0: 6d 79 68 65 61 64 72 65 76 6e 72 20 24 72 65 76 myheadrevnr $rev
10f0: 6e 72 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d nr..return. }
1100: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 .. method set
1110: 70 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20 principalbranch
1120: 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 73 65 {branchnr} {..se
1130: 74 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 24 62 t myprincipal $b
1140: 72 61 6e 63 68 6e 72 0a 09 72 65 74 75 72 6e 0a ranchnr..return.
1150: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
1160: 64 20 64 65 66 74 61 67 20 7b 6e 61 6d 65 20 72 d deftag {name r
1170: 65 76 6e 72 7d 20 7b 0a 09 23 20 46 55 54 55 52 evnr} {..# FUTUR
1180: 45 3a 20 50 65 72 66 6f 72 6d 20 73 79 6d 62 6f E: Perform symbo
1190: 6c 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e l transformation
11a0: 20 68 65 72 65 2e 0a 0a 09 69 66 20 7b 5b 73 74 here....if {[st
11b0: 72 75 63 74 3a 3a 73 65 74 20 63 6f 6e 74 61 69 ruct::set contai
11c0: 6e 73 20 24 6d 79 73 79 6d 62 6f 6c 73 20 24 6e ns $mysymbols $n
11d0: 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f ame]} {.. tro
11e0: 75 62 6c 65 20 66 61 74 61 6c 20 22 4d 75 6c 74 uble fatal "Mult
11f0: 69 70 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 iple definitions
1200: 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 27 of the symbol '
1210: 24 6e 61 6d 65 27 20 69 6e 20 27 24 6d 79 70 61 $name' in '$mypa
1220: 74 68 27 22 0a 09 20 20 20 20 72 65 74 75 72 6e th'".. return
1230: 0a 09 7d 0a 0a 09 73 74 72 75 63 74 3a 3a 73 65 ..}...struct::se
1240: 74 20 61 64 64 20 6d 79 73 79 6d 62 6f 6c 73 20 t add mysymbols
1250: 24 6e 61 6d 65 0a 0a 09 69 66 20 7b 5b 72 65 76 $name...if {[rev
1260: 20 69 73 62 72 61 6e 63 68 72 65 76 6e 72 20 24 isbranchrevnr $
1270: 72 65 76 6e 72 20 2d 3e 20 62 72 61 6e 63 68 6e revnr -> branchn
1280: 72 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 r]} {.. $self
1290: 20 41 64 64 42 72 61 6e 63 68 20 24 6e 61 6d 65 AddBranch $name
12a0: 20 24 62 72 61 6e 63 68 6e 72 0a 09 7d 20 65 6c $branchnr..} el
12b0: 73 65 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 se {.. $self
12c0: 41 64 64 54 61 67 20 24 6e 61 6d 65 20 24 72 65 AddTag $name $re
12d0: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 vnr..}..return.
12e0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
12f0: 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d 20 setcomment {c}
1300: 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20 20 20 {# ignore}..
1310: 6d 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 method admindone
1320: 20 7b 7d 20 7b 0a 09 23 20 57 65 20 64 6f 20 6e {} {..# We do n
1330: 6f 74 68 69 6e 67 20 61 74 20 74 68 65 20 62 6f othing at the bo
1340: 75 6e 64 61 72 79 20 6f 66 20 61 64 6d 69 6e 20 undary of admin
1350: 61 6e 64 20 72 65 76 69 73 69 6f 6e 20 64 61 74 and revision dat
1360: 61 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 a. }.. met
1370: 68 6f 64 20 64 65 66 20 7b 72 65 76 6e 72 20 64 hod def {revnr d
1380: 61 74 65 20 61 75 74 68 6f 72 20 73 74 61 74 65 ate author state
1390: 20 6e 65 78 74 20 62 72 61 6e 63 68 65 73 7d 20 next branches}
13a0: 7b 0a 09 24 73 65 6c 66 20 52 65 63 6f 72 64 42 {..$self RecordB
13b0: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 24 62 72 ranchCommits $br
13c0: 61 6e 63 68 65 73 0a 0a 09 69 66 20 7b 5b 69 6e anches...if {[in
13d0: 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 fo exists myrev(
13e0: 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 $revnr)]} {..
13f0: 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 trouble fatal "
1400: 46 69 6c 65 20 24 6d 79 70 61 74 68 20 63 6f 6e File $mypath con
1410: 74 61 69 6e 73 20 64 75 70 6c 69 63 61 74 65 20 tains duplicate
1420: 64 65 66 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 definitions for
1430: 72 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 2e revision $revnr.
1440: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d ".. return..}
1450: 0a 0a 09 73 65 74 20 6d 79 61 69 64 28 24 72 65 ...set myaid($re
1460: 76 6e 72 29 20 5b 24 6d 79 70 72 6f 6a 65 63 74 vnr) [$myproject
1470: 20 64 65 66 61 75 74 68 6f 72 20 24 61 75 74 68 defauthor $auth
1480: 6f 72 5d 0a 09 73 65 74 20 6d 79 72 65 76 28 24 or]..set myrev($
1490: 72 65 76 6e 72 29 20 5b 72 65 76 20 25 41 55 54 revnr) [rev %AUT
14a0: 4f 25 20 24 72 65 76 6e 72 20 24 64 61 74 65 20 O% $revnr $date
14b0: 24 73 74 61 74 65 20 24 73 65 6c 66 5d 0a 0a 09 $state $self]...
14c0: 24 73 65 6c 66 20 52 65 63 6f 72 64 42 61 73 69 $self RecordBasi
14d0: 63 44 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72 cDependencies $r
14e0: 65 76 6e 72 20 24 6e 65 78 74 0a 09 72 65 74 75 evnr $next..retu
14f0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
1500: 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d 20 thod defdone {}
1510: 7b 0a 09 23 20 54 68 69 73 20 69 73 20 61 6c 6c {..# This is all
1520: 20 64 6f 6e 65 20 61 66 74 65 72 20 74 68 65 20 done after the
1530: 72 65 76 69 73 69 6f 6e 20 74 72 65 65 20 68 61 revision tree ha
1540: 73 20 62 65 65 6e 20 65 78 74 72 61 63 74 65 64 s been extracted
1550: 0a 09 23 20 66 72 6f 6d 20 74 68 65 20 66 69 6c ..# from the fil
1560: 65 2c 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f e, before the co
1570: 6d 6d 69 74 20 6d 65 73 61 67 65 73 20 61 6e 64 mmit mesages and
1580: 20 64 65 6c 74 61 20 74 65 78 74 73 20 61 72 65 delta texts are
1590: 0a 09 23 20 70 72 6f 63 65 73 73 65 64 2e 0a 0a ..# processed...
15a0: 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 50 72 .$self ProcessPr
15b0: 69 6d 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65 imaryDependencie
15c0: 73 0a 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 s..$self Process
15d0: 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 BranchDependenci
15e0: 65 73 0a 09 24 73 65 6c 66 20 53 6f 72 74 42 72 es..$self SortBr
15f0: 61 6e 63 68 65 73 0a 09 24 73 65 6c 66 20 50 72 anches..$self Pr
1600: 6f 63 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e ocessTagDependen
1610: 63 69 65 73 0a 09 24 73 65 6c 66 20 44 65 74 65 cies..$self Dete
1620: 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 rmineTheRootRevi
1630: 73 69 6f 6e 0a 09 72 65 74 75 72 6e 0a 20 20 20 sion..return.
1640: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 }.. method s
1650: 65 74 64 65 73 63 20 7b 64 7d 20 7b 23 20 69 67 etdesc {d} {# ig
1660: 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f nore}.. metho
1670: 64 20 65 78 74 65 6e 64 20 7b 72 65 76 6e 72 20 d extend {revnr
1680: 63 6f 6d 6d 69 74 6d 73 67 20 74 65 78 74 72 61 commitmsg textra
1690: 6e 67 65 7d 20 7b 0a 09 73 65 74 20 63 6d 69 64 nge} {..set cmid
16a0: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 66 [$myproject def
16b0: 63 6d 65 73 73 61 67 65 20 5b 73 74 72 69 6e 67 cmessage [string
16c0: 20 74 72 69 6d 20 24 63 6f 6d 6d 69 74 6d 73 67 trim $commitmsg
16d0: 5d 5d 0a 0a 09 73 65 74 20 72 65 76 20 24 6d 79 ]]...set rev $my
16e0: 72 65 76 28 24 72 65 76 6e 72 29 0a 0a 09 69 66 rev($revnr)...if
16f0: 20 7b 5b 24 72 65 76 20 68 61 73 6d 65 74 61 5d {[$rev hasmeta]
1700: 7d 20 7b 0a 09 20 20 20 20 23 20 41 70 70 61 72 } {.. # Appar
1710: 65 6e 74 6c 79 20 72 65 70 6f 73 69 74 6f 72 69 ently repositori
1720: 65 73 20 65 78 69 73 74 20 69 6e 20 77 68 69 63 es exist in whic
1730: 68 20 74 68 65 20 64 65 6c 74 61 20 64 61 74 61 h the delta data
1740: 0a 09 20 20 20 20 23 20 66 6f 72 20 72 65 76 69 .. # for revi
1750: 73 69 6f 6e 20 31 2e 31 20 69 73 20 70 72 6f 76 sion 1.1 is prov
1760: 69 64 65 64 20 73 65 76 65 72 61 6c 20 74 69 6d ided several tim
1770: 65 73 2c 20 61 74 20 6c 65 61 73 74 0a 09 20 20 es, at least..
1780: 20 20 23 20 74 77 69 63 65 2e 20 54 68 65 20 61 # twice. The a
1790: 63 74 75 61 6c 20 63 61 75 73 65 20 6f 66 20 74 ctual cause of t
17a0: 68 69 73 20 64 75 70 6c 69 63 61 74 69 6f 6e 20 his duplication
17b0: 69 73 20 6e 6f 74 0a 09 20 20 20 20 23 20 6b 6e is not.. # kn
17c0: 6f 77 6e 2e 20 53 70 65 63 75 6c 61 74 69 6f 6e own. Speculation
17d0: 20 63 65 6e 74 65 72 73 20 6f 6e 20 52 43 53 2f centers on RCS/
17e0: 43 56 53 20 62 75 67 73 2c 20 6f 72 20 66 72 6f CVS bugs, or fro
17f0: 6d 0a 09 20 20 20 20 23 20 6d 61 6e 75 61 6c 20 m.. # manual
1800: 65 64 69 74 73 20 6f 66 20 74 68 65 20 72 65 70 edits of the rep
1810: 6f 73 69 74 6f 72 79 20 77 68 69 63 68 20 62 6f ository which bo
1820: 72 6b 65 64 20 74 68 65 0a 09 20 20 20 20 23 20 rked the.. #
1830: 69 6e 74 65 72 6e 61 6c 73 2e 20 57 68 61 74 65 internals. Whate
1840: 76 65 72 20 74 68 65 20 63 61 75 73 65 2c 20 74 ver the cause, t
1850: 65 73 74 69 6e 67 20 73 68 6f 77 65 64 20 74 68 esting showed th
1860: 61 74 20 62 6f 74 68 0a 09 20 20 20 20 23 20 63 at both.. # c
1870: 76 73 20 61 6e 64 20 72 63 73 20 75 73 65 20 74 vs and rcs use t
1880: 68 65 20 66 69 72 73 74 20 64 65 66 69 6e 69 74 he first definit
1890: 69 6f 6e 20 77 68 65 6e 20 70 65 72 66 6f 72 6d ion when perform
18a0: 69 6e 67 20 61 0a 09 20 20 20 20 23 20 63 68 65 ing a.. # che
18b0: 63 6b 6f 75 74 2c 20 61 6e 64 20 77 65 20 66 6f ckout, and we fo
18c0: 6c 6c 6f 77 20 74 68 65 69 72 20 6c 65 61 64 2e llow their lead.
18d0: 20 53 69 64 65 20 6e 6f 74 65 73 3a 20 27 63 76 Side notes: 'cv
18e0: 73 0a 09 20 20 20 20 23 20 6c 6f 67 27 20 66 61 s.. # log' fa
18f0: 69 6c 73 20 6f 6e 20 73 75 63 68 20 61 20 66 69 ils on such a fi
1900: 6c 65 2c 20 61 6e 64 20 27 63 76 73 20 72 6c 6f le, and 'cvs rlo
1910: 67 27 20 70 72 69 6e 74 73 20 74 68 65 20 6c 6f g' prints the lo
1920: 67 0a 09 20 20 20 20 23 20 6d 65 73 73 61 67 65 g.. # message
1930: 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20 from the first
1940: 64 65 6c 74 61 2c 20 69 67 6e 6f 72 69 6e 67 20 delta, ignoring
1950: 74 68 65 20 73 65 63 6f 6e 64 2e 0a 0a 09 20 20 the second....
1960: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 log write 1 fi
1970: 6c 65 20 22 49 6e 20 66 69 6c 65 20 24 6d 79 70 le "In file $myp
1980: 61 74 68 20 3a 20 44 75 70 6c 69 63 61 74 65 20 ath : Duplicate
1990: 64 65 6c 74 61 20 64 61 74 61 20 66 6f 72 20 72 delta data for r
19a0: 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 22 0a evision $revnr".
19b0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 . log write 1
19c0: 20 66 69 6c 65 20 22 49 67 6e 6f 72 69 6e 67 20 file "Ignoring
19d0: 74 68 65 20 64 75 70 6c 69 63 61 74 65 22 0a 09 the duplicate"..
19e0: 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 return..}...
19f0: 23 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 # Determine the
1a00: 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d line of developm
1a10: 65 6e 74 20 66 6f 72 20 74 68 65 20 72 65 76 69 ent for the revi
1a20: 73 69 6f 6e 20 28 70 72 6f 6a 65 63 74 0a 09 23 sion (project..#
1a30: 20 6c 65 76 65 6c 29 2e 20 54 68 69 73 20 67 69 level). This gi
1a40: 76 65 73 20 75 73 20 74 68 65 20 62 72 61 6e 63 ves us the branc
1a50: 68 69 64 20 74 6f 6f 2c 20 72 65 71 75 69 72 65 hid too, require
1a60: 64 20 66 6f 72 20 74 68 65 0a 09 23 20 6d 65 74 d for the..# met
1a70: 61 20 64 61 74 61 20 67 72 6f 75 70 20 74 68 65 a data group the
1a80: 20 72 65 76 69 73 69 6f 6e 20 69 73 20 69 6e 2e revision is in.
1a90: 20 28 4e 6f 74 65 3a 20 42 79 20 70 75 74 74 69 (Note: By putti
1aa0: 6e 67 20 62 6f 74 68 0a 09 23 20 62 72 61 6e 63 ng both..# branc
1ab0: 68 2f 6c 6f 64 20 61 6e 64 20 70 72 6f 6a 65 63 h/lod and projec
1ac0: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e t information in
1ad0: 74 6f 20 74 68 65 20 67 72 6f 75 70 20 77 65 20 to the group we
1ae0: 65 6e 73 75 72 65 0a 09 23 20 74 68 61 74 20 61 ensure..# that a
1af0: 6e 79 20 63 72 6f 73 73 2d 70 72 6f 6a 65 63 74 ny cross-project
1b00: 20 61 6e 64 20 63 72 6f 73 73 2d 62 72 61 6e 63 and cross-branc
1b10: 68 20 63 6f 6d 6d 69 74 73 20 61 72 65 0a 09 23 h commits are..#
1b20: 20 73 65 70 61 72 61 74 65 64 20 69 6e 74 6f 20 separated into
1b30: 6d 75 6c 74 69 70 6c 65 20 63 6f 6d 6d 69 74 73 multiple commits
1b40: 2c 20 6f 6e 65 20 69 6e 20 65 61 63 68 20 6f 66 , one in each of
1b50: 20 74 68 65 20 70 72 6f 6a 65 63 74 73 0a 09 23 the projects..#
1b60: 20 61 6e 64 2f 6f 72 20 62 72 61 6e 63 68 65 73 and/or branches
1b70: 29 2e 0a 0a 09 73 65 74 20 6c 6f 64 20 5b 24 73 )....set lod [$s
1b80: 65 6c 66 20 47 65 74 4c 4f 44 20 24 72 65 76 6e elf GetLOD $revn
1b90: 72 5d 0a 0a 09 24 72 65 76 20 73 65 74 6d 65 74 r]...$rev setmet
1ba0: 61 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 a [$myproject de
1bb0: 66 6d 65 74 61 20 5b 24 6c 6f 64 20 69 64 5d 20 fmeta [$lod id]
1bc0: 24 6d 79 61 69 64 28 24 72 65 76 6e 72 29 20 24 $myaid($revnr) $
1bd0: 63 6d 69 64 5d 0a 09 24 72 65 76 20 73 65 74 74 cmid]..$rev sett
1be0: 65 78 74 20 24 74 65 78 74 72 61 6e 67 65 0a 09 ext $textrange..
1bf0: 24 72 65 76 20 73 65 74 6c 6f 64 20 20 24 6c 6f $rev setlod $lo
1c00: 64 0a 0a 09 23 20 49 66 20 74 68 69 73 20 69 73 d...# If this is
1c10: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 2c 20 77 revision 1.1, w
1c20: 65 20 68 61 76 65 20 74 6f 20 64 65 74 65 72 6d e have to determ
1c30: 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 0a ine whether the.
1c40: 09 23 20 66 69 6c 65 20 73 65 65 6d 73 20 74 6f .# file seems to
1c50: 20 68 61 76 65 20 62 65 65 6e 20 63 72 65 61 74 have been creat
1c60: 65 64 20 74 68 72 6f 75 67 68 20 27 63 76 73 20 ed through 'cvs
1c70: 61 64 64 27 20 69 6e 73 74 65 61 64 20 6f 66 0a add' instead of.
1c80: 09 23 20 27 63 76 73 20 69 6d 70 6f 72 74 27 2e .# 'cvs import'.
1c90: 20 54 68 69 73 20 63 61 6e 20 62 65 20 64 6f 6e This can be don
1ca0: 65 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 61 74 20 e by looking at
1cb0: 74 68 65 20 75 6e 2d 0a 09 23 20 61 64 75 6c 74 the un-..# adult
1cc0: 65 72 61 74 65 64 20 63 6f 6d 6d 69 74 20 6d 65 erated commit me
1cd0: 73 73 61 67 65 2c 20 61 73 20 43 56 53 20 75 73 ssage, as CVS us
1ce0: 65 73 20 61 20 68 61 72 64 77 69 72 65 64 20 6d es a hardwired m
1cf0: 61 67 69 63 0a 09 23 20 6d 65 73 73 61 67 65 20 agic..# message
1d00: 66 6f 72 20 74 68 65 20 6c 61 74 74 65 72 2c 20 for the latter,
1d10: 69 2e 65 2e 20 22 49 6e 69 74 69 61 6c 20 72 65 i.e. "Initial re
1d20: 76 69 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a 09 23 vision\n", no..#
1d30: 20 70 65 72 69 6f 64 2e 20 20 28 54 68 69 73 20 period. (This
1d40: 66 61 63 74 20 61 6c 73 6f 20 68 65 6c 70 73 20 fact also helps
1d50: 75 73 20 77 68 65 6e 20 74 68 65 20 74 69 6d 65 us when the time
1d60: 20 63 6f 6d 65 73 20 74 6f 0a 09 23 20 64 65 74 comes to..# det
1d70: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 ermine whether t
1d80: 68 69 73 20 66 69 6c 65 20 6d 69 67 68 74 20 68 his file might h
1d90: 61 76 65 20 68 61 64 20 61 20 64 65 66 61 75 6c ave had a defaul
1da0: 74 20 62 72 61 6e 63 68 0a 09 23 20 69 6e 20 74 t branch..# in t
1db0: 68 65 20 70 61 73 74 2e 29 0a 0a 09 69 66 20 7b he past.)...if {
1dc0: 24 72 65 76 6e 72 20 65 71 20 22 31 2e 31 22 7d $revnr eq "1.1"}
1dd0: 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 6d {.. set myim
1de0: 70 6f 72 74 65 64 20 5b 65 78 70 72 20 7b 24 63 ported [expr {$c
1df0: 6f 6d 6d 69 74 6d 73 67 20 65 71 20 22 49 6e 69 ommitmsg eq "Ini
1e00: 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22 tial revision\n"
1e10: 7d 5d 0a 09 7d 0a 0a 09 23 20 48 65 72 65 20 77 }]..}...# Here w
1e20: 65 20 61 6c 73 6f 20 6b 65 65 70 20 74 72 61 63 e also keep trac
1e30: 6b 20 6f 66 20 74 68 65 20 6f 72 64 65 72 20 69 k of the order i
1e40: 6e 20 77 68 69 63 68 20 74 68 65 20 72 65 76 69 n which the revi
1e50: 73 69 6f 6e 73 0a 09 23 20 77 65 72 65 20 61 64 sions..# were ad
1e60: 64 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65 2e ded to the file.
1e70: 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79 72 65 76 ...lappend myrev
1e80: 69 73 69 6f 6e 73 20 24 72 65 76 0a 09 72 65 74 isions $rev..ret
1e90: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
1ea0: 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b 0a ethod done {} {.
1eb0: 09 23 20 43 6f 6d 70 6c 65 74 65 20 74 68 65 20 .# Complete the
1ec0: 72 65 76 69 73 69 6f 6e 73 2c 20 62 72 61 6e 63 revisions, branc
1ed0: 68 65 73 2c 20 61 6e 64 20 74 61 67 73 2e 20 54 hes, and tags. T
1ee0: 68 69 73 20 69 6e 63 6c 75 64 65 73 0a 09 23 20 his includes..#
1ef0: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6e 6f looking for a no
1f00: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 n-trunk default
1f10: 62 72 61 6e 63 68 2c 20 6d 61 72 6b 69 6e 67 20 branch, marking
1f20: 69 74 73 20 6d 65 6d 62 65 72 73 0a 09 23 20 61 its members..# a
1f30: 6e 64 20 6c 69 6e 6b 69 6e 67 20 74 68 65 6d 20 nd linking them
1f40: 69 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2c 20 into the trunk,
1f50: 70 6f 73 73 69 62 6c 79 20 65 78 63 6c 75 64 69 possibly excludi
1f60: 6e 67 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 ng..# non-trunk
1f70: 64 61 74 61 2c 20 61 6e 64 20 63 6f 6c 6c 65 63 data, and collec
1f80: 74 69 6e 67 20 61 67 67 72 65 67 61 74 65 20 73 ting aggregate s
1f90: 79 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 73 ymbol statistics
1fa0: 2e 0a 0a 09 24 73 65 6c 66 20 44 65 74 65 72 6d ....$self Determ
1fb0: 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 ineRevisionOpera
1fc0: 74 69 6f 6e 73 0a 09 24 73 65 6c 66 20 44 65 74 tions..$self Det
1fd0: 65 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 ermineLinesOfDev
1fe0: 65 6c 6f 70 6d 65 6e 74 0a 09 24 73 65 6c 66 20 elopment..$self
1ff0: 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65 HandleNonTrunkDe
2000: 66 61 75 6c 74 42 72 61 6e 63 68 0a 09 24 73 65 faultBranch..$se
2010: 6c 66 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 lf RemoveIrrelev
2020: 61 6e 74 44 65 6c 65 74 69 6f 6e 73 0a 09 24 73 antDeletions..$s
2030: 65 6c 66 20 52 65 6d 6f 76 65 49 6e 69 74 69 61 elf RemoveInitia
2040: 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e 73 lBranchDeletions
2050: 0a 0a 09 69 66 20 7b 5b 24 6d 79 70 72 6f 6a 65 ...if {[$myproje
2060: 63 74 20 74 72 75 6e 6b 6f 6e 6c 79 5d 7d 20 7b ct trunkonly]} {
2070: 0a 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 6c .. $self Excl
2080: 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 udeNonTrunkInfor
2090: 6d 61 74 69 6f 6e 0a 09 7d 0a 0a 09 24 73 65 6c mation..}...$sel
20a0: 66 20 41 67 67 72 65 67 61 74 65 53 79 6d 62 6f f AggregateSymbo
20b0: 6c 44 61 74 61 0a 09 72 65 74 75 72 6e 0a 20 20 lData..return.
20c0: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 }.. # # ##
20d0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
20e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
20f0: 0a 20 20 20 20 23 23 20 50 61 73 73 20 58 49 49 . ## Pass XII
2100: 20 28 49 6d 70 6f 72 74 29 2e 0a 0a 20 20 20 20 (Import)...
2110: 6d 65 74 68 6f 64 20 70 75 73 68 74 6f 20 7b 72 method pushto {r
2120: 65 70 6f 73 69 74 6f 72 79 7d 20 7b 0a 09 73 65 epository} {..se
2130: 74 20 77 73 20 5b 24 72 65 70 6f 73 69 74 6f 72 t ws [$repositor
2140: 79 20 77 6f 72 6b 73 70 61 63 65 5d 0a 09 73 74 y workspace]..st
2150: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 ruct::list assig
2160: 6e 20 5b 24 73 65 6c 66 20 45 78 70 61 6e 64 20 n [$self Expand
2170: 24 77 73 5d 20 66 69 6c 65 6d 61 70 20 72 65 76 $ws] filemap rev
2180: 6d 61 70 0a 09 23 20 66 69 6c 65 6d 61 70 20 3d map..# filemap =
2190: 20 64 69 63 74 20 28 70 61 74 68 20 2d 3e 20 75 dict (path -> u
21a0: 75 69 64 29 0a 09 23 20 72 65 76 6d 61 70 20 20 uid)..# revmap
21b0: 3d 20 64 69 63 74 20 28 70 61 74 68 20 2d 3e 20 = dict (path ->
21c0: 72 69 64 29 0a 0a 09 61 72 72 61 79 20 73 65 74 rid)...array set
21d0: 20 69 64 6d 61 70 20 5b 24 72 65 70 6f 73 69 74 idmap [$reposit
21e0: 6f 72 79 20 69 6d 70 6f 72 74 66 69 6c 65 73 20 ory importfiles
21f0: 24 66 69 6c 65 6d 61 70 5d 0a 0a 09 23 20 57 69 $filemap]...# Wi
2200: 70 65 20 77 6f 72 6b 73 70 61 63 65 20 63 6c 65 pe workspace cle
2210: 61 6e 20 6f 66 20 74 68 65 20 69 6d 70 6f 72 74 an of the import
2220: 65 64 20 66 69 6c 65 73 2e 0a 09 66 6f 72 65 61 ed files...forea
2230: 63 68 20 78 20 5b 67 6c 6f 62 20 2d 64 69 72 65 ch x [glob -dire
2240: 63 74 6f 72 79 20 24 77 73 20 72 2a 5d 20 7b 20 ctory $ws r*] {
2250: 3a 3a 66 69 6c 65 20 64 65 6c 65 74 65 20 24 78 ::file delete $x
2260: 20 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 70 61 }...foreach {pa
2270: 74 68 20 72 69 64 7d 20 24 72 65 76 6d 61 70 20 th rid} $revmap
2280: 7b 0a 09 20 20 20 20 73 65 74 20 75 75 69 64 20 {.. set uuid
2290: 24 69 64 6d 61 70 28 24 70 61 74 68 29 0a 09 20 $idmap($path)..
22a0: 20 20 20 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 state run {..
22b0: 09 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 65 76 .INSERT INTO rev
22c0: 75 75 69 64 20 28 72 69 64 2c 20 20 75 75 69 64 uuid (rid, uuid
22d0: 29 0a 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 )...VALUES
22e0: 20 20 20 20 20 20 20 20 28 24 72 69 64 2c 20 24 ($rid, $
22f0: 75 75 69 64 29 0a 09 20 20 20 20 7d 0a 09 7d 0a uuid).. }..}.
2300: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
2310: 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 method Expand
2320: 20 7b 64 69 72 7d 20 7b 0a 09 73 65 74 20 65 78 {dir} {..set ex
2330: 20 5b 73 74 72 75 63 74 3a 3a 67 72 61 70 68 20 [struct::graph
2340: 65 78 5d 20 3b 20 23 20 45 78 70 61 6e 73 69 6f ex] ; # Expansio
2350: 6e 20 67 72 61 70 68 2e 0a 09 73 65 74 20 7a 70 n graph...set zp
2360: 20 5b 73 74 72 75 63 74 3a 3a 67 72 61 70 68 20 [struct::graph
2370: 7a 70 5d 20 3b 20 23 20 5a 69 70 2f 49 6d 70 6f zp] ; # Zip/Impo
2380: 72 74 20 67 72 61 70 68 2e 0a 0a 09 63 6c 6f 73 rt graph....clos
2390: 65 20 5b 6f 70 65 6e 20 24 64 69 72 2f 72 5f 5f e [open $dir/r__
23a0: 65 6d 70 74 79 5f 5f 20 77 5d 3b 23 20 42 61 73 empty__ w];# Bas
23b0: 65 20 66 6f 72 20 64 65 74 61 63 68 65 64 20 72 e for detached r
23c0: 6f 6f 74 73 20 6f 6e 20 62 72 61 6e 63 68 65 73 oots on branches
23d0: 2e 0a 0a 09 23 20 50 68 61 73 65 20 49 3a 20 50 ....# Phase I: P
23e0: 75 6c 6c 20 74 68 65 20 72 65 76 69 73 69 6f 6e ull the revision
23f0: 73 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 61 6e s from memory an
2400: 64 20 66 69 6c 6c 20 74 68 65 20 67 72 61 70 68 d fill the graph
2410: 73 0a 09 23 20 20 20 20 20 20 20 20 20 20 77 69 s..# wi
2420: 74 68 20 74 68 65 6d 2e 2e 2e 0a 0a 09 73 65 74 th them......set
2430: 20 65 61 72 63 73 20 20 20 7b 7d 20 3b 20 23 20 earcs {} ; #
2440: 41 72 63 73 20 66 6f 72 20 65 78 70 61 6e 73 69 Arcs for expansi
2450: 6f 6e 20 67 72 61 70 68 0a 09 73 65 74 20 7a 61 on graph..set za
2460: 72 63 73 20 20 20 7b 7d 20 3b 20 23 20 41 72 63 rcs {} ; # Arc
2470: 73 20 66 6f 72 20 7a 69 70 20 67 72 61 70 68 0a s for zip graph.
2480: 09 73 65 74 20 72 65 76 6d 61 70 20 20 7b 7d 20 .set revmap {}
2490: 3b 20 23 20 70 61 74 68 20 2d 3e 20 72 69 64 20 ; # path -> rid
24a0: 6d 61 70 20 74 6f 20 6c 61 74 65 72 20 6d 65 72 map to later mer
24b0: 67 65 20 75 75 69 64 20 69 6e 66 6f 72 6d 61 74 ge uuid informat
24c0: 69 6f 6e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 ion...foreach {r
24d0: 69 64 20 72 65 76 6e 72 20 70 61 72 65 6e 74 20 id revnr parent
24e0: 63 68 69 6c 64 20 63 6f 66 66 20 63 6c 65 6e 7d child coff clen}
24f0: 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 [state run {..
2500: 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c SELECT R.rid,
2510: 20 52 2e 72 65 76 2c 20 52 2e 70 61 72 65 6e 74 R.rev, R.parent
2520: 2c 20 52 2e 63 68 69 6c 64 2c 20 52 2e 63 6f 66 , R.child, R.cof
2530: 66 2c 20 52 2e 63 6c 65 6e 0a 09 20 20 20 20 46 f, R.clen.. F
2540: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 ROM revision R
2550: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 66 .. WHERE R.f
2560: 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 7b id = $myid..}] {
2570: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .. lappend re
2580: 76 6d 61 70 20 72 24 72 65 76 6e 72 20 24 72 69 vmap r$revnr $ri
2590: 64 0a 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64 65 d... $zp node
25a0: 20 69 6e 73 65 72 74 20 24 72 69 64 0a 09 20 20 insert $rid..
25b0: 20 20 24 7a 70 20 6e 6f 64 65 20 73 65 74 20 20 $zp node set
25c0: 20 20 24 72 69 64 20 72 65 76 6e 72 20 24 72 65 $rid revnr $re
25d0: 76 6e 72 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64 vnr.. $zp nod
25e0: 65 20 73 65 74 20 20 20 20 24 72 69 64 20 6c 61 e set $rid la
25f0: 62 65 6c 20 3c 24 72 65 76 6e 72 3e 0a 0a 09 20 bel <$revnr>...
2600: 20 20 20 69 66 20 7b 24 63 68 69 6c 64 20 6e 65 if {$child ne
2610: 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 ""} {...lappend
2620: 20 7a 61 72 63 73 20 24 63 68 69 6c 64 20 24 72 zarcs $child $r
2630: 69 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 id.. }...
2640: 24 65 78 20 6e 6f 64 65 20 69 6e 73 65 72 74 20 $ex node insert
2650: 24 72 69 64 0a 09 20 20 20 20 24 65 78 20 6e 6f $rid.. $ex no
2660: 64 65 20 73 65 74 20 20 20 20 24 72 69 64 20 74 de set $rid t
2670: 65 78 74 20 20 5b 6c 69 73 74 20 24 63 6f 66 66 ext [list $coff
2680: 20 24 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65 78 $clen].. $ex
2690: 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 72 69 node set $ri
26a0: 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a 09 d revnr $revnr..
26b0: 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 65 74 $ex node set
26c0: 20 20 20 20 24 72 69 64 20 6c 61 62 65 6c 20 3c $rid label <
26d0: 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69 66 $revnr>... if
26e0: 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 {[rev istrunkre
26f0: 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 vnr $revnr]} {..
2700: 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b 2c .# On the trunk,
2710: 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69 this revision i
2720: 73 20 61 20 64 65 6c 74 61 20 62 61 73 65 64 20 s a delta based
2730: 6f 6e 20 74 68 65 0a 09 09 23 20 63 68 69 6c 64 on the...# child
2740: 2e 20 54 68 61 74 20 6d 61 6b 65 73 20 74 68 65 . That makes the
2750: 20 63 68 69 6c 64 20 6f 75 72 20 70 72 65 64 65 child our prede
2760: 63 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b 24 cessor.....if {$
2770: 63 68 69 6c 64 20 65 71 20 22 22 7d 20 63 6f 6e child eq ""} con
2780: 74 69 6e 75 65 0a 09 09 6c 61 70 70 65 6e 64 20 tinue...lappend
2790: 65 61 72 63 73 20 24 63 68 69 6c 64 20 24 72 69 earcs $child $ri
27a0: 64 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a d.. } else {.
27b0: 09 09 23 20 4f 6e 20 61 20 62 72 61 6e 63 68 20 ..# On a branch
27c0: 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69 73 this revision is
27d0: 20 61 20 64 65 6c 74 61 20 62 61 73 65 64 20 6f a delta based o
27e0: 6e 20 74 68 65 0a 09 09 23 20 70 61 72 65 6e 74 n the...# parent
27f0: 2e 20 54 68 61 74 20 6d 61 6b 65 73 20 74 68 65 . That makes the
2800: 20 70 61 72 65 6e 74 20 6f 75 72 20 70 72 65 64 parent our pred
2810: 65 63 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b ecessor.....if {
2820: 24 70 61 72 65 6e 74 20 65 71 20 22 22 7d 20 7b $parent eq ""} {
2830: 0a 09 09 20 20 20 20 23 20 44 65 74 61 63 68 65 ... # Detache
2840: 64 20 62 72 61 6e 63 68 20 72 6f 6f 74 2c 20 74 d branch root, t
2850: 68 69 73 20 69 73 20 61 20 70 61 74 63 68 20 62 his is a patch b
2860: 61 73 65 64 20 6f 6e 0a 09 09 20 20 20 20 23 20 ased on... #
2870: 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e 67 the empty string
2880: 2e 0a 09 09 20 20 20 20 24 65 78 20 6e 6f 64 65 .... $ex node
2890: 20 73 65 74 20 24 72 69 64 20 5f 5f 62 61 73 65 set $rid __base
28a0: 5f 5f 20 72 5f 5f 65 6d 70 74 79 5f 5f 20 0a 09 __ r__empty__ ..
28b0: 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09 09 . continue...
28c0: 7d 0a 09 09 6c 61 70 70 65 6e 64 20 65 61 72 63 }...lappend earc
28d0: 73 20 24 70 61 72 65 6e 74 20 24 72 69 64 0a 09 s $parent $rid..
28e0: 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 50 68 61 }..}...# Pha
28f0: 73 65 20 49 49 3a 20 49 6e 73 65 72 74 20 74 68 se II: Insert th
2900: 65 20 61 63 63 75 6d 75 6c 61 74 65 64 20 64 65 e accumulated de
2910: 70 65 6e 64 65 6e 63 69 65 73 0a 0a 09 66 6f 72 pendencies...for
2920: 65 61 63 68 20 7b 66 72 6f 6d 20 74 6f 7d 20 24 each {from to} $
2930: 65 61 72 63 73 20 7b 20 24 65 78 20 61 72 63 20 earcs { $ex arc
2940: 69 6e 73 65 72 74 20 24 66 72 6f 6d 20 24 74 6f insert $from $to
2950: 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 66 72 6f }..foreach {fro
2960: 6d 20 74 6f 7d 20 24 7a 61 72 63 73 20 7b 20 24 m to} $zarcs { $
2970: 7a 70 20 61 72 63 20 69 6e 73 65 72 74 20 24 66 zp arc insert $f
2980: 72 6f 6d 20 24 74 6f 20 7d 0a 0a 09 23 20 50 68 rom $to }...# Ph
2990: 61 73 65 20 49 49 49 3a 20 54 72 61 76 65 72 73 ase III: Travers
29a0: 65 20 74 68 65 20 67 72 61 70 68 73 2c 20 65 78 e the graphs, ex
29b0: 70 61 6e 64 20 74 68 65 20 66 69 6c 65 2c 20 61 pand the file, a
29c0: 6e 64 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 nd..#
29d0: 20 67 65 6e 65 72 61 74 65 20 69 6d 70 6f 72 74 generate import
29e0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a 0a instructions...
29f0: 09 73 65 74 20 61 72 63 68 69 76 65 20 5b 3a 3a .set archive [::
2a00: 66 69 6c 65 20 6a 6f 69 6e 20 5b 24 6d 79 70 72 file join [$mypr
2a10: 6f 6a 65 63 74 20 66 75 6c 6c 70 61 74 68 5d 20 oject fullpath]
2a20: 24 6d 79 70 61 74 68 5d 0a 09 73 65 74 20 61 63 $mypath]..set ac
2a30: 20 20 20 20 20 20 5b 6f 70 65 6e 20 24 61 72 63 [open $arc
2a40: 68 69 76 65 20 72 5d 0a 09 66 63 6f 6e 66 69 67 hive r]..fconfig
2a50: 75 72 65 20 24 61 63 20 2d 74 72 61 6e 73 6c 61 ure $ac -transla
2a60: 74 69 6f 6e 20 62 69 6e 61 72 79 0a 0a 09 23 20 tion binary...#
2a70: 46 69 72 73 74 20 74 72 61 76 65 72 73 65 20 74 First traverse t
2a80: 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 61 he expansion gra
2a90: 70 68 2c 20 74 68 69 73 20 67 69 76 65 73 20 75 ph, this gives u
2aa0: 73 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f s the..# revisio
2ab0: 6e 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 ns in the order
2ac0: 77 65 20 68 61 76 65 20 74 6f 20 65 78 70 61 6e we have to expan
2ad0: 64 20 74 68 65 6d 2c 20 77 68 69 63 68 20 77 65 d them, which we
2ae0: 20 64 6f 2e 0a 0a 09 73 65 74 20 6d 61 78 20 5b do....set max [
2af0: 6c 6c 65 6e 67 74 68 20 5b 24 65 78 20 6e 6f 64 llength [$ex nod
2b00: 65 73 5d 5d 0a 09 73 65 74 20 6d 79 69 6d 70 6f es]]..set myimpo
2b10: 72 74 20 30 0a 0a 09 67 74 63 6f 72 65 20 64 61 rt 0...gtcore da
2b20: 74 61 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f tacmd [mymetho
2b30: 64 20 45 78 70 61 6e 64 44 61 74 61 5d 0a 09 67 d ExpandData]..g
2b40: 74 63 6f 72 65 20 66 6f 72 6d 61 74 63 6d 64 20 tcore formatcmd
2b50: 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 [mymethod Expand
2b60: 46 6f 72 6d 61 74 5d 0a 09 67 74 63 6f 72 65 20 Format]..gtcore
2b70: 73 6f 72 74 63 6d 64 20 20 20 5b 6d 79 6d 65 74 sortcmd [mymet
2b80: 68 6f 64 20 45 78 70 61 6e 64 53 6f 72 74 5d 0a hod ExpandSort].
2b90: 09 67 74 63 6f 72 65 20 73 61 76 65 63 6d 64 20 .gtcore savecmd
2ba0: 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 [mymethod Expa
2bb0: 6e 64 31 20 24 61 63 20 24 64 69 72 20 24 6d 61 nd1 $ac $dir $ma
2bc0: 78 5d 0a 0a 09 67 74 63 6f 72 65 20 74 72 61 76 x]...gtcore trav
2bd0: 65 72 73 65 20 24 65 78 20 7b 45 78 70 61 6e 64 erse $ex {Expand
2be0: 69 6e 67 20 72 65 76 69 73 69 6f 6e 73 2e 2e 2e ing revisions...
2bf0: 7d 0a 09 63 6c 6f 73 65 20 24 61 63 0a 0a 09 23 }..close $ac...#
2c00: 20 4e 6f 77 20 74 72 61 76 65 72 73 65 20 74 68 Now traverse th
2c10: 65 20 69 6d 70 6f 72 74 20 67 72 61 70 68 2c 20 e import graph,
2c20: 74 68 69 73 20 62 75 69 6c 64 73 20 74 68 65 20 this builds the
2c30: 69 6e 73 74 72 75 63 74 69 6f 6e 0a 09 23 20 6d instruction..# m
2c40: 61 70 20 66 6f 72 20 74 68 65 20 66 6f 73 73 69 ap for the fossi
2c50: 6c 20 64 65 6c 74 61 73 2e 0a 0a 09 67 74 63 6f l deltas....gtco
2c60: 72 65 20 64 61 74 61 63 6d 64 20 20 20 5b 6d 79 re datacmd [my
2c70: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74 method ExpandDat
2c80: 61 5d 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d 61 a]..gtcore forma
2c90: 74 63 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20 45 tcmd [mymethod E
2ca0: 78 70 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67 74 xpandFormat]..gt
2cb0: 63 6f 72 65 20 73 6f 72 74 63 6d 64 20 20 20 5b core sortcmd [
2cc0: 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53 mymethod ExpandS
2cd0: 6f 72 74 5d 0a 09 67 74 63 6f 72 65 20 73 61 76 ort]..gtcore sav
2ce0: 65 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 ecmd [mymethod
2cf0: 20 45 78 70 61 6e 64 32 5d 0a 0a 09 73 65 74 20 Expand2]...set
2d00: 6d 79 69 6d 70 6f 72 74 20 7b 7d 0a 09 67 74 63 myimport {}..gtc
2d10: 6f 72 65 20 74 72 61 76 65 72 73 65 20 24 7a 70 ore traverse $zp
2d20: 20 7b 47 65 6e 65 72 61 74 69 6e 67 20 72 65 76 {Generating rev
2d30: 69 73 69 6f 6e 20 6f 72 64 65 72 20 66 6f 72 20 ision order for
2d40: 69 6d 70 6f 72 74 2e 2e 2e 7d 0a 09 73 65 74 20 import...}..set
2d50: 66 69 6c 65 6d 61 70 20 24 6d 79 69 6d 70 6f 72 filemap $myimpor
2d60: 74 0a 09 75 6e 73 65 74 20 6d 79 69 6d 70 6f 72 t..unset myimpor
2d70: 74 0a 0a 09 23 20 41 6e 64 20 62 61 63 6b 20 74 t...# And back t
2d80: 6f 20 69 6d 70 6f 72 74 20 63 6f 6e 74 72 6f 6c o import control
2d90: 0a 0a 09 24 65 78 20 64 65 73 74 72 6f 79 0a 09 ...$ex destroy..
2da0: 24 7a 70 20 64 65 73 74 72 6f 79 0a 0a 09 72 65 $zp destroy...re
2db0: 74 75 72 6e 20 5b 6c 69 73 74 20 24 66 69 6c 65 turn [list $file
2dc0: 6d 61 70 20 24 72 65 76 6d 61 70 5d 0a 20 20 20 map $revmap].
2dd0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 }.. method E
2de0: 78 70 61 6e 64 44 61 74 61 20 20 20 7b 67 72 61 xpandData {gra
2df0: 70 68 20 6e 6f 64 65 7d 20 7b 20 72 65 74 75 72 ph node} { retur
2e00: 6e 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 n [$graph node g
2e10: 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 20 et $node revnr]
2e20: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 }. method Exp
2e30: 61 6e 64 46 6f 72 6d 61 74 20 7b 67 72 61 70 68 andFormat {graph
2e40: 20 69 74 65 6d 7d 20 7b 20 72 65 74 75 72 6e 20 item} { return
2e50: 3c 5b 6c 69 6e 64 65 78 20 24 69 74 65 6d 20 31 <[lindex $item 1
2e60: 5d 3e 20 7d 20 3b 20 23 20 72 65 76 6e 72 0a 20 ]> } ; # revnr.
2e70: 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 method Expand
2e80: 53 6f 72 74 20 20 20 7b 67 72 61 70 68 20 63 61 Sort {graph ca
2e90: 6e 64 69 64 61 74 65 73 7d 20 7b 0a 09 23 20 63 ndidates} {..# c
2ea0: 61 6e 64 69 64 61 74 65 73 20 3d 20 6c 69 73 74 andidates = list
2eb0: 28 69 74 65 6d 29 2c 20 69 74 65 6d 20 3d 20 6c (item), item = l
2ec0: 69 73 74 28 6e 6f 64 65 20 72 65 76 6e 72 29 0a ist(node revnr).
2ed0: 09 23 20 53 6f 72 74 20 62 79 20 6e 6f 64 65 20 .# Sort by node
2ee0: 61 6e 64 20 72 65 76 6e 72 20 2d 3e 20 54 72 75 and revnr -> Tru
2ef0: 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d nk revisions com
2f00: 65 20 66 69 72 73 74 2e 0a 09 72 65 74 75 72 6e e first...return
2f10: 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 31 [lsort -index 1
2f20: 20 2d 64 69 63 74 20 5b 6c 73 6f 72 74 20 2d 69 -dict [lsort -i
2f30: 6e 64 65 78 20 30 20 2d 64 69 63 74 20 24 63 61 ndex 0 -dict $ca
2f40: 6e 64 69 64 61 74 65 73 5d 5d 0a 20 20 20 20 7d ndidates]]. }
2f50: 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 . method Expa
2f60: 6e 64 31 20 7b 63 68 61 6e 20 64 69 72 20 6d 61 nd1 {chan dir ma
2f70: 78 20 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a x graph node} {.
2f80: 09 6c 6f 67 20 70 72 6f 67 72 65 73 73 20 33 20 .log progress 3
2f90: 66 69 6c 65 20 24 6d 79 69 6d 70 6f 72 74 20 24 file $myimport $
2fa0: 6d 61 78 20 3b 20 69 6e 63 72 20 6d 79 69 6d 70 max ; incr myimp
2fb0: 6f 72 74 0a 0a 09 73 65 74 20 72 65 76 6e 72 20 ort...set revnr
2fc0: 20 20 20 20 20 20 20 20 20 20 5b 24 67 72 61 70 [$grap
2fd0: 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 h node get $node
2fe0: 20 72 65 76 6e 72 5d 0a 09 73 65 74 20 66 6e 61 revnr]..set fna
2ff0: 6d 65 20 20 20 20 20 20 20 20 20 20 72 24 72 65 me r$re
3000: 76 6e 72 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 vnr..struct::lis
3010: 74 20 61 73 73 69 67 6e 20 5b 24 67 72 61 70 68 t assign [$graph
3020: 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20 node get $node
3030: 74 65 78 74 5d 20 6f 66 66 73 65 74 20 6c 65 6e text] offset len
3040: 67 74 68 0a 0a 09 69 66 20 7b 24 6c 65 6e 67 74 gth...if {$lengt
3050: 68 20 3c 20 30 7d 20 7b 0a 09 20 20 20 20 73 65 h < 0} {.. se
3060: 74 20 64 61 74 61 20 22 22 0a 09 7d 20 65 6c 73 t data ""..} els
3070: 65 20 7b 0a 09 20 20 20 20 73 65 65 6b 20 24 63 e {.. seek $c
3080: 68 61 6e 20 24 6f 66 66 73 65 74 20 73 74 61 72 han $offset star
3090: 74 0a 09 20 20 20 20 73 65 74 20 64 61 74 61 20 t.. set data
30a0: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 40 40 20 [string map {@@
30b0: 40 7d 20 5b 72 65 61 64 20 24 63 68 61 6e 20 24 @} [read $chan $
30c0: 6c 65 6e 67 74 68 5d 5d 0a 09 7d 0a 0a 09 69 66 length]]..}...if
30d0: 20 7b 21 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 {![$graph node
30e0: 6b 65 79 65 78 69 73 74 73 20 24 6e 6f 64 65 20 keyexists $node
30f0: 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a 09 20 20 __base__]} {..
3100: 20 20 23 20 46 75 6c 6c 20 74 65 78 74 20 6e 6f # Full text no
3110: 64 65 2e 20 47 65 74 20 74 68 65 20 64 61 74 61 de. Get the data
3120: 2c 20 64 65 63 6f 64 65 20 69 74 2c 20 61 6e 64 , decode it, and
3130: 20 73 61 76 65 2e 0a 0a 09 20 20 20 20 6c 6f 67 save.... log
3140: 20 77 72 69 74 65 20 38 20 66 69 6c 65 20 7b 45 write 8 file {E
3150: 78 70 61 6e 64 69 6e 67 20 3c 24 72 65 76 6e 72 xpanding <$revnr
3160: 3e 2c 20 66 75 6c 6c 20 74 65 78 74 7d 0a 0a 09 >, full text}...
3170: 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 fileutil::wr
3180: 69 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61 iteFile -transla
3190: 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72 tion binary $dir
31a0: 2f 24 66 6e 61 6d 65 20 24 64 61 74 61 0a 09 7d /$fname $data..}
31b0: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 20 44 else {.. # D
31c0: 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 73 elta node. __bas
31d0: 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65 20 e__ is the name
31e0: 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 of the file cont
31f0: 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74 68 aining.. # th
3200: 65 20 62 61 73 65 6c 69 6e 65 2e 20 54 68 65 20 e baseline. The
3210: 70 61 74 63 68 20 69 73 20 61 74 20 74 68 65 20 patch is at the
3220: 73 70 65 63 69 66 69 65 64 20 6c 6f 63 61 74 69 specified locati
3230: 6f 6e 20 6f 66 0a 09 20 20 20 20 23 20 74 68 65 on of.. # the
3240: 20 61 72 63 68 69 76 65 20 66 69 6c 65 2e 0a 0a archive file...
3250: 09 20 20 20 20 73 65 74 20 66 62 61 73 65 20 5b . set fbase [
3260: 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 $graph node get
3270: 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a $node __base__].
3280: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 . log write 8
3290: 20 66 69 6c 65 20 7b 45 78 70 61 6e 64 69 6e 67 file {Expanding
32a0: 20 3c 24 72 65 76 6e 72 3e 2c 20 69 73 20 64 65 <$revnr>, is de
32b0: 6c 74 61 20 6f 66 20 3c 24 66 62 61 73 65 3e 7d lta of <$fbase>}
32c0: 0a 0a 09 20 20 20 20 73 65 74 20 62 61 73 65 20 ... set base
32d0: 5b 66 69 6c 65 75 74 69 6c 3a 3a 63 61 74 20 2d [fileutil::cat -
32e0: 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 translation bina
32f0: 72 79 20 24 64 69 72 2f 24 66 62 61 73 65 5d 0a ry $dir/$fbase].
3300: 0a 09 20 20 20 20 23 20 57 72 69 74 69 6e 67 20 .. # Writing
3310: 74 68 65 20 70 61 74 63 68 20 74 6f 20 64 69 73 the patch to dis
3320: 6b 20 69 73 20 6a 75 73 74 20 66 6f 72 20 62 65 k is just for be
3330: 74 74 65 72 0a 09 20 20 20 20 23 20 64 65 62 75 tter.. # debu
3340: 67 67 69 6e 67 2e 20 49 74 20 69 73 20 6e 6f 74 gging. It is not
3350: 20 75 73 65 64 20 6f 74 68 65 72 77 69 73 65 2e used otherwise.
3360: 0a 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a .. fileutil::
3370: 77 72 69 74 65 46 69 6c 65 20 24 64 69 72 2f 72 writeFile $dir/r
3380: 70 61 74 63 68 20 24 64 61 74 61 0a 09 20 20 20 patch $data..
3390: 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74 65 fileutil::write
33a0: 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61 74 69 6f File -translatio
33b0: 6e 20 62 69 6e 61 72 79 20 24 64 69 72 2f 24 66 n binary $dir/$f
33c0: 6e 61 6d 65 20 5c 0a 09 09 5b 41 70 70 6c 79 20 name \...[Apply
33d0: 24 62 61 73 65 20 24 64 61 74 61 5d 0a 09 7d 0a $base $data]..}.
33e0: 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 ..# Post to all
33f0: 73 75 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 successors that
3400: 74 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 the just generat
3410: 65 64 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 ed file is their
3420: 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e 0a 0a 09 ..# baseline....
3430: 66 6f 72 65 61 63 68 20 6f 75 74 20 5b 24 67 72 foreach out [$gr
3440: 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74 20 24 aph nodes -out $
3450: 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 24 67 72 node] {.. $gr
3460: 61 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f 75 aph node set $ou
3470: 74 20 5f 5f 62 61 73 65 5f 5f 20 24 66 6e 61 6d t __base__ $fnam
3480: 65 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 e..}..return.
3490: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 41 70 70 }.. proc App
34a0: 6c 79 20 7b 62 61 73 65 20 64 65 6c 74 61 7d 20 ly {base delta}
34b0: 7b 0a 09 23 20 62 61 73 65 20 20 3d 20 62 61 73 {..# base = bas
34c0: 65 20 74 65 78 74 2e 0a 09 23 20 64 65 6c 74 61 e text...# delta
34d0: 20 3d 20 64 65 6c 74 61 20 69 6e 20 72 63 73 20 = delta in rcs
34e0: 66 6f 72 6d 61 74 2e 0a 09 23 0a 09 23 20 42 6f format...#..# Bo
34f0: 74 68 20 73 74 72 69 6e 67 73 20 61 72 65 20 75 th strings are u
3500: 6e 65 6e 63 6f 64 65 64 2c 20 69 2e 65 2e 20 74 nencoded, i.e. t
3510: 68 69 6e 67 73 20 6c 69 6b 65 20 40 40 2c 20 65 hings like @@, e
3520: 74 63 2e 20 68 61 76 65 0a 09 23 20 61 6c 72 65 tc. have..# alre
3530: 61 64 79 20 62 65 65 6e 20 72 65 70 6c 61 63 65 ady been replace
3540: 64 20 77 69 74 68 20 74 68 65 69 72 20 70 72 6f d with their pro
3550: 70 65 72 20 63 68 61 72 61 63 74 65 72 73 2e 0a per characters..
3560: 09 23 0a 09 23 20 52 65 74 75 72 6e 20 76 61 6c .#..# Return val
3570: 75 65 20 69 73 20 74 68 65 20 70 61 74 63 68 65 ue is the patche
3580: 64 20 74 65 78 74 2e 0a 0a 09 73 65 74 20 62 61 d text....set ba
3590: 73 65 20 5b 73 70 6c 69 74 20 24 62 61 73 65 20 se [split $base
35a0: 5c 6e 5d 0a 09 73 65 74 20 62 6c 65 6e 20 5b 6c \n]..set blen [l
35b0: 6c 65 6e 67 74 68 20 24 62 61 73 65 5d 0a 09 73 length $base]..s
35c0: 65 74 20 6f 6f 66 66 20 30 0a 09 73 65 74 20 72 et ooff 0..set r
35d0: 65 73 20 22 22 0a 0a 09 73 65 74 20 6c 69 6e 65 es ""...set line
35e0: 73 20 20 5b 73 70 6c 69 74 20 24 64 65 6c 74 61 s [split $delta
35f0: 20 5c 6e 5d 0a 09 73 65 74 20 6e 6c 69 6e 65 73 \n]..set nlines
3600: 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 73 [llength $lines
3610: 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 31 ]...log write 11
3620: 20 66 69 6c 65 20 7b 42 61 73 65 20 20 6c 69 6e file {Base lin
3630: 65 73 20 3d 20 24 62 6c 65 6e 7d 0a 09 6c 6f 67 es = $blen}..log
3640: 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b write 11 file {
3650: 44 65 6c 74 61 20 6c 69 6e 65 73 20 3d 20 24 6e Delta lines = $n
3660: 6c 69 6e 65 73 7d 0a 0a 09 66 6f 72 20 7b 73 65 lines}...for {se
3670: 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e 6c t i 0} {$i < $nl
3680: 69 6e 65 73 7d 20 7b 7d 20 7b 0a 09 20 20 20 20 ines} {} {..
3690: 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c log write 11 fil
36a0: 65 20 7b 20 20 20 20 40 20 24 69 20 3d 20 5b 6c e { @ $i = [l
36b0: 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69 5d index $lines $i]
36c0: 7d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 }.. log write
36d0: 20 31 31 20 66 69 6c 65 20 7b 20 6f 6f 66 66 20 11 file { ooff
36e0: 24 6f 6f 66 66 7d 0a 0a 09 20 20 20 20 69 66 20 $ooff}... if
36f0: 7b 21 5b 72 65 67 65 78 70 20 7b 5e 28 5b 61 64 {![regexp {^([ad
3700: 5d 29 28 5c 64 2b 29 5c 73 28 5c 64 2b 29 24 7d ])(\d+)\s(\d+)$}
3710: 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 [lindex $lines
3720: 24 69 5d 20 2d 3e 20 63 6d 64 20 73 6c 20 63 6e $i] -> cmd sl cn
3730: 5d 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 69 ]} {...trouble i
3740: 6e 74 65 72 6e 61 6c 20 22 42 61 64 20 65 64 20 nternal "Bad ed
3750: 63 6f 6d 6d 61 6e 64 20 27 5b 6c 69 6e 64 65 78 command '[lindex
3760: 20 24 6c 69 6e 65 73 20 24 69 5d 27 22 0a 09 20 $lines $i]'"..
3770: 20 20 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 }... log w
3780: 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 20 rite 11 file {
3790: 63 6d 64 20 24 63 6d 64 7d 0a 09 20 20 20 20 6c cmd $cmd}.. l
37a0: 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 og write 11 file
37b0: 20 7b 20 20 20 73 6c 20 24 73 6c 7d 0a 09 20 20 { sl $sl}..
37c0: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 log write 11 f
37d0: 69 6c 65 20 7b 20 20 20 63 6e 20 24 63 6e 7d 0a ile { cn $cn}.
37e0: 0a 09 20 20 20 20 69 6e 63 72 20 69 0a 09 20 20 .. incr i..
37f0: 20 20 73 65 74 20 65 6c 20 5b 65 78 70 72 20 7b set el [expr {
3800: 24 73 6c 20 2b 20 24 63 6e 7d 5d 0a 0a 09 20 20 $sl + $cn}]...
3810: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 log write 11 f
3820: 69 6c 65 20 7b 20 20 20 65 6c 20 24 65 6c 7d 0a ile { el $el}.
3830: 0a 09 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 .. switch -ex
3840: 61 63 74 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 act -- $cmd {...
3850: 64 20 7b 0a 09 09 20 20 20 20 69 6e 63 72 20 73 d {... incr s
3860: 6c 20 2d 31 0a 09 09 20 20 20 20 69 6e 63 72 20 l -1... incr
3870: 65 6c 20 2d 31 0a 09 09 20 20 20 20 69 66 20 7b el -1... if {
3880: 24 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 $sl < $ooff} { t
3890: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 rouble internal
38a0: 7b 44 65 6c 65 74 69 6f 6e 20 62 65 66 6f 72 65 {Deletion before
38b0: 20 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 09 last edit} }...
38c0: 20 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 62 if {$sl > $b
38d0: 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 len} { trouble i
38e0: 6e 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 6f nternal {Deletio
38f0: 6e 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64 7d n past file end}
3900: 20 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 65 6c }... if {$el
3910: 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 > $blen} { trou
3920: 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65 ble internal {De
3930: 6c 65 74 69 6f 6e 20 62 65 79 6f 6e 64 20 66 69 letion beyond fi
3940: 6c 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20 20 20 le end} }...
3950: 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 foreach x [lrang
3960: 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 24 73 e $base $ooff $s
3970: 6c 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 l] { lappend res
3980: 20 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74 20 $x }... set
3990: 20 6f 6f 66 66 20 24 65 6c 0a 09 09 7d 0a 09 09 ooff $el...}...
39a0: 61 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 24 73 a {... if {$s
39b0: 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72 6f l < $ooff} { tro
39c0: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49 uble internal {I
39d0: 6e 73 65 72 74 20 62 65 66 6f 72 65 20 6c 61 73 nsert before las
39e0: 74 20 65 64 69 74 7d 20 7d 0a 09 09 20 20 20 20 t edit} }...
39f0: 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c 65 6e 7d if {$sl > $blen}
3a00: 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 { trouble inter
3a10: 6e 61 6c 20 7b 49 6e 73 65 72 74 20 70 61 73 74 nal {Insert past
3a20: 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 0a 09 09 file end} }....
3a30: 20 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c foreach x [l
3a40: 72 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 range $base $oof
3a50: 66 20 24 73 6c 5d 20 20 20 20 20 20 20 20 20 20 f $sl]
3a60: 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 { lappend res
3a70: 20 24 78 20 7d 0a 09 09 20 20 20 20 66 6f 72 65 $x }... fore
3a80: 61 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 6c ach x [lrange $l
3a90: 69 6e 65 73 20 24 69 20 5b 65 78 70 72 20 7b 24 ines $i [expr {$
3aa0: 69 20 2b 20 24 63 6e 7d 5d 5d 20 7b 20 6c 61 70 i + $cn}]] { lap
3ab0: 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 09 pend res $x }...
3ac0: 20 20 20 20 73 65 74 20 6f 6f 66 66 20 24 73 6c set ooff $sl
3ad0: 0a 09 09 20 20 20 20 69 6e 63 72 20 69 20 24 63 ... incr i $c
3ae0: 6e 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a n...}.. }..}.
3af0: 09 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e .foreach x [lran
3b00: 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 65 ge $base $ooff e
3b10: 6e 64 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 nd] { lappend re
3b20: 73 20 24 78 20 7d 0a 09 72 65 74 75 72 6e 20 5b s $x }..return [
3b30: 6a 6f 69 6e 20 24 72 65 73 20 5c 6e 5d 0a 20 20 join $res \n].
3b40: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
3b50: 45 78 70 61 6e 64 32 20 7b 67 72 61 70 68 20 6e Expand2 {graph n
3b60: 6f 64 65 7d 20 7b 0a 09 73 65 74 20 72 65 76 6e ode} {..set revn
3b70: 72 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 r [$graph node g
3b80: 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 0a et $node revnr].
3b90: 0a 09 23 20 46 69 72 73 74 20 69 6d 70 6f 72 74 ..# First import
3ba0: 20 74 68 65 20 66 69 6c 65 2e 0a 09 6c 61 70 70 the file...lapp
3bb0: 65 6e 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 end myimport [li
3bc0: 73 74 20 41 20 72 24 72 65 76 6e 72 20 7b 7d 5d st A r$revnr {}]
3bd0: 0a 0a 09 69 66 20 7b 5b 24 67 72 61 70 68 20 6e ...if {[$graph n
3be0: 6f 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6e ode keyexists $n
3bf0: 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b ode __base__]} {
3c00: 0a 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e 6f .. # Delta no
3c10: 64 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73 20 de. __base__ is
3c20: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 the name of the
3c30: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a file containing.
3c40: 09 20 20 20 20 23 20 74 68 65 20 62 61 73 65 6c . # the basel
3c50: 69 6e 65 2e 20 47 65 6e 65 72 61 74 65 20 69 6e ine. Generate in
3c60: 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 6d 61 6b struction to mak
3c70: 65 20 74 68 65 20 64 65 6c 74 61 20 61 73 0a 09 e the delta as..
3c80: 20 20 20 20 23 20 77 65 6c 6c 2e 0a 0a 09 20 20 # well....
3c90: 20 20 73 65 74 20 66 62 61 73 65 20 5b 24 67 72 set fbase [$gr
3ca0: 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f aph node get $no
3cb0: 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09 20 20 de __base__]..
3cc0: 20 20 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70 6f lappend myimpo
3cd0: 72 74 20 5b 6c 69 73 74 20 44 20 72 24 72 65 76 rt [list D r$rev
3ce0: 6e 72 20 72 24 66 62 61 73 65 5d 0a 09 7d 0a 0a nr r$fbase]..}..
3cf0: 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 73 .# Post to all s
3d00: 75 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 74 uccessors that t
3d10: 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 65 he just generate
3d20: 64 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 0a d file is their.
3d30: 09 23 20 62 61 73 65 6c 69 6e 65 2e 20 45 78 63 .# baseline. Exc
3d40: 65 70 74 69 6f 6e 3a 20 54 68 6f 73 65 20 77 68 eption: Those wh
3d50: 69 63 68 20 61 76 65 20 61 6c 72 65 61 64 79 20 ich ave already
3d60: 61 20 62 61 73 65 6c 69 6e 65 20 73 65 74 2e 0a a baseline set..
3d70: 09 23 20 54 6f 67 65 74 68 65 72 20 77 69 74 68 .# Together with
3d80: 20 74 68 65 20 73 6f 72 74 69 6e 67 20 6f 66 20 the sorting of
3d90: 74 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 trunk revisions
3da0: 66 69 72 73 74 20 74 68 65 20 74 72 75 6e 6b 0a first the trunk.
3db0: 09 23 20 73 68 6f 75 6c 64 20 6f 6e 65 20 75 6e .# should one un
3dc0: 69 6e 74 65 72 75 70 74 65 64 20 6c 69 6e 65 2c interupted line,
3dd0: 20 77 69 74 68 20 62 72 61 6e 63 68 20 72 6f 6f with branch roo
3de0: 74 73 20 5f 6e 6f 74 5f 20 64 65 6c 74 61 0a 09 ts _not_ delta..
3df0: 23 20 63 6f 6d 70 72 65 73 73 65 64 20 70 65 72 # compressed per
3e00: 20 74 68 65 69 72 20 62 72 61 6e 63 68 65 73 2e their branches.
3e10: 0a 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20 5b ...foreach out [
3e20: 24 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 $graph nodes -ou
3e30: 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 t $node] {..
3e40: 69 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f 64 65 if {[$graph node
3e50: 20 6b 65 79 65 78 69 73 74 73 20 24 6f 75 74 20 keyexists $out
3e60: 5f 5f 62 61 73 65 5f 5f 5d 7d 20 63 6f 6e 74 69 __base__]} conti
3e70: 6e 75 65 0a 09 20 20 20 20 24 67 72 61 70 68 20 nue.. $graph
3e80: 6e 6f 64 65 20 73 65 74 20 24 6f 75 74 20 5f 5f node set $out __
3e90: 62 61 73 65 5f 5f 20 24 72 65 76 6e 72 0a 09 7d base__ $revnr..}
3ea0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
3eb0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 variable myi
3ec0: 6d 70 6f 72 74 0a 0a 20 20 20 20 23 20 23 20 23 mport.. # # #
3ed0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
3ee0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
3ef0: 23 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a ##. ## State.
3f00: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
3f10: 69 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 id
3f20: 7b 7d 20 3b 20 23 20 46 69 6c 65 20 69 64 20 69 {} ; # File id i
3f30: 6e 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 n the persistent
3f40: 20 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72 69 state.. vari
3f50: 61 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20 20 able mypath
3f60: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 {} ; # Pa
3f70: 74 68 20 6f 66 20 74 68 65 20 66 69 6c 65 27 73 th of the file's
3f80: 20 72 63 73 20 61 72 63 68 69 76 65 2e 0a 20 20 rcs archive..
3f90: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 75 73 72 variable myusr
3fa0: 70 61 74 68 20 20 20 20 20 20 20 20 20 7b 7d 20 path {}
3fb0: 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68 65 20 ; # Path of the
3fc0: 66 69 6c 65 20 61 73 20 73 65 65 6e 20 62 79 20 file as seen by
3fd0: 75 73 65 72 73 2e 0a 20 20 20 20 76 61 72 69 61 users.. varia
3fe0: 62 6c 65 20 6d 79 65 78 65 63 75 74 61 62 6c 65 ble myexecutable
3ff0: 20 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 0 ; # Boo
4000: 6c 65 61 6e 20 66 6c 61 67 20 27 66 69 6c 65 20 lean flag 'file
4010: 65 78 65 63 75 74 61 62 6c 65 27 2e 0a 20 20 20 executable'..
4020: 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a variable myproj
4030: 65 63 74 20 20 20 20 20 20 20 20 20 7b 7d 20 3b ect {} ;
4040: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 # Reference to
4050: 74 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65 the project obje
4060: 63 74 0a 09 09 09 09 20 20 20 20 23 20 74 68 65 ct..... # the
4070: 20 66 69 6c 65 20 62 65 6c 6f 6e 67 73 20 74 6f file belongs to
4080: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
4090: 79 72 65 76 20 2d 61 72 72 61 79 20 20 20 20 20 yrev -array
40a0: 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 {} ; # Maps rev
40b0: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 ision number to
40c0: 74 68 65 0a 09 09 09 09 20 20 20 20 23 20 61 73 the..... # as
40d0: 73 6f 63 69 61 74 65 64 20 72 65 76 69 73 69 6f sociated revisio
40e0: 6e 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 76 61 n object.. va
40f0: 72 69 61 62 6c 65 20 6d 79 72 65 76 69 73 69 6f riable myrevisio
4100: 6e 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 ns {} ; #
4110: 53 61 6d 65 20 61 73 20 6d 79 72 65 76 2c 20 62 Same as myrev, b
4120: 75 74 20 61 20 6c 69 73 74 2c 0a 09 09 09 09 20 ut a list,.....
4130: 20 20 20 23 20 67 69 76 69 6e 67 20 75 73 20 74 # giving us t
4140: 68 65 20 6f 72 64 65 72 20 6f 66 0a 09 09 09 09 he order of.....
4150: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e # revisions.
4160: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
4170: 61 69 64 20 20 20 20 20 20 2d 61 72 72 61 79 20 aid -array
4180: 7b 7d 20 3b 20 23 20 4d 61 70 20 72 65 76 69 73 {} ; # Map revis
4190: 69 6f 6e 20 6e 75 6d 62 65 72 73 20 74 6f 20 74 ion numbers to t
41a0: 68 65 20 69 64 0a 09 09 09 09 20 20 20 20 23 20 he id..... #
41b0: 6f 66 20 74 68 65 20 61 75 74 68 6f 72 20 77 68 of the author wh
41c0: 6f 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 09 09 o committed.....
41d0: 20 20 20 20 23 20 69 74 2e 20 54 68 69 73 20 69 # it. This i
41e0: 73 20 6c 61 74 65 72 20 61 67 67 72 65 67 61 74 s later aggregat
41f0: 65 64 0a 09 09 09 09 20 20 20 20 23 20 77 69 74 ed..... # wit
4200: 68 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 h commit message
4210: 2c 20 62 72 61 6e 63 68 20 6e 61 6d 65 0a 09 09 , branch name...
4220: 09 09 20 20 20 20 23 20 61 6e 64 20 70 72 6f 6a .. # and proj
4230: 65 63 74 20 69 64 20 66 6f 72 20 61 20 6d 65 74 ect id for a met
4240: 61 20 69 64 2e 0a 20 20 20 20 76 61 72 69 61 62 a id.. variab
4250: 6c 65 20 6d 79 68 65 61 64 72 65 76 6e 72 20 20 le myheadrevnr
4260: 20 20 20 20 20 7b 7d 20 3b 20 23 20 48 65 61 64 {} ; # Head
4270: 20 72 65 76 69 73 69 6f 6e 20 28 72 65 76 69 73 revision (revis
4280: 69 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 20 20 20 ion number).
4290: 76 61 72 69 61 62 6c 65 20 6d 79 70 72 69 6e 63 variable myprinc
42a0: 69 70 61 6c 20 20 20 20 20 20 20 7b 7d 20 3b 20 ipal {} ;
42b0: 23 20 50 72 69 6e 63 69 70 61 6c 20 62 72 61 6e # Principal bran
42c0: 63 68 20 28 62 72 61 6e 63 68 20 6e 75 6d 62 65 ch (branch numbe
42d0: 72 29 2e 0a 09 09 09 09 20 20 20 20 23 20 43 6f r)...... # Co
42e0: 6e 74 72 61 72 79 20 74 6f 20 74 68 65 20 6e 61 ntrary to the na
42f0: 6d 65 20 74 68 69 73 20 69 73 20 74 68 65 0a 09 me this is the..
4300: 09 09 09 20 20 20 20 23 20 64 65 66 61 75 6c 74 ... # default
4310: 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 branch.. var
4320: 69 61 62 6c 65 20 6d 79 64 65 70 65 6e 64 65 6e iable mydependen
4330: 63 69 65 73 20 20 20 20 7b 7d 20 3b 20 23 20 44 cies {} ; # D
4340: 69 63 74 69 6f 6e 61 72 79 20 70 61 72 65 6e 74 ictionary parent
4350: 20 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 09 09 20 -> child,.....
4360: 20 20 20 23 20 72 65 63 6f 72 64 73 20 70 72 69 # records pri
4370: 6d 61 72 79 20 64 65 70 65 6e 64 65 6e 63 69 65 mary dependencie
4380: 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 s.. variable
4390: 6d 79 69 6d 70 6f 72 74 65 64 20 20 20 20 20 20 myimported
43a0: 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 0 ; # Boolean
43b0: 20 66 6c 61 67 2e 20 53 65 74 20 69 66 20 61 6e flag. Set if an
43c0: 64 20 6f 6e 6c 79 20 69 66 0a 09 09 09 09 20 20 d only if.....
43d0: 20 20 23 20 72 65 76 20 31 2e 31 20 6f 66 20 74 # rev 1.1 of t
43e0: 68 65 20 66 69 6c 65 20 73 65 65 6d 69 6e 67 6c he file seemingl
43f0: 79 0a 09 09 09 09 20 20 20 20 23 20 77 61 73 20 y..... # was
4400: 69 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61 64 imported instead
4410: 20 6f 66 20 61 64 64 65 64 0a 09 09 09 09 20 20 of added.....
4420: 20 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 20 20 # normally..
4430: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f variable myroo
4440: 74 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 t {}
4450: 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f ; # Reference to
4460: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62 the revision ob
4470: 6a 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 68 ject..... # h
4480: 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20 olding the root
4490: 72 65 76 69 73 69 6f 6e 2e 20 20 49 74 73 0a 09 revision. Its..
44a0: 09 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 20 ... # number
44b0: 75 73 75 61 6c 6c 79 20 69 73 20 27 31 2e 31 27 usually is '1.1'
44c0: 2e 20 43 61 6e 20 62 65 0a 09 09 09 09 20 20 20 . Can be.....
44d0: 20 23 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e # a different n
44e0: 75 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20 6f umber, because o
44f0: 66 0a 09 09 09 09 20 20 20 20 23 20 67 61 70 73 f..... # gaps
4500: 20 63 72 65 61 74 65 64 20 76 69 61 20 27 63 76 created via 'cv
4510: 73 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20 20 sadmin -o'..
4520: 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 variable mybranc
4530: 68 65 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 hes -array {} ;
4540: 23 20 4d 61 70 73 20 62 72 61 6e 63 68 20 6e 75 # Maps branch nu
4550: 6d 62 65 72 20 74 6f 20 74 68 65 20 73 79 6d 62 mber to the symb
4560: 6f 6c 0a 09 09 09 09 20 20 20 20 23 20 6f 62 6a ol..... # obj
4570: 65 63 74 20 68 61 6e 64 6c 69 6e 67 20 74 68 65 ect handling the
4580: 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 branch.. var
4590: 69 61 62 6c 65 20 6d 79 74 61 67 73 20 20 20 20 iable mytags
45a0: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d -array {} ; # M
45b0: 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d aps revision num
45c0: 62 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0a ber to the list.
45d0: 09 09 09 09 20 20 20 20 23 20 6f 66 20 73 79 6d .... # of sym
45e0: 62 6f 6c 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 bol objects for
45f0: 74 68 65 20 74 61 67 73 0a 09 09 09 09 20 20 20 the tags.....
4600: 20 23 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 # associated wi
4610: 74 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e th the revision.
4620: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
4630: 73 79 6d 62 6f 6c 73 20 20 20 20 20 20 20 20 20 symbols
4640: 7b 7d 20 3b 20 23 20 53 65 74 20 6f 66 20 74 68 {} ; # Set of th
4650: 65 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20 66 e symbol names f
4660: 6f 75 6e 64 20 69 6e 0a 09 09 09 09 20 20 20 20 ound in.....
4670: 23 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20 20 # this file...
4680: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 variable mybra
4690: 6e 63 68 63 6e 74 20 30 20 3b 20 23 20 43 6f 75 nchcnt 0 ; # Cou
46a0: 6e 74 65 72 20 66 6f 72 20 62 72 61 6e 63 68 65 nter for branche
46b0: 73 2c 20 74 6f 20 72 65 63 6f 72 64 20 74 68 65 s, to record the
46c0: 69 72 0a 09 09 09 20 20 20 20 20 23 20 6f 72 64 ir.... # ord
46d0: 65 72 20 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e er of definition
46e0: 2e 20 54 68 69 73 20 61 6c 73 6f 20 64 65 66 69 . This also defi
46f0: 6e 65 73 0a 09 09 09 20 20 20 20 20 23 20 74 68 nes.... # th
4700: 65 69 72 20 6f 72 64 65 72 20 6f 66 20 63 72 65 eir order of cre
4710: 61 74 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20 ation, which is
4720: 74 68 65 0a 09 09 09 20 20 20 20 20 23 20 72 65 the.... # re
4730: 76 65 72 73 65 20 6f 66 20 64 65 66 69 6e 69 74 verse of definit
4740: 69 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 73 6d 61 ion. I.e. a sma
4750: 6c 6c 65 72 0a 09 09 09 20 20 20 20 20 23 20 6e ller.... # n
4760: 75 6d 62 65 72 20 6d 65 61 6e 73 20 27 44 65 66 umber means 'Def
4770: 69 6e 65 64 20 65 61 72 6c 69 65 72 27 2c 20 6d ined earlier', m
4780: 65 61 6e 73 0a 09 09 09 20 20 20 20 20 23 20 27 eans.... # '
4790: 43 72 65 61 74 65 64 20 6c 61 74 65 72 27 2e 0a Created later'..
47a0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
47b0: 74 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 44 69 72 trunk {} ; # Dir
47c0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 74 6f ect reference to
47d0: 20 6d 79 70 72 6f 6a 65 63 74 20 2d 3e 20 74 72 myproject -> tr
47e0: 75 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62 6c unk.. variabl
47f0: 65 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 3b 20 23 e myroots {} ; #
4800: 20 4c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 69 List of roots i
4810: 6e 20 74 68 65 20 66 6f 72 65 73 74 20 6f 66 0a n the forest of.
4820: 09 09 09 20 20 23 20 6c 6f 64 27 73 2e 20 4f 62 ... # lod's. Ob
4830: 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 20 ject references
4840: 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 61 6e 64 to revisions and
4850: 0a 09 09 09 20 20 23 20 62 72 61 6e 63 68 65 73 .... # branches
4860: 2e 20 54 68 65 20 6c 61 74 74 65 72 20 63 61 6e . The latter can
4870: 20 61 70 70 65 61 72 20 77 68 65 6e 20 74 68 65 appear when the
4880: 79 0a 09 09 09 20 20 23 20 61 72 65 20 73 65 76 y.... # are sev
4890: 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20 ered from their
48a0: 70 61 72 65 6e 74 2e 0a 0a 20 20 20 20 23 20 23 parent... # #
48b0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
48c0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
48d0: 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 ####. ## Inte
48e0: 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 rnal methods..
48f0: 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 method RecordB
4900: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 72 ranchCommits {br
4910: 61 6e 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 61 anches} {..forea
4920: 63 68 20 62 72 61 6e 63 68 72 65 76 6e 72 20 24 ch branchrevnr $
4930: 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 branches {..
4940: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 73 if {[catch {...s
4950: 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 et branch [$self
4960: 20 52 65 76 32 42 72 61 6e 63 68 20 24 62 72 61 Rev2Branch $bra
4970: 6e 63 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 7d nchrevnr].. }
4980: 5d 7d 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 ]} {...set branc
4990: 68 20 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c 61 h [$self AddUnla
49a0: 62 65 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 76 beledBranch [rev
49b0: 20 32 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 2branchnr $bran
49c0: 63 68 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d chrevnr]].. }
49d0: 0a 0a 09 20 20 20 20 23 20 52 65 63 6f 72 64 20 ... # Record
49e0: 74 68 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 74 the commit, just
49f0: 20 61 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d as revision num
4a00: 62 65 72 20 66 6f 72 0a 09 20 20 20 20 23 20 6e ber for.. # n
4a10: 6f 77 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 68 ow. ProcesBranch
4a20: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 77 69 6c Dependencies wil
4a30: 6c 20 65 78 74 65 6e 64 20 74 68 61 74 20 69 74 l extend that it
4a40: 6f 20 61 0a 09 20 20 20 20 23 20 70 72 6f 70 65 o a.. # prope
4a50: 72 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e r object referen
4a60: 63 65 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 ce.... $branc
4a70: 68 20 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20 h setchildrevnr
4a80: 24 62 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d 0a $branchrevnr..}.
4a90: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
4aa0: 20 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72 method Rev2Br
4ab0: 61 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 20 anch {revnr} {.
4ac0: 20 20 20 20 20 20 20 69 6e 74 65 67 72 69 74 79 integrity
4ad0: 20 61 73 73 65 72 74 20 7b 21 5b 72 65 76 20 69 assert {![rev i
4ae0: 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 strunkrevnr $rev
4af0: 6e 72 5d 7d 20 7b 45 78 70 65 63 74 65 64 20 61 nr]} {Expected a
4b00: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e branch revision
4b10: 20 6e 75 6d 62 65 72 7d 0a 09 72 65 74 75 72 6e number}..return
4b20: 20 24 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65 $mybranches([re
4b30: 76 20 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76 v 2branchnr $rev
4b40: 6e 72 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 nr]). }..
4b50: 6d 65 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65 method AddUnlabe
4b60: 6c 65 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63 ledBranch {branc
4b70: 68 6e 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b hnr} {..return [
4b80: 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20 $self AddBranch
4b90: 75 6e 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63 unlabeled-$branc
4ba0: 68 6e 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20 hnr $branchnr].
4bb0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
4bc0: 20 41 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65 AddBranch {name
4bd0: 20 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 branchnr} {..if
4be0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d {[info exists m
4bf0: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 ybranches($branc
4c00: 68 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f hnr)]} {.. lo
4c10: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 g write 1 file "
4c20: 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72 In '$mypath': Br
4c30: 61 6e 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27 anch '$branchnr'
4c40: 20 6e 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e named '[$mybran
4c50: 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20 ches($branchnr)
4c60: 6e 61 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67 name]'".. log
4c70: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 43 write 1 file "C
4c80: 61 6e 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e annot have secon
4c90: 64 20 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20 d name '$name',
4ca0: 69 67 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20 ignoring it"..
4cb0: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74 return..}..set
4cc0: 20 62 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55 branch [sym %AU
4cd0: 54 4f 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e TO% branch $bran
4ce0: 63 68 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 chnr [$myproject
4cf0: 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 getsymbol $name
4d00: 5d 20 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e 63 ] $self]..$branc
4d10: 68 20 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69 h setposition [i
4d20: 6e 63 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d ncr mybranchcnt]
4d30: 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 ..set mybranches
4d40: 28 24 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61 ($branchnr) $bra
4d50: 6e 63 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61 nch..return $bra
4d60: 6e 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d nch. }.. m
4d70: 65 74 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61 ethod AddTag {na
4d80: 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 me revnr} {..set
4d90: 20 74 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25 tag [sym %AUTO%
4da0: 20 74 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79 tag $revnr [$my
4db0: 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f project getsymbo
4dc0: 6c 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a l $name] $self].
4dd0: 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28 .lappend mytags(
4de0: 24 72 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65 $revnr) $tag..re
4df0: 74 75 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a turn $tag. }.
4e00: 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f . method Reco
4e10: 72 64 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63 rdBasicDependenc
4e20: 69 65 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d ies {revnr next}
4e30: 20 7b 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65 {..# Handle the
4e40: 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 revision depend
4e50: 65 6e 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74 encies. Record t
4e60: 68 65 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a hem for now, do.
4e70: 09 23 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20 .# nothing with
4e80: 74 68 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e them yet....# On
4e90: 20 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27 the trunk the '
4ea0: 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e next' field poin
4eb0: 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f ts to the previo
4ec0: 75 73 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20 us..# revision,
4ed0: 69 2e 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74 i.e. the _parent
4ee0: 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 _ of the current
4ef0: 20 6f 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 one. Example:..
4f00: 23 20 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20 # 1.6's next is
4f10: 31 2e 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20 1.5 (modulo cvs
4f20: 61 64 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 admin -o)....# C
4f30: 6f 6e 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62 ontrarily on a b
4f40: 72 61 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27 ranch the 'next'
4f50: 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f field points to
4f60: 20 74 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20 the..# primary
4f70: 5f 63 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63 _child_ of the c
4f80: 75 72 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e urrent revision.
4f90: 20 41 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20 As example,..#
4fa0: 31 2e 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27 1.1.3.2's 'next'
4fb0: 20 77 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33 will be 1.1.3.3
4fc0: 2e 0a 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27 ....# The 'next'
4fd0: 20 66 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20 field actually
4fe0: 61 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 6f always refers to
4ff0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 the revision..#
5000: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 containing the
5010: 64 65 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20 delta needed to
5020: 72 65 74 72 69 65 76 65 20 74 68 61 74 20 72 65 retrieve that re
5030: 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 vision....# The
5040: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65 dependencies nee
5050: 64 65 64 20 68 65 72 65 20 61 72 65 20 74 68 65 ded here are the
5060: 20 6c 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75 logical structu
5070: 72 65 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68 re,..# parent/ch
5080: 69 6c 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65 ild, and not the
5090: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 implementation
50a0: 64 65 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a dependent delta.
50b0: 09 23 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 .# pointers....i
50c0: 66 20 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20 f {$next eq ""}
50d0: 72 65 74 75 72 6e 0a 09 23 20 20 20 20 20 20 20 return..#
50e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
50f0: 20 20 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 parent -> chi
5100: 6c 64 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 ld..if {[rev ist
5110: 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 runkrevnr $revnr
5120: 5d 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e ]} {.. lappen
5130: 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 d mydependencies
5140: 20 24 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d $next $revnr..}
5150: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70 else {.. lap
5160: 70 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 pend mydependenc
5170: 69 65 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74 ies $revnr $next
5180: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
5190: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 }.. method Pr
51a0: 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 ocessPrimaryDepe
51b0: 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 ndencies {} {..f
51c0: 6f 72 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65 oreach {parentre
51d0: 76 6e 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20 vnr childrevnr}
51e0: 24 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 $mydependencies
51f0: 7b 0a 09 20 20 20 20 73 65 74 20 70 61 72 65 6e {.. set paren
5200: 74 20 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74 t $myrev($parent
5210: 72 65 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20 revnr).. set
5220: 63 68 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63 child $myrev($c
5230: 68 69 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20 hildrevnr)..
5240: 24 70 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64 $parent setchild
5250: 20 24 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 $child.. $ch
5260: 69 6c 64 20 73 65 74 70 61 72 65 6e 74 20 24 70 ild setparent $p
5270: 61 72 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e arent..}..return
5280: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
5290: 6f 64 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 od ProcessBranch
52a0: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 Dependencies {}
52b0: 7b 0a 09 66 6f 72 65 61 63 68 20 7b 62 72 61 6e {..foreach {bran
52c0: 63 68 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 72 chnr branch} [ar
52d0: 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 ray get mybranch
52e0: 65 73 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72 es] {.. set r
52f0: 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 61 evnr [$branch pa
5300: 72 65 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20 rentrevnr]...
5310: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis
5320: 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 ts myrev($revnr)
5330: 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 ]} {...log write
5340: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 1 file "In '$my
5350: 70 61 74 68 27 3a 20 54 68 65 20 62 72 61 6e 63 path': The branc
5360: 68 20 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65 h '[$branch name
5370: 5d 27 20 72 65 66 65 72 65 6e 63 65 73 22 0a 09 ]' references"..
5380: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c .log write 1 fil
5390: 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 e "the bogus rev
53a0: 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 ision '$revnr' a
53b0: 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 nd will be ignor
53c0: 65 64 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 64 ed."...$branch d
53d0: 65 73 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d estroy...unset m
53e0: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 ybranches($branc
53f0: 68 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 hnr).. } else
5400: 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 {...set rev $my
5410: 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 24 72 rev($revnr)...$r
5420: 65 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 72 ev addbranch $br
5430: 61 6e 63 68 0a 09 09 24 62 72 61 6e 63 68 20 73 anch...$branch s
5440: 65 74 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09 etparent $rev...
5450: 09 23 20 49 66 20 72 65 76 69 73 69 6f 6e 73 20 .# If revisions
5460: 77 65 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f were committed o
5470: 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 65 20 n the branch we
5480: 73 74 6f 72 65 20 61 0a 09 09 23 20 72 65 66 65 store a...# refe
5490: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 62 72 61 rence to the bra
54a0: 6e 63 68 20 74 68 65 72 65 2c 20 61 6e 64 20 66 nch there, and f
54b0: 75 72 74 68 65 72 20 64 65 63 6c 61 72 65 0a 09 urther declare..
54c0: 09 23 20 74 68 65 20 66 69 72 73 74 20 63 68 69 .# the first chi
54d0: 6c 64 27 73 20 70 61 72 65 6e 74 20 74 6f 20 62 ld's parent to b
54e0: 65 20 62 72 61 6e 63 68 27 73 20 70 61 72 65 6e e branch's paren
54f0: 74 2c 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 20 t, and...# list
5500: 74 68 69 73 20 63 68 69 6c 64 20 69 6e 20 74 68 this child in th
5510: 65 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f e parent revisio
5520: 6e 2e 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e n.....if {[$bran
5530: 63 68 20 68 61 73 63 68 69 6c 64 72 65 76 5d 7d ch haschildrev]}
5540: 20 7b 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 {... set chi
5550: 6c 64 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 ldrevnr [$branch
5560: 20 63 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20 childrevnr]...
5570: 20 20 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79 set child $my
5580: 72 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 rev($childrevnr)
5590: 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 ... $branch s
55a0: 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a etchild $child..
55b0: 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 .. $child set
55c0: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 parentbranch $br
55d0: 61 6e 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c anch... $chil
55e0: 64 20 73 65 74 70 61 72 65 6e 74 20 20 20 20 20 d setparent
55f0: 20 20 24 72 65 76 0a 09 09 20 20 20 20 24 72 65 $rev... $re
5600: 76 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e v addchildonbran
5610: 63 68 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20 ch $child...}..
5620: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a }..}..return.
5630: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
5640: 64 20 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b d SortBranches {
5650: 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 } {..foreach {re
5660: 76 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 vnr rev} [array
5670: 67 65 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65 get myrev] { $re
5680: 76 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d v sortbranches }
5690: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
56a0: 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 method Proce
56b0: 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65 ssTagDependencie
56c0: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 s {} {..foreach
56d0: 7b 72 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20 {revnr taglist}
56e0: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 [array get mytag
56f0: 73 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b s] {.. if {![
5700: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 info exists myre
5710: 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 v($revnr)]} {...
5720: 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 set n [llength $
5730: 74 61 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77 taglist]...log w
5740: 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 rite 1 file "In
5750: 27 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66 '$mypath': The f
5760: 6f 6c 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e ollowing [nsp $n
5770: 20 74 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22 tag] reference"
5780: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 ...log write 1 f
5790: 69 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 ile "the bogus r
57a0: 65 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 evision '$revnr'
57b0: 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e and will be ign
57c0: 6f 72 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68 ored."...foreach
57d0: 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a tag $taglist {.
57e0: 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
57f0: 31 20 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61 1 file " [$ta
5800: 67 20 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24 g name]"... $
5810: 74 61 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a tag destroy...}.
5820: 09 09 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24 ..unset mytags($
5830: 72 65 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c revnr).. } el
5840: 73 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 se {...set rev $
5850: 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 myrev($revnr)...
5860: 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 foreach tag $tag
5870: 6c 69 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65 list {... $re
5880: 76 20 61 64 64 74 61 67 20 20 20 20 24 74 61 67 v addtag $tag
5890: 0a 09 09 20 20 20 20 24 74 61 67 20 73 65 74 74 ... $tag sett
58a0: 61 67 72 65 76 20 24 72 65 76 0a 09 09 7d 0a 09 agrev $rev...}..
58b0: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e }..}..return
58c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
58d0: 6f 64 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52 od DetermineTheR
58e0: 6f 6f 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b ootRevision {} {
58f0: 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20 ..# The root is
5900: 74 68 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e the one revision
5910: 20 77 68 69 63 68 20 68 61 73 20 6e 6f 20 70 61 which has no pa
5920: 72 65 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 63 rent. By..# chec
5930: 6b 69 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 6f king all revisio
5940: 6e 73 20 77 65 20 65 6e 73 75 72 65 20 74 68 61 ns we ensure tha
5950: 74 20 77 65 20 63 61 6e 20 64 65 74 65 63 74 20 t we can detect
5960: 61 6e 64 0a 09 23 20 72 65 70 6f 72 74 20 74 68 and..# report th
5970: 65 20 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 70 e case of multip
5980: 6c 65 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f 75 le roots. Withou
5990: 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 0a t that we could.
59a0: 09 23 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 6f .# simply take o
59b0: 6e 65 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 ne revision and
59c0: 66 6f 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 6e follow the paren
59d0: 74 20 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 68 t links to..# th
59e0: 65 69 72 20 72 6f 6f 74 20 28 73 69 63 21 29 2e eir root (sic!).
59f0: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e ...foreach {revn
5a00: 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 r rev} [array ge
5a10: 74 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20 t myrev] {..
5a20: 69 66 20 7b 5b 24 72 65 76 20 68 61 73 70 61 72 if {[$rev haspar
5a30: 65 6e 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 ent]} continue..
5a40: 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 integrity as
5a50: 73 65 72 74 20 7b 24 6d 79 72 6f 6f 74 20 65 71 sert {$myroot eq
5a60: 20 22 22 7d 20 7b 4d 75 6c 74 69 70 6c 65 20 72 ""} {Multiple r
5a70: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66 6f oot revisions fo
5a80: 75 6e 64 7d 0a 09 20 20 20 20 73 65 74 20 6d 79 und}.. set my
5a90: 72 6f 6f 74 20 24 72 65 76 0a 09 7d 0a 0a 09 23 root $rev..}...#
5aa0: 20 49 6e 20 74 68 65 20 66 75 74 75 72 65 20 77 In the future w
5ab0: 65 20 61 6c 73 6f 20 6e 65 65 64 20 61 20 6c 69 e also need a li
5ac0: 73 74 2c 20 61 73 20 62 72 61 6e 63 68 65 73 20 st, as branches
5ad0: 63 61 6e 20 62 65 63 6f 6d 65 0a 09 23 20 73 65 can become..# se
5ae0: 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 vered from their
5af0: 20 70 61 72 65 6e 74 2c 20 6d 61 6b 69 6e 67 20 parent, making
5b00: 74 68 65 6d 20 74 68 65 69 72 20 6f 77 6e 20 72 them their own r
5b10: 6f 6f 74 2e 0a 09 73 65 74 20 6d 79 72 6f 6f 74 oot...set myroot
5b20: 73 20 5b 6c 69 73 74 20 24 6d 79 72 6f 6f 74 5d s [list $myroot]
5b30: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
5b40: 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 method Deter
5b50: 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 mineRevisionOper
5b60: 61 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72 ations {} {..for
5b70: 65 61 63 68 20 72 65 76 20 24 6d 79 72 65 76 69 each rev $myrevi
5b80: 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 74 sions { $rev det
5b90: 65 72 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20 ermineoperation
5ba0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
5bb0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 . method Dete
5bc0: 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65 rmineLinesOfDeve
5bd0: 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 lopment {} {..#
5be0: 46 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 74 68 For revisions th
5bf0: 69 73 20 68 61 73 20 62 65 65 6e 20 64 6f 6e 65 is has been done
5c00: 20 61 6c 72 65 61 64 79 2c 20 69 6e 20 27 65 78 already, in 'ex
5c10: 74 65 6e 64 27 2e 20 4e 6f 77 0a 09 23 20 77 65 tend'. Now..# we
5c20: 20 64 6f 20 74 68 69 73 20 66 6f 72 20 74 68 65 do this for the
5c30: 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 branches and ta
5c40: 67 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f gs....foreach {_
5c50: 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 branch} [array
5c60: 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 get mybranches]
5c70: 7b 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 {.. $branch s
5c80: 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 etlod [$self Get
5c90: 4c 4f 44 20 5b 24 62 72 61 6e 63 68 20 70 61 72 LOD [$branch par
5ca0: 65 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09 entrevnr]]..}...
5cb0: 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 foreach {_ tagli
5cc0: 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d st} [array get m
5cd0: 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f ytags] {.. fo
5ce0: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 reach tag $tagli
5cf0: 73 74 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c st {...$tag setl
5d00: 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 od [$self GetLOD
5d10: 20 5b 24 74 61 67 20 74 61 67 72 65 76 6e 72 5d [$tag tagrevnr]
5d20: 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 ].. }..}..ret
5d30: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
5d40: 65 74 68 6f 64 20 47 65 74 4c 4f 44 20 7b 72 65 ethod GetLOD {re
5d50: 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 vnr} {..if {[rev
5d60: 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 istrunkrevnr $r
5d70: 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65 evnr]} {.. re
5d80: 74 75 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 7d turn $mytrunk..}
5d90: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 74 else {.. ret
5da0: 75 72 6e 20 5b 24 73 65 6c 66 20 52 65 76 32 42 urn [$self Rev2B
5db0: 72 61 6e 63 68 20 24 72 65 76 6e 72 5d 0a 09 7d ranch $revnr]..}
5dc0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
5dd0: 6f 64 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e od HandleNonTrun
5de0: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b kDefaultBranch {
5df0: 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 69 73 74 } {..set revlist
5e00: 20 5b 24 73 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b [$self NonTrunk
5e10: 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73 DefaultRevisions
5e20: 5d 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 ]..if {![llength
5e30: 20 24 72 65 76 6c 69 73 74 5d 7d 20 72 65 74 75 $revlist]} retu
5e40: 72 6e 0a 0a 09 24 73 65 6c 66 20 41 64 6a 75 73 rn...$self Adjus
5e50: 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 tNonTrunkDefault
5e60: 42 72 61 6e 63 68 20 24 72 65 76 6c 69 73 74 0a Branch $revlist.
5e70: 09 24 73 65 6c 66 20 43 68 65 63 6b 4c 4f 44 73 .$self CheckLODs
5e80: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
5e90: 20 20 20 20 6d 65 74 68 6f 64 20 4e 6f 6e 54 72 method NonTr
5ea0: 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69 unkDefaultRevisi
5eb0: 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d ons {} {..# From
5ec0: 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f 6c cvs2svn the fol
5ed0: 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 69 lowing explanati
5ee0: 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69 63 on (with modific
5ef0: 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75 ations..# for ou
5f00: 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 r algorithm):...
5f10: 23 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 # Determine whet
5f20: 68 65 72 20 74 68 65 72 65 20 61 72 65 20 61 6e her there are an
5f30: 79 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 y non-trunk defa
5f40: 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 ult branch..# re
5f50: 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 49 66 20 visions....# If
5f60: 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 a non-trunk defa
5f70: 75 6c 74 20 62 72 61 6e 63 68 20 69 73 20 64 65 ult branch is de
5f80: 74 65 72 6d 69 6e 65 64 20 74 6f 20 68 61 76 65 termined to have
5f90: 20 65 78 69 73 74 65 64 2c 0a 09 23 20 72 65 74 existed,..# ret
5fa0: 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 6f 62 urn a list of ob
5fb0: 6a 65 63 74 73 20 66 6f 72 20 61 6c 6c 20 72 65 jects for all re
5fc0: 76 69 73 69 6f 6e 73 20 74 68 61 74 20 77 65 72 visions that wer
5fd0: 65 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74 72 e once..# non-tr
5fe0: 75 6e 6b 20 64 65 66 61 75 6c 74 20 72 65 76 69 unk default revi
5ff0: 73 69 6f 6e 73 2c 20 69 6e 20 64 65 70 65 6e 64 sions, in depend
6000: 65 6e 63 79 20 6f 72 64 65 72 20 28 69 2e 65 2e ency order (i.e.
6010: 20 72 6f 6f 74 0a 09 23 20 66 69 72 73 74 29 2e root..# first).
6020: 0a 0a 09 23 20 54 68 65 72 65 20 61 72 65 20 74 ...# There are t
6030: 77 6f 20 63 61 73 65 73 20 74 6f 20 68 61 6e 64 wo cases to hand
6040: 6c 65 3a 0a 0a 09 23 20 4f 6e 65 20 63 61 73 65 le:...# One case
6050: 20 69 73 20 73 69 6d 70 6c 65 2e 20 20 54 68 65 is simple. The
6060: 20 52 43 53 20 66 69 6c 65 20 6c 69 73 74 73 20 RCS file lists
6070: 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 a default branch
6080: 0a 09 23 20 65 78 70 6c 69 63 69 74 6c 79 20 69 ..# explicitly i
6090: 6e 20 69 74 73 20 68 65 61 64 65 72 2c 20 73 75 n its header, su
60a0: 63 68 20 61 73 20 27 31 2e 31 2e 31 27 2e 20 20 ch as '1.1.1'.
60b0: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 65 In this case, we
60c0: 0a 09 23 20 6b 6e 6f 77 20 74 68 61 74 20 65 76 ..# know that ev
60d0: 65 72 79 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 ery revision on
60e0: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 the vendor branc
60f0: 68 20 69 73 20 74 6f 20 62 65 0a 09 23 20 74 72 h is to be..# tr
6100: 65 61 74 65 64 20 61 73 20 68 65 61 64 20 6f 66 eated as head of
6110: 20 74 72 75 6e 6b 20 61 74 20 74 68 61 74 20 70 trunk at that p
6120: 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e 0a 0a 09 oint in time....
6130: 23 20 42 75 74 20 74 68 65 72 65 27 73 20 61 6c # But there's al
6140: 73 6f 20 61 20 64 65 67 65 6e 65 72 61 74 65 20 so a degenerate
6150: 63 61 73 65 2e 20 20 54 68 65 20 52 43 53 20 66 case. The RCS f
6160: 69 6c 65 20 64 6f 65 73 20 6e 6f 74 0a 09 23 20 ile does not..#
6170: 63 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 currently have a
6180: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c default branch,
6190: 20 79 65 74 20 77 65 20 63 61 6e 20 64 65 64 75 yet we can dedu
61a0: 63 65 20 74 68 61 74 20 66 6f 72 0a 09 23 20 73 ce that for..# s
61b0: 6f 6d 65 20 70 65 72 69 6f 64 20 69 6e 20 74 68 ome period in th
61c0: 65 20 70 61 73 74 20 69 74 20 70 72 6f 62 61 62 e past it probab
61d0: 6c 79 20 2a 64 69 64 2a 20 68 61 76 65 20 6f 6e ly *did* have on
61e0: 65 2e 20 20 46 6f 72 0a 09 23 20 65 78 61 6d 70 e. For..# examp
61f0: 6c 65 2c 20 74 68 65 20 66 69 6c 65 20 68 61 73 le, the file has
6200: 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e vendor revision
6210: 73 20 31 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e 31 s 1.1.1.1 -> 1.1
6220: 2e 31 2e 39 36 2c 0a 09 23 20 61 6c 6c 20 6f 66 .1.96,..# all of
6230: 20 77 68 69 63 68 20 61 72 65 20 64 61 74 65 64 which are dated
6240: 20 62 65 66 6f 72 65 20 31 2e 32 2c 20 61 6e 64 before 1.2, and
6250: 20 74 68 65 6e 20 69 74 20 68 61 73 20 31 2e 31 then it has 1.1
6260: 2e 31 2e 39 37 0a 09 23 20 2d 3e 20 31 2e 31 2e .1.97..# -> 1.1.
6270: 31 2e 31 30 30 20 64 61 74 65 64 20 61 66 74 65 1.100 dated afte
6280: 72 20 31 2e 32 2e 20 20 49 6e 20 74 68 69 73 20 r 1.2. In this
6290: 63 61 73 65 2c 20 77 65 20 73 68 6f 75 6c 64 0a case, we should.
62a0: 09 23 20 72 65 63 6f 72 64 20 31 2e 31 2e 31 2e .# record 1.1.1.
62b0: 39 36 20 61 73 20 74 68 65 20 6c 61 73 74 20 76 96 as the last v
62c0: 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 20 74 endor revision t
62d0: 6f 20 68 61 76 65 20 62 65 65 6e 20 74 68 65 0a o have been the.
62e0: 09 23 20 68 65 61 64 20 6f 66 20 74 68 65 20 64 .# head of the d
62f0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 0a efault branch...
6300: 09 69 66 20 7b 24 6d 79 70 72 69 6e 63 69 70 61 .if {$myprincipa
6310: 6c 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 l ne ""} {..
6320: 23 20 54 68 65 72 65 20 69 73 20 73 74 69 6c 6c # There is still
6330: 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 a default branc
6340: 68 3b 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 h; that means th
6350: 61 74 20 61 6c 6c 0a 09 20 20 20 20 23 20 72 65 at all.. # re
6360: 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 61 74 20 visions on that
6370: 62 72 61 6e 63 68 20 67 65 74 20 6d 61 72 6b 65 branch get marke
6380: 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 d.... log wri
6390: 74 65 20 35 20 66 69 6c 65 20 22 46 6f 75 6e 64 te 5 file "Found
63a0: 20 65 78 70 6c 69 63 69 74 6c 79 20 6d 61 72 6b explicitly mark
63b0: 65 64 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 ed NTDB"... s
63c0: 65 74 20 72 6e 65 78 74 20 5b 24 6d 79 72 6f 6f et rnext [$myroo
63d0: 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 69 66 t child].. if
63e0: 20 7b 24 72 6e 65 78 74 20 6e 65 20 22 22 7d 20 {$rnext ne ""}
63f0: 7b 0a 09 09 74 72 6f 75 62 6c 65 20 66 61 74 61 {...trouble fata
6400: 6c 20 22 46 69 6c 65 20 77 69 74 68 20 64 65 66 l "File with def
6410: 61 75 6c 74 20 62 72 61 6e 63 68 20 24 6d 79 70 ault branch $myp
6420: 72 69 6e 63 69 70 61 6c 20 61 6c 73 6f 20 68 61 rincipal also ha
6430: 73 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6e 65 s revision [$rne
6440: 78 74 20 72 65 76 6e 72 5d 22 0a 09 09 72 65 74 xt revnr]"...ret
6450: 75 72 6e 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 urn.. }...
6460: 20 73 65 74 20 72 65 76 20 5b 24 6d 79 62 72 61 set rev [$mybra
6470: 6e 63 68 65 73 28 24 6d 79 70 72 69 6e 63 69 70 nches($myprincip
6480: 61 6c 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 al) child]..
6490: 73 65 74 20 72 65 73 20 7b 7d 0a 0a 09 20 20 20 set res {}...
64a0: 20 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 while {$rev ne
64b0: 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 ""} {...lappend
64c0: 72 65 73 20 24 72 65 76 0a 09 09 73 65 74 20 72 res $rev...set r
64d0: 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a ev [$rev child].
64e0: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 . }... ret
64f0: 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 urn $res...} els
6500: 65 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 eif {$myimported
6510: 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 20 64 65 } {.. # No de
6520: 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 62 75 fault branch, bu
6530: 74 20 74 68 65 20 66 69 6c 65 20 61 70 70 65 61 t the file appea
6540: 72 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 0a rs to have been.
6550: 09 20 20 20 20 23 20 69 6d 70 6f 72 74 65 64 2e . # imported.
6560: 20 20 53 6f 20 6f 75 72 20 65 64 75 63 61 74 65 So our educate
6570: 64 20 67 75 65 73 73 20 69 73 20 74 68 61 74 20 d guess is that
6580: 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 all revisions..
6590: 20 20 20 23 20 6f 6e 20 74 68 65 20 27 31 2e 31 # on the '1.1
65a0: 2e 31 27 20 62 72 61 6e 63 68 20 77 69 74 68 20 .1' branch with
65b0: 74 69 6d 65 73 74 61 6d 70 73 20 70 72 69 6f 72 timestamps prior
65c0: 20 74 6f 20 74 68 65 0a 09 20 20 20 20 23 20 74 to the.. # t
65d0: 69 6d 65 73 74 61 6d 70 20 6f 66 20 27 31 2e 32 imestamp of '1.2
65e0: 27 20 77 65 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b ' were non-trunk
65f0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a default branch.
6600: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 . # revisions
6610: 2e 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 72 .... # This r
6620: 65 61 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f 63 65 eally only proce
6630: 73 73 65 73 20 73 74 61 6e 64 61 72 64 20 27 31 sses standard '1
6640: 2e 31 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a 09 20 .1.1.*'-style..
6650: 20 20 20 23 20 76 65 6e 64 6f 72 20 72 65 76 69 # vendor revi
6660: 73 69 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f 75 6c sions. One coul
6670: 64 20 63 6f 6e 63 65 69 76 61 62 6c 79 20 68 61 d conceivably ha
6680: 76 65 20 61 20 66 69 6c 65 0a 09 20 20 20 20 23 ve a file.. #
6690: 20 77 68 6f 73 65 20 64 65 66 61 75 6c 74 20 62 whose default b
66a0: 72 61 6e 63 68 20 69 73 20 31 2e 31 2e 33 20 6f ranch is 1.1.3 o
66b0: 72 20 77 68 61 74 65 76 65 72 2c 20 6f 72 20 77 r whatever, or w
66c0: 61 73 20 74 68 61 74 0a 09 20 20 20 20 23 20 61 as that.. # a
66d0: 74 20 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e 20 t some point in
66e0: 74 69 6d 65 2c 20 77 69 74 68 20 76 65 6e 64 6f time, with vendo
66f0: 72 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e r revisions 1.1.
6700: 33 2e 31 2c 0a 09 20 20 20 20 23 20 31 2e 31 2e 3.1,.. # 1.1.
6710: 33 2e 32 2c 20 65 74 63 2e 20 20 42 75 74 20 77 3.2, etc. But w
6720: 69 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 ith the default
6730: 62 72 61 6e 63 68 20 67 6f 6e 65 20 6e 6f 77 2c branch gone now,
6740: 0a 09 20 20 20 20 23 20 77 65 27 64 20 68 61 76 .. # we'd hav
6750: 65 20 6e 6f 20 62 61 73 69 73 20 66 6f 72 20 61 e no basis for a
6760: 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 ssuming that the
6770: 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 0a 09 20 non-standard..
6780: 20 20 20 23 20 76 65 6e 64 6f 72 20 62 72 61 6e # vendor bran
6790: 63 68 20 68 61 64 20 65 76 65 72 20 62 65 65 6e ch had ever been
67a0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 the default bra
67b0: 6e 63 68 20 61 6e 79 77 61 79 2e 0a 0a 09 20 20 nch anyway....
67c0: 20 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65 # Note that we
67d0: 20 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 rely on compari
67e0: 73 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 sons between the
67f0: 20 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 timestamps..
6800: 20 23 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 # of the revisi
6810: 6f 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f ons on the vendo
6820: 72 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61 r branch and tha
6830: 74 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69 t of.. # revi
6840: 73 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 sion 1.2, even t
6850: 68 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73 74 hough the timest
6860: 61 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20 amps might be..
6870: 20 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64 # incorrect d
6880: 75 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 ue to clock skew
6890: 2e 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 . We could do a
68a0: 20 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23 slightly.. #
68b0: 20 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77 better job if w
68c0: 65 20 75 73 65 64 20 74 68 65 20 63 68 61 6e 67 e used the chang
68d0: 65 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c eset timestamps,
68e0: 20 61 73 20 69 74 20 69 73 0a 09 20 20 20 20 23 as it is.. #
68f0: 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74 possible that t
6900: 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 he dependencies
6910: 74 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 that went into..
6920: 20 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e # determinin
6930: 67 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d g those timestam
6940: 70 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75 ps are more accu
6950: 72 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20 rate. But..
6960: 23 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71 # that would req
6970: 75 69 72 65 20 61 6e 20 65 78 74 72 61 20 70 61 uire an extra pa
6980: 73 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 ss or two....
6990: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis
69a0: 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e ts mybranches(1.
69b0: 31 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 1.1)]} { return
69c0: 7b 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 {} }... log w
69d0: 72 69 74 65 20 35 20 66 69 6c 65 20 22 44 65 64 rite 5 file "Ded
69e0: 75 63 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f uced existence o
69f0: 66 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 f NTDB"... se
6a00: 74 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 t rev [$mybranc
6a10: 68 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 hes(1.1.1) child
6a20: 5d 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 20 ].. set res
6a30: 7b 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70 {}.. set stop
6a40: 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d [$myroot child]
6a50: 0a 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 ... if {$stop
6a60: 20 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 eq ""} {...# Ge
6a70: 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 t everything on
6a80: 74 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69 the branch...whi
6a90: 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 le {$rev ne ""}
6aa0: 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 {... lappend
6ab0: 72 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 res $rev... s
6ac0: 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 et rev [$rev chi
6ad0: 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 ld]...}.. } e
6ae0: 6c 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 lse {...# Collec
6af0: 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 t everything on
6b00: 74 68 65 20 62 72 61 6e 63 68 20 77 68 69 63 68 the branch which
6b10: 20 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 seems to have..
6b20: 09 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 .# been committe
6b30: 64 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 d before the fir
6b40: 73 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 st primary child
6b50: 20 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 of the...# root
6b60: 20 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 revision....set
6b70: 20 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 stopdate [$stop
6b80: 20 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b date]...while {
6b90: 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 $rev ne ""} {...
6ba0: 20 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61 if {[$rev da
6bb0: 74 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 te] >= $stopdate
6bc0: 7d 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 } break... la
6bd0: 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 ppend res $rev..
6be0: 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 . set rev [$r
6bf0: 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 ev child]...}..
6c00: 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 }... retur
6c10: 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 n $res...} else
6c20: 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d {.. return {}
6c30: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 ..}. }.. #
6c40: 20 47 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49 General note: I
6c50: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 n the following
6c60: 6d 65 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20 methods we only
6c70: 6d 6f 64 69 66 79 20 74 68 65 20 6c 69 6e 6b 73 modify the links
6c80: 0a 20 20 20 20 23 20 62 65 74 77 65 65 6e 20 72 . # between r
6c90: 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d evisions and sym
6ca0: 62 6f 6c 73 20 74 6f 20 72 65 73 74 72 75 63 74 bols to restruct
6cb0: 75 72 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e ure the revision
6cc0: 0a 20 20 20 20 23 20 74 72 65 65 2e 20 57 65 20 . # tree. We
6cd0: 64 6f 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 do __not__ destr
6ce0: 6f 79 20 74 68 65 20 6f 62 6a 65 63 74 73 2e 20 oy the objects.
6cf0: 47 69 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65 Given the comple
6d00: 78 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 43 x links. # GC
6d10: 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 61 74 is difficult at
6d20: 20 74 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 20 this level. It
6d30: 69 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 74 is much easier t
6d40: 6f 20 64 72 6f 70 0a 20 20 20 20 23 20 65 76 65 o drop. # eve
6d50: 72 79 74 68 69 6e 67 20 77 68 65 6e 20 77 65 20 rything when we
6d60: 77 65 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 69 we are done. Thi
6d70: 73 20 68 61 70 70 65 6e 73 20 69 6e 20 27 64 72 s happens in 'dr
6d80: 6f 70 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 23 op', using. #
6d90: 20 74 68 65 20 73 74 61 74 65 20 76 61 72 69 61 the state varia
6da0: 62 6c 65 20 27 6d 79 72 65 76 27 2c 20 27 6d 79 ble 'myrev', 'my
6db0: 62 72 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 27 branches', and '
6dc0: 6d 79 74 61 67 73 27 2e 20 57 68 61 74 20 77 65 mytags'. What we
6dd0: 0a 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 70 . # have to p
6de0: 65 72 73 69 73 74 2c 20 70 65 72 66 6f 72 6d 65 ersist, performe
6df0: 64 20 62 79 20 27 70 65 72 73 69 73 74 27 2c 20 d by 'persist',
6e00: 77 65 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a we know will be.
6e10: 20 20 20 20 23 20 72 65 61 63 68 61 62 6c 65 20 # reachable
6e20: 74 68 72 6f 75 67 68 20 74 68 65 20 72 65 76 69 through the revi
6e30: 73 69 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e 20 sions listed in
6e40: 27 6d 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 68 'myroots' and th
6e50: 65 69 72 0a 20 20 20 20 23 20 63 68 69 6c 64 72 eir. # childr
6e60: 65 6e 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a en and symbols..
6e70: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 6a 75 . method Adju
6e80: 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c stNonTrunkDefaul
6e90: 74 42 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 74 tBranch {revlist
6ea0: 7d 20 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b 24 } {..set stop [$
6eb0: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23 myroot child] ;#
6ec0: 20 72 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 rev '1.2'...log
6ed0: 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 41 write 5 file "A
6ee0: 64 6a 75 73 74 69 6e 67 20 4e 54 44 42 20 63 6f djusting NTDB co
6ef0: 6e 74 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c ntaining [nsp [l
6f00: 6c 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d length $revlist]
6f10: 20 72 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 revision]"...#
6f20: 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 From cvs2svn the
6f30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 following expla
6f40: 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 nation (with mod
6f50: 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f ifications..# fo
6f60: 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 r our algorithm)
6f70: 3a 0a 0a 09 23 20 41 64 6a 75 73 74 20 74 68 65 :...# Adjust the
6f80: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau
6f90: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 lt branch revisi
6fa0: 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 ons found in the
6fb0: 0a 09 23 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a ..# 'revlist'...
6fc0: 09 23 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 20 .# 'myimported'
6fd0: 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 is a boolean fla
6fe0: 67 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 g indicating whe
6ff0: 74 68 65 72 20 74 68 69 73 20 66 69 6c 65 0a 09 ther this file..
7000: 23 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 # appears to hav
7010: 65 20 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c e been imported,
7020: 20 77 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e which also mean
7030: 73 20 74 68 61 74 0a 09 23 20 72 65 76 69 73 69 s that..# revisi
7040: 6f 6e 20 31 2e 31 20 68 61 73 20 61 20 67 65 6e on 1.1 has a gen
7050: 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 erated log messa
7060: 67 65 20 74 68 61 74 20 6e 65 65 64 20 6e 6f 74 ge that need not
7070: 20 62 65 0a 09 23 20 70 72 65 73 65 72 76 65 64 be..# preserved
7080: 2e 20 20 27 72 65 76 6c 69 73 74 27 20 69 73 20 . 'revlist' is
7090: 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 a list of object
70a0: 20 72 65 66 65 72 65 6e 63 65 73 20 66 6f 72 20 references for
70b0: 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 the..# revisions
70c0: 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 that have been
70d0: 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 determined to be
70e0: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau
70f0: 6c 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 lt..# branch rev
7100: 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 isions....# Note
7110: 20 74 68 61 74 20 74 68 65 20 66 69 72 73 74 20 that the first
7120: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 revision on the
7130: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 default branch i
7140: 73 0a 09 23 20 68 61 6e 64 6c 65 64 20 73 74 72 s..# handled str
7150: 61 6e 67 65 6c 79 20 62 79 20 43 56 53 2e 20 20 angely by CVS.
7160: 49 66 20 61 20 66 69 6c 65 20 69 73 20 69 6d 70 If a file is imp
7170: 6f 72 74 65 64 20 28 61 73 20 6f 70 70 6f 73 65 orted (as oppose
7180: 64 0a 09 23 20 74 6f 20 62 65 69 6e 67 20 61 64 d..# to being ad
7190: 64 65 64 29 2c 20 43 56 53 20 63 72 65 61 74 65 ded), CVS create
71a0: 73 20 61 20 31 2e 31 20 72 65 76 69 73 69 6f 6e s a 1.1 revision
71b0: 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 61 , then creates a
71c0: 0a 09 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 ..# vendor branc
71d0: 68 20 31 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e h 1.1.1 based on
71e0: 20 31 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 74 1.1, then creat
71f0: 65 73 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20 es a 1.1.1.1..#
7200: 72 65 76 69 73 69 6f 6e 20 74 68 61 74 20 69 73 revision that is
7210: 20 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 68 identical to th
7220: 65 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 e 1.1 revision (
7230: 69 2e 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c i.e., its..# del
7240: 74 61 74 65 78 74 20 69 73 20 65 6d 70 74 79 29 tatext is empty)
7250: 2e 20 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 61 . The log messa
7260: 67 65 20 74 68 61 74 20 74 68 65 20 75 73 65 72 ge that the user
7270: 20 74 79 70 65 64 0a 09 23 20 77 68 65 6e 20 69 typed..# when i
7280: 6d 70 6f 72 74 69 6e 67 20 69 73 20 73 74 6f 72 mporting is stor
7290: 65 64 20 77 69 74 68 20 74 68 65 20 31 2e 31 2e ed with the 1.1.
72a0: 31 2e 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 54 1.1 revision. T
72b0: 68 65 20 31 2e 31 0a 09 23 20 72 65 76 69 73 69 he 1.1..# revisi
72c0: 6f 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 on always contai
72d0: 6e 73 20 61 20 73 74 61 6e 64 61 72 64 2c 20 67 ns a standard, g
72e0: 65 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 enerated log mes
72f0: 73 61 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 61 sage,..# 'Initia
7300: 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a l revision\n'...
7310: 09 23 20 57 68 65 6e 20 77 65 20 64 65 74 65 63 .# When we detec
7320: 74 20 61 20 73 74 72 61 69 67 68 74 66 6f 72 77 t a straightforw
7330: 61 72 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20 ard import like
7340: 74 68 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 23 this, we want..#
7350: 20 74 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 79 to handle it by
7360: 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 31 2e deleting the 1.
7370: 31 20 72 65 76 69 73 69 6f 6e 20 28 77 68 69 63 1 revision (whic
7380: 68 20 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e h doesn't..# con
7390: 74 61 69 6e 20 61 6e 79 20 75 73 65 66 75 6c 20 tain any useful
73a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 information) and
73b0: 20 6d 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20 making 1.1.1.1
73c0: 69 6e 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70 into an..# indep
73d0: 65 6e 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74 endent root in t
73e0: 68 65 20 66 69 6c 65 27 73 20 64 65 70 65 6e 64 he file's depend
73f0: 65 6e 63 79 20 74 72 65 65 2e 20 20 49 6e 20 53 ency tree. In S
7400: 56 4e 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77 VN,..# 1.1.1.1 w
7410: 69 6c 6c 20 62 65 20 61 64 64 65 64 20 64 69 72 ill be added dir
7420: 65 63 74 6c 79 20 74 6f 20 74 68 65 20 76 65 6e ectly to the ven
7430: 64 6f 72 20 62 72 61 6e 63 68 20 77 69 74 68 20 dor branch with
7440: 69 74 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 63 its..# initial c
7450: 6f 6e 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e ontent. Then in
7460: 20 61 20 73 70 65 63 69 61 6c 20 27 70 6f 73 74 a special 'post
7470: 2d 63 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23 -commit', the..#
7480: 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 1.1.1.1 revisio
7490: 6e 20 69 73 20 63 6f 70 69 65 64 20 62 61 63 6b n is copied back
74a0: 20 74 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 to trunk....# I
74b0: 66 20 74 68 65 20 75 73 65 72 20 69 6d 70 6f 72 f the user impor
74c0: 74 73 20 61 67 61 69 6e 20 74 6f 20 74 68 65 20 ts again to the
74d0: 73 61 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 6e same vendor bran
74e0: 63 68 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 20 ch, then CVS..#
74f0: 63 72 65 61 74 65 73 20 72 65 76 69 73 69 6f 6e creates revision
7500: 73 20 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 s 1.1.1.2, 1.1.1
7510: 2e 33 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 20 .3, etc. on the
7520: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 vendor branch,..
7530: 23 20 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e # *without* coun
7540: 74 65 72 70 61 72 74 73 20 69 6e 20 74 72 75 6e terparts in trun
7550: 6b 20 28 65 76 65 6e 20 74 68 6f 75 67 68 20 74 k (even though t
7560: 68 65 73 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 hese revisions..
7570: 23 20 65 66 66 65 63 74 69 76 65 6c 79 20 70 6c # effectively pl
7580: 61 79 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 74 ay the role of t
7590: 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e runk revisions).
75a0: 20 20 53 6f 20 61 66 74 65 72 20 77 65 20 61 64 So after we ad
75b0: 64 0a 09 23 20 73 75 63 68 20 72 65 76 69 73 69 d..# such revisi
75c0: 6f 6e 73 20 74 6f 20 74 68 65 20 76 65 6e 64 6f ons to the vendo
75d0: 72 20 62 72 61 6e 63 68 2c 20 77 65 20 61 6c 73 r branch, we als
75e0: 6f 20 63 6f 70 79 20 74 68 65 6d 20 62 61 63 6b o copy them back
75f0: 20 74 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20 to..# trunk in
7600: 70 6f 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 post-commits....
7610: 23 20 57 65 20 6d 61 72 6b 20 74 68 65 20 72 65 # We mark the re
7620: 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e visions found in
7630: 20 27 72 65 76 6c 69 73 74 27 20 61 73 20 64 65 'revlist' as de
7640: 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 fault branch..#
7650: 72 65 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f revisions. Also
7660: 2c 20 69 66 20 74 68 65 20 72 6f 6f 74 20 72 65 , if the root re
7670: 76 69 73 69 6f 6e 20 68 61 73 20 61 20 70 72 69 vision has a pri
7680: 6d 61 72 79 20 63 68 69 6c 64 0a 09 23 20 77 65 mary child..# we
7690: 20 73 65 74 20 74 68 61 74 20 72 65 76 69 73 69 set that revisi
76a0: 6f 6e 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20 on to depend on
76b0: 74 68 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 the last non-tru
76c0: 6e 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 nk default..# br
76d0: 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 61 6e anch revision an
76e0: 64 20 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 73 d possibly adjus
76f0: 74 20 69 74 73 20 74 79 70 65 20 61 63 63 6f 72 t its type accor
7700: 64 69 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69 dingly....set fi
7710: 72 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 rst [lindex $rev
7720: 6c 69 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 list 0]...log wr
7730: 69 74 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 66 ite 6 file "<[$f
7740: 69 72 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78 irst revnr]> [ex
7750: 70 72 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 pr {$myimported
7760: 3f 20 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 22 ? "imported" : "
7770: 6e 6f 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c not imported"}],
7780: 20 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 69 [$first operati
7790: 6f 6e 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69 on], [expr {[$fi
77a0: 72 73 74 20 68 61 73 74 65 78 74 5d 20 3f 20 22 rst hastext] ? "
77b0: 68 61 73 20 74 65 78 74 22 20 3a 20 22 6e 6f 20 has text" : "no
77c0: 74 65 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 text"}]"...if {$
77d0: 6d 79 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 20 myimported &&..
77e0: 20 20 20 5b 24 66 69 72 73 74 20 72 65 76 6e 72 [$first revnr
77f0: 5d 20 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 26 ] eq "1.1.1.1" &
7800: 26 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20 6f &.. [$first o
7810: 70 65 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 68 peration] eq "ch
7820: 61 6e 67 65 22 20 26 26 0a 09 20 20 20 20 21 5b ange" &&.. ![
7830: 24 66 69 72 73 74 20 68 61 73 74 65 78 74 5d 7d $first hastext]}
7840: 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 {... set rev
7850: 31 31 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 11 [$first paren
7860: 74 5d 20 3b 20 23 20 41 73 73 65 72 74 3a 20 53 t] ; # Assert: S
7870: 68 6f 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e hould be myroot.
7880: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
7890: 33 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 3 file "Removing
78a0: 20 69 72 72 65 6c 65 76 61 6e 74 20 72 65 76 69 irrelevant revi
78b0: 73 69 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 76 sion [$rev11 rev
78c0: 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 74 nr]"... # Cut
78d0: 20 6f 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 72 out the old myr
78e0: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 oot revision....
78f0: 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f ldelete myro
7900: 6f 74 73 20 24 72 65 76 31 31 20 3b 20 23 20 4e ots $rev11 ; # N
7910: 6f 74 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f ot a root any lo
7920: 6e 67 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 72 nger.... $fir
7930: 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 st cutfromparent
7940: 20 3b 20 23 20 53 65 76 65 72 20 72 65 76 69 73 ; # Sever revis
7950: 69 6f 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 ion from parent
7960: 72 65 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69 revision... i
7970: 66 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 f {$stop ne ""}
7980: 7b 0a 09 09 24 73 74 6f 70 20 63 75 74 66 72 6f {...$stop cutfro
7990: 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e mparent...lappen
79a0: 64 20 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 20 d myroots $stop
79b0: 3b 20 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66 ; # New root, af
79c0: 74 65 72 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 ter vendor branc
79d0: 68 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 h.. }... #
79e0: 20 43 75 74 20 6f 75 74 20 74 68 65 20 76 65 6e Cut out the ven
79f0: 64 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f dor branch symbo
7a00: 6c 0a 0a 09 20 20 20 20 73 65 74 20 76 65 6e 64 l... set vend
7a10: 6f 72 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e or [$first paren
7a20: 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 6e tbranch].. in
7a30: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
7a40: 24 76 65 6e 64 6f 72 20 6e 65 20 22 22 7d 20 7b $vendor ne ""} {
7a50: 46 69 72 73 74 20 4e 54 44 42 20 72 65 76 69 73 First NTDB revis
7a60: 69 6f 6e 20 68 61 73 20 6e 6f 20 62 72 61 6e 63 ion has no branc
7a70: 68 7d 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65 h}.. if {[$ve
7a80: 6e 64 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20 ndor parent] eq
7a90: 24 72 65 76 31 31 7d 20 7b 0a 09 09 24 72 65 76 $rev11} {...$rev
7aa0: 31 31 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 11 removebranch
7ab0: 20 20 20 20 20 20 20 24 76 65 6e 64 6f 72 0a 09 $vendor..
7ac0: 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 63 68 .$rev11 removech
7ad0: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 66 69 72 ildonbranch $fir
7ae0: 73 74 0a 09 09 24 76 65 6e 64 6f 72 20 63 75 74 st...$vendor cut
7af0: 62 72 61 6e 63 68 70 61 72 65 6e 74 20 20 20 20 branchparent
7b00: 3b 23 20 62 70 20 3d 20 72 65 76 31 31 2c 20 61 ;# bp = rev11, a
7b10: 62 6f 75 74 20 74 6f 20 62 65 20 67 6f 6e 65 0a bout to be gone.
7b20: 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d ..$first cutfrom
7b30: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 3b 23 20 parentbranch ;#
7b40: 70 62 20 3d 20 76 65 6e 64 6f 72 2c 20 74 6f 20 pb = vendor, to
7b50: 62 65 20 61 20 64 65 74 61 63 68 65 64 20 4c 4f be a detached LO
7b60: 44 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f D...lappend myro
7b70: 6f 74 73 20 24 66 69 72 73 74 0a 09 20 20 20 20 ots $first..
7b80: 7d 0a 0a 09 20 20 20 20 23 20 43 68 61 6e 67 65 }... # Change
7b90: 20 74 68 65 20 74 79 70 65 20 6f 66 20 66 69 72 the type of fir
7ba0: 73 74 20 28 74 79 70 69 63 61 6c 6c 79 20 66 72 st (typically fr
7bb0: 6f 6d 20 43 68 61 6e 67 65 20 74 6f 20 41 64 64 om Change to Add
7bc0: 29 3a 0a 09 20 20 20 20 24 66 69 72 73 74 20 72 ):.. $first r
7bd0: 65 74 79 70 65 20 61 64 64 0a 0a 09 20 20 20 20 etype add...
7be0: 23 20 4d 6f 76 65 20 61 6e 79 20 74 61 67 73 20 # Move any tags
7bf0: 61 6e 64 20 62 72 61 6e 63 68 65 73 20 66 72 6f and branches fro
7c00: 6d 20 74 68 65 20 6f 6c 64 20 74 6f 20 74 68 65 m the old to the
7c10: 20 6e 65 77 20 72 6f 6f 74 2e 0a 09 20 20 20 20 new root...
7c20: 24 72 65 76 31 31 20 6d 6f 76 65 73 79 6d 62 6f $rev11 movesymbo
7c30: 6c 73 74 6f 20 24 66 69 72 73 74 0a 09 7d 0a 0a lsto $first..}..
7c40: 09 23 20 4d 61 72 6b 20 61 6c 6c 20 74 68 65 20 .# Mark all the
7c50: 73 70 65 63 69 61 6c 20 72 65 76 69 73 69 6f 6e special revision
7c60: 73 20 61 73 20 73 75 63 68 0a 09 66 6f 72 65 61 s as such..forea
7c70: 63 68 20 72 65 76 20 24 72 65 76 6c 69 73 74 20 ch rev $revlist
7c80: 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 {.. log write
7c90: 20 33 20 66 69 6c 65 20 22 52 65 76 69 73 69 6f 3 file "Revisio
7ca0: 6e 20 6f 6e 20 64 65 66 61 75 6c 74 20 62 72 61 n on default bra
7cb0: 6e 63 68 3a 20 5b 24 72 65 76 20 72 65 76 6e 72 nch: [$rev revnr
7cc0: 5d 22 0a 09 20 20 20 20 24 72 65 76 20 73 65 74 ]".. $rev set
7cd0: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 ondefaultbranch
7ce0: 31 0a 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f 70 1..}...if {$stop
7cf0: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 ne ""} {.. #
7d00: 20 52 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c 6f Revision 1.2 lo
7d10: 67 69 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20 gically follows
7d20: 74 68 65 20 69 6d 70 6f 72 74 65 64 20 72 65 76 the imported rev
7d30: 69 73 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20 6e isions,.. # n
7d40: 6f 74 20 31 2e 31 2e 20 20 41 63 63 6f 72 64 69 ot 1.1. Accordi
7d50: 6e 67 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69 74 ngly, connect it
7d60: 20 74 6f 20 74 68 65 20 6c 61 73 74 20 4e 54 44 to the last NTD
7d70: 42 52 20 61 6e 64 0a 09 20 20 20 20 23 20 70 6f BR and.. # po
7d80: 73 73 69 62 6c 79 20 63 68 61 6e 67 65 20 69 74 ssibly change it
7d90: 73 20 74 79 70 65 2e 0a 0a 09 20 20 20 20 73 65 s type.... se
7da0: 74 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20 24 t last [lindex $
7db0: 72 65 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20 20 revlist end]..
7dc0: 20 20 24 73 74 6f 70 20 73 65 74 64 65 66 61 75 $stop setdefau
7dd0: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 24 ltbranchparent $
7de0: 6c 61 73 74 20 3b 20 23 20 52 65 74 79 70 65 73 last ; # Retypes
7df0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f the revision to
7e00: 6f 2e 0a 09 20 20 20 20 24 6c 61 73 74 20 73 65 o... $last se
7e10: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 tdefaultbranchch
7e20: 69 6c 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09 72 ild $stop..}..r
7e30: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
7e40: 20 6d 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f 44 method CheckLOD
7e50: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 s {} {..foreach
7e60: 7b 5f 20 62 72 61 6e 63 68 7d 20 20 5b 61 72 72 {_ branch} [arr
7e70: 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 ay get mybranche
7e80: 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 63 68 65 s] { $branch che
7e90: 63 6b 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63 68 cklod }..foreach
7ea0: 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 {_ taglist} [ar
7eb0: 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 ray get mytags]
7ec0: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 {.. foreach t
7ed0: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74 ag $taglist { $t
7ee0: 61 67 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d ag checklod }..}
7ef0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
7f00: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 method Remov
7f10: 65 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 74 eIrrelevantDelet
7f20: 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f ions {} {..# Fro
7f30: 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 61 20 m cvs2svn: If a
7f40: 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e file is added on
7f50: 20 61 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20 a branch, then
7f60: 61 20 74 72 75 6e 6b 0a 09 23 20 72 65 76 69 73 a trunk..# revis
7f70: 69 6f 6e 20 69 73 20 61 64 64 65 64 20 61 74 20 ion is added at
7f80: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 69 6e the same time in
7f90: 20 74 68 65 20 27 44 65 61 64 27 20 73 74 61 74 the 'Dead' stat
7fa0: 65 2e 0a 09 23 20 54 68 69 73 20 72 65 76 69 73 e...# This revis
7fb0: 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61 ion doesn't do a
7fc0: 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 2c 20 nything useful,
7fd0: 73 6f 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a 09 so delete it....
7fe0: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79 foreach root $my
7ff0: 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 69 66 20 roots {.. if
8000: 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 {[$root isneeded
8010: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 ]} continue..
8020: 20 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c log write 2 fil
8030: 65 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 e "Removing unne
8040: 63 65 73 73 61 72 79 20 64 65 61 64 20 72 65 76 cessary dead rev
8050: 69 73 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65 76 ision [$root rev
8060: 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 52 65 6d nr]"... # Rem
8070: 6f 76 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61 6b ove as root, mak
8080: 65 20 69 74 73 20 63 68 69 6c 64 20 6e 65 77 20 e its child new
8090: 72 6f 6f 74 20 61 66 74 65 72 0a 09 20 20 20 20 root after..
80a0: 23 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 # disconnecting
80b0: 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 it from the revi
80c0: 73 69 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67 20 sion just going
80d0: 61 77 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65 6c away.... ldel
80e0: 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f ete myroots $roo
80f0: 74 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f t.. if {[$roo
8100: 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a 09 t haschild]} {..
8110: 09 73 65 74 20 63 68 69 6c 64 20 5b 24 72 6f 6f .set child [$roo
8120: 74 20 63 68 69 6c 64 5d 0a 09 09 24 63 68 69 6c t child]...$chil
8130: 64 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a d cutfromparent.
8140: 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 ..lappend myroot
8150: 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a s $child.. }.
8160: 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 .. # Cut out
8170: 74 68 65 20 62 72 61 6e 63 68 65 73 20 73 70 61 the branches spa
8180: 77 6e 65 64 20 62 79 20 74 68 65 20 72 65 76 69 wned by the revi
8190: 73 69 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20 20 sion to be..
81a0: 23 20 64 65 6c 65 74 65 64 2e 20 49 66 20 74 68 # deleted. If th
81b0: 65 20 62 72 61 6e 63 68 20 68 61 73 20 72 65 76 e branch has rev
81c0: 69 73 69 6f 6e 73 20 74 68 65 79 20 73 68 6f 75 isions they shou
81d0: 6c 64 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20 ld already..
81e0: 23 20 75 73 65 20 6f 70 65 72 61 74 69 6f 6e 20 # use operation
81f0: 27 61 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20 74 'add', no need t
8200: 6f 20 63 68 61 6e 67 65 20 74 68 61 74 2e 20 54 o change that. T
8210: 68 65 20 66 69 72 73 74 0a 09 20 20 20 20 23 20 he first.. #
8220: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63 68 revision on each
8230: 20 62 72 61 6e 63 68 20 62 65 63 6f 6d 65 73 20 branch becomes
8240: 61 20 6e 65 77 20 61 6e 64 20 64 69 73 63 6f 6e a new and discon
8250: 6e 65 63 74 65 64 0a 09 20 20 20 20 23 20 72 6f nected.. # ro
8260: 6f 74 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61 63 ot.... foreac
8270: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 h branch [$root
8280: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 24 62 branches] {...$b
8290: 72 61 6e 63 68 20 63 75 74 62 72 61 6e 63 68 70 ranch cutbranchp
82a0: 61 72 65 6e 74 0a 09 09 69 66 20 7b 21 5b 24 62 arent...if {![$b
82b0: 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d ranch haschild]}
82c0: 20 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 continue...set
82d0: 66 69 72 73 74 20 5b 24 62 72 61 6e 63 68 20 63 first [$branch c
82e0: 68 69 6c 64 5d 0a 09 09 24 66 69 72 73 74 20 63 hild]...$first c
82f0: 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c utfromparent...l
8300: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 append myroots $
8310: 66 69 72 73 74 0a 09 20 20 20 20 7d 0a 09 20 20 first.. }..
8320: 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c $root removeal
8330: 6c 62 72 61 6e 63 68 65 73 0a 0a 09 20 20 20 20 lbranches...
8340: 23 20 54 61 67 67 69 6e 67 20 61 20 64 65 61 64 # Tagging a dead
8350: 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 revision doesn'
8360: 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73 t do anything, s
8370: 6f 20 72 65 6d 6f 76 65 0a 09 20 20 20 20 23 20 o remove.. #
8380: 61 6e 79 20 74 61 67 73 20 74 68 61 74 20 77 65 any tags that we
8390: 72 65 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 re set on it....
83a0: 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 $root remove
83b0: 61 6c 6c 74 61 67 73 0a 0a 09 20 20 20 20 23 20 alltags... #
83c0: 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61 This can only ha
83d0: 70 70 65 6e 20 6f 6e 63 65 20 70 65 72 20 66 69 ppen once per fi
83e0: 6c 65 2c 20 61 6e 64 20 77 65 20 6d 69 67 68 74 le, and we might
83f0: 20 68 61 76 65 0a 09 20 20 20 20 23 20 6a 75 73 have.. # jus
8400: 74 20 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74 t changed myroot
8410: 73 2c 20 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f s, so end the lo
8420: 6f 70 0a 09 20 20 20 20 62 72 65 61 6b 0a 09 7d op.. break..}
8430: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
8440: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 method Remov
8450: 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65 eInitialBranchDe
8460: 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 letions {} {..#
8470: 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 From cvs2svn: If
8480: 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69 73 the first revis
8490: 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 ion on a branch
84a0: 69 73 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73 is an..# unneces
84b0: 73 61 72 79 20 64 65 6c 65 74 65 2c 20 72 65 6d sary delete, rem
84c0: 6f 76 65 20 69 74 2e 0a 09 23 0a 09 23 20 49 66 ove it...#..# If
84d0: 20 61 20 66 69 6c 65 20 69 73 20 61 64 64 65 64 a file is added
84e0: 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 28 77 68 on a branch (wh
84f0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 ether or not it
8500: 61 6c 72 65 61 64 79 0a 09 23 20 65 78 69 73 74 already..# exist
8510: 65 64 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68 ed on trunk), th
8520: 65 6e 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 en new versions
8530: 6f 66 20 43 56 53 20 61 64 64 20 61 20 66 69 72 of CVS add a fir
8540: 73 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 st..# branch rev
8550: 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 27 64 65 ision in the 'de
8560: 61 64 27 20 73 74 61 74 65 20 28 74 6f 20 69 6e ad' state (to in
8570: 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 0a dicate that the.
8580: 09 23 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20 .# file did not
8590: 65 78 69 73 74 20 6f 6e 20 74 68 65 20 62 72 61 exist on the bra
85a0: 6e 63 68 20 77 68 65 6e 20 74 68 65 20 62 72 61 nch when the bra
85b0: 6e 63 68 20 77 61 73 0a 09 23 20 63 72 65 61 74 nch was..# creat
85c0: 65 64 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 ed) followed by
85d0: 74 68 65 20 73 65 63 6f 6e 64 20 62 72 61 6e 63 the second branc
85e0: 68 20 72 65 76 69 73 69 6f 6e 2c 20 77 68 69 63 h revision, whic
85f0: 68 20 69 73 20 61 6e 0a 09 23 20 61 64 64 2e 20 h is an..# add.
8600: 20 57 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74 When we encount
8610: 65 72 20 74 68 69 73 20 73 69 74 75 61 74 69 6f er this situatio
8620: 6e 2c 20 77 65 20 73 65 76 65 72 20 74 68 65 20 n, we sever the
8630: 62 72 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74 branch..# from t
8640: 72 75 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65 20 runk and delete
8650: 74 68 65 20 66 69 72 73 74 20 62 72 61 6e 63 68 the first branch
8660: 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 revision....# A
8670: 74 20 74 68 69 73 20 70 6f 69 6e 74 20 77 65 20 t this point we
8680: 6d 61 79 20 68 61 76 65 20 61 6c 72 65 61 64 79 may have already
8690: 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20 multiple roots
86a0: 69 6e 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77 in myroots,..# w
86b0: 65 20 68 61 76 65 20 74 6f 20 70 72 6f 63 65 73 e have to proces
86c0: 73 20 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f s them all....fo
86d0: 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c reach root [$sel
86e0: 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 f LinesOfDevelop
86f0: 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 ment] {.. if
8700: 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 {[$root isneeded
8710: 62 72 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 branchdel]} cont
8720: 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 inue.. log wr
8730: 69 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f ite 2 file "Remo
8740: 76 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 ving unnecessary
8750: 20 69 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20 initial branch
8760: 64 65 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72 65 delete [$root re
8770: 76 6e 72 5d 22 0a 0a 09 20 20 20 20 73 65 74 20 vnr]"... set
8780: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 branch [$root pa
8790: 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 rentbranch]..
87a0: 20 73 65 74 20 70 61 72 65 6e 74 20 5b 24 72 6f set parent [$ro
87b0: 6f 74 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 ot parent]..
87c0: 73 65 74 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f set child [$roo
87d0: 74 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c t child]... l
87e0: 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 delete myroots $
87f0: 72 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e root.. lappen
8800: 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 d myroots $child
8810: 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 ... $branch c
8820: 75 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 utbranchparent..
8830: 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 63 $branch cutc
8840: 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 hild.. $child
8850: 20 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a cutfromparent.
8860: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 .. $branch se
8870: 74 63 68 69 6c 64 20 20 20 20 20 20 20 20 24 63 tchild $c
8880: 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 hild.. $child
8890: 20 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63 setparentbranc
88a0: 68 20 24 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 h $branch...
88b0: 24 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 $parent removebr
88c0: 61 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61 anch $bra
88d0: 6e 63 68 0a 09 20 20 20 20 24 70 61 72 65 6e 74 nch.. $parent
88e0: 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 removechildonbr
88f0: 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 anch $root..}..r
8900: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
8910: 20 6d 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66 44 method LinesOfD
8920: 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a evelopment {} {.
8930: 09 23 20 44 65 74 65 72 6d 69 6e 65 20 61 6c 6c .# Determine all
8940: 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f lines of develo
8950: 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 66 69 pment for the fi
8960: 6c 65 2e 20 54 68 69 73 20 61 72 65 0a 09 23 20 le. This are..#
8970: 74 68 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c the known roots,
8980: 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f 66 and the root of
8990: 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 66 6f all branches fo
89a0: 75 6e 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c 69 und on the..# li
89b0: 6e 65 20 6f 66 20 70 72 69 6d 61 72 79 20 63 68 ne of primary ch
89c0: 69 6c 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f ildren....set lo
89d0: 64 72 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65 61 droots {}..forea
89e0: 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 ch root $myroots
89f0: 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64 {.. $self Ad
8a00: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 dBranchedLinesOf
8a10: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 Development lodr
8a20: 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 oots $root..
8a30: 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 lappend lodroots
8a40: 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 $root..}..retur
8a50: 6e 20 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20 20 n $lodroots.
8a60: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 }.. method Ad
8a70: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 dBranchedLinesOf
8a80: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20 Development {lv
8a90: 72 6f 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20 31 root} {..upvar 1
8aa0: 20 24 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09 77 $lv lodroots..w
8ab0: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 hile {$root ne "
8ac0: 22 7d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 "} {.. foreac
8ad0: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 h branch [$root
8ae0: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 66 branches] {...if
8af0: 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63 {![$branch hasc
8b00: 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a hild]} continue.
8b10: 09 09 73 65 74 20 63 68 69 6c 64 20 5b 24 62 72 ..set child [$br
8b20: 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 23 20 anch child]...#
8b30: 52 65 63 75 72 73 65 20 69 6e 74 6f 20 74 68 65 Recurse into the
8b40: 20 62 72 61 6e 63 68 20 66 6f 72 20 64 65 65 70 branch for deep
8b50: 65 72 20 62 72 61 6e 63 68 65 73 2e 0a 09 09 24 er branches....$
8b60: 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64 self AddBranched
8b70: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 LinesOfDevelopme
8b80: 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 nt lodroots $chi
8b90: 6c 64 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f 64 ld...lappend lod
8ba0: 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 20 roots $child..
8bb0: 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f }.. set roo
8bc0: 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a t [$root child].
8bd0: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. }
8be0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63 .. method Exc
8bf0: 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f ludeNonTrunkInfo
8c00: 72 6d 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 rmation {} {..#
8c10: 52 65 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74 Remove all non-t
8c20: 72 75 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20 72 runk branches, r
8c30: 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74 61 evisions, and ta
8c40: 67 73 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65 65 gs. We do..# kee
8c50: 70 20 74 68 65 20 74 61 67 73 20 77 68 69 63 68 p the tags which
8c60: 20 61 72 65 20 6f 6e 20 74 68 65 20 74 72 75 6e are on the trun
8c70: 6b 2e 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f 6f k....set ntdbroo
8c80: 74 20 22 22 0a 09 66 6f 72 65 61 63 68 20 72 6f t ""..foreach ro
8c90: 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f ot [$self LinesO
8ca0: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a fDevelopment] {.
8cb0: 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 48 65 72 . # Note: Her
8cc0: 65 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 e the order of t
8cd0: 68 65 20 72 6f 6f 74 73 20 69 73 20 69 6d 70 6f he roots is impo
8ce0: 72 74 61 6e 74 2c 0a 09 20 20 20 20 23 20 69 2e rtant,.. # i.
8cf0: 65 2e 20 74 68 61 74 20 77 65 20 67 65 74 20 74 e. that we get t
8d00: 68 65 6d 20 69 6e 20 64 65 70 74 68 20 66 69 72 hem in depth fir
8d10: 73 74 20 6f 72 64 65 72 2e 20 54 68 69 73 20 65 st order. This e
8d20: 6e 73 75 72 65 73 0a 09 20 20 20 20 23 20 74 68 nsures.. # th
8d30: 61 74 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f at the removal o
8d40: 66 20 61 20 62 72 61 6e 63 68 20 68 61 70 70 65 f a branch happe
8d50: 6e 73 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 ns only after th
8d60: 65 0a 09 20 20 20 20 23 20 62 72 61 6e 63 68 65 e.. # branche
8d70: 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69 s spawned from i
8d80: 74 20 77 65 72 65 20 72 65 6d 6f 76 65 64 2e 20 t were removed.
8d90: 4f 74 68 65 72 77 69 73 65 20 74 68 65 0a 09 20 Otherwise the..
8da0: 20 20 20 23 20 73 79 73 74 65 6d 20 6d 69 67 68 # system migh
8db0: 74 20 74 72 79 20 74 6f 20 61 63 63 65 73 73 20 t try to access
8dc0: 64 65 6c 65 74 65 64 20 6f 62 6a 65 63 74 73 2e deleted objects.
8dd0: 0a 0a 09 20 20 20 20 23 20 44 6f 20 6e 6f 74 20 ... # Do not
8de0: 65 78 63 6c 75 64 65 20 74 68 65 20 74 72 75 6e exclude the trun
8df0: 6b 2e 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24 72 k... if {[[$r
8e00: 6f 6f 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e 6b oot lod] istrunk
8e10: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 ]} continue..
8e20: 20 24 73 65 6c 66 20 45 78 63 6c 75 64 65 42 72 $self ExcludeBr
8e30: 61 6e 63 68 20 24 72 6f 6f 74 20 6e 74 64 62 72 anch $root ntdbr
8e40: 6f 6f 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e 74 oot..}...if {$nt
8e50: 64 62 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a dbroot ne ""} {.
8e60: 09 20 20 20 20 24 73 65 6c 66 20 47 72 61 66 74 . $self Graft
8e70: 4e 54 44 42 32 54 72 75 6e 6b 20 24 6e 74 64 62 NTDB2Trunk $ntdb
8e80: 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a root..}..return.
8e90: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
8ea0: 64 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20 d ExcludeBranch
8eb0: 7b 72 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20 45 {root nv} {..# E
8ec0: 78 63 6c 75 64 65 20 74 68 65 20 62 72 61 6e 63 xclude the branc
8ed0: 68 2f 6c 6f 64 20 73 74 61 72 74 69 6e 67 20 61 h/lod starting a
8ee0: 74 20 72 6f 6f 74 2c 20 61 20 72 65 76 69 73 69 t root, a revisi
8ef0: 6f 6e 2e 0a 09 23 0a 09 23 20 49 66 20 74 68 65 on...#..# If the
8f00: 20 4c 4f 44 20 73 74 61 72 74 73 20 77 69 74 68 LOD starts with
8f10: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau
8f20: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 lt branch revisi
8f30: 6f 6e 73 2c 0a 09 23 20 77 65 20 6c 65 61 76 65 ons,..# we leave
8f40: 20 74 68 65 6d 20 69 6e 20 70 6c 61 63 65 20 61 them in place a
8f50: 6e 64 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 65 nd do not delete
8f60: 20 74 68 65 20 62 72 61 6e 63 68 2e 20 49 6e 20 the branch. In
8f70: 74 68 61 74 0a 09 23 20 63 61 73 65 20 74 68 65 that..# case the
8f80: 20 63 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 68 command sets th
8f90: 65 20 76 61 72 69 61 62 6c 65 20 69 6e 20 4e 56 e variable in NV
8fa0: 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 0a so that we can.
8fb0: 09 23 20 6c 61 74 65 72 20 72 65 77 6f 72 6b 20 .# later rework
8fc0: 74 68 65 73 65 20 72 65 76 69 73 6f 6e 73 20 74 these revisons t
8fd0: 6f 20 62 65 20 70 75 72 65 6c 79 20 74 72 75 6e o be purely trun
8fe0: 6b 2e 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 20 k....if {[$root
8ff0: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 isondefaultbranc
9000: 68 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e h]} {.. # Han
9010: 64 6c 69 6e 67 20 61 20 4e 54 44 42 2e 20 54 68 dling a NTDB. Th
9020: 69 73 20 62 72 61 6e 63 68 20 6d 61 79 20 63 6f is branch may co
9030: 6e 73 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79 20 nsists not only
9040: 6f 66 0a 09 20 20 20 20 23 20 4e 54 44 42 20 72 of.. # NTDB r
9050: 65 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 61 6c evisions, but al
9060: 73 6f 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42 so some non-NTDB
9070: 2e 20 54 68 65 20 6c 61 74 74 65 72 20 61 72 65 . The latter are
9080: 0a 09 20 20 20 20 23 20 74 72 75 6c 79 20 6f 6e .. # truly on
9090: 20 61 20 62 72 61 6e 63 68 20 61 6e 64 20 68 61 a branch and ha
90a0: 76 65 20 74 6f 20 62 65 20 65 78 63 6c 75 64 65 ve to be exclude
90b0: 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 d. The following
90c0: 0a 09 20 20 20 20 23 20 6c 6f 6f 70 20 64 65 74 .. # loop det
90d0: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 72 65 ermines if there
90e0: 20 61 72 65 20 73 75 63 68 20 72 65 76 69 73 69 are such revisi
90f0: 6f 6e 73 2e 0a 0a 09 20 20 20 20 75 70 76 61 72 ons.... upvar
9100: 20 31 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74 0a 1 $nv ntdbroot.
9110: 09 20 20 20 20 73 65 74 20 6e 74 64 62 72 6f 6f . set ntdbroo
9120: 74 20 24 72 6f 6f 74 0a 09 20 20 20 20 24 72 6f t $root.. $ro
9130: 6f 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 ot cutfromparent
9140: 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 73 65 74 branch... set
9150: 20 72 65 76 20 24 72 6f 6f 74 0a 09 20 20 20 20 rev $root..
9160: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 while {$rev ne "
9170: 22 7d 20 7b 0a 09 09 24 72 65 76 20 72 65 6d 6f "} {...$rev remo
9180: 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09 veallbranches...
9190: 23 20 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a # See note [x]..
91a0: 0a 09 09 69 66 20 7b 5b 24 72 65 76 20 69 73 6f ...if {[$rev iso
91b0: 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d ndefaultbranch]}
91c0: 20 7b 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 {... set rev
91d0: 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 [$rev child]...
91e0: 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 62 } else {... b
91f0: 72 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a reak...}.. }.
9200: 0a 09 20 20 20 20 23 20 72 65 76 20 6e 6f 77 20 .. # rev now
9210: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 contains the fir
9220: 73 74 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76 69 st non-NTDB revi
9230: 73 69 6f 6e 20 61 66 74 65 72 20 74 68 65 0a 09 sion after the..
9240: 20 20 20 20 23 20 4e 54 44 42 2c 20 6f 72 20 69 # NTDB, or i
9250: 73 20 65 6d 70 74 79 20 69 66 20 74 68 65 72 65 s empty if there
9260: 20 69 73 20 6e 6f 20 73 75 63 68 2e 20 49 66 20 is no such. If
9270: 77 65 20 68 61 76 65 20 73 6f 6d 65 0a 09 20 20 we have some..
9280: 20 20 23 20 74 68 65 79 20 68 61 76 65 20 74 6f # they have to
9290: 20 72 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20 20 removed....
92a0: 69 66 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 if {$rev ne ""}
92b0: 20 7b 0a 09 09 73 65 74 20 6c 61 73 74 6e 74 64 {...set lastntd
92c0: 62 20 5b 24 72 65 76 20 70 61 72 65 6e 74 5d 0a b [$rev parent].
92d0: 09 09 24 6c 61 73 74 6e 74 64 62 20 63 75 74 66 ..$lastntdb cutf
92e0: 72 6f 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c 65 romchild...while
92f0: 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a {$rev ne ""} {.
9300: 09 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76 .. $rev remov
9310: 65 61 6c 6c 74 61 67 73 0a 09 09 20 20 20 20 24 ealltags... $
9320: 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 rev removeallbra
9330: 6e 63 68 65 73 0a 09 09 20 20 20 20 23 20 4e 6f nches... # No
9340: 74 65 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20 73 te [x]: We may s
9350: 74 69 6c 6c 20 68 61 76 65 20 68 61 64 20 62 72 till have had br
9360: 61 6e 63 68 65 73 20 6f 6e 20 74 68 65 0a 09 09 anches on the...
9370: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2e 20 # revision.
9380: 42 72 61 6e 63 68 65 73 20 77 69 74 68 6f 75 74 Branches without
9390: 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d 69 revisions commi
93a0: 74 74 65 64 0a 09 09 20 20 20 20 23 20 6f 6e 20 tted... # on
93b0: 74 68 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f 77 them do not show
93c0: 20 75 70 20 69 6e 20 74 68 65 20 6c 69 73 74 20 up in the list
93d0: 6f 66 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09 20 of roots aka...
93e0: 20 20 20 23 20 6c 69 6e 65 73 20 6f 66 20 64 65 # lines of de
93f0: 76 65 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20 20 velopment....
9400: 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 set rev [$rev c
9410: 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d hild]...}.. }
9420: 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a .. return..}.
9430: 0a 09 23 20 4e 6f 20 4e 54 44 42 20 73 74 75 66 ..# No NTDB stuf
9440: 66 20 74 6f 20 64 65 61 6c 20 77 69 74 68 2e 20 f to deal with.
9450: 46 69 72 73 74 20 64 65 6c 65 74 65 20 74 68 65 First delete the
9460: 20 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a 09 branch object..
9470: 23 20 69 74 73 65 6c 66 2c 20 61 66 74 65 72 20 # itself, after
9480: 63 75 74 74 69 6e 67 20 61 6c 6c 20 74 68 65 20 cutting all the
9490: 76 61 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74 69 various connecti
94a0: 6f 6e 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e 63 ons....set branc
94b0: 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 h [$root parentb
94c0: 72 61 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72 61 ranch]..if {$bra
94d0: 6e 63 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 nch ne ""} {..
94e0: 20 20 73 65 74 20 62 72 61 6e 63 68 70 61 72 65 set branchpare
94f0: 6e 74 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 nt [$branch pare
9500: 6e 74 5d 0a 09 20 20 20 20 24 62 72 61 6e 63 68 nt].. $branch
9510: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 parent removebra
9520: 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e nch $bran
9530: 63 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70 ch.. $branchp
9540: 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c arent removechil
9550: 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a donbranch $root.
9560: 09 7d 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 .}...# The root
9570: 69 73 20 6e 6f 20 73 75 63 68 20 61 6e 79 20 6c is no such any l
9580: 6f 6e 67 65 72 20 65 69 74 68 65 72 2e 0a 09 6c onger either...l
9590: 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 delete myroots $
95a0: 72 6f 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f 20 root...# Now go
95b0: 74 68 72 6f 75 67 68 20 74 68 65 20 6c 69 6e 65 through the line
95c0: 20 61 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c 20 and remove all
95d0: 69 74 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a its revisions...
95e0: 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 .while {$root ne
95f0: 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f ""} {.. $roo
9600: 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a t removealltags.
9610: 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 . $root remov
9620: 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20 20 eallbranches..
9630: 20 20 23 20 4e 6f 74 65 3a 20 53 65 65 20 74 68 # Note: See th
9640: 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20 20 e note [x]....
9650: 20 20 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e # From cvs2svn
9660: 3a 20 49 66 20 74 68 69 73 20 69 73 20 74 68 65 : If this is the
9670: 20 6c 61 73 74 20 64 65 66 61 75 6c 74 20 72 65 last default re
9680: 76 69 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20 20 vision on a..
9690: 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 # non-trunk def
96a0: 61 75 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c 6c ault branch foll
96b0: 6f 77 65 64 20 62 79 20 61 20 31 2e 32 20 72 65 owed by a 1.2 re
96c0: 76 69 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 74 vision,.. # t
96d0: 68 65 6e 20 74 68 65 20 31 2e 32 20 72 65 76 69 hen the 1.2 revi
96e0: 73 69 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e 20 sion depends on
96f0: 74 68 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d 45 this one. FIXME
9700: 3a 20 49 74 20 69 73 0a 09 20 20 20 20 23 20 71 : It is.. # q
9710: 75 65 73 74 69 6f 6e 61 62 6c 65 20 77 68 65 74 uestionable whet
9720: 68 65 72 20 74 68 69 73 20 68 61 6e 64 6c 69 6e her this handlin
9730: 67 20 69 73 20 63 6f 72 72 65 63 74 2c 20 73 69 g is correct, si
9740: 6e 63 65 20 74 68 65 0a 09 20 20 20 20 23 20 6e nce the.. # n
9750: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 on-trunk default
9760: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e branch revision
9770: 73 20 61 66 66 65 63 74 20 74 72 75 6e 6b 20 61 s affect trunk a
9780: 6e 64 0a 09 20 20 20 20 23 20 73 68 6f 75 6c 64 nd.. # should
9790: 20 74 68 65 72 65 66 6f 72 65 20 6e 6f 74 20 6a therefore not j
97a0: 75 73 74 20 62 65 20 64 69 73 63 61 72 64 65 64 ust be discarded
97b0: 20 65 76 65 6e 20 69 66 0a 09 20 20 20 20 23 20 even if.. #
97c0: 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09 --trunk-only....
97d0: 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 if {[$root h
97e0: 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 asdefaultbranchc
97f0: 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 6e hild]} {...set n
9800: 74 64 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20 tdbchild [$root
9810: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 defaultbranchchi
9820: 6c 64 5d 0a 09 09 69 6e 74 65 67 72 69 74 79 20 ld]...integrity
9830: 61 73 73 65 72 74 20 7b 0a 09 09 20 20 20 20 5b assert {... [
9840: 24 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61 75 $ntdbchild defau
9850: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d 20 ltbranchparent]
9860: 65 71 20 24 6e 74 64 62 63 68 69 6c 64 0a 09 09 eq $ntdbchild...
9870: 7d 20 7b 6e 74 64 62 20 2d 20 74 72 75 6e 6b 20 } {ntdb - trunk
9880: 6c 69 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 7d 0a linkage broken}.
9890: 09 09 24 6e 74 64 62 63 68 69 6c 64 20 63 75 74 ..$ntdbchild cut
98a0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 defaultbranchpar
98b0: 65 6e 74 0a 09 09 69 66 20 7b 5b 24 6e 74 64 62 ent...if {[$ntdb
98c0: 63 68 69 6c 64 20 68 61 73 70 61 72 65 6e 74 5d child hasparent]
98d0: 7d 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e } {... lappen
98e0: 64 20 6d 79 72 6f 6f 74 73 20 5b 24 6e 74 64 62 d myroots [$ntdb
98f0: 63 68 69 6c 64 20 70 61 72 65 6e 74 5d 0a 09 09 child parent]...
9900: 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73 }.. }... s
9910: 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 et root [$root c
9920: 68 69 6c 64 5d 0a 09 7d 0a 0a 09 72 65 74 75 72 hild]..}...retur
9930: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
9940: 68 6f 64 20 47 72 61 66 74 4e 54 44 42 32 54 72 hod GraftNTDB2Tr
9950: 75 6e 6b 20 7b 72 6f 6f 74 7d 20 7b 0a 09 23 20 unk {root} {..#
9960: 57 65 20 63 61 6e 20 6e 6f 77 20 67 72 61 66 74 We can now graft
9970: 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 the non-trunk d
9980: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 efault branch re
9990: 76 69 73 69 6f 6e 73 20 74 6f 0a 09 23 20 74 72 visions to..# tr
99a0: 75 6e 6b 2e 20 54 68 65 79 20 73 68 6f 75 6c 64 unk. They should
99b0: 20 61 6c 72 65 61 64 79 20 62 65 20 61 6c 6f 6e already be alon
99c0: 65 20 6f 6e 20 61 20 43 56 53 42 72 61 6e 63 68 e on a CVSBranch
99d0: 2d 6c 65 73 73 0a 09 23 20 62 72 61 6e 63 68 2e -less..# branch.
99e0: 0a 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 ...integrity ass
99f0: 65 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73 ert {![$root has
9a00: 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b parentbranch]} {
9a10: 4e 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 NTDB root still
9a20: 68 61 73 20 69 74 73 20 62 72 61 6e 63 68 20 73 has its branch s
9a30: 79 6d 62 6f 6c 7d 0a 09 69 6e 74 65 67 72 69 74 ymbol}..integrit
9a40: 79 20 61 73 73 65 72 74 20 7b 21 5b 24 72 6f 6f y assert {![$roo
9a50: 74 20 68 61 73 62 72 61 6e 63 68 65 73 5d 7d 20 t hasbranches]}
9a60: 20 20 20 20 7b 4e 54 44 42 20 72 6f 6f 74 20 73 {NTDB root s
9a70: 74 69 6c 6c 20 68 61 73 20 73 70 61 77 6e 65 64 till has spawned
9a80: 20 62 72 61 6e 63 68 65 73 7d 0a 0a 09 73 65 74 branches}...set
9a90: 20 6c 61 73 74 20 24 72 6f 6f 74 0a 09 77 68 69 last $root..whi
9aa0: 6c 65 20 7b 5b 24 6c 61 73 74 20 68 61 73 63 68 le {[$last hasch
9ab0: 69 6c 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74 20 ild]} {set last
9ac0: 5b 24 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a 0a [$last child]}..
9ad0: 09 69 66 20 7b 5b 24 6c 61 73 74 20 68 61 73 64 .if {[$last hasd
9ae0: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c efaultbranchchil
9af0: 64 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 d]} {... set
9b00: 72 65 76 31 32 20 5b 24 6c 61 73 74 20 64 65 66 rev12 [$last def
9b10: 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d aultbranchchild]
9b20: 0a 09 20 20 20 20 24 72 65 76 31 32 20 63 75 74 .. $rev12 cut
9b30: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 defaultbranchpar
9b40: 65 6e 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20 ent.. $last
9b50: 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 cutdefaultbranch
9b60: 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 72 65 76 child... $rev
9b70: 31 32 20 63 68 61 6e 67 65 70 61 72 65 6e 74 20 12 changeparent
9b80: 24 6c 61 73 74 0a 09 20 20 20 20 24 6c 61 73 74 $last.. $last
9b90: 20 20 63 68 61 6e 67 65 63 68 69 6c 64 20 24 72 changechild $r
9ba0: 65 76 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c 65 ev12... ldele
9bb0: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31 te myroots $rev1
9bc0: 32 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 61 2... # Note a
9bd0: 6e 64 20 72 65 6d 65 6d 62 65 72 20 74 68 61 74 nd remember that
9be0: 20 74 68 65 20 74 79 70 65 20 6f 66 20 72 65 76 the type of rev
9bf0: 31 32 20 77 61 73 20 61 6c 72 65 61 64 79 0a 09 12 was already..
9c00: 20 20 20 20 23 20 61 64 6a 75 73 74 65 64 20 62 # adjusted b
9c10: 79 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b y AdjustNonTrunk
9c20: 44 65 66 61 75 6c 74 42 72 61 6e 63 68 2c 20 73 DefaultBranch, s
9c30: 6f 20 77 65 20 64 6f 6e 27 74 0a 09 20 20 20 20 o we don't..
9c40: 23 20 68 61 76 65 20 74 6f 20 63 68 61 6e 67 65 # have to change
9c50: 20 69 74 73 20 74 79 70 65 20 68 65 72 65 2e 0a its type here..
9c60: 09 7d 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f .}...while {$roo
9c70: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 t ne ""} {..
9c80: 24 72 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61 75 $root setondefau
9c90: 6c 74 62 72 61 6e 63 68 20 30 0a 09 20 20 20 20 ltbranch 0..
9ca0: 24 72 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d 79 $root setlod $my
9cb0: 74 72 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65 61 trunk.. forea
9cc0: 63 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 61 ch tag [$root ta
9cd0: 67 73 5d 20 7b 0a 09 09 24 74 61 67 20 73 65 74 gs] {...$tag set
9ce0: 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 lod $mytrunk..
9cf0: 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f }.. set roo
9d00: 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a t [$root child].
9d10: 09 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 .}.. retu
9d20: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
9d30: 74 68 6f 64 20 41 63 74 69 76 65 20 7b 7d 20 7b thod Active {} {
9d40: 0a 09 73 65 74 20 72 65 76 69 73 69 6f 6e 73 20 ..set revisions
9d50: 7b 7d 0a 09 73 65 74 20 73 79 6d 62 6f 6c 73 20 {}..set symbols
9d60: 20 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 72 {}...foreach r
9d70: 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 oot [$self Lines
9d80: 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b OfDevelopment] {
9d90: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 .. if {[$root
9da0: 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68 hasparentbranch
9db0: 5d 7d 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d ]} { lappend sym
9dc0: 62 6f 6c 73 20 5b 24 72 6f 6f 74 20 70 61 72 65 bols [$root pare
9dd0: 6e 74 62 72 61 6e 63 68 5d 20 7d 0a 09 20 20 20 ntbranch] }..
9de0: 20 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 while {$root ne
9df0: 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 ""} {...lappend
9e00: 20 72 65 76 69 73 69 6f 6e 73 20 24 72 6f 6f 74 revisions $root
9e10: 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 20 ...foreach tag
9e20: 20 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 20 [$root tags]
9e30: 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d { lappend sym
9e40: 62 6f 6c 73 20 24 74 61 67 20 20 20 20 7d 0a 09 bols $tag }..
9e50: 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 .foreach branch
9e60: 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d [$root branches]
9e70: 20 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 {... integri
9e80: 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b ty assert {....[
9e90: 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 20 $branch parent]
9ea0: 65 71 20 24 72 6f 6f 74 0a 09 09 20 20 20 20 7d eq $root... }
9eb0: 20 7b 42 61 63 6b 72 65 66 65 72 65 6e 63 65 20 {Backreference
9ec0: 62 72 61 6e 63 68 20 74 6f 20 69 74 73 20 72 6f branch to its ro
9ed0: 6f 74 20 69 73 20 6d 69 73 73 69 6e 67 20 6f 72 ot is missing or
9ee0: 20 77 72 6f 6e 67 7d 0a 09 09 20 20 20 20 6c 61 wrong}... la
9ef0: 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 62 ppend symbols $b
9f00: 72 61 6e 63 68 0a 09 09 7d 0a 09 09 73 65 74 20 ranch...}...set
9f10: 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a lod [$root lod].
9f20: 09 09 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74 ..if {![$lod ist
9f30: 72 75 6e 6b 5d 7d 20 7b 0a 09 09 20 20 20 20 69 runk]} {... i
9f40: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
9f50: 7b 0a 09 09 09 5b 24 6c 6f 64 20 68 61 73 63 68 {....[$lod hasch
9f60: 69 6c 64 5d 0a 09 09 20 20 20 20 7d 20 7b 42 72 ild]... } {Br
9f70: 61 6e 63 68 20 69 73 20 4c 4f 44 20 73 79 6d 62 anch is LOD symb
9f80: 6f 6c 20 77 69 74 68 6f 75 74 20 72 65 76 69 73 ol without revis
9f90: 69 6f 6e 73 7d 0a 09 09 20 20 20 20 6c 61 70 70 ions}... lapp
9fa0: 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 6c 6f 64 end symbols $lod
9fb0: 0a 09 09 7d 0a 09 09 73 65 74 20 72 6f 6f 74 20 ...}...set root
9fc0: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 [$root child]..
9fd0: 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e }..}...return
9fe0: 20 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 20 2d 75 [list [lsort -u
9ff0: 6e 69 71 75 65 20 2d 64 69 63 74 20 24 72 65 76 nique -dict $rev
a000: 69 73 69 6f 6e 73 5d 20 5b 6c 73 6f 72 74 20 2d isions] [lsort -
a010: 75 6e 69 71 75 65 20 2d 64 69 63 74 20 24 73 79 unique -dict $sy
a020: 6d 62 6f 6c 73 5d 5d 0a 20 20 20 20 7d 0a 0a 0a mbols]]. }...
a030: 20 20 20 20 6d 65 74 68 6f 64 20 41 67 67 72 65 method Aggre
a040: 67 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 20 7b gateSymbolData {
a050: 7d 20 7b 0a 09 23 20 4e 6f 77 20 74 68 61 74 20 } {..# Now that
a060: 74 68 65 20 65 78 61 63 74 20 73 65 74 20 6f 66 the exact set of
a070: 20 72 65 76 69 73 69 6f 6e 73 20 28 61 6e 64 20 revisions (and
a080: 74 68 72 6f 75 67 68 20 74 68 61 74 0a 09 23 20 through that..#
a090: 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67 branches and tag
a0a0: 73 29 20 69 73 20 6b 6e 6f 77 6e 20 77 65 20 63 s) is known we c
a0b0: 61 6e 20 75 70 64 61 74 65 20 74 68 65 20 61 67 an update the ag
a0c0: 67 72 65 67 61 74 65 0a 09 23 20 73 79 6d 62 6f gregate..# symbo
a0d0: 6c 20 73 74 61 74 69 73 74 69 63 73 2e 0a 0a 09 l statistics....
a0e0: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 foreach root [$s
a0f0: 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c elf LinesOfDevel
a100: 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 73 opment] {.. s
a110: 65 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f et lod [$root lo
a120: 64 5d 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a d]... # Note:
a130: 20 49 66 20 74 68 65 20 4c 4f 44 20 69 73 20 74 If the LOD is t
a140: 68 65 20 74 72 75 6e 6b 20 74 68 65 20 63 6f 75 he trunk the cou
a150: 6e 74 2a 2c 20 65 74 63 2e 20 6d 65 74 68 6f 64 nt*, etc. method
a160: 73 0a 09 20 20 20 20 23 20 77 69 6c 6c 20 64 6f s.. # will do
a170: 20 6e 6f 74 68 69 6e 67 2c 20 61 73 20 69 74 20 nothing, as it
a180: 69 73 20 61 6c 77 61 79 73 20 70 72 65 73 65 6e is always presen
a190: 74 20 28 63 61 6e 6e 6f 74 20 62 65 0a 09 20 20 t (cannot be..
a1a0: 20 20 23 20 65 78 63 6c 75 64 65 64 29 2c 20 61 # excluded), a
a1b0: 6e 64 20 69 73 20 61 6c 77 61 79 73 20 61 20 62 nd is always a b
a1c0: 72 61 6e 63 68 20 74 6f 6f 2e 0a 0a 09 20 20 20 ranch too....
a1d0: 20 23 20 4c 69 6e 65 73 20 6f 66 20 64 65 76 65 # Lines of deve
a1e0: 6c 6f 70 6d 65 6e 74 20 63 6f 75 6e 74 20 61 73 lopment count as
a1f0: 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 68 61 branches and ha
a200: 76 65 20 61 20 63 6f 6d 6d 69 74 0a 09 20 20 20 ve a commit..
a210: 20 23 20 6f 6e 20 74 68 65 6d 20 28 72 6f 6f 74 # on them (root
a220: 29 2e 20 49 66 20 74 68 65 79 20 61 72 65 20 73 ). If they are s
a230: 74 69 6c 6c 20 61 74 74 61 63 68 65 64 20 74 6f till attached to
a240: 20 61 20 74 72 65 65 20 77 65 0a 09 20 20 20 20 a tree we..
a250: 23 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 74 # have to comput
a260: 65 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 70 e and register p
a270: 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73 2e ossible parents.
a280: 0a 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e ... $lod coun
a290: 74 61 73 62 72 61 6e 63 68 0a 09 20 20 20 20 24 tasbranch.. $
a2a0: 6c 6f 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69 74 lod countacommit
a2b0: 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f ... if {[$roo
a2c0: 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 t hasparentbranc
a2d0: 68 5d 7d 20 7b 0a 09 09 23 20 4e 6f 74 65 20 6c h]} {...# Note l
a2e0: 6f 64 20 3d 3d 20 5b 24 72 6f 6f 74 20 70 61 72 od == [$root par
a2f0: 65 6e 74 62 72 61 6e 63 68 5d 0a 09 09 24 6c 6f entbranch]...$lo
a300: 64 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 d possibleparent
a310: 73 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 s.. } elseif
a320: 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d {![$lod istrunk]
a330: 20 26 26 20 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 && [$root isond
a340: 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b efaultbranch]} {
a350: 0a 09 09 23 20 54 68 69 73 20 69 73 20 74 68 65 ...# This is the
a360: 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 6f root revision o
a370: 66 20 61 20 64 65 74 61 63 68 65 64 20 4e 54 44 f a detached NTD
a380: 42 2e 20 57 65 0a 09 09 23 20 68 61 76 65 20 74 B. We...# have t
a390: 6f 20 6d 61 6e 75 61 6c 6c 79 20 73 65 74 20 74 o manually set t
a3a0: 68 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 he only possible
a3b0: 20 70 61 72 65 6e 74 20 66 6f 72 0a 09 09 23 20 parent for...#
a3c0: 74 68 69 73 20 4c 4f 44 2c 20 74 68 65 20 74 72 this LOD, the tr
a3d0: 75 6e 6b 20 69 74 73 65 6c 66 2e 0a 0a 09 09 5b unk itself.....[
a3e0: 24 6c 6f 64 20 73 79 6d 62 6f 6c 5d 20 70 6f 73 $lod symbol] pos
a3f0: 73 69 62 6c 65 70 61 72 65 6e 74 20 24 6d 79 74 sibleparent $myt
a400: 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 20 runk.. }...
a410: 20 20 23 20 46 6f 72 20 74 68 65 20 72 65 76 69 # For the revi
a420: 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 6e sions in the lin
a430: 65 20 77 65 20 72 65 67 69 73 74 65 72 20 74 68 e we register th
a440: 65 69 72 20 62 72 61 6e 63 68 65 73 0a 09 20 20 eir branches..
a450: 20 20 23 20 61 6e 64 20 74 61 67 73 20 61 73 20 # and tags as
a460: 62 6c 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 65 blockers for the
a470: 20 6c 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 65 lod, and update
a480: 20 74 68 65 20 74 79 70 65 0a 09 20 20 20 20 23 the type.. #
a490: 20 63 6f 75 6e 74 65 72 73 20 61 73 20 77 65 6c counters as wel
a4a0: 6c 2e 20 41 73 20 62 72 61 6e 63 68 20 73 79 6d l. As branch sym
a4b0: 62 6f 6c 73 20 77 69 74 68 6f 75 74 20 63 6f 6d bols without com
a4c0: 6d 69 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 74 mits on.. # t
a4d0: 68 65 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 74 hem are not list
a4e0: 65 64 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 64 ed as lines of d
a4f0: 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 68 evelopment, we h
a500: 61 76 65 20 74 6f 0a 09 20 20 20 20 23 20 63 6f ave to.. # co
a510: 75 6e 74 20 74 68 65 6d 20 68 65 72 65 20 61 73 unt them here as
a520: 20 77 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e 20 well, as plain
a530: 62 72 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 73 branches. At las
a540: 74 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 65 t we.. # have
a550: 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20 to compute and
a560: 72 65 67 69 73 74 65 72 20 74 68 65 20 70 6f 73 register the pos
a570: 73 69 62 6c 65 20 70 61 72 65 6e 74 73 20 6f 66 sible parents of
a580: 20 74 68 65 0a 09 20 20 20 20 23 20 74 61 67 73 the.. # tags
a590: 2c 20 69 6e 20 63 61 73 65 20 74 68 65 79 20 61 , in case they a
a5a0: 72 65 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 74 re later convert
a5b0: 65 64 20 61 73 20 62 72 61 6e 63 68 65 73 2e 0a ed as branches..
a5c0: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f .. while {$ro
a5d0: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 6f ot ne ""} {...fo
a5e0: 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72 reach branch [$r
a5f0: 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a oot branches] {.
a600: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b .. $lod block
a610: 65 64 62 79 20 24 62 72 61 6e 63 68 0a 09 09 20 edby $branch...
a620: 20 20 20 24 62 72 61 6e 63 68 20 70 6f 73 73 69 $branch possi
a630: 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20 bleparents...
a640: 20 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 if {[$branch ha
a650: 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 schild]} continu
a660: 65 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 e... $branch
a670: 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 09 countasbranch...
a680: 7d 0a 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 }....foreach tag
a690: 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a [$root tags] {.
a6a0: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b .. $lod block
a6b0: 65 64 62 79 20 24 74 61 67 0a 09 09 20 20 20 20 edby $tag...
a6c0: 24 74 61 67 20 70 6f 73 73 69 62 6c 65 70 61 72 $tag possiblepar
a6d0: 65 6e 74 73 0a 09 09 20 20 20 20 24 74 61 67 20 ents... $tag
a6e0: 63 6f 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a 0a countastag...}..
a6f0: 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f ..set root [$roo
a700: 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a t child].. }.
a710: 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 .}...return.
a720: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ##
a730: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
a740: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############.
a750: 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 ## Configurat
a760: 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 ion.. pragma
a770: 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 -hastypeinfo
a780: 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 no ; # no type
a790: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 introspection.
a7a0: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 pragma -hasinf
a7b0: 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 o no ; #
a7c0: 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f no object intro
a7d0: 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 spection. pra
a7e0: 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68 gma -hastypemeth
a7f0: 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65 ods no ; # type
a800: 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74 is not relevant
a810: 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 ... # # ## ##
a820: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
a830: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d #############.}
a840: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c ..namespace eval
a850: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
a860: 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20 mport::cvs {.
a870: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 namespace expor
a880: 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 73 t file. names
a890: 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 7b pace eval file {
a8a0: 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 72 ..# Import not r
a8b0: 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 79 equired, already
a8c0: 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 61 a child namespa
a8d0: 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 65 ce...# namespace
a8e0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo
a8f0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
a900: 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 20 s::file::rev..#
a910: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
a920: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
a930: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 mport::cvs::file
a940: 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 65 ::sym..namespace
a950: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f import ::vc::to
a960: 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 ols::misc::*..na
a970: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
a980: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 :vc::tools::trou
a990: 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 ble..namespace i
a9a0: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c mport ::vc::tool
a9b0: 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 63 s::log..namespac
a9c0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
a9d0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
a9e0: 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 vs::state..names
a9f0: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 pace import ::vc
aa00: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 ::fossil::import
aa10: 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 ::cvs::integrity
aa20: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f ..namespace impo
aa30: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a rt ::vc::fossil:
aa40: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 67 74 :import::cvs::gt
aa50: 63 6f 72 65 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 core. }.}..#
aa60: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
aa70: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
aa80: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
aa90: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 ###########.## R
aaa0: 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 eady..package pr
aab0: 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c ovide vc::fossil
aac0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 ::import::cvs::f
aad0: 69 6c 65 20 31 2e 30 0a 72 65 74 75 72 6e 0a ile 1.0.return.