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 76 63 3a 3a 66 6f 73 require vc::fos
0390: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
03a0: 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 20 3b 20 23 ::file::rev ; #
03b0: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 72 65 CVS per file re
03c0: 76 69 73 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 visions..package
03d0: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 require vc::fos
03e0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
03f0: 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 3b 20 23 ::file::sym ; #
0400: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 73 79 CVS per file sy
0410: 6d 62 6f 6c 73 2e 0a 70 61 63 6b 61 67 65 20 72 mbols..package r
0420: 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 equire vc::fossi
0430: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a l::import::cvs::
0440: 73 74 61 74 65 20 20 20 20 20 20 3b 20 23 20 53 state ; # S
0450: 74 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 tate storage..pa
0460: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 ckage require vc
0470: 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 ::tools::trouble
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0490: 20 20 3b 20 23 20 45 72 72 6f 72 20 72 65 70 6f ; # Error repo
04a0: 72 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72 rting..package r
04b0: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 equire vc::tools
04c0: 3a 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20 ::log
04d0: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 55 ; # U
04e0: 73 65 72 20 66 65 65 64 62 61 63 6b 0a 70 61 63 ser feedback.pac
04f0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a kage require vc:
0500: 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 20 :tools::misc
0510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0520: 20 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61 74 ; # Text format
0530: 74 69 6e 67 0a 0a 23 20 23 20 23 23 20 23 23 23 ting..# # ## ###
0540: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
0550: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 ############# ##
0560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0570: 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74 3a 3a 74 ###.## ..snit::t
0580: 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c ype ::vc::fossil
0590: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 ::import::cvs::f
05a0: 69 6c 65 20 7b 0a 20 20 20 20 23 20 23 20 23 23 ile {. # # ##
05b0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
05c0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
05d0: 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63 20 #. ## Public
05e0: 41 50 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72 75 API.. constru
05f0: 63 74 6f 72 20 7b 69 64 20 70 61 74 68 20 75 73 ctor {id path us
0600: 72 70 61 74 68 20 65 78 65 63 75 74 61 62 6c 65 rpath executable
0610: 20 70 72 6f 6a 65 63 74 7d 20 7b 0a 09 73 65 74 project} {..set
0620: 20 6d 79 69 64 20 20 20 20 20 20 20 20 20 24 69 myid $i
0630: 64 0a 09 73 65 74 20 6d 79 70 61 74 68 20 20 20 d..set mypath
0640: 20 20 20 20 24 70 61 74 68 0a 09 73 65 74 20 6d $path..set m
0650: 79 75 73 72 70 61 74 68 20 20 20 20 24 75 73 72 yusrpath $usr
0660: 70 61 74 68 0a 09 73 65 74 20 6d 79 65 78 65 63 path..set myexec
0670: 75 74 61 62 6c 65 20 24 65 78 65 63 75 74 61 62 utable $executab
0680: 6c 65 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 63 le..set myprojec
0690: 74 20 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73 t $project..s
06a0: 65 74 20 6d 79 74 72 75 6e 6b 20 20 20 20 20 20 et mytrunk
06b0: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e [$myproject trun
06c0: 6b 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d k]..return. }
06d0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 .. method set
06e0: 69 64 20 7b 69 64 7d 20 7b 0a 09 69 66 20 7b 24 id {id} {..if {$
06f0: 6d 79 69 64 20 6e 65 20 22 22 7d 20 7b 20 74 72 myid ne ""} { tr
0700: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 ouble internal "
0710: 46 69 6c 65 20 27 24 6d 79 70 61 74 68 27 20 61 File '$mypath' a
0720: 6c 72 65 61 64 79 20 68 61 73 20 61 6e 20 69 64 lready has an id
0730: 2c 20 27 24 6d 79 69 64 27 22 20 7d 0a 09 73 65 , '$myid'" }..se
0740: 74 20 6d 79 69 64 20 24 69 64 0a 09 72 65 74 75 t myid $id..retu
0750: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
0760: 74 68 6f 64 20 69 64 20 20 20 20 20 20 7b 7d 20 thod id {}
0770: 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 64 20 7d { return $myid }
0780: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 61 74 68 . method path
0790: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 {} { return
07a0: 24 6d 79 70 61 74 68 20 7d 0a 20 20 20 20 6d 65 $mypath }. me
07b0: 74 68 6f 64 20 75 73 72 70 61 74 68 20 7b 7d 20 thod usrpath {}
07c0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 75 73 72 70 { return $myusrp
07d0: 61 74 68 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 ath }. method
07e0: 20 70 72 6f 6a 65 63 74 20 7b 7d 20 7b 20 72 65 project {} { re
07f0: 74 75 72 6e 20 24 6d 79 70 72 6f 6a 65 63 74 20 turn $myproject
0800: 7d 0a 0a 20 20 20 20 64 65 6c 65 67 61 74 65 20 }.. delegate
0810: 6d 65 74 68 6f 64 20 63 6f 6d 6d 69 74 6d 65 73 method commitmes
0820: 73 61 67 65 6f 66 20 74 6f 20 6d 79 70 72 6f 6a sageof to myproj
0830: 65 63 74 0a 0a 20 20 20 20 23 20 23 20 23 23 20 ect.. # # ##
0840: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
0850: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
0860: 0a 20 20 20 20 23 23 20 4d 65 74 68 6f 64 73 20 . ## Methods
0870: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 required for the
0880: 20 63 6c 61 73 73 20 74 6f 20 62 65 20 61 20 73 class to be a s
0890: 69 6e 6b 20 6f 66 20 74 68 65 20 72 63 73 20 70 ink of the rcs p
08a0: 61 72 73 65 72 0a 0a 20 20 20 20 23 6d 65 74 68 arser.. #meth
08b0: 6f 64 20 62 65 67 69 6e 20 7b 7d 20 7b 70 75 74 od begin {} {put
08c0: 73 20 62 65 67 69 6e 7d 0a 20 20 20 20 23 6d 65 s begin}. #me
08d0: 74 68 6f 64 20 73 65 74 68 65 61 64 20 7b 68 7d thod sethead {h}
08e0: 20 7b 70 75 74 73 20 68 65 61 64 3d 24 68 7d 0a {puts head=$h}.
08f0: 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 70 #method setp
0900: 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20 7b rincipalbranch {
0910: 62 7d 20 7b 70 75 74 73 20 70 62 3d 24 62 7d 0a b} {puts pb=$b}.
0920: 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66 74 #method deft
0930: 61 67 20 7b 73 20 72 7d 20 7b 70 75 74 73 20 24 ag {s r} {puts $
0940: 73 3d 24 72 7d 0a 20 20 20 20 23 6d 65 74 68 6f s=$r}. #metho
0950: 64 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d d setcomment {c}
0960: 20 7b 70 75 74 73 20 63 6f 6d 6d 65 6e 74 3d 24 {puts comment=$
0970: 63 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 61 c}. #method a
0980: 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 dmindone {} {put
0990: 73 20 61 64 6d 69 6e 64 6f 6e 65 7d 0a 20 20 20 s admindone}.
09a0: 20 23 6d 65 74 68 6f 64 20 64 65 66 20 7b 72 65 #method def {re
09b0: 76 20 64 61 74 65 20 61 75 74 68 6f 72 20 73 74 v date author st
09c0: 61 74 65 20 6e 65 78 74 20 62 72 61 6e 63 68 65 ate next branche
09d0: 73 7d 20 7b 70 75 74 73 20 22 64 65 66 20 24 72 s} {puts "def $r
09e0: 65 76 20 24 64 61 74 65 20 24 61 75 74 68 6f 72 ev $date $author
09f0: 20 24 73 74 61 74 65 20 24 6e 65 78 74 20 24 62 $state $next $b
0a00: 72 61 6e 63 68 65 73 22 7d 0a 20 20 20 20 23 6d ranches"}. #m
0a10: 65 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d ethod defdone {}
0a20: 20 7b 70 75 74 73 20 64 65 66 2d 64 6f 6e 65 7d {puts def-done}
0a30: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 . #method set
0a40: 64 65 73 63 20 7b 64 7d 20 7b 70 75 74 73 20 64 desc {d} {puts d
0a50: 65 73 63 3d 24 64 7d 0a 20 20 20 20 23 6d 65 74 esc=$d}. #met
0a60: 68 6f 64 20 65 78 74 65 6e 64 20 7b 72 65 76 20 hod extend {rev
0a70: 63 6f 6d 6d 69 74 6d 73 67 20 64 65 6c 74 61 72 commitmsg deltar
0a80: 61 6e 67 65 7d 20 7b 70 75 74 73 20 22 65 78 74 ange} {puts "ext
0a90: 65 6e 64 20 24 63 6f 6d 6d 69 74 6d 73 67 20 24 end $commitmsg $
0aa0: 64 65 6c 74 61 72 61 6e 67 65 22 7d 0a 20 20 20 deltarange"}.
0ab0: 20 23 6d 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d #method done {}
0ac0: 20 7b 70 75 74 73 20 64 6f 6e 65 7d 0a 0a 20 20 {puts done}..
0ad0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
0ae0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
0af0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
0b00: 20 50 65 72 73 69 73 74 65 6e 63 65 20 28 70 61 Persistence (pa
0b10: 73 73 20 49 49 29 0a 0a 20 20 20 20 6d 65 74 68 ss II).. meth
0b20: 6f 64 20 70 65 72 73 69 73 74 20 7b 7d 20 7b 0a od persist {} {.
0b30: 09 23 20 46 69 72 73 74 20 63 6f 6c 6c 65 63 74 .# First collect
0b40: 20 74 68 65 20 72 65 61 63 68 61 62 6c 65 20 72 the reachable r
0b50: 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d evisions and sym
0b60: 62 6f 6c 73 2c 20 74 68 65 6e 0a 09 23 20 61 73 bols, then..# as
0b70: 73 69 67 6e 20 69 64 27 73 20 74 6f 20 61 6c 6c sign id's to all
0b80: 2e 20 54 68 65 79 20 61 72 65 20 73 6f 72 74 65 . They are sorte
0b90: 64 20 73 6f 20 74 68 61 74 20 77 65 20 77 69 6c d so that we wil
0ba0: 6c 20 68 61 76 65 20 69 64 73 0a 09 23 20 77 68 l have ids..# wh
0bb0: 69 63 68 20 73 6f 72 74 20 69 6e 20 6f 72 64 65 ich sort in orde
0bc0: 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2e 20 54 r of creation. T
0bd0: 68 65 6e 20 77 65 20 63 61 6e 20 73 61 76 65 20 hen we can save
0be0: 74 68 65 6d 2e 20 54 68 69 73 0a 09 23 20 69 73 them. This..# is
0bf0: 20 64 6f 6e 65 20 62 6f 74 74 6f 6d 20 75 70 2e done bottom up.
0c00: 20 52 65 76 69 73 69 6f 6e 73 2c 20 74 68 65 6e Revisions, then
0c10: 20 73 79 6d 62 6f 6c 73 2e 20 5f 5f 4e 4f 54 45 symbols. __NOTE
0c20: 5f 5f 20 54 68 69 73 0a 09 23 20 77 6f 72 6b 73 __ This..# works
0c30: 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 73 71 only because sq
0c40: 6c 69 74 65 20 69 73 20 6e 6f 74 20 63 68 65 63 lite is not chec
0c50: 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79 king foreign key
0c60: 0a 09 23 20 72 65 66 65 72 65 6e 63 65 73 20 64 ..# references d
0c70: 75 72 69 6e 67 20 69 6e 73 65 72 74 2e 20 54 68 uring insert. Th
0c80: 69 73 20 61 6c 6c 6f 77 73 20 74 6f 20 68 61 76 is allows to hav
0c90: 65 20 64 61 6e 67 6c 69 6e 67 0a 09 23 20 72 65 e dangling..# re
0ca0: 66 65 72 65 6e 63 65 73 20 77 68 69 63 68 20 61 ferences which a
0cb0: 72 65 20 66 69 78 65 64 20 6c 61 74 65 72 2e 20 re fixed later.
0cc0: 54 68 65 20 6c 6f 6e 67 65 73 74 20 64 61 6e 67 The longest dang
0cd0: 6c 69 6e 67 0a 09 23 20 72 65 66 65 72 65 6e 63 ling..# referenc
0ce0: 65 73 20 61 72 65 20 66 6f 72 20 74 68 65 20 70 es are for the p
0cf0: 72 6f 6a 65 63 74 20 6c 65 76 65 6c 20 73 79 6d roject level sym
0d00: 62 6f 6c 73 2c 20 74 68 65 73 65 20 77 65 20 64 bols, these we d
0d10: 6f 0a 09 23 20 6e 6f 74 20 73 61 76 65 20 68 65 o..# not save he
0d20: 72 65 2c 20 62 75 74 20 61 74 20 74 68 65 20 65 re, but at the e
0d30: 6e 64 20 6f 66 20 74 68 65 20 70 61 73 73 2e 20 nd of the pass.
0d40: 57 68 61 74 20 77 65 20 6e 65 65 64 20 61 72 65 What we need are
0d50: 0a 09 23 20 74 68 65 20 69 64 73 2c 20 68 65 6e ..# the ids, hen
0d60: 63 65 20 74 68 65 20 74 77 6f 20 70 68 61 73 65 ce the two phase
0d70: 73 2e 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 s....struct::lis
0d80: 74 20 61 73 73 69 67 6e 20 5b 24 73 65 6c 66 20 t assign [$self
0d90: 41 63 74 69 76 65 5d 20 72 65 76 69 73 69 6f 6e Active] revision
0da0: 73 20 73 79 6d 62 6f 6c 73 0a 09 66 6f 72 65 61 s symbols..forea
0db0: 63 68 20 72 65 76 20 24 72 65 76 69 73 69 6f 6e ch rev $revision
0dc0: 73 20 7b 20 24 72 65 76 20 64 65 66 69 64 20 7d s { $rev defid }
0dd0: 0a 09 66 6f 72 65 61 63 68 20 73 79 6d 20 24 73 ..foreach sym $s
0de0: 79 6d 62 6f 6c 73 20 20 20 7b 20 24 73 79 6d 20 ymbols { $sym
0df0: 64 65 66 69 64 20 7d 0a 0a 09 73 74 61 74 65 20 defid }...state
0e00: 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20 transaction {..
0e10: 20 20 20 66 6f 72 65 61 63 68 20 72 65 76 20 24 foreach rev $
0e20: 72 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 76 revisions { $rev
0e30: 20 70 65 72 73 69 73 74 20 7d 0a 09 20 20 20 20 persist }..
0e40: 66 6f 72 65 61 63 68 20 73 79 6d 20 24 73 79 6d foreach sym $sym
0e50: 62 6f 6c 73 20 20 20 7b 20 24 73 79 6d 20 70 65 bols { $sym pe
0e60: 72 73 69 73 74 20 7d 0a 09 7d 0a 09 72 65 74 75 rsist }..}..retu
0e70: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
0e80: 74 68 6f 64 20 64 72 6f 70 20 7b 7d 20 7b 0a 09 thod drop {} {..
0e90: 66 6f 72 65 61 63 68 20 7b 5f 20 72 65 76 7d 20 foreach {_ rev}
0ea0: 20 20 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 [array get my
0eb0: 72 65 76 5d 20 20 20 20 20 20 7b 20 24 72 65 76 rev] { $rev
0ec0: 20 64 65 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65 destroy }..fore
0ed0: 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b ach {_ branch} [
0ee0: 61 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e array get mybran
0ef0: 63 68 65 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 ches] { $branch
0f00: 64 65 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65 61 destroy }..forea
0f10: 63 68 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b ch {_ taglist} [
0f20: 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 array get mytags
0f30: 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 ] {.. foreach
0f40: 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 tag $taglist {
0f50: 24 74 61 67 20 64 65 73 74 72 6f 79 20 7d 0a 09 $tag destroy }..
0f60: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
0f70: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
0f80: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
0f90: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 ############.
0fa0: 20 23 23 20 49 6d 70 6c 65 6d 65 6e 74 20 74 68 ## Implement th
0fb0: 65 20 73 69 6e 6b 0a 0a 20 20 20 20 6d 65 74 68 e sink.. meth
0fc0: 6f 64 20 62 65 67 69 6e 20 7b 7d 20 7b 23 69 67 od begin {} {#ig
0fd0: 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f nore}.. metho
0fe0: 64 20 73 65 74 68 65 61 64 20 7b 72 65 76 6e 72 d sethead {revnr
0ff0: 7d 20 7b 0a 09 73 65 74 20 6d 79 68 65 61 64 72 } {..set myheadr
1000: 65 76 6e 72 20 24 72 65 76 6e 72 0a 09 72 65 74 evnr $revnr..ret
1010: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
1020: 65 74 68 6f 64 20 73 65 74 70 72 69 6e 63 69 70 ethod setprincip
1030: 61 6c 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 albranch {branch
1040: 6e 72 7d 20 7b 0a 09 73 65 74 20 6d 79 70 72 69 nr} {..set mypri
1050: 6e 63 69 70 61 6c 20 24 62 72 61 6e 63 68 6e 72 ncipal $branchnr
1060: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
1070: 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 74 61 method defta
1080: 67 20 7b 6e 61 6d 65 20 72 65 76 6e 72 7d 20 7b g {name revnr} {
1090: 0a 09 23 20 46 55 54 55 52 45 3a 20 50 65 72 66 ..# FUTURE: Perf
10a0: 6f 72 6d 20 73 79 6d 62 6f 6c 20 74 72 61 6e 73 orm symbol trans
10b0: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 72 65 2e 0a formation here..
10c0: 0a 09 69 66 20 7b 5b 73 74 72 75 63 74 3a 3a 73 ..if {[struct::s
10d0: 65 74 20 63 6f 6e 74 61 69 6e 73 20 24 6d 79 73 et contains $mys
10e0: 79 6d 62 6f 6c 73 20 24 6e 61 6d 65 5d 7d 20 7b ymbols $name]} {
10f0: 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 66 61 .. trouble fa
1100: 74 61 6c 20 22 4d 75 6c 74 69 70 6c 65 20 64 65 tal "Multiple de
1110: 66 69 6e 69 74 69 6f 6e 73 20 6f 66 20 74 68 65 finitions of the
1120: 20 73 79 6d 62 6f 6c 20 27 24 6e 61 6d 65 27 20 symbol '$name'
1130: 69 6e 20 27 24 6d 79 70 61 74 68 27 22 0a 09 20 in '$mypath'"..
1140: 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 return..}...s
1150: 74 72 75 63 74 3a 3a 73 65 74 20 61 64 64 20 6d truct::set add m
1160: 79 73 79 6d 62 6f 6c 73 20 24 6e 61 6d 65 0a 0a ysymbols $name..
1170: 09 69 66 20 7b 5b 72 65 76 20 69 73 62 72 61 6e .if {[rev isbran
1180: 63 68 72 65 76 6e 72 20 24 72 65 76 6e 72 20 2d chrevnr $revnr -
1190: 3e 20 62 72 61 6e 63 68 6e 72 5d 7d 20 7b 0a 09 > branchnr]} {..
11a0: 20 20 20 20 24 73 65 6c 66 20 41 64 64 42 72 61 $self AddBra
11b0: 6e 63 68 20 24 6e 61 6d 65 20 24 62 72 61 6e 63 nch $name $branc
11c0: 68 6e 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 hnr..} else {..
11d0: 20 20 20 24 73 65 6c 66 20 41 64 64 54 61 67 20 $self AddTag
11e0: 24 6e 61 6d 65 20 24 72 65 76 6e 72 0a 09 7d 0a $name $revnr..}.
11f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
1200: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d method setcom
1210: 6d 65 6e 74 20 7b 63 7d 20 7b 23 20 69 67 6e 6f ment {c} {# igno
1220: 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 re}.. method
1230: 61 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 0a 09 admindone {} {..
1240: 23 20 57 65 20 64 6f 20 6e 6f 74 68 69 6e 67 20 # We do nothing
1250: 61 74 20 74 68 65 20 62 6f 75 6e 64 61 72 79 20 at the boundary
1260: 6f 66 20 61 64 6d 69 6e 20 61 6e 64 20 72 65 76 of admin and rev
1270: 69 73 69 6f 6e 20 64 61 74 61 0a 20 20 20 20 7d ision data. }
1280: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 .. method def
1290: 20 7b 72 65 76 6e 72 20 64 61 74 65 20 61 75 74 {revnr date aut
12a0: 68 6f 72 20 73 74 61 74 65 20 6e 65 78 74 20 62 hor state next b
12b0: 72 61 6e 63 68 65 73 7d 20 7b 0a 09 24 73 65 6c ranches} {..$sel
12c0: 66 20 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f f RecordBranchCo
12d0: 6d 6d 69 74 73 20 24 62 72 61 6e 63 68 65 73 0a mmits $branches.
12e0: 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 ..if {[info exis
12f0: 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 ts myrev($revnr)
1300: 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c ]} {.. troubl
1310: 65 20 66 61 74 61 6c 20 22 46 69 6c 65 20 24 6d e fatal "File $m
1320: 79 70 61 74 68 20 63 6f 6e 74 61 69 6e 73 20 64 ypath contains d
1330: 75 70 6c 69 63 61 74 65 20 64 65 66 69 6e 69 74 uplicate definit
1340: 69 6f 6e 73 20 66 6f 72 20 72 65 76 69 73 69 6f ions for revisio
1350: 6e 20 24 72 65 76 6e 72 2e 22 0a 09 20 20 20 20 n $revnr."..
1360: 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 65 74 20 return..}...set
1370: 6d 79 61 69 64 28 24 72 65 76 6e 72 29 20 5b 24 myaid($revnr) [$
1380: 6d 79 70 72 6f 6a 65 63 74 20 64 65 66 61 75 74 myproject defaut
1390: 68 6f 72 20 24 61 75 74 68 6f 72 5d 0a 09 73 65 hor $author]..se
13a0: 74 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 20 t myrev($revnr)
13b0: 5b 72 65 76 20 25 41 55 54 4f 25 20 24 72 65 76 [rev %AUTO% $rev
13c0: 6e 72 20 24 64 61 74 65 20 24 73 74 61 74 65 20 nr $date $state
13d0: 24 73 65 6c 66 5d 0a 0a 09 24 73 65 6c 66 20 52 $self]...$self R
13e0: 65 63 6f 72 64 42 61 73 69 63 44 65 70 65 6e 64 ecordBasicDepend
13f0: 65 6e 63 69 65 73 20 24 72 65 76 6e 72 20 24 6e encies $revnr $n
1400: 65 78 74 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ext..return.
1410: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65 }.. method de
1420: 66 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 54 68 fdone {} {..# Th
1430: 69 73 20 69 73 20 61 6c 6c 20 64 6f 6e 65 20 61 is is all done a
1440: 66 74 65 72 20 74 68 65 20 72 65 76 69 73 69 6f fter the revisio
1450: 6e 20 74 72 65 65 20 68 61 73 20 62 65 65 6e 20 n tree has been
1460: 65 78 74 72 61 63 74 65 64 0a 09 23 20 66 72 6f extracted..# fro
1470: 6d 20 74 68 65 20 66 69 6c 65 2c 20 62 65 66 6f m the file, befo
1480: 72 65 20 74 68 65 20 63 6f 6d 6d 69 74 20 6d 65 re the commit me
1490: 73 61 67 65 73 20 61 6e 64 20 64 65 6c 74 61 20 sages and delta
14a0: 74 65 78 74 73 20 61 72 65 0a 09 23 20 70 72 6f texts are..# pro
14b0: 63 65 73 73 65 64 2e 0a 0a 09 24 73 65 6c 66 20 cessed....$self
14c0: 50 72 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65 ProcessPrimaryDe
14d0: 70 65 6e 64 65 6e 63 69 65 73 0a 09 24 73 65 6c pendencies..$sel
14e0: 66 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44 f ProcessBranchD
14f0: 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 24 73 65 ependencies..$se
1500: 6c 66 20 53 6f 72 74 42 72 61 6e 63 68 65 73 0a lf SortBranches.
1510: 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 54 61 .$self ProcessTa
1520: 67 44 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 24 gDependencies..$
1530: 73 65 6c 66 20 44 65 74 65 72 6d 69 6e 65 54 68 self DetermineTh
1540: 65 52 6f 6f 74 52 65 76 69 73 69 6f 6e 0a 09 72 eRootRevision..r
1550: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
1560: 20 6d 65 74 68 6f 64 20 73 65 74 64 65 73 63 20 method setdesc
1570: 7b 64 7d 20 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a {d} {# ignore}..
1580: 20 20 20 20 6d 65 74 68 6f 64 20 65 78 74 65 6e method exten
1590: 64 20 7b 72 65 76 6e 72 20 63 6f 6d 6d 69 74 6d d {revnr commitm
15a0: 73 67 20 74 65 78 74 72 61 6e 67 65 7d 20 7b 0a sg textrange} {.
15b0: 09 73 65 74 20 63 6d 69 64 20 5b 24 6d 79 70 72 .set cmid [$mypr
15c0: 6f 6a 65 63 74 20 64 65 66 63 6d 65 73 73 61 67 oject defcmessag
15d0: 65 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 e [string trim $
15e0: 63 6f 6d 6d 69 74 6d 73 67 5d 5d 0a 0a 09 73 65 commitmsg]]...se
15f0: 74 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 t rev $myrev($re
1600: 76 6e 72 29 0a 0a 09 69 66 20 7b 5b 24 72 65 76 vnr)...if {[$rev
1610: 20 68 61 73 6d 65 74 61 5d 7d 20 7b 0a 09 20 20 hasmeta]} {..
1620: 20 20 23 20 41 70 70 61 72 65 6e 74 6c 79 20 72 # Apparently r
1630: 65 70 6f 73 69 74 6f 72 69 65 73 20 65 78 69 73 epositories exis
1640: 74 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 64 t in which the d
1650: 65 6c 74 61 20 64 61 74 61 0a 09 20 20 20 20 23 elta data.. #
1660: 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 31 2e for revision 1.
1670: 31 20 69 73 20 70 72 6f 76 69 64 65 64 20 73 65 1 is provided se
1680: 76 65 72 61 6c 20 74 69 6d 65 73 2c 20 61 74 20 veral times, at
1690: 6c 65 61 73 74 0a 09 20 20 20 20 23 20 74 77 69 least.. # twi
16a0: 63 65 2e 20 54 68 65 20 61 63 74 75 61 6c 20 63 ce. The actual c
16b0: 61 75 73 65 20 6f 66 20 74 68 69 73 20 64 75 70 ause of this dup
16c0: 6c 69 63 61 74 69 6f 6e 20 69 73 20 6e 6f 74 0a lication is not.
16d0: 09 20 20 20 20 23 20 6b 6e 6f 77 6e 2e 20 53 70 . # known. Sp
16e0: 65 63 75 6c 61 74 69 6f 6e 20 63 65 6e 74 65 72 eculation center
16f0: 73 20 6f 6e 20 52 43 53 2f 43 56 53 20 62 75 67 s on RCS/CVS bug
1700: 73 2c 20 6f 72 20 66 72 6f 6d 0a 09 20 20 20 20 s, or from..
1710: 23 20 6d 61 6e 75 61 6c 20 65 64 69 74 73 20 6f # manual edits o
1720: 66 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 f the repository
1730: 20 77 68 69 63 68 20 62 6f 72 6b 65 64 20 74 68 which borked th
1740: 65 0a 09 20 20 20 20 23 20 69 6e 74 65 72 6e 61 e.. # interna
1750: 6c 73 2e 20 57 68 61 74 65 76 65 72 20 74 68 65 ls. Whatever the
1760: 20 63 61 75 73 65 2c 20 74 65 73 74 69 6e 67 20 cause, testing
1770: 73 68 6f 77 65 64 20 74 68 61 74 20 62 6f 74 68 showed that both
1780: 0a 09 20 20 20 20 23 20 63 76 73 20 61 6e 64 20 .. # cvs and
1790: 72 63 73 20 75 73 65 20 74 68 65 20 66 69 72 73 rcs use the firs
17a0: 74 20 64 65 66 69 6e 69 74 69 6f 6e 20 77 68 65 t definition whe
17b0: 6e 20 70 65 72 66 6f 72 6d 69 6e 67 20 61 0a 09 n performing a..
17c0: 20 20 20 20 23 20 63 68 65 63 6b 6f 75 74 2c 20 # checkout,
17d0: 61 6e 64 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 and we follow th
17e0: 65 69 72 20 6c 65 61 64 2e 20 53 69 64 65 20 6e eir lead. Side n
17f0: 6f 74 65 73 3a 20 27 63 76 73 0a 09 20 20 20 20 otes: 'cvs..
1800: 23 20 6c 6f 67 27 20 66 61 69 6c 73 20 6f 6e 20 # log' fails on
1810: 73 75 63 68 20 61 20 66 69 6c 65 2c 20 61 6e 64 such a file, and
1820: 20 27 63 76 73 20 72 6c 6f 67 27 20 70 72 69 6e 'cvs rlog' prin
1830: 74 73 20 74 68 65 20 6c 6f 67 0a 09 20 20 20 20 ts the log..
1840: 23 20 6d 65 73 73 61 67 65 20 66 72 6f 6d 20 74 # message from t
1850: 68 65 20 66 69 72 73 74 20 64 65 6c 74 61 2c 20 he first delta,
1860: 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 73 65 63 ignoring the sec
1870: 6f 6e 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 ond.... log w
1880: 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 rite 1 file "In
1890: 66 69 6c 65 20 24 6d 79 70 61 74 68 20 3a 20 44 file $mypath : D
18a0: 75 70 6c 69 63 61 74 65 20 64 65 6c 74 61 20 64 uplicate delta d
18b0: 61 74 61 20 66 6f 72 20 72 65 76 69 73 69 6f 6e ata for revision
18c0: 20 24 72 65 76 6e 72 22 0a 09 20 20 20 20 6c 6f $revnr".. lo
18d0: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 g write 1 file "
18e0: 49 67 6e 6f 72 69 6e 67 20 74 68 65 20 64 75 70 Ignoring the dup
18f0: 6c 69 63 61 74 65 22 0a 09 20 20 20 20 72 65 74 licate".. ret
1900: 75 72 6e 0a 09 7d 0a 0a 09 23 20 44 65 74 65 72 urn..}...# Deter
1910: 6d 69 6e 65 20 74 68 65 20 6c 69 6e 65 20 6f 66 mine the line of
1920: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 development for
1930: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 28 70 the revision (p
1940: 72 6f 6a 65 63 74 0a 09 23 20 6c 65 76 65 6c 29 roject..# level)
1950: 2e 20 54 68 69 73 20 67 69 76 65 73 20 75 73 20 . This gives us
1960: 74 68 65 20 62 72 61 6e 63 68 69 64 20 74 6f 6f the branchid too
1970: 2c 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 , required for t
1980: 68 65 0a 09 23 20 6d 65 74 61 20 64 61 74 61 20 he..# meta data
1990: 67 72 6f 75 70 20 74 68 65 20 72 65 76 69 73 69 group the revisi
19a0: 6f 6e 20 69 73 20 69 6e 2e 20 28 4e 6f 74 65 3a on is in. (Note:
19b0: 20 42 79 20 70 75 74 74 69 6e 67 20 62 6f 74 68 By putting both
19c0: 0a 09 23 20 62 72 61 6e 63 68 2f 6c 6f 64 20 61 ..# branch/lod a
19d0: 6e 64 20 70 72 6f 6a 65 63 74 20 69 6e 66 6f 72 nd project infor
19e0: 6d 61 74 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20 mation into the
19f0: 67 72 6f 75 70 20 77 65 20 65 6e 73 75 72 65 0a group we ensure.
1a00: 09 23 20 74 68 61 74 20 61 6e 79 20 63 72 6f 73 .# that any cros
1a10: 73 2d 70 72 6f 6a 65 63 74 20 61 6e 64 20 63 72 s-project and cr
1a20: 6f 73 73 2d 62 72 61 6e 63 68 20 63 6f 6d 6d 69 oss-branch commi
1a30: 74 73 20 61 72 65 0a 09 23 20 73 65 70 61 72 61 ts are..# separa
1a40: 74 65 64 20 69 6e 74 6f 20 6d 75 6c 74 69 70 6c ted into multipl
1a50: 65 20 63 6f 6d 6d 69 74 73 2c 20 6f 6e 65 20 69 e commits, one i
1a60: 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 70 72 n each of the pr
1a70: 6f 6a 65 63 74 73 0a 09 23 20 61 6e 64 2f 6f 72 ojects..# and/or
1a80: 20 62 72 61 6e 63 68 65 73 29 2e 0a 0a 09 73 65 branches)....se
1a90: 74 20 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 t lod [$self Get
1aa0: 4c 4f 44 20 24 72 65 76 6e 72 5d 0a 0a 09 24 72 LOD $revnr]...$r
1ab0: 65 76 20 73 65 74 6d 65 74 61 20 5b 24 6d 79 70 ev setmeta [$myp
1ac0: 72 6f 6a 65 63 74 20 64 65 66 6d 65 74 61 20 5b roject defmeta [
1ad0: 24 6c 6f 64 20 69 64 5d 20 24 6d 79 61 69 64 28 $lod id] $myaid(
1ae0: 24 72 65 76 6e 72 29 20 24 63 6d 69 64 5d 0a 09 $revnr) $cmid]..
1af0: 24 72 65 76 20 73 65 74 74 65 78 74 20 24 74 65 $rev settext $te
1b00: 78 74 72 61 6e 67 65 0a 09 24 72 65 76 20 73 65 xtrange..$rev se
1b10: 74 6c 6f 64 20 20 24 6c 6f 64 0a 0a 09 23 20 49 tlod $lod...# I
1b20: 66 20 74 68 69 73 20 69 73 20 72 65 76 69 73 69 f this is revisi
1b30: 6f 6e 20 31 2e 31 2c 20 77 65 20 68 61 76 65 20 on 1.1, we have
1b40: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 to determine whe
1b50: 74 68 65 72 20 74 68 65 0a 09 23 20 66 69 6c 65 ther the..# file
1b60: 20 73 65 65 6d 73 20 74 6f 20 68 61 76 65 20 62 seems to have b
1b70: 65 65 6e 20 63 72 65 61 74 65 64 20 74 68 72 6f een created thro
1b80: 75 67 68 20 27 63 76 73 20 61 64 64 27 20 69 6e ugh 'cvs add' in
1b90: 73 74 65 61 64 20 6f 66 0a 09 23 20 27 63 76 73 stead of..# 'cvs
1ba0: 20 69 6d 70 6f 72 74 27 2e 20 54 68 69 73 20 63 import'. This c
1bb0: 61 6e 20 62 65 20 64 6f 6e 65 20 62 79 20 6c 6f an be done by lo
1bc0: 6f 6b 69 6e 67 20 61 74 20 74 68 65 20 75 6e 2d oking at the un-
1bd0: 0a 09 23 20 61 64 75 6c 74 65 72 61 74 65 64 20 ..# adulterated
1be0: 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 2c 20 commit message,
1bf0: 61 73 20 43 56 53 20 75 73 65 73 20 61 20 68 61 as CVS uses a ha
1c00: 72 64 77 69 72 65 64 20 6d 61 67 69 63 0a 09 23 rdwired magic..#
1c10: 20 6d 65 73 73 61 67 65 20 66 6f 72 20 74 68 65 message for the
1c20: 20 6c 61 74 74 65 72 2c 20 69 2e 65 2e 20 22 49 latter, i.e. "I
1c30: 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c nitial revision\
1c40: 6e 22 2c 20 6e 6f 0a 09 23 20 70 65 72 69 6f 64 n", no..# period
1c50: 2e 20 20 28 54 68 69 73 20 66 61 63 74 20 61 6c . (This fact al
1c60: 73 6f 20 68 65 6c 70 73 20 75 73 20 77 68 65 6e so helps us when
1c70: 20 74 68 65 20 74 69 6d 65 20 63 6f 6d 65 73 20 the time comes
1c80: 74 6f 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 20 to..# determine
1c90: 77 68 65 74 68 65 72 20 74 68 69 73 20 66 69 6c whether this fil
1ca0: 65 20 6d 69 67 68 74 20 68 61 76 65 20 68 61 64 e might have had
1cb0: 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 a default branc
1cc0: 68 0a 09 23 20 69 6e 20 74 68 65 20 70 61 73 74 h..# in the past
1cd0: 2e 29 0a 0a 09 69 66 20 7b 24 72 65 76 6e 72 20 .)...if {$revnr
1ce0: 65 71 20 22 31 2e 31 22 7d 20 7b 0a 09 20 20 20 eq "1.1"} {..
1cf0: 20 73 65 74 20 6d 79 69 6d 70 6f 72 74 65 64 20 set myimported
1d00: 5b 65 78 70 72 20 7b 24 63 6f 6d 6d 69 74 6d 73 [expr {$commitms
1d10: 67 20 65 71 20 22 49 6e 69 74 69 61 6c 20 72 65 g eq "Initial re
1d20: 76 69 73 69 6f 6e 5c 6e 22 7d 5d 0a 09 7d 0a 0a vision\n"}]..}..
1d30: 09 23 20 48 65 72 65 20 77 65 20 61 6c 73 6f 20 .# Here we also
1d40: 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68 keep track of th
1d50: 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 e order in which
1d60: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 the revisions..
1d70: 23 20 77 65 72 65 20 61 64 64 65 64 20 74 6f 20 # were added to
1d80: 74 68 65 20 66 69 6c 65 2e 0a 0a 09 6c 61 70 70 the file....lapp
1d90: 65 6e 64 20 6d 79 72 65 76 69 73 69 6f 6e 73 20 end myrevisions
1da0: 24 72 65 76 0a 09 72 65 74 75 72 6e 0a 20 20 20 $rev..return.
1db0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 }.. method d
1dc0: 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 43 6f 6d 70 one {} {..# Comp
1dd0: 6c 65 74 65 20 74 68 65 20 72 65 76 69 73 69 6f lete the revisio
1de0: 6e 73 2c 20 62 72 61 6e 63 68 65 73 2c 20 61 6e ns, branches, an
1df0: 64 20 74 61 67 73 2e 20 54 68 69 73 20 69 6e 63 d tags. This inc
1e00: 6c 75 64 65 73 0a 09 23 20 6c 6f 6f 6b 69 6e 67 ludes..# looking
1e10: 20 66 6f 72 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b for a non-trunk
1e20: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c default branch,
1e30: 20 6d 61 72 6b 69 6e 67 20 69 74 73 20 6d 65 6d marking its mem
1e40: 62 65 72 73 0a 09 23 20 61 6e 64 20 6c 69 6e 6b bers..# and link
1e50: 69 6e 67 20 74 68 65 6d 20 69 6e 74 6f 20 74 68 ing them into th
1e60: 65 20 74 72 75 6e 6b 2e 0a 0a 09 24 73 65 6c 66 e trunk....$self
1e70: 20 44 65 74 65 72 6d 69 6e 65 52 65 76 69 73 69 DetermineRevisi
1e80: 6f 6e 4f 70 65 72 61 74 69 6f 6e 73 0a 09 24 73 onOperations..$s
1e90: 65 6c 66 20 44 65 74 65 72 6d 69 6e 65 4c 69 6e elf DetermineLin
1ea0: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 0a esOfDevelopment.
1eb0: 09 24 73 65 6c 66 20 48 61 6e 64 6c 65 4e 6f 6e .$self HandleNon
1ec0: 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e TrunkDefaultBran
1ed0: 63 68 0a 09 24 73 65 6c 66 20 52 65 6d 6f 76 65 ch..$self Remove
1ee0: 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 74 69 IrrelevantDeleti
1ef0: 6f 6e 73 0a 09 24 73 65 6c 66 20 52 65 6d 6f 76 ons..$self Remov
1f00: 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65 eInitialBranchDe
1f10: 6c 65 74 69 6f 6e 73 0a 0a 09 69 66 20 7b 5b 24 letions...if {[$
1f20: 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e 6b 6f myproject trunko
1f30: 6e 6c 79 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65 nly]} {.. $se
1f40: 6c 66 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72 75 lf ExcludeNonTru
1f50: 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 0a 09 7d nkInformation..}
1f60: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
1f70: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
1f80: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
1f90: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 ###########.
1fa0: 23 23 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 ## State.. va
1fb0: 72 69 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20 riable myid
1fc0: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 {} ; #
1fd0: 46 69 6c 65 20 69 64 20 69 6e 20 74 68 65 20 70 File id in the p
1fe0: 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e ersistent state.
1ff0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
2000: 70 61 74 68 20 20 20 20 20 20 20 20 20 20 20 20 path
2010: 7b 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74 {} ; # Path of t
2020: 68 65 20 66 69 6c 65 27 73 20 72 63 73 20 61 72 he file's rcs ar
2030: 63 68 69 76 65 2e 0a 20 20 20 20 76 61 72 69 61 chive.. varia
2040: 62 6c 65 20 6d 79 75 73 72 70 61 74 68 20 20 20 ble myusrpath
2050: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 {} ; # Pat
2060: 68 20 6f 66 20 74 68 65 20 66 69 6c 65 20 61 73 h of the file as
2070: 20 73 65 65 6e 20 62 79 20 75 73 65 72 73 2e 0a seen by users..
2080: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 65 variable mye
2090: 78 65 63 75 74 61 62 6c 65 20 20 20 20 20 20 30 xecutable 0
20a0: 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c ; # Boolean fl
20b0: 61 67 20 27 66 69 6c 65 20 65 78 65 63 75 74 61 ag 'file executa
20c0: 62 6c 65 27 2e 0a 20 20 20 20 76 61 72 69 61 62 ble'.. variab
20d0: 6c 65 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20 le myproject
20e0: 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 {} ; # Refe
20f0: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 70 72 6f rence to the pro
2100: 6a 65 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 09 ject object.....
2110: 20 20 20 20 23 20 74 68 65 20 66 69 6c 65 20 62 # the file b
2120: 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76 elongs to.. v
2130: 61 72 69 61 62 6c 65 20 6d 79 72 65 76 20 2d 61 ariable myrev -a
2140: 72 72 61 79 20 20 20 20 20 20 7b 7d 20 3b 20 23 rray {} ; #
2150: 20 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e Maps revision n
2160: 75 6d 62 65 72 20 74 6f 20 74 68 65 0a 09 09 09 umber to the....
2170: 09 20 20 20 20 23 20 61 73 73 6f 63 69 61 74 65 . # associate
2180: 64 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 d revision objec
2190: 74 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 t.. variable
21a0: 6d 79 72 65 76 69 73 69 6f 6e 73 20 20 20 20 20 myrevisions
21b0: 20 20 7b 7d 20 3b 20 23 20 53 61 6d 65 20 61 73 {} ; # Same as
21c0: 20 6d 79 72 65 76 2c 20 62 75 74 20 61 20 6c 69 myrev, but a li
21d0: 73 74 2c 0a 09 09 09 09 20 20 20 20 23 20 67 69 st,..... # gi
21e0: 76 69 6e 67 20 75 73 20 74 68 65 20 6f 72 64 65 ving us the orde
21f0: 72 20 6f 66 0a 09 09 09 09 20 20 20 20 23 20 72 r of..... # r
2200: 65 76 69 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61 evisions.. va
2210: 72 69 61 62 6c 65 20 6d 79 61 69 64 20 20 20 20 riable myaid
2220: 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 -array {} ; #
2230: 4d 61 70 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d Map revision num
2240: 62 65 72 73 20 74 6f 20 74 68 65 20 69 64 0a 09 bers to the id..
2250: 09 09 09 20 20 20 20 23 20 6f 66 20 74 68 65 20 ... # of the
2260: 61 75 74 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69 author who commi
2270: 74 74 65 64 0a 09 09 09 09 20 20 20 20 23 20 69 tted..... # i
2280: 74 2e 20 54 68 69 73 20 69 73 20 6c 61 74 65 72 t. This is later
2290: 20 61 67 67 72 65 67 61 74 65 64 0a 09 09 09 09 aggregated.....
22a0: 20 20 20 20 23 20 77 69 74 68 20 63 6f 6d 6d 69 # with commi
22b0: 74 20 6d 65 73 73 61 67 65 2c 20 62 72 61 6e 63 t message, branc
22c0: 68 20 6e 61 6d 65 0a 09 09 09 09 20 20 20 20 23 h name..... #
22d0: 20 61 6e 64 20 70 72 6f 6a 65 63 74 20 69 64 20 and project id
22e0: 66 6f 72 20 61 20 6d 65 74 61 20 69 64 2e 0a 20 for a meta id..
22f0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65 variable myhe
2300: 61 64 72 65 76 6e 72 20 20 20 20 20 20 20 7b 7d adrevnr {}
2310: 20 3b 20 23 20 48 65 61 64 20 72 65 76 69 73 69 ; # Head revisi
2320: 6f 6e 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d on (revision num
2330: 62 65 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c ber). variabl
2340: 65 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20 e myprincipal
2350: 20 20 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63 {} ; # Princ
2360: 69 70 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61 ipal branch (bra
2370: 6e 63 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09 nch number).....
2380: 09 20 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20 . # Contrary
2390: 74 6f 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73 to the name this
23a0: 20 69 73 20 74 68 65 0a 09 09 09 09 20 20 20 20 is the.....
23b0: 23 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 # default branch
23c0: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
23d0: 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20 ydependencies
23e0: 20 7b 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61 {} ; # Dictiona
23f0: 72 79 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 ry parent -> chi
2400: 6c 64 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65 ld,..... # re
2410: 63 6f 72 64 73 20 70 72 69 6d 61 72 79 20 64 65 cords primary de
2420: 70 65 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20 pendencies..
2430: 76 61 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 variable myimpor
2440: 74 65 64 20 20 20 20 20 20 20 20 30 20 20 3b 20 ted 0 ;
2450: 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 # Boolean flag.
2460: 53 65 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 Set if and only
2470: 69 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 if..... # rev
2480: 20 31 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65 1.1 of the file
2490: 20 73 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20 seemingly.....
24a0: 20 20 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65 # was importe
24b0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64 d instead of add
24c0: 65 64 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72 ed..... # nor
24d0: 6d 61 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61 mally.. varia
24e0: 62 6c 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20 ble myroot
24f0: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 {} ; # Ref
2500: 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65 erence to the re
2510: 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09 vision object...
2520: 09 09 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20 .. # holding
2530: 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f the root revisio
2540: 6e 2e 20 20 49 74 73 0a 09 09 09 09 20 20 20 20 n. Its.....
2550: 23 20 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79 # number usually
2560: 20 69 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62 is '1.1'. Can b
2570: 65 0a 09 09 09 09 20 20 20 20 23 20 61 20 64 69 e..... # a di
2580: 66 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 fferent number,
2590: 62 65 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20 because of.....
25a0: 20 20 20 23 20 67 61 70 73 20 63 72 65 61 74 65 # gaps create
25b0: 64 20 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20 d via 'cvsadmin
25c0: 2d 6f 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c -o'.. variabl
25d0: 65 20 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72 e mybranches -ar
25e0: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 ray {} ; # Maps
25f0: 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f branch number to
2600: 20 74 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09 the symbol.....
2610: 20 20 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e # object han
2620: 64 6c 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 dling the branch
2630: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
2640: 79 74 61 67 73 20 20 20 20 20 2d 61 72 72 61 79 ytags -array
2650: 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 {} ; # Maps rev
2660: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 ision number to
2670: 74 68 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20 the list.....
2680: 20 23 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a # of symbol obj
2690: 65 63 74 73 20 66 6f 72 20 74 68 65 20 74 61 67 ects for the tag
26a0: 73 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 6f s..... # asso
26b0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 ciated with the
26c0: 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 revision.. va
26d0: 72 69 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73 riable mysymbols
26e0: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 {} ; #
26f0: 53 65 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f Set of the symbo
2700: 6c 20 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e l names found in
2710: 0a 09 09 09 09 20 20 20 20 23 20 74 68 69 73 20 ..... # this
2720: 66 69 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61 file... varia
2730: 62 6c 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20 ble mybranchcnt
2740: 30 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f 0 ; # Counter fo
2750: 72 20 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72 r branches, to r
2760: 65 63 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20 ecord their....
2770: 20 20 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64 # order of d
2780: 65 66 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20 efinition. This
2790: 61 6c 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09 also defines....
27a0: 20 20 20 20 20 23 20 74 68 65 69 72 20 6f 72 64 # their ord
27b0: 65 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20 er of creation,
27c0: 77 68 69 63 68 20 69 73 20 74 68 65 0a 09 09 09 which is the....
27d0: 20 20 20 20 20 23 20 72 65 76 65 72 73 65 20 6f # reverse o
27e0: 66 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 f definition. I
27f0: 2e 65 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09 .e. a smaller...
2800: 09 20 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d . # number m
2810: 65 61 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61 eans 'Defined ea
2820: 72 6c 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09 rlier', means...
2830: 09 20 20 20 20 20 23 20 27 43 72 65 61 74 65 64 . # 'Created
2840: 20 6c 61 74 65 72 27 2e 0a 0a 20 20 20 20 76 61 later'... va
2850: 72 69 61 62 6c 65 20 6d 79 74 72 75 6e 6b 20 7b riable mytrunk {
2860: 7d 20 3b 20 23 20 44 69 72 65 63 74 20 72 65 66 } ; # Direct ref
2870: 65 72 65 6e 63 65 20 74 6f 20 6d 79 70 72 6f 6a erence to myproj
2880: 65 63 74 20 2d 3e 20 74 72 75 6e 6b 2e 0a 20 20 ect -> trunk..
2890: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f variable myroo
28a0: 74 73 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f ts {} ; # List o
28b0: 66 20 72 6f 6f 74 73 20 69 6e 20 74 68 65 20 66 f roots in the f
28c0: 6f 72 65 73 74 20 6f 66 0a 09 09 09 20 20 23 20 orest of.... #
28d0: 6c 6f 64 27 73 2e 20 4f 62 6a 65 63 74 20 72 65 lod's. Object re
28e0: 66 65 72 65 6e 63 65 73 20 74 6f 20 72 65 76 69 ferences to revi
28f0: 73 69 6f 6e 73 20 61 6e 64 0a 09 09 09 20 20 23 sions and.... #
2900: 20 62 72 61 6e 63 68 65 73 2e 20 54 68 65 20 6c branches. The l
2910: 61 74 74 65 72 20 63 61 6e 20 61 70 70 65 61 72 atter can appear
2920: 20 77 68 65 6e 20 74 68 65 79 0a 09 09 09 20 20 when they....
2930: 23 20 61 72 65 20 73 65 76 65 72 65 64 20 66 72 # are severed fr
2940: 6f 6d 20 74 68 65 69 72 20 70 61 72 65 6e 74 2e om their parent.
2950: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 .. # # ## ###
2960: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
2970: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 #############.
2980: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 ## Internal me
2990: 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f thods.. metho
29a0: 64 20 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f d RecordBranchCo
29b0: 6d 6d 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d mmits {branches}
29c0: 20 7b 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e {..foreach bran
29d0: 63 68 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65 chrevnr $branche
29e0: 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61 s {.. if {[ca
29f0: 74 63 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e tch {...set bran
2a00: 63 68 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 ch [$self Rev2Br
2a10: 61 6e 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e anch $branchrevn
2a20: 72 5d 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 r].. }]} {...
2a30: 73 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c set branch [$sel
2a40: 66 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 f AddUnlabeledBr
2a50: 61 6e 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63 anch [rev 2branc
2a60: 68 6e 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72 hnr $branchrevnr
2a70: 5d 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 ]].. }...
2a80: 23 20 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d # Record the com
2a90: 6d 69 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76 mit, just as rev
2aa0: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 ision number for
2ab0: 0a 09 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f .. # now. Pro
2ac0: 63 65 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 cesBranchDepende
2ad0: 6e 63 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e ncies will exten
2ae0: 64 20 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20 d that ito a..
2af0: 20 20 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63 # proper objec
2b00: 74 20 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20 t reference....
2b10: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 $branch setch
2b20: 69 6c 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68 ildrevnr $branch
2b30: 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e revnr..}..return
2b40: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
2b50: 6f 64 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72 od Rev2Branch {r
2b60: 65 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 evnr} {..if {[re
2b70: 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 v istrunkrevnr $
2b80: 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 74 revnr]} {.. t
2b90: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 rouble internal
2ba0: 22 45 78 70 65 63 74 65 64 20 61 20 62 72 61 6e "Expected a bran
2bb0: 63 68 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 ch revision numb
2bc0: 65 72 22 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 er"..}..return $
2bd0: 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20 mybranches([rev
2be0: 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72 2branchnr $revnr
2bf0: 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 ]). }.. me
2c00: 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65 thod AddUnlabele
2c10: 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e dBranch {branchn
2c20: 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73 r} {..return [$s
2c30: 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e elf AddBranch un
2c40: 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e labeled-$branchn
2c50: 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20 r $branchnr].
2c60: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 }.. method A
2c70: 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62 ddBranch {name b
2c80: 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b ranchnr} {..if {
2c90: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62 [info exists myb
2ca0: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e ranches($branchn
2cb0: 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 r)]} {.. log
2cc0: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e write 1 file "In
2cd0: 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e '$mypath': Bran
2ce0: 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e ch '$branchnr' n
2cf0: 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68 amed '[$mybranch
2d00: 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61 es($branchnr) na
2d10: 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77 me]'".. log w
2d20: 72 69 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e rite 1 file "Can
2d30: 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20 not have second
2d40: 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67 name '$name', ig
2d50: 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20 noring it"..
2d60: 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62 return..}..set b
2d70: 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f ranch [sym %AUTO
2d80: 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 % branch $branch
2d90: 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 nr [$myproject g
2da0: 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20 etsymbol $name]
2db0: 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e 63 68 20 $self]..$branch
2dc0: 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e 63 setposition [inc
2dd0: 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a 09 r mybranchcnt]..
2de0: 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24 set mybranches($
2df0: 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61 6e 63 branchnr) $branc
2e00: 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61 6e 63 h..return $branc
2e10: 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 h. }.. met
2e20: 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61 6d 65 hod AddTag {name
2e30: 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 74 revnr} {..set t
2e40: 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 74 ag [sym %AUTO% t
2e50: 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79 70 72 ag $revnr [$mypr
2e60: 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 oject getsymbol
2e70: 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 6c $name] $self]..l
2e80: 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28 24 72 append mytags($r
2e90: 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65 74 75 evnr) $tag..retu
2ea0: 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a 0a 20 rn $tag. }..
2eb0: 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 method Record
2ec0: 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65 BasicDependencie
2ed0: 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 7b s {revnr next} {
2ee0: 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65 20 72 ..# Handle the r
2ef0: 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 6e evision dependen
2f00: 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74 68 65 cies. Record the
2f10: 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 23 m for now, do..#
2f20: 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20 74 68 nothing with th
2f30: 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 74 em yet....# On t
2f40: 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27 6e 65 he trunk the 'ne
2f50: 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 xt' field points
2f60: 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 to the previous
2f70: 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 2e ..# revision, i.
2f80: 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74 5f 20 e. the _parent_
2f90: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f of the current o
2fa0: 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 20 ne. Example:..#
2fb0: 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20 31 2e 1.6's next is 1.
2fc0: 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 64 5 (modulo cvs ad
2fd0: 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f 6e min -o)....# Con
2fe0: 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 61 trarily on a bra
2ff0: 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27 20 66 nch the 'next' f
3000: 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 ield points to t
3010: 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20 5f 63 he..# primary _c
3020: 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 72 hild_ of the cur
3030: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 41 rent revision. A
3040: 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 2e s example,..# 1.
3050: 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27 20 77 1.3.2's 'next' w
3060: 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e 0a ill be 1.1.3.3..
3070: 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27 20 66 ..# The 'next' f
3080: 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 6c ield actually al
3090: 77 61 79 73 20 72 65 66 65 72 73 20 74 6f 20 74 ways refers to t
30a0: 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 63 he revision..# c
30b0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 65 ontaining the de
30c0: 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20 72 65 lta needed to re
30d0: 74 72 69 65 76 65 20 74 68 61 74 20 72 65 76 69 trieve that revi
30e0: 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 65 sion....# The de
30f0: 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 65 pendencies neede
3100: 64 20 68 65 72 65 20 61 72 65 20 74 68 65 20 6c d here are the l
3110: 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75 72 65 ogical structure
3120: 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68 69 6c ,..# parent/chil
3130: 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 69 d, and not the i
3140: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 mplementation de
3150: 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 23 pendent delta..#
3160: 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 20 pointers....if
3170: 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20 72 65 {$next eq ""} re
3180: 74 75 72 6e 0a 09 23 20 20 20 20 20 20 20 20 20 turn..#
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
31a0: 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 parent -> child
31b0: 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 ..if {[rev istru
31c0: 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d nkrevnr $revnr]}
31d0: 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 {.. lappend
31e0: 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 mydependencies $
31f0: 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 65 next $revnr..} e
3200: 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 lse {.. lappe
3210: 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 nd mydependencie
3220: 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09 s $revnr $next..
3230: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
3240: 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 . method Proc
3250: 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 essPrimaryDepend
3260: 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 encies {} {..for
3270: 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65 76 6e each {parentrevn
3280: 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20 24 6d r childrevnr} $m
3290: 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 0a ydependencies {.
32a0: 09 20 20 20 20 73 65 74 20 70 61 72 65 6e 74 20 . set parent
32b0: 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74 72 65 $myrev($parentre
32c0: 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20 63 68 vnr).. set ch
32d0: 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63 68 69 ild $myrev($chi
32e0: 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20 24 70 ldrevnr).. $p
32f0: 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64 20 24 arent setchild $
3300: 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c child.. $chil
3310: 64 20 73 65 74 70 61 72 65 6e 74 20 24 70 61 72 d setparent $par
3320: 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 ent..}..return.
3330: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
3340: 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44 65 ProcessBranchDe
3350: 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a pendencies {} {.
3360: 09 66 6f 72 65 61 63 68 20 7b 62 72 61 6e 63 68 .foreach {branch
3370: 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 nr branch} [arra
3380: 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 y get mybranches
3390: 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72 65 76 ] {.. set rev
33a0: 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 nr [$branch pare
33b0: 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20 69 ntrevnr]... i
33c0: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists
33d0: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d myrev($revnr)]}
33e0: 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 {...log write 1
33f0: 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 file "In '$mypa
3400: 74 68 27 3a 20 54 68 65 20 62 72 61 6e 63 68 20 th': The branch
3410: 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d 27 '[$branch name]'
3420: 20 72 65 66 65 72 65 6e 63 65 73 22 0a 09 09 6c references"...l
3430: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 og write 1 file
3440: 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 73 "the bogus revis
3450: 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64 ion '$revnr' and
3460: 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 will be ignored
3470: 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 64 65 73 ."...$branch des
3480: 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79 62 troy...unset myb
3490: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e ranches($branchn
34a0: 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b r).. } else {
34b0: 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 ...set rev $myre
34c0: 76 28 24 72 65 76 6e 72 29 0a 09 09 24 72 65 76 v($revnr)...$rev
34d0: 20 61 64 64 62 72 61 6e 63 68 20 24 62 72 61 6e addbranch $bran
34e0: 63 68 0a 09 09 24 62 72 61 6e 63 68 20 73 65 74 ch...$branch set
34f0: 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09 09 23 parent $rev....#
3500: 20 49 66 20 72 65 76 69 73 69 6f 6e 73 20 77 65 If revisions we
3510: 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 re committed on
3520: 74 68 65 20 62 72 61 6e 63 68 20 77 65 20 73 74 the branch we st
3530: 6f 72 65 20 61 0a 09 09 23 20 72 65 66 65 72 65 ore a...# refere
3540: 6e 63 65 20 74 6f 20 74 68 65 20 62 72 61 6e 63 nce to the branc
3550: 68 20 74 68 65 72 65 2c 20 61 6e 64 20 66 75 72 h there, and fur
3560: 74 68 65 72 20 64 65 63 6c 61 72 65 0a 09 09 23 ther declare...#
3570: 20 74 68 65 20 66 69 72 73 74 20 63 68 69 6c 64 the first child
3580: 27 73 20 70 61 72 65 6e 74 20 74 6f 20 62 65 20 's parent to be
3590: 62 72 61 6e 63 68 27 73 20 70 61 72 65 6e 74 2c branch's parent,
35a0: 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 20 74 68 and...# list th
35b0: 69 73 20 63 68 69 6c 64 20 69 6e 20 74 68 65 20 is child in the
35c0: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e parent revision.
35d0: 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e 63 68 ....if {[$branch
35e0: 20 68 61 73 63 68 69 6c 64 72 65 76 5d 7d 20 7b haschildrev]} {
35f0: 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 ... set child
3600: 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 63 revnr [$branch c
3610: 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20 20 hildrevnr]...
3620: 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79 72 65 set child $myre
3630: 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 09 v($childrevnr)..
3640: 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 . $branch set
3650: 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09 09 child $child....
3660: 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 $child setpa
3670: 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e rentbranch $bran
3680: 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c 64 20 ch... $child
3690: 73 65 74 70 61 72 65 6e 74 20 20 20 20 20 20 20 setparent
36a0: 24 72 65 76 0a 09 09 20 20 20 20 24 72 65 76 20 $rev... $rev
36b0: 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 addchildonbranch
36c0: 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20 20 $child...}..
36d0: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 }..}..return.
36e0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
36f0: 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b 7d 20 SortBranches {}
3700: 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e {..foreach {revn
3710: 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 r rev} [array ge
3720: 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65 76 20 t myrev] { $rev
3730: 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d 0a 09 sortbranches }..
3740: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
3750: 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 method Process
3760: 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65 73 20 TagDependencies
3770: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 {} {..foreach {r
3780: 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b 61 evnr taglist} [a
3790: 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d rray get mytags]
37a0: 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e {.. if {![in
37b0: 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 fo exists myrev(
37c0: 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73 65 $revnr)]} {...se
37d0: 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74 61 t n [llength $ta
37e0: 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72 69 glist]...log wri
37f0: 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 te 1 file "In '$
3800: 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66 6f 6c mypath': The fol
3810: 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20 74 lowing [nsp $n t
3820: 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22 0a 09 ag] reference"..
3830: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c .log write 1 fil
3840: 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 e "the bogus rev
3850: 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 ision '$revnr' a
3860: 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 nd will be ignor
3870: 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68 20 74 ed."...foreach t
3880: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 ag $taglist {...
3890: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 log write 1
38a0: 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61 67 20 file " [$tag
38b0: 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24 74 61 name]"... $ta
38c0: 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09 09 g destroy...}...
38d0: 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24 72 65 unset mytags($re
38e0: 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 vnr).. } else
38f0: 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 {...set rev $my
3900: 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 66 6f rev($revnr)...fo
3910: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 reach tag $tagli
3920: 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20 st {... $rev
3930: 61 64 64 74 61 67 20 20 20 20 24 74 61 67 0a 09 addtag $tag..
3940: 09 20 20 20 20 24 74 61 67 20 73 65 74 74 61 67 . $tag settag
3950: 72 65 76 20 24 72 65 76 0a 09 09 7d 0a 09 20 20 rev $rev...}..
3960: 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 }..}..return.
3970: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
3980: 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f DetermineTheRoo
3990: 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09 tRevision {} {..
39a0: 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20 74 68 # The root is th
39b0: 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 77 e one revision w
39c0: 68 69 63 68 20 68 61 73 20 6e 6f 20 70 61 72 65 hich has no pare
39d0: 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 63 6b 69 nt. By..# checki
39e0: 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 ng all revisions
39f0: 20 77 65 20 65 6e 73 75 72 65 20 74 68 61 74 20 we ensure that
3a00: 77 65 20 63 61 6e 20 64 65 74 65 63 74 20 61 6e we can detect an
3a10: 64 0a 09 23 20 72 65 70 6f 72 74 20 74 68 65 20 d..# report the
3a20: 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c 65 case of multiple
3a30: 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74 20 roots. Without
3a40: 74 68 61 74 20 77 65 20 63 6f 75 6c 64 0a 09 23 that we could..#
3a50: 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e 65 simply take one
3a60: 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 66 6f revision and fo
3a70: 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 6e 74 20 llow the parent
3a80: 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65 69 links to..# thei
3a90: 72 20 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a 0a r root (sic!)...
3aa0: 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 .foreach {revnr
3ab0: 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20 rev} [array get
3ac0: 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20 69 66 myrev] {.. if
3ad0: 20 7b 5b 24 72 65 76 20 68 61 73 70 61 72 65 6e {[$rev hasparen
3ae0: 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 t]} continue..
3af0: 20 20 69 66 20 7b 24 6d 79 72 6f 6f 74 20 6e 65 if {$myroot ne
3b00: 20 22 22 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 ""} { trouble i
3b10: 6e 74 65 72 6e 61 6c 20 22 4d 75 6c 74 69 70 6c nternal "Multipl
3b20: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 e root revisions
3b30: 20 66 6f 75 6e 64 22 20 7d 0a 09 20 20 20 20 73 found" }.. s
3b40: 65 74 20 6d 79 72 6f 6f 74 20 24 72 65 76 0a 09 et myroot $rev..
3b50: 7d 0a 0a 09 23 20 49 6e 20 74 68 65 20 66 75 74 }...# In the fut
3b60: 75 72 65 20 77 65 20 61 6c 73 6f 20 6e 65 65 64 ure we also need
3b70: 20 61 20 6c 69 73 74 2c 20 61 73 20 62 72 61 6e a list, as bran
3b80: 63 68 65 73 20 63 61 6e 20 62 65 63 6f 6d 65 0a ches can become.
3b90: 09 23 20 73 65 76 65 72 65 64 20 66 72 6f 6d 20 .# severed from
3ba0: 74 68 65 69 72 20 70 61 72 65 6e 74 2c 20 6d 61 their parent, ma
3bb0: 6b 69 6e 67 20 74 68 65 6d 20 74 68 65 69 72 20 king them their
3bc0: 6f 77 6e 20 72 6f 6f 74 2e 0a 09 73 65 74 20 6d own root...set m
3bd0: 79 72 6f 6f 74 73 20 5b 6c 69 73 74 20 24 6d 79 yroots [list $my
3be0: 72 6f 6f 74 5d 0a 09 72 65 74 75 72 6e 0a 20 20 root]..return.
3bf0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
3c00: 44 65 74 65 72 6d 69 6e 65 52 65 76 69 73 69 6f DetermineRevisio
3c10: 6e 4f 70 65 72 61 74 69 6f 6e 73 20 7b 7d 20 7b nOperations {} {
3c20: 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 6d ..foreach rev $m
3c30: 79 72 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 yrevisions { $re
3c40: 76 20 64 65 74 65 72 6d 69 6e 65 6f 70 65 72 61 v determineopera
3c50: 74 69 6f 6e 20 7d 0a 09 72 65 74 75 72 6e 0a 20 tion }..return.
3c60: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
3c70: 20 44 65 74 65 72 6d 69 6e 65 4c 69 6e 65 73 4f DetermineLinesO
3c80: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 fDevelopment {}
3c90: 7b 0a 09 23 20 46 6f 72 20 72 65 76 69 73 69 6f {..# For revisio
3ca0: 6e 73 20 74 68 69 73 20 68 61 73 20 62 65 65 6e ns this has been
3cb0: 20 64 6f 6e 65 20 61 6c 72 65 61 64 79 2c 20 69 done already, i
3cc0: 6e 20 27 65 78 74 65 6e 64 27 2e 20 4e 6f 77 0a n 'extend'. Now.
3cd0: 09 23 20 77 65 20 64 6f 20 74 68 69 73 20 66 6f .# we do this fo
3ce0: 72 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 61 r the branches a
3cf0: 6e 64 20 74 61 67 73 2e 0a 0a 09 66 6f 72 65 61 nd tags....forea
3d00: 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b 61 ch {_ branch} [a
3d10: 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 rray get mybranc
3d20: 68 65 73 5d 20 7b 0a 09 20 20 20 20 24 62 72 61 hes] {.. $bra
3d30: 6e 63 68 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c nch setlod [$sel
3d40: 66 20 47 65 74 4c 4f 44 20 5b 24 62 72 61 6e 63 f GetLOD [$branc
3d50: 68 20 70 61 72 65 6e 74 72 65 76 6e 72 5d 5d 0a h parentrevnr]].
3d60: 09 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 .}...foreach {_
3d70: 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 taglist} [array
3d80: 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 get mytags] {..
3d90: 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 24 foreach tag $
3da0: 74 61 67 6c 69 73 74 20 7b 0a 09 09 24 74 61 67 taglist {...$tag
3db0: 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 setlod [$self G
3dc0: 65 74 4c 4f 44 20 5b 24 74 61 67 20 74 61 67 72 etLOD [$tag tagr
3dd0: 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 09 7d evnr]].. }..}
3de0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
3df0: 20 20 20 20 6d 65 74 68 6f 64 20 47 65 74 4c 4f method GetLO
3e00: 44 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 69 66 20 D {revnr} {..if
3e10: 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 {[rev istrunkrev
3e20: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 nr $revnr]} {..
3e30: 20 20 20 72 65 74 75 72 6e 20 24 6d 79 74 72 75 return $mytru
3e40: 6e 6b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 nk..} else {..
3e50: 20 20 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 return [$self
3e60: 52 65 76 32 42 72 61 6e 63 68 20 24 72 65 76 6e Rev2Branch $revn
3e70: 72 5d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 r]..}. }..
3e80: 20 6d 65 74 68 6f 64 20 48 61 6e 64 6c 65 4e 6f method HandleNo
3e90: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 nTrunkDefaultBra
3ea0: 6e 63 68 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 nch {} {..set re
3eb0: 76 6c 69 73 74 20 5b 24 73 65 6c 66 20 4e 6f 6e vlist [$self Non
3ec0: 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 TrunkDefaultRevi
3ed0: 73 69 6f 6e 73 5d 0a 09 69 66 20 7b 21 5b 6c 6c sions]..if {![ll
3ee0: 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d 7d ength $revlist]}
3ef0: 20 72 65 74 75 72 6e 0a 0a 09 24 73 65 6c 66 20 return...$self
3f00: 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 AdjustNonTrunkDe
3f10: 66 61 75 6c 74 42 72 61 6e 63 68 20 24 72 65 76 faultBranch $rev
3f20: 6c 69 73 74 0a 09 24 73 65 6c 66 20 43 68 65 63 list..$self Chec
3f30: 6b 4c 4f 44 73 0a 09 72 65 74 75 72 6e 0a 20 20 kLODs..return.
3f40: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
3f50: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 NonTrunkDefaultR
3f60: 65 76 69 73 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 evisions {} {..#
3f70: 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 From cvs2svn th
3f80: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c e following expl
3f90: 61 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f anation (with mo
3fa0: 64 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 difications..# f
3fb0: 6f 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d or our algorithm
3fc0: 29 3a 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 ):...# Determine
3fd0: 20 77 68 65 74 68 65 72 20 74 68 65 72 65 20 61 whether there a
3fe0: 72 65 20 61 6e 79 20 6e 6f 6e 2d 74 72 75 6e 6b re any non-trunk
3ff0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a default branch.
4000: 09 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 .# revisions....
4010: 23 20 49 66 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b # If a non-trunk
4020: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 default branch
4030: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f is determined to
4040: 20 68 61 76 65 20 65 78 69 73 74 65 64 2c 0a 09 have existed,..
4050: 23 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 # return a list
4060: 6f 66 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 61 of objects for a
4070: 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 74 68 61 ll revisions tha
4080: 74 20 77 65 72 65 20 6f 6e 63 65 0a 09 23 20 6e t were once..# n
4090: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 on-trunk default
40a0: 20 72 65 76 69 73 69 6f 6e 73 2c 20 69 6e 20 64 revisions, in d
40b0: 65 70 65 6e 64 65 6e 63 79 20 6f 72 64 65 72 20 ependency order
40c0: 28 69 2e 65 2e 20 72 6f 6f 74 0a 09 23 20 66 69 (i.e. root..# fi
40d0: 72 73 74 29 2e 0a 0a 09 23 20 54 68 65 72 65 20 rst)....# There
40e0: 61 72 65 20 74 77 6f 20 63 61 73 65 73 20 74 6f are two cases to
40f0: 20 68 61 6e 64 6c 65 3a 0a 0a 09 23 20 4f 6e 65 handle:...# One
4100: 20 63 61 73 65 20 69 73 20 73 69 6d 70 6c 65 2e case is simple.
4110: 20 20 54 68 65 20 52 43 53 20 66 69 6c 65 20 6c The RCS file l
4120: 69 73 74 73 20 61 20 64 65 66 61 75 6c 74 20 62 ists a default b
4130: 72 61 6e 63 68 0a 09 23 20 65 78 70 6c 69 63 69 ranch..# explici
4140: 74 6c 79 20 69 6e 20 69 74 73 20 68 65 61 64 65 tly in its heade
4150: 72 2c 20 73 75 63 68 20 61 73 20 27 31 2e 31 2e r, such as '1.1.
4160: 31 27 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 1'. In this cas
4170: 65 2c 20 77 65 0a 09 23 20 6b 6e 6f 77 20 74 68 e, we..# know th
4180: 61 74 20 65 76 65 72 79 20 72 65 76 69 73 69 6f at every revisio
4190: 6e 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 n on the vendor
41a0: 62 72 61 6e 63 68 20 69 73 20 74 6f 20 62 65 0a branch is to be.
41b0: 09 23 20 74 72 65 61 74 65 64 20 61 73 20 68 65 .# treated as he
41c0: 61 64 20 6f 66 20 74 72 75 6e 6b 20 61 74 20 74 ad of trunk at t
41d0: 68 61 74 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d hat point in tim
41e0: 65 2e 0a 0a 09 23 20 42 75 74 20 74 68 65 72 65 e....# But there
41f0: 27 73 20 61 6c 73 6f 20 61 20 64 65 67 65 6e 65 's also a degene
4200: 72 61 74 65 20 63 61 73 65 2e 20 20 54 68 65 20 rate case. The
4210: 52 43 53 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f RCS file does no
4220: 74 0a 09 23 20 63 75 72 72 65 6e 74 6c 79 20 68 t..# currently h
4230: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 62 72 ave a default br
4240: 61 6e 63 68 2c 20 79 65 74 20 77 65 20 63 61 6e anch, yet we can
4250: 20 64 65 64 75 63 65 20 74 68 61 74 20 66 6f 72 deduce that for
4260: 0a 09 23 20 73 6f 6d 65 20 70 65 72 69 6f 64 20 ..# some period
4270: 69 6e 20 74 68 65 20 70 61 73 74 20 69 74 20 70 in the past it p
4280: 72 6f 62 61 62 6c 79 20 2a 64 69 64 2a 20 68 61 robably *did* ha
4290: 76 65 20 6f 6e 65 2e 20 20 46 6f 72 0a 09 23 20 ve one. For..#
42a0: 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 69 6c example, the fil
42b0: 65 20 68 61 73 20 76 65 6e 64 6f 72 20 72 65 76 e has vendor rev
42c0: 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 31 20 2d isions 1.1.1.1 -
42d0: 3e 20 31 2e 31 2e 31 2e 39 36 2c 0a 09 23 20 61 > 1.1.1.96,..# a
42e0: 6c 6c 20 6f 66 20 77 68 69 63 68 20 61 72 65 20 ll of which are
42f0: 64 61 74 65 64 20 62 65 66 6f 72 65 20 31 2e 32 dated before 1.2
4300: 2c 20 61 6e 64 20 74 68 65 6e 20 69 74 20 68 61 , and then it ha
4310: 73 20 31 2e 31 2e 31 2e 39 37 0a 09 23 20 2d 3e s 1.1.1.97..# ->
4320: 20 31 2e 31 2e 31 2e 31 30 30 20 64 61 74 65 64 1.1.1.100 dated
4330: 20 61 66 74 65 72 20 31 2e 32 2e 20 20 49 6e 20 after 1.2. In
4340: 74 68 69 73 20 63 61 73 65 2c 20 77 65 20 73 68 this case, we sh
4350: 6f 75 6c 64 0a 09 23 20 72 65 63 6f 72 64 20 31 ould..# record 1
4360: 2e 31 2e 31 2e 39 36 20 61 73 20 74 68 65 20 6c .1.1.96 as the l
4370: 61 73 74 20 76 65 6e 64 6f 72 20 72 65 76 69 73 ast vendor revis
4380: 69 6f 6e 20 74 6f 20 68 61 76 65 20 62 65 65 6e ion to have been
4390: 20 74 68 65 0a 09 23 20 68 65 61 64 20 6f 66 20 the..# head of
43a0: 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e the default bran
43b0: 63 68 2e 0a 0a 09 69 66 20 7b 24 6d 79 70 72 69 ch....if {$mypri
43c0: 6e 63 69 70 61 6c 20 6e 65 20 22 22 7d 20 7b 0a ncipal ne ""} {.
43d0: 09 20 20 20 20 23 20 54 68 65 72 65 20 69 73 20 . # There is
43e0: 73 74 69 6c 6c 20 61 20 64 65 66 61 75 6c 74 20 still a default
43f0: 62 72 61 6e 63 68 3b 20 74 68 61 74 20 6d 65 61 branch; that mea
4400: 6e 73 20 74 68 61 74 20 61 6c 6c 0a 09 20 20 20 ns that all..
4410: 20 23 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 # revisions on
4420: 74 68 61 74 20 62 72 61 6e 63 68 20 67 65 74 20 that branch get
4430: 6d 61 72 6b 65 64 2e 0a 0a 09 20 20 20 20 6c 6f marked.... lo
4440: 67 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 g write 5 file "
4450: 46 6f 75 6e 64 20 65 78 70 6c 69 63 69 74 6c 79 Found explicitly
4460: 20 6d 61 72 6b 65 64 20 4e 54 44 42 22 0a 0a 09 marked NTDB"...
4470: 20 20 20 20 73 65 74 20 72 6e 65 78 74 20 5b 24 set rnext [$
4480: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 myroot child]..
4490: 20 20 20 69 66 20 7b 24 72 6e 65 78 74 20 6e 65 if {$rnext ne
44a0: 20 22 22 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 ""} {...trouble
44b0: 20 66 61 74 61 6c 20 22 46 69 6c 65 20 77 69 74 fatal "File wit
44c0: 68 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 h default branch
44d0: 20 24 6d 79 70 72 69 6e 63 69 70 61 6c 20 61 6c $myprincipal al
44e0: 73 6f 20 68 61 73 20 72 65 76 69 73 69 6f 6e 20 so has revision
44f0: 5b 24 72 6e 65 78 74 20 72 65 76 6e 72 5d 22 0a [$rnext revnr]".
4500: 09 09 72 65 74 75 72 6e 0a 09 20 20 20 20 7d 0a ..return.. }.
4510: 0a 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 .. set rev [$
4520: 6d 79 62 72 61 6e 63 68 65 73 28 24 6d 79 70 72 mybranches($mypr
4530: 69 6e 63 69 70 61 6c 29 20 63 68 69 6c 64 5d 0a incipal) child].
4540: 09 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a . set res {}.
4550: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65 .. while {$re
4560: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70 v ne ""} {...lap
4570: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 pend res $rev...
4580: 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 set rev [$rev ch
4590: 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 ild].. }...
45a0: 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09 return $res...
45b0: 7d 20 65 6c 73 65 69 66 20 7b 24 6d 79 69 6d 70 } elseif {$myimp
45c0: 6f 72 74 65 64 7d 20 7b 0a 09 20 20 20 20 23 20 orted} {.. #
45d0: 4e 6f 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 No default branc
45e0: 68 2c 20 62 75 74 20 74 68 65 20 66 69 6c 65 20 h, but the file
45f0: 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 20 appears to have
4600: 62 65 65 6e 0a 09 20 20 20 20 23 20 69 6d 70 6f been.. # impo
4610: 72 74 65 64 2e 20 20 53 6f 20 6f 75 72 20 65 64 rted. So our ed
4620: 75 63 61 74 65 64 20 67 75 65 73 73 20 69 73 20 ucated guess is
4630: 74 68 61 74 20 61 6c 6c 20 72 65 76 69 73 69 6f that all revisio
4640: 6e 73 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 65 ns.. # on the
4650: 20 27 31 2e 31 2e 31 27 20 62 72 61 6e 63 68 20 '1.1.1' branch
4660: 77 69 74 68 20 74 69 6d 65 73 74 61 6d 70 73 20 with timestamps
4670: 70 72 69 6f 72 20 74 6f 20 74 68 65 0a 09 20 20 prior to the..
4680: 20 20 23 20 74 69 6d 65 73 74 61 6d 70 20 6f 66 # timestamp of
4690: 20 27 31 2e 32 27 20 77 65 72 65 20 6e 6f 6e 2d '1.2' were non-
46a0: 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 trunk default br
46b0: 61 6e 63 68 0a 09 20 20 20 20 23 20 72 65 76 69 anch.. # revi
46c0: 73 69 6f 6e 73 2e 0a 09 20 20 20 20 0a 09 20 20 sions... ..
46d0: 20 20 23 20 54 68 69 73 20 72 65 61 6c 6c 79 20 # This really
46e0: 6f 6e 6c 79 20 70 72 6f 63 65 73 73 65 73 20 73 only processes s
46f0: 74 61 6e 64 61 72 64 20 27 31 2e 31 2e 31 2e 2a tandard '1.1.1.*
4700: 27 2d 73 74 79 6c 65 0a 09 20 20 20 20 23 20 76 '-style.. # v
4710: 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e endor revisions.
4720: 20 20 4f 6e 65 20 63 6f 75 6c 64 20 63 6f 6e 63 One could conc
4730: 65 69 76 61 62 6c 79 20 68 61 76 65 20 61 20 66 eivably have a f
4740: 69 6c 65 0a 09 20 20 20 20 23 20 77 68 6f 73 65 ile.. # whose
4750: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 default branch
4760: 69 73 20 31 2e 31 2e 33 20 6f 72 20 77 68 61 74 is 1.1.3 or what
4770: 65 76 65 72 2c 20 6f 72 20 77 61 73 20 74 68 61 ever, or was tha
4780: 74 0a 09 20 20 20 20 23 20 61 74 20 73 6f 6d 65 t.. # at some
4790: 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 point in time,
47a0: 77 69 74 68 20 76 65 6e 64 6f 72 20 72 65 76 69 with vendor revi
47b0: 73 69 6f 6e 73 20 31 2e 31 2e 33 2e 31 2c 0a 09 sions 1.1.3.1,..
47c0: 20 20 20 20 23 20 31 2e 31 2e 33 2e 32 2c 20 65 # 1.1.3.2, e
47d0: 74 63 2e 20 20 42 75 74 20 77 69 74 68 20 74 68 tc. But with th
47e0: 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 e default branch
47f0: 20 67 6f 6e 65 20 6e 6f 77 2c 0a 09 20 20 20 20 gone now,..
4800: 23 20 77 65 27 64 20 68 61 76 65 20 6e 6f 20 62 # we'd have no b
4810: 61 73 69 73 20 66 6f 72 20 61 73 73 75 6d 69 6e asis for assumin
4820: 67 20 74 68 61 74 20 74 68 65 20 6e 6f 6e 2d 73 g that the non-s
4830: 74 61 6e 64 61 72 64 0a 09 20 20 20 20 23 20 76 tandard.. # v
4840: 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 68 61 64 endor branch had
4850: 20 65 76 65 72 20 62 65 65 6e 20 74 68 65 20 64 ever been the d
4860: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 61 6e efault branch an
4870: 79 77 61 79 2e 0a 09 20 20 20 20 0a 09 20 20 20 yway... ..
4880: 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 # Note that we
4890: 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73 rely on comparis
48a0: 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 ons between the
48b0: 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 20 timestamps..
48c0: 23 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f # of the revisio
48d0: 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 ns on the vendor
48e0: 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61 74 branch and that
48f0: 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69 73 of.. # revis
4900: 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 68 ion 1.2, even th
4910: 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73 74 61 ough the timesta
4920: 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20 20 mps might be..
4930: 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64 75 # incorrect du
4940: 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e e to clock skew.
4950: 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 20 We could do a
4960: 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23 20 slightly.. #
4970: 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77 65 better job if we
4980: 20 75 73 65 64 20 74 68 65 20 63 68 61 6e 67 65 used the change
4990: 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c 20 set timestamps,
49a0: 61 73 20 69 74 20 69 73 0a 09 20 20 20 20 23 20 as it is.. #
49b0: 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74 68 possible that th
49c0: 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74 e dependencies t
49d0: 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20 hat went into..
49e0: 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e 67 # determining
49f0: 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d 70 those timestamp
4a00: 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75 72 s are more accur
4a10: 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20 23 ate. But.. #
4a20: 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71 75 that would requ
4a30: 69 72 65 20 61 6e 20 65 78 74 72 61 20 70 61 73 ire an extra pas
4a40: 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20 s or two....
4a50: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist
4a60: 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 s mybranches(1.1
4a70: 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b .1)]} { return {
4a80: 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 } }... log wr
4a90: 69 74 65 20 35 20 66 69 6c 65 20 22 44 65 64 75 ite 5 file "Dedu
4aa0: 63 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f 66 ced existence of
4ab0: 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 NTDB"... set
4ac0: 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 68 rev [$mybranch
4ad0: 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d es(1.1.1) child]
4ae0: 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 20 7b .. set res {
4af0: 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70 20 }.. set stop
4b00: 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a [$myroot child].
4b10: 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20 .. if {$stop
4b20: 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 74 eq ""} {...# Get
4b30: 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 everything on t
4b40: 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69 6c he branch...whil
4b50: 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b e {$rev ne ""} {
4b60: 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 ... lappend r
4b70: 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 es $rev... se
4b80: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c t rev [$rev chil
4b90: 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c d]...}.. } el
4ba0: 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74 se {...# Collect
4bb0: 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 everything on t
4bc0: 68 65 20 62 72 61 6e 63 68 20 77 68 69 63 68 20 he branch which
4bd0: 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 09 seems to have...
4be0: 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64 # been committed
4bf0: 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 before the firs
4c00: 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 t primary child
4c10: 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 20 of the...# root
4c20: 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20 revision....set
4c30: 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 20 stopdate [$stop
4c40: 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24 date]...while {$
4c50: 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 rev ne ""} {...
4c60: 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61 74 if {[$rev dat
4c70: 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d e] >= $stopdate}
4c80: 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 70 break... lap
4c90: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 pend res $rev...
4ca0: 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 set rev [$re
4cb0: 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 v child]...}..
4cc0: 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e }... return
4cd0: 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b $res...} else {
4ce0: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a .. return {}.
4cf0: 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 .}. }.. #
4d00: 47 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49 6e General note: In
4d10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d the following m
4d20: 65 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20 6d ethods we only m
4d30: 6f 64 69 66 79 20 74 68 65 20 6c 69 6e 6b 73 0a odify the links.
4d40: 20 20 20 20 23 20 62 65 74 77 65 65 6e 20 72 65 # between re
4d50: 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d 62 visions and symb
4d60: 6f 6c 73 20 74 6f 20 72 65 73 74 72 75 63 74 75 ols to restructu
4d70: 72 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a re the revision.
4d80: 20 20 20 20 23 20 74 72 65 65 2e 20 57 65 20 64 # tree. We d
4d90: 6f 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 6f o __not__ destro
4da0: 79 20 74 68 65 20 6f 62 6a 65 63 74 73 2e 20 47 y the objects. G
4db0: 69 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65 78 iven the complex
4dc0: 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 43 20 links. # GC
4dd0: 69 73 20 64 69 66 66 69 63 75 6c 74 20 61 74 20 is difficult at
4de0: 74 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 20 69 this level. It i
4df0: 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 74 6f s much easier to
4e00: 20 64 72 6f 70 0a 20 20 20 20 23 20 65 76 65 72 drop. # ever
4e10: 79 74 68 69 6e 67 20 77 68 65 6e 20 77 65 20 77 ything when we w
4e20: 65 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 69 73 e are done. This
4e30: 20 68 61 70 70 65 6e 73 20 69 6e 20 27 64 72 6f happens in 'dro
4e40: 70 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 23 20 p', using. #
4e50: 74 68 65 20 73 74 61 74 65 20 76 61 72 69 61 62 the state variab
4e60: 6c 65 20 27 6d 79 72 65 76 27 2c 20 27 6d 79 62 le 'myrev', 'myb
4e70: 72 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 27 6d ranches', and 'm
4e80: 79 74 61 67 73 27 2e 20 57 68 61 74 20 77 65 0a ytags'. What we.
4e90: 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 70 65 # have to pe
4ea0: 72 73 69 73 74 2c 20 70 65 72 66 6f 72 6d 65 64 rsist, performed
4eb0: 20 62 79 20 27 70 65 72 73 69 73 74 27 2c 20 77 by 'persist', w
4ec0: 65 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a 20 e know will be.
4ed0: 20 20 20 23 20 72 65 61 63 68 61 62 6c 65 20 74 # reachable t
4ee0: 68 72 6f 75 67 68 20 74 68 65 20 72 65 76 69 73 hrough the revis
4ef0: 69 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e 20 27 ions listed in '
4f00: 6d 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 68 65 myroots' and the
4f10: 69 72 0a 20 20 20 20 23 20 63 68 69 6c 64 72 65 ir. # childre
4f20: 6e 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a 0a n and symbols...
4f30: 20 20 20 20 6d 65 74 68 6f 64 20 41 64 6a 75 73 method Adjus
4f40: 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 tNonTrunkDefault
4f50: 42 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 74 7d Branch {revlist}
4f60: 20 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b 24 6d {..set stop [$m
4f70: 79 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23 20 yroot child] ;#
4f80: 72 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 20 rev '1.2'...log
4f90: 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 41 64 write 5 file "Ad
4fa0: 6a 75 73 74 69 6e 67 20 4e 54 44 42 20 63 6f 6e justing NTDB con
4fb0: 74 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c taining [nsp [ll
4fc0: 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d 20 ength $revlist]
4fd0: 72 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 46 revision]"...# F
4fe0: 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20 rom cvs2svn the
4ff0: 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e following explan
5000: 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 ation (with modi
5010: 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 fications..# for
5020: 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a our algorithm):
5030: 0a 0a 09 23 20 41 64 6a 75 73 74 20 74 68 65 20 ...# Adjust the
5040: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul
5050: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f t branch revisio
5060: 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a ns found in the.
5070: 09 23 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a 09 .# 'revlist'....
5080: 23 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 20 69 # 'myimported' i
5090: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 s a boolean flag
50a0: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 indicating whet
50b0: 68 65 72 20 74 68 69 73 20 66 69 6c 65 0a 09 23 her this file..#
50c0: 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 appears to have
50d0: 20 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c 20 been imported,
50e0: 77 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e 73 which also means
50f0: 20 74 68 61 74 0a 09 23 20 72 65 76 69 73 69 6f that..# revisio
5100: 6e 20 31 2e 31 20 68 61 73 20 61 20 67 65 6e 65 n 1.1 has a gene
5110: 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 rated log messag
5120: 65 20 74 68 61 74 20 6e 65 65 64 20 6e 6f 74 20 e that need not
5130: 62 65 0a 09 23 20 70 72 65 73 65 72 76 65 64 2e be..# preserved.
5140: 20 20 27 72 65 76 6c 69 73 74 27 20 69 73 20 61 'revlist' is a
5150: 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 20 list of object
5160: 72 65 66 65 72 65 6e 63 65 73 20 66 6f 72 20 74 references for t
5170: 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 he..# revisions
5180: 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 64 that have been d
5190: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 etermined to be
51a0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul
51b0: 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 t..# branch revi
51c0: 73 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 sions....# Note
51d0: 74 68 61 74 20 74 68 65 20 66 69 72 73 74 20 72 that the first r
51e0: 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 64 evision on the d
51f0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 efault branch is
5200: 0a 09 23 20 68 61 6e 64 6c 65 64 20 73 74 72 61 ..# handled stra
5210: 6e 67 65 6c 79 20 62 79 20 43 56 53 2e 20 20 49 ngely by CVS. I
5220: 66 20 61 20 66 69 6c 65 20 69 73 20 69 6d 70 6f f a file is impo
5230: 72 74 65 64 20 28 61 73 20 6f 70 70 6f 73 65 64 rted (as opposed
5240: 0a 09 23 20 74 6f 20 62 65 69 6e 67 20 61 64 64 ..# to being add
5250: 65 64 29 2c 20 43 56 53 20 63 72 65 61 74 65 73 ed), CVS creates
5260: 20 61 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 2c a 1.1 revision,
5270: 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 61 0a then creates a.
5280: 09 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 .# vendor branch
5290: 20 31 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e 20 1.1.1 based on
52a0: 31 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 74 65 1.1, then create
52b0: 73 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20 72 s a 1.1.1.1..# r
52c0: 65 76 69 73 69 6f 6e 20 74 68 61 74 20 69 73 20 evision that is
52d0: 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 68 65 identical to the
52e0: 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 69 1.1 revision (i
52f0: 2e 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c 74 .e., its..# delt
5300: 61 74 65 78 74 20 69 73 20 65 6d 70 74 79 29 2e atext is empty).
5310: 20 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 61 67 The log messag
5320: 65 20 74 68 61 74 20 74 68 65 20 75 73 65 72 20 e that the user
5330: 74 79 70 65 64 0a 09 23 20 77 68 65 6e 20 69 6d typed..# when im
5340: 70 6f 72 74 69 6e 67 20 69 73 20 73 74 6f 72 65 porting is store
5350: 64 20 77 69 74 68 20 74 68 65 20 31 2e 31 2e 31 d with the 1.1.1
5360: 2e 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 54 68 .1 revision. Th
5370: 65 20 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f e 1.1..# revisio
5380: 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e n always contain
5390: 73 20 61 20 73 74 61 6e 64 61 72 64 2c 20 67 65 s a standard, ge
53a0: 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 nerated log mess
53b0: 61 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 61 6c age,..# 'Initial
53c0: 20 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a 09 revision\n'....
53d0: 23 20 57 68 65 6e 20 77 65 20 64 65 74 65 63 74 # When we detect
53e0: 20 61 20 73 74 72 61 69 67 68 74 66 6f 72 77 61 a straightforwa
53f0: 72 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20 74 rd import like t
5400: 68 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 23 20 his, we want..#
5410: 74 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 79 20 to handle it by
5420: 64 65 6c 65 74 69 6e 67 20 74 68 65 20 31 2e 31 deleting the 1.1
5430: 20 72 65 76 69 73 69 6f 6e 20 28 77 68 69 63 68 revision (which
5440: 20 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e 74 doesn't..# cont
5450: 61 69 6e 20 61 6e 79 20 75 73 65 66 75 6c 20 69 ain any useful i
5460: 6e 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20 nformation) and
5470: 6d 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20 69 making 1.1.1.1 i
5480: 6e 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70 65 nto an..# indepe
5490: 6e 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74 68 ndent root in th
54a0: 65 20 66 69 6c 65 27 73 20 64 65 70 65 6e 64 65 e file's depende
54b0: 6e 63 79 20 74 72 65 65 2e 20 20 49 6e 20 53 56 ncy tree. In SV
54c0: 4e 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77 69 N,..# 1.1.1.1 wi
54d0: 6c 6c 20 62 65 20 61 64 64 65 64 20 64 69 72 65 ll be added dire
54e0: 63 74 6c 79 20 74 6f 20 74 68 65 20 76 65 6e 64 ctly to the vend
54f0: 6f 72 20 62 72 61 6e 63 68 20 77 69 74 68 20 69 or branch with i
5500: 74 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 63 6f ts..# initial co
5510: 6e 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e 20 ntent. Then in
5520: 61 20 73 70 65 63 69 61 6c 20 27 70 6f 73 74 2d a special 'post-
5530: 63 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23 20 commit', the..#
5540: 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e 1.1.1.1 revision
5550: 20 69 73 20 63 6f 70 69 65 64 20 62 61 63 6b 20 is copied back
5560: 74 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 66 to trunk....# If
5570: 20 74 68 65 20 75 73 65 72 20 69 6d 70 6f 72 74 the user import
5580: 73 20 61 67 61 69 6e 20 74 6f 20 74 68 65 20 73 s again to the s
5590: 61 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 ame vendor branc
55a0: 68 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 20 63 h, then CVS..# c
55b0: 72 65 61 74 65 73 20 72 65 76 69 73 69 6f 6e 73 reates revisions
55c0: 20 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 2e 1.1.1.2, 1.1.1.
55d0: 33 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 20 76 3, etc. on the v
55e0: 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23 endor branch,..#
55f0: 20 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e 74 *without* count
5600: 65 72 70 61 72 74 73 20 69 6e 20 74 72 75 6e 6b erparts in trunk
5610: 20 28 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 (even though th
5620: 65 73 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 ese revisions..#
5630: 20 65 66 66 65 63 74 69 76 65 6c 79 20 70 6c 61 effectively pla
5640: 79 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 74 72 y the role of tr
5650: 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e 20 unk revisions).
5660: 20 53 6f 20 61 66 74 65 72 20 77 65 20 61 64 64 So after we add
5670: 0a 09 23 20 73 75 63 68 20 72 65 76 69 73 69 6f ..# such revisio
5680: 6e 73 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 ns to the vendor
5690: 20 62 72 61 6e 63 68 2c 20 77 65 20 61 6c 73 6f branch, we also
56a0: 20 63 6f 70 79 20 74 68 65 6d 20 62 61 63 6b 20 copy them back
56b0: 74 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20 70 to..# trunk in p
56c0: 6f 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 23 ost-commits....#
56d0: 20 57 65 20 6d 61 72 6b 20 74 68 65 20 72 65 76 We mark the rev
56e0: 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 isions found in
56f0: 27 72 65 76 6c 69 73 74 27 20 61 73 20 64 65 66 'revlist' as def
5700: 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 ault branch..# r
5710: 65 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f 2c evisions. Also,
5720: 20 69 66 20 74 68 65 20 72 6f 6f 74 20 72 65 76 if the root rev
5730: 69 73 69 6f 6e 20 68 61 73 20 61 20 70 72 69 6d ision has a prim
5740: 61 72 79 20 63 68 69 6c 64 0a 09 23 20 77 65 20 ary child..# we
5750: 73 65 74 20 74 68 61 74 20 72 65 76 69 73 69 6f set that revisio
5760: 6e 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20 74 n to depend on t
5770: 68 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 6e he last non-trun
5780: 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61 k default..# bra
5790: 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 nch revision and
57a0: 20 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 73 74 possibly adjust
57b0: 20 69 74 73 20 74 79 70 65 20 61 63 63 6f 72 64 its type accord
57c0: 69 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69 72 ingly....set fir
57d0: 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c st [lindex $revl
57e0: 69 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 69 ist 0]...log wri
57f0: 74 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 66 69 te 6 file "<[$fi
5800: 72 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78 70 rst revnr]> [exp
5810: 72 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 3f r {$myimported ?
5820: 20 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 22 6e "imported" : "n
5830: 6f 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c 20 ot imported"}],
5840: 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f [$first operatio
5850: 6e 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69 72 n], [expr {[$fir
5860: 73 74 20 68 61 73 74 65 78 74 5d 20 3f 20 22 68 st hastext] ? "h
5870: 61 73 20 74 65 78 74 22 20 3a 20 22 6e 6f 20 74 as text" : "no t
5880: 65 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 6d ext"}]"...if {$m
5890: 79 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 20 20 yimported &&..
58a0: 20 20 5b 24 66 69 72 73 74 20 72 65 76 6e 72 5d [$first revnr]
58b0: 20 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 26 26 eq "1.1.1.1" &&
58c0: 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20 6f 70 .. [$first op
58d0: 65 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 68 61 eration] eq "cha
58e0: 6e 67 65 22 20 26 26 0a 09 20 20 20 20 21 5b 24 nge" &&.. ![$
58f0: 66 69 72 73 74 20 68 61 73 74 65 78 74 5d 7d 20 first hastext]}
5900: 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 31 {... set rev1
5910: 31 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 1 [$first parent
5920: 5d 20 3b 20 23 20 41 73 73 65 72 74 3a 20 53 68 ] ; # Assert: Sh
5930: 6f 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e 0a ould be myroot..
5940: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 . log write 3
5950: 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 file "Removing
5960: 69 72 72 65 6c 65 76 61 6e 74 20 72 65 76 69 73 irrelevant revis
5970: 69 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 76 6e ion [$rev11 revn
5980: 72 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 74 20 r]"... # Cut
5990: 6f 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 72 6f out the old myro
59a0: 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 20 ot revision....
59b0: 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f ldelete myroo
59c0: 74 73 20 24 72 65 76 31 31 20 3b 20 23 20 4e 6f ts $rev11 ; # No
59d0: 74 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f 6e t a root any lon
59e0: 67 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 72 73 ger.... $firs
59f0: 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 20 t cutfromparent
5a00: 3b 20 23 20 53 65 76 65 72 20 72 65 76 69 73 69 ; # Sever revisi
5a10: 6f 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 72 on from parent r
5a20: 65 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69 66 evision... if
5a30: 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b {$stop ne ""} {
5a40: 0a 09 09 24 73 74 6f 70 20 63 75 74 66 72 6f 6d ...$stop cutfrom
5a50: 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 parent...lappend
5a60: 20 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 20 3b myroots $stop ;
5a70: 20 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66 74 # New root, aft
5a80: 65 72 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 er vendor branch
5a90: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 .. }... #
5aa0: 43 75 74 20 6f 75 74 20 74 68 65 20 76 65 6e 64 Cut out the vend
5ab0: 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c or branch symbol
5ac0: 0a 0a 09 20 20 20 20 73 65 74 20 76 65 6e 64 6f ... set vendo
5ad0: 72 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 r [$first parent
5ae0: 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 66 20 branch].. if
5af0: 7b 24 76 65 6e 64 6f 72 20 65 71 20 22 22 7d 20 {$vendor eq ""}
5b00: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e { trouble intern
5b10: 61 6c 20 22 46 69 72 73 74 20 4e 54 44 42 20 72 al "First NTDB r
5b20: 65 76 69 73 69 6f 6e 20 68 61 73 20 6e 6f 20 62 evision has no b
5b30: 72 61 6e 63 68 22 20 7d 0a 09 20 20 20 20 69 66 ranch" }.. if
5b40: 20 7b 5b 24 76 65 6e 64 6f 72 20 70 61 72 65 6e {[$vendor paren
5b50: 74 5d 20 65 71 20 24 72 65 76 31 31 7d 20 7b 0a t] eq $rev11} {.
5b60: 09 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 62 ..$rev11 removeb
5b70: 72 61 6e 63 68 20 20 20 20 20 20 20 20 24 76 65 ranch $ve
5b80: 6e 64 6f 72 0a 09 09 24 72 65 76 31 31 20 72 65 ndor...$rev11 re
5b90: 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 movechildonbranc
5ba0: 68 20 24 66 69 72 73 74 0a 09 09 24 76 65 6e 64 h $first...$vend
5bb0: 6f 72 20 63 75 74 63 68 69 6c 64 0a 09 09 24 66 or cutchild...$f
5bc0: 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 irst cutfrompare
5bd0: 6e 74 62 72 61 6e 63 68 0a 09 09 6c 61 70 70 65 ntbranch...lappe
5be0: 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 nd myroots $firs
5bf0: 74 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 t.. }... #
5c00: 20 43 68 61 6e 67 65 20 74 68 65 20 74 79 70 65 Change the type
5c10: 20 6f 66 20 66 69 72 73 74 20 28 74 79 70 69 63 of first (typic
5c20: 61 6c 6c 79 20 66 72 6f 6d 20 43 68 61 6e 67 65 ally from Change
5c30: 20 74 6f 20 41 64 64 29 3a 0a 09 20 20 20 20 24 to Add):.. $
5c40: 66 69 72 73 74 20 72 65 74 79 70 65 20 61 64 64 first retype add
5c50: 0a 0a 09 20 20 20 20 23 20 4d 6f 76 65 20 61 6e ... # Move an
5c60: 79 20 74 61 67 73 20 61 6e 64 20 62 72 61 6e 63 y tags and branc
5c70: 68 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6c 64 hes from the old
5c80: 20 74 6f 20 74 68 65 20 6e 65 77 20 72 6f 6f 74 to the new root
5c90: 2e 0a 09 20 20 20 20 24 72 65 76 31 31 20 6d 6f ... $rev11 mo
5ca0: 76 65 73 79 6d 62 6f 6c 73 74 6f 20 24 66 69 72 vesymbolsto $fir
5cb0: 73 74 0a 09 7d 0a 0a 09 23 20 4d 61 72 6b 20 61 st..}...# Mark a
5cc0: 6c 6c 20 74 68 65 20 73 70 65 63 69 61 6c 20 72 ll the special r
5cd0: 65 76 69 73 69 6f 6e 73 20 61 73 20 73 75 63 68 evisions as such
5ce0: 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 72 ..foreach rev $r
5cf0: 65 76 6c 69 73 74 20 7b 0a 09 20 20 20 20 6c 6f evlist {.. lo
5d00: 67 20 77 72 69 74 65 20 33 20 66 69 6c 65 20 22 g write 3 file "
5d10: 52 65 76 69 73 69 6f 6e 20 6f 6e 20 64 65 66 61 Revision on defa
5d20: 75 6c 74 20 62 72 61 6e 63 68 3a 20 5b 24 72 65 ult branch: [$re
5d30: 76 20 72 65 76 6e 72 5d 22 0a 09 20 20 20 20 24 v revnr]".. $
5d40: 72 65 76 20 73 65 74 6f 6e 64 65 66 61 75 6c 74 rev setondefault
5d50: 62 72 61 6e 63 68 20 31 0a 09 7d 0a 0a 09 69 66 branch 1..}...if
5d60: 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b {$stop ne ""} {
5d70: 0a 09 20 20 20 20 23 20 52 65 76 69 73 69 6f 6e .. # Revision
5d80: 20 31 2e 32 20 6c 6f 67 69 63 61 6c 6c 79 20 66 1.2 logically f
5d90: 6f 6c 6c 6f 77 73 20 74 68 65 20 69 6d 70 6f 72 ollows the impor
5da0: 74 65 64 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 ted revisions,..
5db0: 20 20 20 20 23 20 6e 6f 74 20 31 2e 31 2e 20 20 # not 1.1.
5dc0: 41 63 63 6f 72 64 69 6e 67 6c 79 2c 20 63 6f 6e Accordingly, con
5dd0: 6e 65 63 74 20 69 74 20 74 6f 20 74 68 65 20 6c nect it to the l
5de0: 61 73 74 20 4e 54 44 42 52 20 61 6e 64 0a 09 20 ast NTDBR and..
5df0: 20 20 20 23 20 70 6f 73 73 69 62 6c 79 20 63 68 # possibly ch
5e00: 61 6e 67 65 20 69 74 73 20 74 79 70 65 2e 0a 0a ange its type...
5e10: 09 20 20 20 20 73 65 74 20 6c 61 73 74 20 5b 6c . set last [l
5e20: 69 6e 64 65 78 20 24 72 65 76 6c 69 73 74 20 65 index $revlist e
5e30: 6e 64 5d 0a 09 20 20 20 20 24 73 74 6f 70 20 73 nd].. $stop s
5e40: 65 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 etdefaultbranchp
5e50: 61 72 65 6e 74 20 24 6c 61 73 74 20 3b 20 23 20 arent $last ; #
5e60: 52 65 74 79 70 65 73 20 74 68 65 20 72 65 76 69 Retypes the revi
5e70: 73 69 6f 6e 20 74 6f 6f 2e 0a 09 20 20 20 20 24 sion too... $
5e80: 6c 61 73 74 20 73 65 74 64 65 66 61 75 6c 74 62 last setdefaultb
5e90: 72 61 6e 63 68 63 68 69 6c 64 20 20 24 73 74 6f ranchchild $sto
5ea0: 70 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 p..}..return.
5eb0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 43 }.. method C
5ec0: 68 65 63 6b 4c 4f 44 73 20 7b 7d 20 7b 0a 09 66 heckLODs {} {..f
5ed0: 6f 72 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 oreach {_ branch
5ee0: 7d 20 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 } [array get my
5ef0: 62 72 61 6e 63 68 65 73 5d 20 7b 20 24 62 72 61 branches] { $bra
5f00: 6e 63 68 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 nch checklod }..
5f10: 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 foreach {_ tagli
5f20: 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d st} [array get m
5f30: 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f ytags] {.. fo
5f40: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 reach tag $tagli
5f50: 73 74 20 7b 20 24 74 61 67 20 63 68 65 63 6b 6c st { $tag checkl
5f60: 6f 64 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a od }..}..return.
5f70: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
5f80: 64 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 61 d RemoveIrreleva
5f90: 6e 74 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b ntDeletions {} {
5fa0: 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e ..# From cvs2svn
5fb0: 3a 20 49 66 20 61 20 66 69 6c 65 20 69 73 20 61 : If a file is a
5fc0: 64 64 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 dded on a branch
5fd0: 2c 20 74 68 65 6e 20 61 20 74 72 75 6e 6b 0a 09 , then a trunk..
5fe0: 23 20 72 65 76 69 73 69 6f 6e 20 69 73 20 61 64 # revision is ad
5ff0: 64 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 ded at the same
6000: 74 69 6d 65 20 69 6e 20 74 68 65 20 27 44 65 61 time in the 'Dea
6010: 64 27 20 73 74 61 74 65 2e 0a 09 23 20 54 68 69 d' state...# Thi
6020: 73 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e s revision doesn
6030: 27 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 't do anything u
6040: 73 65 66 75 6c 2c 20 73 6f 20 64 65 6c 65 74 65 seful, so delete
6050: 20 69 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72 it....foreach r
6060: 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a 09 oot $myroots {..
6070: 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 69 if {[$root i
6080: 73 6e 65 65 64 65 64 5d 7d 20 63 6f 6e 74 69 6e sneeded]} contin
6090: 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 ue.. log writ
60a0: 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 e 2 file "Removi
60b0: 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20 64 ng unnecessary d
60c0: 65 61 64 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 ead revision [$r
60d0: 6f 6f 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 oot revnr]"...
60e0: 20 20 23 20 52 65 6d 6f 76 65 20 61 73 20 72 6f # Remove as ro
60f0: 6f 74 2c 20 6d 61 6b 65 20 69 74 73 20 63 68 69 ot, make its chi
6100: 6c 64 20 6e 65 77 20 72 6f 6f 74 20 61 66 74 65 ld new root afte
6110: 72 0a 09 20 20 20 20 23 20 64 69 73 63 6f 6e 6e r.. # disconn
6120: 65 63 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 74 ecting it from t
6130: 68 65 20 72 65 76 69 73 69 6f 6e 20 6a 75 73 74 he revision just
6140: 20 67 6f 69 6e 67 20 61 77 61 79 2e 0a 0a 09 20 going away....
6150: 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f ldelete myroo
6160: 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 69 66 ts $root.. if
6170: 20 7b 5b 24 72 6f 6f 74 20 68 61 73 63 68 69 6c {[$root haschil
6180: 64 5d 7d 20 7b 0a 09 09 73 65 74 20 63 68 69 6c d]} {...set chil
6190: 64 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a d [$root child].
61a0: 09 09 24 63 68 69 6c 64 20 63 75 74 66 72 6f 6d ..$child cutfrom
61b0: 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 parent...lappend
61c0: 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a myroots $child.
61d0: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 . }... # C
61e0: 75 74 20 6f 75 74 20 74 68 65 20 62 72 61 6e 63 ut out the branc
61f0: 68 65 73 20 73 70 61 77 6e 65 64 20 62 79 20 74 hes spawned by t
6200: 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 62 he revision to b
6210: 65 0a 09 20 20 20 20 23 20 64 65 6c 65 74 65 64 e.. # deleted
6220: 2e 20 49 66 20 74 68 65 20 62 72 61 6e 63 68 20 . If the branch
6230: 68 61 73 20 72 65 76 69 73 69 6f 6e 73 20 74 68 has revisions th
6240: 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64 ey should alread
6250: 79 0a 09 20 20 20 20 23 20 75 73 65 20 6f 70 65 y.. # use ope
6260: 72 61 74 69 6f 6e 20 27 61 64 64 27 2c 20 6e 6f ration 'add', no
6270: 20 6e 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 need to change
6280: 74 68 61 74 2e 20 54 68 65 20 66 69 72 73 74 0a that. The first.
6290: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 . # revision
62a0: 6f 6e 20 65 61 63 68 20 62 72 61 6e 63 68 20 62 on each branch b
62b0: 65 63 6f 6d 65 73 20 61 20 6e 65 77 20 61 6e 64 ecomes a new and
62c0: 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 0a 09 20 disconnected..
62d0: 20 20 20 23 20 72 6f 6f 74 2e 0a 0a 09 20 20 20 # root....
62e0: 20 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 foreach branch
62f0: 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d [$root branches]
6300: 20 7b 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e {...if {![$bran
6310: 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f ch haschild]} co
6320: 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 66 69 72 ntinue...set fir
6330: 73 74 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c st [$branch chil
6340: 64 5d 0a 09 09 24 66 69 72 73 74 20 63 75 74 66 d]...$first cutf
6350: 72 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 0a romparentbranch.
6360: 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d ..$first cutfrom
6370: 70 61 72 65 6e 74 0a 09 09 24 62 72 61 6e 63 68 parent...$branch
6380: 20 63 75 74 63 68 69 6c 64 0a 09 09 6c 61 70 70 cutchild...lapp
6390: 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 end myroots $fir
63a0: 73 74 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 24 st.. }.. $
63b0: 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72 root removeallbr
63c0: 61 6e 63 68 65 73 0a 0a 09 20 20 20 20 23 20 54 anches... # T
63d0: 61 67 67 69 6e 67 20 61 20 64 65 61 64 20 72 65 agging a dead re
63e0: 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 vision doesn't d
63f0: 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73 6f 20 72 o anything, so r
6400: 65 6d 6f 76 65 0a 09 20 20 20 20 23 20 61 6e 79 emove.. # any
6410: 20 74 61 67 73 20 74 68 61 74 20 77 65 72 65 20 tags that were
6420: 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 20 20 20 set on it....
6430: 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c $root removeall
6440: 74 61 67 73 0a 0a 09 20 20 20 20 23 20 54 68 69 tags... # Thi
6450: 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61 70 70 65 s can only happe
6460: 6e 20 6f 6e 63 65 20 70 65 72 20 66 69 6c 65 2c n once per file,
6470: 20 61 6e 64 20 77 65 20 6d 69 67 68 74 20 68 61 and we might ha
6480: 76 65 0a 09 20 20 20 20 23 20 6a 75 73 74 20 63 ve.. # just c
6490: 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74 73 2c 20 hanged myroots,
64a0: 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f 6f 70 0a so end the loop.
64b0: 09 20 20 20 20 62 72 65 61 6b 0a 09 7d 0a 09 72 . break..}..r
64c0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
64d0: 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 6e method RemoveIn
64e0: 69 74 69 61 6c 42 72 61 6e 63 68 44 65 6c 65 74 itialBranchDelet
64f0: 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f ions {} {..# Fro
6500: 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74 68 m cvs2svn: If th
6510: 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e e first revision
6520: 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 69 73 20 on a branch is
6530: 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73 73 61 72 an..# unnecessar
6540: 79 20 64 65 6c 65 74 65 2c 20 72 65 6d 6f 76 65 y delete, remove
6550: 20 69 74 2e 0a 09 23 0a 09 23 20 49 66 20 61 20 it...#..# If a
6560: 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e file is added on
6570: 20 61 20 62 72 61 6e 63 68 20 28 77 68 65 74 68 a branch (wheth
6580: 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 61 6c 72 er or not it alr
6590: 65 61 64 79 0a 09 23 20 65 78 69 73 74 65 64 20 eady..# existed
65a0: 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68 65 6e 20 on trunk), then
65b0: 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 new versions of
65c0: 43 56 53 20 61 64 64 20 61 20 66 69 72 73 74 0a CVS add a first.
65d0: 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 .# branch revisi
65e0: 6f 6e 20 69 6e 20 74 68 65 20 27 64 65 61 64 27 on in the 'dead'
65f0: 20 73 74 61 74 65 20 28 74 6f 20 69 6e 64 69 63 state (to indic
6600: 61 74 65 20 74 68 61 74 20 74 68 65 0a 09 23 20 ate that the..#
6610: 66 69 6c 65 20 64 69 64 20 6e 6f 74 20 65 78 69 file did not exi
6620: 73 74 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 st on the branch
6630: 20 77 68 65 6e 20 74 68 65 20 62 72 61 6e 63 68 when the branch
6640: 20 77 61 73 0a 09 23 20 63 72 65 61 74 65 64 29 was..# created)
6650: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 followed by the
6660: 20 73 65 63 6f 6e 64 20 62 72 61 6e 63 68 20 72 second branch r
6670: 65 76 69 73 69 6f 6e 2c 20 77 68 69 63 68 20 69 evision, which i
6680: 73 20 61 6e 0a 09 23 20 61 64 64 2e 20 20 57 68 s an..# add. Wh
6690: 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74 65 72 20 en we encounter
66a0: 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e 2c 20 this situation,
66b0: 77 65 20 73 65 76 65 72 20 74 68 65 20 62 72 61 we sever the bra
66c0: 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74 72 75 6e nch..# from trun
66d0: 6b 20 61 6e 64 20 64 65 6c 65 74 65 20 74 68 65 k and delete the
66e0: 20 66 69 72 73 74 20 62 72 61 6e 63 68 20 72 65 first branch re
66f0: 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 74 20 74 vision....# At t
6700: 68 69 73 20 70 6f 69 6e 74 20 77 65 20 6d 61 79 his point we may
6710: 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 6d 75 have already mu
6720: 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20 69 6e 20 ltiple roots in
6730: 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77 65 20 68 myroots,..# we h
6740: 61 76 65 20 74 6f 20 70 72 6f 63 65 73 73 20 74 ave to process t
6750: 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72 65 61 hem all....forea
6760: 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c ch root [$self L
6770: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e inesOfDevelopmen
6780: 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 t] {.. if {[$
6790: 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 62 72 61 root isneededbra
67a0: 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e 75 nchdel]} continu
67b0: 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 e.. log write
67c0: 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 2 file "Removin
67d0: 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 6e g unnecessary in
67e0: 69 74 69 61 6c 20 62 72 61 6e 63 68 20 64 65 6c itial branch del
67f0: 65 74 65 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 ete [$root revnr
6800: 5d 22 0a 0a 09 20 20 20 20 73 65 74 20 62 72 61 ]"... set bra
6810: 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e nch [$root paren
6820: 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 73 65 tbranch].. se
6830: 74 20 70 61 72 65 6e 74 20 5b 24 72 6f 6f 74 20 t parent [$root
6840: 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 73 65 74 parent].. set
6850: 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f 74 20 63 child [$root c
6860: 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 65 6c hild]... ldel
6870: 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f ete myroots $roo
6880: 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d t.. lappend m
6890: 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 0a 09 yroots $child...
68a0: 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 63 $branch cutc
68b0: 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 hild.. $child
68c0: 20 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a cutfromparent.
68d0: 0a 09 20 20 20 20 24 70 61 72 65 6e 74 20 72 65 .. $parent re
68e0: 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 movebranch
68f0: 20 20 24 62 72 61 6e 63 68 0a 09 20 20 20 20 24 $branch.. $
6900: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 parent removechi
6910: 6c 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 ldonbranch $root
6920: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
6930: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 4c 69 }.. method Li
6940: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 nesOfDevelopment
6950: 20 7b 7d 20 7b 0a 09 23 20 44 65 74 65 72 6d 69 {} {..# Determi
6960: 6e 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 ne all lines of
6970: 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 development for
6980: 74 68 65 20 66 69 6c 65 2e 20 54 68 69 73 20 61 the file. This a
6990: 72 65 0a 09 23 20 74 68 65 20 6b 6e 6f 77 6e 20 re..# the known
69a0: 72 6f 6f 74 73 2c 20 61 6e 64 20 74 68 65 20 72 roots, and the r
69b0: 6f 6f 74 20 6f 66 20 61 6c 6c 20 62 72 61 6e 63 oot of all branc
69c0: 68 65 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 hes found on the
69d0: 0a 09 23 20 6c 69 6e 65 20 6f 66 20 70 72 69 6d ..# line of prim
69e0: 61 72 79 20 63 68 69 6c 64 72 65 6e 2e 0a 0a 09 ary children....
69f0: 73 65 74 20 6c 6f 64 72 6f 6f 74 73 20 7b 7d 0a set lodroots {}.
6a00: 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d .foreach root $m
6a10: 79 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 24 73 yroots {.. $s
6a20: 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64 4c elf AddBranchedL
6a30: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e inesOfDevelopmen
6a40: 74 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74 t lodroots $root
6a50: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 6f .. lappend lo
6a60: 64 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 7d 0a droots $root..}.
6a70: 09 72 65 74 75 72 6e 20 24 6c 6f 64 72 6f 6f 74 .return $lodroot
6a80: 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 s. }.. met
6a90: 68 6f 64 20 41 64 64 42 72 61 6e 63 68 65 64 4c hod AddBranchedL
6aa0: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e inesOfDevelopmen
6ab0: 74 20 7b 6c 76 20 72 6f 6f 74 7d 20 7b 0a 09 75 t {lv root} {..u
6ac0: 70 76 61 72 20 31 20 24 6c 76 20 6c 6f 64 72 6f pvar 1 $lv lodro
6ad0: 6f 74 73 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f ots..while {$roo
6ae0: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 t ne ""} {..
6af0: 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b foreach branch [
6b00: 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 $root branches]
6b10: 7b 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63 {...if {![$branc
6b20: 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e h haschild]} con
6b30: 74 69 6e 75 65 0a 09 09 73 65 74 20 63 68 69 6c tinue...set chil
6b40: 64 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 d [$branch child
6b50: 5d 0a 09 09 23 20 52 65 63 75 72 73 65 20 69 6e ]...# Recurse in
6b60: 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20 66 6f to the branch fo
6b70: 72 20 64 65 65 70 65 72 20 62 72 61 6e 63 68 65 r deeper branche
6b80: 73 2e 0a 09 09 24 73 65 6c 66 20 41 64 64 42 72 s....$self AddBr
6b90: 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 anchedLinesOfDev
6ba0: 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f 74 elopment lodroot
6bb0: 73 20 24 63 68 69 6c 64 0a 09 09 6c 61 70 70 65 s $child...lappe
6bc0: 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 nd lodroots $chi
6bd0: 6c 64 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 ld.. }.. s
6be0: 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 et root [$root c
6bf0: 68 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e hild]..}..return
6c00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
6c10: 6f 64 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72 75 od ExcludeNonTru
6c20: 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 7b 7d nkInformation {}
6c30: 20 7b 0a 09 23 20 52 65 6d 6f 76 65 20 61 6c 6c {..# Remove all
6c40: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 62 72 61 6e 63 non-trunk branc
6c50: 68 65 73 2c 20 72 65 76 69 73 69 6f 6e 73 2c 20 hes, revisions,
6c60: 61 6e 64 20 74 61 67 73 2e 20 57 65 20 64 6f 0a and tags. We do.
6c70: 09 23 20 6b 65 65 70 20 74 68 65 20 74 61 67 73 .# keep the tags
6c80: 20 77 68 69 63 68 20 61 72 65 20 6f 6e 20 74 68 which are on th
6c90: 65 20 74 72 75 6e 6b 2e 0a 0a 09 73 65 74 20 6e e trunk....set n
6ca0: 74 64 62 72 6f 6f 74 20 22 22 0a 09 66 6f 72 65 tdbroot ""..fore
6cb0: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 ach root [$self
6cc0: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 LinesOfDevelopme
6cd0: 6e 74 5d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 74 nt] {.. # Not
6ce0: 65 3a 20 48 65 72 65 20 74 68 65 20 6f 72 64 65 e: Here the orde
6cf0: 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 73 20 69 r of the roots i
6d00: 73 20 69 6d 70 6f 72 74 61 6e 74 2c 0a 09 20 20 s important,..
6d10: 20 20 23 20 69 2e 65 2e 20 74 68 61 74 20 77 65 # i.e. that we
6d20: 20 67 65 74 20 74 68 65 6d 20 69 6e 20 64 65 70 get them in dep
6d30: 74 68 20 66 69 72 73 74 20 6f 72 64 65 72 2e 20 th first order.
6d40: 54 68 69 73 20 65 6e 73 75 72 65 73 0a 09 20 20 This ensures..
6d50: 20 20 23 20 74 68 61 74 20 74 68 65 20 72 65 6d # that the rem
6d60: 6f 76 61 6c 20 6f 66 20 61 20 62 72 61 6e 63 68 oval of a branch
6d70: 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 61 66 happens only af
6d80: 74 65 72 20 74 68 65 0a 09 20 20 20 20 23 20 62 ter the.. # b
6d90: 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 ranches spawned
6da0: 66 72 6f 6d 20 69 74 20 77 65 72 65 20 72 65 6d from it were rem
6db0: 6f 76 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 oved. Otherwise
6dc0: 74 68 65 0a 09 20 20 20 20 23 20 73 79 73 74 65 the.. # syste
6dd0: 6d 20 6d 69 67 68 74 20 74 72 79 20 74 6f 20 61 m might try to a
6de0: 63 63 65 73 73 20 64 65 6c 65 74 65 64 20 6f 62 ccess deleted ob
6df0: 6a 65 63 74 73 2e 0a 0a 09 20 20 20 20 23 20 44 jects.... # D
6e00: 6f 20 6e 6f 74 20 65 78 63 6c 75 64 65 20 74 68 o not exclude th
6e10: 65 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 69 66 e trunk... if
6e20: 20 7b 5b 5b 24 72 6f 6f 74 20 6c 6f 64 5d 20 69 {[[$root lod] i
6e30: 73 74 72 75 6e 6b 5d 7d 20 63 6f 6e 74 69 6e 75 strunk]} continu
6e40: 65 0a 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 e.. $self Exc
6e50: 6c 75 64 65 42 72 61 6e 63 68 20 24 72 6f 6f 74 ludeBranch $root
6e60: 20 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 0a 09 69 ntdbroot..}...i
6e70: 66 20 7b 24 6e 74 64 62 72 6f 6f 74 20 6e 65 20 f {$ntdbroot ne
6e80: 22 22 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 ""} {.. $self
6e90: 20 47 72 61 66 74 4e 54 44 42 32 54 72 75 6e 6b GraftNTDB2Trunk
6ea0: 20 24 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 09 72 $ntdbroot..}..r
6eb0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
6ec0: 20 6d 65 74 68 6f 64 20 45 78 63 6c 75 64 65 42 method ExcludeB
6ed0: 72 61 6e 63 68 20 7b 72 6f 6f 74 20 6e 76 7d 20 ranch {root nv}
6ee0: 7b 0a 09 23 20 45 78 63 6c 75 64 65 20 74 68 65 {..# Exclude the
6ef0: 20 62 72 61 6e 63 68 2f 6c 6f 64 20 73 74 61 72 branch/lod star
6f00: 74 69 6e 67 20 61 74 20 72 6f 6f 74 2c 20 61 20 ting at root, a
6f10: 72 65 76 69 73 69 6f 6e 2e 0a 09 23 0a 09 23 20 revision...#..#
6f20: 49 66 20 74 68 65 20 4c 4f 44 20 73 74 61 72 74 If the LOD start
6f30: 73 20 77 69 74 68 20 6e 6f 6e 2d 74 72 75 6e 6b s with non-trunk
6f40: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 default branch
6f50: 72 65 76 69 73 69 6f 6e 73 2c 0a 09 23 20 77 65 revisions,..# we
6f60: 20 6c 65 61 76 65 20 74 68 65 6d 20 69 6e 20 70 leave them in p
6f70: 6c 61 63 65 20 61 6e 64 20 64 6f 20 6e 6f 74 20 lace and do not
6f80: 64 65 6c 65 74 65 20 74 68 65 20 62 72 61 6e 63 delete the branc
6f90: 68 2e 20 49 6e 20 74 68 61 74 0a 09 23 20 63 61 h. In that..# ca
6fa0: 73 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 73 se the command s
6fb0: 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 ets the variable
6fc0: 20 69 6e 20 4e 56 20 73 6f 20 74 68 61 74 20 77 in NV so that w
6fd0: 65 20 63 61 6e 0a 09 23 20 6c 61 74 65 72 20 72 e can..# later r
6fe0: 65 77 6f 72 6b 20 74 68 65 73 65 20 72 65 76 69 ework these revi
6ff0: 73 6f 6e 73 20 74 6f 20 62 65 20 70 75 72 65 6c sons to be purel
7000: 79 20 74 72 75 6e 6b 2e 0a 0a 09 69 66 20 7b 5b y trunk....if {[
7010: 24 72 6f 6f 74 20 69 73 6f 6e 64 65 66 61 75 6c $root isondefaul
7020: 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 20 20 20 tbranch]} {..
7030: 20 23 20 48 61 6e 64 6c 69 6e 67 20 61 20 4e 54 # Handling a NT
7040: 44 42 2e 20 54 68 69 73 20 62 72 61 6e 63 68 20 DB. This branch
7050: 6d 61 79 20 63 6f 6e 73 69 73 74 73 20 6e 6f 74 may consists not
7060: 20 6f 6e 6c 79 20 6f 66 0a 09 20 20 20 20 23 20 only of.. #
7070: 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 73 2c 20 NTDB revisions,
7080: 62 75 74 20 61 6c 73 6f 20 73 6f 6d 65 20 6e 6f but also some no
7090: 6e 2d 4e 54 44 42 2e 20 54 68 65 20 6c 61 74 74 n-NTDB. The latt
70a0: 65 72 20 61 72 65 0a 09 20 20 20 20 23 20 74 72 er are.. # tr
70b0: 75 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 uly on a branch
70c0: 61 6e 64 20 68 61 76 65 20 74 6f 20 62 65 20 65 and have to be e
70d0: 78 63 6c 75 64 65 64 2e 20 54 68 65 20 66 6f 6c xcluded. The fol
70e0: 6c 6f 77 69 6e 67 0a 09 20 20 20 20 23 20 6c 6f lowing.. # lo
70f0: 6f 70 20 64 65 74 65 72 6d 69 6e 65 73 20 69 66 op determines if
7100: 20 74 68 65 72 65 20 61 72 65 20 73 75 63 68 20 there are such
7110: 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 20 20 revisions....
7120: 20 75 70 76 61 72 20 31 20 24 6e 76 20 6e 74 64 upvar 1 $nv ntd
7130: 62 72 6f 6f 74 0a 09 20 20 20 20 73 65 74 20 6e broot.. set n
7140: 74 64 62 72 6f 6f 74 20 24 72 6f 6f 74 0a 09 20 tdbroot $root..
7150: 20 20 20 24 72 6f 6f 74 20 63 75 74 66 72 6f 6d $root cutfrom
7160: 70 61 72 65 6e 74 62 72 61 6e 63 68 0a 0a 09 20 parentbranch...
7170: 20 20 20 73 65 74 20 72 65 76 20 24 72 6f 6f 74 set rev $root
7180: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65 .. while {$re
7190: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 24 72 65 v ne ""} {...$re
71a0: 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 v removeallbranc
71b0: 68 65 73 0a 09 09 23 20 53 65 65 20 6e 6f 74 65 hes...# See note
71c0: 20 5b 78 5d 2e 0a 0a 09 09 69 66 20 7b 5b 24 72 [x].....if {[$r
71d0: 65 76 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 ev isondefaultbr
71e0: 61 6e 63 68 5d 7d 20 7b 0a 09 09 20 20 20 20 73 anch]} {... s
71f0: 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 et rev [$rev chi
7200: 6c 64 5d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 ld]...} else {..
7210: 09 20 20 20 20 62 72 65 61 6b 0a 09 09 7d 0a 09 . break...}..
7220: 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 72 65 }... # re
7230: 76 20 6e 6f 77 20 63 6f 6e 74 61 69 6e 73 20 74 v now contains t
7240: 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 54 44 he first non-NTD
7250: 42 20 72 65 76 69 73 69 6f 6e 20 61 66 74 65 72 B revision after
7260: 20 74 68 65 0a 09 20 20 20 20 23 20 4e 54 44 42 the.. # NTDB
7270: 2c 20 6f 72 20 69 73 20 65 6d 70 74 79 20 69 66 , or is empty if
7280: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 there is no suc
7290: 68 2e 20 49 66 20 77 65 20 68 61 76 65 20 73 6f h. If we have so
72a0: 6d 65 0a 09 20 20 20 20 23 20 74 68 65 79 20 68 me.. # they h
72b0: 61 76 65 20 74 6f 20 72 65 6d 6f 76 65 64 2e 0a ave to removed..
72c0: 0a 09 20 20 20 20 69 66 20 7b 24 72 65 76 20 6e .. if {$rev n
72d0: 65 20 22 22 7d 20 20 7b 0a 09 09 73 65 74 20 6c e ""} {...set l
72e0: 61 73 74 6e 74 64 62 20 5b 24 72 65 76 20 70 61 astntdb [$rev pa
72f0: 72 65 6e 74 5d 0a 09 09 24 6c 61 73 74 6e 74 64 rent]...$lastntd
7300: 62 20 63 75 74 66 72 6f 6d 63 68 69 6c 64 0a 09 b cutfromchild..
7310: 09 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 .while {$rev ne
7320: 22 22 7d 20 7b 0a 09 09 20 20 20 20 24 72 65 76 ""} {... $rev
7330: 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09 removealltags..
7340: 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76 65 . $rev remove
7350: 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09 20 20 allbranches...
7360: 20 20 23 20 4e 6f 74 65 20 5b 78 5d 3a 20 57 65 # Note [x]: We
7370: 20 6d 61 79 20 73 74 69 6c 6c 20 68 61 76 65 20 may still have
7380: 68 61 64 20 62 72 61 6e 63 68 65 73 20 6f 6e 20 had branches on
7390: 74 68 65 0a 09 09 20 20 20 20 23 20 72 65 76 69 the... # revi
73a0: 73 69 6f 6e 2e 20 42 72 61 6e 63 68 65 73 20 77 sion. Branches w
73b0: 69 74 68 6f 75 74 20 72 65 76 69 73 69 6f 6e 73 ithout revisions
73c0: 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 20 20 20 committed...
73d0: 20 23 20 6f 6e 20 74 68 65 6d 20 64 6f 20 6e 6f # on them do no
73e0: 74 20 73 68 6f 77 20 75 70 20 69 6e 20 74 68 65 t show up in the
73f0: 20 6c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 61 list of roots a
7400: 6b 61 0a 09 09 20 20 20 20 23 20 6c 69 6e 65 73 ka... # lines
7410: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e of development.
7420: 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b ... set rev [
7430: 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a $rev child]...}.
7440: 09 20 20 20 20 7d 0a 09 20 20 20 20 72 65 74 75 . }.. retu
7450: 72 6e 0a 09 7d 0a 0a 09 23 20 4e 6f 20 4e 54 44 rn..}...# No NTD
7460: 42 20 73 74 75 66 66 20 74 6f 20 64 65 61 6c 20 B stuff to deal
7470: 77 69 74 68 2e 20 46 69 72 73 74 20 64 65 6c 65 with. First dele
7480: 74 65 20 74 68 65 20 62 72 61 6e 63 68 20 6f 62 te the branch ob
7490: 6a 65 63 74 0a 09 23 20 69 74 73 65 6c 66 2c 20 ject..# itself,
74a0: 61 66 74 65 72 20 63 75 74 74 69 6e 67 20 61 6c after cutting al
74b0: 6c 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f l the various co
74c0: 6e 6e 65 63 74 69 6f 6e 73 2e 0a 0a 09 73 65 74 nnections....set
74d0: 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 branch [$root p
74e0: 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 69 66 arentbranch]..if
74f0: 20 7b 24 62 72 61 6e 63 68 20 6e 65 20 22 22 7d {$branch ne ""}
7500: 20 7b 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e {.. set bran
7510: 63 68 70 61 72 65 6e 74 20 5b 24 62 72 61 6e 63 chparent [$branc
7520: 68 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 24 h parent].. $
7530: 62 72 61 6e 63 68 70 61 72 65 6e 74 20 72 65 6d branchparent rem
7540: 6f 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 ovebranch
7550: 20 24 62 72 61 6e 63 68 0a 09 20 20 20 20 24 62 $branch.. $b
7560: 72 61 6e 63 68 70 61 72 65 6e 74 20 72 65 6d 6f ranchparent remo
7570: 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 vechildonbranch
7580: 24 72 6f 6f 74 0a 09 7d 0a 0a 09 23 20 54 68 65 $root..}...# The
7590: 20 72 6f 6f 74 20 69 73 20 6e 6f 20 73 75 63 68 root is no such
75a0: 20 61 6e 79 20 6c 6f 6e 67 65 72 20 65 69 74 68 any longer eith
75b0: 65 72 2e 0a 09 6c 64 65 6c 65 74 65 20 6d 79 72 er...ldelete myr
75c0: 6f 6f 74 73 20 24 72 6f 6f 74 0a 0a 09 23 20 4e oots $root...# N
75d0: 6f 77 20 67 6f 20 74 68 72 6f 75 67 68 20 74 68 ow go through th
75e0: 65 20 6c 69 6e 65 20 61 6e 64 20 72 65 6d 6f 76 e line and remov
75f0: 65 20 61 6c 6c 20 69 74 73 20 72 65 76 69 73 69 e all its revisi
7600: 6f 6e 73 2e 0a 0a 09 77 68 69 6c 65 20 7b 24 72 ons....while {$r
7610: 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 oot ne ""} {..
7620: 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c $root removeal
7630: 6c 74 61 67 73 0a 09 20 20 20 20 24 72 6f 6f 74 ltags.. $root
7640: 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 removeallbranch
7650: 65 73 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 es.. # Note:
7660: 53 65 65 20 74 68 65 20 6e 6f 74 65 20 5b 78 5d See the note [x]
7670: 2e 0a 0a 09 20 20 20 20 23 20 46 72 6f 6d 20 63 .... # From c
7680: 76 73 32 73 76 6e 3a 20 49 66 20 74 68 69 73 20 vs2svn: If this
7690: 69 73 20 74 68 65 20 6c 61 73 74 20 64 65 66 61 is the last defa
76a0: 75 6c 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 ult revision on
76b0: 61 0a 09 20 20 20 20 23 20 6e 6f 6e 2d 74 72 75 a.. # non-tru
76c0: 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 nk default branc
76d0: 68 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 h followed by a
76e0: 31 2e 32 20 72 65 76 69 73 69 6f 6e 2c 0a 09 20 1.2 revision,..
76f0: 20 20 20 23 20 74 68 65 6e 20 74 68 65 20 31 2e # then the 1.
7700: 32 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 2 revision depen
7710: 64 73 20 6f 6e 20 74 68 69 73 20 6f 6e 65 2e 20 ds on this one.
7720: 20 46 49 58 4d 45 3a 20 49 74 20 69 73 0a 09 20 FIXME: It is..
7730: 20 20 20 23 20 71 75 65 73 74 69 6f 6e 61 62 6c # questionabl
7740: 65 20 77 68 65 74 68 65 72 20 74 68 69 73 20 68 e whether this h
7750: 61 6e 64 6c 69 6e 67 20 69 73 20 63 6f 72 72 65 andling is corre
7760: 63 74 2c 20 73 69 6e 63 65 20 74 68 65 0a 09 20 ct, since the..
7770: 20 20 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 # non-trunk d
7780: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 efault branch re
7790: 76 69 73 69 6f 6e 73 20 61 66 66 65 63 74 20 74 visions affect t
77a0: 72 75 6e 6b 20 61 6e 64 0a 09 20 20 20 20 23 20 runk and.. #
77b0: 73 68 6f 75 6c 64 20 74 68 65 72 65 66 6f 72 65 should therefore
77c0: 20 6e 6f 74 20 6a 75 73 74 20 62 65 20 64 69 73 not just be dis
77d0: 63 61 72 64 65 64 20 65 76 65 6e 20 69 66 0a 09 carded even if..
77e0: 20 20 20 20 23 20 2d 2d 74 72 75 6e 6b 2d 6f 6e # --trunk-on
77f0: 6c 79 2e 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 ly.... if {[$
7800: 72 6f 6f 74 20 68 61 73 64 65 66 61 75 6c 74 62 root hasdefaultb
7810: 72 61 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 09 ranchchild]} {..
7820: 09 73 65 74 20 6e 74 64 62 63 68 69 6c 64 20 5b .set ntdbchild [
7830: 24 72 6f 6f 74 20 64 65 66 61 75 6c 74 62 72 61 $root defaultbra
7840: 6e 63 68 63 68 69 6c 64 5d 0a 09 09 69 66 20 7b nchchild]...if {
7850: 5b 24 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61 [$ntdbchild defa
7860: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d ultbranchparent]
7870: 20 6e 65 20 24 6e 74 64 62 63 68 69 6c 64 7d 20 ne $ntdbchild}
7880: 7b 0a 09 09 20 20 20 20 74 72 6f 75 62 6c 65 20 {... trouble
7890: 69 6e 74 65 72 6e 61 6c 20 22 6e 74 64 62 20 2d internal "ntdb -
78a0: 20 74 72 75 6e 6b 20 6c 69 6e 6b 61 67 65 20 62 trunk linkage b
78b0: 72 6f 6b 65 6e 22 0a 09 09 7d 0a 09 09 24 6e 74 roken"...}...$nt
78c0: 64 62 63 68 69 6c 64 20 63 75 74 64 65 66 61 75 dbchild cutdefau
78d0: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 ltbranchparent..
78e0: 09 69 66 20 7b 5b 24 6e 74 64 62 63 68 69 6c 64 .if {[$ntdbchild
78f0: 20 68 61 73 70 61 72 65 6e 74 5d 7d 20 7b 0a 09 hasparent]} {..
7900: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 . lappend myr
7910: 6f 6f 74 73 20 5b 24 6e 74 64 62 63 68 69 6c 64 oots [$ntdbchild
7920: 20 70 61 72 65 6e 74 5d 0a 09 09 7d 0a 09 20 20 parent]...}..
7930: 20 20 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 6f }... set ro
7940: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d ot [$root child]
7950: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 ..}...return.
7960: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 47 }.. method G
7970: 72 61 66 74 4e 54 44 42 32 54 72 75 6e 6b 20 7b raftNTDB2Trunk {
7980: 72 6f 6f 74 7d 20 7b 0a 09 23 20 57 65 20 63 61 root} {..# We ca
7990: 6e 20 6e 6f 77 20 67 72 61 66 74 20 74 68 65 20 n now graft the
79a0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul
79b0: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f t branch revisio
79c0: 6e 73 20 74 6f 0a 09 23 20 74 72 75 6e 6b 2e 20 ns to..# trunk.
79d0: 54 68 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 They should alre
79e0: 61 64 79 20 62 65 20 61 6c 6f 6e 65 20 6f 6e 20 ady be alone on
79f0: 61 20 43 56 53 42 72 61 6e 63 68 2d 6c 65 73 73 a CVSBranch-less
7a00: 0a 09 23 20 62 72 61 6e 63 68 2e 0a 0a 09 69 66 ..# branch....if
7a10: 20 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65 {[$root haspare
7a20: 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 20 74 72 6f ntbranch]} { tro
7a30: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 4e uble internal "N
7a40: 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 TDB root still h
7a50: 61 73 20 69 74 73 20 62 72 61 6e 63 68 20 73 79 as its branch sy
7a60: 6d 62 6f 6c 22 20 7d 0a 09 69 66 20 7b 5b 24 72 mbol" }..if {[$r
7a70: 6f 6f 74 20 68 61 73 62 72 61 6e 63 68 65 73 5d oot hasbranches]
7a80: 7d 20 20 20 20 20 7b 20 74 72 6f 75 62 6c 65 20 } { trouble
7a90: 69 6e 74 65 72 6e 61 6c 20 22 4e 54 44 42 20 72 internal "NTDB r
7aa0: 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73 20 73 70 oot still has sp
7ab0: 61 77 6e 65 64 20 62 72 61 6e 63 68 65 73 22 20 awned branches"
7ac0: 7d 0a 0a 09 73 65 74 20 6c 61 73 74 20 24 72 6f }...set last $ro
7ad0: 6f 74 0a 09 77 68 69 6c 65 20 7b 5b 24 6c 61 73 ot..while {[$las
7ae0: 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 73 65 t haschild]} {se
7af0: 74 20 6c 61 73 74 20 5b 24 6c 61 73 74 20 63 68 t last [$last ch
7b00: 69 6c 64 5d 7d 0a 0a 09 69 66 20 7b 5b 24 6c 61 ild]}...if {[$la
7b10: 73 74 20 68 61 73 64 65 66 61 75 6c 74 62 72 61 st hasdefaultbra
7b20: 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 0a 09 20 nchchild]} {...
7b30: 20 20 20 73 65 74 20 72 65 76 31 32 20 5b 24 6c set rev12 [$l
7b40: 61 73 74 20 64 65 66 61 75 6c 74 62 72 61 6e 63 ast defaultbranc
7b50: 68 63 68 69 6c 64 5d 0a 09 20 20 20 20 24 72 65 hchild].. $re
7b60: 76 31 32 20 63 75 74 64 65 66 61 75 6c 74 62 72 v12 cutdefaultbr
7b70: 61 6e 63 68 70 61 72 65 6e 74 0a 09 20 20 20 20 anchparent..
7b80: 24 6c 61 73 74 20 20 63 75 74 64 65 66 61 75 6c $last cutdefaul
7b90: 74 62 72 61 6e 63 68 63 68 69 6c 64 0a 0a 09 20 tbranchchild...
7ba0: 20 20 20 24 72 65 76 31 32 20 63 68 61 6e 67 65 $rev12 change
7bb0: 70 61 72 65 6e 74 20 24 6c 61 73 74 0a 09 20 20 parent $last..
7bc0: 20 20 24 6c 61 73 74 20 20 63 68 61 6e 67 65 63 $last changec
7bd0: 68 69 6c 64 20 24 72 65 76 31 32 0a 0a 09 20 20 hild $rev12...
7be0: 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 ldelete myroot
7bf0: 73 20 24 72 65 76 31 32 0a 0a 09 20 20 20 20 23 s $rev12... #
7c00: 20 4e 6f 74 65 20 61 6e 64 20 72 65 6d 65 6d 62 Note and rememb
7c10: 65 72 20 74 68 61 74 20 74 68 65 20 74 79 70 65 er that the type
7c20: 20 6f 66 20 72 65 76 31 32 20 77 61 73 20 61 6c of rev12 was al
7c30: 72 65 61 64 79 0a 09 20 20 20 20 23 20 61 64 6a ready.. # adj
7c40: 75 73 74 65 64 20 62 79 20 41 64 6a 75 73 74 4e usted by AdjustN
7c50: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 onTrunkDefaultBr
7c60: 61 6e 63 68 2c 20 73 6f 20 77 65 20 64 6f 6e 27 anch, so we don'
7c70: 74 0a 09 20 20 20 20 23 20 68 61 76 65 20 74 6f t.. # have to
7c80: 20 63 68 61 6e 67 65 20 69 74 73 20 74 79 70 65 change its type
7c90: 20 68 65 72 65 2e 0a 09 7d 0a 0a 09 77 68 69 6c here...}...whil
7ca0: 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 e {$root ne ""}
7cb0: 7b 0a 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74 {.. $root set
7cc0: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 ondefaultbranch
7cd0: 30 0a 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74 0.. $root set
7ce0: 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 lod $mytrunk..
7cf0: 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 5b 24 foreach tag [$
7d00: 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09 24 root tags] {...$
7d10: 74 61 67 20 73 65 74 6c 6f 64 20 24 6d 79 74 72 tag setlod $mytr
7d20: 75 6e 6b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 unk.. }..
7d30: 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 set root [$root
7d40: 63 68 69 6c 64 5d 0a 09 7d 0a 0a 20 20 20 20 20 child]..}..
7d50: 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a return. }.
7d60: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 63 74 69 . method Acti
7d70: 76 65 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76 ve {} {..set rev
7d80: 69 73 69 6f 6e 73 20 7b 7d 0a 09 73 65 74 20 73 isions {}..set s
7d90: 79 6d 62 6f 6c 73 20 20 20 7b 7d 0a 0a 09 66 6f ymbols {}...fo
7da0: 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c reach root [$sel
7db0: 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 f LinesOfDevelop
7dc0: 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 ment] {.. if
7dd0: 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e {[$root hasparen
7de0: 74 62 72 61 6e 63 68 5d 7d 20 7b 20 6c 61 70 70 tbranch]} { lapp
7df0: 65 6e 64 20 73 79 6d 62 6f 6c 73 20 5b 24 72 6f end symbols [$ro
7e00: 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d ot parentbranch]
7e10: 20 7d 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 }.. while {$
7e20: 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 root ne ""} {...
7e30: 6c 61 70 70 65 6e 64 20 72 65 76 69 73 69 6f 6e lappend revision
7e40: 73 20 24 72 6f 6f 74 0a 09 09 66 6f 72 65 61 63 s $root...foreac
7e50: 68 20 74 61 67 20 20 20 20 5b 24 72 6f 6f 74 20 h tag [$root
7e60: 74 61 67 73 5d 20 20 20 20 20 7b 20 6c 61 70 70 tags] { lapp
7e70: 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 74 61 67 end symbols $tag
7e80: 20 20 20 20 7d 0a 09 09 66 6f 72 65 61 63 68 20 }...foreach
7e90: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 branch [$root br
7ea0: 61 6e 63 68 65 73 5d 20 7b 20 6c 61 70 70 65 6e anches] { lappen
7eb0: 64 20 73 79 6d 62 6f 6c 73 20 24 62 72 61 6e 63 d symbols $branc
7ec0: 68 20 7d 0a 09 09 73 65 74 20 6c 6f 64 20 5b 24 h }...set lod [$
7ed0: 72 6f 6f 74 20 6c 6f 64 5d 0a 09 09 69 66 20 7b root lod]...if {
7ee0: 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 7d ![$lod istrunk]}
7ef0: 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f { lappend symbo
7f00: 6c 73 20 24 6c 6f 64 20 7d 0a 09 09 73 65 74 20 ls $lod }...set
7f10: 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c root [$root chil
7f20: 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72 d].. }..}...r
7f30: 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b 6c 73 6f eturn [list [lso
7f40: 72 74 20 2d 75 6e 69 71 75 65 20 2d 64 69 63 74 rt -unique -dict
7f50: 20 24 72 65 76 69 73 69 6f 6e 73 5d 20 5b 6c 73 $revisions] [ls
7f60: 6f 72 74 20 2d 75 6e 69 71 75 65 20 2d 64 69 63 ort -unique -dic
7f70: 74 20 24 73 79 6d 62 6f 6c 73 5d 5d 0a 20 20 20 t $symbols]].
7f80: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 }.. # # ## #
7f90: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
7fa0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
7fb0: 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 ## Configura
7fc0: 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 tion.. pragma
7fd0: 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 -hastypeinfo
7fe0: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 no ; # no type
7ff0: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 introspection.
8000: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e pragma -hasin
8010: 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 fo no ;
8020: 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 # no object intr
8030: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 ospection. pr
8040: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 agma -hastypemet
8050: 68 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 hods no ; # typ
8060: 65 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e e is not relevan
8070: 74 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 t... # # ## #
8080: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
8090: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
80a0: 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 }..namespace eva
80b0: 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a l ::vc::fossil::
80c0: 69 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 import::cvs {.
80d0: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f namespace expo
80e0: 72 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 rt file. name
80f0: 73 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 space eval file
8100: 7b 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 {..# Import not
8110: 72 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 required, alread
8120: 79 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 y a child namesp
8130: 61 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 ace...# namespac
8140: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
8150: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
8160: 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 vs::file::rev..#
8170: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 namespace impor
8180: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a t ::vc::fossil::
8190: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c import::cvs::fil
81a0: 65 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 e::sym..namespac
81b0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 e import ::vc::t
81c0: 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e ools::misc::*..n
81d0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
81e0: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f ::vc::tools::tro
81f0: 75 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 uble..namespace
8200: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f import ::vc::too
8210: 6c 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 ls::log..namespa
8220: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
8230: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
8240: 63 76 73 3a 3a 73 74 61 74 65 0a 20 20 20 20 7d cvs::state. }
8250: 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 .}..# # ## ### #
8260: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
8270: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 ########### ####
8280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
8290: 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b #.## Ready..pack
82a0: 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a age provide vc::
82b0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
82c0: 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a 72 65 cvs::file 1.0.re
82d0: 74 75 72 6e 0a turn.