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 2c 20 70 6f 73 73 69 62 6c e trunk, possibl
1e70: 79 20 65 78 63 6c 75 64 69 6e 67 0a 09 23 20 6e y excluding..# n
1e80: 6f 6e 2d 74 72 75 6e 6b 20 64 61 74 61 2c 20 61 on-trunk data, a
1e90: 6e 64 20 63 6f 6c 6c 65 63 74 69 6e 67 20 61 67 nd collecting ag
1ea0: 67 72 65 67 61 74 65 20 73 79 6d 62 6f 6c 20 73 gregate symbol s
1eb0: 74 61 74 69 73 74 69 63 73 2e 0a 0a 09 24 73 65 tatistics....$se
1ec0: 6c 66 20 44 65 74 65 72 6d 69 6e 65 52 65 76 69 lf DetermineRevi
1ed0: 73 69 6f 6e 4f 70 65 72 61 74 69 6f 6e 73 0a 09 sionOperations..
1ee0: 24 73 65 6c 66 20 44 65 74 65 72 6d 69 6e 65 4c $self DetermineL
1ef0: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e inesOfDevelopmen
1f00: 74 0a 09 24 73 65 6c 66 20 48 61 6e 64 6c 65 4e t..$self HandleN
1f10: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 onTrunkDefaultBr
1f20: 61 6e 63 68 0a 09 24 73 65 6c 66 20 52 65 6d 6f anch..$self Remo
1f30: 76 65 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 veIrrelevantDele
1f40: 74 69 6f 6e 73 0a 09 24 73 65 6c 66 20 52 65 6d tions..$self Rem
1f50: 6f 76 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 oveInitialBranch
1f60: 44 65 6c 65 74 69 6f 6e 73 0a 0a 09 69 66 20 7b Deletions...if {
1f70: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e [$myproject trun
1f80: 6b 6f 6e 6c 79 5d 7d 20 7b 0a 09 20 20 20 20 24 konly]} {.. $
1f90: 73 65 6c 66 20 45 78 63 6c 75 64 65 4e 6f 6e 54 self ExcludeNonT
1fa0: 72 75 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 0a runkInformation.
1fb0: 09 7d 0a 0a 09 24 73 65 6c 66 20 41 67 67 72 65 .}...$self Aggre
1fc0: 67 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 0a 09 gateSymbolData..
1fd0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
1fe0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
1ff0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
2000: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
2010: 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69 State.. vari
2020: 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20 20 20 able myid
2030: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 46 69 {} ; # Fi
2040: 6c 65 20 69 64 20 69 6e 20 74 68 65 20 70 65 72 le id in the per
2050: 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a 20 sistent state..
2060: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 61 variable mypa
2070: 74 68 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d th {}
2080: 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68 65 ; # Path of the
2090: 20 66 69 6c 65 27 73 20 72 63 73 20 61 72 63 68 file's rcs arch
20a0: 69 76 65 2e 0a 20 20 20 20 76 61 72 69 61 62 6c ive.. variabl
20b0: 65 20 6d 79 75 73 72 70 61 74 68 20 20 20 20 20 e myusrpath
20c0: 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 68 20 {} ; # Path
20d0: 6f 66 20 74 68 65 20 66 69 6c 65 20 61 73 20 73 of the file as s
20e0: 65 65 6e 20 62 79 20 75 73 65 72 73 2e 0a 20 20 een by users..
20f0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 65 78 65 variable myexe
2100: 63 75 74 61 62 6c 65 20 20 20 20 20 20 30 20 20 cutable 0
2110: 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 ; # Boolean flag
2120: 20 27 66 69 6c 65 20 65 78 65 63 75 74 61 62 6c 'file executabl
2130: 65 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 e'.. variable
2140: 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20 20 20 myproject
2150: 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 {} ; # Refere
2160: 6e 63 65 20 74 6f 20 74 68 65 20 70 72 6f 6a 65 nce to the proje
2170: 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 20 ct object.....
2180: 20 20 23 20 74 68 65 20 66 69 6c 65 20 62 65 6c # the file bel
2190: 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76 61 72 ongs to.. var
21a0: 69 61 62 6c 65 20 6d 79 72 65 76 20 2d 61 72 72 iable myrev -arr
21b0: 61 79 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 4d ay {} ; # M
21c0: 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d aps revision num
21d0: 62 65 72 20 74 6f 20 74 68 65 0a 09 09 09 09 20 ber to the.....
21e0: 20 20 20 23 20 61 73 73 6f 63 69 61 74 65 64 20 # associated
21f0: 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2e revision object.
2200: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
2210: 72 65 76 69 73 69 6f 6e 73 20 20 20 20 20 20 20 revisions
2220: 7b 7d 20 3b 20 23 20 53 61 6d 65 20 61 73 20 6d {} ; # Same as m
2230: 79 72 65 76 2c 20 62 75 74 20 61 20 6c 69 73 74 yrev, but a list
2240: 2c 0a 09 09 09 09 20 20 20 20 23 20 67 69 76 69 ,..... # givi
2250: 6e 67 20 75 73 20 74 68 65 20 6f 72 64 65 72 20 ng us the order
2260: 6f 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 of..... # rev
2270: 69 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61 72 69 isions.. vari
2280: 61 62 6c 65 20 6d 79 61 69 64 20 20 20 20 20 20 able myaid
2290: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 -array {} ; # Ma
22a0: 70 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 p revision numbe
22b0: 72 73 20 74 6f 20 74 68 65 20 69 64 0a 09 09 09 rs to the id....
22c0: 09 20 20 20 20 23 20 6f 66 20 74 68 65 20 61 75 . # of the au
22d0: 74 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69 74 74 thor who committ
22e0: 65 64 0a 09 09 09 09 20 20 20 20 23 20 69 74 2e ed..... # it.
22f0: 20 54 68 69 73 20 69 73 20 6c 61 74 65 72 20 61 This is later a
2300: 67 67 72 65 67 61 74 65 64 0a 09 09 09 09 20 20 ggregated.....
2310: 20 20 23 20 77 69 74 68 20 63 6f 6d 6d 69 74 20 # with commit
2320: 6d 65 73 73 61 67 65 2c 20 62 72 61 6e 63 68 20 message, branch
2330: 6e 61 6d 65 0a 09 09 09 09 20 20 20 20 23 20 61 name..... # a
2340: 6e 64 20 70 72 6f 6a 65 63 74 20 69 64 20 66 6f nd project id fo
2350: 72 20 61 20 6d 65 74 61 20 69 64 2e 0a 20 20 20 r a meta id..
2360: 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65 61 64 variable myhead
2370: 72 65 76 6e 72 20 20 20 20 20 20 20 7b 7d 20 3b revnr {} ;
2380: 20 23 20 48 65 61 64 20 72 65 76 69 73 69 6f 6e # Head revision
2390: 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 (revision numbe
23a0: 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 r). variable
23b0: 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20 20 20 myprincipal
23c0: 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63 69 70 {} ; # Princip
23d0: 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61 6e 63 al branch (branc
23e0: 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09 09 20 h number)......
23f0: 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20 74 6f # Contrary to
2400: 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73 20 69 the name this i
2410: 73 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 20 s the..... #
2420: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a default branch..
2430: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 variable myd
2440: 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20 20 7b ependencies {
2450: 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61 72 79 } ; # Dictionary
2460: 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 parent -> child
2470: 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65 63 6f ,..... # reco
2480: 72 64 73 20 70 72 69 6d 61 72 79 20 64 65 70 65 rds primary depe
2490: 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20 76 61 ndencies.. va
24a0: 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74 65 riable myimporte
24b0: 64 20 20 20 20 20 20 20 20 30 20 20 3b 20 23 20 d 0 ; #
24c0: 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 53 65 Boolean flag. Se
24d0: 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 t if and only if
24e0: 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 20 31 ..... # rev 1
24f0: 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65 20 73 .1 of the file s
2500: 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20 20 20 eemingly.....
2510: 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65 64 20 # was imported
2520: 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64 65 64 instead of added
2530: 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72 6d 61 ..... # norma
2540: 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61 62 6c lly.. variabl
2550: 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20 20 20 e myroot
2560: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 {} ; # Refer
2570: 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65 76 69 ence to the revi
2580: 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09 09 09 sion object.....
2590: 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20 74 68 # holding th
25a0: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e e root revision.
25b0: 20 20 49 74 73 0a 09 09 09 09 20 20 20 20 23 20 Its..... #
25c0: 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79 20 69 number usually i
25d0: 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62 65 0a s '1.1'. Can be.
25e0: 09 09 09 09 20 20 20 20 23 20 61 20 64 69 66 66 .... # a diff
25f0: 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 62 65 erent number, be
2600: 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20 20 20 cause of.....
2610: 20 23 20 67 61 70 73 20 63 72 65 61 74 65 64 20 # gaps created
2620: 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20 2d 6f via 'cvsadmin -o
2630: 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 '.. variable
2640: 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72 72 61 mybranches -arra
2650: 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 62 72 y {} ; # Maps br
2660: 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f 20 74 anch number to t
2670: 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09 20 20 he symbol.....
2680: 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c # object handl
2690: 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 2e 0a ing the branch..
26a0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 variable myt
26b0: 61 67 73 20 20 20 20 20 2d 61 72 72 61 79 20 7b ags -array {
26c0: 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 73 } ; # Maps revis
26d0: 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 ion number to th
26e0: 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20 20 23 e list..... #
26f0: 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a 65 63 of symbol objec
2700: 74 73 20 66 6f 72 20 74 68 65 20 74 61 67 73 0a ts for the tags.
2710: 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63 69 .... # associ
2720: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 72 65 ated with the re
2730: 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69 vision.. vari
2740: 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73 20 20 able mysymbols
2750: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 65 {} ; # Se
2760: 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 t of the symbol
2770: 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e 0a 09 names found in..
2780: 09 09 09 20 20 20 20 23 20 74 68 69 73 20 66 69 ... # this fi
2790: 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c le... variabl
27a0: 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20 30 20 e mybranchcnt 0
27b0: 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 ; # Counter for
27c0: 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72 65 63 branches, to rec
27d0: 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20 20 20 ord their....
27e0: 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64 65 66 # order of def
27f0: 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20 61 6c inition. This al
2800: 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09 20 20 so defines....
2810: 20 20 20 23 20 74 68 65 69 72 20 6f 72 64 65 72 # their order
2820: 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20 77 68 of creation, wh
2830: 69 63 68 20 69 73 20 74 68 65 0a 09 09 09 20 20 ich is the....
2840: 20 20 20 23 20 72 65 76 65 72 73 65 20 6f 66 20 # reverse of
2850: 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 2e 65 definition. I.e
2860: 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09 09 20 . a smaller....
2870: 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d 65 61 # number mea
2880: 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61 72 6c ns 'Defined earl
2890: 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09 09 20 ier', means....
28a0: 20 20 20 20 23 20 27 43 72 65 61 74 65 64 20 6c # 'Created l
28b0: 61 74 65 72 27 2e 0a 0a 20 20 20 20 76 61 72 69 ater'... vari
28c0: 61 62 6c 65 20 6d 79 74 72 75 6e 6b 20 7b 7d 20 able mytrunk {}
28d0: 3b 20 23 20 44 69 72 65 63 74 20 72 65 66 65 72 ; # Direct refer
28e0: 65 6e 63 65 20 74 6f 20 6d 79 70 72 6f 6a 65 63 ence to myprojec
28f0: 74 20 2d 3e 20 74 72 75 6e 6b 2e 0a 20 20 20 20 t -> trunk..
2900: 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74 73 variable myroots
2910: 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 {} ; # List of
2920: 72 6f 6f 74 73 20 69 6e 20 74 68 65 20 66 6f 72 roots in the for
2930: 65 73 74 20 6f 66 0a 09 09 09 20 20 23 20 6c 6f est of.... # lo
2940: 64 27 73 2e 20 4f 62 6a 65 63 74 20 72 65 66 65 d's. Object refe
2950: 72 65 6e 63 65 73 20 74 6f 20 72 65 76 69 73 69 rences to revisi
2960: 6f 6e 73 20 61 6e 64 0a 09 09 09 20 20 23 20 62 ons and.... # b
2970: 72 61 6e 63 68 65 73 2e 20 54 68 65 20 6c 61 74 ranches. The lat
2980: 74 65 72 20 63 61 6e 20 61 70 70 65 61 72 20 77 ter can appear w
2990: 68 65 6e 20 74 68 65 79 0a 09 09 09 20 20 23 20 hen they.... #
29a0: 61 72 65 20 73 65 76 65 72 65 64 20 66 72 6f 6d are severed from
29b0: 20 74 68 65 69 72 20 70 61 72 65 6e 74 2e 0a 0a their parent...
29c0: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
29d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
29e0: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 ###########.
29f0: 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 ## Internal meth
2a00: 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 ods.. method
2a10: 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d RecordBranchComm
2a20: 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b its {branches} {
2a30: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 ..foreach branch
2a40: 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65 73 20 revnr $branches
2a50: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61 74 63 {.. if {[catc
2a60: 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68 h {...set branch
2a70: 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e [$self Rev2Bran
2a80: 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d ch $branchrevnr]
2a90: 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 73 65 .. }]} {...se
2aa0: 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 t branch [$self
2ab0: 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e AddUnlabeledBran
2ac0: 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63 68 6e ch [rev 2branchn
2ad0: 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 5d r $branchrevnr]]
2ae0: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 .. }... #
2af0: 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d 6d 69 Record the commi
2b00: 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76 69 73 t, just as revis
2b10: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 0a 09 ion number for..
2b20: 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f 63 65 # now. Proce
2b30: 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 sBranchDependenc
2b40: 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e 64 20 ies will extend
2b50: 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20 20 20 that ito a..
2b60: 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63 74 20 # proper object
2b70: 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20 20 20 reference....
2b80: 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c $branch setchil
2b90: 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68 72 65 drevnr $branchre
2ba0: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 vnr..}..return.
2bb0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
2bc0: 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72 65 76 Rev2Branch {rev
2bd0: 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20 nr} {..if {[rev
2be0: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 istrunkrevnr $re
2bf0: 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f vnr]} {.. tro
2c00: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 45 uble internal "E
2c10: 78 70 65 63 74 65 64 20 61 20 62 72 61 6e 63 68 xpected a branch
2c20: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 revision number
2c30: 22 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 "..}..return $my
2c40: 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20 32 62 branches([rev 2b
2c50: 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72 5d 29 ranchnr $revnr])
2c60: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
2c70: 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 od AddUnlabeledB
2c80: 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e 72 7d ranch {branchnr}
2c90: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73 65 6c {..return [$sel
2ca0: 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e 6c 61 f AddBranch unla
2cb0: 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e 72 20 beled-$branchnr
2cc0: 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20 20 7d $branchnr]. }
2cd0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 .. method Add
2ce0: 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62 72 61 Branch {name bra
2cf0: 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 69 nchnr} {..if {[i
2d00: 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72 61 nfo exists mybra
2d10: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 nches($branchnr)
2d20: 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 ]} {.. log wr
2d30: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 ite 1 file "In '
2d40: 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e 63 68 $mypath': Branch
2d50: 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e 61 6d '$branchnr' nam
2d60: 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68 65 73 ed '[$mybranches
2d70: 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61 6d 65 ($branchnr) name
2d80: 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 ]'".. log wri
2d90: 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e 6e 6f te 1 file "Canno
2da0: 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20 6e 61 t have second na
2db0: 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67 6e 6f me '$name', igno
2dc0: 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20 72 65 ring it".. re
2dd0: 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62 72 61 turn..}..set bra
2de0: 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 nch [sym %AUTO%
2df0: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 6e 72 branch $branchnr
2e00: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 65 74 [$myproject get
2e10: 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20 24 73 symbol $name] $s
2e20: 65 6c 66 5d 0a 09 24 62 72 61 6e 63 68 20 73 65 elf]..$branch se
2e30: 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e 63 72 20 tposition [incr
2e40: 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a 09 73 65 mybranchcnt]..se
2e50: 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 t mybranches($br
2e60: 61 6e 63 68 6e 72 29 20 24 62 72 61 6e 63 68 0a anchnr) $branch.
2e70: 09 72 65 74 75 72 6e 20 24 62 72 61 6e 63 68 0a .return $branch.
2e80: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
2e90: 64 20 41 64 64 54 61 67 20 7b 6e 61 6d 65 20 72 d AddTag {name r
2ea0: 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 74 61 67 evnr} {..set tag
2eb0: 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 74 61 67 [sym %AUTO% tag
2ec0: 20 24 72 65 76 6e 72 20 5b 24 6d 79 70 72 6f 6a $revnr [$myproj
2ed0: 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e ect getsymbol $n
2ee0: 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 6c 61 70 ame] $self]..lap
2ef0: 70 65 6e 64 20 6d 79 74 61 67 73 28 24 72 65 76 pend mytags($rev
2f00: 6e 72 29 20 24 74 61 67 0a 09 72 65 74 75 72 6e nr) $tag..return
2f10: 20 24 74 61 67 0a 20 20 20 20 7d 0a 0a 20 20 20 $tag. }..
2f20: 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 61 method RecordBa
2f30: 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65 73 20 sicDependencies
2f40: 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 7b 0a 09 {revnr next} {..
2f50: 23 20 48 61 6e 64 6c 65 20 74 68 65 20 72 65 76 # Handle the rev
2f60: 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 6e 63 69 ision dependenci
2f70: 65 73 2e 20 52 65 63 6f 72 64 20 74 68 65 6d 20 es. Record them
2f80: 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 23 20 6e for now, do..# n
2f90: 6f 74 68 69 6e 67 20 77 69 74 68 20 74 68 65 6d othing with them
2fa0: 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 74 68 65 yet....# On the
2fb0: 20 74 72 75 6e 6b 20 74 68 65 20 27 6e 65 78 74 trunk the 'next
2fc0: 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 ' field points t
2fd0: 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 09 o the previous..
2fe0: 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 2e 65 2e # revision, i.e.
2ff0: 20 74 68 65 20 5f 70 61 72 65 6e 74 5f 20 6f 66 the _parent_ of
3000: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f 6e 65 the current one
3010: 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 20 31 2e . Example:..# 1.
3020: 36 27 73 20 6e 65 78 74 20 69 73 20 31 2e 35 20 6's next is 1.5
3030: 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 64 6d 69 (modulo cvs admi
3040: 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f 6e 74 72 n -o)....# Contr
3050: 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63 arily on a branc
3060: 68 20 74 68 65 20 27 6e 65 78 74 27 20 66 69 65 h the 'next' fie
3070: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 ld points to the
3080: 0a 09 23 20 70 72 69 6d 61 72 79 20 5f 63 68 69 ..# primary _chi
3090: 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65 ld_ of the curre
30a0: 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 41 73 20 nt revision. As
30b0: 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 2e 31 2e example,..# 1.1.
30c0: 33 2e 32 27 73 20 27 6e 65 78 74 27 20 77 69 6c 3.2's 'next' wil
30d0: 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e 0a 0a 09 l be 1.1.3.3....
30e0: 23 20 54 68 65 20 27 6e 65 78 74 27 20 66 69 65 # The 'next' fie
30f0: 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 6c 77 61 ld actually alwa
3100: 79 73 20 72 65 66 65 72 73 20 74 6f 20 74 68 65 ys refers to the
3110: 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 63 6f 6e revision..# con
3120: 74 61 69 6e 69 6e 67 20 74 68 65 20 64 65 6c 74 taining the delt
3130: 61 20 6e 65 65 64 65 64 20 74 6f 20 72 65 74 72 a needed to retr
3140: 69 65 76 65 20 74 68 61 74 20 72 65 76 69 73 69 ieve that revisi
3150: 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 65 70 65 on....# The depe
3160: 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 65 64 20 ndencies needed
3170: 68 65 72 65 20 61 72 65 20 74 68 65 20 6c 6f 67 here are the log
3180: 69 63 61 6c 20 73 74 72 75 63 74 75 72 65 2c 0a ical structure,.
3190: 09 23 20 70 61 72 65 6e 74 2f 63 68 69 6c 64 2c .# parent/child,
31a0: 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 69 6d 70 and not the imp
31b0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 lementation depe
31c0: 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 23 20 70 ndent delta..# p
31d0: 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 20 7b 24 ointers....if {$
31e0: 6e 65 78 74 20 65 71 20 22 22 7d 20 72 65 74 75 next eq ""} retu
31f0: 72 6e 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 rn..#
3200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 p
3210: 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 0a 09 arent -> child..
3220: 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b if {[rev istrunk
3230: 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b revnr $revnr]} {
3240: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 .. lappend my
3250: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 6e 65 dependencies $ne
3260: 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 65 6c 73 xt $revnr..} els
3270: 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 e {.. lappend
3280: 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 mydependencies
3290: 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09 7d 0a $revnr $next..}.
32a0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
32b0: 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 method Proces
32c0: 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 65 6e sPrimaryDependen
32d0: 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 cies {} {..forea
32e0: 63 68 20 7b 70 61 72 65 6e 74 72 65 76 6e 72 20 ch {parentrevnr
32f0: 63 68 69 6c 64 72 65 76 6e 72 7d 20 24 6d 79 64 childrevnr} $myd
3300: 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 0a 09 20 ependencies {..
3310: 20 20 20 73 65 74 20 70 61 72 65 6e 74 20 24 6d set parent $m
3320: 79 72 65 76 28 24 70 61 72 65 6e 74 72 65 76 6e yrev($parentrevn
3330: 72 29 0a 09 20 20 20 20 73 65 74 20 63 68 69 6c r).. set chil
3340: 64 20 20 24 6d 79 72 65 76 28 24 63 68 69 6c 64 d $myrev($child
3350: 72 65 76 6e 72 29 0a 09 20 20 20 20 24 70 61 72 revnr).. $par
3360: 65 6e 74 20 73 65 74 63 68 69 6c 64 20 24 63 68 ent setchild $ch
3370: 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20 ild.. $child
3380: 73 65 74 70 61 72 65 6e 74 20 24 70 61 72 65 6e setparent $paren
3390: 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 t..}..return.
33a0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 }.. method P
33b0: 72 6f 63 65 73 73 42 72 61 6e 63 68 44 65 70 65 rocessBranchDepe
33c0: 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 ndencies {} {..f
33d0: 6f 72 65 61 63 68 20 7b 62 72 61 6e 63 68 6e 72 oreach {branchnr
33e0: 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 branch} [array
33f0: 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 get mybranches]
3400: 7b 0a 09 20 20 20 20 73 65 74 20 72 65 76 6e 72 {.. set revnr
3410: 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 [$branch parent
3420: 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20 69 66 20 revnr]... if
3430: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d {![info exists m
3440: 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b yrev($revnr)]} {
3450: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 ...log write 1 f
3460: 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68 ile "In '$mypath
3470: 27 3a 20 54 68 65 20 62 72 61 6e 63 68 20 27 5b ': The branch '[
3480: 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d 27 20 72 $branch name]' r
3490: 65 66 65 72 65 6e 63 65 73 22 0a 09 09 6c 6f 67 eferences"...log
34a0: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 74 write 1 file "t
34b0: 68 65 20 62 6f 67 75 73 20 72 65 76 69 73 69 6f he bogus revisio
34c0: 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64 20 77 n '$revnr' and w
34d0: 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e 22 ill be ignored."
34e0: 0a 09 09 24 62 72 61 6e 63 68 20 64 65 73 74 72 ...$branch destr
34f0: 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79 62 72 61 oy...unset mybra
3500: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 nches($branchnr)
3510: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 .. } else {..
3520: 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 76 28 .set rev $myrev(
3530: 24 72 65 76 6e 72 29 0a 09 09 24 72 65 76 20 61 $revnr)...$rev a
3540: 64 64 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 ddbranch $branch
3550: 0a 09 09 24 62 72 61 6e 63 68 20 73 65 74 70 61 ...$branch setpa
3560: 72 65 6e 74 20 24 72 65 76 0a 0a 09 09 23 20 49 rent $rev....# I
3570: 66 20 72 65 76 69 73 69 6f 6e 73 20 77 65 72 65 f revisions were
3580: 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 committed on th
3590: 65 20 62 72 61 6e 63 68 20 77 65 20 73 74 6f 72 e branch we stor
35a0: 65 20 61 0a 09 09 23 20 72 65 66 65 72 65 6e 63 e a...# referenc
35b0: 65 20 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20 e to the branch
35c0: 74 68 65 72 65 2c 20 61 6e 64 20 66 75 72 74 68 there, and furth
35d0: 65 72 20 64 65 63 6c 61 72 65 0a 09 09 23 20 74 er declare...# t
35e0: 68 65 20 66 69 72 73 74 20 63 68 69 6c 64 27 73 he first child's
35f0: 20 70 61 72 65 6e 74 20 74 6f 20 62 65 20 62 72 parent to be br
3600: 61 6e 63 68 27 73 20 70 61 72 65 6e 74 2c 20 61 anch's parent, a
3610: 6e 64 0a 09 09 23 20 6c 69 73 74 20 74 68 69 73 nd...# list this
3620: 20 63 68 69 6c 64 20 69 6e 20 74 68 65 20 70 61 child in the pa
3630: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a rent revision...
3640: 09 09 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 ..if {[$branch h
3650: 61 73 63 68 69 6c 64 72 65 76 5d 7d 20 7b 0a 09 aschildrev]} {..
3660: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 72 65 . set childre
3670: 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 63 68 69 vnr [$branch chi
3680: 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20 20 20 73 ldrevnr]... s
3690: 65 74 20 63 68 69 6c 64 20 24 6d 79 72 65 76 28 et child $myrev(
36a0: 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 09 09 20 $childrevnr)...
36b0: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 $branch setch
36c0: 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09 09 20 20 ild $child....
36d0: 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 72 65 $child setpare
36e0: 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 ntbranch $branch
36f0: 0a 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 ... $child se
3700: 74 70 61 72 65 6e 74 20 20 20 20 20 20 20 24 72 tparent $r
3710: 65 76 0a 09 09 20 20 20 20 24 72 65 76 20 61 64 ev... $rev ad
3720: 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 dchildonbranch $
3730: 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20 20 20 7d child...}.. }
3740: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
3750: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 53 6f }.. method So
3760: 72 74 42 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a rtBranches {} {.
3770: 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 .foreach {revnr
3780: 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20 rev} [array get
3790: 6d 79 72 65 76 5d 20 7b 20 24 72 65 76 20 73 6f myrev] { $rev so
37a0: 72 74 62 72 61 6e 63 68 65 73 20 7d 0a 09 72 65 rtbranches }..re
37b0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
37c0: 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 54 61 method ProcessTa
37d0: 67 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d gDependencies {}
37e0: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 {..foreach {rev
37f0: 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 nr taglist} [arr
3800: 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b ay get mytags] {
3810: 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f .. if {![info
3820: 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 24 72 exists myrev($r
3830: 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73 65 74 20 evnr)]} {...set
3840: 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74 61 67 6c n [llength $tagl
3850: 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72 69 74 65 ist]...log write
3860: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 1 file "In '$my
3870: 70 61 74 68 27 3a 20 54 68 65 20 66 6f 6c 6c 6f path': The follo
3880: 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20 74 61 67 wing [nsp $n tag
3890: 5d 20 72 65 66 65 72 65 6e 63 65 22 0a 09 09 6c ] reference"...l
38a0: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 og write 1 file
38b0: 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 73 "the bogus revis
38c0: 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64 ion '$revnr' and
38d0: 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 will be ignored
38e0: 2e 22 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 ."...foreach tag
38f0: 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 20 20 $taglist {...
3900: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 log write 1 fi
3910: 6c 65 20 22 20 20 20 20 5b 24 74 61 67 20 6e 61 le " [$tag na
3920: 6d 65 5d 22 0a 09 09 20 20 20 20 24 74 61 67 20 me]"... $tag
3930: 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09 09 75 6e destroy...}...un
3940: 73 65 74 20 6d 79 74 61 67 73 28 24 72 65 76 6e set mytags($revn
3950: 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b r).. } else {
3960: 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 ...set rev $myre
3970: 76 28 24 72 65 76 6e 72 29 0a 09 09 66 6f 72 65 v($revnr)...fore
3980: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 ach tag $taglist
3990: 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20 61 64 {... $rev ad
39a0: 64 74 61 67 20 20 20 20 24 74 61 67 0a 09 09 20 dtag $tag...
39b0: 20 20 20 24 74 61 67 20 73 65 74 74 61 67 72 65 $tag settagre
39c0: 76 20 24 72 65 76 0a 09 09 7d 0a 09 20 20 20 20 v $rev...}..
39d0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 }..}..return.
39e0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 }.. method D
39f0: 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52 etermineTheRootR
3a00: 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 evision {} {..#
3a10: 54 68 65 20 72 6f 6f 74 20 69 73 20 74 68 65 20 The root is the
3a20: 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 77 68 69 one revision whi
3a30: 63 68 20 68 61 73 20 6e 6f 20 70 61 72 65 6e 74 ch has no parent
3a40: 2e 20 42 79 0a 09 23 20 63 68 65 63 6b 69 6e 67 . By..# checking
3a50: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 77 all revisions w
3a60: 65 20 65 6e 73 75 72 65 20 74 68 61 74 20 77 65 e ensure that we
3a70: 20 63 61 6e 20 64 65 74 65 63 74 20 61 6e 64 0a can detect and.
3a80: 09 23 20 72 65 70 6f 72 74 20 74 68 65 20 63 61 .# report the ca
3a90: 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 72 se of multiple r
3aa0: 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74 20 74 68 oots. Without th
3ab0: 61 74 20 77 65 20 63 6f 75 6c 64 0a 09 23 20 73 at we could..# s
3ac0: 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e 65 20 72 imply take one r
3ad0: 65 76 69 73 69 6f 6e 20 61 6e 64 20 66 6f 6c 6c evision and foll
3ae0: 6f 77 20 74 68 65 20 70 61 72 65 6e 74 20 6c 69 ow the parent li
3af0: 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65 69 72 20 nks to..# their
3b00: 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a 0a 09 66 root (sic!)....f
3b10: 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 72 65 oreach {revnr re
3b20: 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 v} [array get my
3b30: 72 65 76 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b rev] {.. if {
3b40: 5b 24 72 65 76 20 68 61 73 70 61 72 65 6e 74 5d [$rev hasparent]
3b50: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 } continue..
3b60: 69 66 20 7b 24 6d 79 72 6f 6f 74 20 6e 65 20 22 if {$myroot ne "
3b70: 22 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 "} { trouble int
3b80: 65 72 6e 61 6c 20 22 4d 75 6c 74 69 70 6c 65 20 ernal "Multiple
3b90: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66 root revisions f
3ba0: 6f 75 6e 64 22 20 7d 0a 09 20 20 20 20 73 65 74 ound" }.. set
3bb0: 20 6d 79 72 6f 6f 74 20 24 72 65 76 0a 09 7d 0a myroot $rev..}.
3bc0: 0a 09 23 20 49 6e 20 74 68 65 20 66 75 74 75 72 ..# In the futur
3bd0: 65 20 77 65 20 61 6c 73 6f 20 6e 65 65 64 20 61 e we also need a
3be0: 20 6c 69 73 74 2c 20 61 73 20 62 72 61 6e 63 68 list, as branch
3bf0: 65 73 20 63 61 6e 20 62 65 63 6f 6d 65 0a 09 23 es can become..#
3c00: 20 73 65 76 65 72 65 64 20 66 72 6f 6d 20 74 68 severed from th
3c10: 65 69 72 20 70 61 72 65 6e 74 2c 20 6d 61 6b 69 eir parent, maki
3c20: 6e 67 20 74 68 65 6d 20 74 68 65 69 72 20 6f 77 ng them their ow
3c30: 6e 20 72 6f 6f 74 2e 0a 09 73 65 74 20 6d 79 72 n root...set myr
3c40: 6f 6f 74 73 20 5b 6c 69 73 74 20 24 6d 79 72 6f oots [list $myro
3c50: 6f 74 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ot]..return.
3c60: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 }.. method De
3c70: 74 65 72 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f termineRevisionO
3c80: 70 65 72 61 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 perations {} {..
3c90: 66 6f 72 65 61 63 68 20 72 65 76 20 24 6d 79 72 foreach rev $myr
3ca0: 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 evisions { $rev
3cb0: 64 65 74 65 72 6d 69 6e 65 6f 70 65 72 61 74 69 determineoperati
3cc0: 6f 6e 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 on }..return.
3cd0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 }.. method D
3ce0: 65 74 65 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 etermineLinesOfD
3cf0: 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a evelopment {} {.
3d00: 09 23 20 46 6f 72 20 72 65 76 69 73 69 6f 6e 73 .# For revisions
3d10: 20 74 68 69 73 20 68 61 73 20 62 65 65 6e 20 64 this has been d
3d20: 6f 6e 65 20 61 6c 72 65 61 64 79 2c 20 69 6e 20 one already, in
3d30: 27 65 78 74 65 6e 64 27 2e 20 4e 6f 77 0a 09 23 'extend'. Now..#
3d40: 20 77 65 20 64 6f 20 74 68 69 73 20 66 6f 72 20 we do this for
3d50: 74 68 65 20 62 72 61 6e 63 68 65 73 20 61 6e 64 the branches and
3d60: 20 74 61 67 73 2e 0a 0a 09 66 6f 72 65 61 63 68 tags....foreach
3d70: 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 {_ branch} [arr
3d80: 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 ay get mybranche
3d90: 73 5d 20 7b 0a 09 20 20 20 20 24 62 72 61 6e 63 s] {.. $branc
3da0: 68 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 h setlod [$self
3db0: 47 65 74 4c 4f 44 20 5b 24 62 72 61 6e 63 68 20 GetLOD [$branch
3dc0: 70 61 72 65 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d parentrevnr]]..}
3dd0: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 ...foreach {_ ta
3de0: 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 glist} [array ge
3df0: 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 t mytags] {..
3e00: 20 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 foreach tag $ta
3e10: 67 6c 69 73 74 20 7b 0a 09 09 24 74 61 67 20 73 glist {...$tag s
3e20: 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 etlod [$self Get
3e30: 4c 4f 44 20 5b 24 74 61 67 20 74 61 67 72 65 76 LOD [$tag tagrev
3e40: 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 nr]].. }..}..
3e50: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
3e60: 20 20 6d 65 74 68 6f 64 20 47 65 74 4c 4f 44 20 method GetLOD
3e70: 7b 72 65 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b {revnr} {..if {[
3e80: 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 rev istrunkrevnr
3e90: 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 $revnr]} {..
3ea0: 20 72 65 74 75 72 6e 20 24 6d 79 74 72 75 6e 6b return $mytrunk
3eb0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 ..} else {..
3ec0: 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 52 65 return [$self Re
3ed0: 76 32 42 72 61 6e 63 68 20 24 72 65 76 6e 72 5d v2Branch $revnr]
3ee0: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d ..}. }.. m
3ef0: 65 74 68 6f 64 20 48 61 6e 64 6c 65 4e 6f 6e 54 ethod HandleNonT
3f00: 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 runkDefaultBranc
3f10: 68 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c h {} {..set revl
3f20: 69 73 74 20 5b 24 73 65 6c 66 20 4e 6f 6e 54 72 ist [$self NonTr
3f30: 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69 unkDefaultRevisi
3f40: 6f 6e 73 5d 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e ons]..if {![llen
3f50: 67 74 68 20 24 72 65 76 6c 69 73 74 5d 7d 20 72 gth $revlist]} r
3f60: 65 74 75 72 6e 0a 0a 09 24 73 65 6c 66 20 41 64 eturn...$self Ad
3f70: 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 justNonTrunkDefa
3f80: 75 6c 74 42 72 61 6e 63 68 20 24 72 65 76 6c 69 ultBranch $revli
3f90: 73 74 0a 09 24 73 65 6c 66 20 43 68 65 63 6b 4c st..$self CheckL
3fa0: 4f 44 73 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ODs..return.
3fb0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 4e 6f }.. method No
3fc0: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 nTrunkDefaultRev
3fd0: 69 73 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 isions {} {..# F
3fe0: 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20 rom cvs2svn the
3ff0: 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e following explan
4000: 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 ation (with modi
4010: 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 fications..# for
4020: 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a our algorithm):
4030: 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 20 77 ...# Determine w
4040: 68 65 74 68 65 72 20 74 68 65 72 65 20 61 72 65 hether there are
4050: 20 61 6e 79 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 any non-trunk d
4060: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 efault branch..#
4070: 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 revisions....#
4080: 49 66 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 If a non-trunk d
4090: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 efault branch is
40a0: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 68 determined to h
40b0: 61 76 65 20 65 78 69 73 74 65 64 2c 0a 09 23 20 ave existed,..#
40c0: 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 return a list of
40d0: 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 61 6c 6c objects for all
40e0: 20 72 65 76 69 73 69 6f 6e 73 20 74 68 61 74 20 revisions that
40f0: 77 65 72 65 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e were once..# non
4100: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 72 -trunk default r
4110: 65 76 69 73 69 6f 6e 73 2c 20 69 6e 20 64 65 70 evisions, in dep
4120: 65 6e 64 65 6e 63 79 20 6f 72 64 65 72 20 28 69 endency order (i
4130: 2e 65 2e 20 72 6f 6f 74 0a 09 23 20 66 69 72 73 .e. root..# firs
4140: 74 29 2e 0a 0a 09 23 20 54 68 65 72 65 20 61 72 t)....# There ar
4150: 65 20 74 77 6f 20 63 61 73 65 73 20 74 6f 20 68 e two cases to h
4160: 61 6e 64 6c 65 3a 0a 0a 09 23 20 4f 6e 65 20 63 andle:...# One c
4170: 61 73 65 20 69 73 20 73 69 6d 70 6c 65 2e 20 20 ase is simple.
4180: 54 68 65 20 52 43 53 20 66 69 6c 65 20 6c 69 73 The RCS file lis
4190: 74 73 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 ts a default bra
41a0: 6e 63 68 0a 09 23 20 65 78 70 6c 69 63 69 74 6c nch..# explicitl
41b0: 79 20 69 6e 20 69 74 73 20 68 65 61 64 65 72 2c y in its header,
41c0: 20 73 75 63 68 20 61 73 20 27 31 2e 31 2e 31 27 such as '1.1.1'
41d0: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c . In this case,
41e0: 20 77 65 0a 09 23 20 6b 6e 6f 77 20 74 68 61 74 we..# know that
41f0: 20 65 76 65 72 79 20 72 65 76 69 73 69 6f 6e 20 every revision
4200: 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 on the vendor br
4210: 61 6e 63 68 20 69 73 20 74 6f 20 62 65 0a 09 23 anch is to be..#
4220: 20 74 72 65 61 74 65 64 20 61 73 20 68 65 61 64 treated as head
4230: 20 6f 66 20 74 72 75 6e 6b 20 61 74 20 74 68 61 of trunk at tha
4240: 74 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e t point in time.
4250: 0a 0a 09 23 20 42 75 74 20 74 68 65 72 65 27 73 ...# But there's
4260: 20 61 6c 73 6f 20 61 20 64 65 67 65 6e 65 72 61 also a degenera
4270: 74 65 20 63 61 73 65 2e 20 20 54 68 65 20 52 43 te case. The RC
4280: 53 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 0a S file does not.
4290: 09 23 20 63 75 72 72 65 6e 74 6c 79 20 68 61 76 .# currently hav
42a0: 65 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e e a default bran
42b0: 63 68 2c 20 79 65 74 20 77 65 20 63 61 6e 20 64 ch, yet we can d
42c0: 65 64 75 63 65 20 74 68 61 74 20 66 6f 72 0a 09 educe that for..
42d0: 23 20 73 6f 6d 65 20 70 65 72 69 6f 64 20 69 6e # some period in
42e0: 20 74 68 65 20 70 61 73 74 20 69 74 20 70 72 6f the past it pro
42f0: 62 61 62 6c 79 20 2a 64 69 64 2a 20 68 61 76 65 bably *did* have
4300: 20 6f 6e 65 2e 20 20 46 6f 72 0a 09 23 20 65 78 one. For..# ex
4310: 61 6d 70 6c 65 2c 20 74 68 65 20 66 69 6c 65 20 ample, the file
4320: 68 61 73 20 76 65 6e 64 6f 72 20 72 65 76 69 73 has vendor revis
4330: 69 6f 6e 73 20 31 2e 31 2e 31 2e 31 20 2d 3e 20 ions 1.1.1.1 ->
4340: 31 2e 31 2e 31 2e 39 36 2c 0a 09 23 20 61 6c 6c 1.1.1.96,..# all
4350: 20 6f 66 20 77 68 69 63 68 20 61 72 65 20 64 61 of which are da
4360: 74 65 64 20 62 65 66 6f 72 65 20 31 2e 32 2c 20 ted before 1.2,
4370: 61 6e 64 20 74 68 65 6e 20 69 74 20 68 61 73 20 and then it has
4380: 31 2e 31 2e 31 2e 39 37 0a 09 23 20 2d 3e 20 31 1.1.1.97..# -> 1
4390: 2e 31 2e 31 2e 31 30 30 20 64 61 74 65 64 20 61 .1.1.100 dated a
43a0: 66 74 65 72 20 31 2e 32 2e 20 20 49 6e 20 74 68 fter 1.2. In th
43b0: 69 73 20 63 61 73 65 2c 20 77 65 20 73 68 6f 75 is case, we shou
43c0: 6c 64 0a 09 23 20 72 65 63 6f 72 64 20 31 2e 31 ld..# record 1.1
43d0: 2e 31 2e 39 36 20 61 73 20 74 68 65 20 6c 61 73 .1.96 as the las
43e0: 74 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f t vendor revisio
43f0: 6e 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 74 n to have been t
4400: 68 65 0a 09 23 20 68 65 61 64 20 6f 66 20 74 68 he..# head of th
4410: 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 e default branch
4420: 2e 0a 0a 09 69 66 20 7b 24 6d 79 70 72 69 6e 63 ....if {$myprinc
4430: 69 70 61 6c 20 6e 65 20 22 22 7d 20 7b 0a 09 20 ipal ne ""} {..
4440: 20 20 20 23 20 54 68 65 72 65 20 69 73 20 73 74 # There is st
4450: 69 6c 6c 20 61 20 64 65 66 61 75 6c 74 20 62 72 ill a default br
4460: 61 6e 63 68 3b 20 74 68 61 74 20 6d 65 61 6e 73 anch; that means
4470: 20 74 68 61 74 20 61 6c 6c 0a 09 20 20 20 20 23 that all.. #
4480: 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 revisions on th
4490: 61 74 20 62 72 61 6e 63 68 20 67 65 74 20 6d 61 at branch get ma
44a0: 72 6b 65 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 rked.... log
44b0: 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 46 6f write 5 file "Fo
44c0: 75 6e 64 20 65 78 70 6c 69 63 69 74 6c 79 20 6d und explicitly m
44d0: 61 72 6b 65 64 20 4e 54 44 42 22 0a 0a 09 20 20 arked NTDB"...
44e0: 20 20 73 65 74 20 72 6e 65 78 74 20 5b 24 6d 79 set rnext [$my
44f0: 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 root child]..
4500: 20 69 66 20 7b 24 72 6e 65 78 74 20 6e 65 20 22 if {$rnext ne "
4510: 22 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 66 "} {...trouble f
4520: 61 74 61 6c 20 22 46 69 6c 65 20 77 69 74 68 20 atal "File with
4530: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 24 default branch $
4540: 6d 79 70 72 69 6e 63 69 70 61 6c 20 61 6c 73 6f myprincipal also
4550: 20 68 61 73 20 72 65 76 69 73 69 6f 6e 20 5b 24 has revision [$
4560: 72 6e 65 78 74 20 72 65 76 6e 72 5d 22 0a 09 09 rnext revnr]"...
4570: 72 65 74 75 72 6e 0a 09 20 20 20 20 7d 0a 0a 09 return.. }...
4580: 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 6d 79 set rev [$my
4590: 62 72 61 6e 63 68 65 73 28 24 6d 79 70 72 69 6e branches($myprin
45a0: 63 69 70 61 6c 29 20 63 68 69 6c 64 5d 0a 09 20 cipal) child]..
45b0: 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 0a 09 set res {}...
45c0: 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65 76 20 while {$rev
45d0: 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 ne ""} {...lappe
45e0: 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 73 65 nd res $rev...se
45f0: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c t rev [$rev chil
4600: 64 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 d].. }...
4610: 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20 return $res...}
4620: 65 6c 73 65 69 66 20 7b 24 6d 79 69 6d 70 6f 72 elseif {$myimpor
4630: 74 65 64 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f ted} {.. # No
4640: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c default branch,
4650: 20 62 75 74 20 74 68 65 20 66 69 6c 65 20 61 70 but the file ap
4660: 70 65 61 72 73 20 74 6f 20 68 61 76 65 20 62 65 pears to have be
4670: 65 6e 0a 09 20 20 20 20 23 20 69 6d 70 6f 72 74 en.. # import
4680: 65 64 2e 20 20 53 6f 20 6f 75 72 20 65 64 75 63 ed. So our educ
4690: 61 74 65 64 20 67 75 65 73 73 20 69 73 20 74 68 ated guess is th
46a0: 61 74 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 at all revisions
46b0: 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 65 20 27 .. # on the '
46c0: 31 2e 31 2e 31 27 20 62 72 61 6e 63 68 20 77 69 1.1.1' branch wi
46d0: 74 68 20 74 69 6d 65 73 74 61 6d 70 73 20 70 72 th timestamps pr
46e0: 69 6f 72 20 74 6f 20 74 68 65 0a 09 20 20 20 20 ior to the..
46f0: 23 20 74 69 6d 65 73 74 61 6d 70 20 6f 66 20 27 # timestamp of '
4700: 31 2e 32 27 20 77 65 72 65 20 6e 6f 6e 2d 74 72 1.2' were non-tr
4710: 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e unk default bran
4720: 63 68 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 ch.. # revisi
4730: 6f 6e 73 2e 0a 09 20 20 20 20 0a 09 20 20 20 20 ons... ..
4740: 23 20 54 68 69 73 20 72 65 61 6c 6c 79 20 6f 6e # This really on
4750: 6c 79 20 70 72 6f 63 65 73 73 65 73 20 73 74 61 ly processes sta
4760: 6e 64 61 72 64 20 27 31 2e 31 2e 31 2e 2a 27 2d ndard '1.1.1.*'-
4770: 73 74 79 6c 65 0a 09 20 20 20 20 23 20 76 65 6e style.. # ven
4780: 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e 20 20 dor revisions.
4790: 4f 6e 65 20 63 6f 75 6c 64 20 63 6f 6e 63 65 69 One could concei
47a0: 76 61 62 6c 79 20 68 61 76 65 20 61 20 66 69 6c vably have a fil
47b0: 65 0a 09 20 20 20 20 23 20 77 68 6f 73 65 20 64 e.. # whose d
47c0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 efault branch is
47d0: 20 31 2e 31 2e 33 20 6f 72 20 77 68 61 74 65 76 1.1.3 or whatev
47e0: 65 72 2c 20 6f 72 20 77 61 73 20 74 68 61 74 0a er, or was that.
47f0: 09 20 20 20 20 23 20 61 74 20 73 6f 6d 65 20 70 . # at some p
4800: 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 77 69 oint in time, wi
4810: 74 68 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 th vendor revisi
4820: 6f 6e 73 20 31 2e 31 2e 33 2e 31 2c 0a 09 20 20 ons 1.1.3.1,..
4830: 20 20 23 20 31 2e 31 2e 33 2e 32 2c 20 65 74 63 # 1.1.3.2, etc
4840: 2e 20 20 42 75 74 20 77 69 74 68 20 74 68 65 20 . But with the
4850: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 67 default branch g
4860: 6f 6e 65 20 6e 6f 77 2c 0a 09 20 20 20 20 23 20 one now,.. #
4870: 77 65 27 64 20 68 61 76 65 20 6e 6f 20 62 61 73 we'd have no bas
4880: 69 73 20 66 6f 72 20 61 73 73 75 6d 69 6e 67 20 is for assuming
4890: 74 68 61 74 20 74 68 65 20 6e 6f 6e 2d 73 74 61 that the non-sta
48a0: 6e 64 61 72 64 0a 09 20 20 20 20 23 20 76 65 6e ndard.. # ven
48b0: 64 6f 72 20 62 72 61 6e 63 68 20 68 61 64 20 65 dor branch had e
48c0: 76 65 72 20 62 65 65 6e 20 74 68 65 20 64 65 66 ver been the def
48d0: 61 75 6c 74 20 62 72 61 6e 63 68 20 61 6e 79 77 ault branch anyw
48e0: 61 79 2e 0a 09 20 20 20 20 0a 09 20 20 20 20 23 ay... .. #
48f0: 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 72 65 Note that we re
4900: 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73 6f 6e ly on comparison
4910: 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 69 s between the ti
4920: 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 20 23 20 mestamps.. #
4930: 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 of the revisions
4940: 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 on the vendor b
4950: 72 61 6e 63 68 20 61 6e 64 20 74 68 61 74 20 6f ranch and that o
4960: 66 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 6f f.. # revisio
4970: 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 68 6f 75 n 1.2, even thou
4980: 67 68 20 74 68 65 20 74 69 6d 65 73 74 61 6d 70 gh the timestamp
4990: 73 20 6d 69 67 68 74 20 62 65 0a 09 20 20 20 20 s might be..
49a0: 23 20 69 6e 63 6f 72 72 65 63 74 20 64 75 65 20 # incorrect due
49b0: 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e 20 20 to clock skew.
49c0: 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 20 73 6c We could do a sl
49d0: 69 67 68 74 6c 79 0a 09 20 20 20 20 23 20 62 65 ightly.. # be
49e0: 74 74 65 72 20 6a 6f 62 20 69 66 20 77 65 20 75 tter job if we u
49f0: 73 65 64 20 74 68 65 20 63 68 61 6e 67 65 73 65 sed the changese
4a00: 74 20 74 69 6d 65 73 74 61 6d 70 73 2c 20 61 73 t timestamps, as
4a10: 20 69 74 20 69 73 0a 09 20 20 20 20 23 20 70 6f it is.. # po
4a20: 73 73 69 62 6c 65 20 74 68 61 74 20 74 68 65 20 ssible that the
4a30: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74 68 61 dependencies tha
4a40: 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20 20 20 t went into..
4a50: 20 23 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 74 # determining t
4a60: 68 6f 73 65 20 74 69 6d 65 73 74 61 6d 70 73 20 hose timestamps
4a70: 61 72 65 20 6d 6f 72 65 20 61 63 63 75 72 61 74 are more accurat
4a80: 65 2e 20 20 42 75 74 0a 09 20 20 20 20 23 20 74 e. But.. # t
4a90: 68 61 74 20 77 6f 75 6c 64 20 72 65 71 75 69 72 hat would requir
4aa0: 65 20 61 6e 20 65 78 74 72 61 20 70 61 73 73 20 e an extra pass
4ab0: 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20 69 66 or two.... if
4ac0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists
4ad0: 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 2e 31 mybranches(1.1.1
4ae0: 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b 7d 20 )]} { return {}
4af0: 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 }... log writ
4b00: 65 20 35 20 66 69 6c 65 20 22 44 65 64 75 63 65 e 5 file "Deduce
4b10: 64 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 4e d existence of N
4b20: 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 20 72 TDB"... set r
4b30: 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 68 65 73 ev [$mybranches
4b40: 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d 0a 09 (1.1.1) child]..
4b50: 20 20 20 20 73 65 74 20 72 65 73 20 20 7b 7d 0a set res {}.
4b60: 09 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 24 . set stop [$
4b70: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 0a 09 myroot child]...
4b80: 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20 65 71 if {$stop eq
4b90: 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 74 20 65 ""} {...# Get e
4ba0: 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 65 verything on the
4bb0: 20 62 72 61 6e 63 68 0a 09 09 77 68 69 6c 65 20 branch...while
4bc0: 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 {$rev ne ""} {..
4bd0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 . lappend res
4be0: 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 74 20 $rev... set
4bf0: 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d rev [$rev child]
4c00: 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73 65 ...}.. } else
4c10: 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74 20 65 {...# Collect e
4c20: 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 65 verything on the
4c30: 20 62 72 61 6e 63 68 20 77 68 69 63 68 20 73 65 branch which se
4c40: 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 09 23 20 ems to have...#
4c50: 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64 20 62 been committed b
4c60: 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 efore the first
4c70: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 primary child of
4c80: 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 20 72 65 the...# root re
4c90: 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20 73 74 vision....set st
4ca0: 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 20 64 61 opdate [$stop da
4cb0: 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 te]...while {$re
4cc0: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 v ne ""} {...
4cd0: 20 69 66 20 7b 5b 24 72 65 76 20 64 61 74 65 5d if {[$rev date]
4ce0: 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d 20 62 >= $stopdate} b
4cf0: 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 70 70 65 reak... lappe
4d00: 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 20 20 nd res $rev...
4d10: 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 set rev [$rev
4d20: 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 child]...}..
4d30: 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20 24 }... return $
4d40: 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 res...} else {..
4d50: 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a 09 7d return {}..}
4d60: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 47 65 . }.. # Ge
4d70: 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49 6e 20 74 neral note: In t
4d80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 65 74 he following met
4d90: 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20 6d 6f 64 hods we only mod
4da0: 69 66 79 20 74 68 65 20 6c 69 6e 6b 73 0a 20 20 ify the links.
4db0: 20 20 23 20 62 65 74 77 65 65 6e 20 72 65 76 69 # between revi
4dc0: 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d 62 6f 6c sions and symbol
4dd0: 73 20 74 6f 20 72 65 73 74 72 75 63 74 75 72 65 s to restructure
4de0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 20 20 the revision.
4df0: 20 20 23 20 74 72 65 65 2e 20 57 65 20 64 6f 20 # tree. We do
4e00: 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 6f 79 20 __not__ destroy
4e10: 74 68 65 20 6f 62 6a 65 63 74 73 2e 20 47 69 76 the objects. Giv
4e20: 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65 78 20 6c en the complex l
4e30: 69 6e 6b 73 0a 20 20 20 20 23 20 47 43 20 69 73 inks. # GC is
4e40: 20 64 69 66 66 69 63 75 6c 74 20 61 74 20 74 68 difficult at th
4e50: 69 73 20 6c 65 76 65 6c 2e 20 49 74 20 69 73 20 is level. It is
4e60: 6d 75 63 68 20 65 61 73 69 65 72 20 74 6f 20 64 much easier to d
4e70: 72 6f 70 0a 20 20 20 20 23 20 65 76 65 72 79 74 rop. # everyt
4e80: 68 69 6e 67 20 77 68 65 6e 20 77 65 20 77 65 20 hing when we we
4e90: 61 72 65 20 64 6f 6e 65 2e 20 54 68 69 73 20 68 are done. This h
4ea0: 61 70 70 65 6e 73 20 69 6e 20 27 64 72 6f 70 27 appens in 'drop'
4eb0: 2c 20 75 73 69 6e 67 0a 20 20 20 20 23 20 74 68 , using. # th
4ec0: 65 20 73 74 61 74 65 20 76 61 72 69 61 62 6c 65 e state variable
4ed0: 20 27 6d 79 72 65 76 27 2c 20 27 6d 79 62 72 61 'myrev', 'mybra
4ee0: 6e 63 68 65 73 27 2c 20 61 6e 64 20 27 6d 79 74 nches', and 'myt
4ef0: 61 67 73 27 2e 20 57 68 61 74 20 77 65 0a 20 20 ags'. What we.
4f00: 20 20 23 20 68 61 76 65 20 74 6f 20 70 65 72 73 # have to pers
4f10: 69 73 74 2c 20 70 65 72 66 6f 72 6d 65 64 20 62 ist, performed b
4f20: 79 20 27 70 65 72 73 69 73 74 27 2c 20 77 65 20 y 'persist', we
4f30: 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a 20 20 20 know will be.
4f40: 20 23 20 72 65 61 63 68 61 62 6c 65 20 74 68 72 # reachable thr
4f50: 6f 75 67 68 20 74 68 65 20 72 65 76 69 73 69 6f ough the revisio
4f60: 6e 73 20 6c 69 73 74 65 64 20 69 6e 20 27 6d 79 ns listed in 'my
4f70: 72 6f 6f 74 73 27 20 61 6e 64 20 74 68 65 69 72 roots' and their
4f80: 0a 20 20 20 20 23 20 63 68 69 6c 64 72 65 6e 20 . # children
4f90: 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a 0a 20 20 and symbols...
4fa0: 20 20 6d 65 74 68 6f 64 20 41 64 6a 75 73 74 4e method AdjustN
4fb0: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 onTrunkDefaultBr
4fc0: 61 6e 63 68 20 7b 72 65 76 6c 69 73 74 7d 20 7b anch {revlist} {
4fd0: 0a 09 73 65 74 20 73 74 6f 70 20 5b 24 6d 79 72 ..set stop [$myr
4fe0: 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23 20 72 65 oot child] ;# re
4ff0: 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 20 77 72 v '1.2'...log wr
5000: 69 74 65 20 35 20 66 69 6c 65 20 22 41 64 6a 75 ite 5 file "Adju
5010: 73 74 69 6e 67 20 4e 54 44 42 20 63 6f 6e 74 61 sting NTDB conta
5020: 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c 65 6e ining [nsp [llen
5030: 67 74 68 20 24 72 65 76 6c 69 73 74 5d 20 72 65 gth $revlist] re
5040: 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 46 72 6f vision]"...# Fro
5050: 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f m cvs2svn the fo
5060: 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 llowing explanat
5070: 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69 ion (with modifi
5080: 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f cations..# for o
5090: 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a ur algorithm):..
50a0: 09 23 20 41 64 6a 75 73 74 20 74 68 65 20 6e 6f .# Adjust the no
50b0: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 n-trunk default
50c0: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 branch revisions
50d0: 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 09 23 found in the..#
50e0: 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a 09 23 20 'revlist'....#
50f0: 27 6d 79 69 6d 70 6f 72 74 65 64 27 20 69 73 20 'myimported' is
5100: 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 20 69 a boolean flag i
5110: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 ndicating whethe
5120: 72 20 74 68 69 73 20 66 69 6c 65 0a 09 23 20 61 r this file..# a
5130: 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 20 62 ppears to have b
5140: 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c 20 77 68 een imported, wh
5150: 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e 73 20 74 ich also means t
5160: 68 61 74 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 hat..# revision
5170: 31 2e 31 20 68 61 73 20 61 20 67 65 6e 65 72 61 1.1 has a genera
5180: 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 ted log message
5190: 74 68 61 74 20 6e 65 65 64 20 6e 6f 74 20 62 65 that need not be
51a0: 0a 09 23 20 70 72 65 73 65 72 76 65 64 2e 20 20 ..# preserved.
51b0: 27 72 65 76 6c 69 73 74 27 20 69 73 20 61 20 6c 'revlist' is a l
51c0: 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 20 72 65 ist of object re
51d0: 66 65 72 65 6e 63 65 73 20 66 6f 72 20 74 68 65 ferences for the
51e0: 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 74 68 ..# revisions th
51f0: 61 74 20 68 61 76 65 20 62 65 65 6e 20 64 65 74 at have been det
5200: 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 6e 6f ermined to be no
5210: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 0a n-trunk default.
5220: 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 .# branch revisi
5230: 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 74 68 ons....# Note th
5240: 61 74 20 74 68 65 20 66 69 72 73 74 20 72 65 76 at the first rev
5250: 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 64 65 66 ision on the def
5260: 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 0a 09 ault branch is..
5270: 23 20 68 61 6e 64 6c 65 64 20 73 74 72 61 6e 67 # handled strang
5280: 65 6c 79 20 62 79 20 43 56 53 2e 20 20 49 66 20 ely by CVS. If
5290: 61 20 66 69 6c 65 20 69 73 20 69 6d 70 6f 72 74 a file is import
52a0: 65 64 20 28 61 73 20 6f 70 70 6f 73 65 64 0a 09 ed (as opposed..
52b0: 23 20 74 6f 20 62 65 69 6e 67 20 61 64 64 65 64 # to being added
52c0: 29 2c 20 43 56 53 20 63 72 65 61 74 65 73 20 61 ), CVS creates a
52d0: 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 2c 20 74 1.1 revision, t
52e0: 68 65 6e 20 63 72 65 61 74 65 73 20 61 0a 09 23 hen creates a..#
52f0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 31 vendor branch 1
5300: 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e 20 31 2e .1.1 based on 1.
5310: 31 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 1, then creates
5320: 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20 72 65 76 a 1.1.1.1..# rev
5330: 69 73 69 6f 6e 20 74 68 61 74 20 69 73 20 69 64 ision that is id
5340: 65 6e 74 69 63 61 6c 20 74 6f 20 74 68 65 20 31 entical to the 1
5350: 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 69 2e 65 .1 revision (i.e
5360: 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c 74 61 74 ., its..# deltat
5370: 65 78 74 20 69 73 20 65 6d 70 74 79 29 2e 20 20 ext is empty).
5380: 54 68 65 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 The log message
5390: 74 68 61 74 20 74 68 65 20 75 73 65 72 20 74 79 that the user ty
53a0: 70 65 64 0a 09 23 20 77 68 65 6e 20 69 6d 70 6f ped..# when impo
53b0: 72 74 69 6e 67 20 69 73 20 73 74 6f 72 65 64 20 rting is stored
53c0: 77 69 74 68 20 74 68 65 20 31 2e 31 2e 31 2e 31 with the 1.1.1.1
53d0: 20 72 65 76 69 73 69 6f 6e 2e 20 20 54 68 65 20 revision. The
53e0: 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 1.1..# revision
53f0: 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 73 20 always contains
5400: 61 20 73 74 61 6e 64 61 72 64 2c 20 67 65 6e 65 a standard, gene
5410: 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 rated log messag
5420: 65 2c 0a 09 23 20 27 49 6e 69 74 69 61 6c 20 72 e,..# 'Initial r
5430: 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a 09 23 20 evision\n'....#
5440: 57 68 65 6e 20 77 65 20 64 65 74 65 63 74 20 61 When we detect a
5450: 20 73 74 72 61 69 67 68 74 66 6f 72 77 61 72 64 straightforward
5460: 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20 74 68 69 import like thi
5470: 73 2c 20 77 65 20 77 61 6e 74 0a 09 23 20 74 6f s, we want..# to
5480: 20 68 61 6e 64 6c 65 20 69 74 20 62 79 20 64 65 handle it by de
5490: 6c 65 74 69 6e 67 20 74 68 65 20 31 2e 31 20 72 leting the 1.1 r
54a0: 65 76 69 73 69 6f 6e 20 28 77 68 69 63 68 20 64 evision (which d
54b0: 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e 74 61 69 oesn't..# contai
54c0: 6e 20 61 6e 79 20 75 73 65 66 75 6c 20 69 6e 66 n any useful inf
54d0: 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20 6d 61 ormation) and ma
54e0: 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20 69 6e 74 king 1.1.1.1 int
54f0: 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70 65 6e 64 o an..# independ
5500: 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74 68 65 20 ent root in the
5510: 66 69 6c 65 27 73 20 64 65 70 65 6e 64 65 6e 63 file's dependenc
5520: 79 20 74 72 65 65 2e 20 20 49 6e 20 53 56 4e 2c y tree. In SVN,
5530: 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77 69 6c 6c ..# 1.1.1.1 will
5540: 20 62 65 20 61 64 64 65 64 20 64 69 72 65 63 74 be added direct
5550: 6c 79 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 ly to the vendor
5560: 20 62 72 61 6e 63 68 20 77 69 74 68 20 69 74 73 branch with its
5570: 0a 09 23 20 69 6e 69 74 69 61 6c 20 63 6f 6e 74 ..# initial cont
5580: 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e 20 61 20 ent. Then in a
5590: 73 70 65 63 69 61 6c 20 27 70 6f 73 74 2d 63 6f special 'post-co
55a0: 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23 20 31 2e mmit', the..# 1.
55b0: 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 69 1.1.1 revision i
55c0: 73 20 63 6f 70 69 65 64 20 62 61 63 6b 20 74 6f s copied back to
55d0: 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 66 20 74 trunk....# If t
55e0: 68 65 20 75 73 65 72 20 69 6d 70 6f 72 74 73 20 he user imports
55f0: 61 67 61 69 6e 20 74 6f 20 74 68 65 20 73 61 6d again to the sam
5600: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c e vendor branch,
5610: 20 74 68 65 6e 20 43 56 53 0a 09 23 20 63 72 65 then CVS..# cre
5620: 61 74 65 73 20 72 65 76 69 73 69 6f 6e 73 20 31 ates revisions 1
5630: 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 2e 33 2c .1.1.2, 1.1.1.3,
5640: 20 65 74 63 2e 20 6f 6e 20 74 68 65 20 76 65 6e etc. on the ven
5650: 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23 20 2a dor branch,..# *
5660: 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e 74 65 72 without* counter
5670: 70 61 72 74 73 20 69 6e 20 74 72 75 6e 6b 20 28 parts in trunk (
5680: 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73 even though thes
5690: 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20 65 e revisions..# e
56a0: 66 66 65 63 74 69 76 65 6c 79 20 70 6c 61 79 20 ffectively play
56b0: 74 68 65 20 72 6f 6c 65 20 6f 66 20 74 72 75 6e the role of trun
56c0: 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e 20 20 53 k revisions). S
56d0: 6f 20 61 66 74 65 72 20 77 65 20 61 64 64 0a 09 o after we add..
56e0: 23 20 73 75 63 68 20 72 65 76 69 73 69 6f 6e 73 # such revisions
56f0: 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 20 62 to the vendor b
5700: 72 61 6e 63 68 2c 20 77 65 20 61 6c 73 6f 20 63 ranch, we also c
5710: 6f 70 79 20 74 68 65 6d 20 62 61 63 6b 20 74 6f opy them back to
5720: 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20 70 6f 73 ..# trunk in pos
5730: 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 23 20 57 t-commits....# W
5740: 65 20 6d 61 72 6b 20 74 68 65 20 72 65 76 69 73 e mark the revis
5750: 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 27 72 ions found in 'r
5760: 65 76 6c 69 73 74 27 20 61 73 20 64 65 66 61 75 evlist' as defau
5770: 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 76 lt branch..# rev
5780: 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f 2c 20 69 isions. Also, i
5790: 66 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73 f the root revis
57a0: 69 6f 6e 20 68 61 73 20 61 20 70 72 69 6d 61 72 ion has a primar
57b0: 79 20 63 68 69 6c 64 0a 09 23 20 77 65 20 73 65 y child..# we se
57c0: 74 20 74 68 61 74 20 72 65 76 69 73 69 6f 6e 20 t that revision
57d0: 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65 to depend on the
57e0: 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 6e 6b 20 last non-trunk
57f0: 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61 6e 63 default..# branc
5800: 68 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 70 h revision and p
5810: 6f 73 73 69 62 6c 79 20 61 64 6a 75 73 74 20 69 ossibly adjust i
5820: 74 73 20 74 79 70 65 20 61 63 63 6f 72 64 69 6e ts type accordin
5830: 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69 72 73 74 gly....set first
5840: 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c 69 73 [lindex $revlis
5850: 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 t 0]...log write
5860: 20 36 20 66 69 6c 65 20 22 3c 5b 24 66 69 72 73 6 file "<[$firs
5870: 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78 70 72 20 t revnr]> [expr
5880: 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 3f 20 22 {$myimported ? "
5890: 69 6d 70 6f 72 74 65 64 22 20 3a 20 22 6e 6f 74 imported" : "not
58a0: 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c 20 5b 24 imported"}], [$
58b0: 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d first operation]
58c0: 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69 72 73 74 , [expr {[$first
58d0: 20 68 61 73 74 65 78 74 5d 20 3f 20 22 68 61 73 hastext] ? "has
58e0: 20 74 65 78 74 22 20 3a 20 22 6e 6f 20 74 65 78 text" : "no tex
58f0: 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 6d 79 69 t"}]"...if {$myi
5900: 6d 70 6f 72 74 65 64 20 26 26 0a 09 20 20 20 20 mported &&..
5910: 5b 24 66 69 72 73 74 20 72 65 76 6e 72 5d 20 65 [$first revnr] e
5920: 71 20 22 31 2e 31 2e 31 2e 31 22 20 26 26 0a 09 q "1.1.1.1" &&..
5930: 20 20 20 20 5b 24 66 69 72 73 74 20 6f 70 65 72 [$first oper
5940: 61 74 69 6f 6e 5d 20 65 71 20 22 63 68 61 6e 67 ation] eq "chang
5950: 65 22 20 26 26 0a 09 20 20 20 20 21 5b 24 66 69 e" &&.. ![$fi
5960: 72 73 74 20 68 61 73 74 65 78 74 5d 7d 20 7b 0a rst hastext]} {.
5970: 0a 09 20 20 20 20 73 65 74 20 72 65 76 31 31 20 .. set rev11
5980: 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 5d 20 [$first parent]
5990: 3b 20 23 20 41 73 73 65 72 74 3a 20 53 68 6f 75 ; # Assert: Shou
59a0: 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e 0a 09 20 ld be myroot...
59b0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 20 66 log write 3 f
59c0: 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 69 72 ile "Removing ir
59d0: 72 65 6c 65 76 61 6e 74 20 72 65 76 69 73 69 6f relevant revisio
59e0: 6e 20 5b 24 72 65 76 31 31 20 72 65 76 6e 72 5d n [$rev11 revnr]
59f0: 22 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 "... # Cut ou
5a00: 74 20 74 68 65 20 6f 6c 64 20 6d 79 72 6f 6f 74 t the old myroot
5a10: 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 20 20 20 revision....
5a20: 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 ldelete myroots
5a30: 20 24 72 65 76 31 31 20 3b 20 23 20 4e 6f 74 20 $rev11 ; # Not
5a40: 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f 6e 67 65 a root any longe
5a50: 72 2e 0a 0a 09 20 20 20 20 24 66 69 72 73 74 20 r.... $first
5a60: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 20 3b 20 cutfromparent ;
5a70: 23 20 53 65 76 65 72 20 72 65 76 69 73 69 6f 6e # Sever revision
5a80: 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 72 65 76 from parent rev
5a90: 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69 66 20 7b ision... if {
5aa0: 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b 0a 09 $stop ne ""} {..
5ab0: 09 24 73 74 6f 70 20 63 75 74 66 72 6f 6d 70 61 .$stop cutfrompa
5ac0: 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d rent...lappend m
5ad0: 79 72 6f 6f 74 73 20 24 73 74 6f 70 20 3b 20 23 yroots $stop ; #
5ae0: 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66 74 65 72 New root, after
5af0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 0a 09 vendor branch..
5b00: 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 75 }... # Cu
5b10: 74 20 6f 75 74 20 74 68 65 20 76 65 6e 64 6f 72 t out the vendor
5b20: 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 0a 0a branch symbol..
5b30: 09 20 20 20 20 73 65 74 20 76 65 6e 64 6f 72 20 . set vendor
5b40: 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 62 72 [$first parentbr
5b50: 61 6e 63 68 5d 0a 09 20 20 20 20 69 66 20 7b 24 anch].. if {$
5b60: 76 65 6e 64 6f 72 20 65 71 20 22 22 7d 20 7b 20 vendor eq ""} {
5b70: 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c trouble internal
5b80: 20 22 46 69 72 73 74 20 4e 54 44 42 20 72 65 76 "First NTDB rev
5b90: 69 73 69 6f 6e 20 68 61 73 20 6e 6f 20 62 72 61 ision has no bra
5ba0: 6e 63 68 22 20 7d 0a 09 20 20 20 20 69 66 20 7b nch" }.. if {
5bb0: 5b 24 76 65 6e 64 6f 72 20 70 61 72 65 6e 74 5d [$vendor parent]
5bc0: 20 65 71 20 24 72 65 76 31 31 7d 20 7b 0a 09 09 eq $rev11} {...
5bd0: 24 72 65 76 31 31 20 72 65 6d 6f 76 65 62 72 61 $rev11 removebra
5be0: 6e 63 68 20 20 20 20 20 20 20 20 24 76 65 6e 64 nch $vend
5bf0: 6f 72 0a 09 09 24 72 65 76 31 31 20 72 65 6d 6f or...$rev11 remo
5c00: 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 vechildonbranch
5c10: 24 66 69 72 73 74 0a 09 09 24 76 65 6e 64 6f 72 $first...$vendor
5c20: 20 63 75 74 63 68 69 6c 64 0a 09 09 24 66 69 72 cutchild...$fir
5c30: 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 st cutfromparent
5c40: 62 72 61 6e 63 68 0a 09 09 6c 61 70 70 65 6e 64 branch...lappend
5c50: 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a myroots $first.
5c60: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 . }... # C
5c70: 68 61 6e 67 65 20 74 68 65 20 74 79 70 65 20 6f hange the type o
5c80: 66 20 66 69 72 73 74 20 28 74 79 70 69 63 61 6c f first (typical
5c90: 6c 79 20 66 72 6f 6d 20 43 68 61 6e 67 65 20 74 ly from Change t
5ca0: 6f 20 41 64 64 29 3a 0a 09 20 20 20 20 24 66 69 o Add):.. $fi
5cb0: 72 73 74 20 72 65 74 79 70 65 20 61 64 64 0a 0a rst retype add..
5cc0: 09 20 20 20 20 23 20 4d 6f 76 65 20 61 6e 79 20 . # Move any
5cd0: 74 61 67 73 20 61 6e 64 20 62 72 61 6e 63 68 65 tags and branche
5ce0: 73 20 66 72 6f 6d 20 74 68 65 20 6f 6c 64 20 74 s from the old t
5cf0: 6f 20 74 68 65 20 6e 65 77 20 72 6f 6f 74 2e 0a o the new root..
5d00: 09 20 20 20 20 24 72 65 76 31 31 20 6d 6f 76 65 . $rev11 move
5d10: 73 79 6d 62 6f 6c 73 74 6f 20 24 66 69 72 73 74 symbolsto $first
5d20: 0a 09 7d 0a 0a 09 23 20 4d 61 72 6b 20 61 6c 6c ..}...# Mark all
5d30: 20 74 68 65 20 73 70 65 63 69 61 6c 20 72 65 76 the special rev
5d40: 69 73 69 6f 6e 73 20 61 73 20 73 75 63 68 0a 09 isions as such..
5d50: 66 6f 72 65 61 63 68 20 72 65 76 20 24 72 65 76 foreach rev $rev
5d60: 6c 69 73 74 20 7b 0a 09 20 20 20 20 6c 6f 67 20 list {.. log
5d70: 77 72 69 74 65 20 33 20 66 69 6c 65 20 22 52 65 write 3 file "Re
5d80: 76 69 73 69 6f 6e 20 6f 6e 20 64 65 66 61 75 6c vision on defaul
5d90: 74 20 62 72 61 6e 63 68 3a 20 5b 24 72 65 76 20 t branch: [$rev
5da0: 72 65 76 6e 72 5d 22 0a 09 20 20 20 20 24 72 65 revnr]".. $re
5db0: 76 20 73 65 74 6f 6e 64 65 66 61 75 6c 74 62 72 v setondefaultbr
5dc0: 61 6e 63 68 20 31 0a 09 7d 0a 0a 09 69 66 20 7b anch 1..}...if {
5dd0: 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b 0a 09 $stop ne ""} {..
5de0: 20 20 20 20 23 20 52 65 76 69 73 69 6f 6e 20 31 # Revision 1
5df0: 2e 32 20 6c 6f 67 69 63 61 6c 6c 79 20 66 6f 6c .2 logically fol
5e00: 6c 6f 77 73 20 74 68 65 20 69 6d 70 6f 72 74 65 lows the importe
5e10: 64 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 20 20 d revisions,..
5e20: 20 20 23 20 6e 6f 74 20 31 2e 31 2e 20 20 41 63 # not 1.1. Ac
5e30: 63 6f 72 64 69 6e 67 6c 79 2c 20 63 6f 6e 6e 65 cordingly, conne
5e40: 63 74 20 69 74 20 74 6f 20 74 68 65 20 6c 61 73 ct it to the las
5e50: 74 20 4e 54 44 42 52 20 61 6e 64 0a 09 20 20 20 t NTDBR and..
5e60: 20 23 20 70 6f 73 73 69 62 6c 79 20 63 68 61 6e # possibly chan
5e70: 67 65 20 69 74 73 20 74 79 70 65 2e 0a 0a 09 20 ge its type....
5e80: 20 20 20 73 65 74 20 6c 61 73 74 20 5b 6c 69 6e set last [lin
5e90: 64 65 78 20 24 72 65 76 6c 69 73 74 20 65 6e 64 dex $revlist end
5ea0: 5d 0a 09 20 20 20 20 24 73 74 6f 70 20 73 65 74 ].. $stop set
5eb0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 defaultbranchpar
5ec0: 65 6e 74 20 24 6c 61 73 74 20 3b 20 23 20 52 65 ent $last ; # Re
5ed0: 74 79 70 65 73 20 74 68 65 20 72 65 76 69 73 69 types the revisi
5ee0: 6f 6e 20 74 6f 6f 2e 0a 09 20 20 20 20 24 6c 61 on too... $la
5ef0: 73 74 20 73 65 74 64 65 66 61 75 6c 74 62 72 61 st setdefaultbra
5f00: 6e 63 68 63 68 69 6c 64 20 20 24 73 74 6f 70 0a nchchild $stop.
5f10: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. }
5f20: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 43 68 65 .. method Che
5f30: 63 6b 4c 4f 44 73 20 7b 7d 20 7b 0a 09 66 6f 72 ckLODs {} {..for
5f40: 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 each {_ branch}
5f50: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62 72 [array get mybr
5f60: 61 6e 63 68 65 73 5d 20 7b 20 24 62 72 61 6e 63 anches] { $branc
5f70: 68 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 66 6f h checklod }..fo
5f80: 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 73 74 reach {_ taglist
5f90: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 } [array get myt
5fa0: 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 ags] {.. fore
5fb0: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 ach tag $taglist
5fc0: 20 7b 20 24 74 61 67 20 63 68 65 63 6b 6c 6f 64 { $tag checklod
5fd0: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 }..}..return.
5fe0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
5ff0: 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 61 6e 74 RemoveIrrelevant
6000: 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 Deletions {} {..
6010: 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 # From cvs2svn:
6020: 49 66 20 61 20 66 69 6c 65 20 69 73 20 61 64 64 If a file is add
6030: 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 2c 20 ed on a branch,
6040: 74 68 65 6e 20 61 20 74 72 75 6e 6b 0a 09 23 20 then a trunk..#
6050: 72 65 76 69 73 69 6f 6e 20 69 73 20 61 64 64 65 revision is adde
6060: 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 d at the same ti
6070: 6d 65 20 69 6e 20 74 68 65 20 27 44 65 61 64 27 me in the 'Dead'
6080: 20 73 74 61 74 65 2e 0a 09 23 20 54 68 69 73 20 state...# This
6090: 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74 revision doesn't
60a0: 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73 65 do anything use
60b0: 66 75 6c 2c 20 73 6f 20 64 65 6c 65 74 65 20 69 ful, so delete i
60c0: 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f t....foreach roo
60d0: 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a 09 20 20 t $myroots {..
60e0: 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 69 73 6e if {[$root isn
60f0: 65 65 64 65 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 eeded]} continue
6100: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
6110: 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 2 file "Removing
6120: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 64 65 61 unnecessary dea
6130: 64 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6f 6f d revision [$roo
6140: 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 20 20 t revnr]"...
6150: 23 20 52 65 6d 6f 76 65 20 61 73 20 72 6f 6f 74 # Remove as root
6160: 2c 20 6d 61 6b 65 20 69 74 73 20 63 68 69 6c 64 , make its child
6170: 20 6e 65 77 20 72 6f 6f 74 20 61 66 74 65 72 0a new root after.
6180: 09 20 20 20 20 23 20 64 69 73 63 6f 6e 6e 65 63 . # disconnec
6190: 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 74 68 65 ting it from the
61a0: 20 72 65 76 69 73 69 6f 6e 20 6a 75 73 74 20 67 revision just g
61b0: 6f 69 6e 67 20 61 77 61 79 2e 0a 0a 09 20 20 20 oing away....
61c0: 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 ldelete myroots
61d0: 20 24 72 6f 6f 74 0a 09 20 20 20 20 69 66 20 7b $root.. if {
61e0: 5b 24 72 6f 6f 74 20 68 61 73 63 68 69 6c 64 5d [$root haschild]
61f0: 7d 20 7b 0a 09 09 73 65 74 20 63 68 69 6c 64 20 } {...set child
6200: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 09 [$root child]...
6210: 24 63 68 69 6c 64 20 63 75 74 66 72 6f 6d 70 61 $child cutfrompa
6220: 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d rent...lappend m
6230: 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 yroots $child..
6240: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 75 74 }... # Cut
6250: 20 6f 75 74 20 74 68 65 20 62 72 61 6e 63 68 65 out the branche
6260: 73 20 73 70 61 77 6e 65 64 20 62 79 20 74 68 65 s spawned by the
6270: 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 62 65 0a revision to be.
6280: 09 20 20 20 20 23 20 64 65 6c 65 74 65 64 2e 20 . # deleted.
6290: 49 66 20 74 68 65 20 62 72 61 6e 63 68 20 68 61 If the branch ha
62a0: 73 20 72 65 76 69 73 69 6f 6e 73 20 74 68 65 79 s revisions they
62b0: 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64 79 0a should already.
62c0: 09 20 20 20 20 23 20 75 73 65 20 6f 70 65 72 61 . # use opera
62d0: 74 69 6f 6e 20 27 61 64 64 27 2c 20 6e 6f 20 6e tion 'add', no n
62e0: 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68 eed to change th
62f0: 61 74 2e 20 54 68 65 20 66 69 72 73 74 0a 09 20 at. The first..
6300: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 6f 6e # revision on
6310: 20 65 61 63 68 20 62 72 61 6e 63 68 20 62 65 63 each branch bec
6320: 6f 6d 65 73 20 61 20 6e 65 77 20 61 6e 64 20 64 omes a new and d
6330: 69 73 63 6f 6e 6e 65 63 74 65 64 0a 09 20 20 20 isconnected..
6340: 20 23 20 72 6f 6f 74 2e 0a 0a 09 20 20 20 20 66 # root.... f
6350: 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 oreach branch [$
6360: 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b root branches] {
6370: 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63 68 ...if {![$branch
6380: 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 haschild]} cont
6390: 69 6e 75 65 0a 09 09 73 65 74 20 66 69 72 73 74 inue...set first
63a0: 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 5d [$branch child]
63b0: 0a 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f ...$first cutfro
63c0: 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 0a 09 09 mparentbranch...
63d0: 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61 $first cutfrompa
63e0: 72 65 6e 74 0a 09 09 24 62 72 61 6e 63 68 20 63 rent...$branch c
63f0: 75 74 63 68 69 6c 64 0a 09 09 6c 61 70 70 65 6e utchild...lappen
6400: 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 74 d myroots $first
6410: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 24 72 6f .. }.. $ro
6420: 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e ot removeallbran
6430: 63 68 65 73 0a 0a 09 20 20 20 20 23 20 54 61 67 ches... # Tag
6440: 67 69 6e 67 20 61 20 64 65 61 64 20 72 65 76 69 ging a dead revi
6450: 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 sion doesn't do
6460: 61 6e 79 74 68 69 6e 67 2c 20 73 6f 20 72 65 6d anything, so rem
6470: 6f 76 65 0a 09 20 20 20 20 23 20 61 6e 79 20 74 ove.. # any t
6480: 61 67 73 20 74 68 61 74 20 77 65 72 65 20 73 65 ags that were se
6490: 74 20 6f 6e 20 69 74 2e 0a 0a 09 20 20 20 20 24 t on it.... $
64a0: 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 root removeallta
64b0: 67 73 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 gs... # This
64c0: 63 61 6e 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 can only happen
64d0: 6f 6e 63 65 20 70 65 72 20 66 69 6c 65 2c 20 61 once per file, a
64e0: 6e 64 20 77 65 20 6d 69 67 68 74 20 68 61 76 65 nd we might have
64f0: 0a 09 20 20 20 20 23 20 6a 75 73 74 20 63 68 61 .. # just cha
6500: 6e 67 65 64 20 6d 79 72 6f 6f 74 73 2c 20 73 6f nged myroots, so
6510: 20 65 6e 64 20 74 68 65 20 6c 6f 6f 70 0a 09 20 end the loop..
6520: 20 20 20 62 72 65 61 6b 0a 09 7d 0a 09 72 65 74 break..}..ret
6530: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
6540: 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 6e 69 74 ethod RemoveInit
6550: 69 61 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 6f ialBranchDeletio
6560: 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 ns {} {..# From
6570: 63 76 73 32 73 76 6e 3a 20 49 66 20 74 68 65 20 cvs2svn: If the
6580: 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f first revision o
6590: 6e 20 61 20 62 72 61 6e 63 68 20 69 73 20 61 6e n a branch is an
65a0: 0a 09 23 20 75 6e 6e 65 63 65 73 73 61 72 79 20 ..# unnecessary
65b0: 64 65 6c 65 74 65 2c 20 72 65 6d 6f 76 65 20 69 delete, remove i
65c0: 74 2e 0a 09 23 0a 09 23 20 49 66 20 61 20 66 69 t...#..# If a fi
65d0: 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e 20 61 le is added on a
65e0: 20 62 72 61 6e 63 68 20 28 77 68 65 74 68 65 72 branch (whether
65f0: 20 6f 72 20 6e 6f 74 20 69 74 20 61 6c 72 65 61 or not it alrea
6600: 64 79 0a 09 23 20 65 78 69 73 74 65 64 20 6f 6e dy..# existed on
6610: 20 74 72 75 6e 6b 29 2c 20 74 68 65 6e 20 6e 65 trunk), then ne
6620: 77 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 43 56 w versions of CV
6630: 53 20 61 64 64 20 61 20 66 69 72 73 74 0a 09 23 S add a first..#
6640: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e branch revision
6650: 20 69 6e 20 74 68 65 20 27 64 65 61 64 27 20 73 in the 'dead' s
6660: 74 61 74 65 20 28 74 6f 20 69 6e 64 69 63 61 74 tate (to indicat
6670: 65 20 74 68 61 74 20 74 68 65 0a 09 23 20 66 69 e that the..# fi
6680: 6c 65 20 64 69 64 20 6e 6f 74 20 65 78 69 73 74 le did not exist
6690: 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 on the branch w
66a0: 68 65 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 hen the branch w
66b0: 61 73 0a 09 23 20 63 72 65 61 74 65 64 29 20 66 as..# created) f
66c0: 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 73 ollowed by the s
66d0: 65 63 6f 6e 64 20 62 72 61 6e 63 68 20 72 65 76 econd branch rev
66e0: 69 73 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20 ision, which is
66f0: 61 6e 0a 09 23 20 61 64 64 2e 20 20 57 68 65 6e an..# add. When
6700: 20 77 65 20 65 6e 63 6f 75 6e 74 65 72 20 74 68 we encounter th
6710: 69 73 20 73 69 74 75 61 74 69 6f 6e 2c 20 77 65 is situation, we
6720: 20 73 65 76 65 72 20 74 68 65 20 62 72 61 6e 63 sever the branc
6730: 68 0a 09 23 20 66 72 6f 6d 20 74 72 75 6e 6b 20 h..# from trunk
6740: 61 6e 64 20 64 65 6c 65 74 65 20 74 68 65 20 66 and delete the f
6750: 69 72 73 74 20 62 72 61 6e 63 68 20 72 65 76 69 irst branch revi
6760: 73 69 6f 6e 2e 0a 0a 09 23 20 41 74 20 74 68 69 sion....# At thi
6770: 73 20 70 6f 69 6e 74 20 77 65 20 6d 61 79 20 68 s point we may h
6780: 61 76 65 20 61 6c 72 65 61 64 79 20 6d 75 6c 74 ave already mult
6790: 69 70 6c 65 20 72 6f 6f 74 73 20 69 6e 20 6d 79 iple roots in my
67a0: 72 6f 6f 74 73 2c 0a 09 23 20 77 65 20 68 61 76 roots,..# we hav
67b0: 65 20 74 6f 20 70 72 6f 63 65 73 73 20 74 68 65 e to process the
67c0: 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72 65 61 63 68 m all....foreach
67d0: 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e root [$self Lin
67e0: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d esOfDevelopment]
67f0: 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f {.. if {[$ro
6800: 6f 74 20 69 73 6e 65 65 64 65 64 62 72 61 6e 63 ot isneededbranc
6810: 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a hdel]} continue.
6820: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 32 . log write 2
6830: 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 file "Removing
6840: 75 6e 6e 65 63 65 73 73 61 72 79 20 69 6e 69 74 unnecessary init
6850: 69 61 6c 20 62 72 61 6e 63 68 20 64 65 6c 65 74 ial branch delet
6860: 65 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22 e [$root revnr]"
6870: 0a 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e 63 ... set branc
6880: 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 h [$root parentb
6890: 72 61 6e 63 68 5d 0a 09 20 20 20 20 73 65 74 20 ranch].. set
68a0: 70 61 72 65 6e 74 20 5b 24 72 6f 6f 74 20 70 61 parent [$root pa
68b0: 72 65 6e 74 5d 0a 09 20 20 20 20 73 65 74 20 63 rent].. set c
68c0: 68 69 6c 64 20 20 5b 24 72 6f 6f 74 20 63 68 69 hild [$root chi
68d0: 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 ld]... ldelet
68e0: 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a e myroots $root.
68f0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 . lappend myr
6900: 6f 6f 74 73 20 24 63 68 69 6c 64 0a 0a 09 20 20 oots $child...
6910: 20 20 24 62 72 61 6e 63 68 20 63 75 74 63 68 69 $branch cutchi
6920: 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20 20 ld.. $child
6930: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 0a 09 cutfromparent...
6940: 20 20 20 20 24 70 61 72 65 6e 74 20 72 65 6d 6f $parent remo
6950: 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 20 vebranch
6960: 24 62 72 61 6e 63 68 0a 09 20 20 20 20 24 70 61 $branch.. $pa
6970: 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c 64 rent removechild
6980: 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09 onbranch $root..
6990: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
69a0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 4c 69 6e 65 . method Line
69b0: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b sOfDevelopment {
69c0: 7d 20 7b 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 } {..# Determine
69d0: 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 64 65 all lines of de
69e0: 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 velopment for th
69f0: 65 20 66 69 6c 65 2e 20 54 68 69 73 20 61 72 65 e file. This are
6a00: 0a 09 23 20 74 68 65 20 6b 6e 6f 77 6e 20 72 6f ..# the known ro
6a10: 6f 74 73 2c 20 61 6e 64 20 74 68 65 20 72 6f 6f ots, and the roo
6a20: 74 20 6f 66 20 61 6c 6c 20 62 72 61 6e 63 68 65 t of all branche
6a30: 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 0a 09 s found on the..
6a40: 23 20 6c 69 6e 65 20 6f 66 20 70 72 69 6d 61 72 # line of primar
6a50: 79 20 63 68 69 6c 64 72 65 6e 2e 0a 0a 09 73 65 y children....se
6a60: 74 20 6c 6f 64 72 6f 6f 74 73 20 7b 7d 0a 09 66 t lodroots {}..f
6a70: 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79 72 oreach root $myr
6a80: 6f 6f 74 73 20 7b 0a 09 20 20 20 20 24 73 65 6c oots {.. $sel
6a90: 66 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69 6e f AddBranchedLin
6aa0: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 esOfDevelopment
6ab0: 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 lodroots $root..
6ac0: 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 6f 64 72 lappend lodr
6ad0: 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 oots $root..}..r
6ae0: 65 74 75 72 6e 20 24 6c 6f 64 72 6f 6f 74 73 0a eturn $lodroots.
6af0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
6b00: 64 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69 6e d AddBranchedLin
6b10: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 esOfDevelopment
6b20: 7b 6c 76 20 72 6f 6f 74 7d 20 7b 0a 09 75 70 76 {lv root} {..upv
6b30: 61 72 20 31 20 24 6c 76 20 6c 6f 64 72 6f 6f 74 ar 1 $lv lodroot
6b40: 73 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 s..while {$root
6b50: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 66 6f ne ""} {.. fo
6b60: 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72 reach branch [$r
6b70: 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a oot branches] {.
6b80: 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63 68 20 ..if {![$branch
6b90: 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 haschild]} conti
6ba0: 6e 75 65 0a 09 09 73 65 74 20 63 68 69 6c 64 20 nue...set child
6bb0: 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 5d 0a [$branch child].
6bc0: 09 09 23 20 52 65 63 75 72 73 65 20 69 6e 74 6f ..# Recurse into
6bd0: 20 74 68 65 20 62 72 61 6e 63 68 20 66 6f 72 20 the branch for
6be0: 64 65 65 70 65 72 20 62 72 61 6e 63 68 65 73 2e deeper branches.
6bf0: 0a 09 09 24 73 65 6c 66 20 41 64 64 42 72 61 6e ...$self AddBran
6c00: 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c chedLinesOfDevel
6c10: 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 opment lodroots
6c20: 24 63 68 69 6c 64 0a 09 09 6c 61 70 70 65 6e 64 $child...lappend
6c30: 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 6c 64 lodroots $child
6c40: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65 74 .. }.. set
6c50: 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 root [$root chi
6c60: 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 ld]..}..return.
6c70: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
6c80: 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b ExcludeNonTrunk
6c90: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 7b 7d 20 7b Information {} {
6ca0: 0a 09 23 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6e ..# Remove all n
6cb0: 6f 6e 2d 74 72 75 6e 6b 20 62 72 61 6e 63 68 65 on-trunk branche
6cc0: 73 2c 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e s, revisions, an
6cd0: 64 20 74 61 67 73 2e 20 57 65 20 64 6f 0a 09 23 d tags. We do..#
6ce0: 20 6b 65 65 70 20 74 68 65 20 74 61 67 73 20 77 keep the tags w
6cf0: 68 69 63 68 20 61 72 65 20 6f 6e 20 74 68 65 20 hich are on the
6d00: 74 72 75 6e 6b 2e 0a 0a 09 73 65 74 20 6e 74 64 trunk....set ntd
6d10: 62 72 6f 6f 74 20 22 22 0a 09 66 6f 72 65 61 63 broot ""..foreac
6d20: 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 h root [$self Li
6d30: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 nesOfDevelopment
6d40: 5d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a ] {.. # Note:
6d50: 20 48 65 72 65 20 74 68 65 20 6f 72 64 65 72 20 Here the order
6d60: 6f 66 20 74 68 65 20 72 6f 6f 74 73 20 69 73 20 of the roots is
6d70: 69 6d 70 6f 72 74 61 6e 74 2c 0a 09 20 20 20 20 important,..
6d80: 23 20 69 2e 65 2e 20 74 68 61 74 20 77 65 20 67 # i.e. that we g
6d90: 65 74 20 74 68 65 6d 20 69 6e 20 64 65 70 74 68 et them in depth
6da0: 20 66 69 72 73 74 20 6f 72 64 65 72 2e 20 54 68 first order. Th
6db0: 69 73 20 65 6e 73 75 72 65 73 0a 09 20 20 20 20 is ensures..
6dc0: 23 20 74 68 61 74 20 74 68 65 20 72 65 6d 6f 76 # that the remov
6dd0: 61 6c 20 6f 66 20 61 20 62 72 61 6e 63 68 20 68 al of a branch h
6de0: 61 70 70 65 6e 73 20 6f 6e 6c 79 20 61 66 74 65 appens only afte
6df0: 72 20 74 68 65 0a 09 20 20 20 20 23 20 62 72 61 r the.. # bra
6e00: 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 66 72 nches spawned fr
6e10: 6f 6d 20 69 74 20 77 65 72 65 20 72 65 6d 6f 76 om it were remov
6e20: 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 74 68 ed. Otherwise th
6e30: 65 0a 09 20 20 20 20 23 20 73 79 73 74 65 6d 20 e.. # system
6e40: 6d 69 67 68 74 20 74 72 79 20 74 6f 20 61 63 63 might try to acc
6e50: 65 73 73 20 64 65 6c 65 74 65 64 20 6f 62 6a 65 ess deleted obje
6e60: 63 74 73 2e 0a 0a 09 20 20 20 20 23 20 44 6f 20 cts.... # Do
6e70: 6e 6f 74 20 65 78 63 6c 75 64 65 20 74 68 65 20 not exclude the
6e80: 74 72 75 6e 6b 2e 0a 09 20 20 20 20 69 66 20 7b trunk... if {
6e90: 5b 5b 24 72 6f 6f 74 20 6c 6f 64 5d 20 69 73 74 [[$root lod] ist
6ea0: 72 75 6e 6b 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a runk]} continue.
6eb0: 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 6c 75 . $self Exclu
6ec0: 64 65 42 72 61 6e 63 68 20 24 72 6f 6f 74 20 6e deBranch $root n
6ed0: 74 64 62 72 6f 6f 74 0a 09 7d 0a 0a 09 69 66 20 tdbroot..}...if
6ee0: 7b 24 6e 74 64 62 72 6f 6f 74 20 6e 65 20 22 22 {$ntdbroot ne ""
6ef0: 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 47 } {.. $self G
6f00: 72 61 66 74 4e 54 44 42 32 54 72 75 6e 6b 20 24 raftNTDB2Trunk $
6f10: 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 ntdbroot..}..ret
6f20: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
6f30: 65 74 68 6f 64 20 45 78 63 6c 75 64 65 42 72 61 ethod ExcludeBra
6f40: 6e 63 68 20 7b 72 6f 6f 74 20 6e 76 7d 20 7b 0a nch {root nv} {.
6f50: 09 23 20 45 78 63 6c 75 64 65 20 74 68 65 20 62 .# Exclude the b
6f60: 72 61 6e 63 68 2f 6c 6f 64 20 73 74 61 72 74 69 ranch/lod starti
6f70: 6e 67 20 61 74 20 72 6f 6f 74 2c 20 61 20 72 65 ng at root, a re
6f80: 76 69 73 69 6f 6e 2e 0a 09 23 0a 09 23 20 49 66 vision...#..# If
6f90: 20 74 68 65 20 4c 4f 44 20 73 74 61 72 74 73 20 the LOD starts
6fa0: 77 69 74 68 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 with non-trunk d
6fb0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 efault branch re
6fc0: 76 69 73 69 6f 6e 73 2c 0a 09 23 20 77 65 20 6c visions,..# we l
6fd0: 65 61 76 65 20 74 68 65 6d 20 69 6e 20 70 6c 61 eave them in pla
6fe0: 63 65 20 61 6e 64 20 64 6f 20 6e 6f 74 20 64 65 ce and do not de
6ff0: 6c 65 74 65 20 74 68 65 20 62 72 61 6e 63 68 2e lete the branch.
7000: 20 49 6e 20 74 68 61 74 0a 09 23 20 63 61 73 65 In that..# case
7010: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 73 65 74 the command set
7020: 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 69 s the variable i
7030: 6e 20 4e 56 20 73 6f 20 74 68 61 74 20 77 65 20 n NV so that we
7040: 63 61 6e 0a 09 23 20 6c 61 74 65 72 20 72 65 77 can..# later rew
7050: 6f 72 6b 20 74 68 65 73 65 20 72 65 76 69 73 6f ork these reviso
7060: 6e 73 20 74 6f 20 62 65 20 70 75 72 65 6c 79 20 ns to be purely
7070: 74 72 75 6e 6b 2e 0a 0a 09 69 66 20 7b 5b 24 72 trunk....if {[$r
7080: 6f 6f 74 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 oot isondefaultb
7090: 72 61 6e 63 68 5d 7d 20 7b 0a 09 20 20 20 20 23 ranch]} {.. #
70a0: 20 48 61 6e 64 6c 69 6e 67 20 61 20 4e 54 44 42 Handling a NTDB
70b0: 2e 20 54 68 69 73 20 62 72 61 6e 63 68 20 6d 61 . This branch ma
70c0: 79 20 63 6f 6e 73 69 73 74 73 20 6e 6f 74 20 6f y consists not o
70d0: 6e 6c 79 20 6f 66 0a 09 20 20 20 20 23 20 4e 54 nly of.. # NT
70e0: 44 42 20 72 65 76 69 73 69 6f 6e 73 2c 20 62 75 DB revisions, bu
70f0: 74 20 61 6c 73 6f 20 73 6f 6d 65 20 6e 6f 6e 2d t also some non-
7100: 4e 54 44 42 2e 20 54 68 65 20 6c 61 74 74 65 72 NTDB. The latter
7110: 20 61 72 65 0a 09 20 20 20 20 23 20 74 72 75 6c are.. # trul
7120: 79 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 61 6e y on a branch an
7130: 64 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 63 d have to be exc
7140: 6c 75 64 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f luded. The follo
7150: 77 69 6e 67 0a 09 20 20 20 20 23 20 6c 6f 6f 70 wing.. # loop
7160: 20 64 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 determines if t
7170: 68 65 72 65 20 61 72 65 20 73 75 63 68 20 72 65 here are such re
7180: 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 20 20 20 75 visions.... u
7190: 70 76 61 72 20 31 20 24 6e 76 20 6e 74 64 62 72 pvar 1 $nv ntdbr
71a0: 6f 6f 74 0a 09 20 20 20 20 73 65 74 20 6e 74 64 oot.. set ntd
71b0: 62 72 6f 6f 74 20 24 72 6f 6f 74 0a 09 20 20 20 broot $root..
71c0: 20 24 72 6f 6f 74 20 63 75 74 66 72 6f 6d 70 61 $root cutfrompa
71d0: 72 65 6e 74 62 72 61 6e 63 68 0a 0a 09 20 20 20 rentbranch...
71e0: 20 73 65 74 20 72 65 76 20 24 72 6f 6f 74 0a 09 set rev $root..
71f0: 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65 76 20 while {$rev
7200: 6e 65 20 22 22 7d 20 7b 0a 09 09 24 72 65 76 20 ne ""} {...$rev
7210: 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 removeallbranche
7220: 73 0a 09 09 23 20 53 65 65 20 6e 6f 74 65 20 5b s...# See note [
7230: 78 5d 2e 0a 0a 09 09 69 66 20 7b 5b 24 72 65 76 x].....if {[$rev
7240: 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e isondefaultbran
7250: 63 68 5d 7d 20 7b 0a 09 09 20 20 20 20 73 65 74 ch]} {... set
7260: 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 rev [$rev child
7270: 5d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 ]...} else {...
7280: 20 20 20 62 72 65 61 6b 0a 09 09 7d 0a 09 20 20 break...}..
7290: 20 20 7d 0a 0a 09 20 20 20 20 23 20 72 65 76 20 }... # rev
72a0: 6e 6f 77 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 now contains the
72b0: 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 54 44 42 20 first non-NTDB
72c0: 72 65 76 69 73 69 6f 6e 20 61 66 74 65 72 20 74 revision after t
72d0: 68 65 0a 09 20 20 20 20 23 20 4e 54 44 42 2c 20 he.. # NTDB,
72e0: 6f 72 20 69 73 20 65 6d 70 74 79 20 69 66 20 74 or is empty if t
72f0: 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 2e here is no such.
7300: 20 49 66 20 77 65 20 68 61 76 65 20 73 6f 6d 65 If we have some
7310: 0a 09 20 20 20 20 23 20 74 68 65 79 20 68 61 76 .. # they hav
7320: 65 20 74 6f 20 72 65 6d 6f 76 65 64 2e 0a 0a 09 e to removed....
7330: 20 20 20 20 69 66 20 7b 24 72 65 76 20 6e 65 20 if {$rev ne
7340: 22 22 7d 20 20 7b 0a 09 09 73 65 74 20 6c 61 73 ""} {...set las
7350: 74 6e 74 64 62 20 5b 24 72 65 76 20 70 61 72 65 tntdb [$rev pare
7360: 6e 74 5d 0a 09 09 24 6c 61 73 74 6e 74 64 62 20 nt]...$lastntdb
7370: 63 75 74 66 72 6f 6d 63 68 69 6c 64 0a 09 09 77 cutfromchild...w
7380: 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 hile {$rev ne ""
7390: 7d 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20 72 } {... $rev r
73a0: 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09 09 20 emovealltags...
73b0: 20 20 20 24 72 65 76 20 72 65 6d 6f 76 65 61 6c $rev removeal
73c0: 6c 62 72 61 6e 63 68 65 73 0a 09 09 20 20 20 20 lbranches...
73d0: 23 20 4e 6f 74 65 20 5b 78 5d 3a 20 57 65 20 6d # Note [x]: We m
73e0: 61 79 20 73 74 69 6c 6c 20 68 61 76 65 20 68 61 ay still have ha
73f0: 64 20 62 72 61 6e 63 68 65 73 20 6f 6e 20 74 68 d branches on th
7400: 65 0a 09 09 20 20 20 20 23 20 72 65 76 69 73 69 e... # revisi
7410: 6f 6e 2e 20 42 72 61 6e 63 68 65 73 20 77 69 74 on. Branches wit
7420: 68 6f 75 74 20 72 65 76 69 73 69 6f 6e 73 20 63 hout revisions c
7430: 6f 6d 6d 69 74 74 65 64 0a 09 09 20 20 20 20 23 ommitted... #
7440: 20 6f 6e 20 74 68 65 6d 20 64 6f 20 6e 6f 74 20 on them do not
7450: 73 68 6f 77 20 75 70 20 69 6e 20 74 68 65 20 6c show up in the l
7460: 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 61 6b 61 ist of roots aka
7470: 0a 09 09 20 20 20 20 23 20 6c 69 6e 65 73 20 6f ... # lines o
7480: 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a 09 f development...
7490: 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 . set rev [$r
74a0: 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 ev child]...}..
74b0: 20 20 20 7d 0a 09 20 20 20 20 72 65 74 75 72 6e }.. return
74c0: 0a 09 7d 0a 0a 09 23 20 4e 6f 20 4e 54 44 42 20 ..}...# No NTDB
74d0: 73 74 75 66 66 20 74 6f 20 64 65 61 6c 20 77 69 stuff to deal wi
74e0: 74 68 2e 20 46 69 72 73 74 20 64 65 6c 65 74 65 th. First delete
74f0: 20 74 68 65 20 62 72 61 6e 63 68 20 6f 62 6a 65 the branch obje
7500: 63 74 0a 09 23 20 69 74 73 65 6c 66 2c 20 61 66 ct..# itself, af
7510: 74 65 72 20 63 75 74 74 69 6e 67 20 61 6c 6c 20 ter cutting all
7520: 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6e 6e the various conn
7530: 65 63 74 69 6f 6e 73 2e 0a 0a 09 73 65 74 20 62 ections....set b
7540: 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 ranch [$root par
7550: 65 6e 74 62 72 61 6e 63 68 5d 0a 09 69 66 20 7b entbranch]..if {
7560: 24 62 72 61 6e 63 68 20 6e 65 20 22 22 7d 20 7b $branch ne ""} {
7570: 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e 63 68 .. set branch
7580: 70 61 72 65 6e 74 20 5b 24 62 72 61 6e 63 68 20 parent [$branch
7590: 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 24 62 72 parent].. $br
75a0: 61 6e 63 68 70 61 72 65 6e 74 20 72 65 6d 6f 76 anchparent remov
75b0: 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 20 24 ebranch $
75c0: 62 72 61 6e 63 68 0a 09 20 20 20 20 24 62 72 61 branch.. $bra
75d0: 6e 63 68 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 nchparent remove
75e0: 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 72 childonbranch $r
75f0: 6f 6f 74 0a 09 7d 0a 0a 09 23 20 54 68 65 20 72 oot..}...# The r
7600: 6f 6f 74 20 69 73 20 6e 6f 20 73 75 63 68 20 61 oot is no such a
7610: 6e 79 20 6c 6f 6e 67 65 72 20 65 69 74 68 65 72 ny longer either
7620: 2e 0a 09 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f ...ldelete myroo
7630: 74 73 20 24 72 6f 6f 74 0a 0a 09 23 20 4e 6f 77 ts $root...# Now
7640: 20 67 6f 20 74 68 72 6f 75 67 68 20 74 68 65 20 go through the
7650: 6c 69 6e 65 20 61 6e 64 20 72 65 6d 6f 76 65 20 line and remove
7660: 61 6c 6c 20 69 74 73 20 72 65 76 69 73 69 6f 6e all its revision
7670: 73 2e 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f s....while {$roo
7680: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 t ne ""} {..
7690: 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74 $root removeallt
76a0: 61 67 73 0a 09 20 20 20 20 24 72 6f 6f 74 20 72 ags.. $root r
76b0: 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 emoveallbranches
76c0: 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 53 65 .. # Note: Se
76d0: 65 20 74 68 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a e the note [x]..
76e0: 0a 09 20 20 20 20 23 20 46 72 6f 6d 20 63 76 73 .. # From cvs
76f0: 32 73 76 6e 3a 20 49 66 20 74 68 69 73 20 69 73 2svn: If this is
7700: 20 74 68 65 20 6c 61 73 74 20 64 65 66 61 75 6c the last defaul
7710: 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61 0a t revision on a.
7720: 09 20 20 20 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b . # non-trunk
7730: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 default branch
7740: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 31 2e followed by a 1.
7750: 32 20 72 65 76 69 73 69 6f 6e 2c 0a 09 20 20 20 2 revision,..
7760: 20 23 20 74 68 65 6e 20 74 68 65 20 31 2e 32 20 # then the 1.2
7770: 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 73 revision depends
7780: 20 6f 6e 20 74 68 69 73 20 6f 6e 65 2e 20 20 46 on this one. F
7790: 49 58 4d 45 3a 20 49 74 20 69 73 0a 09 20 20 20 IXME: It is..
77a0: 20 23 20 71 75 65 73 74 69 6f 6e 61 62 6c 65 20 # questionable
77b0: 77 68 65 74 68 65 72 20 74 68 69 73 20 68 61 6e whether this han
77c0: 64 6c 69 6e 67 20 69 73 20 63 6f 72 72 65 63 74 dling is correct
77d0: 2c 20 73 69 6e 63 65 20 74 68 65 0a 09 20 20 20 , since the..
77e0: 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 # non-trunk def
77f0: 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 ault branch revi
7800: 73 69 6f 6e 73 20 61 66 66 65 63 74 20 74 72 75 sions affect tru
7810: 6e 6b 20 61 6e 64 0a 09 20 20 20 20 23 20 73 68 nk and.. # sh
7820: 6f 75 6c 64 20 74 68 65 72 65 66 6f 72 65 20 6e ould therefore n
7830: 6f 74 20 6a 75 73 74 20 62 65 20 64 69 73 63 61 ot just be disca
7840: 72 64 65 64 20 65 76 65 6e 20 69 66 0a 09 20 20 rded even if..
7850: 20 20 23 20 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c 79 # --trunk-only
7860: 2e 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f .... if {[$ro
7870: 6f 74 20 68 61 73 64 65 66 61 75 6c 74 62 72 61 ot hasdefaultbra
7880: 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 nchchild]} {...s
7890: 65 74 20 6e 74 64 62 63 68 69 6c 64 20 5b 24 72 et ntdbchild [$r
78a0: 6f 6f 74 20 64 65 66 61 75 6c 74 62 72 61 6e 63 oot defaultbranc
78b0: 68 63 68 69 6c 64 5d 0a 09 09 69 66 20 7b 5b 24 hchild]...if {[$
78c0: 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61 75 6c ntdbchild defaul
78d0: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d 20 6e tbranchparent] n
78e0: 65 20 24 6e 74 64 62 63 68 69 6c 64 7d 20 7b 0a e $ntdbchild} {.
78f0: 09 09 20 20 20 20 74 72 6f 75 62 6c 65 20 69 6e .. trouble in
7900: 74 65 72 6e 61 6c 20 22 6e 74 64 62 20 2d 20 74 ternal "ntdb - t
7910: 72 75 6e 6b 20 6c 69 6e 6b 61 67 65 20 62 72 6f runk linkage bro
7920: 6b 65 6e 22 0a 09 09 7d 0a 09 09 24 6e 74 64 62 ken"...}...$ntdb
7930: 63 68 69 6c 64 20 63 75 74 64 65 66 61 75 6c 74 child cutdefault
7940: 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 09 69 branchparent...i
7950: 66 20 7b 5b 24 6e 74 64 62 63 68 69 6c 64 20 68 f {[$ntdbchild h
7960: 61 73 70 61 72 65 6e 74 5d 7d 20 7b 0a 09 09 20 asparent]} {...
7970: 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f lappend myroo
7980: 74 73 20 5b 24 6e 74 64 62 63 68 69 6c 64 20 70 ts [$ntdbchild p
7990: 61 72 65 6e 74 5d 0a 09 09 7d 0a 09 20 20 20 20 arent]...}..
79a0: 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74 }... set root
79b0: 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 [$root child]..
79c0: 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d }...return. }
79d0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 47 72 61 .. method Gra
79e0: 66 74 4e 54 44 42 32 54 72 75 6e 6b 20 7b 72 6f ftNTDB2Trunk {ro
79f0: 6f 74 7d 20 7b 0a 09 23 20 57 65 20 63 61 6e 20 ot} {..# We can
7a00: 6e 6f 77 20 67 72 61 66 74 20 74 68 65 20 6e 6f now graft the no
7a10: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 n-trunk default
7a20: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 branch revisions
7a30: 20 74 6f 0a 09 23 20 74 72 75 6e 6b 2e 20 54 68 to..# trunk. Th
7a40: 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64 ey should alread
7a50: 79 20 62 65 20 61 6c 6f 6e 65 20 6f 6e 20 61 20 y be alone on a
7a60: 43 56 53 42 72 61 6e 63 68 2d 6c 65 73 73 0a 09 CVSBranch-less..
7a70: 23 20 62 72 61 6e 63 68 2e 0a 0a 09 69 66 20 7b # branch....if {
7a80: 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 [$root hasparent
7a90: 62 72 61 6e 63 68 5d 7d 20 7b 20 74 72 6f 75 62 branch]} { troub
7aa0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 4e 54 44 le internal "NTD
7ab0: 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73 B root still has
7ac0: 20 69 74 73 20 62 72 61 6e 63 68 20 73 79 6d 62 its branch symb
7ad0: 6f 6c 22 20 7d 0a 09 69 66 20 7b 5b 24 72 6f 6f ol" }..if {[$roo
7ae0: 74 20 68 61 73 62 72 61 6e 63 68 65 73 5d 7d 20 t hasbranches]}
7af0: 20 20 20 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e { trouble in
7b00: 74 65 72 6e 61 6c 20 22 4e 54 44 42 20 72 6f 6f ternal "NTDB roo
7b10: 74 20 73 74 69 6c 6c 20 68 61 73 20 73 70 61 77 t still has spaw
7b20: 6e 65 64 20 62 72 61 6e 63 68 65 73 22 20 7d 0a ned branches" }.
7b30: 0a 09 73 65 74 20 6c 61 73 74 20 24 72 6f 6f 74 ..set last $root
7b40: 0a 09 77 68 69 6c 65 20 7b 5b 24 6c 61 73 74 20 ..while {[$last
7b50: 68 61 73 63 68 69 6c 64 5d 7d 20 7b 73 65 74 20 haschild]} {set
7b60: 6c 61 73 74 20 5b 24 6c 61 73 74 20 63 68 69 6c last [$last chil
7b70: 64 5d 7d 0a 0a 09 69 66 20 7b 5b 24 6c 61 73 74 d]}...if {[$last
7b80: 20 68 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63 hasdefaultbranc
7b90: 68 63 68 69 6c 64 5d 7d 20 7b 0a 0a 09 20 20 20 hchild]} {...
7ba0: 20 73 65 74 20 72 65 76 31 32 20 5b 24 6c 61 73 set rev12 [$las
7bb0: 74 20 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 t defaultbranchc
7bc0: 68 69 6c 64 5d 0a 09 20 20 20 20 24 72 65 76 31 hild].. $rev1
7bd0: 32 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e 2 cutdefaultbran
7be0: 63 68 70 61 72 65 6e 74 0a 09 20 20 20 20 24 6c chparent.. $l
7bf0: 61 73 74 20 20 63 75 74 64 65 66 61 75 6c 74 62 ast cutdefaultb
7c00: 72 61 6e 63 68 63 68 69 6c 64 0a 0a 09 20 20 20 ranchchild...
7c10: 20 24 72 65 76 31 32 20 63 68 61 6e 67 65 70 61 $rev12 changepa
7c20: 72 65 6e 74 20 24 6c 61 73 74 0a 09 20 20 20 20 rent $last..
7c30: 24 6c 61 73 74 20 20 63 68 61 6e 67 65 63 68 69 $last changechi
7c40: 6c 64 20 24 72 65 76 31 32 0a 0a 09 20 20 20 20 ld $rev12...
7c50: 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 ldelete myroots
7c60: 24 72 65 76 31 32 0a 0a 09 20 20 20 20 23 20 4e $rev12... # N
7c70: 6f 74 65 20 61 6e 64 20 72 65 6d 65 6d 62 65 72 ote and remember
7c80: 20 74 68 61 74 20 74 68 65 20 74 79 70 65 20 6f that the type o
7c90: 66 20 72 65 76 31 32 20 77 61 73 20 61 6c 72 65 f rev12 was alre
7ca0: 61 64 79 0a 09 20 20 20 20 23 20 61 64 6a 75 73 ady.. # adjus
7cb0: 74 65 64 20 62 79 20 41 64 6a 75 73 74 4e 6f 6e ted by AdjustNon
7cc0: 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e TrunkDefaultBran
7cd0: 63 68 2c 20 73 6f 20 77 65 20 64 6f 6e 27 74 0a ch, so we don't.
7ce0: 09 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 63 . # have to c
7cf0: 68 61 6e 67 65 20 69 74 73 20 74 79 70 65 20 68 hange its type h
7d00: 65 72 65 2e 0a 09 7d 0a 0a 09 77 68 69 6c 65 20 ere...}...while
7d10: 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a {$root ne ""} {.
7d20: 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74 6f 6e . $root seton
7d30: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 30 0a defaultbranch 0.
7d40: 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74 6c 6f . $root setlo
7d50: 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20 d $mytrunk..
7d60: 66 6f 72 65 61 63 68 20 74 61 67 20 5b 24 72 6f foreach tag [$ro
7d70: 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09 24 74 61 ot tags] {...$ta
7d80: 67 20 73 65 74 6c 6f 64 20 24 6d 79 74 72 75 6e g setlod $mytrun
7d90: 6b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65 k.. }.. se
7da0: 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 t root [$root ch
7db0: 69 6c 64 5d 0a 09 7d 0a 0a 20 20 20 20 20 20 20 ild]..}..
7dc0: 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 return. }..
7dd0: 20 20 20 6d 65 74 68 6f 64 20 41 63 74 69 76 65 method Active
7de0: 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76 69 73 {} {..set revis
7df0: 69 6f 6e 73 20 7b 7d 0a 09 73 65 74 20 73 79 6d ions {}..set sym
7e00: 62 6f 6c 73 20 20 20 7b 7d 0a 0a 09 66 6f 72 65 bols {}...fore
7e10: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 ach root [$self
7e20: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 LinesOfDevelopme
7e30: 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b nt] {.. if {[
7e40: 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 62 $root hasparentb
7e50: 72 61 6e 63 68 5d 7d 20 7b 20 6c 61 70 70 65 6e ranch]} { lappen
7e60: 64 20 73 79 6d 62 6f 6c 73 20 5b 24 72 6f 6f 74 d symbols [$root
7e70: 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 20 7d parentbranch] }
7e80: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f .. while {$ro
7e90: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61 ot ne ""} {...la
7ea0: 70 70 65 6e 64 20 72 65 76 69 73 69 6f 6e 73 20 ppend revisions
7eb0: 24 72 6f 6f 74 0a 09 09 66 6f 72 65 61 63 68 20 $root...foreach
7ec0: 74 61 67 20 20 20 20 5b 24 72 6f 6f 74 20 74 61 tag [$root ta
7ed0: 67 73 5d 20 20 20 20 20 7b 20 6c 61 70 70 65 6e gs] { lappen
7ee0: 64 20 73 79 6d 62 6f 6c 73 20 24 74 61 67 20 20 d symbols $tag
7ef0: 20 20 7d 0a 09 09 66 6f 72 65 61 63 68 20 62 72 }...foreach br
7f00: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e anch [$root bran
7f10: 63 68 65 73 5d 20 7b 20 6c 61 70 70 65 6e 64 20 ches] { lappend
7f20: 73 79 6d 62 6f 6c 73 20 24 62 72 61 6e 63 68 20 symbols $branch
7f30: 7d 0a 09 09 73 65 74 20 6c 6f 64 20 5b 24 72 6f }...set lod [$ro
7f40: 6f 74 20 6c 6f 64 5d 0a 09 09 69 66 20 7b 21 5b ot lod]...if {![
7f50: 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 7d 20 7b $lod istrunk]} {
7f60: 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 lappend symbols
7f70: 20 24 6c 6f 64 20 7d 0a 09 09 73 65 74 20 72 6f $lod }...set ro
7f80: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d ot [$root child]
7f90: 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 .. }..}...ret
7fa0: 75 72 6e 20 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 urn [list [lsort
7fb0: 20 2d 75 6e 69 71 75 65 20 2d 64 69 63 74 20 24 -unique -dict $
7fc0: 72 65 76 69 73 69 6f 6e 73 5d 20 5b 6c 73 6f 72 revisions] [lsor
7fd0: 74 20 2d 75 6e 69 71 75 65 20 2d 64 69 63 74 20 t -unique -dict
7fe0: 24 73 79 6d 62 6f 6c 73 5d 5d 0a 20 20 20 20 7d $symbols]]. }
7ff0: 0a 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 67 ... method Ag
8000: 67 72 65 67 61 74 65 53 79 6d 62 6f 6c 44 61 74 gregateSymbolDat
8010: 61 20 7b 7d 20 7b 0a 09 23 20 4e 6f 77 20 74 68 a {} {..# Now th
8020: 61 74 20 74 68 65 20 65 78 61 63 74 20 73 65 74 at the exact set
8030: 20 6f 66 20 72 65 76 69 73 69 6f 6e 73 20 28 61 of revisions (a
8040: 6e 64 20 74 68 72 6f 75 67 68 20 74 68 61 74 0a nd through that.
8050: 09 23 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 .# branches and
8060: 74 61 67 73 29 20 69 73 20 6b 6e 6f 77 6e 20 77 tags) is known w
8070: 65 20 63 61 6e 20 75 70 64 61 74 65 20 74 68 65 e can update the
8080: 20 61 67 67 72 65 67 61 74 65 0a 09 23 20 73 79 aggregate..# sy
8090: 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 73 2e mbol statistics.
80a0: 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 ...foreach root
80b0: 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 [$self LinesOfDe
80c0: 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 velopment] {..
80d0: 20 20 73 65 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 set lod [$root
80e0: 20 6c 6f 64 5d 0a 0a 09 20 20 20 20 23 20 4e 6f lod]... # No
80f0: 74 65 3a 20 49 66 20 74 68 65 20 4c 4f 44 20 69 te: If the LOD i
8100: 73 20 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20 s the trunk the
8110: 63 6f 75 6e 74 2a 2c 20 65 74 63 2e 20 6d 65 74 count*, etc. met
8120: 68 6f 64 73 0a 09 20 20 20 20 23 20 77 69 6c 6c hods.. # will
8130: 20 64 6f 20 6e 6f 74 68 69 6e 67 2c 20 61 73 20 do nothing, as
8140: 69 74 20 69 73 20 61 6c 77 61 79 73 20 70 72 65 it is always pre
8150: 73 65 6e 74 20 28 63 61 6e 6e 6f 74 20 62 65 0a sent (cannot be.
8160: 09 20 20 20 20 23 20 65 78 63 6c 75 64 65 64 29 . # excluded)
8170: 2c 20 61 6e 64 20 69 73 20 61 6c 77 61 79 73 20 , and is always
8180: 61 20 62 72 61 6e 63 68 20 74 6f 6f 2e 0a 0a 09 a branch too....
8190: 20 20 20 20 23 20 4c 69 6e 65 73 20 6f 66 20 64 # Lines of d
81a0: 65 76 65 6c 6f 70 6d 65 6e 74 20 63 6f 75 6e 74 evelopment count
81b0: 20 61 73 20 62 72 61 6e 63 68 65 73 20 61 6e 64 as branches and
81c0: 20 68 61 76 65 20 61 20 63 6f 6d 6d 69 74 0a 09 have a commit..
81d0: 20 20 20 20 23 20 6f 6e 20 74 68 65 6d 20 28 72 # on them (r
81e0: 6f 6f 74 29 2e 20 49 66 20 74 68 65 79 20 61 72 oot). If they ar
81f0: 65 20 73 74 69 6c 6c 20 61 74 74 61 63 68 65 64 e still attached
8200: 20 74 6f 20 61 20 74 72 65 65 20 77 65 0a 09 20 to a tree we..
8210: 20 20 20 23 20 68 61 76 65 20 74 6f 20 63 6f 6d # have to com
8220: 70 75 74 65 20 61 6e 64 20 72 65 67 69 73 74 65 pute and registe
8230: 72 20 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e r possible paren
8240: 74 73 2e 0a 0a 09 20 20 20 20 24 6c 6f 64 20 63 ts.... $lod c
8250: 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 20 20 ountasbranch..
8260: 20 20 24 6c 6f 64 20 63 6f 75 6e 74 61 63 6f 6d $lod countacom
8270: 6d 69 74 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 mit... if {[$
8280: 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 62 72 root hasparentbr
8290: 61 6e 63 68 5d 7d 20 7b 0a 09 09 23 20 4e 6f 74 anch]} {...# Not
82a0: 65 20 6c 6f 64 20 3d 3d 20 5b 24 72 6f 6f 74 20 e lod == [$root
82b0: 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 09 parentbranch]...
82c0: 24 6c 6f 64 20 70 6f 73 73 69 62 6c 65 70 61 72 $lod possiblepar
82d0: 65 6e 74 73 0a 09 20 20 20 20 7d 0a 0a 09 20 20 ents.. }...
82e0: 20 20 23 20 46 6f 72 20 74 68 65 20 72 65 76 69 # For the revi
82f0: 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 6e sions in the lin
8300: 65 20 77 65 20 72 65 67 69 73 74 65 72 20 74 68 e we register th
8310: 65 69 72 20 62 72 61 6e 63 68 65 73 0a 09 20 20 eir branches..
8320: 20 20 23 20 61 6e 64 20 74 61 67 73 20 61 73 20 # and tags as
8330: 62 6c 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 65 blockers for the
8340: 20 6c 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 65 lod, and update
8350: 20 74 68 65 20 74 79 70 65 0a 09 20 20 20 20 23 the type.. #
8360: 20 63 6f 75 6e 74 65 72 73 20 61 73 20 77 65 6c counters as wel
8370: 6c 2e 20 41 73 20 62 72 61 6e 63 68 20 73 79 6d l. As branch sym
8380: 62 6f 6c 73 20 77 69 74 68 6f 75 74 20 63 6f 6d bols without com
8390: 6d 69 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 74 mits on.. # t
83a0: 68 65 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 74 hem are not list
83b0: 65 64 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 64 ed as lines of d
83c0: 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 68 evelopment, we h
83d0: 61 76 65 20 74 6f 0a 09 20 20 20 20 23 20 63 6f ave to.. # co
83e0: 75 6e 74 20 74 68 65 6d 20 68 65 72 65 20 61 73 unt them here as
83f0: 20 77 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e 20 well, as plain
8400: 62 72 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 73 branches. At las
8410: 74 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 65 t we.. # have
8420: 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20 to compute and
8430: 72 65 67 69 73 74 65 72 20 74 68 65 20 70 6f 73 register the pos
8440: 73 69 62 6c 65 20 70 61 72 65 6e 74 73 20 6f 66 sible parents of
8450: 20 74 68 65 0a 09 20 20 20 20 23 20 74 61 67 73 the.. # tags
8460: 2c 20 69 6e 20 63 61 73 65 20 74 68 65 79 20 61 , in case they a
8470: 72 65 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 74 re later convert
8480: 65 64 20 61 73 20 62 72 61 6e 63 68 65 73 2e 0a ed as branches..
8490: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f .. while {$ro
84a0: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 6f ot ne ""} {...fo
84b0: 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72 reach branch [$r
84c0: 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a oot branches] {.
84d0: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b .. $lod block
84e0: 65 64 62 79 20 24 62 72 61 6e 63 68 0a 09 09 20 edby $branch...
84f0: 20 20 20 24 62 72 61 6e 63 68 20 70 6f 73 73 69 $branch possi
8500: 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20 bleparents...
8510: 20 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 if {[$branch ha
8520: 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 schild]} continu
8530: 65 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 e... $branch
8540: 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 09 countasbranch...
8550: 7d 0a 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 }....foreach tag
8560: 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a [$root tags] {.
8570: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b .. $lod block
8580: 65 64 62 79 20 24 74 61 67 0a 09 09 20 20 20 20 edby $tag...
8590: 24 74 61 67 20 70 6f 73 73 69 62 6c 65 70 61 72 $tag possiblepar
85a0: 65 6e 74 73 0a 09 09 20 20 20 20 24 74 61 67 20 ents... $tag
85b0: 63 6f 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a 0a countastag...}..
85c0: 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f ..set root [$roo
85d0: 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a t child].. }.
85e0: 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 .}...return.
85f0: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ##
8600: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
8610: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############.
8620: 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 ## Configurat
8630: 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 ion.. pragma
8640: 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 -hastypeinfo
8650: 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 no ; # no type
8660: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 introspection.
8670: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 pragma -hasinf
8680: 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 o no ; #
8690: 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f no object intro
86a0: 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 spection. pra
86b0: 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68 gma -hastypemeth
86c0: 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65 ods no ; # type
86d0: 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74 is not relevant
86e0: 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 ... # # ## ##
86f0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
8700: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d #############.}
8710: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c ..namespace eval
8720: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
8730: 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20 mport::cvs {.
8740: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 namespace expor
8750: 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 73 t file. names
8760: 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 7b pace eval file {
8770: 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 72 ..# Import not r
8780: 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 79 equired, already
8790: 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 61 a child namespa
87a0: 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 65 ce...# namespace
87b0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo
87c0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
87d0: 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 20 s::file::rev..#
87e0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
87f0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
8800: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 mport::cvs::file
8810: 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 65 ::sym..namespace
8820: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f import ::vc::to
8830: 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 ols::misc::*..na
8840: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
8850: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 :vc::tools::trou
8860: 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 ble..namespace i
8870: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c mport ::vc::tool
8880: 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 63 s::log..namespac
8890: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
88a0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
88b0: 76 73 3a 3a 73 74 61 74 65 0a 20 20 20 20 7d 0a vs::state. }.
88c0: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 }..# # ## ### ##
88d0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
88e0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 ########## #####
88f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
8900: 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 .## Ready..packa
8910: 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 ge provide vc::f
8920: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
8930: 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a 72 65 74 vs::file 1.0.ret
8940: 75 72 6e 0a urn.