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: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 78 20 7d file delete $x }
2260: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 70 61 74 68 ...foreach {path
2270: 20 72 69 64 7d 20 24 72 65 76 6d 61 70 20 7b 0a rid} $revmap {.
2280: 09 20 20 20 20 73 65 74 20 75 75 69 64 20 24 69 . set uuid $i
2290: 64 6d 61 70 28 24 70 61 74 68 29 0a 09 20 20 20 dmap($path)..
22a0: 20 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 state run {...I
22b0: 4e 53 45 52 54 20 49 4e 54 4f 20 72 65 76 75 75 NSERT INTO revuu
22c0: 69 64 20 28 72 69 64 2c 20 20 75 75 69 64 29 0a id (rid, uuid).
22d0: 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 ..VALUES
22e0: 20 20 20 20 20 20 28 24 72 69 64 2c 20 24 75 75 ($rid, $uu
22f0: 69 64 29 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 id).. }..}..r
2300: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
2310: 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 20 7b method Expand {
2320: 64 69 72 7d 20 7b 0a 09 73 65 74 20 65 78 20 5b dir} {..set ex [
2330: 73 74 72 75 63 74 3a 3a 67 72 61 70 68 20 65 78 struct::graph ex
2340: 5d 20 3b 20 23 20 45 78 70 61 6e 73 69 6f 6e 20 ] ; # Expansion
2350: 67 72 61 70 68 2e 0a 09 73 65 74 20 7a 70 20 5b graph...set zp [
2360: 73 74 72 75 63 74 3a 3a 67 72 61 70 68 20 7a 70 struct::graph zp
2370: 5d 20 3b 20 23 20 5a 69 70 2f 49 6d 70 6f 72 74 ] ; # Zip/Import
2380: 20 67 72 61 70 68 2e 0a 0a 09 63 6c 6f 73 65 20 graph....close
2390: 5b 6f 70 65 6e 20 24 64 69 72 2f 72 5f 5f 65 6d [open $dir/r__em
23a0: 70 74 79 5f 5f 20 77 5d 3b 23 20 42 61 73 65 20 pty__ w];# Base
23b0: 66 6f 72 20 64 65 74 61 63 68 65 64 20 72 6f 6f for detached roo
23c0: 74 73 20 6f 6e 20 62 72 61 6e 63 68 65 73 2e 0a ts on branches..
23d0: 0a 09 23 20 50 68 61 73 65 20 49 3a 20 50 75 6c ..# Phase I: Pul
23e0: 6c 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 l the revisions
23f0: 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 61 6e 64 20 from memory and
2400: 66 69 6c 6c 20 74 68 65 20 67 72 61 70 68 73 0a fill the graphs.
2410: 09 23 20 20 20 20 20 20 20 20 20 20 77 69 74 68 .# with
2420: 20 74 68 65 6d 2e 2e 2e 0a 0a 09 73 65 74 20 65 them......set e
2430: 61 72 63 73 20 20 20 7b 7d 20 3b 20 23 20 41 72 arcs {} ; # Ar
2440: 63 73 20 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e cs for expansion
2450: 20 67 72 61 70 68 0a 09 73 65 74 20 7a 61 72 63 graph..set zarc
2460: 73 20 20 20 7b 7d 20 3b 20 23 20 41 72 63 73 20 s {} ; # Arcs
2470: 66 6f 72 20 7a 69 70 20 67 72 61 70 68 0a 09 73 for zip graph..s
2480: 65 74 20 72 65 76 6d 61 70 20 20 7b 7d 20 3b 20 et revmap {} ;
2490: 23 20 70 61 74 68 20 2d 3e 20 72 69 64 20 6d 61 # path -> rid ma
24a0: 70 20 74 6f 20 6c 61 74 65 72 20 6d 65 72 67 65 p to later merge
24b0: 20 75 75 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f uuid informatio
24c0: 6e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 64 n...foreach {rid
24d0: 20 72 65 76 6e 72 20 70 61 72 65 6e 74 20 63 68 revnr parent ch
24e0: 69 6c 64 20 63 6f 66 66 20 63 6c 65 6e 7d 20 5b ild coff clen} [
24f0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 state run {..
2500: 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 52 SELECT R.rid, R
2510: 2e 72 65 76 2c 20 52 2e 70 61 72 65 6e 74 2c 20 .rev, R.parent,
2520: 52 2e 63 68 69 6c 64 2c 20 52 2e 63 6f 66 66 2c R.child, R.coff,
2530: 20 52 2e 63 6c 65 6e 0a 09 20 20 20 20 46 52 4f R.clen.. FRO
2540: 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 M revision R..
2550: 20 20 20 20 57 48 45 52 45 20 20 52 2e 66 69 64 WHERE R.fid
2560: 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 7b 0a 09 = $myid..}] {..
2570: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 76 6d lappend revm
2580: 61 70 20 72 24 72 65 76 6e 72 20 24 72 69 64 0a ap r$revnr $rid.
2590: 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64 65 20 69 .. $zp node i
25a0: 6e 73 65 72 74 20 24 72 69 64 0a 09 20 20 20 20 nsert $rid..
25b0: 24 7a 70 20 6e 6f 64 65 20 73 65 74 20 20 20 20 $zp node set
25c0: 24 72 69 64 20 72 65 76 6e 72 20 24 72 65 76 6e $rid revnr $revn
25d0: 72 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64 65 20 r.. $zp node
25e0: 73 65 74 20 20 20 20 24 72 69 64 20 6c 61 62 65 set $rid labe
25f0: 6c 20 3c 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20 l <$revnr>...
2600: 20 69 66 20 7b 24 63 68 69 6c 64 20 6e 65 20 22 if {$child ne "
2610: 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 7a "} {...lappend z
2620: 61 72 63 73 20 24 63 68 69 6c 64 20 24 72 69 64 arcs $child $rid
2630: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 24 65 .. }... $e
2640: 78 20 6e 6f 64 65 20 69 6e 73 65 72 74 20 24 72 x node insert $r
2650: 69 64 0a 09 20 20 20 20 24 65 78 20 6e 6f 64 65 id.. $ex node
2660: 20 73 65 74 20 20 20 20 24 72 69 64 20 74 65 78 set $rid tex
2670: 74 20 20 5b 6c 69 73 74 20 24 63 6f 66 66 20 24 t [list $coff $
2680: 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65 78 20 6e clen].. $ex n
2690: 6f 64 65 20 73 65 74 20 20 20 20 24 72 69 64 20 ode set $rid
26a0: 72 65 76 6e 72 20 24 72 65 76 6e 72 0a 09 20 20 revnr $revnr..
26b0: 20 20 24 65 78 20 6e 6f 64 65 20 73 65 74 20 20 $ex node set
26c0: 20 20 24 72 69 64 20 6c 61 62 65 6c 20 3c 24 72 $rid label <$r
26d0: 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69 66 20 7b evnr>... if {
26e0: 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e [rev istrunkrevn
26f0: 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 09 23 r $revnr]} {...#
2700: 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b 2c 20 74 On the trunk, t
2710: 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69 73 20 his revision is
2720: 61 20 64 65 6c 74 61 20 62 61 73 65 64 20 6f 6e a delta based on
2730: 20 74 68 65 0a 09 09 23 20 63 68 69 6c 64 2e 20 the...# child.
2740: 54 68 61 74 20 6d 61 6b 65 73 20 74 68 65 20 63 That makes the c
2750: 68 69 6c 64 20 6f 75 72 20 70 72 65 64 65 63 65 hild our predece
2760: 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b 24 63 68 ssor.....if {$ch
2770: 69 6c 64 20 65 71 20 22 22 7d 20 63 6f 6e 74 69 ild eq ""} conti
2780: 6e 75 65 0a 09 09 6c 61 70 70 65 6e 64 20 65 61 nue...lappend ea
2790: 72 63 73 20 24 63 68 69 6c 64 20 24 72 69 64 0a rcs $child $rid.
27a0: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 . } else {...
27b0: 23 20 4f 6e 20 61 20 62 72 61 6e 63 68 20 74 68 # On a branch th
27c0: 69 73 20 72 65 76 69 73 69 6f 6e 20 69 73 20 61 is revision is a
27d0: 20 64 65 6c 74 61 20 62 61 73 65 64 20 6f 6e 20 delta based on
27e0: 74 68 65 0a 09 09 23 20 70 61 72 65 6e 74 2e 20 the...# parent.
27f0: 54 68 61 74 20 6d 61 6b 65 73 20 74 68 65 20 70 That makes the p
2800: 61 72 65 6e 74 20 6f 75 72 20 70 72 65 64 65 63 arent our predec
2810: 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b 24 70 essor.....if {$p
2820: 61 72 65 6e 74 20 65 71 20 22 22 7d 20 7b 0a 09 arent eq ""} {..
2830: 09 20 20 20 20 23 20 44 65 74 61 63 68 65 64 20 . # Detached
2840: 62 72 61 6e 63 68 20 72 6f 6f 74 2c 20 74 68 69 branch root, thi
2850: 73 20 69 73 20 61 20 70 61 74 63 68 20 62 61 73 s is a patch bas
2860: 65 64 20 6f 6e 0a 09 09 20 20 20 20 23 20 74 68 ed on... # th
2870: 65 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a e empty string..
2880: 09 09 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 .. $ex node s
2890: 65 74 20 24 72 69 64 20 5f 5f 62 61 73 65 5f 5f et $rid __base__
28a0: 20 72 5f 5f 65 6d 70 74 79 5f 5f 20 0a 09 09 20 r__empty__ ...
28b0: 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09 09 7d 0a continue...}.
28c0: 09 09 6c 61 70 70 65 6e 64 20 65 61 72 63 73 20 ..lappend earcs
28d0: 24 70 61 72 65 6e 74 20 24 72 69 64 0a 09 20 20 $parent $rid..
28e0: 20 20 7d 0a 09 7d 0a 0a 09 23 20 50 68 61 73 65 }..}...# Phase
28f0: 20 49 49 3a 20 49 6e 73 65 72 74 20 74 68 65 20 II: Insert the
2900: 61 63 63 75 6d 75 6c 61 74 65 64 20 64 65 70 65 accumulated depe
2910: 6e 64 65 6e 63 69 65 73 0a 0a 09 66 6f 72 65 61 ndencies...forea
2920: 63 68 20 7b 66 72 6f 6d 20 74 6f 7d 20 24 65 61 ch {from to} $ea
2930: 72 63 73 20 7b 20 24 65 78 20 61 72 63 20 69 6e rcs { $ex arc in
2940: 73 65 72 74 20 24 66 72 6f 6d 20 24 74 6f 20 7d sert $from $to }
2950: 0a 09 66 6f 72 65 61 63 68 20 7b 66 72 6f 6d 20 ..foreach {from
2960: 74 6f 7d 20 24 7a 61 72 63 73 20 7b 20 24 7a 70 to} $zarcs { $zp
2970: 20 61 72 63 20 69 6e 73 65 72 74 20 24 66 72 6f arc insert $fro
2980: 6d 20 24 74 6f 20 7d 0a 0a 09 23 20 50 68 61 73 m $to }...# Phas
2990: 65 20 49 49 49 3a 20 54 72 61 76 65 72 73 65 20 e III: Traverse
29a0: 74 68 65 20 67 72 61 70 68 73 2c 20 65 78 70 61 the graphs, expa
29b0: 6e 64 20 74 68 65 20 66 69 6c 65 2c 20 61 6e 64 nd the file, and
29c0: 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 20 67 ..# g
29d0: 65 6e 65 72 61 74 65 20 69 6d 70 6f 72 74 20 69 enerate import i
29e0: 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a 0a 09 73 nstructions....s
29f0: 65 74 20 61 72 63 68 69 76 65 20 5b 66 69 6c 65 et archive [file
2a00: 20 6a 6f 69 6e 20 5b 24 6d 79 70 72 6f 6a 65 63 join [$myprojec
2a10: 74 20 66 75 6c 6c 70 61 74 68 5d 20 24 6d 79 70 t fullpath] $myp
2a20: 61 74 68 5d 0a 09 73 65 74 20 61 63 20 20 20 20 ath]..set ac
2a30: 20 20 5b 6f 70 65 6e 20 24 61 72 63 68 69 76 65 [open $archive
2a40: 20 72 5d 0a 09 66 63 6f 6e 66 69 67 75 72 65 20 r]..fconfigure
2a50: 24 61 63 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e $ac -translation
2a60: 20 62 69 6e 61 72 79 0a 0a 09 23 20 46 69 72 73 binary...# Firs
2a70: 74 20 74 72 61 76 65 72 73 65 20 74 68 65 20 65 t traverse the e
2a80: 78 70 61 6e 73 69 6f 6e 20 67 72 61 70 68 2c 20 xpansion graph,
2a90: 74 68 69 73 20 67 69 76 65 73 20 75 73 20 74 68 this gives us th
2aa0: 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 69 e..# revisions i
2ab0: 6e 20 74 68 65 20 6f 72 64 65 72 20 77 65 20 68 n the order we h
2ac0: 61 76 65 20 74 6f 20 65 78 70 61 6e 64 20 74 68 ave to expand th
2ad0: 65 6d 2c 20 77 68 69 63 68 20 77 65 20 64 6f 2e em, which we do.
2ae0: 0a 0a 09 73 65 74 20 6d 61 78 20 5b 6c 6c 65 6e ...set max [llen
2af0: 67 74 68 20 5b 24 65 78 20 6e 6f 64 65 73 5d 5d gth [$ex nodes]]
2b00: 0a 09 73 65 74 20 6d 79 69 6d 70 6f 72 74 20 30 ..set myimport 0
2b10: 0a 0a 09 67 74 63 6f 72 65 20 64 61 74 61 63 6d ...gtcore datacm
2b20: 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 d [mymethod Ex
2b30: 70 61 6e 64 44 61 74 61 5d 0a 09 67 74 63 6f 72 pandData]..gtcor
2b40: 65 20 66 6f 72 6d 61 74 63 6d 64 20 5b 6d 79 6d e formatcmd [mym
2b50: 65 74 68 6f 64 20 45 78 70 61 6e 64 46 6f 72 6d ethod ExpandForm
2b60: 61 74 5d 0a 09 67 74 63 6f 72 65 20 73 6f 72 74 at]..gtcore sort
2b70: 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 cmd [mymethod
2b80: 45 78 70 61 6e 64 53 6f 72 74 5d 0a 09 67 74 63 ExpandSort]..gtc
2b90: 6f 72 65 20 73 61 76 65 63 6d 64 20 20 20 5b 6d ore savecmd [m
2ba0: 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 31 20 ymethod Expand1
2bb0: 24 61 63 20 24 64 69 72 20 24 6d 61 78 5d 0a 0a $ac $dir $max]..
2bc0: 09 67 74 63 6f 72 65 20 74 72 61 76 65 72 73 65 .gtcore traverse
2bd0: 20 24 65 78 20 3b 20 23 20 54 68 65 20 67 72 61 $ex ; # The gra
2be0: 70 68 20 69 73 20 67 6f 6e 65 20 61 66 74 65 72 ph is gone after
2bf0: 20 74 68 65 20 63 61 6c 6c 0a 09 63 6c 6f 73 65 the call..close
2c00: 20 24 61 63 0a 0a 09 23 20 4e 6f 77 20 74 72 61 $ac...# Now tra
2c10: 76 65 72 73 65 20 74 68 65 20 69 6d 70 6f 72 74 verse the import
2c20: 20 67 72 61 70 68 2c 20 74 68 69 73 20 62 75 69 graph, this bui
2c30: 6c 64 73 20 74 68 65 20 69 6e 73 74 72 75 63 74 lds the instruct
2c40: 69 6f 6e 0a 09 23 20 6d 61 70 20 66 6f 72 20 74 ion..# map for t
2c50: 68 65 20 66 6f 73 73 69 6c 20 64 65 6c 74 61 73 he fossil deltas
2c60: 2e 0a 0a 09 67 74 63 6f 72 65 20 64 61 74 61 63 ....gtcore datac
2c70: 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 md [mymethod E
2c80: 78 70 61 6e 64 44 61 74 61 5d 0a 09 67 74 63 6f xpandData]..gtco
2c90: 72 65 20 66 6f 72 6d 61 74 63 6d 64 20 5b 6d 79 re formatcmd [my
2ca0: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 46 6f 72 method ExpandFor
2cb0: 6d 61 74 5d 0a 09 67 74 63 6f 72 65 20 73 6f 72 mat]..gtcore sor
2cc0: 74 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 tcmd [mymethod
2cd0: 20 45 78 70 61 6e 64 53 6f 72 74 5d 0a 09 67 74 ExpandSort]..gt
2ce0: 63 6f 72 65 20 73 61 76 65 63 6d 64 20 20 20 5b core savecmd [
2cf0: 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 32 mymethod Expand2
2d00: 5d 0a 0a 09 73 65 74 20 6d 79 69 6d 70 6f 72 74 ]...set myimport
2d10: 20 7b 7d 0a 09 67 74 63 6f 72 65 20 74 72 61 76 {}..gtcore trav
2d20: 65 72 73 65 20 24 7a 70 20 3b 20 23 20 54 68 65 erse $zp ; # The
2d30: 20 67 72 61 70 68 20 69 73 20 67 6f 6e 65 20 61 graph is gone a
2d40: 66 74 65 72 20 74 68 65 20 63 61 6c 6c 0a 09 73 fter the call..s
2d50: 65 74 20 66 69 6c 65 6d 61 70 20 24 6d 79 69 6d et filemap $myim
2d60: 70 6f 72 74 0a 09 75 6e 73 65 74 20 6d 79 69 6d port..unset myim
2d70: 70 6f 72 74 0a 0a 09 23 20 41 6e 64 20 62 61 63 port...# And bac
2d80: 6b 20 74 6f 20 69 6d 70 6f 72 74 20 63 6f 6e 74 k to import cont
2d90: 72 6f 6c 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69 rol...return [li
2da0: 73 74 20 24 66 69 6c 65 6d 61 70 20 24 72 65 76 st $filemap $rev
2db0: 6d 61 70 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 map]. }..
2dc0: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74 method ExpandDat
2dd0: 61 20 20 20 7b 67 72 61 70 68 20 6e 6f 64 65 7d a {graph node}
2de0: 20 7b 20 72 65 74 75 72 6e 20 5b 24 67 72 61 70 { return [$grap
2df0: 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 h node get $node
2e00: 20 72 65 76 6e 72 5d 20 7d 0a 20 20 20 20 6d 65 revnr] }. me
2e10: 74 68 6f 64 20 45 78 70 61 6e 64 46 6f 72 6d 61 thod ExpandForma
2e20: 74 20 7b 67 72 61 70 68 20 69 74 65 6d 7d 20 7b t {graph item} {
2e30: 20 72 65 74 75 72 6e 20 3c 5b 6c 69 6e 64 65 78 return <[lindex
2e40: 20 24 69 74 65 6d 20 31 5d 3e 20 7d 20 3b 20 23 $item 1]> } ; #
2e50: 20 72 65 76 6e 72 0a 20 20 20 20 6d 65 74 68 6f revnr. metho
2e60: 64 20 45 78 70 61 6e 64 53 6f 72 74 20 20 20 7b d ExpandSort {
2e70: 67 72 61 70 68 20 63 61 6e 64 69 64 61 74 65 73 graph candidates
2e80: 7d 20 7b 0a 09 23 20 63 61 6e 64 69 64 61 74 65 } {..# candidate
2e90: 73 20 3d 20 6c 69 73 74 28 69 74 65 6d 29 2c 20 s = list(item),
2ea0: 69 74 65 6d 20 3d 20 6c 69 73 74 28 6e 6f 64 65 item = list(node
2eb0: 20 72 65 76 6e 72 29 0a 09 23 20 53 6f 72 74 20 revnr)..# Sort
2ec0: 62 79 20 6e 6f 64 65 20 61 6e 64 20 72 65 76 6e by node and revn
2ed0: 72 20 2d 3e 20 54 72 75 6e 6b 20 72 65 76 69 73 r -> Trunk revis
2ee0: 69 6f 6e 73 20 63 6f 6d 65 20 66 69 72 73 74 2e ions come first.
2ef0: 0a 09 72 65 74 75 72 6e 20 5b 6c 73 6f 72 74 20 ..return [lsort
2f00: 2d 69 6e 64 65 78 20 31 20 2d 64 69 63 74 20 5b -index 1 -dict [
2f10: 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d lsort -index 0 -
2f20: 64 69 63 74 20 24 63 61 6e 64 69 64 61 74 65 73 dict $candidates
2f30: 5d 5d 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 74 ]]. }. met
2f40: 68 6f 64 20 45 78 70 61 6e 64 31 20 7b 63 68 61 hod Expand1 {cha
2f50: 6e 20 64 69 72 20 6d 61 78 20 67 72 61 70 68 20 n dir max graph
2f60: 6e 6f 64 65 7d 20 7b 0a 09 6c 6f 67 20 70 72 6f node} {..log pro
2f70: 67 72 65 73 73 20 33 20 66 69 6c 65 20 24 6d 79 gress 3 file $my
2f80: 69 6d 70 6f 72 74 20 24 6d 61 78 20 3b 20 69 6e import $max ; in
2f90: 63 72 20 6d 79 69 6d 70 6f 72 74 0a 0a 09 73 65 cr myimport...se
2fa0: 74 20 72 65 76 6e 72 20 20 20 20 20 20 20 20 20 t revnr
2fb0: 20 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 [$graph node g
2fc0: 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 0a et $node revnr].
2fd0: 09 73 65 74 20 66 6e 61 6d 65 20 20 20 20 20 20 .set fname
2fe0: 20 20 20 20 72 24 72 65 76 6e 72 0a 09 73 74 72 r$revnr..str
2ff0: 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e uct::list assign
3000: 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 [$graph node ge
3010: 74 20 24 6e 6f 64 65 20 74 65 78 74 5d 20 6f 66 t $node text] of
3020: 66 73 65 74 20 6c 65 6e 67 74 68 0a 0a 09 69 66 fset length...if
3030: 20 7b 24 6c 65 6e 67 74 68 20 3c 20 30 7d 20 7b {$length < 0} {
3040: 0a 09 20 20 20 20 73 65 74 20 64 61 74 61 20 22 .. set data "
3050: 22 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 "..} else {..
3060: 20 73 65 65 6b 20 24 63 68 61 6e 20 24 6f 66 66 seek $chan $off
3070: 73 65 74 20 73 74 61 72 74 0a 09 20 20 20 20 73 set start.. s
3080: 65 74 20 64 61 74 61 20 5b 73 74 72 69 6e 67 20 et data [string
3090: 6d 61 70 20 7b 40 40 20 40 7d 20 5b 72 65 61 64 map {@@ @} [read
30a0: 20 24 63 68 61 6e 20 24 6c 65 6e 67 74 68 5d 5d $chan $length]]
30b0: 0a 09 7d 0a 0a 09 69 66 20 7b 21 5b 24 67 72 61 ..}...if {![$gra
30c0: 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 69 73 74 ph node keyexist
30d0: 73 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f s $node __base__
30e0: 5d 7d 20 7b 0a 09 20 20 20 20 23 20 46 75 6c 6c ]} {.. # Full
30f0: 20 74 65 78 74 20 6e 6f 64 65 2e 20 47 65 74 20 text node. Get
3100: 74 68 65 20 64 61 74 61 2c 20 64 65 63 6f 64 65 the data, decode
3110: 20 69 74 2c 20 61 6e 64 20 73 61 76 65 2e 0a 0a it, and save...
3120: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 . log write 8
3130: 20 66 69 6c 65 20 7b 45 78 70 61 6e 64 69 6e 67 file {Expanding
3140: 20 3c 24 72 65 76 6e 72 3e 2c 20 66 75 6c 6c 20 <$revnr>, full
3150: 74 65 78 74 7d 0a 0a 09 20 20 20 20 66 69 6c 65 text}... file
3160: 75 74 69 6c 3a 3a 77 72 69 74 65 46 69 6c 65 20 util::writeFile
3170: 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e -translation bin
3180: 61 72 79 20 24 64 69 72 2f 24 66 6e 61 6d 65 20 ary $dir/$fname
3190: 24 64 61 74 61 0a 09 7d 20 65 6c 73 65 20 7b 0a $data..} else {.
31a0: 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e 6f 64 . # Delta nod
31b0: 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73 20 74 e. __base__ is t
31c0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 he name of the f
31d0: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 09 ile containing..
31e0: 20 20 20 20 23 20 74 68 65 20 62 61 73 65 6c 69 # the baseli
31f0: 6e 65 2e 20 54 68 65 20 70 61 74 63 68 20 69 73 ne. The patch is
3200: 20 61 74 20 74 68 65 20 73 70 65 63 69 66 69 65 at the specifie
3210: 64 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 0a 09 20 d location of..
3220: 20 20 20 23 20 74 68 65 20 61 72 63 68 69 76 65 # the archive
3230: 20 66 69 6c 65 2e 0a 0a 09 20 20 20 20 73 65 74 file.... set
3240: 20 66 62 61 73 65 20 5b 24 67 72 61 70 68 20 6e fbase [$graph n
3250: 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20 5f 5f ode get $node __
3260: 62 61 73 65 5f 5f 5d 0a 09 20 20 20 20 6c 6f 67 base__].. log
3270: 20 77 72 69 74 65 20 38 20 66 69 6c 65 20 7b 45 write 8 file {E
3280: 78 70 61 6e 64 69 6e 67 20 3c 24 72 65 76 6e 72 xpanding <$revnr
3290: 3e 2c 20 69 73 20 64 65 6c 74 61 20 6f 66 20 3c >, is delta of <
32a0: 24 66 62 61 73 65 3e 7d 0a 0a 09 20 20 20 20 73 $fbase>}... s
32b0: 65 74 20 62 61 73 65 20 5b 66 69 6c 65 75 74 69 et base [fileuti
32c0: 6c 3a 3a 63 61 74 20 2d 74 72 61 6e 73 6c 61 74 l::cat -translat
32d0: 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72 2f ion binary $dir/
32e0: 24 66 62 61 73 65 5d 0a 0a 09 20 20 20 20 23 20 $fbase]... #
32f0: 57 72 69 74 69 6e 67 20 74 68 65 20 70 61 74 63 Writing the patc
3300: 68 20 74 6f 20 64 69 73 6b 20 69 73 20 6a 75 73 h to disk is jus
3310: 74 20 66 6f 72 20 62 65 74 74 65 72 0a 09 20 20 t for better..
3320: 20 20 23 20 64 65 62 75 67 67 69 6e 67 2e 20 49 # debugging. I
3330: 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 74 t is not used ot
3340: 68 65 72 77 69 73 65 2e 0a 09 20 20 20 20 66 69 herwise... fi
3350: 6c 65 75 74 69 6c 3a 3a 77 72 69 74 65 46 69 6c leutil::writeFil
3360: 65 20 24 64 69 72 2f 72 70 61 74 63 68 20 24 64 e $dir/rpatch $d
3370: 61 74 61 0a 09 20 20 20 20 66 69 6c 65 75 74 69 ata.. fileuti
3380: 6c 3a 3a 77 72 69 74 65 46 69 6c 65 20 2d 74 72 l::writeFile -tr
3390: 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 anslation binary
33a0: 20 24 64 69 72 2f 24 66 6e 61 6d 65 20 5c 0a 09 $dir/$fname \..
33b0: 09 5b 41 70 70 6c 79 20 24 62 61 73 65 20 24 64 .[Apply $base $d
33c0: 61 74 61 5d 0a 09 7d 0a 0a 09 23 20 50 6f 73 74 ata]..}...# Post
33d0: 20 74 6f 20 61 6c 6c 20 73 75 63 63 65 73 73 6f to all successo
33e0: 72 73 20 74 68 61 74 20 74 68 65 20 6a 75 73 74 rs that the just
33f0: 20 67 65 6e 65 72 61 74 65 64 20 66 69 6c 65 20 generated file
3400: 69 73 20 74 68 65 69 72 0a 09 23 20 62 61 73 65 is their..# base
3410: 6c 69 6e 65 2e 0a 0a 09 66 6f 72 65 61 63 68 20 line....foreach
3420: 6f 75 74 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 out [$graph node
3430: 73 20 2d 6f 75 74 20 24 6e 6f 64 65 5d 20 7b 0a s -out $node] {.
3440: 09 20 20 20 20 24 67 72 61 70 68 20 6e 6f 64 65 . $graph node
3450: 20 73 65 74 20 24 6f 75 74 20 5f 5f 62 61 73 65 set $out __base
3460: 5f 5f 20 24 66 6e 61 6d 65 0a 09 7d 0a 09 72 65 __ $fname..}..re
3470: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
3480: 70 72 6f 63 20 41 70 70 6c 79 20 7b 62 61 73 65 proc Apply {base
3490: 20 64 65 6c 74 61 7d 20 7b 0a 09 23 20 62 61 73 delta} {..# bas
34a0: 65 20 20 3d 20 62 61 73 65 20 74 65 78 74 2e 0a e = base text..
34b0: 09 23 20 64 65 6c 74 61 20 3d 20 64 65 6c 74 61 .# delta = delta
34c0: 20 69 6e 20 72 63 73 20 66 6f 72 6d 61 74 2e 0a in rcs format..
34d0: 09 23 0a 09 23 20 42 6f 74 68 20 73 74 72 69 6e .#..# Both strin
34e0: 67 73 20 61 72 65 20 75 6e 65 6e 63 6f 64 65 64 gs are unencoded
34f0: 2c 20 69 2e 65 2e 20 74 68 69 6e 67 73 20 6c 69 , i.e. things li
3500: 6b 65 20 40 40 2c 20 65 74 63 2e 20 68 61 76 65 ke @@, etc. have
3510: 0a 09 23 20 61 6c 72 65 61 64 79 20 62 65 65 6e ..# already been
3520: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 74 replaced with t
3530: 68 65 69 72 20 70 72 6f 70 65 72 20 63 68 61 72 heir proper char
3540: 61 63 74 65 72 73 2e 0a 09 23 0a 09 23 20 52 65 acters...#..# Re
3550: 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 turn value is th
3560: 65 20 70 61 74 63 68 65 64 20 74 65 78 74 2e 0a e patched text..
3570: 0a 09 73 65 74 20 62 61 73 65 20 5b 73 70 6c 69 ..set base [spli
3580: 74 20 24 62 61 73 65 20 5c 6e 5d 0a 09 73 65 74 t $base \n]..set
3590: 20 62 6c 65 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 blen [llength $
35a0: 62 61 73 65 5d 0a 09 73 65 74 20 6f 6f 66 66 20 base]..set ooff
35b0: 30 0a 09 73 65 74 20 72 65 73 20 22 22 0a 0a 09 0..set res ""...
35c0: 73 65 74 20 6c 69 6e 65 73 20 20 5b 73 70 6c 69 set lines [spli
35d0: 74 20 24 64 65 6c 74 61 20 5c 6e 5d 0a 09 73 65 t $delta \n]..se
35e0: 74 20 6e 6c 69 6e 65 73 20 5b 6c 6c 65 6e 67 74 t nlines [llengt
35f0: 68 20 24 6c 69 6e 65 73 5d 0a 0a 09 66 6f 72 20 h $lines]...for
3600: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 {set i 0} {$i <
3610: 24 6e 6c 69 6e 65 73 7d 20 7b 7d 20 7b 0a 09 20 $nlines} {} {..
3620: 20 20 20 69 66 20 7b 21 5b 72 65 67 65 78 70 20 if {![regexp
3630: 7b 5e 28 5b 61 64 5d 29 28 5c 64 2b 29 5c 73 28 {^([ad])(\d+)\s(
3640: 5c 64 2b 29 24 7d 20 5b 6c 69 6e 64 65 78 20 24 \d+)$} [lindex $
3650: 6c 69 6e 65 73 20 24 69 5d 20 2d 3e 20 63 6d 64 lines $i] -> cmd
3660: 20 73 6c 20 63 6e 5d 7d 20 7b 0a 09 09 74 72 6f sl cn]} {...tro
3670: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 42 uble internal "B
3680: 61 64 20 65 64 20 63 6f 6d 6d 61 6e 64 20 27 5b ad ed command '[
3690: 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69 lindex $lines $i
36a0: 5d 27 22 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 ]'".. }...
36b0: 20 69 6e 63 72 20 69 0a 09 20 20 20 20 73 65 74 incr i.. set
36c0: 20 65 6c 20 5b 65 78 70 72 20 7b 24 73 6c 20 2b el [expr {$sl +
36d0: 20 24 63 6e 7d 5d 0a 0a 09 20 20 20 20 73 77 69 $cn}]... swi
36e0: 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 63 tch -exact -- $c
36f0: 6d 64 20 7b 0a 09 09 64 20 7b 0a 09 09 20 20 20 md {...d {...
3700: 20 69 6e 63 72 20 73 6c 20 2d 31 0a 09 09 20 20 incr sl -1...
3710: 20 20 69 6e 63 72 20 65 6c 20 2d 31 0a 09 09 20 incr el -1...
3720: 20 20 20 69 66 20 7b 24 73 6c 20 3c 20 24 6f 6f if {$sl < $oo
3730: 66 66 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e ff} { trouble in
3740: 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e ternal {Deletion
3750: 20 62 65 66 6f 72 65 20 6c 61 73 74 20 65 64 69 before last edi
3760: 74 7d 20 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 t} }... if {$
3770: 73 6c 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 sl > $blen} { tr
3780: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b ouble internal {
3790: 44 65 6c 65 74 69 6f 6e 20 70 61 73 74 20 66 69 Deletion past fi
37a0: 6c 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20 20 20 le end} }...
37b0: 69 66 20 7b 24 65 6c 20 3e 20 24 62 6c 65 6e 7d if {$el > $blen}
37c0: 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 { trouble inter
37d0: 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e 20 62 65 nal {Deletion be
37e0: 79 6f 6e 64 20 66 69 6c 65 20 65 6e 64 7d 20 7d yond file end} }
37f0: 0a 09 09 20 20 20 20 66 6f 72 65 61 63 68 20 78 ... foreach x
3800: 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65 20 24 [lrange $base $
3810: 6f 6f 66 66 20 24 73 6c 5d 20 7b 20 6c 61 70 70 ooff $sl] { lapp
3820: 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 09 20 end res $x }...
3830: 20 20 20 73 65 74 20 20 6f 6f 66 66 20 24 65 6c set ooff $el
3840: 0a 09 09 7d 0a 09 09 61 20 7b 0a 09 09 20 20 20 ...}...a {...
3850: 20 69 66 20 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 if {$sl < $ooff
3860: 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 } { trouble inte
3870: 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20 62 65 66 rnal {Insert bef
3880: 6f 72 65 20 6c 61 73 74 20 65 64 69 74 7d 20 7d ore last edit} }
3890: 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c 20 3e ... if {$sl >
38a0: 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c $blen} { troubl
38b0: 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49 6e 73 65 e internal {Inse
38c0: 72 74 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64 rt past file end
38d0: 7d 20 7d 0a 0a 09 09 20 20 20 20 66 6f 72 65 61 } }.... forea
38e0: 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 62 61 ch x [lrange $ba
38f0: 73 65 20 24 6f 6f 66 66 20 24 73 6c 5d 20 20 20 se $ooff $sl]
3900: 20 20 20 20 20 20 20 20 20 20 7b 20 6c 61 70 70 { lapp
3910: 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 09 20 end res $x }...
3920: 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 foreach x [lr
3930: 61 6e 67 65 20 24 6c 69 6e 65 73 20 24 69 20 5b ange $lines $i [
3940: 65 78 70 72 20 7b 24 69 20 2b 20 24 63 6e 7d 5d expr {$i + $cn}]
3950: 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20 ] { lappend res
3960: 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74 20 6f $x }... set o
3970: 6f 66 66 20 24 73 6c 0a 09 09 20 20 20 20 69 6e off $sl... in
3980: 63 72 20 69 20 24 63 6e 0a 09 09 7d 0a 09 20 20 cr i $cn...}..
3990: 20 20 7d 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 }..}..foreach
39a0: 78 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65 20 x [lrange $base
39b0: 24 6f 6f 66 66 20 65 6e 64 5d 20 7b 20 6c 61 70 $ooff end] { lap
39c0: 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 72 pend res $x }..r
39d0: 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 24 72 65 73 eturn [join $res
39e0: 20 5c 6e 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 \n]. }..
39f0: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 32 20 7b method Expand2 {
3a00: 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a 09 73 graph node} {..s
3a10: 65 74 20 72 65 76 6e 72 20 5b 24 67 72 61 70 68 et revnr [$graph
3a20: 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20 node get $node
3a30: 72 65 76 6e 72 5d 0a 0a 09 23 20 46 69 72 73 74 revnr]...# First
3a40: 20 69 6d 70 6f 72 74 20 74 68 65 20 66 69 6c 65 import the file
3a50: 2e 0a 09 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70 ...lappend myimp
3a60: 6f 72 74 20 5b 6c 69 73 74 20 41 20 72 24 72 65 ort [list A r$re
3a70: 76 6e 72 20 7b 7d 5d 0a 0a 09 69 66 20 7b 5b 24 vnr {}]...if {[$
3a80: 67 72 61 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 graph node keyex
3a90: 69 73 74 73 20 24 6e 6f 64 65 20 5f 5f 62 61 73 ists $node __bas
3aa0: 65 5f 5f 5d 7d 20 7b 0a 09 20 20 20 20 23 20 44 e__]} {.. # D
3ab0: 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 73 elta node. __bas
3ac0: 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65 20 e__ is the name
3ad0: 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 of the file cont
3ae0: 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74 68 aining.. # th
3af0: 65 20 62 61 73 65 6c 69 6e 65 2e 20 47 65 6e 65 e baseline. Gene
3b00: 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e rate instruction
3b10: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 64 65 6c to make the del
3b20: 74 61 20 61 73 0a 09 20 20 20 20 23 20 77 65 6c ta as.. # wel
3b30: 6c 2e 0a 0a 09 20 20 20 20 73 65 74 20 66 62 61 l.... set fba
3b40: 73 65 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 se [$graph node
3b50: 67 65 74 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 get $node __base
3b60: 5f 5f 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 __].. lappend
3b70: 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 73 74 20 myimport [list
3b80: 44 20 72 24 72 65 76 6e 72 20 72 24 66 62 61 73 D r$revnr r$fbas
3b90: 65 5d 0a 09 7d 0a 0a 09 23 20 50 6f 73 74 20 74 e]..}...# Post t
3ba0: 6f 20 61 6c 6c 20 73 75 63 63 65 73 73 6f 72 73 o all successors
3bb0: 20 74 68 61 74 20 74 68 65 20 6a 75 73 74 20 67 that the just g
3bc0: 65 6e 65 72 61 74 65 64 20 66 69 6c 65 20 69 73 enerated file is
3bd0: 20 74 68 65 69 72 0a 09 23 20 62 61 73 65 6c 69 their..# baseli
3be0: 6e 65 2e 20 45 78 63 65 70 74 69 6f 6e 3a 20 54 ne. Exception: T
3bf0: 68 6f 73 65 20 77 68 69 63 68 20 61 76 65 20 61 hose which ave a
3c00: 6c 72 65 61 64 79 20 61 20 62 61 73 65 6c 69 6e lready a baselin
3c10: 65 20 73 65 74 2e 0a 09 23 20 54 6f 67 65 74 68 e set...# Togeth
3c20: 65 72 20 77 69 74 68 20 74 68 65 20 73 6f 72 74 er with the sort
3c30: 69 6e 67 20 6f 66 20 74 72 75 6e 6b 20 72 65 76 ing of trunk rev
3c40: 69 73 69 6f 6e 73 20 66 69 72 73 74 20 74 68 65 isions first the
3c50: 20 74 72 75 6e 6b 0a 09 23 20 73 68 6f 75 6c 64 trunk..# should
3c60: 20 6f 6e 65 20 75 6e 69 6e 74 65 72 75 70 74 65 one uninterupte
3c70: 64 20 6c 69 6e 65 2c 20 77 69 74 68 20 62 72 61 d line, with bra
3c80: 6e 63 68 20 72 6f 6f 74 73 20 5f 6e 6f 74 5f 20 nch roots _not_
3c90: 64 65 6c 74 61 0a 09 23 20 63 6f 6d 70 72 65 73 delta..# compres
3ca0: 73 65 64 20 70 65 72 20 74 68 65 69 72 20 62 72 sed per their br
3cb0: 61 6e 63 68 65 73 2e 0a 0a 09 66 6f 72 65 61 63 anches....foreac
3cc0: 68 20 6f 75 74 20 5b 24 67 72 61 70 68 20 6e 6f h out [$graph no
3cd0: 64 65 73 20 2d 6f 75 74 20 24 6e 6f 64 65 5d 20 des -out $node]
3ce0: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 67 72 61 {.. if {[$gra
3cf0: 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 69 73 74 ph node keyexist
3d00: 73 20 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 5d s $out __base__]
3d10: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 } continue..
3d20: 24 67 72 61 70 68 20 6e 6f 64 65 20 73 65 74 20 $graph node set
3d30: 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 20 24 72 $out __base__ $r
3d40: 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a evnr..}..return.
3d50: 20 20 20 20 7d 0a 0a 20 20 20 20 76 61 72 69 61 }.. varia
3d60: 62 6c 65 20 6d 79 69 6d 70 6f 72 74 0a 0a 20 20 ble myimport..
3d70: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
3d80: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
3d90: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
3da0: 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69 State.. vari
3db0: 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20 20 20 able myid
3dc0: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 46 69 {} ; # Fi
3dd0: 6c 65 20 69 64 20 69 6e 20 74 68 65 20 70 65 72 le id in the per
3de0: 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a 20 sistent state..
3df0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 61 variable mypa
3e00: 74 68 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d th {}
3e10: 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68 65 ; # Path of the
3e20: 20 66 69 6c 65 27 73 20 72 63 73 20 61 72 63 68 file's rcs arch
3e30: 69 76 65 2e 0a 20 20 20 20 76 61 72 69 61 62 6c ive.. variabl
3e40: 65 20 6d 79 75 73 72 70 61 74 68 20 20 20 20 20 e myusrpath
3e50: 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 68 20 {} ; # Path
3e60: 6f 66 20 74 68 65 20 66 69 6c 65 20 61 73 20 73 of the file as s
3e70: 65 65 6e 20 62 79 20 75 73 65 72 73 2e 0a 20 20 een by users..
3e80: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 65 78 65 variable myexe
3e90: 63 75 74 61 62 6c 65 20 20 20 20 20 20 30 20 20 cutable 0
3ea0: 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 ; # Boolean flag
3eb0: 20 27 66 69 6c 65 20 65 78 65 63 75 74 61 62 6c 'file executabl
3ec0: 65 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 e'.. variable
3ed0: 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20 20 20 myproject
3ee0: 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 {} ; # Refere
3ef0: 6e 63 65 20 74 6f 20 74 68 65 20 70 72 6f 6a 65 nce to the proje
3f00: 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 20 ct object.....
3f10: 20 20 23 20 74 68 65 20 66 69 6c 65 20 62 65 6c # the file bel
3f20: 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76 61 72 ongs to.. var
3f30: 69 61 62 6c 65 20 6d 79 72 65 76 20 2d 61 72 72 iable myrev -arr
3f40: 61 79 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 4d ay {} ; # M
3f50: 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d aps revision num
3f60: 62 65 72 20 74 6f 20 74 68 65 0a 09 09 09 09 20 ber to the.....
3f70: 20 20 20 23 20 61 73 73 6f 63 69 61 74 65 64 20 # associated
3f80: 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2e revision object.
3f90: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
3fa0: 72 65 76 69 73 69 6f 6e 73 20 20 20 20 20 20 20 revisions
3fb0: 7b 7d 20 3b 20 23 20 53 61 6d 65 20 61 73 20 6d {} ; # Same as m
3fc0: 79 72 65 76 2c 20 62 75 74 20 61 20 6c 69 73 74 yrev, but a list
3fd0: 2c 0a 09 09 09 09 20 20 20 20 23 20 67 69 76 69 ,..... # givi
3fe0: 6e 67 20 75 73 20 74 68 65 20 6f 72 64 65 72 20 ng us the order
3ff0: 6f 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 of..... # rev
4000: 69 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61 72 69 isions.. vari
4010: 61 62 6c 65 20 6d 79 61 69 64 20 20 20 20 20 20 able myaid
4020: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 -array {} ; # Ma
4030: 70 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 p revision numbe
4040: 72 73 20 74 6f 20 74 68 65 20 69 64 0a 09 09 09 rs to the id....
4050: 09 20 20 20 20 23 20 6f 66 20 74 68 65 20 61 75 . # of the au
4060: 74 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69 74 74 thor who committ
4070: 65 64 0a 09 09 09 09 20 20 20 20 23 20 69 74 2e ed..... # it.
4080: 20 54 68 69 73 20 69 73 20 6c 61 74 65 72 20 61 This is later a
4090: 67 67 72 65 67 61 74 65 64 0a 09 09 09 09 20 20 ggregated.....
40a0: 20 20 23 20 77 69 74 68 20 63 6f 6d 6d 69 74 20 # with commit
40b0: 6d 65 73 73 61 67 65 2c 20 62 72 61 6e 63 68 20 message, branch
40c0: 6e 61 6d 65 0a 09 09 09 09 20 20 20 20 23 20 61 name..... # a
40d0: 6e 64 20 70 72 6f 6a 65 63 74 20 69 64 20 66 6f nd project id fo
40e0: 72 20 61 20 6d 65 74 61 20 69 64 2e 0a 20 20 20 r a meta id..
40f0: 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65 61 64 variable myhead
4100: 72 65 76 6e 72 20 20 20 20 20 20 20 7b 7d 20 3b revnr {} ;
4110: 20 23 20 48 65 61 64 20 72 65 76 69 73 69 6f 6e # Head revision
4120: 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 (revision numbe
4130: 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 r). variable
4140: 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20 20 20 myprincipal
4150: 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63 69 70 {} ; # Princip
4160: 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61 6e 63 al branch (branc
4170: 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09 09 20 h number)......
4180: 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20 74 6f # Contrary to
4190: 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73 20 69 the name this i
41a0: 73 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 20 s the..... #
41b0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a default branch..
41c0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 variable myd
41d0: 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20 20 7b ependencies {
41e0: 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61 72 79 } ; # Dictionary
41f0: 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 parent -> child
4200: 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65 63 6f ,..... # reco
4210: 72 64 73 20 70 72 69 6d 61 72 79 20 64 65 70 65 rds primary depe
4220: 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20 76 61 ndencies.. va
4230: 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74 65 riable myimporte
4240: 64 20 20 20 20 20 20 20 20 30 20 20 3b 20 23 20 d 0 ; #
4250: 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 53 65 Boolean flag. Se
4260: 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 t if and only if
4270: 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 20 31 ..... # rev 1
4280: 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65 20 73 .1 of the file s
4290: 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20 20 20 eemingly.....
42a0: 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65 64 20 # was imported
42b0: 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64 65 64 instead of added
42c0: 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72 6d 61 ..... # norma
42d0: 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61 62 6c lly.. variabl
42e0: 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20 20 20 e myroot
42f0: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 {} ; # Refer
4300: 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65 76 69 ence to the revi
4310: 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09 09 09 sion object.....
4320: 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20 74 68 # holding th
4330: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e e root revision.
4340: 20 20 49 74 73 0a 09 09 09 09 20 20 20 20 23 20 Its..... #
4350: 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79 20 69 number usually i
4360: 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62 65 0a s '1.1'. Can be.
4370: 09 09 09 09 20 20 20 20 23 20 61 20 64 69 66 66 .... # a diff
4380: 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 62 65 erent number, be
4390: 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20 20 20 cause of.....
43a0: 20 23 20 67 61 70 73 20 63 72 65 61 74 65 64 20 # gaps created
43b0: 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20 2d 6f via 'cvsadmin -o
43c0: 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 '.. variable
43d0: 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72 72 61 mybranches -arra
43e0: 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 62 72 y {} ; # Maps br
43f0: 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f 20 74 anch number to t
4400: 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09 20 20 he symbol.....
4410: 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c # object handl
4420: 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 2e 0a ing the branch..
4430: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 variable myt
4440: 61 67 73 20 20 20 20 20 2d 61 72 72 61 79 20 7b ags -array {
4450: 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 73 } ; # Maps revis
4460: 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 ion number to th
4470: 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20 20 23 e list..... #
4480: 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a 65 63 of symbol objec
4490: 74 73 20 66 6f 72 20 74 68 65 20 74 61 67 73 0a ts for the tags.
44a0: 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63 69 .... # associ
44b0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 72 65 ated with the re
44c0: 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69 vision.. vari
44d0: 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73 20 20 able mysymbols
44e0: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 65 {} ; # Se
44f0: 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 t of the symbol
4500: 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e 0a 09 names found in..
4510: 09 09 09 20 20 20 20 23 20 74 68 69 73 20 66 69 ... # this fi
4520: 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c le... variabl
4530: 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20 30 20 e mybranchcnt 0
4540: 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 ; # Counter for
4550: 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72 65 63 branches, to rec
4560: 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20 20 20 ord their....
4570: 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64 65 66 # order of def
4580: 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20 61 6c inition. This al
4590: 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09 20 20 so defines....
45a0: 20 20 20 23 20 74 68 65 69 72 20 6f 72 64 65 72 # their order
45b0: 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20 77 68 of creation, wh
45c0: 69 63 68 20 69 73 20 74 68 65 0a 09 09 09 20 20 ich is the....
45d0: 20 20 20 23 20 72 65 76 65 72 73 65 20 6f 66 20 # reverse of
45e0: 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 2e 65 definition. I.e
45f0: 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09 09 20 . a smaller....
4600: 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d 65 61 # number mea
4610: 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61 72 6c ns 'Defined earl
4620: 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09 09 20 ier', means....
4630: 20 20 20 20 23 20 27 43 72 65 61 74 65 64 20 6c # 'Created l
4640: 61 74 65 72 27 2e 0a 0a 20 20 20 20 76 61 72 69 ater'... vari
4650: 61 62 6c 65 20 6d 79 74 72 75 6e 6b 20 7b 7d 20 able mytrunk {}
4660: 3b 20 23 20 44 69 72 65 63 74 20 72 65 66 65 72 ; # Direct refer
4670: 65 6e 63 65 20 74 6f 20 6d 79 70 72 6f 6a 65 63 ence to myprojec
4680: 74 20 2d 3e 20 74 72 75 6e 6b 2e 0a 20 20 20 20 t -> trunk..
4690: 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74 73 variable myroots
46a0: 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 {} ; # List of
46b0: 72 6f 6f 74 73 20 69 6e 20 74 68 65 20 66 6f 72 roots in the for
46c0: 65 73 74 20 6f 66 0a 09 09 09 20 20 23 20 6c 6f est of.... # lo
46d0: 64 27 73 2e 20 4f 62 6a 65 63 74 20 72 65 66 65 d's. Object refe
46e0: 72 65 6e 63 65 73 20 74 6f 20 72 65 76 69 73 69 rences to revisi
46f0: 6f 6e 73 20 61 6e 64 0a 09 09 09 20 20 23 20 62 ons and.... # b
4700: 72 61 6e 63 68 65 73 2e 20 54 68 65 20 6c 61 74 ranches. The lat
4710: 74 65 72 20 63 61 6e 20 61 70 70 65 61 72 20 77 ter can appear w
4720: 68 65 6e 20 74 68 65 79 0a 09 09 09 20 20 23 20 hen they.... #
4730: 61 72 65 20 73 65 76 65 72 65 64 20 66 72 6f 6d are severed from
4740: 20 74 68 65 69 72 20 70 61 72 65 6e 74 2e 0a 0a their parent...
4750: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
4760: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
4770: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 ###########.
4780: 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 ## Internal meth
4790: 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 ods.. method
47a0: 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d RecordBranchComm
47b0: 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b its {branches} {
47c0: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 ..foreach branch
47d0: 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65 73 20 revnr $branches
47e0: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61 74 63 {.. if {[catc
47f0: 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68 h {...set branch
4800: 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e [$self Rev2Bran
4810: 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d ch $branchrevnr]
4820: 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 73 65 .. }]} {...se
4830: 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 t branch [$self
4840: 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e AddUnlabeledBran
4850: 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63 68 6e ch [rev 2branchn
4860: 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 5d r $branchrevnr]]
4870: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 .. }... #
4880: 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d 6d 69 Record the commi
4890: 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76 69 73 t, just as revis
48a0: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 0a 09 ion number for..
48b0: 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f 63 65 # now. Proce
48c0: 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 sBranchDependenc
48d0: 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e 64 20 ies will extend
48e0: 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20 20 20 that ito a..
48f0: 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63 74 20 # proper object
4900: 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20 20 20 reference....
4910: 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c $branch setchil
4920: 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68 72 65 drevnr $branchre
4930: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 vnr..}..return.
4940: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
4950: 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72 65 76 Rev2Branch {rev
4960: 6e 72 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 6e nr} {. in
4970: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
4980: 21 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 ![rev istrunkrev
4990: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 45 78 70 nr $revnr]} {Exp
49a0: 65 63 74 65 64 20 61 20 62 72 61 6e 63 68 20 72 ected a branch r
49b0: 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 7d 0a evision number}.
49c0: 09 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 .return $mybranc
49d0: 68 65 73 28 5b 72 65 76 20 32 62 72 61 6e 63 68 hes([rev 2branch
49e0: 6e 72 20 24 72 65 76 6e 72 5d 29 0a 20 20 20 20 nr $revnr]).
49f0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 }.. method Ad
4a00: 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63 68 dUnlabeledBranch
4a10: 20 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 72 {branchnr} {..r
4a20: 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 41 64 64 eturn [$self Add
4a30: 42 72 61 6e 63 68 20 75 6e 6c 61 62 65 6c 65 64 Branch unlabeled
4a40: 2d 24 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e -$branchnr $bran
4a50: 63 68 6e 72 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 chnr]. }..
4a60: 20 6d 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63 method AddBranc
4a70: 68 20 7b 6e 61 6d 65 20 62 72 61 6e 63 68 6e 72 h {name branchnr
4a80: 7d 20 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 } {..if {[info e
4a90: 78 69 73 74 73 20 6d 79 62 72 61 6e 63 68 65 73 xists mybranches
4aa0: 28 24 62 72 61 6e 63 68 6e 72 29 5d 7d 20 7b 0a ($branchnr)]} {.
4ab0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 . log write 1
4ac0: 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 file "In '$mypa
4ad0: 74 68 27 3a 20 42 72 61 6e 63 68 20 27 24 62 72 th': Branch '$br
4ae0: 61 6e 63 68 6e 72 27 20 6e 61 6d 65 64 20 27 5b anchnr' named '[
4af0: 24 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 $mybranches($bra
4b00: 6e 63 68 6e 72 29 20 6e 61 6d 65 5d 27 22 0a 09 nchnr) name]'"..
4b10: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 log write 1
4b20: 66 69 6c 65 20 22 43 61 6e 6e 6f 74 20 68 61 76 file "Cannot hav
4b30: 65 20 73 65 63 6f 6e 64 20 6e 61 6d 65 20 27 24 e second name '$
4b40: 6e 61 6d 65 27 2c 20 69 67 6e 6f 72 69 6e 67 20 name', ignoring
4b50: 69 74 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a it".. return.
4b60: 09 7d 0a 09 73 65 74 20 62 72 61 6e 63 68 20 5b .}..set branch [
4b70: 73 79 6d 20 25 41 55 54 4f 25 20 62 72 61 6e 63 sym %AUTO% branc
4b80: 68 20 24 62 72 61 6e 63 68 6e 72 20 5b 24 6d 79 h $branchnr [$my
4b90: 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f project getsymbo
4ba0: 6c 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a l $name] $self].
4bb0: 09 24 62 72 61 6e 63 68 20 73 65 74 70 6f 73 69 .$branch setposi
4bc0: 74 69 6f 6e 20 5b 69 6e 63 72 20 6d 79 62 72 61 tion [incr mybra
4bd0: 6e 63 68 63 6e 74 5d 0a 09 73 65 74 20 6d 79 62 nchcnt]..set myb
4be0: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e ranches($branchn
4bf0: 72 29 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75 r) $branch..retu
4c00: 72 6e 20 24 62 72 61 6e 63 68 0a 20 20 20 20 7d rn $branch. }
4c10: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 .. method Add
4c20: 54 61 67 20 7b 6e 61 6d 65 20 72 65 76 6e 72 7d Tag {name revnr}
4c30: 20 7b 0a 09 73 65 74 20 74 61 67 20 5b 73 79 6d {..set tag [sym
4c40: 20 25 41 55 54 4f 25 20 74 61 67 20 24 72 65 76 %AUTO% tag $rev
4c50: 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 nr [$myproject g
4c60: 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20 etsymbol $name]
4c70: 24 73 65 6c 66 5d 0a 09 6c 61 70 70 65 6e 64 20 $self]..lappend
4c80: 6d 79 74 61 67 73 28 24 72 65 76 6e 72 29 20 24 mytags($revnr) $
4c90: 74 61 67 0a 09 72 65 74 75 72 6e 20 24 74 61 67 tag..return $tag
4ca0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
4cb0: 6f 64 20 52 65 63 6f 72 64 42 61 73 69 63 44 65 od RecordBasicDe
4cc0: 70 65 6e 64 65 6e 63 69 65 73 20 7b 72 65 76 6e pendencies {revn
4cd0: 72 20 6e 65 78 74 7d 20 7b 0a 09 23 20 48 61 6e r next} {..# Han
4ce0: 64 6c 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e dle the revision
4cf0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 52 dependencies. R
4d00: 65 63 6f 72 64 20 74 68 65 6d 20 66 6f 72 20 6e ecord them for n
4d10: 6f 77 2c 20 64 6f 0a 09 23 20 6e 6f 74 68 69 6e ow, do..# nothin
4d20: 67 20 77 69 74 68 20 74 68 65 6d 20 79 65 74 2e g with them yet.
4d30: 0a 0a 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e ...# On the trun
4d40: 6b 20 74 68 65 20 27 6e 65 78 74 27 20 66 69 65 k the 'next' fie
4d50: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 ld points to the
4d60: 20 70 72 65 76 69 6f 75 73 0a 09 23 20 72 65 76 previous..# rev
4d70: 69 73 69 6f 6e 2c 20 69 2e 65 2e 20 74 68 65 20 ision, i.e. the
4d80: 5f 70 61 72 65 6e 74 5f 20 6f 66 20 74 68 65 20 _parent_ of the
4d90: 63 75 72 72 65 6e 74 20 6f 6e 65 2e 20 45 78 61 current one. Exa
4da0: 6d 70 6c 65 3a 0a 09 23 20 31 2e 36 27 73 20 6e mple:..# 1.6's n
4db0: 65 78 74 20 69 73 20 31 2e 35 20 28 6d 6f 64 75 ext is 1.5 (modu
4dc0: 6c 6f 20 63 76 73 20 61 64 6d 69 6e 20 2d 6f 29 lo cvs admin -o)
4dd0: 2e 0a 0a 09 23 20 43 6f 6e 74 72 61 72 69 6c 79 ....# Contrarily
4de0: 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 74 68 65 on a branch the
4df0: 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 'next' field po
4e00: 69 6e 74 73 20 74 6f 20 74 68 65 0a 09 23 20 70 ints to the..# p
4e10: 72 69 6d 61 72 79 20 5f 63 68 69 6c 64 5f 20 6f rimary _child_ o
4e20: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 f the current re
4e30: 76 69 73 69 6f 6e 2e 20 41 73 20 65 78 61 6d 70 vision. As examp
4e40: 6c 65 2c 0a 09 23 20 31 2e 31 2e 33 2e 32 27 73 le,..# 1.1.3.2's
4e50: 20 27 6e 65 78 74 27 20 77 69 6c 6c 20 62 65 20 'next' will be
4e60: 31 2e 31 2e 33 2e 33 2e 0a 0a 09 23 20 54 68 65 1.1.3.3....# The
4e70: 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20 61 63 'next' field ac
4e80: 74 75 61 6c 6c 79 20 61 6c 77 61 79 73 20 72 65 tually always re
4e90: 66 65 72 73 20 74 6f 20 74 68 65 20 72 65 76 69 fers to the revi
4ea0: 73 69 6f 6e 0a 09 23 20 63 6f 6e 74 61 69 6e 69 sion..# containi
4eb0: 6e 67 20 74 68 65 20 64 65 6c 74 61 20 6e 65 65 ng the delta nee
4ec0: 64 65 64 20 74 6f 20 72 65 74 72 69 65 76 65 20 ded to retrieve
4ed0: 74 68 61 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a that revision...
4ee0: 09 23 20 54 68 65 20 64 65 70 65 6e 64 65 6e 63 .# The dependenc
4ef0: 69 65 73 20 6e 65 65 64 65 64 20 68 65 72 65 20 ies needed here
4f00: 61 72 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 are the logical
4f10: 73 74 72 75 63 74 75 72 65 2c 0a 09 23 20 70 61 structure,..# pa
4f20: 72 65 6e 74 2f 63 68 69 6c 64 2c 20 61 6e 64 20 rent/child, and
4f30: 6e 6f 74 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e not the implemen
4f40: 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 tation dependent
4f50: 20 64 65 6c 74 61 0a 09 23 20 70 6f 69 6e 74 65 delta..# pointe
4f60: 72 73 2e 0a 0a 09 69 66 20 7b 24 6e 65 78 74 20 rs....if {$next
4f70: 65 71 20 22 22 7d 20 72 65 74 75 72 6e 0a 09 23 eq ""} return..#
4f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
4f90: 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 parent
4fa0: 20 2d 3e 20 63 68 69 6c 64 0a 09 69 66 20 7b 5b -> child..if {[
4fb0: 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 rev istrunkrevnr
4fc0: 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 $revnr]} {..
4fd0: 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 70 65 6e lappend mydepen
4fe0: 64 65 6e 63 69 65 73 20 24 6e 65 78 74 20 24 72 dencies $next $r
4ff0: 65 76 6e 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 evnr..} else {..
5000: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 lappend myde
5010: 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65 76 6e pendencies $revn
5020: 72 20 24 6e 65 78 74 0a 09 7d 0a 09 72 65 74 75 r $next..}..retu
5030: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
5040: 74 68 6f 64 20 50 72 6f 63 65 73 73 50 72 69 6d thod ProcessPrim
5050: 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65 73 20 aryDependencies
5060: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 70 {} {..foreach {p
5070: 61 72 65 6e 74 72 65 76 6e 72 20 63 68 69 6c 64 arentrevnr child
5080: 72 65 76 6e 72 7d 20 24 6d 79 64 65 70 65 6e 64 revnr} $mydepend
5090: 65 6e 63 69 65 73 20 7b 0a 09 20 20 20 20 73 65 encies {.. se
50a0: 74 20 70 61 72 65 6e 74 20 24 6d 79 72 65 76 28 t parent $myrev(
50b0: 24 70 61 72 65 6e 74 72 65 76 6e 72 29 0a 09 20 $parentrevnr)..
50c0: 20 20 20 73 65 74 20 63 68 69 6c 64 20 20 24 6d set child $m
50d0: 79 72 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 yrev($childrevnr
50e0: 29 0a 09 20 20 20 20 24 70 61 72 65 6e 74 20 73 ).. $parent s
50f0: 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 09 etchild $child..
5100: 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 $child setpa
5110: 72 65 6e 74 20 24 70 61 72 65 6e 74 0a 09 7d 0a rent $parent..}.
5120: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
5130: 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 method Proces
5140: 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 sBranchDependenc
5150: 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 ies {} {..foreac
5160: 68 20 7b 62 72 61 6e 63 68 6e 72 20 62 72 61 6e h {branchnr bran
5170: 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d ch} [array get m
5180: 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 20 20 ybranches] {..
5190: 20 20 73 65 74 20 72 65 76 6e 72 20 5b 24 62 72 set revnr [$br
51a0: 61 6e 63 68 20 70 61 72 65 6e 74 72 65 76 6e 72 anch parentrevnr
51b0: 5d 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e ]... if {![in
51c0: 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 fo exists myrev(
51d0: 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 6c 6f $revnr)]} {...lo
51e0: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 g write 1 file "
51f0: 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 54 68 In '$mypath': Th
5200: 65 20 62 72 61 6e 63 68 20 27 5b 24 62 72 61 6e e branch '[$bran
5210: 63 68 20 6e 61 6d 65 5d 27 20 72 65 66 65 72 65 ch name]' refere
5220: 6e 63 65 73 22 0a 09 09 6c 6f 67 20 77 72 69 74 nces"...log writ
5230: 65 20 31 20 66 69 6c 65 20 22 74 68 65 20 62 6f e 1 file "the bo
5240: 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27 24 72 gus revision '$r
5250: 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c 20 62 evnr' and will b
5260: 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09 24 62 e ignored."...$b
5270: 72 61 6e 63 68 20 64 65 73 74 72 6f 79 0a 09 09 ranch destroy...
5280: 75 6e 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 unset mybranches
5290: 28 24 62 72 61 6e 63 68 6e 72 29 0a 09 20 20 20 ($branchnr)..
52a0: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 } else {...set
52b0: 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 76 6e rev $myrev($revn
52c0: 72 29 0a 09 09 24 72 65 76 20 61 64 64 62 72 61 r)...$rev addbra
52d0: 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09 24 62 nch $branch...$b
52e0: 72 61 6e 63 68 20 73 65 74 70 61 72 65 6e 74 20 ranch setparent
52f0: 24 72 65 76 0a 0a 09 09 23 20 49 66 20 72 65 76 $rev....# If rev
5300: 69 73 69 6f 6e 73 20 77 65 72 65 20 63 6f 6d 6d isions were comm
5310: 69 74 74 65 64 20 6f 6e 20 74 68 65 20 62 72 61 itted on the bra
5320: 6e 63 68 20 77 65 20 73 74 6f 72 65 20 61 0a 09 nch we store a..
5330: 09 23 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 .# reference to
5340: 74 68 65 20 62 72 61 6e 63 68 20 74 68 65 72 65 the branch there
5350: 2c 20 61 6e 64 20 66 75 72 74 68 65 72 20 64 65 , and further de
5360: 63 6c 61 72 65 0a 09 09 23 20 74 68 65 20 66 69 clare...# the fi
5370: 72 73 74 20 63 68 69 6c 64 27 73 20 70 61 72 65 rst child's pare
5380: 6e 74 20 74 6f 20 62 65 20 62 72 61 6e 63 68 27 nt to be branch'
5390: 73 20 70 61 72 65 6e 74 2c 20 61 6e 64 0a 09 09 s parent, and...
53a0: 23 20 6c 69 73 74 20 74 68 69 73 20 63 68 69 6c # list this chil
53b0: 64 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 d in the parent
53c0: 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 09 69 66 20 revision.....if
53d0: 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 63 68 69 {[$branch haschi
53e0: 6c 64 72 65 76 5d 7d 20 7b 0a 09 09 20 20 20 20 ldrev]} {...
53f0: 73 65 74 20 63 68 69 6c 64 72 65 76 6e 72 20 5b set childrevnr [
5400: 24 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 76 $branch childrev
5410: 6e 72 5d 0a 09 09 20 20 20 20 73 65 74 20 63 68 nr]... set ch
5420: 69 6c 64 20 24 6d 79 72 65 76 28 24 63 68 69 6c ild $myrev($chil
5430: 64 72 65 76 6e 72 29 0a 09 09 20 20 20 20 24 62 drevnr)... $b
5440: 72 61 6e 63 68 20 73 65 74 63 68 69 6c 64 20 24 ranch setchild $
5450: 63 68 69 6c 64 0a 0a 09 09 20 20 20 20 24 63 68 child.... $ch
5460: 69 6c 64 20 73 65 74 70 61 72 65 6e 74 62 72 61 ild setparentbra
5470: 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09 20 20 nch $branch...
5480: 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 72 65 $child setpare
5490: 6e 74 20 20 20 20 20 20 20 24 72 65 76 0a 09 09 nt $rev...
54a0: 20 20 20 20 24 72 65 76 20 61 64 64 63 68 69 6c $rev addchil
54b0: 64 6f 6e 62 72 61 6e 63 68 20 24 63 68 69 6c 64 donbranch $child
54c0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 ...}.. }..}..
54d0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
54e0: 20 20 6d 65 74 68 6f 64 20 53 6f 72 74 42 72 61 method SortBra
54f0: 6e 63 68 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 nches {} {..fore
5500: 61 63 68 20 7b 72 65 76 6e 72 20 72 65 76 7d 20 ach {revnr rev}
5510: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 72 65 76 [array get myrev
5520: 5d 20 7b 20 24 72 65 76 20 73 6f 72 74 62 72 61 ] { $rev sortbra
5530: 6e 63 68 65 73 20 7d 0a 09 72 65 74 75 72 6e 0a nches }..return.
5540: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
5550: 64 20 50 72 6f 63 65 73 73 54 61 67 44 65 70 65 d ProcessTagDepe
5560: 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 ndencies {} {..f
5570: 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 74 61 oreach {revnr ta
5580: 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 glist} [array ge
5590: 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 t mytags] {..
55a0: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis
55b0: 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 ts myrev($revnr)
55c0: 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 20 5b 6c 6c ]} {...set n [ll
55d0: 65 6e 67 74 68 20 24 74 61 67 6c 69 73 74 5d 0a ength $taglist].
55e0: 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 ..log write 1 fi
55f0: 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 le "In '$mypath'
5600: 3a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 : The following
5610: 5b 6e 73 70 20 24 6e 20 74 61 67 5d 20 72 65 66 [nsp $n tag] ref
5620: 65 72 65 6e 63 65 22 0a 09 09 6c 6f 67 20 77 72 erence"...log wr
5630: 69 74 65 20 31 20 66 69 6c 65 20 22 74 68 65 20 ite 1 file "the
5640: 62 6f 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27 bogus revision '
5650: 24 72 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c $revnr' and will
5660: 20 62 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09 be ignored."...
5670: 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 foreach tag $tag
5680: 6c 69 73 74 20 7b 0a 09 09 20 20 20 20 6c 6f 67 list {... log
5690: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 20 write 1 file "
56a0: 20 20 20 5b 24 74 61 67 20 6e 61 6d 65 5d 22 0a [$tag name]".
56b0: 09 09 20 20 20 20 24 74 61 67 20 64 65 73 74 72 .. $tag destr
56c0: 6f 79 0a 09 09 7d 0a 09 09 75 6e 73 65 74 20 6d oy...}...unset m
56d0: 79 74 61 67 73 28 24 72 65 76 6e 72 29 0a 09 20 ytags($revnr)..
56e0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 } else {...se
56f0: 74 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 t rev $myrev($re
5700: 76 6e 72 29 0a 09 09 66 6f 72 65 61 63 68 20 74 vnr)...foreach t
5710: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 ag $taglist {...
5720: 20 20 20 20 24 72 65 76 20 61 64 64 74 61 67 20 $rev addtag
5730: 20 20 20 24 74 61 67 0a 09 09 20 20 20 20 24 74 $tag... $t
5740: 61 67 20 73 65 74 74 61 67 72 65 76 20 24 72 65 ag settagrev $re
5750: 76 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a v...}.. }..}.
5760: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
5770: 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d method Determ
5780: 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 73 69 ineTheRootRevisi
5790: 6f 6e 20 7b 7d 20 7b 0a 09 23 20 54 68 65 20 72 on {} {..# The r
57a0: 6f 6f 74 20 69 73 20 74 68 65 20 6f 6e 65 20 72 oot is the one r
57b0: 65 76 69 73 69 6f 6e 20 77 68 69 63 68 20 68 61 evision which ha
57c0: 73 20 6e 6f 20 70 61 72 65 6e 74 2e 20 42 79 0a s no parent. By.
57d0: 09 23 20 63 68 65 63 6b 69 6e 67 20 61 6c 6c 20 .# checking all
57e0: 72 65 76 69 73 69 6f 6e 73 20 77 65 20 65 6e 73 revisions we ens
57f0: 75 72 65 20 74 68 61 74 20 77 65 20 63 61 6e 20 ure that we can
5800: 64 65 74 65 63 74 20 61 6e 64 0a 09 23 20 72 65 detect and..# re
5810: 70 6f 72 74 20 74 68 65 20 63 61 73 65 20 6f 66 port the case of
5820: 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 2e multiple roots.
5830: 20 57 69 74 68 6f 75 74 20 74 68 61 74 20 77 65 Without that we
5840: 20 63 6f 75 6c 64 0a 09 23 20 73 69 6d 70 6c 79 could..# simply
5850: 20 74 61 6b 65 20 6f 6e 65 20 72 65 76 69 73 69 take one revisi
5860: 6f 6e 20 61 6e 64 20 66 6f 6c 6c 6f 77 20 74 68 on and follow th
5870: 65 20 70 61 72 65 6e 74 20 6c 69 6e 6b 73 20 74 e parent links t
5880: 6f 0a 09 23 20 74 68 65 69 72 20 72 6f 6f 74 20 o..# their root
5890: 28 73 69 63 21 29 2e 0a 0a 09 66 6f 72 65 61 63 (sic!)....foreac
58a0: 68 20 7b 72 65 76 6e 72 20 72 65 76 7d 20 5b 61 h {revnr rev} [a
58b0: 72 72 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20 rray get myrev]
58c0: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 65 76 {.. if {[$rev
58d0: 20 68 61 73 70 61 72 65 6e 74 5d 7d 20 63 6f 6e hasparent]} con
58e0: 74 69 6e 75 65 0a 09 20 20 20 20 69 6e 74 65 67 tinue.. integ
58f0: 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 6d 79 rity assert {$my
5900: 72 6f 6f 74 20 65 71 20 22 22 7d 20 7b 4d 75 6c root eq ""} {Mul
5910: 74 69 70 6c 65 20 72 6f 6f 74 20 72 65 76 69 73 tiple root revis
5920: 69 6f 6e 73 20 66 6f 75 6e 64 7d 0a 09 20 20 20 ions found}..
5930: 20 73 65 74 20 6d 79 72 6f 6f 74 20 24 72 65 76 set myroot $rev
5940: 0a 09 7d 0a 0a 09 23 20 49 6e 20 74 68 65 20 66 ..}...# In the f
5950: 75 74 75 72 65 20 77 65 20 61 6c 73 6f 20 6e 65 uture we also ne
5960: 65 64 20 61 20 6c 69 73 74 2c 20 61 73 20 62 72 ed a list, as br
5970: 61 6e 63 68 65 73 20 63 61 6e 20 62 65 63 6f 6d anches can becom
5980: 65 0a 09 23 20 73 65 76 65 72 65 64 20 66 72 6f e..# severed fro
5990: 6d 20 74 68 65 69 72 20 70 61 72 65 6e 74 2c 20 m their parent,
59a0: 6d 61 6b 69 6e 67 20 74 68 65 6d 20 74 68 65 69 making them thei
59b0: 72 20 6f 77 6e 20 72 6f 6f 74 2e 0a 09 73 65 74 r own root...set
59c0: 20 6d 79 72 6f 6f 74 73 20 5b 6c 69 73 74 20 24 myroots [list $
59d0: 6d 79 72 6f 6f 74 5d 0a 09 72 65 74 75 72 6e 0a myroot]..return.
59e0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
59f0: 64 20 44 65 74 65 72 6d 69 6e 65 52 65 76 69 73 d DetermineRevis
5a00: 69 6f 6e 4f 70 65 72 61 74 69 6f 6e 73 20 7b 7d ionOperations {}
5a10: 20 7b 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 {..foreach rev
5a20: 24 6d 79 72 65 76 69 73 69 6f 6e 73 20 7b 20 24 $myrevisions { $
5a30: 72 65 76 20 64 65 74 65 72 6d 69 6e 65 6f 70 65 rev determineope
5a40: 72 61 74 69 6f 6e 20 7d 0a 09 72 65 74 75 72 6e ration }..return
5a50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
5a60: 6f 64 20 44 65 74 65 72 6d 69 6e 65 4c 69 6e 65 od DetermineLine
5a70: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b sOfDevelopment {
5a80: 7d 20 7b 0a 09 23 20 46 6f 72 20 72 65 76 69 73 } {..# For revis
5a90: 69 6f 6e 73 20 74 68 69 73 20 68 61 73 20 62 65 ions this has be
5aa0: 65 6e 20 64 6f 6e 65 20 61 6c 72 65 61 64 79 2c en done already,
5ab0: 20 69 6e 20 27 65 78 74 65 6e 64 27 2e 20 4e 6f in 'extend'. No
5ac0: 77 0a 09 23 20 77 65 20 64 6f 20 74 68 69 73 20 w..# we do this
5ad0: 66 6f 72 20 74 68 65 20 62 72 61 6e 63 68 65 73 for the branches
5ae0: 20 61 6e 64 20 74 61 67 73 2e 0a 0a 09 66 6f 72 and tags....for
5af0: 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 each {_ branch}
5b00: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 [array get mybra
5b10: 6e 63 68 65 73 5d 20 7b 0a 09 20 20 20 20 24 62 nches] {.. $b
5b20: 72 61 6e 63 68 20 73 65 74 6c 6f 64 20 5b 24 73 ranch setlod [$s
5b30: 65 6c 66 20 47 65 74 4c 4f 44 20 5b 24 62 72 61 elf GetLOD [$bra
5b40: 6e 63 68 20 70 61 72 65 6e 74 72 65 76 6e 72 5d nch parentrevnr]
5b50: 5d 0a 09 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b ]..}...foreach {
5b60: 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 _ taglist} [arra
5b70: 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a y get mytags] {.
5b80: 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 . foreach tag
5b90: 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 24 74 $taglist {...$t
5ba0: 61 67 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66 ag setlod [$self
5bb0: 20 47 65 74 4c 4f 44 20 5b 24 74 61 67 20 74 61 GetLOD [$tag ta
5bc0: 67 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a grevnr]].. }.
5bd0: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. }
5be0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 47 65 74 .. method Get
5bf0: 4c 4f 44 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 69 LOD {revnr} {..i
5c00: 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 f {[rev istrunkr
5c10: 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a evnr $revnr]} {.
5c20: 09 20 20 20 20 72 65 74 75 72 6e 20 24 6d 79 74 . return $myt
5c30: 72 75 6e 6b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 runk..} else {..
5c40: 20 20 20 20 72 65 74 75 72 6e 20 5b 24 73 65 6c return [$sel
5c50: 66 20 52 65 76 32 42 72 61 6e 63 68 20 24 72 65 f Rev2Branch $re
5c60: 76 6e 72 5d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 vnr]..}. }..
5c70: 20 20 20 6d 65 74 68 6f 64 20 48 61 6e 64 6c 65 method Handle
5c80: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 NonTrunkDefaultB
5c90: 72 61 6e 63 68 20 7b 7d 20 7b 0a 09 73 65 74 20 ranch {} {..set
5ca0: 72 65 76 6c 69 73 74 20 5b 24 73 65 6c 66 20 4e revlist [$self N
5cb0: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 65 onTrunkDefaultRe
5cc0: 76 69 73 69 6f 6e 73 5d 0a 09 69 66 20 7b 21 5b visions]..if {![
5cd0: 6c 6c 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 llength $revlist
5ce0: 5d 7d 20 72 65 74 75 72 6e 0a 0a 09 24 73 65 6c ]} return...$sel
5cf0: 66 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b f AdjustNonTrunk
5d00: 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 24 72 DefaultBranch $r
5d10: 65 76 6c 69 73 74 0a 09 24 73 65 6c 66 20 43 68 evlist..$self Ch
5d20: 65 63 6b 4c 4f 44 73 0a 09 72 65 74 75 72 6e 0a eckLODs..return.
5d30: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
5d40: 64 20 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c d NonTrunkDefaul
5d50: 74 52 65 76 69 73 69 6f 6e 73 20 7b 7d 20 7b 0a tRevisions {} {.
5d60: 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 .# From cvs2svn
5d70: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 the following ex
5d80: 70 6c 61 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 planation (with
5d90: 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 modifications..#
5da0: 20 66 6f 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 for our algorit
5db0: 68 6d 29 3a 0a 0a 09 23 20 44 65 74 65 72 6d 69 hm):...# Determi
5dc0: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 72 65 ne whether there
5dd0: 20 61 72 65 20 61 6e 79 20 6e 6f 6e 2d 74 72 75 are any non-tru
5de0: 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 nk default branc
5df0: 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a h..# revisions..
5e00: 0a 09 23 20 49 66 20 61 20 6e 6f 6e 2d 74 72 75 ..# If a non-tru
5e10: 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 nk default branc
5e20: 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 h is determined
5e30: 74 6f 20 68 61 76 65 20 65 78 69 73 74 65 64 2c to have existed,
5e40: 0a 09 23 20 72 65 74 75 72 6e 20 61 20 6c 69 73 ..# return a lis
5e50: 74 20 6f 66 20 6f 62 6a 65 63 74 73 20 66 6f 72 t of objects for
5e60: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 74 all revisions t
5e70: 68 61 74 20 77 65 72 65 20 6f 6e 63 65 0a 09 23 hat were once..#
5e80: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau
5e90: 6c 74 20 72 65 76 69 73 69 6f 6e 73 2c 20 69 6e lt revisions, in
5ea0: 20 64 65 70 65 6e 64 65 6e 63 79 20 6f 72 64 65 dependency orde
5eb0: 72 20 28 69 2e 65 2e 20 72 6f 6f 74 0a 09 23 20 r (i.e. root..#
5ec0: 66 69 72 73 74 29 2e 0a 0a 09 23 20 54 68 65 72 first)....# Ther
5ed0: 65 20 61 72 65 20 74 77 6f 20 63 61 73 65 73 20 e are two cases
5ee0: 74 6f 20 68 61 6e 64 6c 65 3a 0a 0a 09 23 20 4f to handle:...# O
5ef0: 6e 65 20 63 61 73 65 20 69 73 20 73 69 6d 70 6c ne case is simpl
5f00: 65 2e 20 20 54 68 65 20 52 43 53 20 66 69 6c 65 e. The RCS file
5f10: 20 6c 69 73 74 73 20 61 20 64 65 66 61 75 6c 74 lists a default
5f20: 20 62 72 61 6e 63 68 0a 09 23 20 65 78 70 6c 69 branch..# expli
5f30: 63 69 74 6c 79 20 69 6e 20 69 74 73 20 68 65 61 citly in its hea
5f40: 64 65 72 2c 20 73 75 63 68 20 61 73 20 27 31 2e der, such as '1.
5f50: 31 2e 31 27 2e 20 20 49 6e 20 74 68 69 73 20 63 1.1'. In this c
5f60: 61 73 65 2c 20 77 65 0a 09 23 20 6b 6e 6f 77 20 ase, we..# know
5f70: 74 68 61 74 20 65 76 65 72 79 20 72 65 76 69 73 that every revis
5f80: 69 6f 6e 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f ion on the vendo
5f90: 72 20 62 72 61 6e 63 68 20 69 73 20 74 6f 20 62 r branch is to b
5fa0: 65 0a 09 23 20 74 72 65 61 74 65 64 20 61 73 20 e..# treated as
5fb0: 68 65 61 64 20 6f 66 20 74 72 75 6e 6b 20 61 74 head of trunk at
5fc0: 20 74 68 61 74 20 70 6f 69 6e 74 20 69 6e 20 74 that point in t
5fd0: 69 6d 65 2e 0a 0a 09 23 20 42 75 74 20 74 68 65 ime....# But the
5fe0: 72 65 27 73 20 61 6c 73 6f 20 61 20 64 65 67 65 re's also a dege
5ff0: 6e 65 72 61 74 65 20 63 61 73 65 2e 20 20 54 68 nerate case. Th
6000: 65 20 52 43 53 20 66 69 6c 65 20 64 6f 65 73 20 e RCS file does
6010: 6e 6f 74 0a 09 23 20 63 75 72 72 65 6e 74 6c 79 not..# currently
6020: 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 have a default
6030: 62 72 61 6e 63 68 2c 20 79 65 74 20 77 65 20 63 branch, yet we c
6040: 61 6e 20 64 65 64 75 63 65 20 74 68 61 74 20 66 an deduce that f
6050: 6f 72 0a 09 23 20 73 6f 6d 65 20 70 65 72 69 6f or..# some perio
6060: 64 20 69 6e 20 74 68 65 20 70 61 73 74 20 69 74 d in the past it
6070: 20 70 72 6f 62 61 62 6c 79 20 2a 64 69 64 2a 20 probably *did*
6080: 68 61 76 65 20 6f 6e 65 2e 20 20 46 6f 72 0a 09 have one. For..
6090: 23 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 # example, the f
60a0: 69 6c 65 20 68 61 73 20 76 65 6e 64 6f 72 20 72 ile has vendor r
60b0: 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 31 evisions 1.1.1.1
60c0: 20 2d 3e 20 31 2e 31 2e 31 2e 39 36 2c 0a 09 23 -> 1.1.1.96,..#
60d0: 20 61 6c 6c 20 6f 66 20 77 68 69 63 68 20 61 72 all of which ar
60e0: 65 20 64 61 74 65 64 20 62 65 66 6f 72 65 20 31 e dated before 1
60f0: 2e 32 2c 20 61 6e 64 20 74 68 65 6e 20 69 74 20 .2, and then it
6100: 68 61 73 20 31 2e 31 2e 31 2e 39 37 0a 09 23 20 has 1.1.1.97..#
6110: 2d 3e 20 31 2e 31 2e 31 2e 31 30 30 20 64 61 74 -> 1.1.1.100 dat
6120: 65 64 20 61 66 74 65 72 20 31 2e 32 2e 20 20 49 ed after 1.2. I
6130: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 65 20 n this case, we
6140: 73 68 6f 75 6c 64 0a 09 23 20 72 65 63 6f 72 64 should..# record
6150: 20 31 2e 31 2e 31 2e 39 36 20 61 73 20 74 68 65 1.1.1.96 as the
6160: 20 6c 61 73 74 20 76 65 6e 64 6f 72 20 72 65 76 last vendor rev
6170: 69 73 69 6f 6e 20 74 6f 20 68 61 76 65 20 62 65 ision to have be
6180: 65 6e 20 74 68 65 0a 09 23 20 68 65 61 64 20 6f en the..# head o
6190: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 f the default br
61a0: 61 6e 63 68 2e 0a 0a 09 69 66 20 7b 24 6d 79 70 anch....if {$myp
61b0: 72 69 6e 63 69 70 61 6c 20 6e 65 20 22 22 7d 20 rincipal ne ""}
61c0: 7b 0a 09 20 20 20 20 23 20 54 68 65 72 65 20 69 {.. # There i
61d0: 73 20 73 74 69 6c 6c 20 61 20 64 65 66 61 75 6c s still a defaul
61e0: 74 20 62 72 61 6e 63 68 3b 20 74 68 61 74 20 6d t branch; that m
61f0: 65 61 6e 73 20 74 68 61 74 20 61 6c 6c 0a 09 20 eans that all..
6200: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 20 6f # revisions o
6210: 6e 20 74 68 61 74 20 62 72 61 6e 63 68 20 67 65 n that branch ge
6220: 74 20 6d 61 72 6b 65 64 2e 0a 0a 09 20 20 20 20 t marked....
6230: 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69 6c 65 log write 5 file
6240: 20 22 46 6f 75 6e 64 20 65 78 70 6c 69 63 69 74 "Found explicit
6250: 6c 79 20 6d 61 72 6b 65 64 20 4e 54 44 42 22 0a ly marked NTDB".
6260: 0a 09 20 20 20 20 73 65 74 20 72 6e 65 78 74 20 .. set rnext
6270: 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a [$myroot child].
6280: 09 20 20 20 20 69 66 20 7b 24 72 6e 65 78 74 20 . if {$rnext
6290: 6e 65 20 22 22 7d 20 7b 0a 09 09 74 72 6f 75 62 ne ""} {...troub
62a0: 6c 65 20 66 61 74 61 6c 20 22 46 69 6c 65 20 77 le fatal "File w
62b0: 69 74 68 20 64 65 66 61 75 6c 74 20 62 72 61 6e ith default bran
62c0: 63 68 20 24 6d 79 70 72 69 6e 63 69 70 61 6c 20 ch $myprincipal
62d0: 61 6c 73 6f 20 68 61 73 20 72 65 76 69 73 69 6f also has revisio
62e0: 6e 20 5b 24 72 6e 65 78 74 20 72 65 76 6e 72 5d n [$rnext revnr]
62f0: 22 0a 09 09 72 65 74 75 72 6e 0a 09 20 20 20 20 "...return..
6300: 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 20 }... set rev
6310: 5b 24 6d 79 62 72 61 6e 63 68 65 73 28 24 6d 79 [$mybranches($my
6320: 70 72 69 6e 63 69 70 61 6c 29 20 63 68 69 6c 64 principal) child
6330: 5d 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 7b ].. set res {
6340: 7d 0a 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 }... while {$
6350: 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c rev ne ""} {...l
6360: 61 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a append res $rev.
6370: 09 09 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 ..set rev [$rev
6380: 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 0a 09 child].. }...
6390: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a return $res.
63a0: 0a 09 7d 20 65 6c 73 65 69 66 20 7b 24 6d 79 69 ..} elseif {$myi
63b0: 6d 70 6f 72 74 65 64 7d 20 7b 0a 09 20 20 20 20 mported} {..
63c0: 23 20 4e 6f 20 64 65 66 61 75 6c 74 20 62 72 61 # No default bra
63d0: 6e 63 68 2c 20 62 75 74 20 74 68 65 20 66 69 6c nch, but the fil
63e0: 65 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 e appears to hav
63f0: 65 20 62 65 65 6e 0a 09 20 20 20 20 23 20 69 6d e been.. # im
6400: 70 6f 72 74 65 64 2e 20 20 53 6f 20 6f 75 72 20 ported. So our
6410: 65 64 75 63 61 74 65 64 20 67 75 65 73 73 20 69 educated guess i
6420: 73 20 74 68 61 74 20 61 6c 6c 20 72 65 76 69 73 s that all revis
6430: 69 6f 6e 73 0a 09 20 20 20 20 23 20 6f 6e 20 74 ions.. # on t
6440: 68 65 20 27 31 2e 31 2e 31 27 20 62 72 61 6e 63 he '1.1.1' branc
6450: 68 20 77 69 74 68 20 74 69 6d 65 73 74 61 6d 70 h with timestamp
6460: 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 0a 09 s prior to the..
6470: 20 20 20 20 23 20 74 69 6d 65 73 74 61 6d 70 20 # timestamp
6480: 6f 66 20 27 31 2e 32 27 20 77 65 72 65 20 6e 6f of '1.2' were no
6490: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 n-trunk default
64a0: 62 72 61 6e 63 68 0a 09 20 20 20 20 23 20 72 65 branch.. # re
64b0: 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 20 20 20 23 visions.... #
64c0: 20 54 68 69 73 20 72 65 61 6c 6c 79 20 6f 6e 6c This really onl
64d0: 79 20 70 72 6f 63 65 73 73 65 73 20 73 74 61 6e y processes stan
64e0: 64 61 72 64 20 27 31 2e 31 2e 31 2e 2a 27 2d 73 dard '1.1.1.*'-s
64f0: 74 79 6c 65 0a 09 20 20 20 20 23 20 76 65 6e 64 tyle.. # vend
6500: 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e 20 20 4f or revisions. O
6510: 6e 65 20 63 6f 75 6c 64 20 63 6f 6e 63 65 69 76 ne could conceiv
6520: 61 62 6c 79 20 68 61 76 65 20 61 20 66 69 6c 65 ably have a file
6530: 0a 09 20 20 20 20 23 20 77 68 6f 73 65 20 64 65 .. # whose de
6540: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 20 fault branch is
6550: 31 2e 31 2e 33 20 6f 72 20 77 68 61 74 65 76 65 1.1.3 or whateve
6560: 72 2c 20 6f 72 20 77 61 73 20 74 68 61 74 0a 09 r, or was that..
6570: 20 20 20 20 23 20 61 74 20 73 6f 6d 65 20 70 6f # at some po
6580: 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 77 69 74 int in time, wit
6590: 68 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f h vendor revisio
65a0: 6e 73 20 31 2e 31 2e 33 2e 31 2c 0a 09 20 20 20 ns 1.1.3.1,..
65b0: 20 23 20 31 2e 31 2e 33 2e 32 2c 20 65 74 63 2e # 1.1.3.2, etc.
65c0: 20 20 42 75 74 20 77 69 74 68 20 74 68 65 20 64 But with the d
65d0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 67 6f efault branch go
65e0: 6e 65 20 6e 6f 77 2c 0a 09 20 20 20 20 23 20 77 ne now,.. # w
65f0: 65 27 64 20 68 61 76 65 20 6e 6f 20 62 61 73 69 e'd have no basi
6600: 73 20 66 6f 72 20 61 73 73 75 6d 69 6e 67 20 74 s for assuming t
6610: 68 61 74 20 74 68 65 20 6e 6f 6e 2d 73 74 61 6e hat the non-stan
6620: 64 61 72 64 0a 09 20 20 20 20 23 20 76 65 6e 64 dard.. # vend
6630: 6f 72 20 62 72 61 6e 63 68 20 68 61 64 20 65 76 or branch had ev
6640: 65 72 20 62 65 65 6e 20 74 68 65 20 64 65 66 61 er been the defa
6650: 75 6c 74 20 62 72 61 6e 63 68 20 61 6e 79 77 61 ult branch anywa
6660: 79 2e 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 y.... # Note
6670: 74 68 61 74 20 77 65 20 72 65 6c 79 20 6f 6e 20 that we rely on
6680: 63 6f 6d 70 61 72 69 73 6f 6e 73 20 62 65 74 77 comparisons betw
6690: 65 65 6e 20 74 68 65 20 74 69 6d 65 73 74 61 6d een the timestam
66a0: 70 73 0a 09 20 20 20 20 23 20 6f 66 20 74 68 65 ps.. # of the
66b0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 revisions on th
66c0: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 e vendor branch
66d0: 61 6e 64 20 74 68 61 74 20 6f 66 0a 09 20 20 20 and that of..
66e0: 20 23 20 72 65 76 69 73 69 6f 6e 20 31 2e 32 2c # revision 1.2,
66f0: 20 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 even though the
6700: 20 74 69 6d 65 73 74 61 6d 70 73 20 6d 69 67 68 timestamps migh
6710: 74 20 62 65 0a 09 20 20 20 20 23 20 69 6e 63 6f t be.. # inco
6720: 72 72 65 63 74 20 64 75 65 20 74 6f 20 63 6c 6f rrect due to clo
6730: 63 6b 20 73 6b 65 77 2e 20 20 57 65 20 63 6f 75 ck skew. We cou
6740: 6c 64 20 64 6f 20 61 20 73 6c 69 67 68 74 6c 79 ld do a slightly
6750: 0a 09 20 20 20 20 23 20 62 65 74 74 65 72 20 6a .. # better j
6760: 6f 62 20 69 66 20 77 65 20 75 73 65 64 20 74 68 ob if we used th
6770: 65 20 63 68 61 6e 67 65 73 65 74 20 74 69 6d 65 e changeset time
6780: 73 74 61 6d 70 73 2c 20 61 73 20 69 74 20 69 73 stamps, as it is
6790: 0a 09 20 20 20 20 23 20 70 6f 73 73 69 62 6c 65 .. # possible
67a0: 20 74 68 61 74 20 74 68 65 20 64 65 70 65 6e 64 that the depend
67b0: 65 6e 63 69 65 73 20 74 68 61 74 20 77 65 6e 74 encies that went
67c0: 20 69 6e 74 6f 0a 09 20 20 20 20 23 20 64 65 74 into.. # det
67d0: 65 72 6d 69 6e 69 6e 67 20 74 68 6f 73 65 20 74 ermining those t
67e0: 69 6d 65 73 74 61 6d 70 73 20 61 72 65 20 6d 6f imestamps are mo
67f0: 72 65 20 61 63 63 75 72 61 74 65 2e 20 20 42 75 re accurate. Bu
6800: 74 0a 09 20 20 20 20 23 20 74 68 61 74 20 77 6f t.. # that wo
6810: 75 6c 64 20 72 65 71 75 69 72 65 20 61 6e 20 65 uld require an e
6820: 78 74 72 61 20 70 61 73 73 20 6f 72 20 74 77 6f xtra pass or two
6830: 2e 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e .... if {![in
6840: 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72 61 6e fo exists mybran
6850: 63 68 65 73 28 31 2e 31 2e 31 29 5d 7d 20 7b 20 ches(1.1.1)]} {
6860: 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 0a 09 20 20 return {} }...
6870: 20 20 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69 log write 5 fi
6880: 6c 65 20 22 44 65 64 75 63 65 64 20 65 78 69 73 le "Deduced exis
6890: 74 65 6e 63 65 20 6f 66 20 4e 54 44 42 22 0a 0a tence of NTDB"..
68a0: 09 20 20 20 20 73 65 74 20 72 65 76 20 20 5b 24 . set rev [$
68b0: 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 2e 31 mybranches(1.1.1
68c0: 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 65 ) child].. se
68d0: 74 20 72 65 73 20 20 7b 7d 0a 09 20 20 20 20 73 t res {}.. s
68e0: 65 74 20 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74 et stop [$myroot
68f0: 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 69 66 child]... if
6900: 20 7b 24 73 74 6f 70 20 65 71 20 22 22 7d 20 7b {$stop eq ""} {
6910: 0a 09 09 23 20 47 65 74 20 65 76 65 72 79 74 68 ...# Get everyth
6920: 69 6e 67 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 ing on the branc
6930: 68 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 76 20 h...while {$rev
6940: 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 6c ne ""} {... l
6950: 61 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a append res $rev.
6960: 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 .. set rev [$
6970: 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 rev child]...}..
6980: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23 } else {...#
6990: 20 43 6f 6c 6c 65 63 74 20 65 76 65 72 79 74 68 Collect everyth
69a0: 69 6e 67 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 ing on the branc
69b0: 68 20 77 68 69 63 68 20 73 65 65 6d 73 20 74 6f h which seems to
69c0: 20 68 61 76 65 0a 09 09 23 20 62 65 65 6e 20 63 have...# been c
69d0: 6f 6d 6d 69 74 74 65 64 20 62 65 66 6f 72 65 20 ommitted before
69e0: 74 68 65 20 66 69 72 73 74 20 70 72 69 6d 61 72 the first primar
69f0: 79 20 63 68 69 6c 64 20 6f 66 20 74 68 65 0a 09 y child of the..
6a00: 09 23 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e .# root revision
6a10: 2e 0a 09 09 73 65 74 20 73 74 6f 70 64 61 74 65 ....set stopdate
6a20: 20 5b 24 73 74 6f 70 20 64 61 74 65 5d 0a 09 09 [$stop date]...
6a30: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 while {$rev ne "
6a40: 22 7d 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 5b "} {... if {[
6a50: 24 72 65 76 20 64 61 74 65 5d 20 3e 3d 20 24 73 $rev date] >= $s
6a60: 74 6f 70 64 61 74 65 7d 20 62 72 65 61 6b 0a 09 topdate} break..
6a70: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 . lappend res
6a80: 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 74 20 $rev... set
6a90: 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d rev [$rev child]
6aa0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 ...}.. }...
6ab0: 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09 return $res...
6ac0: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 } else {.. re
6ad0: 74 75 72 6e 20 7b 7d 0a 09 7d 0a 20 20 20 20 7d turn {}..}. }
6ae0: 0a 0a 20 20 20 20 23 20 47 65 6e 65 72 61 6c 20 .. # General
6af0: 6e 6f 74 65 3a 20 49 6e 20 74 68 65 20 66 6f 6c note: In the fol
6b00: 6c 6f 77 69 6e 67 20 6d 65 74 68 6f 64 73 20 77 lowing methods w
6b10: 65 20 6f 6e 6c 79 20 6d 6f 64 69 66 79 20 74 68 e only modify th
6b20: 65 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 62 65 e links. # be
6b30: 74 77 65 65 6e 20 72 65 76 69 73 69 6f 6e 73 20 tween revisions
6b40: 61 6e 64 20 73 79 6d 62 6f 6c 73 20 74 6f 20 72 and symbols to r
6b50: 65 73 74 72 75 63 74 75 72 65 20 74 68 65 20 72 estructure the r
6b60: 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 74 72 evision. # tr
6b70: 65 65 2e 20 57 65 20 64 6f 20 5f 5f 6e 6f 74 5f ee. We do __not_
6b80: 5f 20 64 65 73 74 72 6f 79 20 74 68 65 20 6f 62 _ destroy the ob
6b90: 6a 65 63 74 73 2e 20 47 69 76 65 6e 20 74 68 65 jects. Given the
6ba0: 20 63 6f 6d 70 6c 65 78 20 6c 69 6e 6b 73 0a 20 complex links.
6bb0: 20 20 20 23 20 47 43 20 69 73 20 64 69 66 66 69 # GC is diffi
6bc0: 63 75 6c 74 20 61 74 20 74 68 69 73 20 6c 65 76 cult at this lev
6bd0: 65 6c 2e 20 49 74 20 69 73 20 6d 75 63 68 20 65 el. It is much e
6be0: 61 73 69 65 72 20 74 6f 20 64 72 6f 70 0a 20 20 asier to drop.
6bf0: 20 20 23 20 65 76 65 72 79 74 68 69 6e 67 20 77 # everything w
6c00: 68 65 6e 20 77 65 20 77 65 20 61 72 65 20 64 6f hen we we are do
6c10: 6e 65 2e 20 54 68 69 73 20 68 61 70 70 65 6e 73 ne. This happens
6c20: 20 69 6e 20 27 64 72 6f 70 27 2c 20 75 73 69 6e in 'drop', usin
6c30: 67 0a 20 20 20 20 23 20 74 68 65 20 73 74 61 74 g. # the stat
6c40: 65 20 76 61 72 69 61 62 6c 65 20 27 6d 79 72 65 e variable 'myre
6c50: 76 27 2c 20 27 6d 79 62 72 61 6e 63 68 65 73 27 v', 'mybranches'
6c60: 2c 20 61 6e 64 20 27 6d 79 74 61 67 73 27 2e 20 , and 'mytags'.
6c70: 57 68 61 74 20 77 65 0a 20 20 20 20 23 20 68 61 What we. # ha
6c80: 76 65 20 74 6f 20 70 65 72 73 69 73 74 2c 20 70 ve to persist, p
6c90: 65 72 66 6f 72 6d 65 64 20 62 79 20 27 70 65 72 erformed by 'per
6ca0: 73 69 73 74 27 2c 20 77 65 20 6b 6e 6f 77 20 77 sist', we know w
6cb0: 69 6c 6c 20 62 65 0a 20 20 20 20 23 20 72 65 61 ill be. # rea
6cc0: 63 68 61 62 6c 65 20 74 68 72 6f 75 67 68 20 74 chable through t
6cd0: 68 65 20 72 65 76 69 73 69 6f 6e 73 20 6c 69 73 he revisions lis
6ce0: 74 65 64 20 69 6e 20 27 6d 79 72 6f 6f 74 73 27 ted in 'myroots'
6cf0: 20 61 6e 64 20 74 68 65 69 72 0a 20 20 20 20 23 and their. #
6d00: 20 63 68 69 6c 64 72 65 6e 20 61 6e 64 20 73 79 children and sy
6d10: 6d 62 6f 6c 73 2e 0a 0a 20 20 20 20 6d 65 74 68 mbols... meth
6d20: 6f 64 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e od AdjustNonTrun
6d30: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b kDefaultBranch {
6d40: 72 65 76 6c 69 73 74 7d 20 7b 0a 09 73 65 74 20 revlist} {..set
6d50: 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74 20 63 68 stop [$myroot ch
6d60: 69 6c 64 5d 20 3b 23 20 72 65 76 20 27 31 2e 32 ild] ;# rev '1.2
6d70: 27 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 35 20 '...log write 5
6d80: 66 69 6c 65 20 22 41 64 6a 75 73 74 69 6e 67 20 file "Adjusting
6d90: 4e 54 44 42 20 63 6f 6e 74 61 69 6e 69 6e 67 20 NTDB containing
6da0: 5b 6e 73 70 20 5b 6c 6c 65 6e 67 74 68 20 24 72 [nsp [llength $r
6db0: 65 76 6c 69 73 74 5d 20 72 65 76 69 73 69 6f 6e evlist] revision
6dc0: 5d 22 0a 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 ]"...# From cvs2
6dd0: 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e svn the followin
6de0: 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 77 g explanation (w
6df0: 69 74 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e ith modification
6e00: 73 0a 09 23 20 66 6f 72 20 6f 75 72 20 61 6c 67 s..# for our alg
6e10: 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20 41 64 6a orithm):...# Adj
6e20: 75 73 74 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e ust the non-trun
6e30: 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 k default branch
6e40: 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 revisions found
6e50: 20 69 6e 20 74 68 65 0a 09 23 20 27 72 65 76 6c in the..# 'revl
6e60: 69 73 74 27 2e 0a 0a 09 23 20 27 6d 79 69 6d 70 ist'....# 'myimp
6e70: 6f 72 74 65 64 27 20 69 73 20 61 20 62 6f 6f 6c orted' is a bool
6e80: 65 61 6e 20 66 6c 61 67 20 69 6e 64 69 63 61 74 ean flag indicat
6e90: 69 6e 67 20 77 68 65 74 68 65 72 20 74 68 69 73 ing whether this
6ea0: 20 66 69 6c 65 0a 09 23 20 61 70 70 65 61 72 73 file..# appears
6eb0: 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 69 6d to have been im
6ec0: 70 6f 72 74 65 64 2c 20 77 68 69 63 68 20 61 6c ported, which al
6ed0: 73 6f 20 6d 65 61 6e 73 20 74 68 61 74 0a 09 23 so means that..#
6ee0: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 20 68 61 revision 1.1 ha
6ef0: 73 20 61 20 67 65 6e 65 72 61 74 65 64 20 6c 6f s a generated lo
6f00: 67 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 6e g message that n
6f10: 65 65 64 20 6e 6f 74 20 62 65 0a 09 23 20 70 72 eed not be..# pr
6f20: 65 73 65 72 76 65 64 2e 20 20 27 72 65 76 6c 69 eserved. 'revli
6f30: 73 74 27 20 69 73 20 61 20 6c 69 73 74 20 6f 66 st' is a list of
6f40: 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 object referenc
6f50: 65 73 20 66 6f 72 20 74 68 65 0a 09 23 20 72 65 es for the..# re
6f60: 76 69 73 69 6f 6e 73 20 74 68 61 74 20 68 61 76 visions that hav
6f70: 65 20 62 65 65 6e 20 64 65 74 65 72 6d 69 6e 65 e been determine
6f80: 64 20 74 6f 20 62 65 20 6e 6f 6e 2d 74 72 75 6e d to be non-trun
6f90: 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61 k default..# bra
6fa0: 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a nch revisions...
6fb0: 09 23 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 .# Note that the
6fc0: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 first revision
6fd0: 6f 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 on the default b
6fe0: 72 61 6e 63 68 20 69 73 0a 09 23 20 68 61 6e 64 ranch is..# hand
6ff0: 6c 65 64 20 73 74 72 61 6e 67 65 6c 79 20 62 79 led strangely by
7000: 20 43 56 53 2e 20 20 49 66 20 61 20 66 69 6c 65 CVS. If a file
7010: 20 69 73 20 69 6d 70 6f 72 74 65 64 20 28 61 73 is imported (as
7020: 20 6f 70 70 6f 73 65 64 0a 09 23 20 74 6f 20 62 opposed..# to b
7030: 65 69 6e 67 20 61 64 64 65 64 29 2c 20 43 56 53 eing added), CVS
7040: 20 63 72 65 61 74 65 73 20 61 20 31 2e 31 20 72 creates a 1.1 r
7050: 65 76 69 73 69 6f 6e 2c 20 74 68 65 6e 20 63 72 evision, then cr
7060: 65 61 74 65 73 20 61 0a 09 23 20 76 65 6e 64 6f eates a..# vendo
7070: 72 20 62 72 61 6e 63 68 20 31 2e 31 2e 31 20 62 r branch 1.1.1 b
7080: 61 73 65 64 20 6f 6e 20 31 2e 31 2c 20 74 68 65 ased on 1.1, the
7090: 6e 20 63 72 65 61 74 65 73 20 61 20 31 2e 31 2e n creates a 1.1.
70a0: 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 1.1..# revision
70b0: 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 63 61 that is identica
70c0: 6c 20 74 6f 20 74 68 65 20 31 2e 31 20 72 65 76 l to the 1.1 rev
70d0: 69 73 69 6f 6e 20 28 69 2e 65 2e 2c 20 69 74 73 ision (i.e., its
70e0: 0a 09 23 20 64 65 6c 74 61 74 65 78 74 20 69 73 ..# deltatext is
70f0: 20 65 6d 70 74 79 29 2e 20 20 54 68 65 20 6c 6f empty). The lo
7100: 67 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 74 g message that t
7110: 68 65 20 75 73 65 72 20 74 79 70 65 64 0a 09 23 he user typed..#
7120: 20 77 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67 20 when importing
7130: 69 73 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 is stored with t
7140: 68 65 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 he 1.1.1.1 revis
7150: 69 6f 6e 2e 20 20 54 68 65 20 31 2e 31 0a 09 23 ion. The 1.1..#
7160: 20 72 65 76 69 73 69 6f 6e 20 61 6c 77 61 79 73 revision always
7170: 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 74 61 6e contains a stan
7180: 64 61 72 64 2c 20 67 65 6e 65 72 61 74 65 64 20 dard, generated
7190: 6c 6f 67 20 6d 65 73 73 61 67 65 2c 0a 09 23 20 log message,..#
71a0: 27 49 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f 'Initial revisio
71b0: 6e 5c 6e 27 2e 0a 0a 09 23 20 57 68 65 6e 20 77 n\n'....# When w
71c0: 65 20 64 65 74 65 63 74 20 61 20 73 74 72 61 69 e detect a strai
71d0: 67 68 74 66 6f 72 77 61 72 64 20 69 6d 70 6f 72 ghtforward impor
71e0: 74 20 6c 69 6b 65 20 74 68 69 73 2c 20 77 65 20 t like this, we
71f0: 77 61 6e 74 0a 09 23 20 74 6f 20 68 61 6e 64 6c want..# to handl
7200: 65 20 69 74 20 62 79 20 64 65 6c 65 74 69 6e 67 e it by deleting
7210: 20 74 68 65 20 31 2e 31 20 72 65 76 69 73 69 6f the 1.1 revisio
7220: 6e 20 28 77 68 69 63 68 20 64 6f 65 73 6e 27 74 n (which doesn't
7230: 0a 09 23 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 ..# contain any
7240: 75 73 65 66 75 6c 20 69 6e 66 6f 72 6d 61 74 69 useful informati
7250: 6f 6e 29 20 61 6e 64 20 6d 61 6b 69 6e 67 20 31 on) and making 1
7260: 2e 31 2e 31 2e 31 20 69 6e 74 6f 20 61 6e 0a 09 .1.1.1 into an..
7270: 23 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 72 6f # independent ro
7280: 6f 74 20 69 6e 20 74 68 65 20 66 69 6c 65 27 73 ot in the file's
7290: 20 64 65 70 65 6e 64 65 6e 63 79 20 74 72 65 65 dependency tree
72a0: 2e 20 20 49 6e 20 53 56 4e 2c 0a 09 23 20 31 2e . In SVN,..# 1.
72b0: 31 2e 31 2e 31 20 77 69 6c 6c 20 62 65 20 61 64 1.1.1 will be ad
72c0: 64 65 64 20 64 69 72 65 63 74 6c 79 20 74 6f 20 ded directly to
72d0: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 the vendor branc
72e0: 68 20 77 69 74 68 20 69 74 73 0a 09 23 20 69 6e h with its..# in
72f0: 69 74 69 61 6c 20 63 6f 6e 74 65 6e 74 2e 20 20 itial content.
7300: 54 68 65 6e 20 69 6e 20 61 20 73 70 65 63 69 61 Then in a specia
7310: 6c 20 27 70 6f 73 74 2d 63 6f 6d 6d 69 74 27 2c l 'post-commit',
7320: 20 74 68 65 0a 09 23 20 31 2e 31 2e 31 2e 31 20 the..# 1.1.1.1
7330: 72 65 76 69 73 69 6f 6e 20 69 73 20 63 6f 70 69 revision is copi
7340: 65 64 20 62 61 63 6b 20 74 6f 20 74 72 75 6e 6b ed back to trunk
7350: 2e 0a 0a 09 23 20 49 66 20 74 68 65 20 75 73 65 ....# If the use
7360: 72 20 69 6d 70 6f 72 74 73 20 61 67 61 69 6e 20 r imports again
7370: 74 6f 20 74 68 65 20 73 61 6d 65 20 76 65 6e 64 to the same vend
7380: 6f 72 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20 or branch, then
7390: 43 56 53 0a 09 23 20 63 72 65 61 74 65 73 20 72 CVS..# creates r
73a0: 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 32 evisions 1.1.1.2
73b0: 2c 20 31 2e 31 2e 31 2e 33 2c 20 65 74 63 2e 20 , 1.1.1.3, etc.
73c0: 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 on the vendor br
73d0: 61 6e 63 68 2c 0a 09 23 20 2a 77 69 74 68 6f 75 anch,..# *withou
73e0: 74 2a 20 63 6f 75 6e 74 65 72 70 61 72 74 73 20 t* counterparts
73f0: 69 6e 20 74 72 75 6e 6b 20 28 65 76 65 6e 20 74 in trunk (even t
7400: 68 6f 75 67 68 20 74 68 65 73 65 20 72 65 76 69 hough these revi
7410: 73 69 6f 6e 73 0a 09 23 20 65 66 66 65 63 74 69 sions..# effecti
7420: 76 65 6c 79 20 70 6c 61 79 20 74 68 65 20 72 6f vely play the ro
7430: 6c 65 20 6f 66 20 74 72 75 6e 6b 20 72 65 76 69 le of trunk revi
7440: 73 69 6f 6e 73 29 2e 20 20 53 6f 20 61 66 74 65 sions). So afte
7450: 72 20 77 65 20 61 64 64 0a 09 23 20 73 75 63 68 r we add..# such
7460: 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 20 74 68 revisions to th
7470: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c e vendor branch,
7480: 20 77 65 20 61 6c 73 6f 20 63 6f 70 79 20 74 68 we also copy th
7490: 65 6d 20 62 61 63 6b 20 74 6f 0a 09 23 20 74 72 em back to..# tr
74a0: 75 6e 6b 20 69 6e 20 70 6f 73 74 2d 63 6f 6d 6d unk in post-comm
74b0: 69 74 73 2e 0a 0a 09 23 20 57 65 20 6d 61 72 6b its....# We mark
74c0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 66 the revisions f
74d0: 6f 75 6e 64 20 69 6e 20 27 72 65 76 6c 69 73 74 ound in 'revlist
74e0: 27 20 61 73 20 64 65 66 61 75 6c 74 20 62 72 61 ' as default bra
74f0: 6e 63 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 nch..# revisions
7500: 2e 20 20 41 6c 73 6f 2c 20 69 66 20 74 68 65 20 . Also, if the
7510: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 68 61 root revision ha
7520: 73 20 61 20 70 72 69 6d 61 72 79 20 63 68 69 6c s a primary chil
7530: 64 0a 09 23 20 77 65 20 73 65 74 20 74 68 61 74 d..# we set that
7540: 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 64 65 70 revision to dep
7550: 65 6e 64 20 6f 6e 20 74 68 65 20 6c 61 73 74 20 end on the last
7560: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul
7570: 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 t..# branch revi
7580: 73 69 6f 6e 20 61 6e 64 20 70 6f 73 73 69 62 6c sion and possibl
7590: 79 20 61 64 6a 75 73 74 20 69 74 73 20 74 79 70 y adjust its typ
75a0: 65 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a e accordingly...
75b0: 09 73 65 74 20 66 69 72 73 74 20 5b 6c 69 6e 64 .set first [lind
75c0: 65 78 20 24 72 65 76 6c 69 73 74 20 30 5d 0a 0a ex $revlist 0]..
75d0: 09 6c 6f 67 20 77 72 69 74 65 20 36 20 66 69 6c .log write 6 fil
75e0: 65 20 22 3c 5b 24 66 69 72 73 74 20 72 65 76 6e e "<[$first revn
75f0: 72 5d 3e 20 5b 65 78 70 72 20 7b 24 6d 79 69 6d r]> [expr {$myim
7600: 70 6f 72 74 65 64 20 3f 20 22 69 6d 70 6f 72 74 ported ? "import
7610: 65 64 22 20 3a 20 22 6e 6f 74 20 69 6d 70 6f 72 ed" : "not impor
7620: 74 65 64 22 7d 5d 2c 20 5b 24 66 69 72 73 74 20 ted"}], [$first
7630: 6f 70 65 72 61 74 69 6f 6e 5d 2c 20 5b 65 78 70 operation], [exp
7640: 72 20 7b 5b 24 66 69 72 73 74 20 68 61 73 74 65 r {[$first haste
7650: 78 74 5d 20 3f 20 22 68 61 73 20 74 65 78 74 22 xt] ? "has text"
7660: 20 3a 20 22 6e 6f 20 74 65 78 74 22 7d 5d 22 0a : "no text"}]".
7670: 0a 09 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 ..if {$myimporte
7680: 64 20 26 26 0a 09 20 20 20 20 5b 24 66 69 72 73 d &&.. [$firs
7690: 74 20 72 65 76 6e 72 5d 20 65 71 20 22 31 2e 31 t revnr] eq "1.1
76a0: 2e 31 2e 31 22 20 26 26 0a 09 20 20 20 20 5b 24 .1.1" &&.. [$
76b0: 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d first operation]
76c0: 20 65 71 20 22 63 68 61 6e 67 65 22 20 26 26 0a eq "change" &&.
76d0: 09 20 20 20 20 21 5b 24 66 69 72 73 74 20 68 61 . ![$first ha
76e0: 73 74 65 78 74 5d 7d 20 7b 0a 0a 09 20 20 20 20 stext]} {...
76f0: 73 65 74 20 72 65 76 31 31 20 5b 24 66 69 72 73 set rev11 [$firs
7700: 74 20 70 61 72 65 6e 74 5d 20 3b 20 23 20 41 73 t parent] ; # As
7710: 73 65 72 74 3a 20 53 68 6f 75 6c 64 20 62 65 20 sert: Should be
7720: 6d 79 72 6f 6f 74 2e 0a 09 20 20 20 20 6c 6f 67 myroot... log
7730: 20 77 72 69 74 65 20 33 20 66 69 6c 65 20 22 52 write 3 file "R
7740: 65 6d 6f 76 69 6e 67 20 69 72 72 65 6c 65 76 61 emoving irreleva
7750: 6e 74 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 65 nt revision [$re
7760: 76 31 31 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 v11 revnr]"...
7770: 20 20 23 20 43 75 74 20 6f 75 74 20 74 68 65 20 # Cut out the
7780: 6f 6c 64 20 6d 79 72 6f 6f 74 20 72 65 76 69 73 old myroot revis
7790: 69 6f 6e 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65 ion.... ldele
77a0: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31 te myroots $rev1
77b0: 31 20 3b 20 23 20 4e 6f 74 20 61 20 72 6f 6f 74 1 ; # Not a root
77c0: 20 61 6e 79 20 6c 6f 6e 67 65 72 2e 0a 0a 09 20 any longer....
77d0: 20 20 20 24 66 69 72 73 74 20 63 75 74 66 72 6f $first cutfro
77e0: 6d 70 61 72 65 6e 74 20 3b 20 23 20 53 65 76 65 mparent ; # Seve
77f0: 72 20 72 65 76 69 73 69 6f 6e 20 66 72 6f 6d 20 r revision from
7800: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e parent revision.
7810: 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20 .. if {$stop
7820: 6e 65 20 22 22 7d 20 7b 0a 09 09 24 73 74 6f 70 ne ""} {...$stop
7830: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 cutfromparent..
7840: 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 .lappend myroots
7850: 20 24 73 74 6f 70 20 3b 20 23 20 4e 65 77 20 72 $stop ; # New r
7860: 6f 6f 74 2c 20 61 66 74 65 72 20 76 65 6e 64 6f oot, after vendo
7870: 72 20 62 72 61 6e 63 68 0a 09 20 20 20 20 7d 0a r branch.. }.
7880: 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 .. # Cut out
7890: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 the vendor branc
78a0: 68 20 73 79 6d 62 6f 6c 0a 0a 09 20 20 20 20 73 h symbol... s
78b0: 65 74 20 76 65 6e 64 6f 72 20 5b 24 66 69 72 73 et vendor [$firs
78c0: 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a t parentbranch].
78d0: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 . integrity a
78e0: 73 73 65 72 74 20 7b 24 76 65 6e 64 6f 72 20 6e ssert {$vendor n
78f0: 65 20 22 22 7d 20 7b 46 69 72 73 74 20 4e 54 44 e ""} {First NTD
7900: 42 20 72 65 76 69 73 69 6f 6e 20 68 61 73 20 6e B revision has n
7910: 6f 20 62 72 61 6e 63 68 7d 0a 09 20 20 20 20 69 o branch}.. i
7920: 66 20 7b 5b 24 76 65 6e 64 6f 72 20 70 61 72 65 f {[$vendor pare
7930: 6e 74 5d 20 65 71 20 24 72 65 76 31 31 7d 20 7b nt] eq $rev11} {
7940: 0a 09 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 ...$rev11 remove
7950: 62 72 61 6e 63 68 20 20 20 20 20 20 20 20 24 76 branch $v
7960: 65 6e 64 6f 72 0a 09 09 24 72 65 76 31 31 20 72 endor...$rev11 r
7970: 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e emovechildonbran
7980: 63 68 20 24 66 69 72 73 74 0a 09 09 24 76 65 6e ch $first...$ven
7990: 64 6f 72 20 63 75 74 63 68 69 6c 64 0a 09 09 24 dor cutchild...$
79a0: 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72 first cutfrompar
79b0: 65 6e 74 62 72 61 6e 63 68 0a 09 09 6c 61 70 70 entbranch...lapp
79c0: 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 end myroots $fir
79d0: 73 74 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 st.. }...
79e0: 23 20 43 68 61 6e 67 65 20 74 68 65 20 74 79 70 # Change the typ
79f0: 65 20 6f 66 20 66 69 72 73 74 20 28 74 79 70 69 e of first (typi
7a00: 63 61 6c 6c 79 20 66 72 6f 6d 20 43 68 61 6e 67 cally from Chang
7a10: 65 20 74 6f 20 41 64 64 29 3a 0a 09 20 20 20 20 e to Add):..
7a20: 24 66 69 72 73 74 20 72 65 74 79 70 65 20 61 64 $first retype ad
7a30: 64 0a 0a 09 20 20 20 20 23 20 4d 6f 76 65 20 61 d... # Move a
7a40: 6e 79 20 74 61 67 73 20 61 6e 64 20 62 72 61 6e ny tags and bran
7a50: 63 68 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6c ches from the ol
7a60: 64 20 74 6f 20 74 68 65 20 6e 65 77 20 72 6f 6f d to the new roo
7a70: 74 2e 0a 09 20 20 20 20 24 72 65 76 31 31 20 6d t... $rev11 m
7a80: 6f 76 65 73 79 6d 62 6f 6c 73 74 6f 20 24 66 69 ovesymbolsto $fi
7a90: 72 73 74 0a 09 7d 0a 0a 09 23 20 4d 61 72 6b 20 rst..}...# Mark
7aa0: 61 6c 6c 20 74 68 65 20 73 70 65 63 69 61 6c 20 all the special
7ab0: 72 65 76 69 73 69 6f 6e 73 20 61 73 20 73 75 63 revisions as suc
7ac0: 68 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 h..foreach rev $
7ad0: 72 65 76 6c 69 73 74 20 7b 0a 09 20 20 20 20 6c revlist {.. l
7ae0: 6f 67 20 77 72 69 74 65 20 33 20 66 69 6c 65 20 og write 3 file
7af0: 22 52 65 76 69 73 69 6f 6e 20 6f 6e 20 64 65 66 "Revision on def
7b00: 61 75 6c 74 20 62 72 61 6e 63 68 3a 20 5b 24 72 ault branch: [$r
7b10: 65 76 20 72 65 76 6e 72 5d 22 0a 09 20 20 20 20 ev revnr]"..
7b20: 24 72 65 76 20 73 65 74 6f 6e 64 65 66 61 75 6c $rev setondefaul
7b30: 74 62 72 61 6e 63 68 20 31 0a 09 7d 0a 0a 09 69 tbranch 1..}...i
7b40: 66 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 f {$stop ne ""}
7b50: 7b 0a 09 20 20 20 20 23 20 52 65 76 69 73 69 6f {.. # Revisio
7b60: 6e 20 31 2e 32 20 6c 6f 67 69 63 61 6c 6c 79 20 n 1.2 logically
7b70: 66 6f 6c 6c 6f 77 73 20 74 68 65 20 69 6d 70 6f follows the impo
7b80: 72 74 65 64 20 72 65 76 69 73 69 6f 6e 73 2c 0a rted revisions,.
7b90: 09 20 20 20 20 23 20 6e 6f 74 20 31 2e 31 2e 20 . # not 1.1.
7ba0: 20 41 63 63 6f 72 64 69 6e 67 6c 79 2c 20 63 6f Accordingly, co
7bb0: 6e 6e 65 63 74 20 69 74 20 74 6f 20 74 68 65 20 nnect it to the
7bc0: 6c 61 73 74 20 4e 54 44 42 52 20 61 6e 64 0a 09 last NTDBR and..
7bd0: 20 20 20 20 23 20 70 6f 73 73 69 62 6c 79 20 63 # possibly c
7be0: 68 61 6e 67 65 20 69 74 73 20 74 79 70 65 2e 0a hange its type..
7bf0: 0a 09 20 20 20 20 73 65 74 20 6c 61 73 74 20 5b .. set last [
7c00: 6c 69 6e 64 65 78 20 24 72 65 76 6c 69 73 74 20 lindex $revlist
7c10: 65 6e 64 5d 0a 09 20 20 20 20 24 73 74 6f 70 20 end].. $stop
7c20: 73 65 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 setdefaultbranch
7c30: 70 61 72 65 6e 74 20 24 6c 61 73 74 20 3b 20 23 parent $last ; #
7c40: 20 52 65 74 79 70 65 73 20 74 68 65 20 72 65 76 Retypes the rev
7c50: 69 73 69 6f 6e 20 74 6f 6f 2e 0a 09 20 20 20 20 ision too...
7c60: 24 6c 61 73 74 20 73 65 74 64 65 66 61 75 6c 74 $last setdefault
7c70: 62 72 61 6e 63 68 63 68 69 6c 64 20 20 24 73 74 branchchild $st
7c80: 6f 70 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 op..}..return.
7c90: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
7ca0: 43 68 65 63 6b 4c 4f 44 73 20 7b 7d 20 7b 0a 09 CheckLODs {} {..
7cb0: 66 6f 72 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 foreach {_ branc
7cc0: 68 7d 20 20 5b 61 72 72 61 79 20 67 65 74 20 6d h} [array get m
7cd0: 79 62 72 61 6e 63 68 65 73 5d 20 7b 20 24 62 72 ybranches] { $br
7ce0: 61 6e 63 68 20 63 68 65 63 6b 6c 6f 64 20 7d 0a anch checklod }.
7cf0: 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c .foreach {_ tagl
7d00: 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 ist} [array get
7d10: 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 mytags] {.. f
7d20: 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c oreach tag $tagl
7d30: 69 73 74 20 7b 20 24 74 61 67 20 63 68 65 63 6b ist { $tag check
7d40: 6c 6f 64 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e lod }..}..return
7d50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
7d60: 6f 64 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 od RemoveIrrelev
7d70: 61 6e 74 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 antDeletions {}
7d80: 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76 {..# From cvs2sv
7d90: 6e 3a 20 49 66 20 61 20 66 69 6c 65 20 69 73 20 n: If a file is
7da0: 61 64 64 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 added on a branc
7db0: 68 2c 20 74 68 65 6e 20 61 20 74 72 75 6e 6b 0a h, then a trunk.
7dc0: 09 23 20 72 65 76 69 73 69 6f 6e 20 69 73 20 61 .# revision is a
7dd0: 64 64 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 dded at the same
7de0: 20 74 69 6d 65 20 69 6e 20 74 68 65 20 27 44 65 time in the 'De
7df0: 61 64 27 20 73 74 61 74 65 2e 0a 09 23 20 54 68 ad' state...# Th
7e00: 69 73 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 is revision does
7e10: 6e 27 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 n't do anything
7e20: 75 73 65 66 75 6c 2c 20 73 6f 20 64 65 6c 65 74 useful, so delet
7e30: 65 20 69 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20 e it....foreach
7e40: 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a root $myroots {.
7e50: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 . if {[$root
7e60: 69 73 6e 65 65 64 65 64 5d 7d 20 63 6f 6e 74 69 isneeded]} conti
7e70: 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 nue.. log wri
7e80: 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 te 2 file "Remov
7e90: 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20 ing unnecessary
7ea0: 64 65 61 64 20 72 65 76 69 73 69 6f 6e 20 5b 24 dead revision [$
7eb0: 72 6f 6f 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20 root revnr]"...
7ec0: 20 20 20 23 20 52 65 6d 6f 76 65 20 61 73 20 72 # Remove as r
7ed0: 6f 6f 74 2c 20 6d 61 6b 65 20 69 74 73 20 63 68 oot, make its ch
7ee0: 69 6c 64 20 6e 65 77 20 72 6f 6f 74 20 61 66 74 ild new root aft
7ef0: 65 72 0a 09 20 20 20 20 23 20 64 69 73 63 6f 6e er.. # discon
7f00: 6e 65 63 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 necting it from
7f10: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6a 75 73 the revision jus
7f20: 74 20 67 6f 69 6e 67 20 61 77 61 79 2e 0a 0a 09 t going away....
7f30: 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f ldelete myro
7f40: 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 69 ots $root.. i
7f50: 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 63 68 69 f {[$root haschi
7f60: 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 63 68 69 ld]} {...set chi
7f70: 6c 64 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d ld [$root child]
7f80: 0a 09 09 24 63 68 69 6c 64 20 63 75 74 66 72 6f ...$child cutfro
7f90: 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e mparent...lappen
7fa0: 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 d myroots $child
7fb0: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 .. }... #
7fc0: 43 75 74 20 6f 75 74 20 74 68 65 20 62 72 61 6e Cut out the bran
7fd0: 63 68 65 73 20 73 70 61 77 6e 65 64 20 62 79 20 ches spawned by
7fe0: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 the revision to
7ff0: 62 65 0a 09 20 20 20 20 23 20 64 65 6c 65 74 65 be.. # delete
8000: 64 2e 20 49 66 20 74 68 65 20 62 72 61 6e 63 68 d. If the branch
8010: 20 68 61 73 20 72 65 76 69 73 69 6f 6e 73 20 74 has revisions t
8020: 68 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 hey should alrea
8030: 64 79 0a 09 20 20 20 20 23 20 75 73 65 20 6f 70 dy.. # use op
8040: 65 72 61 74 69 6f 6e 20 27 61 64 64 27 2c 20 6e eration 'add', n
8050: 6f 20 6e 65 65 64 20 74 6f 20 63 68 61 6e 67 65 o need to change
8060: 20 74 68 61 74 2e 20 54 68 65 20 66 69 72 73 74 that. The first
8070: 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e .. # revision
8080: 20 6f 6e 20 65 61 63 68 20 62 72 61 6e 63 68 20 on each branch
8090: 62 65 63 6f 6d 65 73 20 61 20 6e 65 77 20 61 6e becomes a new an
80a0: 64 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 0a 09 d disconnected..
80b0: 20 20 20 20 23 20 72 6f 6f 74 2e 0a 0a 09 20 20 # root....
80c0: 20 20 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 foreach branch
80d0: 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 [$root branches
80e0: 5d 20 7b 0a 09 09 24 62 72 61 6e 63 68 20 63 75 ] {...$branch cu
80f0: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 09 tbranchparent...
8100: 69 66 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 if {![$branch ha
8110: 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 schild]} continu
8120: 65 0a 09 09 73 65 74 20 66 69 72 73 74 20 5b 24 e...set first [$
8130: 62 72 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 branch child]...
8140: 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61 $first cutfrompa
8150: 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d rent...lappend m
8160: 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a 09 20 yroots $first..
8170: 20 20 20 7d 0a 09 20 20 20 20 24 72 6f 6f 74 20 }.. $root
8180: 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 removeallbranche
8190: 73 0a 0a 09 20 20 20 20 23 20 54 61 67 67 69 6e s... # Taggin
81a0: 67 20 61 20 64 65 61 64 20 72 65 76 69 73 69 6f g a dead revisio
81b0: 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61 6e 79 n doesn't do any
81c0: 74 68 69 6e 67 2c 20 73 6f 20 72 65 6d 6f 76 65 thing, so remove
81d0: 0a 09 20 20 20 20 23 20 61 6e 79 20 74 61 67 73 .. # any tags
81e0: 20 74 68 61 74 20 77 65 72 65 20 73 65 74 20 6f that were set o
81f0: 6e 20 69 74 2e 0a 0a 09 20 20 20 20 24 72 6f 6f n it.... $roo
8200: 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a t removealltags.
8210: 0a 09 20 20 20 20 23 20 54 68 69 73 20 63 61 6e .. # This can
8220: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 6f 6e 63 only happen onc
8230: 65 20 70 65 72 20 66 69 6c 65 2c 20 61 6e 64 20 e per file, and
8240: 77 65 20 6d 69 67 68 74 20 68 61 76 65 0a 09 20 we might have..
8250: 20 20 20 23 20 6a 75 73 74 20 63 68 61 6e 67 65 # just change
8260: 64 20 6d 79 72 6f 6f 74 73 2c 20 73 6f 20 65 6e d myroots, so en
8270: 64 20 74 68 65 20 6c 6f 6f 70 0a 09 20 20 20 20 d the loop..
8280: 62 72 65 61 6b 0a 09 7d 0a 09 72 65 74 75 72 6e break..}..return
8290: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
82a0: 6f 64 20 52 65 6d 6f 76 65 49 6e 69 74 69 61 6c od RemoveInitial
82b0: 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e 73 20 BranchDeletions
82c0: 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 {} {..# From cvs
82d0: 32 73 76 6e 3a 20 49 66 20 74 68 65 20 66 69 72 2svn: If the fir
82e0: 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61 st revision on a
82f0: 20 62 72 61 6e 63 68 20 69 73 20 61 6e 0a 09 23 branch is an..#
8300: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 64 65 6c unnecessary del
8310: 65 74 65 2c 20 72 65 6d 6f 76 65 20 69 74 2e 0a ete, remove it..
8320: 09 23 0a 09 23 20 49 66 20 61 20 66 69 6c 65 20 .#..# If a file
8330: 69 73 20 61 64 64 65 64 20 6f 6e 20 61 20 62 72 is added on a br
8340: 61 6e 63 68 20 28 77 68 65 74 68 65 72 20 6f 72 anch (whether or
8350: 20 6e 6f 74 20 69 74 20 61 6c 72 65 61 64 79 0a not it already.
8360: 09 23 20 65 78 69 73 74 65 64 20 6f 6e 20 74 72 .# existed on tr
8370: 75 6e 6b 29 2c 20 74 68 65 6e 20 6e 65 77 20 76 unk), then new v
8380: 65 72 73 69 6f 6e 73 20 6f 66 20 43 56 53 20 61 ersions of CVS a
8390: 64 64 20 61 20 66 69 72 73 74 0a 09 23 20 62 72 dd a first..# br
83a0: 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 69 6e anch revision in
83b0: 20 74 68 65 20 27 64 65 61 64 27 20 73 74 61 74 the 'dead' stat
83c0: 65 20 28 74 6f 20 69 6e 64 69 63 61 74 65 20 74 e (to indicate t
83d0: 68 61 74 20 74 68 65 0a 09 23 20 66 69 6c 65 20 hat the..# file
83e0: 64 69 64 20 6e 6f 74 20 65 78 69 73 74 20 6f 6e did not exist on
83f0: 20 74 68 65 20 62 72 61 6e 63 68 20 77 68 65 6e the branch when
8400: 20 74 68 65 20 62 72 61 6e 63 68 20 77 61 73 0a the branch was.
8410: 09 23 20 63 72 65 61 74 65 64 29 20 66 6f 6c 6c .# created) foll
8420: 6f 77 65 64 20 62 79 20 74 68 65 20 73 65 63 6f owed by the seco
8430: 6e 64 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 nd branch revisi
8440: 6f 6e 2c 20 77 68 69 63 68 20 69 73 20 61 6e 0a on, which is an.
8450: 09 23 20 61 64 64 2e 20 20 57 68 65 6e 20 77 65 .# add. When we
8460: 20 65 6e 63 6f 75 6e 74 65 72 20 74 68 69 73 20 encounter this
8470: 73 69 74 75 61 74 69 6f 6e 2c 20 77 65 20 73 65 situation, we se
8480: 76 65 72 20 74 68 65 20 62 72 61 6e 63 68 0a 09 ver the branch..
8490: 23 20 66 72 6f 6d 20 74 72 75 6e 6b 20 61 6e 64 # from trunk and
84a0: 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 72 73 delete the firs
84b0: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f t branch revisio
84c0: 6e 2e 0a 0a 09 23 20 41 74 20 74 68 69 73 20 70 n....# At this p
84d0: 6f 69 6e 74 20 77 65 20 6d 61 79 20 68 61 76 65 oint we may have
84e0: 20 61 6c 72 65 61 64 79 20 6d 75 6c 74 69 70 6c already multipl
84f0: 65 20 72 6f 6f 74 73 20 69 6e 20 6d 79 72 6f 6f e roots in myroo
8500: 74 73 2c 0a 09 23 20 77 65 20 68 61 76 65 20 74 ts,..# we have t
8510: 6f 20 70 72 6f 63 65 73 73 20 74 68 65 6d 20 61 o process them a
8520: 6c 6c 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f ll....foreach ro
8530: 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f ot [$self LinesO
8540: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a fDevelopment] {.
8550: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 . if {[$root
8560: 69 73 6e 65 65 64 65 64 62 72 61 6e 63 68 64 65 isneededbranchde
8570: 6c 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 l]} continue..
8580: 20 20 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69 log write 2 fi
8590: 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e le "Removing unn
85a0: 65 63 65 73 73 61 72 79 20 69 6e 69 74 69 61 6c ecessary initial
85b0: 20 62 72 61 6e 63 68 20 64 65 6c 65 74 65 20 5b branch delete [
85c0: 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22 0a 0a 09 $root revnr]"...
85d0: 20 20 20 20 73 65 74 20 62 72 61 6e 63 68 20 5b set branch [
85e0: 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e $root parentbran
85f0: 63 68 5d 0a 09 20 20 20 20 73 65 74 20 70 61 72 ch].. set par
8600: 65 6e 74 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e ent [$root paren
8610: 74 5d 0a 09 20 20 20 20 73 65 74 20 63 68 69 6c t].. set chil
8620: 64 20 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d d [$root child]
8630: 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 20 6d ... ldelete m
8640: 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 yroots $root..
8650: 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 lappend myroot
8660: 73 20 24 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 s $child... $
8670: 62 72 61 6e 63 68 20 63 75 74 62 72 61 6e 63 68 branch cutbranch
8680: 70 61 72 65 6e 74 0a 09 20 20 20 20 24 62 72 61 parent.. $bra
8690: 6e 63 68 20 63 75 74 63 68 69 6c 64 0a 09 20 20 nch cutchild..
86a0: 20 20 24 63 68 69 6c 64 20 20 63 75 74 66 72 6f $child cutfro
86b0: 6d 70 61 72 65 6e 74 0a 0a 09 20 20 20 20 24 62 mparent... $b
86c0: 72 61 6e 63 68 20 73 65 74 63 68 69 6c 64 20 20 ranch setchild
86d0: 20 20 20 20 20 20 24 63 68 69 6c 64 0a 09 20 20 $child..
86e0: 20 20 24 63 68 69 6c 64 20 20 73 65 74 70 61 72 $child setpar
86f0: 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e 63 entbranch $branc
8700: 68 0a 0a 09 20 20 20 20 24 70 61 72 65 6e 74 20 h... $parent
8710: 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 20 removebranch
8720: 20 20 20 20 24 62 72 61 6e 63 68 0a 09 20 20 20 $branch..
8730: 20 24 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 $parent removec
8740: 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f hildonbranch $ro
8750: 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 ot..}..return.
8760: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
8770: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 LinesOfDevelopme
8780: 6e 74 20 7b 7d 20 7b 0a 09 23 20 44 65 74 65 72 nt {} {..# Deter
8790: 6d 69 6e 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f mine all lines o
87a0: 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f f development fo
87b0: 72 20 74 68 65 20 66 69 6c 65 2e 20 54 68 69 73 r the file. This
87c0: 20 61 72 65 0a 09 23 20 74 68 65 20 6b 6e 6f 77 are..# the know
87d0: 6e 20 72 6f 6f 74 73 2c 20 61 6e 64 20 74 68 65 n roots, and the
87e0: 20 72 6f 6f 74 20 6f 66 20 61 6c 6c 20 62 72 61 root of all bra
87f0: 6e 63 68 65 73 20 66 6f 75 6e 64 20 6f 6e 20 74 nches found on t
8800: 68 65 0a 09 23 20 6c 69 6e 65 20 6f 66 20 70 72 he..# line of pr
8810: 69 6d 61 72 79 20 63 68 69 6c 64 72 65 6e 2e 0a imary children..
8820: 0a 09 73 65 74 20 6c 6f 64 72 6f 6f 74 73 20 7b ..set lodroots {
8830: 7d 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 }..foreach root
8840: 24 6d 79 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 $myroots {..
8850: 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 $self AddBranche
8860: 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d dLinesOfDevelopm
8870: 65 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f ent lodroots $ro
8880: 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 ot.. lappend
8890: 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 lodroots $root..
88a0: 7d 0a 09 72 65 74 75 72 6e 20 24 6c 6f 64 72 6f }..return $lodro
88b0: 6f 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d ots. }.. m
88c0: 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63 68 65 ethod AddBranche
88d0: 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d dLinesOfDevelopm
88e0: 65 6e 74 20 7b 6c 76 20 72 6f 6f 74 7d 20 7b 0a ent {lv root} {.
88f0: 09 75 70 76 61 72 20 31 20 24 6c 76 20 6c 6f 64 .upvar 1 $lv lod
8900: 72 6f 6f 74 73 0a 09 77 68 69 6c 65 20 7b 24 72 roots..while {$r
8910: 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 oot ne ""} {..
8920: 20 20 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 foreach branch
8930: 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 [$root branches
8940: 5d 20 7b 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 ] {...if {![$bra
8950: 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 nch haschild]} c
8960: 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 63 68 ontinue...set ch
8970: 69 6c 64 20 5b 24 62 72 61 6e 63 68 20 63 68 69 ild [$branch chi
8980: 6c 64 5d 0a 09 09 23 20 52 65 63 75 72 73 65 20 ld]...# Recurse
8990: 69 6e 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20 into the branch
89a0: 66 6f 72 20 64 65 65 70 65 72 20 62 72 61 6e 63 for deeper branc
89b0: 68 65 73 2e 0a 09 09 24 73 65 6c 66 20 41 64 64 hes....$self Add
89c0: 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 BranchedLinesOfD
89d0: 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f evelopment lodro
89e0: 6f 74 73 20 24 63 68 69 6c 64 0a 09 09 6c 61 70 ots $child...lap
89f0: 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 24 63 pend lodroots $c
8a00: 68 69 6c 64 0a 09 20 20 20 20 7d 0a 09 20 20 20 hild.. }..
8a10: 20 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 set root [$root
8a20: 20 63 68 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 child]..}..retu
8a30: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
8a40: 74 68 6f 64 20 45 78 63 6c 75 64 65 4e 6f 6e 54 thod ExcludeNonT
8a50: 72 75 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 runkInformation
8a60: 7b 7d 20 7b 0a 09 23 20 52 65 6d 6f 76 65 20 61 {} {..# Remove a
8a70: 6c 6c 20 6e 6f 6e 2d 74 72 75 6e 6b 20 62 72 61 ll non-trunk bra
8a80: 6e 63 68 65 73 2c 20 72 65 76 69 73 69 6f 6e 73 nches, revisions
8a90: 2c 20 61 6e 64 20 74 61 67 73 2e 20 57 65 20 64 , and tags. We d
8aa0: 6f 0a 09 23 20 6b 65 65 70 20 74 68 65 20 74 61 o..# keep the ta
8ab0: 67 73 20 77 68 69 63 68 20 61 72 65 20 6f 6e 20 gs which are on
8ac0: 74 68 65 20 74 72 75 6e 6b 2e 0a 0a 09 73 65 74 the trunk....set
8ad0: 20 6e 74 64 62 72 6f 6f 74 20 22 22 0a 09 66 6f ntdbroot ""..fo
8ae0: 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c reach root [$sel
8af0: 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 f LinesOfDevelop
8b00: 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 23 20 4e ment] {.. # N
8b10: 6f 74 65 3a 20 48 65 72 65 20 74 68 65 20 6f 72 ote: Here the or
8b20: 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 73 der of the roots
8b30: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2c 0a 09 is important,..
8b40: 20 20 20 20 23 20 69 2e 65 2e 20 74 68 61 74 20 # i.e. that
8b50: 77 65 20 67 65 74 20 74 68 65 6d 20 69 6e 20 64 we get them in d
8b60: 65 70 74 68 20 66 69 72 73 74 20 6f 72 64 65 72 epth first order
8b70: 2e 20 54 68 69 73 20 65 6e 73 75 72 65 73 0a 09 . This ensures..
8b80: 20 20 20 20 23 20 74 68 61 74 20 74 68 65 20 72 # that the r
8b90: 65 6d 6f 76 61 6c 20 6f 66 20 61 20 62 72 61 6e emoval of a bran
8ba0: 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 ch happens only
8bb0: 61 66 74 65 72 20 74 68 65 0a 09 20 20 20 20 23 after the.. #
8bc0: 20 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 branches spawne
8bd0: 64 20 66 72 6f 6d 20 69 74 20 77 65 72 65 20 72 d from it were r
8be0: 65 6d 6f 76 65 64 2e 20 4f 74 68 65 72 77 69 73 emoved. Otherwis
8bf0: 65 20 74 68 65 0a 09 20 20 20 20 23 20 73 79 73 e the.. # sys
8c00: 74 65 6d 20 6d 69 67 68 74 20 74 72 79 20 74 6f tem might try to
8c10: 20 61 63 63 65 73 73 20 64 65 6c 65 74 65 64 20 access deleted
8c20: 6f 62 6a 65 63 74 73 2e 0a 0a 09 20 20 20 20 23 objects.... #
8c30: 20 44 6f 20 6e 6f 74 20 65 78 63 6c 75 64 65 20 Do not exclude
8c40: 74 68 65 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 the trunk...
8c50: 69 66 20 7b 5b 5b 24 72 6f 6f 74 20 6c 6f 64 5d if {[[$root lod]
8c60: 20 69 73 74 72 75 6e 6b 5d 7d 20 63 6f 6e 74 69 istrunk]} conti
8c70: 6e 75 65 0a 09 20 20 20 20 24 73 65 6c 66 20 45 nue.. $self E
8c80: 78 63 6c 75 64 65 42 72 61 6e 63 68 20 24 72 6f xcludeBranch $ro
8c90: 6f 74 20 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 0a ot ntdbroot..}..
8ca0: 09 69 66 20 7b 24 6e 74 64 62 72 6f 6f 74 20 6e .if {$ntdbroot n
8cb0: 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 73 65 e ""} {.. $se
8cc0: 6c 66 20 47 72 61 66 74 4e 54 44 42 32 54 72 75 lf GraftNTDB2Tru
8cd0: 6e 6b 20 24 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a nk $ntdbroot..}.
8ce0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
8cf0: 20 20 20 6d 65 74 68 6f 64 20 45 78 63 6c 75 64 method Exclud
8d00: 65 42 72 61 6e 63 68 20 7b 72 6f 6f 74 20 6e 76 eBranch {root nv
8d10: 7d 20 7b 0a 09 23 20 45 78 63 6c 75 64 65 20 74 } {..# Exclude t
8d20: 68 65 20 62 72 61 6e 63 68 2f 6c 6f 64 20 73 74 he branch/lod st
8d30: 61 72 74 69 6e 67 20 61 74 20 72 6f 6f 74 2c 20 arting at root,
8d40: 61 20 72 65 76 69 73 69 6f 6e 2e 0a 09 23 0a 09 a revision...#..
8d50: 23 20 49 66 20 74 68 65 20 4c 4f 44 20 73 74 61 # If the LOD sta
8d60: 72 74 73 20 77 69 74 68 20 6e 6f 6e 2d 74 72 75 rts with non-tru
8d70: 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 nk default branc
8d80: 68 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 23 20 h revisions,..#
8d90: 77 65 20 6c 65 61 76 65 20 74 68 65 6d 20 69 6e we leave them in
8da0: 20 70 6c 61 63 65 20 61 6e 64 20 64 6f 20 6e 6f place and do no
8db0: 74 20 64 65 6c 65 74 65 20 74 68 65 20 62 72 61 t delete the bra
8dc0: 6e 63 68 2e 20 49 6e 20 74 68 61 74 0a 09 23 20 nch. In that..#
8dd0: 63 61 73 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 case the command
8de0: 20 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62 sets the variab
8df0: 6c 65 20 69 6e 20 4e 56 20 73 6f 20 74 68 61 74 le in NV so that
8e00: 20 77 65 20 63 61 6e 0a 09 23 20 6c 61 74 65 72 we can..# later
8e10: 20 72 65 77 6f 72 6b 20 74 68 65 73 65 20 72 65 rework these re
8e20: 76 69 73 6f 6e 73 20 74 6f 20 62 65 20 70 75 72 visons to be pur
8e30: 65 6c 79 20 74 72 75 6e 6b 2e 0a 0a 09 69 66 20 ely trunk....if
8e40: 7b 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 65 66 61 {[$root isondefa
8e50: 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 20 ultbranch]} {..
8e60: 20 20 20 23 20 48 61 6e 64 6c 69 6e 67 20 61 20 # Handling a
8e70: 4e 54 44 42 2e 20 54 68 69 73 20 62 72 61 6e 63 NTDB. This branc
8e80: 68 20 6d 61 79 20 63 6f 6e 73 69 73 74 73 20 6e h may consists n
8e90: 6f 74 20 6f 6e 6c 79 20 6f 66 0a 09 20 20 20 20 ot only of..
8ea0: 23 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 73 # NTDB revisions
8eb0: 2c 20 62 75 74 20 61 6c 73 6f 20 73 6f 6d 65 20 , but also some
8ec0: 6e 6f 6e 2d 4e 54 44 42 2e 20 54 68 65 20 6c 61 non-NTDB. The la
8ed0: 74 74 65 72 20 61 72 65 0a 09 20 20 20 20 23 20 tter are.. #
8ee0: 74 72 75 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63 truly on a branc
8ef0: 68 20 61 6e 64 20 68 61 76 65 20 74 6f 20 62 65 h and have to be
8f00: 20 65 78 63 6c 75 64 65 64 2e 20 54 68 65 20 66 excluded. The f
8f10: 6f 6c 6c 6f 77 69 6e 67 0a 09 20 20 20 20 23 20 ollowing.. #
8f20: 6c 6f 6f 70 20 64 65 74 65 72 6d 69 6e 65 73 20 loop determines
8f30: 69 66 20 74 68 65 72 65 20 61 72 65 20 73 75 63 if there are suc
8f40: 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 h revisions....
8f50: 20 20 20 75 70 76 61 72 20 31 20 24 6e 76 20 6e upvar 1 $nv n
8f60: 74 64 62 72 6f 6f 74 0a 09 20 20 20 20 73 65 74 tdbroot.. set
8f70: 20 6e 74 64 62 72 6f 6f 74 20 24 72 6f 6f 74 0a ntdbroot $root.
8f80: 09 20 20 20 20 24 72 6f 6f 74 20 63 75 74 66 72 . $root cutfr
8f90: 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 0a 0a omparentbranch..
8fa0: 09 20 20 20 20 73 65 74 20 72 65 76 20 24 72 6f . set rev $ro
8fb0: 6f 74 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 ot.. while {$
8fc0: 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 24 rev ne ""} {...$
8fd0: 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 rev removeallbra
8fe0: 6e 63 68 65 73 0a 09 09 23 20 53 65 65 20 6e 6f nches...# See no
8ff0: 74 65 20 5b 78 5d 2e 0a 0a 09 09 69 66 20 7b 5b te [x].....if {[
9000: 24 72 65 76 20 69 73 6f 6e 64 65 66 61 75 6c 74 $rev isondefault
9010: 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 20 20 20 branch]} {...
9020: 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 set rev [$rev c
9030: 68 69 6c 64 5d 0a 09 09 7d 20 65 6c 73 65 20 7b hild]...} else {
9040: 0a 09 09 20 20 20 20 62 72 65 61 6b 0a 09 09 7d ... break...}
9050: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 .. }... #
9060: 72 65 76 20 6e 6f 77 20 63 6f 6e 74 61 69 6e 73 rev now contains
9070: 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e the first non-N
9080: 54 44 42 20 72 65 76 69 73 69 6f 6e 20 61 66 74 TDB revision aft
9090: 65 72 20 74 68 65 0a 09 20 20 20 20 23 20 4e 54 er the.. # NT
90a0: 44 42 2c 20 6f 72 20 69 73 20 65 6d 70 74 79 20 DB, or is empty
90b0: 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 if there is no s
90c0: 75 63 68 2e 20 49 66 20 77 65 20 68 61 76 65 20 uch. If we have
90d0: 73 6f 6d 65 0a 09 20 20 20 20 23 20 74 68 65 79 some.. # they
90e0: 20 68 61 76 65 20 74 6f 20 72 65 6d 6f 76 65 64 have to removed
90f0: 2e 0a 0a 09 20 20 20 20 69 66 20 7b 24 72 65 76 .... if {$rev
9100: 20 6e 65 20 22 22 7d 20 20 7b 0a 09 09 73 65 74 ne ""} {...set
9110: 20 6c 61 73 74 6e 74 64 62 20 5b 24 72 65 76 20 lastntdb [$rev
9120: 70 61 72 65 6e 74 5d 0a 09 09 24 6c 61 73 74 6e parent]...$lastn
9130: 74 64 62 20 63 75 74 66 72 6f 6d 63 68 69 6c 64 tdb cutfromchild
9140: 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 76 20 6e ...while {$rev n
9150: 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 24 72 e ""} {... $r
9160: 65 76 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 ev removealltags
9170: 0a 09 09 20 20 20 20 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: 20 20 20 20 23 20 4e 6f 74 65 20 5b 78 5d 3a 20 # Note [x]:
91a0: 57 65 20 6d 61 79 20 73 74 69 6c 6c 20 68 61 76 We may still hav
91b0: 65 20 68 61 64 20 62 72 61 6e 63 68 65 73 20 6f e had branches o
91c0: 6e 20 74 68 65 0a 09 09 20 20 20 20 23 20 72 65 n the... # re
91d0: 76 69 73 69 6f 6e 2e 20 42 72 61 6e 63 68 65 73 vision. Branches
91e0: 20 77 69 74 68 6f 75 74 20 72 65 76 69 73 69 6f without revisio
91f0: 6e 73 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 20 ns committed...
9200: 20 20 20 23 20 6f 6e 20 74 68 65 6d 20 64 6f 20 # on them do
9210: 6e 6f 74 20 73 68 6f 77 20 75 70 20 69 6e 20 74 not show up in t
9220: 68 65 20 6c 69 73 74 20 6f 66 20 72 6f 6f 74 73 he list of roots
9230: 20 61 6b 61 0a 09 09 20 20 20 20 23 20 6c 69 6e aka... # lin
9240: 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e es of developmen
9250: 74 2e 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 t.... set rev
9260: 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 [$rev child]...
9270: 7d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 72 65 }.. }.. re
9280: 74 75 72 6e 0a 09 7d 0a 0a 09 23 20 4e 6f 20 4e turn..}...# No N
9290: 54 44 42 20 73 74 75 66 66 20 74 6f 20 64 65 61 TDB stuff to dea
92a0: 6c 20 77 69 74 68 2e 20 46 69 72 73 74 20 64 65 l with. First de
92b0: 6c 65 74 65 20 74 68 65 20 62 72 61 6e 63 68 20 lete the branch
92c0: 6f 62 6a 65 63 74 0a 09 23 20 69 74 73 65 6c 66 object..# itself
92d0: 2c 20 61 66 74 65 72 20 63 75 74 74 69 6e 67 20 , after cutting
92e0: 61 6c 6c 20 74 68 65 20 76 61 72 69 6f 75 73 20 all the various
92f0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0a 0a 09 73 connections....s
9300: 65 74 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 et branch [$root
9310: 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 parentbranch]..
9320: 69 66 20 7b 24 62 72 61 6e 63 68 20 6e 65 20 22 if {$branch ne "
9330: 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 62 72 "} {.. set br
9340: 61 6e 63 68 70 61 72 65 6e 74 20 5b 24 62 72 61 anchparent [$bra
9350: 6e 63 68 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 nch parent]..
9360: 20 24 62 72 61 6e 63 68 70 61 72 65 6e 74 20 72 $branchparent r
9370: 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 20 20 emovebranch
9380: 20 20 20 24 62 72 61 6e 63 68 0a 09 20 20 20 20 $branch..
9390: 24 62 72 61 6e 63 68 70 61 72 65 6e 74 20 72 65 $branchparent re
93a0: 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 movechildonbranc
93b0: 68 20 24 72 6f 6f 74 0a 09 7d 0a 0a 09 23 20 54 h $root..}...# T
93c0: 68 65 20 72 6f 6f 74 20 69 73 20 6e 6f 20 73 75 he root is no su
93d0: 63 68 20 61 6e 79 20 6c 6f 6e 67 65 72 20 65 69 ch any longer ei
93e0: 74 68 65 72 2e 0a 09 6c 64 65 6c 65 74 65 20 6d ther...ldelete m
93f0: 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 0a 09 23 yroots $root...#
9400: 20 4e 6f 77 20 67 6f 20 74 68 72 6f 75 67 68 20 Now go through
9410: 74 68 65 20 6c 69 6e 65 20 61 6e 64 20 72 65 6d the line and rem
9420: 6f 76 65 20 61 6c 6c 20 69 74 73 20 72 65 76 69 ove all its revi
9430: 73 69 6f 6e 73 2e 0a 0a 09 77 68 69 6c 65 20 7b sions....while {
9440: 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 $root ne ""} {..
9450: 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 $root remove
9460: 61 6c 6c 74 61 67 73 0a 09 20 20 20 20 24 72 6f alltags.. $ro
9470: 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e ot removeallbran
9480: 63 68 65 73 0a 09 20 20 20 20 23 20 4e 6f 74 65 ches.. # Note
9490: 3a 20 53 65 65 20 74 68 65 20 6e 6f 74 65 20 5b : See the note [
94a0: 78 5d 2e 0a 0a 09 20 20 20 20 23 20 46 72 6f 6d x].... # From
94b0: 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74 68 69 cvs2svn: If thi
94c0: 73 20 69 73 20 74 68 65 20 6c 61 73 74 20 64 65 s is the last de
94d0: 66 61 75 6c 74 20 72 65 76 69 73 69 6f 6e 20 6f fault revision o
94e0: 6e 20 61 0a 09 20 20 20 20 23 20 6e 6f 6e 2d 74 n a.. # non-t
94f0: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 runk default bra
9500: 6e 63 68 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 nch followed by
9510: 61 20 31 2e 32 20 72 65 76 69 73 69 6f 6e 2c 0a a 1.2 revision,.
9520: 09 20 20 20 20 23 20 74 68 65 6e 20 74 68 65 20 . # then the
9530: 31 2e 32 20 72 65 76 69 73 69 6f 6e 20 64 65 70 1.2 revision dep
9540: 65 6e 64 73 20 6f 6e 20 74 68 69 73 20 6f 6e 65 ends on this one
9550: 2e 20 20 46 49 58 4d 45 3a 20 49 74 20 69 73 0a . FIXME: It is.
9560: 09 20 20 20 20 23 20 71 75 65 73 74 69 6f 6e 61 . # questiona
9570: 62 6c 65 20 77 68 65 74 68 65 72 20 74 68 69 73 ble whether this
9580: 20 68 61 6e 64 6c 69 6e 67 20 69 73 20 63 6f 72 handling is cor
9590: 72 65 63 74 2c 20 73 69 6e 63 65 20 74 68 65 0a rect, since the.
95a0: 09 20 20 20 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b . # non-trunk
95b0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 default branch
95c0: 72 65 76 69 73 69 6f 6e 73 20 61 66 66 65 63 74 revisions affect
95d0: 20 74 72 75 6e 6b 20 61 6e 64 0a 09 20 20 20 20 trunk and..
95e0: 23 20 73 68 6f 75 6c 64 20 74 68 65 72 65 66 6f # should therefo
95f0: 72 65 20 6e 6f 74 20 6a 75 73 74 20 62 65 20 64 re not just be d
9600: 69 73 63 61 72 64 65 64 20 65 76 65 6e 20 69 66 iscarded even if
9610: 0a 09 20 20 20 20 23 20 2d 2d 74 72 75 6e 6b 2d .. # --trunk-
9620: 6f 6e 6c 79 2e 0a 0a 09 20 20 20 20 69 66 20 7b only.... if {
9630: 5b 24 72 6f 6f 74 20 68 61 73 64 65 66 61 75 6c [$root hasdefaul
9640: 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 7d 20 7b tbranchchild]} {
9650: 0a 09 09 73 65 74 20 6e 74 64 62 63 68 69 6c 64 ...set ntdbchild
9660: 20 5b 24 72 6f 6f 74 20 64 65 66 61 75 6c 74 62 [$root defaultb
9670: 72 61 6e 63 68 63 68 69 6c 64 5d 0a 09 09 69 6e ranchchild]...in
9680: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
9690: 0a 09 09 20 20 20 20 5b 24 6e 74 64 62 63 68 69 ... [$ntdbchi
96a0: 6c 64 20 64 65 66 61 75 6c 74 62 72 61 6e 63 68 ld defaultbranch
96b0: 70 61 72 65 6e 74 5d 20 65 71 20 24 6e 74 64 62 parent] eq $ntdb
96c0: 63 68 69 6c 64 0a 09 09 7d 20 7b 6e 74 64 62 20 child...} {ntdb
96d0: 2d 20 74 72 75 6e 6b 20 6c 69 6e 6b 61 67 65 20 - trunk linkage
96e0: 62 72 6f 6b 65 6e 7d 0a 09 09 24 6e 74 64 62 63 broken}...$ntdbc
96f0: 68 69 6c 64 20 63 75 74 64 65 66 61 75 6c 74 62 hild cutdefaultb
9700: 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 09 69 66 ranchparent...if
9710: 20 7b 5b 24 6e 74 64 62 63 68 69 6c 64 20 68 61 {[$ntdbchild ha
9720: 73 70 61 72 65 6e 74 5d 7d 20 7b 0a 09 09 20 20 sparent]} {...
9730: 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 lappend myroot
9740: 73 20 5b 24 6e 74 64 62 63 68 69 6c 64 20 70 61 s [$ntdbchild pa
9750: 72 65 6e 74 5d 0a 09 09 7d 0a 09 20 20 20 20 7d rent]...}.. }
9760: 0a 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74 20 ... set root
9770: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d [$root child]..}
9780: 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a ...return. }.
9790: 0a 20 20 20 20 6d 65 74 68 6f 64 20 47 72 61 66 . method Graf
97a0: 74 4e 54 44 42 32 54 72 75 6e 6b 20 7b 72 6f 6f tNTDB2Trunk {roo
97b0: 74 7d 20 7b 0a 09 23 20 57 65 20 63 61 6e 20 6e t} {..# We can n
97c0: 6f 77 20 67 72 61 66 74 20 74 68 65 20 6e 6f 6e ow graft the non
97d0: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 -trunk default b
97e0: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 20 ranch revisions
97f0: 74 6f 0a 09 23 20 74 72 75 6e 6b 2e 20 54 68 65 to..# trunk. The
9800: 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64 79 y should already
9810: 20 62 65 20 61 6c 6f 6e 65 20 6f 6e 20 61 20 43 be alone on a C
9820: 56 53 42 72 61 6e 63 68 2d 6c 65 73 73 0a 09 23 VSBranch-less..#
9830: 20 62 72 61 6e 63 68 2e 0a 0a 09 69 6e 74 65 67 branch....integ
9840: 72 69 74 79 20 61 73 73 65 72 74 20 7b 21 5b 24 rity assert {![$
9850: 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 62 72 root hasparentbr
9860: 61 6e 63 68 5d 7d 20 7b 4e 54 44 42 20 72 6f 6f anch]} {NTDB roo
9870: 74 20 73 74 69 6c 6c 20 68 61 73 20 69 74 73 20 t still has its
9880: 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 7d 0a 09 branch symbol}..
9890: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 integrity assert
98a0: 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73 62 72 61 {![$root hasbra
98b0: 6e 63 68 65 73 5d 7d 20 20 20 20 20 7b 4e 54 44 nches]} {NTD
98c0: 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73 B root still has
98d0: 20 73 70 61 77 6e 65 64 20 62 72 61 6e 63 68 65 spawned branche
98e0: 73 7d 0a 0a 09 73 65 74 20 6c 61 73 74 20 24 72 s}...set last $r
98f0: 6f 6f 74 0a 09 77 68 69 6c 65 20 7b 5b 24 6c 61 oot..while {[$la
9900: 73 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 73 st haschild]} {s
9910: 65 74 20 6c 61 73 74 20 5b 24 6c 61 73 74 20 63 et last [$last c
9920: 68 69 6c 64 5d 7d 0a 0a 09 69 66 20 7b 5b 24 6c hild]}...if {[$l
9930: 61 73 74 20 68 61 73 64 65 66 61 75 6c 74 62 72 ast hasdefaultbr
9940: 61 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 0a 09 anchchild]} {...
9950: 20 20 20 20 73 65 74 20 72 65 76 31 32 20 5b 24 set rev12 [$
9960: 6c 61 73 74 20 64 65 66 61 75 6c 74 62 72 61 6e last defaultbran
9970: 63 68 63 68 69 6c 64 5d 0a 09 20 20 20 20 24 72 chchild].. $r
9980: 65 76 31 32 20 63 75 74 64 65 66 61 75 6c 74 62 ev12 cutdefaultb
9990: 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 20 20 20 ranchparent..
99a0: 20 24 6c 61 73 74 20 20 63 75 74 64 65 66 61 75 $last cutdefau
99b0: 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 0a 0a 09 ltbranchchild...
99c0: 20 20 20 20 24 72 65 76 31 32 20 63 68 61 6e 67 $rev12 chang
99d0: 65 70 61 72 65 6e 74 20 24 6c 61 73 74 0a 09 20 eparent $last..
99e0: 20 20 20 24 6c 61 73 74 20 20 63 68 61 6e 67 65 $last change
99f0: 63 68 69 6c 64 20 24 72 65 76 31 32 0a 0a 09 20 child $rev12...
9a00: 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f ldelete myroo
9a10: 74 73 20 24 72 65 76 31 32 0a 0a 09 20 20 20 20 ts $rev12...
9a20: 23 20 4e 6f 74 65 20 61 6e 64 20 72 65 6d 65 6d # Note and remem
9a30: 62 65 72 20 74 68 61 74 20 74 68 65 20 74 79 70 ber that the typ
9a40: 65 20 6f 66 20 72 65 76 31 32 20 77 61 73 20 61 e of rev12 was a
9a50: 6c 72 65 61 64 79 0a 09 20 20 20 20 23 20 61 64 lready.. # ad
9a60: 6a 75 73 74 65 64 20 62 79 20 41 64 6a 75 73 74 justed by Adjust
9a70: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 NonTrunkDefaultB
9a80: 72 61 6e 63 68 2c 20 73 6f 20 77 65 20 64 6f 6e ranch, so we don
9a90: 27 74 0a 09 20 20 20 20 23 20 68 61 76 65 20 74 't.. # have t
9aa0: 6f 20 63 68 61 6e 67 65 20 69 74 73 20 74 79 70 o change its typ
9ab0: 65 20 68 65 72 65 2e 0a 09 7d 0a 0a 09 77 68 69 e here...}...whi
9ac0: 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d le {$root ne ""}
9ad0: 20 7b 0a 09 20 20 20 20 24 72 6f 6f 74 20 73 65 {.. $root se
9ae0: 74 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 tondefaultbranch
9af0: 20 30 0a 09 20 20 20 20 24 72 6f 6f 74 20 73 65 0.. $root se
9b00: 74 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 tlod $mytrunk..
9b10: 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 5b foreach tag [
9b20: 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09 $root tags] {...
9b30: 24 74 61 67 20 73 65 74 6c 6f 64 20 24 6d 79 74 $tag setlod $myt
9b40: 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 09 20 20 20 runk.. }..
9b50: 20 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 set root [$root
9b60: 20 63 68 69 6c 64 5d 0a 09 7d 0a 0a 20 20 20 20 child]..}..
9b70: 20 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 7d return. }
9b80: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 63 74 .. method Act
9b90: 69 76 65 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 ive {} {..set re
9ba0: 76 69 73 69 6f 6e 73 20 7b 7d 0a 09 73 65 74 20 visions {}..set
9bb0: 73 79 6d 62 6f 6c 73 20 20 20 7b 7d 0a 0a 09 66 symbols {}...f
9bc0: 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 oreach root [$se
9bd0: 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f lf LinesOfDevelo
9be0: 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 pment] {.. if
9bf0: 20 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65 {[$root haspare
9c00: 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 20 6c 61 70 ntbranch]} { lap
9c10: 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 5b 24 72 pend symbols [$r
9c20: 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 oot parentbranch
9c30: 5d 20 7d 0a 09 20 20 20 20 77 68 69 6c 65 20 7b ] }.. while {
9c40: 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 $root ne ""} {..
9c50: 09 6c 61 70 70 65 6e 64 20 72 65 76 69 73 69 6f .lappend revisio
9c60: 6e 73 20 24 72 6f 6f 74 0a 09 09 66 6f 72 65 61 ns $root...forea
9c70: 63 68 20 74 61 67 20 20 20 20 5b 24 72 6f 6f 74 ch tag [$root
9c80: 20 74 61 67 73 5d 20 20 20 20 20 7b 20 6c 61 70 tags] { lap
9c90: 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 74 61 pend symbols $ta
9ca0: 67 20 20 20 20 7d 0a 09 09 66 6f 72 65 61 63 68 g }...foreach
9cb0: 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 branch [$root b
9cc0: 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 20 20 20 ranches] {...
9cd0: 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 integrity asser
9ce0: 74 20 7b 0a 09 09 09 5b 24 62 72 61 6e 63 68 20 t {....[$branch
9cf0: 70 61 72 65 6e 74 5d 20 65 71 20 24 72 6f 6f 74 parent] eq $root
9d00: 0a 09 09 20 20 20 20 7d 20 7b 42 61 63 6b 72 65 ... } {Backre
9d10: 66 65 72 65 6e 63 65 20 62 72 61 6e 63 68 20 74 ference branch t
9d20: 6f 20 69 74 73 20 72 6f 6f 74 20 69 73 20 6d 69 o its root is mi
9d30: 73 73 69 6e 67 20 6f 72 20 77 72 6f 6e 67 7d 0a ssing or wrong}.
9d40: 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 73 79 .. lappend sy
9d50: 6d 62 6f 6c 73 20 24 62 72 61 6e 63 68 0a 09 09 mbols $branch...
9d60: 7d 0a 09 09 73 65 74 20 6c 6f 64 20 5b 24 72 6f }...set lod [$ro
9d70: 6f 74 20 6c 6f 64 5d 0a 09 09 69 66 20 7b 21 5b ot lod]...if {![
9d80: 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 7d 20 7b $lod istrunk]} {
9d90: 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 ... integrity
9da0: 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b 24 6c assert {....[$l
9db0: 6f 64 20 68 61 73 63 68 69 6c 64 5d 0a 09 09 20 od haschild]...
9dc0: 20 20 20 7d 20 7b 42 72 61 6e 63 68 20 69 73 20 } {Branch is
9dd0: 4c 4f 44 20 73 79 6d 62 6f 6c 20 77 69 74 68 6f LOD symbol witho
9de0: 75 74 20 72 65 76 69 73 69 6f 6e 73 7d 0a 09 09 ut revisions}...
9df0: 20 20 20 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 lappend symb
9e00: 6f 6c 73 20 24 6c 6f 64 0a 09 09 7d 0a 09 09 73 ols $lod...}...s
9e10: 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 et root [$root c
9e20: 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a hild].. }..}.
9e30: 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b ..return [list [
9e40: 6c 73 6f 72 74 20 2d 75 6e 69 71 75 65 20 2d 64 lsort -unique -d
9e50: 69 63 74 20 24 72 65 76 69 73 69 6f 6e 73 5d 20 ict $revisions]
9e60: 5b 6c 73 6f 72 74 20 2d 75 6e 69 71 75 65 20 2d [lsort -unique -
9e70: 64 69 63 74 20 24 73 79 6d 62 6f 6c 73 5d 5d 0a dict $symbols]].
9e80: 20 20 20 20 7d 0a 0a 0a 20 20 20 20 6d 65 74 68 }... meth
9e90: 6f 64 20 41 67 67 72 65 67 61 74 65 53 79 6d 62 od AggregateSymb
9ea0: 6f 6c 44 61 74 61 20 7b 7d 20 7b 0a 09 23 20 4e olData {} {..# N
9eb0: 6f 77 20 74 68 61 74 20 74 68 65 20 65 78 61 63 ow that the exac
9ec0: 74 20 73 65 74 20 6f 66 20 72 65 76 69 73 69 6f t set of revisio
9ed0: 6e 73 20 28 61 6e 64 20 74 68 72 6f 75 67 68 20 ns (and through
9ee0: 74 68 61 74 0a 09 23 20 62 72 61 6e 63 68 65 73 that..# branches
9ef0: 20 61 6e 64 20 74 61 67 73 29 20 69 73 20 6b 6e and tags) is kn
9f00: 6f 77 6e 20 77 65 20 63 61 6e 20 75 70 64 61 74 own we can updat
9f10: 65 20 74 68 65 20 61 67 67 72 65 67 61 74 65 0a e the aggregate.
9f20: 09 23 20 73 79 6d 62 6f 6c 20 73 74 61 74 69 73 .# symbol statis
9f30: 74 69 63 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 tics....foreach
9f40: 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 root [$self Line
9f50: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 sOfDevelopment]
9f60: 7b 0a 09 20 20 20 20 73 65 74 20 6c 6f 64 20 5b {.. set lod [
9f70: 24 72 6f 6f 74 20 6c 6f 64 5d 0a 0a 09 20 20 20 $root lod]...
9f80: 20 23 20 4e 6f 74 65 3a 20 49 66 20 74 68 65 20 # Note: If the
9f90: 4c 4f 44 20 69 73 20 74 68 65 20 74 72 75 6e 6b LOD is the trunk
9fa0: 20 74 68 65 20 63 6f 75 6e 74 2a 2c 20 65 74 63 the count*, etc
9fb0: 2e 20 6d 65 74 68 6f 64 73 0a 09 20 20 20 20 23 . methods.. #
9fc0: 20 77 69 6c 6c 20 64 6f 20 6e 6f 74 68 69 6e 67 will do nothing
9fd0: 2c 20 61 73 20 69 74 20 69 73 20 61 6c 77 61 79 , as it is alway
9fe0: 73 20 70 72 65 73 65 6e 74 20 28 63 61 6e 6e 6f s present (canno
9ff0: 74 20 62 65 0a 09 20 20 20 20 23 20 65 78 63 6c t be.. # excl
a000: 75 64 65 64 29 2c 20 61 6e 64 20 69 73 20 61 6c uded), and is al
a010: 77 61 79 73 20 61 20 62 72 61 6e 63 68 20 74 6f ways a branch to
a020: 6f 2e 0a 0a 09 20 20 20 20 23 20 4c 69 6e 65 73 o.... # Lines
a030: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 of development
a040: 63 6f 75 6e 74 20 61 73 20 62 72 61 6e 63 68 65 count as branche
a050: 73 20 61 6e 64 20 68 61 76 65 20 61 20 63 6f 6d s and have a com
a060: 6d 69 74 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 mit.. # on th
a070: 65 6d 20 28 72 6f 6f 74 29 2e 20 49 66 20 74 68 em (root). If th
a080: 65 79 20 61 72 65 20 73 74 69 6c 6c 20 61 74 74 ey are still att
a090: 61 63 68 65 64 20 74 6f 20 61 20 74 72 65 65 20 ached to a tree
a0a0: 77 65 0a 09 20 20 20 20 23 20 68 61 76 65 20 74 we.. # have t
a0b0: 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20 72 65 o compute and re
a0c0: 67 69 73 74 65 72 20 70 6f 73 73 69 62 6c 65 20 gister possible
a0d0: 70 61 72 65 6e 74 73 2e 0a 0a 09 20 20 20 20 24 parents.... $
a0e0: 6c 6f 64 20 63 6f 75 6e 74 61 73 62 72 61 6e 63 lod countasbranc
a0f0: 68 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e h.. $lod coun
a100: 74 61 63 6f 6d 6d 69 74 0a 0a 09 20 20 20 20 69 tacommit... i
a110: 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 f {[$root haspar
a120: 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 entbranch]} {...
a130: 23 20 4e 6f 74 65 20 6c 6f 64 20 3d 3d 20 5b 24 # Note lod == [$
a140: 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63 root parentbranc
a150: 68 5d 0a 09 09 24 6c 6f 64 20 70 6f 73 73 69 62 h]...$lod possib
a160: 6c 65 70 61 72 65 6e 74 73 0a 09 20 20 20 20 7d leparents.. }
a170: 20 65 6c 73 65 69 66 20 7b 21 5b 24 6c 6f 64 20 elseif {![$lod
a180: 69 73 74 72 75 6e 6b 5d 20 26 26 20 5b 24 72 6f istrunk] && [$ro
a190: 6f 74 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 ot isondefaultbr
a1a0: 61 6e 63 68 5d 7d 20 7b 0a 09 09 23 20 54 68 69 anch]} {...# Thi
a1b0: 73 20 69 73 20 74 68 65 20 72 6f 6f 74 20 72 65 s is the root re
a1c0: 76 69 73 69 6f 6e 20 6f 66 20 61 20 64 65 74 61 vision of a deta
a1d0: 63 68 65 64 20 4e 54 44 42 2e 20 57 65 0a 09 09 ched NTDB. We...
a1e0: 23 20 68 61 76 65 20 74 6f 20 6d 61 6e 75 61 6c # have to manual
a1f0: 6c 79 20 73 65 74 20 74 68 65 20 6f 6e 6c 79 20 ly set the only
a200: 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 20 possible parent
a210: 66 6f 72 0a 09 09 23 20 74 68 69 73 20 4c 4f 44 for...# this LOD
a220: 2c 20 74 68 65 20 74 72 75 6e 6b 20 69 74 73 65 , the trunk itse
a230: 6c 66 2e 0a 0a 09 09 5b 24 6c 6f 64 20 73 79 6d lf.....[$lod sym
a240: 62 6f 6c 5d 20 70 6f 73 73 69 62 6c 65 70 61 72 bol] possiblepar
a250: 65 6e 74 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 ent $mytrunk..
a260: 20 20 7d 0a 0a 09 20 20 20 20 23 20 46 6f 72 20 }... # For
a270: 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 69 6e the revisions in
a280: 20 74 68 65 20 6c 69 6e 65 20 77 65 20 72 65 67 the line we reg
a290: 69 73 74 65 72 20 74 68 65 69 72 20 62 72 61 6e ister their bran
a2a0: 63 68 65 73 0a 09 20 20 20 20 23 20 61 6e 64 20 ches.. # and
a2b0: 74 61 67 73 20 61 73 20 62 6c 6f 63 6b 65 72 73 tags as blockers
a2c0: 20 66 6f 72 20 74 68 65 20 6c 6f 64 2c 20 61 6e for the lod, an
a2d0: 64 20 75 70 64 61 74 65 20 74 68 65 20 74 79 70 d update the typ
a2e0: 65 0a 09 20 20 20 20 23 20 63 6f 75 6e 74 65 72 e.. # counter
a2f0: 73 20 61 73 20 77 65 6c 6c 2e 20 41 73 20 62 72 s as well. As br
a300: 61 6e 63 68 20 73 79 6d 62 6f 6c 73 20 77 69 74 anch symbols wit
a310: 68 6f 75 74 20 63 6f 6d 6d 69 74 73 20 6f 6e 0a hout commits on.
a320: 09 20 20 20 20 23 20 74 68 65 6d 20 61 72 65 20 . # them are
a330: 6e 6f 74 20 6c 69 73 74 65 64 20 61 73 20 6c 69 not listed as li
a340: 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 nes of developme
a350: 6e 74 2c 20 77 65 20 68 61 76 65 20 74 6f 0a 09 nt, we have to..
a360: 20 20 20 20 23 20 63 6f 75 6e 74 20 74 68 65 6d # count them
a370: 20 68 65 72 65 20 61 73 20 77 65 6c 6c 2c 20 61 here as well, a
a380: 73 20 70 6c 61 69 6e 20 62 72 61 6e 63 68 65 73 s plain branches
a390: 2e 20 41 74 20 6c 61 73 74 20 77 65 0a 09 20 20 . At last we..
a3a0: 20 20 23 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 # have to comp
a3b0: 75 74 65 20 61 6e 64 20 72 65 67 69 73 74 65 72 ute and register
a3c0: 20 74 68 65 20 70 6f 73 73 69 62 6c 65 20 70 61 the possible pa
a3d0: 72 65 6e 74 73 20 6f 66 20 74 68 65 0a 09 20 20 rents of the..
a3e0: 20 20 23 20 74 61 67 73 2c 20 69 6e 20 63 61 73 # tags, in cas
a3f0: 65 20 74 68 65 79 20 61 72 65 20 6c 61 74 65 72 e they are later
a400: 20 63 6f 6e 76 65 72 74 65 64 20 61 73 20 62 72 converted as br
a410: 61 6e 63 68 65 73 2e 0a 0a 09 20 20 20 20 77 68 anches.... wh
a420: 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 ile {$root ne ""
a430: 7d 20 7b 0a 09 09 66 6f 72 65 61 63 68 20 62 72 } {...foreach br
a440: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e anch [$root bran
a450: 63 68 65 73 5d 20 7b 0a 09 09 20 20 20 20 24 6c ches] {... $l
a460: 6f 64 20 62 6c 6f 63 6b 65 64 62 79 20 24 62 72 od blockedby $br
a470: 61 6e 63 68 0a 09 09 20 20 20 20 24 62 72 61 6e anch... $bran
a480: 63 68 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e ch possibleparen
a490: 74 73 0a 09 09 20 20 20 20 69 66 20 7b 5b 24 62 ts... if {[$b
a4a0: 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d ranch haschild]}
a4b0: 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20 20 20 continue...
a4c0: 24 62 72 61 6e 63 68 20 63 6f 75 6e 74 61 73 62 $branch countasb
a4d0: 72 61 6e 63 68 0a 09 09 7d 0a 0a 09 09 66 6f 72 ranch...}....for
a4e0: 65 61 63 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 each tag [$root
a4f0: 74 61 67 73 5d 20 7b 0a 09 09 20 20 20 20 24 6c tags] {... $l
a500: 6f 64 20 62 6c 6f 63 6b 65 64 62 79 20 24 74 61 od blockedby $ta
a510: 67 0a 09 09 20 20 20 20 24 74 61 67 20 70 6f 73 g... $tag pos
a520: 73 69 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 sibleparents...
a530: 20 20 20 24 74 61 67 20 63 6f 75 6e 74 61 73 74 $tag countast
a540: 61 67 0a 09 09 7d 0a 0a 09 09 73 65 74 20 72 6f ag...}....set ro
a550: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d ot [$root child]
a560: 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 .. }..}...ret
a570: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 urn. }.. #
a580: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
a590: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
a5a0: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f ######. ## Co
a5b0: 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 nfiguration..
a5c0: 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 pragma -hastype
a5d0: 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 info no ; #
a5e0: 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65 no type introspe
a5f0: 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 ction. pragma
a600: 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20 -hasinfo
a610: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 no ; # no obje
a620: 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e ct introspection
a630: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 . pragma -has
a640: 74 79 70 65 6d 65 74 68 6f 64 73 20 6e 6f 20 20 typemethods no
a650: 3b 20 23 20 74 79 70 65 20 69 73 20 6e 6f 74 20 ; # type is not
a660: 72 65 6c 65 76 61 6e 74 2e 0a 0a 20 20 20 20 23 relevant... #
a670: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
a680: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
a690: 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 ######.}..namesp
a6a0: 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 ace eval ::vc::f
a6b0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
a6c0: 76 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 vs {. namespa
a6d0: 63 65 20 65 78 70 6f 72 74 20 66 69 6c 65 0a 20 ce export file.
a6e0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 namespace eva
a6f0: 6c 20 66 69 6c 65 20 7b 0a 09 23 20 49 6d 70 6f l file {..# Impo
a700: 72 74 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2c rt not required,
a710: 20 61 6c 72 65 61 64 79 20 61 20 63 68 69 6c 64 already a child
a720: 20 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23 20 6e namespace...# n
a730: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
a740: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
a750: 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a port::cvs::file:
a760: 3a 72 65 76 0a 09 23 20 6e 61 6d 65 73 70 61 63 :rev..# namespac
a770: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
a780: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
a790: 76 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 0a 09 6e vs::file::sym..n
a7a0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
a7b0: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 ::vc::tools::mis
a7c0: 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20 c::*..namespace
a7d0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f import ::vc::too
a7e0: 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 6d ls::trouble..nam
a7f0: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import ::
a800: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 vc::tools::log..
a810: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
a820: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
a830: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 mport::cvs::stat
a840: 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 e..namespace imp
a850: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c ort ::vc::fossil
a860: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 ::import::cvs::i
a870: 6e 74 65 67 72 69 74 79 0a 09 6e 61 6d 65 73 70 ntegrity..namesp
a880: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
a890: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
a8a0: 3a 63 76 73 3a 3a 67 74 63 6f 72 65 0a 20 20 20 :cvs::gtcore.
a8b0: 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 }.}..# # ## ###
a8c0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
a8d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 ############# ##
a8e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
a8f0: 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 ###.## Ready..pa
a900: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 ckage provide vc
a910: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 ::fossil::import
a920: 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a ::cvs::file 1.0.
a930: 72 65 74 75 72 6e 0a return.