0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23 ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 ############.##
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30 Copyright (c) 20
0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69 07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65 tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69 d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20 SE, which.# you
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65 should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 ived as part of
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74 n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66 ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72 voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79 ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75 many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20 als. For exact
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73 contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65 tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79 vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66 able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23 com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 46 69 6c ########..## Fil
0200: 65 2c 20 70 61 72 74 20 6f 66 20 61 20 70 72 6f e, part of a pro
0210: 6a 65 63 74 2c 20 70 61 72 74 20 6f 66 20 61 20 ject, part of a
0220: 43 56 53 20 72 65 70 6f 73 69 74 6f 72 79 2e 20 CVS repository.
0230: 4d 75 6c 74 69 70 6c 65 0a 23 23 20 69 6e 73 74 Multiple.## inst
0240: 61 6e 63 65 73 20 61 72 65 20 70 6f 73 73 69 62 ances are possib
0250: 6c 65 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20 le...# # ## ###
0260: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
0270: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 ############ ###
0280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
0290: 23 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e ##.## Requiremen
02a0: 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 ts..package requ
02b0: 69 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20 ire Tcl 8.4
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02d0: 20 20 20 20 20 20 20 20 3b 20 23 20 52 65 71 75 ; # Requ
02e0: 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61 ired runtime..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 6e ckage require sn
0300: 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 it
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0320: 20 20 3b 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e ; # OO system.
0330: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 .package require
0340: 20 73 74 72 75 63 74 3a 3a 73 65 74 20 20 20 20 struct::set
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0360: 20 20 20 20 20 3b 20 23 20 53 65 74 20 6f 70 65 ; # Set ope
0370: 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 rations..package
0380: 20 72 65 71 75 69 72 65 20 73 74 72 75 63 74 3a require struct:
0390: 3a 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20 :list
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 ; #
03b0: 20 48 69 67 68 65 72 20 6f 72 64 65 72 20 6f 70 Higher order op
03c0: 65 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 erations..packag
03d0: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f e require vc::fo
03e0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
03f0: 73 3a 3a 62 6c 6f 62 73 74 6f 72 65 20 20 3b 20 s::blobstore ;
0400: 23 20 42 6c 6f 62 20 73 74 6f 72 61 67 65 2e 0a # Blob storage..
0410: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require
0420: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
0430: 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 72 rt::cvs::file::r
0440: 65 76 20 20 3b 20 23 20 43 56 53 20 70 65 72 20 ev ; # CVS per
0450: 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 73 2e 0a file revisions..
0460: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require
0470: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
0480: 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 73 rt::cvs::file::s
0490: 79 6d 20 20 3b 20 23 20 43 56 53 20 70 65 72 20 ym ; # CVS per
04a0: 66 69 6c 65 20 73 79 6d 62 6f 6c 73 2e 0a 70 61 file symbols..pa
04b0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 ckage require vc
04c0: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 ::fossil::import
04d0: 3a 3a 63 76 73 3a 3a 73 74 61 74 65 20 20 20 20 ::cvs::state
04e0: 20 20 3b 20 23 20 53 74 61 74 65 20 73 74 6f 72 ; # State stor
04f0: 61 67 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 age..package req
0500: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a uire vc::fossil:
0510: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e :import::cvs::in
0520: 74 65 67 72 69 74 79 20 20 3b 20 23 20 53 74 61 tegrity ; # Sta
0530: 74 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 te integrity che
0540: 63 6b 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 cks..package req
0550: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a uire vc::fossil:
0560: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 67 74 :import::cvs::gt
0570: 63 6f 72 65 20 20 20 20 20 3b 20 23 20 47 72 61 core ; # Gra
0580: 70 68 20 74 72 61 76 65 72 73 61 6c 20 63 6f 72 ph traversal cor
0590: 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 e..package requi
05a0: 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 re vc::tools::tr
05b0: 6f 75 62 6c 65 20 20 20 20 20 20 20 20 20 20 20 ouble
05c0: 20 20 20 20 20 20 20 3b 20 23 20 45 72 72 6f 72 ; # Error
05d0: 20 72 65 70 6f 72 74 69 6e 67 2e 0a 70 61 63 6b reporting..pack
05e0: 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a age require vc::
05f0: 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 20 20 20 20 20 tools::log
0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0610: 3b 20 23 20 55 73 65 72 20 66 65 65 64 62 61 63 ; # User feedbac
0620: 6b 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 k.package requir
0630: 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 e vc::tools::mis
0640: 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 c
0650: 20 20 20 20 20 20 3b 20 23 20 54 65 78 74 20 66 ; # Text f
0660: 6f 72 6d 61 74 74 69 6e 67 0a 0a 23 20 23 20 23 ormatting..# # #
0670: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
0680: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
0690: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
06a0: 23 23 23 23 23 23 23 23 0a 23 23 0a 0a 73 6e 69 ########.##..sni
06b0: 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f t::type ::vc::fo
06c0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
06d0: 73 3a 3a 66 69 6c 65 20 7b 0a 20 20 20 20 23 20 s::file {. #
06e0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
06f0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
0700: 23 23 23 23 23 0a 20 20 20 20 23 23 20 50 75 62 #####. ## Pub
0710: 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 63 6f 6e lic API.. con
0720: 73 74 72 75 63 74 6f 72 20 7b 69 64 20 70 61 74 structor {id pat
0730: 68 20 75 73 72 70 61 74 68 20 65 78 65 63 75 74 h usrpath execut
0740: 61 62 6c 65 20 70 72 6f 6a 65 63 74 7d 20 7b 0a able project} {.
0750: 09 73 65 74 20 6d 79 69 64 20 20 20 20 20 20 20 .set myid
0760: 20 20 24 69 64 0a 09 73 65 74 20 6d 79 70 61 74 $id..set mypat
0770: 68 20 20 20 20 20 20 20 24 70 61 74 68 0a 09 73 h $path..s
0780: 65 74 20 6d 79 75 73 72 70 61 74 68 20 20 20 20 et myusrpath
0790: 24 75 73 72 70 61 74 68 0a 09 73 65 74 20 6d 79 $usrpath..set my
07a0: 65 78 65 63 75 74 61 62 6c 65 20 24 65 78 65 63 executable $exec
07b0: 75 74 61 62 6c 65 0a 09 73 65 74 20 6d 79 70 72 utable..set mypr
07c0: 6f 6a 65 63 74 20 20 20 20 24 70 72 6f 6a 65 63 oject $projec
07d0: 74 0a 09 73 65 74 20 6d 79 74 72 75 6e 6b 20 20 t..set mytrunk
07e0: 20 20 20 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 [$myproject
07f0: 74 72 75 6e 6b 5d 0a 09 73 65 74 20 6d 79 62 6c trunk]..set mybl
0800: 6f 62 20 20 20 20 20 20 20 5b 62 6c 6f 62 73 74 ob [blobst
0810: 6f 72 65 20 24 7b 73 65 6c 66 6e 73 7d 3a 3a 25 ore ${selfns}::%
0820: 41 55 54 4f 25 20 24 69 64 5d 0a 09 72 65 74 75 AUTO% $id]..retu
0830: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
0840: 74 68 6f 64 20 73 65 74 69 64 20 7b 69 64 7d 20 thod setid {id}
0850: 7b 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 {..integrity ass
0860: 65 72 74 20 7b 24 6d 79 69 64 20 65 71 20 22 22 ert {$myid eq ""
0870: 7d 20 7b 46 69 6c 65 20 27 24 6d 79 70 61 74 68 } {File '$mypath
0880: 27 20 61 6c 72 65 61 64 79 20 68 61 73 20 61 6e ' already has an
0890: 20 69 64 2c 20 27 24 6d 79 69 64 27 7d 0a 09 73 id, '$myid'}..s
08a0: 65 74 20 6d 79 69 64 20 24 69 64 0a 09 24 6d 79 et myid $id..$my
08b0: 62 6c 6f 62 20 73 65 74 69 64 20 24 69 64 0a 09 blob setid $id..
08c0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
08d0: 20 20 6d 65 74 68 6f 64 20 69 64 20 20 20 20 20 method id
08e0: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 {} { return $my
08f0: 69 64 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 id }. method
0900: 70 61 74 68 20 20 20 20 7b 7d 20 7b 20 72 65 74 path {} { ret
0910: 75 72 6e 20 24 6d 79 70 61 74 68 20 7d 0a 20 20 urn $mypath }.
0920: 20 20 6d 65 74 68 6f 64 20 75 73 72 70 61 74 68 method usrpath
0930: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 {} { return $my
0940: 75 73 72 70 61 74 68 20 7d 0a 20 20 20 20 6d 65 usrpath }. me
0950: 74 68 6f 64 20 70 72 6f 6a 65 63 74 20 7b 7d 20 thod project {}
0960: 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 72 6f 6a { return $myproj
0970: 65 63 74 20 7d 0a 0a 20 20 20 20 64 65 6c 65 67 ect }.. deleg
0980: 61 74 65 20 6d 65 74 68 6f 64 20 63 6f 6d 6d 69 ate method commi
0990: 74 6d 65 73 73 61 67 65 6f 66 20 74 6f 20 6d 79 tmessageof to my
09a0: 70 72 6f 6a 65 63 74 0a 0a 20 20 20 20 23 20 23 project.. # #
09b0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
09c0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
09d0: 23 23 23 23 0a 20 20 20 20 23 23 20 4d 65 74 68 ####. ## Meth
09e0: 6f 64 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 ods required for
09f0: 20 74 68 65 20 63 6c 61 73 73 20 74 6f 20 62 65 the class to be
0a00: 20 61 20 73 69 6e 6b 20 6f 66 20 74 68 65 20 72 a sink of the r
0a10: 63 73 20 70 61 72 73 65 72 0a 0a 20 20 20 20 23 cs parser.. #
0a20: 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 7b 7d 20 method begin {}
0a30: 7b 70 75 74 73 20 62 65 67 69 6e 7d 0a 20 20 20 {puts begin}.
0a40: 20 23 6d 65 74 68 6f 64 20 73 65 74 68 65 61 64 #method sethead
0a50: 20 7b 68 7d 20 7b 70 75 74 73 20 68 65 61 64 3d {h} {puts head=
0a60: 24 68 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 $h}. #method
0a70: 73 65 74 70 72 69 6e 63 69 70 61 6c 62 72 61 6e setprincipalbran
0a80: 63 68 20 7b 62 7d 20 7b 70 75 74 73 20 70 62 3d ch {b} {puts pb=
0a90: 24 62 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 $b}. #method
0aa0: 64 65 66 74 61 67 20 7b 73 20 72 7d 20 7b 70 75 deftag {s r} {pu
0ab0: 74 73 20 24 73 3d 24 72 7d 0a 20 20 20 20 23 6d ts $s=$r}. #m
0ac0: 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d 65 6e 74 ethod setcomment
0ad0: 20 7b 63 7d 20 7b 70 75 74 73 20 63 6f 6d 6d 65 {c} {puts comme
0ae0: 6e 74 3d 24 63 7d 0a 20 20 20 20 23 6d 65 74 68 nt=$c}. #meth
0af0: 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 od admindone {}
0b00: 7b 70 75 74 73 20 61 64 6d 69 6e 64 6f 6e 65 7d {puts admindone}
0b10: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66 . #method def
0b20: 20 7b 72 65 76 20 64 61 74 65 20 61 75 74 68 6f {rev date autho
0b30: 72 20 73 74 61 74 65 20 6e 65 78 74 20 62 72 61 r state next bra
0b40: 6e 63 68 65 73 7d 20 7b 70 75 74 73 20 22 64 65 nches} {puts "de
0b50: 66 20 24 72 65 76 20 24 64 61 74 65 20 24 61 75 f $rev $date $au
0b60: 74 68 6f 72 20 24 73 74 61 74 65 20 24 6e 65 78 thor $state $nex
0b70: 74 20 24 62 72 61 6e 63 68 65 73 22 7d 0a 20 20 t $branches"}.
0b80: 20 20 23 6d 65 74 68 6f 64 20 64 65 66 64 6f 6e #method defdon
0b90: 65 20 7b 7d 20 7b 70 75 74 73 20 64 65 66 2d 64 e {} {puts def-d
0ba0: 6f 6e 65 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 one}. #method
0bb0: 20 73 65 74 64 65 73 63 20 7b 64 7d 20 7b 70 75 setdesc {d} {pu
0bc0: 74 73 20 64 65 73 63 3d 24 64 7d 0a 20 20 20 20 ts desc=$d}.
0bd0: 23 6d 65 74 68 6f 64 20 65 78 74 65 6e 64 20 7b #method extend {
0be0: 72 65 76 20 63 6f 6d 6d 69 74 6d 73 67 20 64 65 rev commitmsg de
0bf0: 6c 74 61 72 61 6e 67 65 7d 20 7b 70 75 74 73 20 ltarange} {puts
0c00: 22 65 78 74 65 6e 64 20 24 63 6f 6d 6d 69 74 6d "extend $commitm
0c10: 73 67 20 24 64 65 6c 74 61 72 61 6e 67 65 22 7d sg $deltarange"}
0c20: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 6f 6e . #method don
0c30: 65 20 7b 7d 20 7b 70 75 74 73 20 64 6f 6e 65 7d e {} {puts done}
0c40: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 .. # # ## ###
0c50: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
0c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 #############.
0c70: 20 20 23 23 20 50 65 72 73 69 73 74 65 6e 63 65 ## Persistence
0c80: 20 28 70 61 73 73 20 49 49 29 0a 0a 20 20 20 20 (pass II)..
0c90: 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74 20 7b method persist {
0ca0: 7d 20 7b 0a 09 23 20 46 69 72 73 74 20 63 6f 6c } {..# First col
0cb0: 6c 65 63 74 20 74 68 65 20 72 65 61 63 68 61 62 lect the reachab
0cc0: 6c 65 20 72 65 76 69 73 69 6f 6e 73 20 61 6e 64 le revisions and
0cd0: 20 73 79 6d 62 6f 6c 73 2c 20 74 68 65 6e 0a 09 symbols, then..
0ce0: 23 20 61 73 73 69 67 6e 20 69 64 27 73 20 74 6f # assign id's to
0cf0: 20 61 6c 6c 2e 20 54 68 65 79 20 61 72 65 20 73 all. They are s
0d00: 6f 72 74 65 64 20 73 6f 20 74 68 61 74 20 77 65 orted so that we
0d10: 20 77 69 6c 6c 20 68 61 76 65 20 69 64 73 0a 09 will have ids..
0d20: 23 20 77 68 69 63 68 20 73 6f 72 74 20 69 6e 20 # which sort in
0d30: 6f 72 64 65 72 20 6f 66 20 63 72 65 61 74 69 6f order of creatio
0d40: 6e 2e 20 54 68 65 6e 20 77 65 20 63 61 6e 20 73 n. Then we can s
0d50: 61 76 65 20 74 68 65 6d 2e 20 54 68 69 73 0a 09 ave them. This..
0d60: 23 20 69 73 20 64 6f 6e 65 20 62 6f 74 74 6f 6d # is done bottom
0d70: 20 75 70 2e 20 52 65 76 69 73 69 6f 6e 73 2c 20 up. Revisions,
0d80: 74 68 65 6e 20 73 79 6d 62 6f 6c 73 2e 20 5f 5f then symbols. __
0d90: 4e 4f 54 45 5f 5f 20 54 68 69 73 0a 09 23 20 77 NOTE__ This..# w
0da0: 6f 72 6b 73 20 6f 6e 6c 79 20 62 65 63 61 75 73 orks only becaus
0db0: 65 20 73 71 6c 69 74 65 20 69 73 20 6e 6f 74 20 e sqlite is not
0dc0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e checking foreign
0dd0: 20 6b 65 79 0a 09 23 20 72 65 66 65 72 65 6e 63 key..# referenc
0de0: 65 73 20 64 75 72 69 6e 67 20 69 6e 73 65 72 74 es during insert
0df0: 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 74 6f . This allows to
0e00: 20 68 61 76 65 20 64 61 6e 67 6c 69 6e 67 0a 09 have dangling..
0e10: 23 20 72 65 66 65 72 65 6e 63 65 73 20 77 68 69 # references whi
0e20: 63 68 20 61 72 65 20 66 69 78 65 64 20 6c 61 74 ch are fixed lat
0e30: 65 72 2e 20 54 68 65 20 6c 6f 6e 67 65 73 74 20 er. The longest
0e40: 64 61 6e 67 6c 69 6e 67 0a 09 23 20 72 65 66 65 dangling..# refe
0e50: 72 65 6e 63 65 73 20 61 72 65 20 66 6f 72 20 74 rences are for t
0e60: 68 65 20 70 72 6f 6a 65 63 74 20 6c 65 76 65 6c he project level
0e70: 20 73 79 6d 62 6f 6c 73 2c 20 74 68 65 73 65 20 symbols, these
0e80: 77 65 20 64 6f 0a 09 23 20 6e 6f 74 20 73 61 76 we do..# not sav
0e90: 65 20 68 65 72 65 2c 20 62 75 74 20 61 74 20 74 e here, but at t
0ea0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 he end of the pa
0eb0: 73 73 2e 20 57 68 61 74 20 77 65 20 6e 65 65 64 ss. What we need
0ec0: 20 61 72 65 0a 09 23 20 74 68 65 20 69 64 73 2c are..# the ids,
0ed0: 20 68 65 6e 63 65 20 74 68 65 20 74 77 6f 20 70 hence the two p
0ee0: 68 61 73 65 73 2e 0a 0a 09 73 74 72 75 63 74 3a hases....struct:
0ef0: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 24 73 :list assign [$s
0f00: 65 6c 66 20 41 63 74 69 76 65 5d 20 72 65 76 69 elf Active] revi
0f10: 73 69 6f 6e 73 20 73 79 6d 62 6f 6c 73 0a 09 66 sions symbols..f
0f20: 6f 72 65 61 63 68 20 72 65 76 20 24 72 65 76 69 oreach rev $revi
0f30: 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 66 sions { $rev def
0f40: 69 64 20 7d 0a 09 66 6f 72 65 61 63 68 20 73 79 id }..foreach sy
0f50: 6d 20 24 73 79 6d 62 6f 6c 73 20 20 20 7b 20 24 m $symbols { $
0f60: 73 79 6d 20 64 65 66 69 64 20 7d 0a 0a 09 73 74 sym defid }...st
0f70: 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 ate transaction
0f80: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 72 {.. foreach r
0f90: 65 76 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 20 ev $revisions {
0fa0: 24 72 65 76 20 70 65 72 73 69 73 74 20 7d 0a 09 $rev persist }..
0fb0: 20 20 20 20 66 6f 72 65 61 63 68 20 73 79 6d 20 foreach sym
0fc0: 24 73 79 6d 62 6f 6c 73 20 20 20 7b 20 24 73 79 $symbols { $sy
0fd0: 6d 20 70 65 72 73 69 73 74 20 7d 0a 09 20 20 20 m persist }..
0fe0: 20 24 6d 79 62 6c 6f 62 20 70 65 72 73 69 73 74 $myblob persist
0ff0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
1000: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 72 }.. method dr
1010: 6f 70 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 op {} {..foreach
1020: 20 7b 5f 20 72 65 76 7d 20 20 20 20 5b 61 72 72 {_ rev} [arr
1030: 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20 20 20 ay get myrev]
1040: 20 20 20 7b 20 24 72 65 76 20 64 65 73 74 72 6f { $rev destro
1050: 79 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 y }..foreach {_
1060: 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 branch} [array g
1070: 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b et mybranches] {
1080: 20 24 62 72 61 6e 63 68 20 64 65 73 74 72 6f 79 $branch destroy
1090: 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 }..foreach {_ t
10a0: 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 aglist} [array g
10b0: 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 et mytags] {..
10c0: 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 foreach tag $t
10d0: 61 67 6c 69 73 74 20 7b 20 24 74 61 67 20 64 65 aglist { $tag de
10e0: 73 74 72 6f 79 20 7d 0a 09 7d 0a 09 72 65 74 75 stroy }..}..retu
10f0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 rn. }.. #
1100: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
1110: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
1120: 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6d 70 #####. ## Imp
1130: 6c 65 6d 65 6e 74 20 74 68 65 20 73 69 6e 6b 0a lement the sink.
1140: 0a 20 20 20 20 6d 65 74 68 6f 64 20 62 65 67 69 . method begi
1150: 6e 20 7b 7d 20 7b 23 69 67 6e 6f 72 65 7d 0a 0a n {} {#ignore}..
1160: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 68 65 method sethe
1170: 61 64 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 73 65 ad {revnr} {..se
1180: 74 20 6d 79 68 65 61 64 72 65 76 6e 72 20 24 72 t myheadrevnr $r
1190: 65 76 6e 72 0a 09 72 65 74 75 72 6e 0a 20 20 20 evnr..return.
11a0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 }.. method s
11b0: 65 74 70 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 etprincipalbranc
11c0: 68 20 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 h {branchnr} {..
11d0: 73 65 74 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 set myprincipal
11e0: 24 62 72 61 6e 63 68 6e 72 0a 09 72 65 74 75 72 $branchnr..retur
11f0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
1200: 68 6f 64 20 64 65 66 74 61 67 20 7b 6e 61 6d 65 hod deftag {name
1210: 20 72 65 76 6e 72 7d 20 7b 0a 09 23 20 46 55 54 revnr} {..# FUT
1220: 55 52 45 3a 20 50 65 72 66 6f 72 6d 20 73 79 6d URE: Perform sym
1230: 62 6f 6c 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 bol transformati
1240: 6f 6e 20 68 65 72 65 2e 0a 0a 09 69 66 20 7b 5b on here....if {[
1250: 73 74 72 75 63 74 3a 3a 73 65 74 20 63 6f 6e 74 struct::set cont
1260: 61 69 6e 73 20 24 6d 79 73 79 6d 62 6f 6c 73 20 ains $mysymbols
1270: 24 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 74 $name]} {.. t
1280: 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 4d 75 rouble fatal "Mu
1290: 6c 74 69 70 6c 65 20 64 65 66 69 6e 69 74 69 6f ltiple definitio
12a0: 6e 73 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c ns of the symbol
12b0: 20 27 24 6e 61 6d 65 27 20 69 6e 20 27 24 6d 79 '$name' in '$my
12c0: 70 61 74 68 27 22 0a 09 20 20 20 20 72 65 74 75 path'".. retu
12d0: 72 6e 0a 09 7d 0a 0a 09 73 74 72 75 63 74 3a 3a rn..}...struct::
12e0: 73 65 74 20 61 64 64 20 6d 79 73 79 6d 62 6f 6c set add mysymbol
12f0: 73 20 24 6e 61 6d 65 0a 0a 09 69 66 20 7b 5b 72 s $name...if {[r
1300: 65 76 20 69 73 62 72 61 6e 63 68 72 65 76 6e 72 ev isbranchrevnr
1310: 20 24 72 65 76 6e 72 20 2d 3e 20 62 72 61 6e 63 $revnr -> branc
1320: 68 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65 hnr]} {.. $se
1330: 6c 66 20 41 64 64 42 72 61 6e 63 68 20 24 6e 61 lf AddBranch $na
1340: 6d 65 20 24 62 72 61 6e 63 68 6e 72 0a 09 7d 20 me $branchnr..}
1350: 65 6c 73 65 20 7b 0a 09 20 20 20 20 24 73 65 6c else {.. $sel
1360: 66 20 41 64 64 54 61 67 20 24 6e 61 6d 65 20 24 f AddTag $name $
1370: 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e revnr..}..return
1380: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
1390: 6f 64 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 od setcomment {c
13a0: 7d 20 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20 } {# ignore}..
13b0: 20 20 6d 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f method admindo
13c0: 6e 65 20 7b 7d 20 7b 0a 09 23 20 57 65 20 64 6f ne {} {..# We do
13d0: 20 6e 6f 74 68 69 6e 67 20 61 74 20 74 68 65 20 nothing at the
13e0: 62 6f 75 6e 64 61 72 79 20 6f 66 20 61 64 6d 69 boundary of admi
13f0: 6e 20 61 6e 64 20 72 65 76 69 73 69 6f 6e 20 64 n and revision d
1400: 61 74 61 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d ata. }.. m
1410: 65 74 68 6f 64 20 64 65 66 20 7b 72 65 76 6e 72 ethod def {revnr
1420: 20 64 61 74 65 20 61 75 74 68 6f 72 20 73 74 61 date author sta
1430: 74 65 20 6e 65 78 74 20 62 72 61 6e 63 68 65 73 te next branches
1440: 7d 20 7b 0a 09 24 73 65 6c 66 20 52 65 63 6f 72 } {..$self Recor
1450: 64 42 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 24 dBranchCommits $
1460: 62 72 61 6e 63 68 65 73 0a 0a 09 69 66 20 7b 5b branches...if {[
1470: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 info exists myre
1480: 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 20 v($revnr)]} {..
1490: 20 20 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c trouble fatal
14a0: 20 22 46 69 6c 65 20 24 6d 79 70 61 74 68 20 63 "File $mypath c
14b0: 6f 6e 74 61 69 6e 73 20 64 75 70 6c 69 63 61 74 ontains duplicat
14c0: 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 66 6f e definitions fo
14d0: 72 20 72 65 76 69 73 69 6f 6e 20 24 72 65 76 6e r revision $revn
14e0: 72 2e 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a r.".. return.
14f0: 09 7d 0a 0a 09 73 65 74 20 6d 79 61 69 64 28 24 .}...set myaid($
1500: 72 65 76 6e 72 29 20 5b 24 6d 79 70 72 6f 6a 65 revnr) [$myproje
1510: 63 74 20 64 65 66 61 75 74 68 6f 72 20 24 61 75 ct defauthor $au
1520: 74 68 6f 72 5d 0a 09 73 65 74 20 6d 79 72 65 76 thor]..set myrev
1530: 28 24 72 65 76 6e 72 29 20 5b 72 65 76 20 25 41 ($revnr) [rev %A
1540: 55 54 4f 25 20 24 72 65 76 6e 72 20 24 64 61 74 UTO% $revnr $dat
1550: 65 20 24 73 74 61 74 65 20 24 73 65 6c 66 5d 0a e $state $self].
1560: 0a 09 24 6d 79 62 6c 6f 62 20 61 64 64 20 24 72 ..$myblob add $r
1570: 65 76 6e 72 20 24 6d 79 72 65 76 28 24 72 65 76 evnr $myrev($rev
1580: 6e 72 29 0a 0a 09 69 66 20 7b 24 6e 65 78 74 20 nr)...if {$next
1590: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 ne ""} {.. #
15a0: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 20 parent revision
15b0: 4e 45 58 54 20 69 73 20 61 20 64 65 6c 74 61 20 NEXT is a delta
15c0: 6f 66 20 63 75 72 72 65 6e 74 2e 0a 09 20 20 20 of current...
15d0: 20 24 6d 79 62 6c 6f 62 20 64 65 6c 74 61 20 24 $myblob delta $
15e0: 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d 0a 09 next $revnr..}..
15f0: 66 6f 72 65 61 63 68 20 62 20 24 62 72 61 6e 63 foreach b $branc
1600: 68 65 73 20 7b 0a 09 20 20 20 20 23 20 62 72 61 hes {.. # bra
1610: 6e 63 68 20 63 68 69 6c 64 20 72 65 76 69 73 69 nch child revisi
1620: 6f 6e 20 42 20 69 73 20 61 20 64 65 6c 74 61 20 on B is a delta
1630: 6f 66 20 63 75 72 72 65 6e 74 2e 0a 09 20 20 20 of current...
1640: 20 24 6d 79 62 6c 6f 62 20 64 65 6c 74 61 20 24 $myblob delta $
1650: 62 20 24 72 65 76 6e 72 0a 09 7d 0a 0a 09 24 73 b $revnr..}...$s
1660: 65 6c 66 20 52 65 63 6f 72 64 42 61 73 69 63 44 elf RecordBasicD
1670: 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65 76 ependencies $rev
1680: 6e 72 20 24 6e 65 78 74 0a 09 72 65 74 75 72 6e nr $next..return
1690: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
16a0: 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d 20 7b 0a od defdone {} {.
16b0: 09 23 20 54 68 69 73 20 69 73 20 61 6c 6c 20 64 .# This is all d
16c0: 6f 6e 65 20 61 66 74 65 72 20 74 68 65 20 72 65 one after the re
16d0: 76 69 73 69 6f 6e 20 74 72 65 65 20 68 61 73 20 vision tree has
16e0: 62 65 65 6e 20 65 78 74 72 61 63 74 65 64 0a 09 been extracted..
16f0: 23 20 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 2c # from the file,
1700: 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6d 6d before the comm
1710: 69 74 20 6d 65 73 61 67 65 73 20 61 6e 64 20 64 it mesages and d
1720: 65 6c 74 61 20 74 65 78 74 73 20 61 72 65 0a 09 elta texts are..
1730: 23 20 70 72 6f 63 65 73 73 65 64 2e 0a 0a 09 24 # processed....$
1740: 73 65 6c 66 20 50 72 6f 63 65 73 73 50 72 69 6d self ProcessPrim
1750: 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65 73 0a aryDependencies.
1760: 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 42 72 .$self ProcessBr
1770: 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 65 73 anchDependencies
1780: 0a 09 24 73 65 6c 66 20 53 6f 72 74 42 72 61 6e ..$self SortBran
1790: 63 68 65 73 0a 09 24 73 65 6c 66 20 50 72 6f 63 ches..$self Proc
17a0: 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69 essTagDependenci
17b0: 65 73 0a 09 24 73 65 6c 66 20 44 65 74 65 72 6d es..$self Determ
17c0: 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 73 69 ineTheRootRevisi
17d0: 6f 6e 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d on..return. }
17e0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 .. method set
17f0: 64 65 73 63 20 7b 64 7d 20 7b 23 20 69 67 6e 6f desc {d} {# igno
1800: 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 re}.. method
1810: 65 78 74 65 6e 64 20 7b 72 65 76 6e 72 20 63 6f extend {revnr co
1820: 6d 6d 69 74 6d 73 67 20 74 65 78 74 72 61 6e 67 mmitmsg textrang
1830: 65 7d 20 7b 0a 09 73 65 74 20 63 6d 69 64 20 5b e} {..set cmid [
1840: 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 66 63 6d $myproject defcm
1850: 65 73 73 61 67 65 20 5b 73 74 72 69 6e 67 20 74 essage [string t
1860: 72 69 6d 20 24 63 6f 6d 6d 69 74 6d 73 67 5d 5d rim $commitmsg]]
1870: 0a 0a 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 ...set rev $myre
1880: 76 28 24 72 65 76 6e 72 29 0a 0a 09 69 66 20 7b v($revnr)...if {
1890: 5b 24 72 65 76 20 68 61 73 6d 65 74 61 5d 7d 20 [$rev hasmeta]}
18a0: 7b 0a 09 20 20 20 20 23 20 41 70 70 61 72 65 6e {.. # Apparen
18b0: 74 6c 79 20 72 65 70 6f 73 69 74 6f 72 69 65 73 tly repositories
18c0: 20 65 78 69 73 74 20 69 6e 20 77 68 69 63 68 20 exist in which
18d0: 74 68 65 20 64 65 6c 74 61 20 64 61 74 61 0a 09 the delta data..
18e0: 20 20 20 20 23 20 66 6f 72 20 72 65 76 69 73 69 # for revisi
18f0: 6f 6e 20 31 2e 31 20 69 73 20 70 72 6f 76 69 64 on 1.1 is provid
1900: 65 64 20 73 65 76 65 72 61 6c 20 74 69 6d 65 73 ed several times
1910: 2c 20 61 74 20 6c 65 61 73 74 0a 09 20 20 20 20 , at least..
1920: 23 20 74 77 69 63 65 2e 20 54 68 65 20 61 63 74 # twice. The act
1930: 75 61 6c 20 63 61 75 73 65 20 6f 66 20 74 68 69 ual cause of thi
1940: 73 20 64 75 70 6c 69 63 61 74 69 6f 6e 20 69 73 s duplication is
1950: 20 6e 6f 74 0a 09 20 20 20 20 23 20 6b 6e 6f 77 not.. # know
1960: 6e 2e 20 53 70 65 63 75 6c 61 74 69 6f 6e 20 63 n. Speculation c
1970: 65 6e 74 65 72 73 20 6f 6e 20 52 43 53 2f 43 56 enters on RCS/CV
1980: 53 20 62 75 67 73 2c 20 6f 72 20 66 72 6f 6d 0a S bugs, or from.
1990: 09 20 20 20 20 23 20 6d 61 6e 75 61 6c 20 65 64 . # manual ed
19a0: 69 74 73 20 6f 66 20 74 68 65 20 72 65 70 6f 73 its of the repos
19b0: 69 74 6f 72 79 20 77 68 69 63 68 20 62 6f 72 6b itory which bork
19c0: 65 64 20 74 68 65 0a 09 20 20 20 20 23 20 69 6e ed the.. # in
19d0: 74 65 72 6e 61 6c 73 2e 20 57 68 61 74 65 76 65 ternals. Whateve
19e0: 72 20 74 68 65 20 63 61 75 73 65 2c 20 74 65 73 r the cause, tes
19f0: 74 69 6e 67 20 73 68 6f 77 65 64 20 74 68 61 74 ting showed that
1a00: 20 62 6f 74 68 0a 09 20 20 20 20 23 20 63 76 73 both.. # cvs
1a10: 20 61 6e 64 20 72 63 73 20 75 73 65 20 74 68 65 and rcs use the
1a20: 20 66 69 72 73 74 20 64 65 66 69 6e 69 74 69 6f first definitio
1a30: 6e 20 77 68 65 6e 20 70 65 72 66 6f 72 6d 69 6e n when performin
1a40: 67 20 61 0a 09 20 20 20 20 23 20 63 68 65 63 6b g a.. # check
1a50: 6f 75 74 2c 20 61 6e 64 20 77 65 20 66 6f 6c 6c out, and we foll
1a60: 6f 77 20 74 68 65 69 72 20 6c 65 61 64 2e 20 53 ow their lead. S
1a70: 69 64 65 20 6e 6f 74 65 73 3a 20 27 63 76 73 0a ide notes: 'cvs.
1a80: 09 20 20 20 20 23 20 6c 6f 67 27 20 66 61 69 6c . # log' fail
1a90: 73 20 6f 6e 20 73 75 63 68 20 61 20 66 69 6c 65 s on such a file
1aa0: 2c 20 61 6e 64 20 27 63 76 73 20 72 6c 6f 67 27 , and 'cvs rlog'
1ab0: 20 70 72 69 6e 74 73 20 74 68 65 20 6c 6f 67 0a prints the log.
1ac0: 09 20 20 20 20 23 20 6d 65 73 73 61 67 65 20 66 . # message f
1ad0: 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20 64 65 rom the first de
1ae0: 6c 74 61 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 lta, ignoring th
1af0: 65 20 73 65 63 6f 6e 64 2e 0a 0a 09 20 20 20 20 e second....
1b00: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 log write 1 file
1b10: 20 22 49 6e 20 66 69 6c 65 20 24 6d 79 70 61 74 "In file $mypat
1b20: 68 20 3a 20 44 75 70 6c 69 63 61 74 65 20 64 65 h : Duplicate de
1b30: 6c 74 61 20 64 61 74 61 20 66 6f 72 20 72 65 76 lta data for rev
1b40: 69 73 69 6f 6e 20 24 72 65 76 6e 72 22 0a 09 20 ision $revnr"..
1b50: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 log write 1 f
1b60: 69 6c 65 20 22 49 67 6e 6f 72 69 6e 67 20 74 68 ile "Ignoring th
1b70: 65 20 64 75 70 6c 69 63 61 74 65 22 0a 09 20 20 e duplicate"..
1b80: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 23 20 return..}...#
1b90: 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6c 69 Determine the li
1ba0: 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e ne of developmen
1bb0: 74 20 66 6f 72 20 74 68 65 20 72 65 76 69 73 69 t for the revisi
1bc0: 6f 6e 20 28 70 72 6f 6a 65 63 74 0a 09 23 20 6c on (project..# l
1bd0: 65 76 65 6c 29 2e 20 54 68 69 73 20 67 69 76 65 evel). This give
1be0: 73 20 75 73 20 74 68 65 20 62 72 61 6e 63 68 69 s us the branchi
1bf0: 64 20 74 6f 6f 2c 20 72 65 71 75 69 72 65 64 20 d too, required
1c00: 66 6f 72 20 74 68 65 0a 09 23 20 6d 65 74 61 20 for the..# meta
1c10: 64 61 74 61 20 67 72 6f 75 70 20 74 68 65 20 72 data group the r
1c20: 65 76 69 73 69 6f 6e 20 69 73 20 69 6e 2e 20 28 evision is in. (
1c30: 4e 6f 74 65 3a 20 42 79 20 70 75 74 74 69 6e 67 Note: By putting
1c40: 20 62 6f 74 68 0a 09 23 20 62 72 61 6e 63 68 2f both..# branch/
1c50: 6c 6f 64 20 61 6e 64 20 70 72 6f 6a 65 63 74 20 lod and project
1c60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 74 6f information into
1c70: 20 74 68 65 20 67 72 6f 75 70 20 77 65 20 65 6e the group we en
1c80: 73 75 72 65 0a 09 23 20 74 68 61 74 20 61 6e 79 sure..# that any
1c90: 20 63 72 6f 73 73 2d 70 72 6f 6a 65 63 74 20 61 cross-project a
1ca0: 6e 64 20 63 72 6f 73 73 2d 62 72 61 6e 63 68 20 nd cross-branch
1cb0: 63 6f 6d 6d 69 74 73 20 61 72 65 0a 09 23 20 73 commits are..# s
1cc0: 65 70 61 72 61 74 65 64 20 69 6e 74 6f 20 6d 75 eparated into mu
1cd0: 6c 74 69 70 6c 65 20 63 6f 6d 6d 69 74 73 2c 20 ltiple commits,
1ce0: 6f 6e 65 20 69 6e 20 65 61 63 68 20 6f 66 20 74 one in each of t
1cf0: 68 65 20 70 72 6f 6a 65 63 74 73 0a 09 23 20 61 he projects..# a
1d00: 6e 64 2f 6f 72 20 62 72 61 6e 63 68 65 73 29 2e nd/or branches).
1d10: 0a 0a 09 73 65 74 20 6c 6f 64 20 5b 24 73 65 6c ...set lod [$sel
1d20: 66 20 47 65 74 4c 4f 44 20 24 72 65 76 6e 72 5d f GetLOD $revnr]
1d30: 0a 0a 09 24 72 65 76 20 73 65 74 6d 65 74 61 20 ...$rev setmeta
1d40: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 66 6d [$myproject defm
1d50: 65 74 61 20 5b 24 6c 6f 64 20 69 64 5d 20 24 6d eta [$lod id] $m
1d60: 79 61 69 64 28 24 72 65 76 6e 72 29 20 24 63 6d yaid($revnr) $cm
1d70: 69 64 5d 0a 09 24 72 65 76 20 73 65 74 74 65 78 id]..$rev settex
1d80: 74 20 24 74 65 78 74 72 61 6e 67 65 0a 09 24 72 t $textrange..$r
1d90: 65 76 20 73 65 74 6c 6f 64 20 20 24 6c 6f 64 0a ev setlod $lod.
1da0: 0a 09 24 6d 79 62 6c 6f 62 20 65 78 74 65 6e 64 ..$myblob extend
1db0: 20 24 72 65 76 6e 72 20 24 74 65 78 74 72 61 6e $revnr $textran
1dc0: 67 65 0a 0a 09 23 20 49 66 20 74 68 69 73 20 69 ge...# If this i
1dd0: 73 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 2c 20 s revision 1.1,
1de0: 77 65 20 68 61 76 65 20 74 6f 20 64 65 74 65 72 we have to deter
1df0: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 mine whether the
1e00: 0a 09 23 20 66 69 6c 65 20 73 65 65 6d 73 20 74 ..# file seems t
1e10: 6f 20 68 61 76 65 20 62 65 65 6e 20 63 72 65 61 o have been crea
1e20: 74 65 64 20 74 68 72 6f 75 67 68 20 27 63 76 73 ted through 'cvs
1e30: 20 61 64 64 27 20 69 6e 73 74 65 61 64 20 6f 66 add' instead of
1e40: 0a 09 23 20 27 63 76 73 20 69 6d 70 6f 72 74 27 ..# 'cvs import'
1e50: 2e 20 54 68 69 73 20 63 61 6e 20 62 65 20 64 6f . This can be do
1e60: 6e 65 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 61 74 ne by looking at
1e70: 20 74 68 65 20 75 6e 2d 0a 09 23 20 61 64 75 6c the un-..# adul
1e80: 74 65 72 61 74 65 64 20 63 6f 6d 6d 69 74 20 6d terated commit m
1e90: 65 73 73 61 67 65 2c 20 61 73 20 43 56 53 20 75 essage, as CVS u
1ea0: 73 65 73 20 61 20 68 61 72 64 77 69 72 65 64 20 ses a hardwired
1eb0: 6d 61 67 69 63 0a 09 23 20 6d 65 73 73 61 67 65 magic..# message
1ec0: 20 66 6f 72 20 74 68 65 20 6c 61 74 74 65 72 2c for the latter,
1ed0: 20 69 2e 65 2e 20 22 49 6e 69 74 69 61 6c 20 72 i.e. "Initial r
1ee0: 65 76 69 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a 09 evision\n", no..
1ef0: 23 20 70 65 72 69 6f 64 2e 20 20 28 54 68 69 73 # period. (This
1f00: 20 66 61 63 74 20 61 6c 73 6f 20 68 65 6c 70 73 fact also helps
1f10: 20 75 73 20 77 68 65 6e 20 74 68 65 20 74 69 6d us when the tim
1f20: 65 20 63 6f 6d 65 73 20 74 6f 0a 09 23 20 64 65 e comes to..# de
1f30: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 termine whether
1f40: 74 68 69 73 20 66 69 6c 65 20 6d 69 67 68 74 20 this file might
1f50: 68 61 76 65 20 68 61 64 20 61 20 64 65 66 61 75 have had a defau
1f60: 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 69 6e 20 lt branch..# in
1f70: 74 68 65 20 70 61 73 74 2e 29 0a 0a 09 69 66 20 the past.)...if
1f80: 7b 24 72 65 76 6e 72 20 65 71 20 22 31 2e 31 22 {$revnr eq "1.1"
1f90: 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 } {.. set myi
1fa0: 6d 70 6f 72 74 65 64 20 5b 65 78 70 72 20 7b 24 mported [expr {$
1fb0: 63 6f 6d 6d 69 74 6d 73 67 20 65 71 20 22 49 6e commitmsg eq "In
1fc0: 69 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e itial revision\n
1fd0: 22 7d 5d 0a 09 7d 0a 0a 09 23 20 48 65 72 65 20 "}]..}...# Here
1fe0: 77 65 20 61 6c 73 6f 20 6b 65 65 70 20 74 72 61 we also keep tra
1ff0: 63 6b 20 6f 66 20 74 68 65 20 6f 72 64 65 72 20 ck of the order
2000: 69 6e 20 77 68 69 63 68 20 74 68 65 20 72 65 76 in which the rev
2010: 69 73 69 6f 6e 73 0a 09 23 20 77 65 72 65 20 61 isions..# were a
2020: 64 64 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65 dded to the file
2030: 2e 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79 72 65 ....lappend myre
2040: 76 69 73 69 6f 6e 73 20 24 72 65 76 0a 09 72 65 visions $rev..re
2050: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
2060: 6d 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b method done {} {
2070: 0a 09 23 20 43 6f 6d 70 6c 65 74 65 20 74 68 65 ..# Complete the
2080: 20 72 65 76 69 73 69 6f 6e 73 2c 20 62 72 61 6e revisions, bran
2090: 63 68 65 73 2c 20 61 6e 64 20 74 61 67 73 2e 20 ches, and tags.
20a0: 54 68 69 73 20 69 6e 63 6c 75 64 65 73 0a 09 23 This includes..#
20b0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6e looking for a n
20c0: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 on-trunk default
20d0: 20 62 72 61 6e 63 68 2c 20 6d 61 72 6b 69 6e 67 branch, marking
20e0: 20 69 74 73 20 6d 65 6d 62 65 72 73 0a 09 23 20 its members..#
20f0: 61 6e 64 20 6c 69 6e 6b 69 6e 67 20 74 68 65 6d and linking them
2100: 20 69 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2c into the trunk,
2110: 20 70 6f 73 73 69 62 6c 79 20 65 78 63 6c 75 64 possibly exclud
2120: 69 6e 67 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b ing..# non-trunk
2130: 20 64 61 74 61 2c 20 61 6e 64 20 63 6f 6c 6c 65 data, and colle
2140: 63 74 69 6e 67 20 61 67 67 72 65 67 61 74 65 20 cting aggregate
2150: 73 79 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 symbol statistic
2160: 73 2e 0a 0a 09 24 73 65 6c 66 20 44 65 74 65 72 s....$self Deter
2170: 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 mineRevisionOper
2180: 61 74 69 6f 6e 73 0a 09 24 73 65 6c 66 20 44 65 ations..$self De
2190: 74 65 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 termineLinesOfDe
21a0: 76 65 6c 6f 70 6d 65 6e 74 0a 09 24 73 65 6c 66 velopment..$self
21b0: 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 HandleNonTrunkD
21c0: 65 66 61 75 6c 74 42 72 61 6e 63 68 0a 09 24 73 efaultBranch..$s
21d0: 65 6c 66 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 elf RemoveIrrele
21e0: 76 61 6e 74 44 65 6c 65 74 69 6f 6e 73 0a 09 24 vantDeletions..$
21f0: 73 65 6c 66 20 52 65 6d 6f 76 65 49 6e 69 74 69 self RemoveIniti
2200: 61 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e alBranchDeletion
2210: 73 0a 0a 09 69 66 20 7b 5b 24 6d 79 70 72 6f 6a s...if {[$myproj
2220: 65 63 74 20 74 72 75 6e 6b 6f 6e 6c 79 5d 7d 20 ect trunkonly]}
2230: 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 {.. $self Exc
2240: 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f ludeNonTrunkInfo
2250: 72 6d 61 74 69 6f 6e 0a 09 7d 0a 0a 09 24 73 65 rmation..}...$se
2260: 6c 66 20 41 67 67 72 65 67 61 74 65 53 79 6d 62 lf AggregateSymb
2270: 6f 6c 44 61 74 61 0a 09 72 65 74 75 72 6e 0a 20 olData..return.
2280: 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 }.. # # ##
2290: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
22a0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
22b0: 23 0a 20 20 20 20 23 23 20 50 61 73 73 20 58 49 #. ## Pass XI
22c0: 49 20 28 49 6d 70 6f 72 74 29 2e 0a 0a 20 20 20 I (Import)...
22d0: 20 6d 65 74 68 6f 64 20 70 75 73 68 74 6f 20 7b method pushto {
22e0: 72 65 70 6f 73 69 74 6f 72 79 7d 20 7b 0a 09 73 repository} {..s
22f0: 65 74 20 77 73 20 5b 24 72 65 70 6f 73 69 74 6f et ws [$reposito
2300: 72 79 20 77 6f 72 6b 73 70 61 63 65 5d 0a 09 73 ry workspace]..s
2310: 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 truct::list assi
2320: 67 6e 20 5b 24 73 65 6c 66 20 45 78 70 61 6e 64 gn [$self Expand
2330: 20 24 77 73 5d 20 66 69 6c 65 6d 61 70 20 72 65 $ws] filemap re
2340: 76 6d 61 70 0a 09 23 20 66 69 6c 65 6d 61 70 20 vmap..# filemap
2350: 3d 20 64 69 63 74 20 28 70 61 74 68 20 2d 3e 20 = dict (path ->
2360: 75 75 69 64 29 0a 09 23 20 72 65 76 6d 61 70 20 uuid)..# revmap
2370: 20 3d 20 64 69 63 74 20 28 70 61 74 68 20 2d 3e = dict (path ->
2380: 20 72 69 64 29 0a 0a 09 61 72 72 61 79 20 73 65 rid)...array se
2390: 74 20 69 64 6d 61 70 20 5b 24 72 65 70 6f 73 69 t idmap [$reposi
23a0: 74 6f 72 79 20 69 6d 70 6f 72 74 66 69 6c 65 73 tory importfiles
23b0: 20 24 66 69 6c 65 6d 61 70 5d 0a 0a 09 23 20 57 $filemap]...# W
23c0: 69 70 65 20 77 6f 72 6b 73 70 61 63 65 20 63 6c ipe workspace cl
23d0: 65 61 6e 20 6f 66 20 74 68 65 20 69 6d 70 6f 72 ean of the impor
23e0: 74 65 64 20 66 69 6c 65 73 2e 0a 09 66 6f 72 65 ted files...fore
23f0: 61 63 68 20 78 20 5b 67 6c 6f 62 20 2d 64 69 72 ach x [glob -dir
2400: 65 63 74 6f 72 79 20 24 77 73 20 72 2a 5d 20 7b ectory $ws r*] {
2410: 20 3a 3a 66 69 6c 65 20 64 65 6c 65 74 65 20 24 ::file delete $
2420: 78 20 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 70 x }...foreach {p
2430: 61 74 68 20 72 69 64 7d 20 24 72 65 76 6d 61 70 ath rid} $revmap
2440: 20 7b 0a 09 20 20 20 20 73 65 74 20 75 75 69 64 {.. set uuid
2450: 20 24 69 64 6d 61 70 28 24 70 61 74 68 29 0a 09 $idmap($path)..
2460: 20 20 20 20 73 74 61 74 65 20 72 75 6e 20 7b 0a state run {.
2470: 09 09 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 65 ..INSERT INTO re
2480: 76 75 75 69 64 20 28 72 69 64 2c 20 20 75 75 69 vuuid (rid, uui
2490: 64 29 0a 09 09 56 41 4c 55 45 53 20 20 20 20 20 d)...VALUES
24a0: 20 20 20 20 20 20 20 20 20 28 24 72 69 64 2c 20 ($rid,
24b0: 24 75 75 69 64 29 0a 09 20 20 20 20 7d 0a 09 7d $uuid).. }..}
24c0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
24d0: 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e method Expan
24e0: 64 20 7b 64 69 72 7d 20 7b 0a 09 73 65 74 20 65 d {dir} {..set e
24f0: 78 20 5b 73 74 72 75 63 74 3a 3a 67 72 61 70 68 x [struct::graph
2500: 20 65 78 5d 20 3b 20 23 20 45 78 70 61 6e 73 69 ex] ; # Expansi
2510: 6f 6e 20 67 72 61 70 68 2e 0a 09 73 65 74 20 7a on graph...set z
2520: 70 20 5b 73 74 72 75 63 74 3a 3a 67 72 61 70 68 p [struct::graph
2530: 20 7a 70 5d 20 3b 20 23 20 5a 69 70 2f 49 6d 70 zp] ; # Zip/Imp
2540: 6f 72 74 20 67 72 61 70 68 2e 0a 0a 09 63 6c 6f ort graph....clo
2550: 73 65 20 5b 6f 70 65 6e 20 24 64 69 72 2f 72 5f se [open $dir/r_
2560: 5f 65 6d 70 74 79 5f 5f 20 77 5d 3b 23 20 42 61 _empty__ w];# Ba
2570: 73 65 20 66 6f 72 20 64 65 74 61 63 68 65 64 20 se for detached
2580: 72 6f 6f 74 73 20 6f 6e 20 62 72 61 6e 63 68 65 roots on branche
2590: 73 2e 0a 0a 09 23 20 50 68 61 73 65 20 49 3a 20 s....# Phase I:
25a0: 50 75 6c 6c 20 74 68 65 20 72 65 76 69 73 69 6f Pull the revisio
25b0: 6e 73 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 61 ns from memory a
25c0: 6e 64 20 66 69 6c 6c 20 74 68 65 20 67 72 61 70 nd fill the grap
25d0: 68 73 0a 09 23 20 20 20 20 20 20 20 20 20 20 77 hs..# w
25e0: 69 74 68 20 74 68 65 6d 2e 2e 2e 0a 0a 09 73 65 ith them......se
25f0: 74 20 65 61 72 63 73 20 20 20 7b 7d 20 3b 20 23 t earcs {} ; #
2600: 20 41 72 63 73 20 66 6f 72 20 65 78 70 61 6e 73 Arcs for expans
2610: 69 6f 6e 20 67 72 61 70 68 0a 09 73 65 74 20 7a ion graph..set z
2620: 61 72 63 73 20 20 20 7b 7d 20 3b 20 23 20 41 72 arcs {} ; # Ar
2630: 63 73 20 66 6f 72 20 7a 69 70 20 67 72 61 70 68 cs for zip graph
2640: 0a 09 73 65 74 20 72 65 76 6d 61 70 20 20 7b 7d ..set revmap {}
2650: 20 3b 20 23 20 70 61 74 68 20 2d 3e 20 72 69 64 ; # path -> rid
2660: 20 6d 61 70 20 74 6f 20 6c 61 74 65 72 20 6d 65 map to later me
2670: 72 67 65 20 75 75 69 64 20 69 6e 66 6f 72 6d 61 rge uuid informa
2680: 74 69 6f 6e 0a 0a 09 66 6f 72 65 61 63 68 20 7b tion...foreach {
2690: 72 69 64 20 72 65 76 6e 72 20 70 61 72 65 6e 74 rid revnr parent
26a0: 20 63 68 69 6c 64 20 63 6f 66 66 20 63 6c 65 6e child coff clen
26b0: 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 } [state run {..
26c0: 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 SELECT R.rid
26d0: 2c 20 52 2e 72 65 76 2c 20 52 2e 70 61 72 65 6e , R.rev, R.paren
26e0: 74 2c 20 52 2e 63 68 69 6c 64 2c 20 52 2e 63 6f t, R.child, R.co
26f0: 66 66 2c 20 52 2e 63 6c 65 6e 0a 09 20 20 20 20 ff, R.clen..
2700: 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 FROM revision
2710: 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e R.. WHERE R.
2720: 66 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 fid = $myid..}]
2730: 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 {.. lappend r
2740: 65 76 6d 61 70 20 72 24 72 65 76 6e 72 20 24 72 evmap r$revnr $r
2750: 69 64 0a 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64 id... $zp nod
2760: 65 20 69 6e 73 65 72 74 20 24 72 69 64 0a 09 20 e insert $rid..
2770: 20 20 20 24 7a 70 20 6e 6f 64 65 20 73 65 74 20 $zp node set
2780: 20 20 20 24 72 69 64 20 72 65 76 6e 72 20 24 72 $rid revnr $r
2790: 65 76 6e 72 0a 09 20 20 20 20 24 7a 70 20 6e 6f evnr.. $zp no
27a0: 64 65 20 73 65 74 20 20 20 20 24 72 69 64 20 6c de set $rid l
27b0: 61 62 65 6c 20 3c 24 72 65 76 6e 72 3e 0a 0a 09 abel <$revnr>...
27c0: 20 20 20 20 69 66 20 7b 24 63 68 69 6c 64 20 6e if {$child n
27d0: 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e e ""} {...lappen
27e0: 64 20 7a 61 72 63 73 20 24 63 68 69 6c 64 20 24 d zarcs $child $
27f0: 72 69 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 rid.. }...
2800: 20 24 65 78 20 6e 6f 64 65 20 69 6e 73 65 72 74 $ex node insert
2810: 20 24 72 69 64 0a 09 20 20 20 20 24 65 78 20 6e $rid.. $ex n
2820: 6f 64 65 20 73 65 74 20 20 20 20 24 72 69 64 20 ode set $rid
2830: 74 65 78 74 20 20 5b 6c 69 73 74 20 24 63 6f 66 text [list $cof
2840: 66 20 24 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65 f $clen].. $e
2850: 78 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 72 x node set $r
2860: 69 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a id revnr $revnr.
2870: 09 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 65 . $ex node se
2880: 74 20 20 20 20 24 72 69 64 20 6c 61 62 65 6c 20 t $rid label
2890: 3c 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69 <$revnr>... i
28a0: 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 f {[rev istrunkr
28b0: 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a evnr $revnr]} {.
28c0: 09 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b ..# On the trunk
28d0: 2c 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 , this revision
28e0: 69 73 20 61 20 64 65 6c 74 61 20 62 61 73 65 64 is a delta based
28f0: 20 6f 6e 20 74 68 65 0a 09 09 23 20 63 68 69 6c on the...# chil
2900: 64 2e 20 54 68 61 74 20 6d 61 6b 65 73 20 74 68 d. That makes th
2910: 65 20 63 68 69 6c 64 20 6f 75 72 20 70 72 65 64 e child our pred
2920: 65 63 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b ecessor.....if {
2930: 24 63 68 69 6c 64 20 65 71 20 22 22 7d 20 63 6f $child eq ""} co
2940: 6e 74 69 6e 75 65 0a 09 09 6c 61 70 70 65 6e 64 ntinue...lappend
2950: 20 65 61 72 63 73 20 24 63 68 69 6c 64 20 24 72 earcs $child $r
2960: 69 64 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b id.. } else {
2970: 0a 09 09 23 20 4f 6e 20 61 20 62 72 61 6e 63 68 ...# On a branch
2980: 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69 this revision i
2990: 73 20 61 20 64 65 6c 74 61 20 62 61 73 65 64 20 s a delta based
29a0: 6f 6e 20 74 68 65 0a 09 09 23 20 70 61 72 65 6e on the...# paren
29b0: 74 2e 20 54 68 61 74 20 6d 61 6b 65 73 20 74 68 t. That makes th
29c0: 65 20 70 61 72 65 6e 74 20 6f 75 72 20 70 72 65 e parent our pre
29d0: 64 65 63 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 decessor.....if
29e0: 7b 24 70 61 72 65 6e 74 20 65 71 20 22 22 7d 20 {$parent eq ""}
29f0: 7b 0a 09 09 20 20 20 20 23 20 44 65 74 61 63 68 {... # Detach
2a00: 65 64 20 62 72 61 6e 63 68 20 72 6f 6f 74 2c 20 ed branch root,
2a10: 74 68 69 73 20 69 73 20 61 20 70 61 74 63 68 20 this is a patch
2a20: 62 61 73 65 64 20 6f 6e 0a 09 09 20 20 20 20 23 based on... #
2a30: 20 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e the empty strin
2a40: 67 2e 0a 09 09 20 20 20 20 24 65 78 20 6e 6f 64 g.... $ex nod
2a50: 65 20 73 65 74 20 24 72 69 64 20 5f 5f 62 61 73 e set $rid __bas
2a60: 65 5f 5f 20 72 5f 5f 65 6d 70 74 79 5f 5f 20 0a e__ r__empty__ .
2a70: 09 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09 .. continue..
2a80: 09 7d 0a 09 09 6c 61 70 70 65 6e 64 20 65 61 72 .}...lappend ear
2a90: 63 73 20 24 70 61 72 65 6e 74 20 24 72 69 64 0a cs $parent $rid.
2aa0: 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 50 68 . }..}...# Ph
2ab0: 61 73 65 20 49 49 3a 20 49 6e 73 65 72 74 20 74 ase II: Insert t
2ac0: 68 65 20 61 63 63 75 6d 75 6c 61 74 65 64 20 64 he accumulated d
2ad0: 65 70 65 6e 64 65 6e 63 69 65 73 0a 0a 09 66 6f ependencies...fo
2ae0: 72 65 61 63 68 20 7b 66 72 6f 6d 20 74 6f 7d 20 reach {from to}
2af0: 24 65 61 72 63 73 20 7b 20 24 65 78 20 61 72 63 $earcs { $ex arc
2b00: 20 69 6e 73 65 72 74 20 24 66 72 6f 6d 20 24 74 insert $from $t
2b10: 6f 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 66 72 o }..foreach {fr
2b20: 6f 6d 20 74 6f 7d 20 24 7a 61 72 63 73 20 7b 20 om to} $zarcs {
2b30: 24 7a 70 20 61 72 63 20 69 6e 73 65 72 74 20 24 $zp arc insert $
2b40: 66 72 6f 6d 20 24 74 6f 20 7d 0a 0a 09 23 20 50 from $to }...# P
2b50: 68 61 73 65 20 49 49 49 3a 20 54 72 61 76 65 72 hase III: Traver
2b60: 73 65 20 74 68 65 20 67 72 61 70 68 73 2c 20 65 se the graphs, e
2b70: 78 70 61 6e 64 20 74 68 65 20 66 69 6c 65 2c 20 xpand the file,
2b80: 61 6e 64 0a 09 23 20 20 20 20 20 20 20 20 20 20 and..#
2b90: 20 20 67 65 6e 65 72 61 74 65 20 69 6d 70 6f 72 generate impor
2ba0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a t instructions..
2bb0: 0a 09 73 65 74 20 61 72 63 68 69 76 65 20 5b 3a ..set archive [:
2bc0: 3a 66 69 6c 65 20 6a 6f 69 6e 20 5b 24 6d 79 70 :file join [$myp
2bd0: 72 6f 6a 65 63 74 20 66 75 6c 6c 70 61 74 68 5d roject fullpath]
2be0: 20 24 6d 79 70 61 74 68 5d 0a 09 73 65 74 20 61 $mypath]..set a
2bf0: 63 20 20 20 20 20 20 5b 6f 70 65 6e 20 24 61 72 c [open $ar
2c00: 63 68 69 76 65 20 72 5d 0a 09 66 63 6f 6e 66 69 chive r]..fconfi
2c10: 67 75 72 65 20 24 61 63 20 2d 74 72 61 6e 73 6c gure $ac -transl
2c20: 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a 0a 09 23 ation binary...#
2c30: 20 46 69 72 73 74 20 74 72 61 76 65 72 73 65 20 First traverse
2c40: 74 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 the expansion gr
2c50: 61 70 68 2c 20 74 68 69 73 20 67 69 76 65 73 20 aph, this gives
2c60: 75 73 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 us the..# revisi
2c70: 6f 6e 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 ons in the order
2c80: 20 77 65 20 68 61 76 65 20 74 6f 20 65 78 70 61 we have to expa
2c90: 6e 64 20 74 68 65 6d 2c 20 77 68 69 63 68 20 77 nd them, which w
2ca0: 65 20 64 6f 2e 0a 0a 09 73 65 74 20 6d 61 78 20 e do....set max
2cb0: 5b 6c 6c 65 6e 67 74 68 20 5b 24 65 78 20 6e 6f [llength [$ex no
2cc0: 64 65 73 5d 5d 0a 09 73 65 74 20 6d 79 69 6d 70 des]]..set myimp
2cd0: 6f 72 74 20 30 0a 0a 09 67 74 63 6f 72 65 20 64 ort 0...gtcore d
2ce0: 61 74 61 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 atacmd [mymeth
2cf0: 6f 64 20 45 78 70 61 6e 64 44 61 74 61 5d 0a 09 od ExpandData]..
2d00: 67 74 63 6f 72 65 20 66 6f 72 6d 61 74 63 6d 64 gtcore formatcmd
2d10: 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e [mymethod Expan
2d20: 64 46 6f 72 6d 61 74 5d 0a 09 67 74 63 6f 72 65 dFormat]..gtcore
2d30: 20 73 6f 72 74 63 6d 64 20 20 20 5b 6d 79 6d 65 sortcmd [myme
2d40: 74 68 6f 64 20 45 78 70 61 6e 64 53 6f 72 74 5d thod ExpandSort]
2d50: 0a 09 67 74 63 6f 72 65 20 73 61 76 65 63 6d 64 ..gtcore savecmd
2d60: 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 [mymethod Exp
2d70: 61 6e 64 31 20 24 61 63 20 24 64 69 72 20 24 6d and1 $ac $dir $m
2d80: 61 78 5d 0a 0a 09 67 74 63 6f 72 65 20 74 72 61 ax]...gtcore tra
2d90: 76 65 72 73 65 20 24 65 78 20 7b 45 78 70 61 6e verse $ex {Expan
2da0: 64 69 6e 67 20 72 65 76 69 73 69 6f 6e 73 2e 2e ding revisions..
2db0: 2e 7d 0a 09 63 6c 6f 73 65 20 24 61 63 0a 0a 09 .}..close $ac...
2dc0: 23 20 4e 6f 77 20 74 72 61 76 65 72 73 65 20 74 # Now traverse t
2dd0: 68 65 20 69 6d 70 6f 72 74 20 67 72 61 70 68 2c he import graph,
2de0: 20 74 68 69 73 20 62 75 69 6c 64 73 20 74 68 65 this builds the
2df0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 09 23 20 instruction..#
2e00: 6d 61 70 20 66 6f 72 20 74 68 65 20 66 6f 73 73 map for the foss
2e10: 69 6c 20 64 65 6c 74 61 73 2e 0a 0a 09 67 74 63 il deltas....gtc
2e20: 6f 72 65 20 64 61 74 61 63 6d 64 20 20 20 5b 6d ore datacmd [m
2e30: 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61 ymethod ExpandDa
2e40: 74 61 5d 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d ta]..gtcore form
2e50: 61 74 63 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20 atcmd [mymethod
2e60: 45 78 70 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67 ExpandFormat]..g
2e70: 74 63 6f 72 65 20 73 6f 72 74 63 6d 64 20 20 20 tcore sortcmd
2e80: 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 [mymethod Expand
2e90: 53 6f 72 74 5d 0a 09 67 74 63 6f 72 65 20 73 61 Sort]..gtcore sa
2ea0: 76 65 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f vecmd [mymetho
2eb0: 64 20 45 78 70 61 6e 64 32 5d 0a 0a 09 73 65 74 d Expand2]...set
2ec0: 20 6d 79 69 6d 70 6f 72 74 20 7b 7d 0a 09 67 74 myimport {}..gt
2ed0: 63 6f 72 65 20 74 72 61 76 65 72 73 65 20 24 7a core traverse $z
2ee0: 70 20 7b 47 65 6e 65 72 61 74 69 6e 67 20 72 65 p {Generating re
2ef0: 76 69 73 69 6f 6e 20 6f 72 64 65 72 20 66 6f 72 vision order for
2f00: 20 69 6d 70 6f 72 74 2e 2e 2e 7d 0a 09 73 65 74 import...}..set
2f10: 20 66 69 6c 65 6d 61 70 20 24 6d 79 69 6d 70 6f filemap $myimpo
2f20: 72 74 0a 09 75 6e 73 65 74 20 6d 79 69 6d 70 6f rt..unset myimpo
2f30: 72 74 0a 0a 09 23 20 41 6e 64 20 62 61 63 6b 20 rt...# And back
2f40: 74 6f 20 69 6d 70 6f 72 74 20 63 6f 6e 74 72 6f to import contro
2f50: 6c 0a 0a 09 24 65 78 20 64 65 73 74 72 6f 79 0a l...$ex destroy.
2f60: 09 24 7a 70 20 64 65 73 74 72 6f 79 0a 0a 09 72 .$zp destroy...r
2f70: 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 66 69 6c eturn [list $fil
2f80: 65 6d 61 70 20 24 72 65 76 6d 61 70 5d 0a 20 20 emap $revmap].
2f90: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
2fa0: 45 78 70 61 6e 64 44 61 74 61 20 20 20 7b 67 72 ExpandData {gr
2fb0: 61 70 68 20 6e 6f 64 65 7d 20 7b 20 72 65 74 75 aph node} { retu
2fc0: 72 6e 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 rn [$graph node
2fd0: 67 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d get $node revnr]
2fe0: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 }. method Ex
2ff0: 70 61 6e 64 46 6f 72 6d 61 74 20 7b 67 72 61 70 pandFormat {grap
3000: 68 20 69 74 65 6d 7d 20 7b 20 72 65 74 75 72 6e h item} { return
3010: 20 3c 5b 6c 69 6e 64 65 78 20 24 69 74 65 6d 20 <[lindex $item
3020: 31 5d 3e 20 7d 20 3b 20 23 20 72 65 76 6e 72 0a 1]> } ; # revnr.
3030: 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e method Expan
3040: 64 53 6f 72 74 20 20 20 7b 67 72 61 70 68 20 63 dSort {graph c
3050: 61 6e 64 69 64 61 74 65 73 7d 20 7b 0a 09 23 20 andidates} {..#
3060: 63 61 6e 64 69 64 61 74 65 73 20 3d 20 6c 69 73 candidates = lis
3070: 74 28 69 74 65 6d 29 2c 20 69 74 65 6d 20 3d 20 t(item), item =
3080: 6c 69 73 74 28 6e 6f 64 65 20 72 65 76 6e 72 29 list(node revnr)
3090: 0a 09 23 20 53 6f 72 74 20 62 79 20 6e 6f 64 65 ..# Sort by node
30a0: 20 61 6e 64 20 72 65 76 6e 72 20 2d 3e 20 54 72 and revnr -> Tr
30b0: 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 63 6f unk revisions co
30c0: 6d 65 20 66 69 72 73 74 2e 0a 09 72 65 74 75 72 me first...retur
30d0: 6e 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 n [lsort -index
30e0: 31 20 2d 64 69 63 74 20 5b 6c 73 6f 72 74 20 2d 1 -dict [lsort -
30f0: 69 6e 64 65 78 20 30 20 2d 64 69 63 74 20 24 63 index 0 -dict $c
3100: 61 6e 64 69 64 61 74 65 73 5d 5d 0a 20 20 20 20 andidates]].
3110: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 }. method Exp
3120: 61 6e 64 31 20 7b 63 68 61 6e 20 64 69 72 20 6d and1 {chan dir m
3130: 61 78 20 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b ax graph node} {
3140: 0a 09 6c 6f 67 20 70 72 6f 67 72 65 73 73 20 33 ..log progress 3
3150: 20 66 69 6c 65 20 24 6d 79 69 6d 70 6f 72 74 20 file $myimport
3160: 24 6d 61 78 20 3b 20 69 6e 63 72 20 6d 79 69 6d $max ; incr myim
3170: 70 6f 72 74 0a 0a 09 73 65 74 20 72 65 76 6e 72 port...set revnr
3180: 20 20 20 20 20 20 20 20 20 20 20 5b 24 67 72 61 [$gra
3190: 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 ph node get $nod
31a0: 65 20 72 65 76 6e 72 5d 0a 09 73 65 74 20 66 6e e revnr]..set fn
31b0: 61 6d 65 20 20 20 20 20 20 20 20 20 20 72 24 72 ame r$r
31c0: 65 76 6e 72 0a 09 73 74 72 75 63 74 3a 3a 6c 69 evnr..struct::li
31d0: 73 74 20 61 73 73 69 67 6e 20 5b 24 67 72 61 70 st assign [$grap
31e0: 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 h node get $node
31f0: 20 74 65 78 74 5d 20 6f 66 66 73 65 74 20 6c 65 text] offset le
3200: 6e 67 74 68 0a 0a 09 69 66 20 7b 24 6c 65 6e 67 ngth...if {$leng
3210: 74 68 20 3c 20 30 7d 20 7b 0a 09 20 20 20 20 73 th < 0} {.. s
3220: 65 74 20 64 61 74 61 20 22 22 0a 09 7d 20 65 6c et data ""..} el
3230: 73 65 20 7b 0a 09 20 20 20 20 73 65 65 6b 20 24 se {.. seek $
3240: 63 68 61 6e 20 24 6f 66 66 73 65 74 20 73 74 61 chan $offset sta
3250: 72 74 0a 09 20 20 20 20 73 65 74 20 64 61 74 61 rt.. set data
3260: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 40 40 [string map {@@
3270: 20 40 7d 20 5b 72 65 61 64 20 24 63 68 61 6e 20 @} [read $chan
3280: 24 6c 65 6e 67 74 68 5d 5d 0a 09 7d 0a 0a 09 69 $length]]..}...i
3290: 66 20 7b 21 5b 24 67 72 61 70 68 20 6e 6f 64 65 f {![$graph node
32a0: 20 6b 65 79 65 78 69 73 74 73 20 24 6e 6f 64 65 keyexists $node
32b0: 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a 09 20 __base__]} {..
32c0: 20 20 20 23 20 46 75 6c 6c 20 74 65 78 74 20 6e # Full text n
32d0: 6f 64 65 2e 20 47 65 74 20 74 68 65 20 64 61 74 ode. Get the dat
32e0: 61 2c 20 64 65 63 6f 64 65 20 69 74 2c 20 61 6e a, decode it, an
32f0: 64 20 73 61 76 65 2e 0a 0a 09 20 20 20 20 6c 6f d save.... lo
3300: 67 20 77 72 69 74 65 20 38 20 66 69 6c 65 20 7b g write 8 file {
3310: 45 78 70 61 6e 64 69 6e 67 20 3c 24 72 65 76 6e Expanding <$revn
3320: 72 3e 2c 20 66 75 6c 6c 20 74 65 78 74 7d 0a 0a r>, full text}..
3330: 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 . fileutil::w
3340: 72 69 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c riteFile -transl
3350: 61 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 ation binary $di
3360: 72 2f 24 66 6e 61 6d 65 20 24 64 61 74 61 0a 09 r/$fname $data..
3370: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 20 } else {.. #
3380: 44 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 Delta node. __ba
3390: 73 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65 se__ is the name
33a0: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e of the file con
33b0: 74 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74 taining.. # t
33c0: 68 65 20 62 61 73 65 6c 69 6e 65 2e 20 54 68 65 he baseline. The
33d0: 20 70 61 74 63 68 20 69 73 20 61 74 20 74 68 65 patch is at the
33e0: 20 73 70 65 63 69 66 69 65 64 20 6c 6f 63 61 74 specified locat
33f0: 69 6f 6e 20 6f 66 0a 09 20 20 20 20 23 20 74 68 ion of.. # th
3400: 65 20 61 72 63 68 69 76 65 20 66 69 6c 65 2e 0a e archive file..
3410: 0a 09 20 20 20 20 73 65 74 20 66 62 61 73 65 20 .. set fbase
3420: 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 [$graph node get
3430: 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d $node __base__]
3440: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
3450: 38 20 66 69 6c 65 20 7b 45 78 70 61 6e 64 69 6e 8 file {Expandin
3460: 67 20 3c 24 72 65 76 6e 72 3e 2c 20 69 73 20 64 g <$revnr>, is d
3470: 65 6c 74 61 20 6f 66 20 3c 24 66 62 61 73 65 3e elta of <$fbase>
3480: 7d 0a 0a 09 20 20 20 20 73 65 74 20 62 61 73 65 }... set base
3490: 20 5b 66 69 6c 65 75 74 69 6c 3a 3a 63 61 74 20 [fileutil::cat
34a0: 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e -translation bin
34b0: 61 72 79 20 24 64 69 72 2f 24 66 62 61 73 65 5d ary $dir/$fbase]
34c0: 0a 0a 09 20 20 20 20 23 20 57 72 69 74 69 6e 67 ... # Writing
34d0: 20 74 68 65 20 70 61 74 63 68 20 74 6f 20 64 69 the patch to di
34e0: 73 6b 20 69 73 20 6a 75 73 74 20 66 6f 72 20 62 sk is just for b
34f0: 65 74 74 65 72 0a 09 20 20 20 20 23 20 64 65 62 etter.. # deb
3500: 75 67 67 69 6e 67 2e 20 49 74 20 69 73 20 6e 6f ugging. It is no
3510: 74 20 75 73 65 64 20 6f 74 68 65 72 77 69 73 65 t used otherwise
3520: 2e 0a 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a ... fileutil:
3530: 3a 77 72 69 74 65 46 69 6c 65 20 24 64 69 72 2f :writeFile $dir/
3540: 72 70 61 74 63 68 20 24 64 61 74 61 0a 09 20 20 rpatch $data..
3550: 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74 fileutil::writ
3560: 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61 74 69 eFile -translati
3570: 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72 2f 24 on binary $dir/$
3580: 66 6e 61 6d 65 20 5c 0a 09 09 5b 41 70 70 6c 79 fname \...[Apply
3590: 20 24 62 61 73 65 20 24 64 61 74 61 5d 0a 09 7d $base $data]..}
35a0: 0a 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c ...# Post to all
35b0: 20 73 75 63 63 65 73 73 6f 72 73 20 74 68 61 74 successors that
35c0: 20 74 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61 the just genera
35d0: 74 65 64 20 66 69 6c 65 20 69 73 20 74 68 65 69 ted file is thei
35e0: 72 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e 0a 0a r..# baseline...
35f0: 09 66 6f 72 65 61 63 68 20 6f 75 74 20 5b 24 67 .foreach out [$g
3600: 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74 20 raph nodes -out
3610: 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 24 67 $node] {.. $g
3620: 72 61 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f raph node set $o
3630: 75 74 20 5f 5f 62 61 73 65 5f 5f 20 24 66 6e 61 ut __base__ $fna
3640: 6d 65 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 me..}..return.
3650: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 41 70 }.. proc Ap
3660: 70 6c 79 20 7b 62 61 73 65 20 64 65 6c 74 61 7d ply {base delta}
3670: 20 7b 0a 09 23 20 62 61 73 65 20 20 3d 20 62 61 {..# base = ba
3680: 73 65 20 74 65 78 74 2e 0a 09 23 20 64 65 6c 74 se text...# delt
3690: 61 20 3d 20 64 65 6c 74 61 20 69 6e 20 72 63 73 a = delta in rcs
36a0: 20 66 6f 72 6d 61 74 2e 0a 09 23 0a 09 23 20 42 format...#..# B
36b0: 6f 74 68 20 73 74 72 69 6e 67 73 20 61 72 65 20 oth strings are
36c0: 75 6e 65 6e 63 6f 64 65 64 2c 20 69 2e 65 2e 20 unencoded, i.e.
36d0: 74 68 69 6e 67 73 20 6c 69 6b 65 20 40 40 2c 20 things like @@,
36e0: 65 74 63 2e 20 68 61 76 65 0a 09 23 20 61 6c 72 etc. have..# alr
36f0: 65 61 64 79 20 62 65 65 6e 20 72 65 70 6c 61 63 eady been replac
3700: 65 64 20 77 69 74 68 20 74 68 65 69 72 20 70 72 ed with their pr
3710: 6f 70 65 72 20 63 68 61 72 61 63 74 65 72 73 2e oper characters.
3720: 0a 09 23 0a 09 23 20 52 65 74 75 72 6e 20 76 61 ..#..# Return va
3730: 6c 75 65 20 69 73 20 74 68 65 20 70 61 74 63 68 lue is the patch
3740: 65 64 20 74 65 78 74 2e 0a 0a 09 73 65 74 20 62 ed text....set b
3750: 61 73 65 20 5b 73 70 6c 69 74 20 24 62 61 73 65 ase [split $base
3760: 20 5c 6e 5d 0a 09 73 65 74 20 62 6c 65 6e 20 5b \n]..set blen [
3770: 6c 6c 65 6e 67 74 68 20 24 62 61 73 65 5d 0a 09 llength $base]..
3780: 73 65 74 20 6f 6f 66 66 20 30 0a 09 73 65 74 20 set ooff 0..set
3790: 72 65 73 20 22 22 0a 0a 09 73 65 74 20 6c 69 6e res ""...set lin
37a0: 65 73 20 20 5b 73 70 6c 69 74 20 24 64 65 6c 74 es [split $delt
37b0: 61 20 5c 6e 5d 0a 09 73 65 74 20 6e 6c 69 6e 65 a \n]..set nline
37c0: 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 s [llength $line
37d0: 73 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 s]...log write 1
37e0: 31 20 66 69 6c 65 20 7b 42 61 73 65 20 20 6c 69 1 file {Base li
37f0: 6e 65 73 20 3d 20 24 62 6c 65 6e 7d 0a 09 6c 6f nes = $blen}..lo
3800: 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 g write 11 file
3810: 7b 44 65 6c 74 61 20 6c 69 6e 65 73 20 3d 20 24 {Delta lines = $
3820: 6e 6c 69 6e 65 73 7d 0a 0a 09 66 6f 72 20 7b 73 nlines}...for {s
3830: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e et i 0} {$i < $n
3840: 6c 69 6e 65 73 7d 20 7b 7d 20 7b 0a 09 20 20 20 lines} {} {..
3850: 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 log write 11 fi
3860: 6c 65 20 7b 20 20 20 20 40 20 24 69 20 3d 20 5b le { @ $i = [
3870: 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69 lindex $lines $i
3880: 5d 7d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 ]}.. log writ
3890: 65 20 31 31 20 66 69 6c 65 20 7b 20 6f 6f 66 66 e 11 file { ooff
38a0: 20 24 6f 6f 66 66 7d 0a 0a 09 20 20 20 20 69 66 $ooff}... if
38b0: 20 7b 21 5b 72 65 67 65 78 70 20 7b 5e 28 5b 61 {![regexp {^([a
38c0: 64 5d 29 28 5c 64 2b 29 5c 73 28 5c 64 2b 29 24 d])(\d+)\s(\d+)$
38d0: 7d 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 } [lindex $lines
38e0: 20 24 69 5d 20 2d 3e 20 63 6d 64 20 73 6c 20 63 $i] -> cmd sl c
38f0: 6e 5d 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 n]} {...trouble
3900: 69 6e 74 65 72 6e 61 6c 20 22 42 61 64 20 65 64 internal "Bad ed
3910: 20 63 6f 6d 6d 61 6e 64 20 27 5b 6c 69 6e 64 65 command '[linde
3920: 78 20 24 6c 69 6e 65 73 20 24 69 5d 27 22 0a 09 x $lines $i]'"..
3930: 20 20 20 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 }... log
3940: 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 write 11 file {
3950: 20 63 6d 64 20 24 63 6d 64 7d 0a 09 20 20 20 20 cmd $cmd}..
3960: 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c log write 11 fil
3970: 65 20 7b 20 20 20 73 6c 20 24 73 6c 7d 0a 09 20 e { sl $sl}..
3980: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 log write 11
3990: 66 69 6c 65 20 7b 20 20 20 63 6e 20 24 63 6e 7d file { cn $cn}
39a0: 0a 0a 09 20 20 20 20 69 6e 63 72 20 69 0a 09 20 ... incr i..
39b0: 20 20 20 73 65 74 20 65 6c 20 5b 65 78 70 72 20 set el [expr
39c0: 7b 24 73 6c 20 2b 20 24 63 6e 7d 5d 0a 0a 09 20 {$sl + $cn}]...
39d0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 log write 11
39e0: 66 69 6c 65 20 7b 20 20 20 65 6c 20 24 65 6c 7d file { el $el}
39f0: 0a 0a 09 20 20 20 20 73 77 69 74 63 68 20 2d 65 ... switch -e
3a00: 78 61 63 74 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 xact -- $cmd {..
3a10: 09 64 20 7b 0a 09 09 20 20 20 20 69 6e 63 72 20 .d {... incr
3a20: 73 6c 20 2d 31 0a 09 09 20 20 20 20 69 6e 63 72 sl -1... incr
3a30: 20 65 6c 20 2d 31 0a 09 09 20 20 20 20 69 66 20 el -1... if
3a40: 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 {$sl < $ooff} {
3a50: 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c trouble internal
3a60: 20 7b 44 65 6c 65 74 69 6f 6e 20 62 65 66 6f 72 {Deletion befor
3a70: 65 20 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 e last edit} }..
3a80: 09 20 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 . if {$sl > $
3a90: 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 blen} { trouble
3aa0: 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 internal {Deleti
3ab0: 6f 6e 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64 on past file end
3ac0: 7d 20 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 65 } }... if {$e
3ad0: 6c 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f l > $blen} { tro
3ae0: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 uble internal {D
3af0: 65 6c 65 74 69 6f 6e 20 62 65 79 6f 6e 64 20 66 eletion beyond f
3b00: 69 6c 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20 20 ile end} }...
3b10: 20 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e foreach x [lran
3b20: 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 24 ge $base $ooff $
3b30: 73 6c 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 sl] { lappend re
3b40: 73 20 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74 s $x }... set
3b50: 20 20 6f 6f 66 66 20 24 65 6c 0a 09 09 7d 0a 09 ooff $el...}..
3b60: 09 61 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 24 .a {... if {$
3b70: 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72 sl < $ooff} { tr
3b80: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b ouble internal {
3b90: 49 6e 73 65 72 74 20 62 65 66 6f 72 65 20 6c 61 Insert before la
3ba0: 73 74 20 65 64 69 74 7d 20 7d 0a 09 09 20 20 20 st edit} }...
3bb0: 20 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c 65 6e if {$sl > $blen
3bc0: 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 } { trouble inte
3bd0: 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20 70 61 73 rnal {Insert pas
3be0: 74 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 0a 09 t file end} }...
3bf0: 09 20 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b . foreach x [
3c00: 6c 72 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f lrange $base $oo
3c10: 66 66 20 24 73 6c 5d 20 20 20 20 20 20 20 20 20 ff $sl]
3c20: 20 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 { lappend re
3c30: 73 20 24 78 20 7d 0a 09 09 20 20 20 20 66 6f 72 s $x }... for
3c40: 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 each x [lrange $
3c50: 6c 69 6e 65 73 20 24 69 20 5b 65 78 70 72 20 7b lines $i [expr {
3c60: 24 69 20 2b 20 24 63 6e 7d 5d 5d 20 7b 20 6c 61 $i + $cn}]] { la
3c70: 70 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 ppend res $x }..
3c80: 09 20 20 20 20 73 65 74 20 6f 6f 66 66 20 24 73 . set ooff $s
3c90: 6c 0a 09 09 20 20 20 20 69 6e 63 72 20 69 20 24 l... incr i $
3ca0: 63 6e 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d cn...}.. }..}
3cb0: 0a 09 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 ..foreach x [lra
3cc0: 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 nge $base $ooff
3cd0: 65 6e 64 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 end] { lappend r
3ce0: 65 73 20 24 78 20 7d 0a 09 72 65 74 75 72 6e 20 es $x }..return
3cf0: 5b 6a 6f 69 6e 20 24 72 65 73 20 5c 6e 5d 0a 20 [join $res \n].
3d00: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
3d10: 20 45 78 70 61 6e 64 32 20 7b 67 72 61 70 68 20 Expand2 {graph
3d20: 6e 6f 64 65 7d 20 7b 0a 09 73 65 74 20 72 65 76 node} {..set rev
3d30: 6e 72 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 nr [$graph node
3d40: 67 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d get $node revnr]
3d50: 0a 0a 09 23 20 46 69 72 73 74 20 69 6d 70 6f 72 ...# First impor
3d60: 74 20 74 68 65 20 66 69 6c 65 2e 0a 09 6c 61 70 t the file...lap
3d70: 70 65 6e 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c pend myimport [l
3d80: 69 73 74 20 41 20 72 24 72 65 76 6e 72 20 7b 7d ist A r$revnr {}
3d90: 5d 0a 0a 09 69 66 20 7b 5b 24 67 72 61 70 68 20 ]...if {[$graph
3da0: 6e 6f 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 node keyexists $
3db0: 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 node __base__]}
3dc0: 7b 0a 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e {.. # Delta n
3dd0: 6f 64 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73 ode. __base__ is
3de0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 the name of the
3df0: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 file containing
3e00: 0a 09 20 20 20 20 23 20 74 68 65 20 62 61 73 65 .. # the base
3e10: 6c 69 6e 65 2e 20 47 65 6e 65 72 61 74 65 20 69 line. Generate i
3e20: 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 6d 61 nstruction to ma
3e30: 6b 65 20 74 68 65 20 64 65 6c 74 61 20 61 73 0a ke the delta as.
3e40: 09 20 20 20 20 23 20 77 65 6c 6c 2e 0a 0a 09 20 . # well....
3e50: 20 20 20 73 65 74 20 66 62 61 73 65 20 5b 24 67 set fbase [$g
3e60: 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e raph node get $n
3e70: 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09 20 ode __base__]..
3e80: 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70 lappend myimp
3e90: 6f 72 74 20 5b 6c 69 73 74 20 44 20 72 24 72 65 ort [list D r$re
3ea0: 76 6e 72 20 72 24 66 62 61 73 65 5d 0a 09 7d 0a vnr r$fbase]..}.
3eb0: 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 ..# Post to all
3ec0: 73 75 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 successors that
3ed0: 74 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 the just generat
3ee0: 65 64 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 ed file is their
3ef0: 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e 20 45 78 ..# baseline. Ex
3f00: 63 65 70 74 69 6f 6e 3a 20 54 68 6f 73 65 20 77 ception: Those w
3f10: 68 69 63 68 20 61 76 65 20 61 6c 72 65 61 64 79 hich ave already
3f20: 20 61 20 62 61 73 65 6c 69 6e 65 20 73 65 74 2e a baseline set.
3f30: 0a 09 23 20 54 6f 67 65 74 68 65 72 20 77 69 74 ..# Together wit
3f40: 68 20 74 68 65 20 73 6f 72 74 69 6e 67 20 6f 66 h the sorting of
3f50: 20 74 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 trunk revisions
3f60: 20 66 69 72 73 74 20 74 68 65 20 74 72 75 6e 6b first the trunk
3f70: 0a 09 23 20 73 68 6f 75 6c 64 20 6f 6e 65 20 75 ..# should one u
3f80: 6e 69 6e 74 65 72 75 70 74 65 64 20 6c 69 6e 65 ninterupted line
3f90: 2c 20 77 69 74 68 20 62 72 61 6e 63 68 20 72 6f , with branch ro
3fa0: 6f 74 73 20 5f 6e 6f 74 5f 20 64 65 6c 74 61 0a ots _not_ delta.
3fb0: 09 23 20 63 6f 6d 70 72 65 73 73 65 64 20 70 65 .# compressed pe
3fc0: 72 20 74 68 65 69 72 20 62 72 61 6e 63 68 65 73 r their branches
3fd0: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20 ....foreach out
3fe0: 5b 24 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f [$graph nodes -o
3ff0: 75 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 ut $node] {..
4000: 20 69 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f 64 if {[$graph nod
4010: 65 20 6b 65 79 65 78 69 73 74 73 20 24 6f 75 74 e keyexists $out
4020: 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 63 6f 6e 74 __base__]} cont
4030: 69 6e 75 65 0a 09 20 20 20 20 24 67 72 61 70 68 inue.. $graph
4040: 20 6e 6f 64 65 20 73 65 74 20 24 6f 75 74 20 5f node set $out _
4050: 5f 62 61 73 65 5f 5f 20 24 72 65 76 6e 72 0a 09 _base__ $revnr..
4060: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
4070: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
4080: 69 6d 70 6f 72 74 0a 0a 20 20 20 20 23 20 23 20 import.. # #
4090: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
40a0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
40b0: 23 23 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 ###. ## State
40c0: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
40d0: 79 69 64 20 20 20 20 20 20 20 20 20 20 20 20 20 yid
40e0: 20 7b 7d 20 3b 20 23 20 46 69 6c 65 20 69 64 20 {} ; # File id
40f0: 69 6e 20 74 68 65 20 70 65 72 73 69 73 74 65 6e in the persisten
4100: 74 20 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72 t state.. var
4110: 69 61 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20 iable mypath
4120: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 {} ; # P
4130: 61 74 68 20 6f 66 20 74 68 65 20 66 69 6c 65 27 ath of the file'
4140: 73 20 72 63 73 20 61 72 63 68 69 76 65 2e 0a 20 s rcs archive..
4150: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 75 73 variable myus
4160: 72 70 61 74 68 20 20 20 20 20 20 20 20 20 7b 7d rpath {}
4170: 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68 65 ; # Path of the
4180: 20 66 69 6c 65 20 61 73 20 73 65 65 6e 20 62 79 file as seen by
4190: 20 75 73 65 72 73 2e 0a 20 20 20 20 76 61 72 69 users.. vari
41a0: 61 62 6c 65 20 6d 79 65 78 65 63 75 74 61 62 6c able myexecutabl
41b0: 65 20 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f e 0 ; # Bo
41c0: 6f 6c 65 61 6e 20 66 6c 61 67 20 27 66 69 6c 65 olean flag 'file
41d0: 20 65 78 65 63 75 74 61 62 6c 65 27 2e 0a 20 20 executable'..
41e0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f variable mypro
41f0: 6a 65 63 74 20 20 20 20 20 20 20 20 20 7b 7d 20 ject {}
4200: 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f ; # Reference to
4210: 20 74 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a the project obj
4220: 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 74 68 ect..... # th
4230: 65 20 66 69 6c 65 20 62 65 6c 6f 6e 67 73 20 74 e file belongs t
4240: 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 o.. variable
4250: 6d 79 72 65 76 20 2d 61 72 72 61 79 20 20 20 20 myrev -array
4260: 20 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 {} ; # Maps re
4270: 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f vision number to
4280: 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 20 61 the..... # a
4290: 73 73 6f 63 69 61 74 65 64 20 72 65 76 69 73 69 ssociated revisi
42a0: 6f 6e 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 76 on object.. v
42b0: 61 72 69 61 62 6c 65 20 6d 79 72 65 76 69 73 69 ariable myrevisi
42c0: 6f 6e 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 ons {} ; #
42d0: 20 53 61 6d 65 20 61 73 20 6d 79 72 65 76 2c 20 Same as myrev,
42e0: 62 75 74 20 61 20 6c 69 73 74 2c 0a 09 09 09 09 but a list,.....
42f0: 20 20 20 20 23 20 67 69 76 69 6e 67 20 75 73 20 # giving us
4300: 74 68 65 20 6f 72 64 65 72 20 6f 66 0a 09 09 09 the order of....
4310: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 . # revisions
4320: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
4330: 79 61 69 64 20 20 20 20 20 20 2d 61 72 72 61 79 yaid -array
4340: 20 7b 7d 20 3b 20 23 20 4d 61 70 20 72 65 76 69 {} ; # Map revi
4350: 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 74 6f 20 sion numbers to
4360: 74 68 65 20 69 64 0a 09 09 09 09 20 20 20 20 23 the id..... #
4370: 20 6f 66 20 74 68 65 20 61 75 74 68 6f 72 20 77 of the author w
4380: 68 6f 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 09 ho committed....
4390: 09 20 20 20 20 23 20 69 74 2e 20 54 68 69 73 20 . # it. This
43a0: 69 73 20 6c 61 74 65 72 20 61 67 67 72 65 67 61 is later aggrega
43b0: 74 65 64 0a 09 09 09 09 20 20 20 20 23 20 77 69 ted..... # wi
43c0: 74 68 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 th commit messag
43d0: 65 2c 20 62 72 61 6e 63 68 20 6e 61 6d 65 0a 09 e, branch name..
43e0: 09 09 09 20 20 20 20 23 20 61 6e 64 20 70 72 6f ... # and pro
43f0: 6a 65 63 74 20 69 64 20 66 6f 72 20 61 20 6d 65 ject id for a me
4400: 74 61 20 69 64 2e 0a 20 20 20 20 76 61 72 69 61 ta id.. varia
4410: 62 6c 65 20 6d 79 68 65 61 64 72 65 76 6e 72 20 ble myheadrevnr
4420: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 48 65 61 {} ; # Hea
4430: 64 20 72 65 76 69 73 69 6f 6e 20 28 72 65 76 69 d revision (revi
4440: 73 69 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 20 20 sion number).
4450: 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 69 6e variable myprin
4460: 63 69 70 61 6c 20 20 20 20 20 20 20 7b 7d 20 3b cipal {} ;
4470: 20 23 20 50 72 69 6e 63 69 70 61 6c 20 62 72 61 # Principal bra
4480: 6e 63 68 20 28 62 72 61 6e 63 68 20 6e 75 6d 62 nch (branch numb
4490: 65 72 29 2e 0a 09 09 09 09 20 20 20 20 23 20 43 er)...... # C
44a0: 6f 6e 74 72 61 72 79 20 74 6f 20 74 68 65 20 6e ontrary to the n
44b0: 61 6d 65 20 74 68 69 73 20 69 73 20 74 68 65 0a ame this is the.
44c0: 09 09 09 09 20 20 20 20 23 20 64 65 66 61 75 6c .... # defaul
44d0: 74 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 t branch.. va
44e0: 72 69 61 62 6c 65 20 6d 79 64 65 70 65 6e 64 65 riable mydepende
44f0: 6e 63 69 65 73 20 20 20 20 7b 7d 20 3b 20 23 20 ncies {} ; #
4500: 44 69 63 74 69 6f 6e 61 72 79 20 70 61 72 65 6e Dictionary paren
4510: 74 20 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 09 09 t -> child,.....
4520: 20 20 20 20 23 20 72 65 63 6f 72 64 73 20 70 72 # records pr
4530: 69 6d 61 72 79 20 64 65 70 65 6e 64 65 6e 63 69 imary dependenci
4540: 65 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 es.. variable
4550: 20 6d 79 69 6d 70 6f 72 74 65 64 20 20 20 20 20 myimported
4560: 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61 0 ; # Boolea
4570: 6e 20 66 6c 61 67 2e 20 53 65 74 20 69 66 20 61 n flag. Set if a
4580: 6e 64 20 6f 6e 6c 79 20 69 66 0a 09 09 09 09 20 nd only if.....
4590: 20 20 20 23 20 72 65 76 20 31 2e 31 20 6f 66 20 # rev 1.1 of
45a0: 74 68 65 20 66 69 6c 65 20 73 65 65 6d 69 6e 67 the file seeming
45b0: 6c 79 0a 09 09 09 09 20 20 20 20 23 20 77 61 73 ly..... # was
45c0: 20 69 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61 imported instea
45d0: 64 20 6f 66 20 61 64 64 65 64 0a 09 09 09 09 20 d of added.....
45e0: 20 20 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 20 # normally..
45f0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f variable myro
4600: 6f 74 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d ot {}
4610: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 ; # Reference t
4620: 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f o the revision o
4630: 62 6a 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 bject..... #
4640: 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 holding the root
4650: 20 72 65 76 69 73 69 6f 6e 2e 20 20 49 74 73 0a revision. Its.
4660: 09 09 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 .... # number
4670: 20 75 73 75 61 6c 6c 79 20 69 73 20 27 31 2e 31 usually is '1.1
4680: 27 2e 20 43 61 6e 20 62 65 0a 09 09 09 09 20 20 '. Can be.....
4690: 20 20 23 20 61 20 64 69 66 66 65 72 65 6e 74 20 # a different
46a0: 6e 75 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20 number, because
46b0: 6f 66 0a 09 09 09 09 20 20 20 20 23 20 67 61 70 of..... # gap
46c0: 73 20 63 72 65 61 74 65 64 20 76 69 61 20 27 63 s created via 'c
46d0: 76 73 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20 vsadmin -o'..
46e0: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e variable mybran
46f0: 63 68 65 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b ches -array {} ;
4700: 20 23 20 4d 61 70 73 20 62 72 61 6e 63 68 20 6e # Maps branch n
4710: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 73 79 6d umber to the sym
4720: 62 6f 6c 0a 09 09 09 09 20 20 20 20 23 20 6f 62 bol..... # ob
4730: 6a 65 63 74 20 68 61 6e 64 6c 69 6e 67 20 74 68 ject handling th
4740: 65 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 e branch.. va
4750: 72 69 61 62 6c 65 20 6d 79 74 61 67 73 20 20 20 riable mytags
4760: 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 -array {} ; #
4770: 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 Maps revision nu
4780: 6d 62 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 mber to the list
4790: 0a 09 09 09 09 20 20 20 20 23 20 6f 66 20 73 79 ..... # of sy
47a0: 6d 62 6f 6c 20 6f 62 6a 65 63 74 73 20 66 6f 72 mbol objects for
47b0: 20 74 68 65 20 74 61 67 73 0a 09 09 09 09 20 20 the tags.....
47c0: 20 20 23 20 61 73 73 6f 63 69 61 74 65 64 20 77 # associated w
47d0: 69 74 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e ith the revision
47e0: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
47f0: 79 73 79 6d 62 6f 6c 73 20 20 20 20 20 20 20 20 ysymbols
4800: 20 7b 7d 20 3b 20 23 20 53 65 74 20 6f 66 20 74 {} ; # Set of t
4810: 68 65 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20 he symbol names
4820: 66 6f 75 6e 64 20 69 6e 0a 09 09 09 09 20 20 20 found in.....
4830: 20 23 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20 # this file...
4840: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 variable mybr
4850: 61 6e 63 68 63 6e 74 20 30 20 3b 20 23 20 43 6f anchcnt 0 ; # Co
4860: 75 6e 74 65 72 20 66 6f 72 20 62 72 61 6e 63 68 unter for branch
4870: 65 73 2c 20 74 6f 20 72 65 63 6f 72 64 20 74 68 es, to record th
4880: 65 69 72 0a 09 09 09 20 20 20 20 20 23 20 6f 72 eir.... # or
4890: 64 65 72 20 6f 66 20 64 65 66 69 6e 69 74 69 6f der of definitio
48a0: 6e 2e 20 54 68 69 73 20 61 6c 73 6f 20 64 65 66 n. This also def
48b0: 69 6e 65 73 0a 09 09 09 20 20 20 20 20 23 20 74 ines.... # t
48c0: 68 65 69 72 20 6f 72 64 65 72 20 6f 66 20 63 72 heir order of cr
48d0: 65 61 74 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 eation, which is
48e0: 20 74 68 65 0a 09 09 09 20 20 20 20 20 23 20 72 the.... # r
48f0: 65 76 65 72 73 65 20 6f 66 20 64 65 66 69 6e 69 everse of defini
4900: 74 69 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 73 6d tion. I.e. a sm
4910: 61 6c 6c 65 72 0a 09 09 09 20 20 20 20 20 23 20 aller.... #
4920: 6e 75 6d 62 65 72 20 6d 65 61 6e 73 20 27 44 65 number means 'De
4930: 66 69 6e 65 64 20 65 61 72 6c 69 65 72 27 2c 20 fined earlier',
4940: 6d 65 61 6e 73 0a 09 09 09 20 20 20 20 20 23 20 means.... #
4950: 27 43 72 65 61 74 65 64 20 6c 61 74 65 72 27 2e 'Created later'.
4960: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
4970: 79 74 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 44 69 ytrunk {} ; # Di
4980: 72 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 74 rect reference t
4990: 6f 20 6d 79 70 72 6f 6a 65 63 74 20 2d 3e 20 74 o myproject -> t
49a0: 72 75 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62 runk.. variab
49b0: 6c 65 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 3b 20 le myroots {} ;
49c0: 23 20 4c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 # List of roots
49d0: 69 6e 20 74 68 65 20 66 6f 72 65 73 74 20 6f 66 in the forest of
49e0: 0a 09 09 09 20 20 23 20 6c 6f 64 27 73 2e 20 4f .... # lod's. O
49f0: 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 bject references
4a00: 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 61 6e to revisions an
4a10: 64 0a 09 09 09 20 20 23 20 62 72 61 6e 63 68 65 d.... # branche
4a20: 73 2e 20 54 68 65 20 6c 61 74 74 65 72 20 63 61 s. The latter ca
4a30: 6e 20 61 70 70 65 61 72 20 77 68 65 6e 20 74 68 n appear when th
4a40: 65 79 0a 09 09 09 20 20 23 20 61 72 65 20 73 65 ey.... # are se
4a50: 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 vered from their
4a60: 20 70 61 72 65 6e 74 2e 0a 0a 20 20 20 20 76 61 parent... va
4a70: 72 69 61 62 6c 65 20 6d 79 62 6c 6f 62 20 7b 7d riable myblob {}
4a80: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 ; # Reference t
4a90: 6f 20 74 68 65 20 6f 62 6a 65 63 74 20 6d 61 6e o the object man
4aa0: 61 67 69 6e 67 20 74 68 65 20 62 6c 6f 62 0a 09 aging the blob..
4ab0: 09 09 20 23 20 69 6e 66 6f 72 6d 61 74 69 6f 6e .. # information
4ac0: 20 28 74 65 78 74 72 61 6e 67 65 20 6f 66 20 72 (textrange of r
4ad0: 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 0a 09 09 evisions, and...
4ae0: 09 20 23 20 64 65 6c 74 61 20 64 65 70 65 6e 64 . # delta depend
4af0: 65 6e 63 69 65 73 29 20 6f 66 20 74 68 69 73 20 encies) of this
4b00: 66 69 6c 65 2e 0a 0a 20 20 20 20 23 20 23 20 23 file... # # #
4b10: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
4b20: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
4b30: 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e ##. ## Intern
4b40: 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 al methods..
4b50: 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 72 61 method RecordBra
4b60: 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 72 61 6e nchCommits {bran
4b70: 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 61 63 68 ches} {..foreach
4b80: 20 62 72 61 6e 63 68 72 65 76 6e 72 20 24 62 72 branchrevnr $br
4b90: 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 69 66 anches {.. if
4ba0: 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 73 65 74 {[catch {...set
4bb0: 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 52 branch [$self R
4bc0: 65 76 32 42 72 61 6e 63 68 20 24 62 72 61 6e 63 ev2Branch $branc
4bd0: 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 7d 5d 7d hrevnr].. }]}
4be0: 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68 20 {...set branch
4bf0: 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c 61 62 65 [$self AddUnlabe
4c00: 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 76 20 32 ledBranch [rev 2
4c10: 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 68 branchnr $branch
4c20: 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 0a revnr]].. }..
4c30: 09 20 20 20 20 23 20 52 65 63 6f 72 64 20 74 68 . # Record th
4c40: 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 74 20 61 e commit, just a
4c50: 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 s revision numbe
4c60: 72 20 66 6f 72 0a 09 20 20 20 20 23 20 6e 6f 77 r for.. # now
4c70: 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 68 44 65 . ProcesBranchDe
4c80: 70 65 6e 64 65 6e 63 69 65 73 20 77 69 6c 6c 20 pendencies will
4c90: 65 78 74 65 6e 64 20 74 68 61 74 20 69 74 6f 20 extend that ito
4ca0: 61 0a 09 20 20 20 20 23 20 70 72 6f 70 65 72 20 a.. # proper
4cb0: 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 object reference
4cc0: 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 .... $branch
4cd0: 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20 24 62 setchildrevnr $b
4ce0: 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d 0a 09 72 ranchrevnr..}..r
4cf0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
4d00: 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72 61 6e method Rev2Bran
4d10: 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 20 20 20 ch {revnr} {.
4d20: 20 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 integrity a
4d30: 73 73 65 72 74 20 7b 21 5b 72 65 76 20 69 73 74 ssert {![rev ist
4d40: 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 runkrevnr $revnr
4d50: 5d 7d 20 7b 45 78 70 65 63 74 65 64 20 61 20 62 ]} {Expected a b
4d60: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 6e ranch revision n
4d70: 75 6d 62 65 72 7d 0a 09 72 65 74 75 72 6e 20 24 umber}..return $
4d80: 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20 mybranches([rev
4d90: 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72 2branchnr $revnr
4da0: 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 ]). }.. me
4db0: 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65 thod AddUnlabele
4dc0: 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e dBranch {branchn
4dd0: 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73 r} {..return [$s
4de0: 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e elf AddBranch un
4df0: 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e labeled-$branchn
4e00: 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20 r $branchnr].
4e10: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 }.. method A
4e20: 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62 ddBranch {name b
4e30: 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b ranchnr} {..if {
4e40: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62 [info exists myb
4e50: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e ranches($branchn
4e60: 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 r)]} {.. log
4e70: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e write 1 file "In
4e80: 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e '$mypath': Bran
4e90: 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e ch '$branchnr' n
4ea0: 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68 amed '[$mybranch
4eb0: 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61 es($branchnr) na
4ec0: 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77 me]'".. log w
4ed0: 72 69 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e rite 1 file "Can
4ee0: 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20 not have second
4ef0: 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67 name '$name', ig
4f00: 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20 noring it"..
4f10: 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62 return..}..set b
4f20: 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f ranch [sym %AUTO
4f30: 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 % branch $branch
4f40: 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 nr [$myproject g
4f50: 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20 etsymbol $name]
4f60: 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e 63 68 20 $self]..$branch
4f70: 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e 63 setposition [inc
4f80: 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a 09 r mybranchcnt]..
4f90: 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24 set mybranches($
4fa0: 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61 6e 63 branchnr) $branc
4fb0: 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61 6e 63 h..return $branc
4fc0: 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 h. }.. met
4fd0: 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61 6d 65 hod AddTag {name
4fe0: 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 74 revnr} {..set t
4ff0: 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 74 ag [sym %AUTO% t
5000: 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79 70 72 ag $revnr [$mypr
5010: 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 oject getsymbol
5020: 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 6c $name] $self]..l
5030: 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28 24 72 append mytags($r
5040: 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65 74 75 evnr) $tag..retu
5050: 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a 0a 20 rn $tag. }..
5060: 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 method Record
5070: 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65 BasicDependencie
5080: 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 7b s {revnr next} {
5090: 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65 20 72 ..# Handle the r
50a0: 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 6e evision dependen
50b0: 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74 68 65 cies. Record the
50c0: 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 23 m for now, do..#
50d0: 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20 74 68 nothing with th
50e0: 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 74 em yet....# On t
50f0: 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27 6e 65 he trunk the 'ne
5100: 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 xt' field points
5110: 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 to the previous
5120: 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 2e ..# revision, i.
5130: 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74 5f 20 e. the _parent_
5140: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f of the current o
5150: 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 20 ne. Example:..#
5160: 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20 31 2e 1.6's next is 1.
5170: 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 64 5 (modulo cvs ad
5180: 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f 6e min -o)....# Con
5190: 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 61 trarily on a bra
51a0: 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27 20 66 nch the 'next' f
51b0: 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 ield points to t
51c0: 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20 5f 63 he..# primary _c
51d0: 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 72 hild_ of the cur
51e0: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 41 rent revision. A
51f0: 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 2e s example,..# 1.
5200: 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27 20 77 1.3.2's 'next' w
5210: 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e 0a ill be 1.1.3.3..
5220: 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27 20 66 ..# The 'next' f
5230: 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 6c ield actually al
5240: 77 61 79 73 20 72 65 66 65 72 73 20 74 6f 20 74 ways refers to t
5250: 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 63 he revision..# c
5260: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 65 ontaining the de
5270: 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20 72 65 lta needed to re
5280: 74 72 69 65 76 65 20 74 68 61 74 20 72 65 76 69 trieve that revi
5290: 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 65 sion....# The de
52a0: 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 65 pendencies neede
52b0: 64 20 68 65 72 65 20 61 72 65 20 74 68 65 20 6c d here are the l
52c0: 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75 72 65 ogical structure
52d0: 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68 69 6c ,..# parent/chil
52e0: 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 69 d, and not the i
52f0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 mplementation de
5300: 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 23 pendent delta..#
5310: 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 20 pointers....if
5320: 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20 72 65 {$next eq ""} re
5330: 74 75 72 6e 0a 09 23 20 20 20 20 20 20 20 20 20 turn..#
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5350: 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 parent -> child
5360: 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 ..if {[rev istru
5370: 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d nkrevnr $revnr]}
5380: 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 {.. lappend
5390: 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 mydependencies $
53a0: 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 65 next $revnr..} e
53b0: 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 lse {.. lappe
53c0: 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 nd mydependencie
53d0: 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09 s $revnr $next..
53e0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
53f0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 . method Proc
5400: 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 essPrimaryDepend
5410: 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 encies {} {..for
5420: 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65 76 6e each {parentrevn
5430: 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20 24 6d r childrevnr} $m
5440: 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 0a ydependencies {.
5450: 09 20 20 20 20 73 65 74 20 70 61 72 65 6e 74 20 . set parent
5460: 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74 72 65 $myrev($parentre
5470: 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20 63 68 vnr).. set ch
5480: 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63 68 69 ild $myrev($chi
5490: 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20 24 70 ldrevnr).. $p
54a0: 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64 20 24 arent setchild $
54b0: 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c child.. $chil
54c0: 64 20 73 65 74 70 61 72 65 6e 74 20 24 70 61 72 d setparent $par
54d0: 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 ent..}..return.
54e0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
54f0: 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44 65 ProcessBranchDe
5500: 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a pendencies {} {.
5510: 09 66 6f 72 65 61 63 68 20 7b 62 72 61 6e 63 68 .foreach {branch
5520: 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 nr branch} [arra
5530: 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 y get mybranches
5540: 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72 65 76 ] {.. set rev
5550: 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 nr [$branch pare
5560: 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20 69 ntrevnr]... i
5570: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists
5580: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d myrev($revnr)]}
5590: 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 {...log write 1
55a0: 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 file "In '$mypa
55b0: 74 68 27 3a 20 54 68 65 20 62 72 61 6e 63 68 20 th': The branch
55c0: 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d 27 '[$branch name]'
55d0: 20 72 65 66 65 72 65 6e 63 65 73 22 0a 09 09 6c references"...l
55e0: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 og write 1 file
55f0: 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 73 "the bogus revis
5600: 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64 ion '$revnr' and
5610: 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 will be ignored
5620: 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 64 65 73 ."...$branch des
5630: 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79 62 troy...unset myb
5640: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e ranches($branchn
5650: 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b r).. } else {
5660: 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 ...set rev $myre
5670: 76 28 24 72 65 76 6e 72 29 0a 09 09 24 72 65 76 v($revnr)...$rev
5680: 20 61 64 64 62 72 61 6e 63 68 20 24 62 72 61 6e addbranch $bran
5690: 63 68 0a 09 09 24 62 72 61 6e 63 68 20 73 65 74 ch...$branch set
56a0: 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09 09 23 parent $rev....#
56b0: 20 49 66 20 72 65 76 69 73 69 6f 6e 73 20 77 65 If revisions we
56c0: 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 re committed on
56d0: 74 68 65 20 62 72 61 6e 63 68 20 77 65 20 73 74 the branch we st
56e0: 6f 72 65 20 61 0a 09 09 23 20 72 65 66 65 72 65 ore a...# refere
56f0: 6e 63 65 20 74 6f 20 74 68 65 20 62 72 61 6e 63 nce to the branc
5700: 68 20 74 68 65 72 65 2c 20 61 6e 64 20 66 75 72 h there, and fur
5710: 74 68 65 72 20 64 65 63 6c 61 72 65 0a 09 09 23 ther declare...#
5720: 20 74 68 65 20 66 69 72 73 74 20 63 68 69 6c 64 the first child
5730: 27 73 20 70 61 72 65 6e 74 20 74 6f 20 62 65 20 's parent to be
5740: 62 72 61 6e 63 68 27 73 20 70 61 72 65 6e 74 2c branch's parent,
5750: 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 20 74 68 and...# list th
5760: 69 73 20 63 68 69 6c 64 20 69 6e 20 74 68 65 20 is child in the
5770: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e parent revision.
5780: 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e 63 68 ....if {[$branch
5790: 20 68 61 73 63 68 69 6c 64 72 65 76 5d 7d 20 7b haschildrev]} {
57a0: 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 ... set child
57b0: 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 63 revnr [$branch c
57c0: 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20 20 hildrevnr]...
57d0: 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79 72 65 set child $myre
57e0: 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 09 v($childrevnr)..
57f0: 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 . $branch set
5800: 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09 09 child $child....
5810: 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 $child setpa
5820: 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e rentbranch $bran
5830: 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c 64 20 ch... $child
5840: 73 65 74 70 61 72 65 6e 74 20 20 20 20 20 20 20 setparent
5850: 24 72 65 76 0a 09 09 20 20 20 20 24 72 65 76 20 $rev... $rev
5860: 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 addchildonbranch
5870: 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20 20 $child...}..
5880: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 }..}..return.
5890: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
58a0: 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b 7d 20 SortBranches {}
58b0: 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e {..foreach {revn
58c0: 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 r rev} [array ge
58d0: 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65 76 20 t myrev] { $rev
58e0: 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d 0a 09 sortbranches }..
58f0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
5900: 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 method Process
5910: 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65 73 20 TagDependencies
5920: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 {} {..foreach {r
5930: 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b 61 evnr taglist} [a
5940: 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d rray get mytags]
5950: 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e {.. if {![in
5960: 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 fo exists myrev(
5970: 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73 65 $revnr)]} {...se
5980: 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74 61 t n [llength $ta
5990: 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72 69 glist]...log wri
59a0: 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 te 1 file "In '$
59b0: 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66 6f 6c mypath': The fol
59c0: 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20 74 lowing [nsp $n t
59d0: 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22 0a 09 ag] reference"..
59e0: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c .log write 1 fil
59f0: 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 e "the bogus rev
5a00: 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 ision '$revnr' a
5a10: 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 nd will be ignor
5a20: 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68 20 74 ed."...foreach t
5a30: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 ag $taglist {...
5a40: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 log write 1
5a50: 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61 67 20 file " [$tag
5a60: 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24 74 61 name]"... $ta
5a70: 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09 09 g destroy...}...
5a80: 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24 72 65 unset mytags($re
5a90: 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 vnr).. } else
5aa0: 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 {...set rev $my
5ab0: 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 66 6f rev($revnr)...fo
5ac0: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 reach tag $tagli
5ad0: 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20 st {... $rev
5ae0: 61 64 64 74 61 67 20 20 20 20 24 74 61 67 0a 09 addtag $tag..
5af0: 09 20 20 20 20 24 74 61 67 20 73 65 74 74 61 67 . $tag settag
5b00: 72 65 76 20 24 72 65 76 0a 09 09 7d 0a 09 20 20 rev $rev...}..
5b10: 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 }..}..return.
5b20: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
5b30: 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f DetermineTheRoo
5b40: 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09 tRevision {} {..
5b50: 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20 74 68 # The root is th
5b60: 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 77 e one revision w
5b70: 68 69 63 68 20 68 61 73 20 6e 6f 20 70 61 72 65 hich has no pare
5b80: 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 63 6b 69 nt. By..# checki
5b90: 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 ng all revisions
5ba0: 20 77 65 20 65 6e 73 75 72 65 20 74 68 61 74 20 we ensure that
5bb0: 77 65 20 63 61 6e 20 64 65 74 65 63 74 20 61 6e we can detect an
5bc0: 64 0a 09 23 20 72 65 70 6f 72 74 20 74 68 65 20 d..# report the
5bd0: 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c 65 case of multiple
5be0: 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74 20 roots. Without
5bf0: 74 68 61 74 20 77 65 20 63 6f 75 6c 64 0a 09 23 that we could..#
5c00: 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e 65 simply take one
5c10: 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 66 6f revision and fo
5c20: 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 6e 74 20 llow the parent
5c30: 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65 69 links to..# thei
5c40: 72 20 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a 0a r root (sic!)...
5c50: 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 .foreach {revnr
5c60: 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20 rev} [array get
5c70: 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20 69 66 myrev] {.. if
5c80: 20 7b 5b 24 72 65 76 20 68 61 73 70 61 72 65 6e {[$rev hasparen
5c90: 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 t]} continue..
5ca0: 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 integrity asse
5cb0: 72 74 20 7b 24 6d 79 72 6f 6f 74 20 65 71 20 22 rt {$myroot eq "
5cc0: 22 7d 20 7b 4d 75 6c 74 69 70 6c 65 20 72 6f 6f "} {Multiple roo
5cd0: 74 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e t revisions foun
5ce0: 64 7d 0a 09 20 20 20 20 73 65 74 20 6d 79 72 6f d}.. set myro
5cf0: 6f 74 20 24 72 65 76 0a 09 7d 0a 0a 09 23 20 49 ot $rev..}...# I
5d00: 6e 20 74 68 65 20 66 75 74 75 72 65 20 77 65 20 n the future we
5d10: 61 6c 73 6f 20 6e 65 65 64 20 61 20 6c 69 73 74 also need a list
5d20: 2c 20 61 73 20 62 72 61 6e 63 68 65 73 20 63 61 , as branches ca
5d30: 6e 20 62 65 63 6f 6d 65 0a 09 23 20 73 65 76 65 n become..# seve
5d40: 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20 70 red from their p
5d50: 61 72 65 6e 74 2c 20 6d 61 6b 69 6e 67 20 74 68 arent, making th
5d60: 65 6d 20 74 68 65 69 72 20 6f 77 6e 20 72 6f 6f em their own roo
5d70: 74 2e 0a 09 73 65 74 20 6d 79 72 6f 6f 74 73 20 t...set myroots
5d80: 5b 6c 69 73 74 20 24 6d 79 72 6f 6f 74 5d 0a 09 [list $myroot]..
5d90: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
5da0: 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69 method Determi
5db0: 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 74 neRevisionOperat
5dc0: 69 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 ions {} {..forea
5dd0: 63 68 20 72 65 76 20 24 6d 79 72 65 76 69 73 69 ch rev $myrevisi
5de0: 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 74 65 72 ons { $rev deter
5df0: 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20 7d 0a mineoperation }.
5e00: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
5e10: 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d method Determ
5e20: 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f ineLinesOfDevelo
5e30: 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 46 6f pment {} {..# Fo
5e40: 72 20 72 65 76 69 73 69 6f 6e 73 20 74 68 69 73 r revisions this
5e50: 20 68 61 73 20 62 65 65 6e 20 64 6f 6e 65 20 61 has been done a
5e60: 6c 72 65 61 64 79 2c 20 69 6e 20 27 65 78 74 65 lready, in 'exte
5e70: 6e 64 27 2e 20 4e 6f 77 0a 09 23 20 77 65 20 64 nd'. Now..# we d
5e80: 6f 20 74 68 69 73 20 66 6f 72 20 74 68 65 20 62 o this for the b
5e90: 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67 73 ranches and tags
5ea0: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62 ....foreach {_ b
5eb0: 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 ranch} [array ge
5ec0: 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a t mybranches] {.
5ed0: 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 . $branch set
5ee0: 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f lod [$self GetLO
5ef0: 44 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e D [$branch paren
5f00: 74 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09 66 6f trevnr]]..}...fo
5f10: 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 73 74 reach {_ taglist
5f20: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 } [array get myt
5f30: 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 ags] {.. fore
5f40: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 ach tag $taglist
5f50: 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c 6f 64 {...$tag setlod
5f60: 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 5b [$self GetLOD [
5f70: 24 74 61 67 20 74 61 67 72 65 76 6e 72 5d 5d 0a $tag tagrevnr]].
5f80: 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 . }..}..retur
5f90: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
5fa0: 68 6f 64 20 47 65 74 4c 4f 44 20 7b 72 65 76 6e hod GetLOD {revn
5fb0: 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20 69 r} {..if {[rev i
5fc0: 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 strunkrevnr $rev
5fd0: 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 75 nr]} {.. retu
5fe0: 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 7d 20 65 rn $mytrunk..} e
5ff0: 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 74 75 72 lse {.. retur
6000: 6e 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 n [$self Rev2Bra
6010: 6e 63 68 20 24 72 65 76 6e 72 5d 0a 09 7d 0a 20 nch $revnr]..}.
6020: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
6030: 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 HandleNonTrunkD
6040: 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b 7d 20 efaultBranch {}
6050: 7b 0a 09 73 65 74 20 72 65 76 6c 69 73 74 20 5b {..set revlist [
6060: 24 73 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b 44 65 $self NonTrunkDe
6070: 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73 5d 0a faultRevisions].
6080: 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 .if {![llength $
6090: 72 65 76 6c 69 73 74 5d 7d 20 72 65 74 75 72 6e revlist]} return
60a0: 0a 0a 09 24 73 65 6c 66 20 41 64 6a 75 73 74 4e ...$self AdjustN
60b0: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 onTrunkDefaultBr
60c0: 61 6e 63 68 20 24 72 65 76 6c 69 73 74 0a 09 24 anch $revlist..$
60d0: 73 65 6c 66 20 43 68 65 63 6b 4c 4f 44 73 0a 09 self CheckLODs..
60e0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
60f0: 20 20 6d 65 74 68 6f 64 20 4e 6f 6e 54 72 75 6e method NonTrun
6100: 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e kDefaultRevision
6110: 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 s {} {..# From c
6120: 76 73 32 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f vs2svn the follo
6130: 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e wing explanation
6140: 20 28 77 69 74 68 20 6d 6f 64 69 66 69 63 61 74 (with modificat
6150: 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75 72 20 ions..# for our
6160: 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20 algorithm):...#
6170: 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 Determine whethe
6180: 72 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 r there are any
6190: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul
61a0: 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 76 69 t branch..# revi
61b0: 73 69 6f 6e 73 2e 0a 0a 09 23 20 49 66 20 61 20 sions....# If a
61c0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul
61d0: 74 20 62 72 61 6e 63 68 20 69 73 20 64 65 74 65 t branch is dete
61e0: 72 6d 69 6e 65 64 20 74 6f 20 68 61 76 65 20 65 rmined to have e
61f0: 78 69 73 74 65 64 2c 0a 09 23 20 72 65 74 75 72 xisted,..# retur
6200: 6e 20 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 n a list of obje
6210: 63 74 73 20 66 6f 72 20 61 6c 6c 20 72 65 76 69 cts for all revi
6220: 73 69 6f 6e 73 20 74 68 61 74 20 77 65 72 65 20 sions that were
6230: 6f 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e once..# non-trun
6240: 6b 20 64 65 66 61 75 6c 74 20 72 65 76 69 73 69 k default revisi
6250: 6f 6e 73 2c 20 69 6e 20 64 65 70 65 6e 64 65 6e ons, in dependen
6260: 63 79 20 6f 72 64 65 72 20 28 69 2e 65 2e 20 72 cy order (i.e. r
6270: 6f 6f 74 0a 09 23 20 66 69 72 73 74 29 2e 0a 0a oot..# first)...
6280: 09 23 20 54 68 65 72 65 20 61 72 65 20 74 77 6f .# There are two
6290: 20 63 61 73 65 73 20 74 6f 20 68 61 6e 64 6c 65 cases to handle
62a0: 3a 0a 0a 09 23 20 4f 6e 65 20 63 61 73 65 20 69 :...# One case i
62b0: 73 20 73 69 6d 70 6c 65 2e 20 20 54 68 65 20 52 s simple. The R
62c0: 43 53 20 66 69 6c 65 20 6c 69 73 74 73 20 61 20 CS file lists a
62d0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 default branch..
62e0: 23 20 65 78 70 6c 69 63 69 74 6c 79 20 69 6e 20 # explicitly in
62f0: 69 74 73 20 68 65 61 64 65 72 2c 20 73 75 63 68 its header, such
6300: 20 61 73 20 27 31 2e 31 2e 31 27 2e 20 20 49 6e as '1.1.1'. In
6310: 20 74 68 69 73 20 63 61 73 65 2c 20 77 65 0a 09 this case, we..
6320: 23 20 6b 6e 6f 77 20 74 68 61 74 20 65 76 65 72 # know that ever
6330: 79 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 y revision on th
6340: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 e vendor branch
6350: 69 73 20 74 6f 20 62 65 0a 09 23 20 74 72 65 61 is to be..# trea
6360: 74 65 64 20 61 73 20 68 65 61 64 20 6f 66 20 74 ted as head of t
6370: 72 75 6e 6b 20 61 74 20 74 68 61 74 20 70 6f 69 runk at that poi
6380: 6e 74 20 69 6e 20 74 69 6d 65 2e 0a 0a 09 23 20 nt in time....#
6390: 42 75 74 20 74 68 65 72 65 27 73 20 61 6c 73 6f But there's also
63a0: 20 61 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 a degenerate ca
63b0: 73 65 2e 20 20 54 68 65 20 52 43 53 20 66 69 6c se. The RCS fil
63c0: 65 20 64 6f 65 73 20 6e 6f 74 0a 09 23 20 63 75 e does not..# cu
63d0: 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 20 64 rrently have a d
63e0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 79 efault branch, y
63f0: 65 74 20 77 65 20 63 61 6e 20 64 65 64 75 63 65 et we can deduce
6400: 20 74 68 61 74 20 66 6f 72 0a 09 23 20 73 6f 6d that for..# som
6410: 65 20 70 65 72 69 6f 64 20 69 6e 20 74 68 65 20 e period in the
6420: 70 61 73 74 20 69 74 20 70 72 6f 62 61 62 6c 79 past it probably
6430: 20 2a 64 69 64 2a 20 68 61 76 65 20 6f 6e 65 2e *did* have one.
6440: 20 20 46 6f 72 0a 09 23 20 65 78 61 6d 70 6c 65 For..# example
6450: 2c 20 74 68 65 20 66 69 6c 65 20 68 61 73 20 76 , the file has v
6460: 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 endor revisions
6470: 31 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e 31 2e 31 1.1.1.1 -> 1.1.1
6480: 2e 39 36 2c 0a 09 23 20 61 6c 6c 20 6f 66 20 77 .96,..# all of w
6490: 68 69 63 68 20 61 72 65 20 64 61 74 65 64 20 62 hich are dated b
64a0: 65 66 6f 72 65 20 31 2e 32 2c 20 61 6e 64 20 74 efore 1.2, and t
64b0: 68 65 6e 20 69 74 20 68 61 73 20 31 2e 31 2e 31 hen it has 1.1.1
64c0: 2e 39 37 0a 09 23 20 2d 3e 20 31 2e 31 2e 31 2e .97..# -> 1.1.1.
64d0: 31 30 30 20 64 61 74 65 64 20 61 66 74 65 72 20 100 dated after
64e0: 31 2e 32 2e 20 20 49 6e 20 74 68 69 73 20 63 61 1.2. In this ca
64f0: 73 65 2c 20 77 65 20 73 68 6f 75 6c 64 0a 09 23 se, we should..#
6500: 20 72 65 63 6f 72 64 20 31 2e 31 2e 31 2e 39 36 record 1.1.1.96
6510: 20 61 73 20 74 68 65 20 6c 61 73 74 20 76 65 6e as the last ven
6520: 64 6f 72 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 dor revision to
6530: 68 61 76 65 20 62 65 65 6e 20 74 68 65 0a 09 23 have been the..#
6540: 20 68 65 61 64 20 6f 66 20 74 68 65 20 64 65 66 head of the def
6550: 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 0a 09 69 ault branch....i
6560: 66 20 7b 24 6d 79 70 72 69 6e 63 69 70 61 6c 20 f {$myprincipal
6570: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 ne ""} {.. #
6580: 54 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 61 There is still a
6590: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 3b default branch;
65a0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 that means that
65b0: 20 61 6c 6c 0a 09 20 20 20 20 23 20 72 65 76 69 all.. # revi
65c0: 73 69 6f 6e 73 20 6f 6e 20 74 68 61 74 20 62 72 sions on that br
65d0: 61 6e 63 68 20 67 65 74 20 6d 61 72 6b 65 64 2e anch get marked.
65e0: 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 ... log write
65f0: 20 35 20 66 69 6c 65 20 22 46 6f 75 6e 64 20 65 5 file "Found e
6600: 78 70 6c 69 63 69 74 6c 79 20 6d 61 72 6b 65 64 xplicitly marked
6610: 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 NTDB"... set
6620: 20 72 6e 65 78 74 20 5b 24 6d 79 72 6f 6f 74 20 rnext [$myroot
6630: 63 68 69 6c 64 5d 0a 09 20 20 20 20 69 66 20 7b child].. if {
6640: 24 72 6e 65 78 74 20 6e 65 20 22 22 7d 20 7b 0a $rnext ne ""} {.
6650: 09 09 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 ..trouble fatal
6660: 22 46 69 6c 65 20 77 69 74 68 20 64 65 66 61 75 "File with defau
6670: 6c 74 20 62 72 61 6e 63 68 20 24 6d 79 70 72 69 lt branch $mypri
6680: 6e 63 69 70 61 6c 20 61 6c 73 6f 20 68 61 73 20 ncipal also has
6690: 72 65 76 69 73 69 6f 6e 20 5b 24 72 6e 65 78 74 revision [$rnext
66a0: 20 72 65 76 6e 72 5d 22 0a 09 09 72 65 74 75 72 revnr]"...retur
66b0: 6e 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73 n.. }... s
66c0: 65 74 20 72 65 76 20 5b 24 6d 79 62 72 61 6e 63 et rev [$mybranc
66d0: 68 65 73 28 24 6d 79 70 72 69 6e 63 69 70 61 6c hes($myprincipal
66e0: 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 65 ) child].. se
66f0: 74 20 72 65 73 20 7b 7d 0a 0a 09 20 20 20 20 77 t res {}... w
6700: 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 hile {$rev ne ""
6710: 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72 65 } {...lappend re
6720: 73 20 24 72 65 76 0a 09 09 73 65 74 20 72 65 76 s $rev...set rev
6730: 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 20 [$rev child]..
6740: 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 }... retur
6750: 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 69 n $res...} elsei
6760: 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 7d 20 f {$myimported}
6770: 7b 0a 09 20 20 20 20 23 20 4e 6f 20 64 65 66 61 {.. # No defa
6780: 75 6c 74 20 62 72 61 6e 63 68 2c 20 62 75 74 20 ult branch, but
6790: 74 68 65 20 66 69 6c 65 20 61 70 70 65 61 72 73 the file appears
67a0: 20 74 6f 20 68 61 76 65 20 62 65 65 6e 0a 09 20 to have been..
67b0: 20 20 20 23 20 69 6d 70 6f 72 74 65 64 2e 20 20 # imported.
67c0: 53 6f 20 6f 75 72 20 65 64 75 63 61 74 65 64 20 So our educated
67d0: 67 75 65 73 73 20 69 73 20 74 68 61 74 20 61 6c guess is that al
67e0: 6c 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 l revisions..
67f0: 20 23 20 6f 6e 20 74 68 65 20 27 31 2e 31 2e 31 # on the '1.1.1
6800: 27 20 62 72 61 6e 63 68 20 77 69 74 68 20 74 69 ' branch with ti
6810: 6d 65 73 74 61 6d 70 73 20 70 72 69 6f 72 20 74 mestamps prior t
6820: 6f 20 74 68 65 0a 09 20 20 20 20 23 20 74 69 6d o the.. # tim
6830: 65 73 74 61 6d 70 20 6f 66 20 27 31 2e 32 27 20 estamp of '1.2'
6840: 77 65 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 were non-trunk d
6850: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 20 efault branch..
6860: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a # revisions..
6870: 0a 09 20 20 20 20 23 20 54 68 69 73 20 72 65 61 .. # This rea
6880: 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f 63 65 73 73 lly only process
6890: 65 73 20 73 74 61 6e 64 61 72 64 20 27 31 2e 31 es standard '1.1
68a0: 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a 09 20 20 20 .1.*'-style..
68b0: 20 23 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 # vendor revisi
68c0: 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f 75 6c 64 20 ons. One could
68d0: 63 6f 6e 63 65 69 76 61 62 6c 79 20 68 61 76 65 conceivably have
68e0: 20 61 20 66 69 6c 65 0a 09 20 20 20 20 23 20 77 a file.. # w
68f0: 68 6f 73 65 20 64 65 66 61 75 6c 74 20 62 72 61 hose default bra
6900: 6e 63 68 20 69 73 20 31 2e 31 2e 33 20 6f 72 20 nch is 1.1.3 or
6910: 77 68 61 74 65 76 65 72 2c 20 6f 72 20 77 61 73 whatever, or was
6920: 20 74 68 61 74 0a 09 20 20 20 20 23 20 61 74 20 that.. # at
6930: 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e 20 74 69 some point in ti
6940: 6d 65 2c 20 77 69 74 68 20 76 65 6e 64 6f 72 20 me, with vendor
6950: 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 33 2e revisions 1.1.3.
6960: 31 2c 0a 09 20 20 20 20 23 20 31 2e 31 2e 33 2e 1,.. # 1.1.3.
6970: 32 2c 20 65 74 63 2e 20 20 42 75 74 20 77 69 74 2, etc. But wit
6980: 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 h the default br
6990: 61 6e 63 68 20 67 6f 6e 65 20 6e 6f 77 2c 0a 09 anch gone now,..
69a0: 20 20 20 20 23 20 77 65 27 64 20 68 61 76 65 20 # we'd have
69b0: 6e 6f 20 62 61 73 69 73 20 66 6f 72 20 61 73 73 no basis for ass
69c0: 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20 6e uming that the n
69d0: 6f 6e 2d 73 74 61 6e 64 61 72 64 0a 09 20 20 20 on-standard..
69e0: 20 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 # vendor branch
69f0: 20 68 61 64 20 65 76 65 72 20 62 65 65 6e 20 74 had ever been t
6a00: 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 he default branc
6a10: 68 20 61 6e 79 77 61 79 2e 0a 0a 09 20 20 20 20 h anyway....
6a20: 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 72 # Note that we r
6a30: 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73 6f ely on compariso
6a40: 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 ns between the t
6a50: 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 20 23 imestamps.. #
6a60: 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e of the revision
6a70: 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 s on the vendor
6a80: 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61 74 20 branch and that
6a90: 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 of.. # revisi
6aa0: 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 68 6f on 1.2, even tho
6ab0: 75 67 68 20 74 68 65 20 74 69 6d 65 73 74 61 6d ugh the timestam
6ac0: 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20 20 20 ps might be..
6ad0: 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64 75 65 # incorrect due
6ae0: 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e 20 to clock skew.
6af0: 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 20 73 We could do a s
6b00: 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23 20 62 lightly.. # b
6b10: 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77 65 20 etter job if we
6b20: 75 73 65 64 20 74 68 65 20 63 68 61 6e 67 65 73 used the changes
6b30: 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c 20 61 et timestamps, a
6b40: 73 20 69 74 20 69 73 0a 09 20 20 20 20 23 20 70 s it is.. # p
6b50: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74 68 65 ossible that the
6b60: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74 68 dependencies th
6b70: 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20 20 at went into..
6b80: 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 # determining
6b90: 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d 70 73 those timestamps
6ba0: 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75 72 61 are more accura
6bb0: 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20 23 20 te. But.. #
6bc0: 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71 75 69 that would requi
6bd0: 72 65 20 61 6e 20 65 78 74 72 61 20 70 61 73 73 re an extra pass
6be0: 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20 69 or two.... i
6bf0: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists
6c00: 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 2e mybranches(1.1.
6c10: 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b 7d 1)]} { return {}
6c20: 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 }... log wri
6c30: 74 65 20 35 20 66 69 6c 65 20 22 44 65 64 75 63 te 5 file "Deduc
6c40: 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 ed existence of
6c50: 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 20 NTDB"... set
6c60: 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 68 65 rev [$mybranche
6c70: 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d 0a s(1.1.1) child].
6c80: 09 20 20 20 20 73 65 74 20 72 65 73 20 20 7b 7d . set res {}
6c90: 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b .. set stop [
6ca0: 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 0a $myroot child]..
6cb0: 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20 65 . if {$stop e
6cc0: 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 74 20 q ""} {...# Get
6cd0: 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 everything on th
6ce0: 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69 6c 65 e branch...while
6cf0: 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a {$rev ne ""} {.
6d00: 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .. lappend re
6d10: 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 74 s $rev... set
6d20: 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 rev [$rev child
6d30: 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73 ]...}.. } els
6d40: 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74 20 e {...# Collect
6d50: 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 everything on th
6d60: 65 20 62 72 61 6e 63 68 20 77 68 69 63 68 20 73 e branch which s
6d70: 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 09 23 eems to have...#
6d80: 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64 20 been committed
6d90: 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 before the first
6da0: 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f primary child o
6db0: 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 20 72 f the...# root r
6dc0: 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20 73 evision....set s
6dd0: 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 20 64 topdate [$stop d
6de0: 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24 72 ate]...while {$r
6df0: 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 ev ne ""} {...
6e00: 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61 74 65 if {[$rev date
6e10: 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d 20 ] >= $stopdate}
6e20: 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 70 70 break... lapp
6e30: 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 20 end res $rev...
6e40: 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 set rev [$rev
6e50: 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 child]...}..
6e60: 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20 }... return
6e70: 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b 0a $res...} else {.
6e80: 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a 09 . return {}..
6e90: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 47 }. }.. # G
6ea0: 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49 6e 20 eneral note: In
6eb0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 65 the following me
6ec0: 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20 6d 6f thods we only mo
6ed0: 64 69 66 79 20 74 68 65 20 6c 69 6e 6b 73 0a 20 dify the links.
6ee0: 20 20 20 23 20 62 65 74 77 65 65 6e 20 72 65 76 # between rev
6ef0: 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d 62 6f isions and symbo
6f00: 6c 73 20 74 6f 20 72 65 73 74 72 75 63 74 75 72 ls to restructur
6f10: 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 20 e the revision.
6f20: 20 20 20 23 20 74 72 65 65 2e 20 57 65 20 64 6f # tree. We do
6f30: 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 6f 79 __not__ destroy
6f40: 20 74 68 65 20 6f 62 6a 65 63 74 73 2e 20 47 69 the objects. Gi
6f50: 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65 78 20 ven the complex
6f60: 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 43 20 69 links. # GC i
6f70: 73 20 64 69 66 66 69 63 75 6c 74 20 61 74 20 74 s difficult at t
6f80: 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 20 69 73 his level. It is
6f90: 20 6d 75 63 68 20 65 61 73 69 65 72 20 74 6f 20 much easier to
6fa0: 64 72 6f 70 0a 20 20 20 20 23 20 65 76 65 72 79 drop. # every
6fb0: 74 68 69 6e 67 20 77 68 65 6e 20 77 65 20 77 65 thing when we we
6fc0: 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 69 73 20 are done. This
6fd0: 68 61 70 70 65 6e 73 20 69 6e 20 27 64 72 6f 70 happens in 'drop
6fe0: 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 23 20 74 ', using. # t
6ff0: 68 65 20 73 74 61 74 65 20 76 61 72 69 61 62 6c he state variabl
7000: 65 20 27 6d 79 72 65 76 27 2c 20 27 6d 79 62 72 e 'myrev', 'mybr
7010: 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 27 6d 79 anches', and 'my
7020: 74 61 67 73 27 2e 20 57 68 61 74 20 77 65 0a 20 tags'. What we.
7030: 20 20 20 23 20 68 61 76 65 20 74 6f 20 70 65 72 # have to per
7040: 73 69 73 74 2c 20 70 65 72 66 6f 72 6d 65 64 20 sist, performed
7050: 62 79 20 27 70 65 72 73 69 73 74 27 2c 20 77 65 by 'persist', we
7060: 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a 20 20 know will be.
7070: 20 20 23 20 72 65 61 63 68 61 62 6c 65 20 74 68 # reachable th
7080: 72 6f 75 67 68 20 74 68 65 20 72 65 76 69 73 69 rough the revisi
7090: 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e 20 27 6d ons listed in 'm
70a0: 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 68 65 69 yroots' and thei
70b0: 72 0a 20 20 20 20 23 20 63 68 69 6c 64 72 65 6e r. # children
70c0: 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a 0a 20 and symbols...
70d0: 20 20 20 6d 65 74 68 6f 64 20 41 64 6a 75 73 74 method Adjust
70e0: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 NonTrunkDefaultB
70f0: 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 74 7d 20 ranch {revlist}
7100: 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b 24 6d 79 {..set stop [$my
7110: 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23 20 72 root child] ;# r
7120: 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 20 77 ev '1.2'...log w
7130: 72 69 74 65 20 35 20 66 69 6c 65 20 22 41 64 6a rite 5 file "Adj
7140: 75 73 74 69 6e 67 20 4e 54 44 42 20 63 6f 6e 74 usting NTDB cont
7150: 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c 65 aining [nsp [lle
7160: 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d 20 72 ngth $revlist] r
7170: 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 46 72 evision]"...# Fr
7180: 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 om cvs2svn the f
7190: 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 ollowing explana
71a0: 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 tion (with modif
71b0: 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 ications..# for
71c0: 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a our algorithm):.
71d0: 0a 09 23 20 41 64 6a 75 73 74 20 74 68 65 20 6e ..# Adjust the n
71e0: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 on-trunk default
71f0: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e branch revision
7200: 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 09 s found in the..
7210: 23 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a 09 23 # 'revlist'....#
7220: 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 20 69 73 'myimported' is
7230: 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 20 a boolean flag
7240: 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 indicating wheth
7250: 65 72 20 74 68 69 73 20 66 69 6c 65 0a 09 23 20 er this file..#
7260: 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 20 appears to have
7270: 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c 20 77 been imported, w
7280: 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e 73 20 hich also means
7290: 74 68 61 74 0a 09 23 20 72 65 76 69 73 69 6f 6e that..# revision
72a0: 20 31 2e 31 20 68 61 73 20 61 20 67 65 6e 65 72 1.1 has a gener
72b0: 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 65 ated log message
72c0: 20 74 68 61 74 20 6e 65 65 64 20 6e 6f 74 20 62 that need not b
72d0: 65 0a 09 23 20 70 72 65 73 65 72 76 65 64 2e 20 e..# preserved.
72e0: 20 27 72 65 76 6c 69 73 74 27 20 69 73 20 61 20 'revlist' is a
72f0: 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 20 72 list of object r
7300: 65 66 65 72 65 6e 63 65 73 20 66 6f 72 20 74 68 eferences for th
7310: 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 74 e..# revisions t
7320: 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 64 65 hat have been de
7330: 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 6e termined to be n
7340: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 on-trunk default
7350: 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 ..# branch revis
7360: 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 74 ions....# Note t
7370: 68 61 74 20 74 68 65 20 66 69 72 73 74 20 72 65 hat the first re
7380: 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 64 65 vision on the de
7390: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 0a fault branch is.
73a0: 09 23 20 68 61 6e 64 6c 65 64 20 73 74 72 61 6e .# handled stran
73b0: 67 65 6c 79 20 62 79 20 43 56 53 2e 20 20 49 66 gely by CVS. If
73c0: 20 61 20 66 69 6c 65 20 69 73 20 69 6d 70 6f 72 a file is impor
73d0: 74 65 64 20 28 61 73 20 6f 70 70 6f 73 65 64 0a ted (as opposed.
73e0: 09 23 20 74 6f 20 62 65 69 6e 67 20 61 64 64 65 .# to being adde
73f0: 64 29 2c 20 43 56 53 20 63 72 65 61 74 65 73 20 d), CVS creates
7400: 61 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 2c 20 a 1.1 revision,
7410: 74 68 65 6e 20 63 72 65 61 74 65 73 20 61 0a 09 then creates a..
7420: 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 # vendor branch
7430: 31 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e 20 31 1.1.1 based on 1
7440: 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 .1, then creates
7450: 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20 72 65 a 1.1.1.1..# re
7460: 76 69 73 69 6f 6e 20 74 68 61 74 20 69 73 20 69 vision that is i
7470: 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 68 65 20 dentical to the
7480: 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 69 2e 1.1 revision (i.
7490: 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c 74 61 e., its..# delta
74a0: 74 65 78 74 20 69 73 20 65 6d 70 74 79 29 2e 20 text is empty).
74b0: 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 61 67 65 The log message
74c0: 20 74 68 61 74 20 74 68 65 20 75 73 65 72 20 74 that the user t
74d0: 79 70 65 64 0a 09 23 20 77 68 65 6e 20 69 6d 70 yped..# when imp
74e0: 6f 72 74 69 6e 67 20 69 73 20 73 74 6f 72 65 64 orting is stored
74f0: 20 77 69 74 68 20 74 68 65 20 31 2e 31 2e 31 2e with the 1.1.1.
7500: 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 54 68 65 1 revision. The
7510: 20 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 1.1..# revision
7520: 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 73 always contains
7530: 20 61 20 73 74 61 6e 64 61 72 64 2c 20 67 65 6e a standard, gen
7540: 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 erated log messa
7550: 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 61 6c 20 ge,..# 'Initial
7560: 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a 09 23 revision\n'....#
7570: 20 57 68 65 6e 20 77 65 20 64 65 74 65 63 74 20 When we detect
7580: 61 20 73 74 72 61 69 67 68 74 66 6f 72 77 61 72 a straightforwar
7590: 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20 74 68 d import like th
75a0: 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 23 20 74 is, we want..# t
75b0: 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 79 20 64 o handle it by d
75c0: 65 6c 65 74 69 6e 67 20 74 68 65 20 31 2e 31 20 eleting the 1.1
75d0: 72 65 76 69 73 69 6f 6e 20 28 77 68 69 63 68 20 revision (which
75e0: 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e 74 61 doesn't..# conta
75f0: 69 6e 20 61 6e 79 20 75 73 65 66 75 6c 20 69 6e in any useful in
7600: 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20 6d formation) and m
7610: 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20 69 6e aking 1.1.1.1 in
7620: 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70 65 6e to an..# indepen
7630: 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74 68 65 dent root in the
7640: 20 66 69 6c 65 27 73 20 64 65 70 65 6e 64 65 6e file's dependen
7650: 63 79 20 74 72 65 65 2e 20 20 49 6e 20 53 56 4e cy tree. In SVN
7660: 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77 69 6c ,..# 1.1.1.1 wil
7670: 6c 20 62 65 20 61 64 64 65 64 20 64 69 72 65 63 l be added direc
7680: 74 6c 79 20 74 6f 20 74 68 65 20 76 65 6e 64 6f tly to the vendo
7690: 72 20 62 72 61 6e 63 68 20 77 69 74 68 20 69 74 r branch with it
76a0: 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 63 6f 6e s..# initial con
76b0: 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e 20 61 tent. Then in a
76c0: 20 73 70 65 63 69 61 6c 20 27 70 6f 73 74 2d 63 special 'post-c
76d0: 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23 20 31 ommit', the..# 1
76e0: 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 .1.1.1 revision
76f0: 69 73 20 63 6f 70 69 65 64 20 62 61 63 6b 20 74 is copied back t
7700: 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 66 20 o trunk....# If
7710: 74 68 65 20 75 73 65 72 20 69 6d 70 6f 72 74 73 the user imports
7720: 20 61 67 61 69 6e 20 74 6f 20 74 68 65 20 73 61 again to the sa
7730: 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 me vendor branch
7740: 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 20 63 72 , then CVS..# cr
7750: 65 61 74 65 73 20 72 65 76 69 73 69 6f 6e 73 20 eates revisions
7760: 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 2e 33 1.1.1.2, 1.1.1.3
7770: 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 20 76 65 , etc. on the ve
7780: 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23 20 ndor branch,..#
7790: 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e 74 65 *without* counte
77a0: 72 70 61 72 74 73 20 69 6e 20 74 72 75 6e 6b 20 rparts in trunk
77b0: 28 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 (even though the
77c0: 73 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20 se revisions..#
77d0: 65 66 66 65 63 74 69 76 65 6c 79 20 70 6c 61 79 effectively play
77e0: 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 74 72 75 the role of tru
77f0: 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e 20 20 nk revisions).
7800: 53 6f 20 61 66 74 65 72 20 77 65 20 61 64 64 0a So after we add.
7810: 09 23 20 73 75 63 68 20 72 65 76 69 73 69 6f 6e .# such revision
7820: 73 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 20 s to the vendor
7830: 62 72 61 6e 63 68 2c 20 77 65 20 61 6c 73 6f 20 branch, we also
7840: 63 6f 70 79 20 74 68 65 6d 20 62 61 63 6b 20 74 copy them back t
7850: 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20 70 6f o..# trunk in po
7860: 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 23 20 st-commits....#
7870: 57 65 20 6d 61 72 6b 20 74 68 65 20 72 65 76 69 We mark the revi
7880: 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 27 sions found in '
7890: 72 65 76 6c 69 73 74 27 20 61 73 20 64 65 66 61 revlist' as defa
78a0: 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 ult branch..# re
78b0: 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f 2c 20 visions. Also,
78c0: 69 66 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69 if the root revi
78d0: 73 69 6f 6e 20 68 61 73 20 61 20 70 72 69 6d 61 sion has a prima
78e0: 72 79 20 63 68 69 6c 64 0a 09 23 20 77 65 20 73 ry child..# we s
78f0: 65 74 20 74 68 61 74 20 72 65 76 69 73 69 6f 6e et that revision
7900: 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 to depend on th
7910: 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 6e 6b e last non-trunk
7920: 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61 6e default..# bran
7930: 63 68 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 ch revision and
7940: 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 73 74 20 possibly adjust
7950: 69 74 73 20 74 79 70 65 20 61 63 63 6f 72 64 69 its type accordi
7960: 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69 72 73 ngly....set firs
7970: 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c 69 t [lindex $revli
7980: 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 st 0]...log writ
7990: 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 66 69 72 e 6 file "<[$fir
79a0: 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78 70 72 st revnr]> [expr
79b0: 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 3f 20 {$myimported ?
79c0: 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 22 6e 6f "imported" : "no
79d0: 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c 20 5b t imported"}], [
79e0: 24 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e $first operation
79f0: 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69 72 73 ], [expr {[$firs
7a00: 74 20 68 61 73 74 65 78 74 5d 20 3f 20 22 68 61 t hastext] ? "ha
7a10: 73 20 74 65 78 74 22 20 3a 20 22 6e 6f 20 74 65 s text" : "no te
7a20: 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 6d 79 xt"}]"...if {$my
7a30: 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 20 20 20 imported &&..
7a40: 20 5b 24 66 69 72 73 74 20 72 65 76 6e 72 5d 20 [$first revnr]
7a50: 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 26 26 0a eq "1.1.1.1" &&.
7a60: 09 20 20 20 20 5b 24 66 69 72 73 74 20 6f 70 65 . [$first ope
7a70: 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 68 61 6e ration] eq "chan
7a80: 67 65 22 20 26 26 0a 09 20 20 20 20 21 5b 24 66 ge" &&.. ![$f
7a90: 69 72 73 74 20 68 61 73 74 65 78 74 5d 7d 20 7b irst hastext]} {
7aa0: 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 31 31 ... set rev11
7ab0: 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 5d [$first parent]
7ac0: 20 3b 20 23 20 41 73 73 65 72 74 3a 20 53 68 6f ; # Assert: Sho
7ad0: 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e 0a 09 uld be myroot...
7ae0: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 20 log write 3
7af0: 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 69 file "Removing i
7b00: 72 72 65 6c 65 76 61 6e 74 20 72 65 76 69 73 69 rrelevant revisi
7b10: 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 76 6e 72 on [$rev11 revnr
7b20: 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f ]"... # Cut o
7b30: 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 72 6f 6f ut the old myroo
7b40: 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 20 20 t revision....
7b50: 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 ldelete myroot
7b60: 73 20 24 72 65 76 31 31 20 3b 20 23 20 4e 6f 74 s $rev11 ; # Not
7b70: 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f 6e 67 a root any long
7b80: 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 72 73 74 er.... $first
7b90: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 20 3b cutfromparent ;
7ba0: 20 23 20 53 65 76 65 72 20 72 65 76 69 73 69 6f # Sever revisio
7bb0: 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 72 65 n from parent re
7bc0: 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69 66 20 vision... if
7bd0: 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b 0a {$stop ne ""} {.
7be0: 09 09 24 73 74 6f 70 20 63 75 74 66 72 6f 6d 70 ..$stop cutfromp
7bf0: 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 arent...lappend
7c00: 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 20 3b 20 myroots $stop ;
7c10: 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66 74 65 # New root, afte
7c20: 72 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 0a r vendor branch.
7c30: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 . }... # C
7c40: 75 74 20 6f 75 74 20 74 68 65 20 76 65 6e 64 6f ut out the vendo
7c50: 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 0a r branch symbol.
7c60: 0a 09 20 20 20 20 73 65 74 20 76 65 6e 64 6f 72 .. set vendor
7c70: 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 62 [$first parentb
7c80: 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 6e 74 65 ranch].. inte
7c90: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 76 grity assert {$v
7ca0: 65 6e 64 6f 72 20 6e 65 20 22 22 7d 20 7b 46 69 endor ne ""} {Fi
7cb0: 72 73 74 20 4e 54 44 42 20 72 65 76 69 73 69 6f rst NTDB revisio
7cc0: 6e 20 68 61 73 20 6e 6f 20 62 72 61 6e 63 68 7d n has no branch}
7cd0: 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65 6e 64 .. if {[$vend
7ce0: 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20 24 72 or parent] eq $r
7cf0: 65 76 31 31 7d 20 7b 0a 09 09 24 72 65 76 31 31 ev11} {...$rev11
7d00: 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 removebranch
7d10: 20 20 20 20 20 24 76 65 6e 64 6f 72 0a 09 09 24 $vendor...$
7d20: 72 65 76 31 31 20 72 65 6d 6f 76 65 63 68 69 6c rev11 removechil
7d30: 64 6f 6e 62 72 61 6e 63 68 20 24 66 69 72 73 74 donbranch $first
7d40: 0a 09 09 24 76 65 6e 64 6f 72 20 63 75 74 62 72 ...$vendor cutbr
7d50: 61 6e 63 68 70 61 72 65 6e 74 20 20 20 20 3b 23 anchparent ;#
7d60: 20 62 70 20 3d 20 72 65 76 31 31 2c 20 61 62 6f bp = rev11, abo
7d70: 75 74 20 74 6f 20 62 65 20 67 6f 6e 65 0a 09 09 ut to be gone...
7d80: 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61 $first cutfrompa
7d90: 72 65 6e 74 62 72 61 6e 63 68 20 3b 23 20 70 62 rentbranch ;# pb
7da0: 20 3d 20 76 65 6e 64 6f 72 2c 20 74 6f 20 62 65 = vendor, to be
7db0: 20 61 20 64 65 74 61 63 68 65 64 20 4c 4f 44 0a a detached LOD.
7dc0: 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 ..lappend myroot
7dd0: 73 20 24 66 69 72 73 74 0a 09 20 20 20 20 7d 0a s $first.. }.
7de0: 0a 09 20 20 20 20 23 20 43 68 61 6e 67 65 20 74 .. # Change t
7df0: 68 65 20 74 79 70 65 20 6f 66 20 66 69 72 73 74 he type of first
7e00: 20 28 74 79 70 69 63 61 6c 6c 79 20 66 72 6f 6d (typically from
7e10: 20 43 68 61 6e 67 65 20 74 6f 20 41 64 64 29 3a Change to Add):
7e20: 0a 09 20 20 20 20 24 66 69 72 73 74 20 72 65 74 .. $first ret
7e30: 79 70 65 20 61 64 64 0a 0a 09 20 20 20 20 23 20 ype add... #
7e40: 4d 6f 76 65 20 61 6e 79 20 74 61 67 73 20 61 6e Move any tags an
7e50: 64 20 62 72 61 6e 63 68 65 73 20 66 72 6f 6d 20 d branches from
7e60: 74 68 65 20 6f 6c 64 20 74 6f 20 74 68 65 20 6e the old to the n
7e70: 65 77 20 72 6f 6f 74 2e 0a 09 20 20 20 20 24 72 ew root... $r
7e80: 65 76 31 31 20 6d 6f 76 65 73 79 6d 62 6f 6c 73 ev11 movesymbols
7e90: 74 6f 20 24 66 69 72 73 74 0a 09 7d 0a 0a 09 23 to $first..}...#
7ea0: 20 4d 61 72 6b 20 61 6c 6c 20 74 68 65 20 73 70 Mark all the sp
7eb0: 65 63 69 61 6c 20 72 65 76 69 73 69 6f 6e 73 20 ecial revisions
7ec0: 61 73 20 73 75 63 68 0a 09 66 6f 72 65 61 63 68 as such..foreach
7ed0: 20 72 65 76 20 24 72 65 76 6c 69 73 74 20 7b 0a rev $revlist {.
7ee0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 . log write 3
7ef0: 20 66 69 6c 65 20 22 52 65 76 69 73 69 6f 6e 20 file "Revision
7f00: 6f 6e 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 on default branc
7f10: 68 3a 20 5b 24 72 65 76 20 72 65 76 6e 72 5d 22 h: [$rev revnr]"
7f20: 0a 09 20 20 20 20 24 72 65 76 20 73 65 74 6f 6e .. $rev seton
7f30: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 31 0a defaultbranch 1.
7f40: 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f 70 20 6e .}...if {$stop n
7f50: 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 52 e ""} {.. # R
7f60: 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c 6f 67 69 evision 1.2 logi
7f70: 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 cally follows th
7f80: 65 20 69 6d 70 6f 72 74 65 64 20 72 65 76 69 73 e imported revis
7f90: 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20 6e 6f 74 ions,.. # not
7fa0: 20 31 2e 31 2e 20 20 41 63 63 6f 72 64 69 6e 67 1.1. According
7fb0: 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69 74 20 74 ly, connect it t
7fc0: 6f 20 74 68 65 20 6c 61 73 74 20 4e 54 44 42 52 o the last NTDBR
7fd0: 20 61 6e 64 0a 09 20 20 20 20 23 20 70 6f 73 73 and.. # poss
7fe0: 69 62 6c 79 20 63 68 61 6e 67 65 20 69 74 73 20 ibly change its
7ff0: 74 79 70 65 2e 0a 0a 09 20 20 20 20 73 65 74 20 type.... set
8000: 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 last [lindex $re
8010: 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20 20 20 20 vlist end]..
8020: 24 73 74 6f 70 20 73 65 74 64 65 66 61 75 6c 74 $stop setdefault
8030: 62 72 61 6e 63 68 70 61 72 65 6e 74 20 24 6c 61 branchparent $la
8040: 73 74 20 3b 20 23 20 52 65 74 79 70 65 73 20 74 st ; # Retypes t
8050: 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f 6f 2e he revision too.
8060: 0a 09 20 20 20 20 24 6c 61 73 74 20 73 65 74 64 .. $last setd
8070: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c efaultbranchchil
8080: 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09 72 65 74 d $stop..}..ret
8090: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
80a0: 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f 44 73 20 ethod CheckLODs
80b0: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 5f {} {..foreach {_
80c0: 20 62 72 61 6e 63 68 7d 20 20 5b 61 72 72 61 79 branch} [array
80d0: 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d get mybranches]
80e0: 20 7b 20 24 62 72 61 6e 63 68 20 63 68 65 63 6b { $branch check
80f0: 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b lod }..foreach {
8100: 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 _ taglist} [arra
8110: 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a y get mytags] {.
8120: 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 . foreach tag
8130: 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74 61 67 $taglist { $tag
8140: 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d 0a 09 checklod }..}..
8150: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
8160: 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 method RemoveI
8170: 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 74 69 6f rrelevantDeletio
8180: 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 ns {} {..# From
8190: 63 76 73 32 73 76 6e 3a 20 49 66 20 61 20 66 69 cvs2svn: If a fi
81a0: 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e 20 61 le is added on a
81b0: 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20 61 20 branch, then a
81c0: 74 72 75 6e 6b 0a 09 23 20 72 65 76 69 73 69 6f trunk..# revisio
81d0: 6e 20 69 73 20 61 64 64 65 64 20 61 74 20 74 68 n is added at th
81e0: 65 20 73 61 6d 65 20 74 69 6d 65 20 69 6e 20 74 e same time in t
81f0: 68 65 20 27 44 65 61 64 27 20 73 74 61 74 65 2e he 'Dead' state.
8200: 0a 09 23 20 54 68 69 73 20 72 65 76 69 73 69 6f ..# This revisio
8210: 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61 6e 79 n doesn't do any
8220: 74 68 69 6e 67 20 75 73 65 66 75 6c 2c 20 73 6f thing useful, so
8230: 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a 09 66 6f delete it....fo
8240: 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f reach root $myro
8250: 6f 74 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b ots {.. if {[
8260: 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 5d 7d $root isneeded]}
8270: 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 6c continue.. l
8280: 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c 65 20 og write 2 file
8290: 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 63 65 "Removing unnece
82a0: 73 73 61 72 79 20 64 65 61 64 20 72 65 76 69 73 ssary dead revis
82b0: 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 ion [$root revnr
82c0: 5d 22 0a 0a 09 20 20 20 20 23 20 52 65 6d 6f 76 ]"... # Remov
82d0: 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61 6b 65 20 e as root, make
82e0: 69 74 73 20 63 68 69 6c 64 20 6e 65 77 20 72 6f its child new ro
82f0: 6f 74 20 61 66 74 65 72 0a 09 20 20 20 20 23 20 ot after.. #
8300: 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 69 74 disconnecting it
8310: 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 73 69 from the revisi
8320: 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67 20 61 77 on just going aw
8330: 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 ay.... ldelet
8340: 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a e myroots $root.
8350: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 . if {[$root
8360: 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 haschild]} {...s
8370: 65 74 20 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20 et child [$root
8380: 63 68 69 6c 64 5d 0a 09 09 24 63 68 69 6c 64 20 child]...$child
8390: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 cutfromparent...
83a0: 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 lappend myroots
83b0: 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a 0a 09 $child.. }...
83c0: 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 74 68 # Cut out th
83d0: 65 20 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e e branches spawn
83e0: 65 64 20 62 79 20 74 68 65 20 72 65 76 69 73 69 ed by the revisi
83f0: 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20 20 23 20 on to be.. #
8400: 64 65 6c 65 74 65 64 2e 20 49 66 20 74 68 65 20 deleted. If the
8410: 62 72 61 6e 63 68 20 68 61 73 20 72 65 76 69 73 branch has revis
8420: 69 6f 6e 73 20 74 68 65 79 20 73 68 6f 75 6c 64 ions they should
8430: 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20 23 20 already.. #
8440: 75 73 65 20 6f 70 65 72 61 74 69 6f 6e 20 27 61 use operation 'a
8450: 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20 74 6f 20 dd', no need to
8460: 63 68 61 6e 67 65 20 74 68 61 74 2e 20 54 68 65 change that. The
8470: 20 66 69 72 73 74 0a 09 20 20 20 20 23 20 72 65 first.. # re
8480: 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63 68 20 62 vision on each b
8490: 72 61 6e 63 68 20 62 65 63 6f 6d 65 73 20 61 20 ranch becomes a
84a0: 6e 65 77 20 61 6e 64 20 64 69 73 63 6f 6e 6e 65 new and disconne
84b0: 63 74 65 64 0a 09 20 20 20 20 23 20 72 6f 6f 74 cted.. # root
84c0: 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 .... foreach
84d0: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 branch [$root br
84e0: 61 6e 63 68 65 73 5d 20 7b 0a 09 09 24 62 72 61 anches] {...$bra
84f0: 6e 63 68 20 63 75 74 62 72 61 6e 63 68 70 61 72 nch cutbranchpar
8500: 65 6e 74 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 ent...if {![$bra
8510: 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 nch haschild]} c
8520: 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 66 69 ontinue...set fi
8530: 72 73 74 20 5b 24 62 72 61 6e 63 68 20 63 68 69 rst [$branch chi
8540: 6c 64 5d 0a 09 09 24 66 69 72 73 74 20 63 75 74 ld]...$first cut
8550: 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 fromparent...lap
8560: 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 pend myroots $fi
8570: 72 73 74 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 rst.. }..
8580: 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 $root removeallb
8590: 72 61 6e 63 68 65 73 0a 0a 09 20 20 20 20 23 20 ranches... #
85a0: 54 61 67 67 69 6e 67 20 61 20 64 65 61 64 20 72 Tagging a dead r
85b0: 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20 evision doesn't
85c0: 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73 6f 20 do anything, so
85d0: 72 65 6d 6f 76 65 0a 09 20 20 20 20 23 20 61 6e remove.. # an
85e0: 79 20 74 61 67 73 20 74 68 61 74 20 77 65 72 65 y tags that were
85f0: 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 20 20 set on it....
8600: 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c $root removeal
8610: 6c 74 61 67 73 0a 0a 09 20 20 20 20 23 20 54 68 ltags... # Th
8620: 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61 70 70 is can only happ
8630: 65 6e 20 6f 6e 63 65 20 70 65 72 20 66 69 6c 65 en once per file
8640: 2c 20 61 6e 64 20 77 65 20 6d 69 67 68 74 20 68 , and we might h
8650: 61 76 65 0a 09 20 20 20 20 23 20 6a 75 73 74 20 ave.. # just
8660: 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74 73 2c changed myroots,
8670: 20 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f 6f 70 so end the loop
8680: 0a 09 20 20 20 20 62 72 65 61 6b 0a 09 7d 0a 09 .. break..}..
8690: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
86a0: 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 method RemoveI
86b0: 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65 6c 65 nitialBranchDele
86c0: 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 tions {} {..# Fr
86d0: 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74 om cvs2svn: If t
86e0: 68 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f he first revisio
86f0: 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 69 73 n on a branch is
8700: 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73 73 61 an..# unnecessa
8710: 72 79 20 64 65 6c 65 74 65 2c 20 72 65 6d 6f 76 ry delete, remov
8720: 65 20 69 74 2e 0a 09 23 0a 09 23 20 49 66 20 61 e it...#..# If a
8730: 20 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f file is added o
8740: 6e 20 61 20 62 72 61 6e 63 68 20 28 77 68 65 74 n a branch (whet
8750: 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 61 6c her or not it al
8760: 72 65 61 64 79 0a 09 23 20 65 78 69 73 74 65 64 ready..# existed
8770: 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68 65 6e on trunk), then
8780: 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 6f 66 new versions of
8790: 20 43 56 53 20 61 64 64 20 61 20 66 69 72 73 74 CVS add a first
87a0: 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 ..# branch revis
87b0: 69 6f 6e 20 69 6e 20 74 68 65 20 27 64 65 61 64 ion in the 'dead
87c0: 27 20 73 74 61 74 65 20 28 74 6f 20 69 6e 64 69 ' state (to indi
87d0: 63 61 74 65 20 74 68 61 74 20 74 68 65 0a 09 23 cate that the..#
87e0: 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20 65 78 file did not ex
87f0: 69 73 74 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 ist on the branc
8800: 68 20 77 68 65 6e 20 74 68 65 20 62 72 61 6e 63 h when the branc
8810: 68 20 77 61 73 0a 09 23 20 63 72 65 61 74 65 64 h was..# created
8820: 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 ) followed by th
8830: 65 20 73 65 63 6f 6e 64 20 62 72 61 6e 63 68 20 e second branch
8840: 72 65 76 69 73 69 6f 6e 2c 20 77 68 69 63 68 20 revision, which
8850: 69 73 20 61 6e 0a 09 23 20 61 64 64 2e 20 20 57 is an..# add. W
8860: 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74 65 72 hen we encounter
8870: 20 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e 2c this situation,
8880: 20 77 65 20 73 65 76 65 72 20 74 68 65 20 62 72 we sever the br
8890: 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74 72 75 anch..# from tru
88a0: 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65 20 74 68 nk and delete th
88b0: 65 20 66 69 72 73 74 20 62 72 61 6e 63 68 20 72 e first branch r
88c0: 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 74 20 evision....# At
88d0: 74 68 69 73 20 70 6f 69 6e 74 20 77 65 20 6d 61 this point we ma
88e0: 79 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 6d y have already m
88f0: 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20 69 6e ultiple roots in
8900: 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77 65 20 myroots,..# we
8910: 68 61 76 65 20 74 6f 20 70 72 6f 63 65 73 73 20 have to process
8920: 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72 65 them all....fore
8930: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 ach root [$self
8940: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 LinesOfDevelopme
8950: 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b nt] {.. if {[
8960: 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 62 72 $root isneededbr
8970: 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e anchdel]} contin
8980: 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 ue.. log writ
8990: 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 e 2 file "Removi
89a0: 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 ng unnecessary i
89b0: 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20 64 65 nitial branch de
89c0: 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72 65 76 6e lete [$root revn
89d0: 72 5d 22 0a 0a 09 20 20 20 20 73 65 74 20 62 72 r]"... set br
89e0: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 anch [$root pare
89f0: 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 73 ntbranch].. s
8a00: 65 74 20 70 61 72 65 6e 74 20 5b 24 72 6f 6f 74 et parent [$root
8a10: 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 73 65 parent].. se
8a20: 74 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f 74 20 t child [$root
8a30: 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 65 child]... lde
8a40: 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f lete myroots $ro
8a50: 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 ot.. lappend
8a60: 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 0a myroots $child..
8a70: 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 . $branch cut
8a80: 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 20 20 branchparent..
8a90: 20 20 24 62 72 61 6e 63 68 20 63 75 74 63 68 69 $branch cutchi
8aa0: 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20 20 ld.. $child
8ab0: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 0a 09 cutfromparent...
8ac0: 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 $branch setc
8ad0: 68 69 6c 64 20 20 20 20 20 20 20 20 24 63 68 69 hild $chi
8ae0: 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20 20 ld.. $child
8af0: 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63 68 20 setparentbranch
8b00: 24 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 24 70 $branch... $p
8b10: 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 6e arent removebran
8b20: 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e 63 ch $branc
8b30: 68 0a 09 20 20 20 20 24 70 61 72 65 6e 74 20 72 h.. $parent r
8b40: 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e emovechildonbran
8b50: 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 ch $root..}..ret
8b60: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
8b70: 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66 44 65 76 ethod LinesOfDev
8b80: 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 elopment {} {..#
8b90: 20 44 65 74 65 72 6d 69 6e 65 20 61 6c 6c 20 6c Determine all l
8ba0: 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d ines of developm
8bb0: 65 6e 74 20 66 6f 72 20 74 68 65 20 66 69 6c 65 ent for the file
8bc0: 2e 20 54 68 69 73 20 61 72 65 0a 09 23 20 74 68 . This are..# th
8bd0: 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c 20 61 e known roots, a
8be0: 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f 66 20 61 nd the root of a
8bf0: 6c 6c 20 62 72 61 6e 63 68 65 73 20 66 6f 75 6e ll branches foun
8c00: 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c 69 6e 65 d on the..# line
8c10: 20 6f 66 20 70 72 69 6d 61 72 79 20 63 68 69 6c of primary chil
8c20: 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f 64 72 dren....set lodr
8c30: 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65 61 63 68 oots {}..foreach
8c40: 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 7b root $myroots {
8c50: 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64 64 42 .. $self AddB
8c60: 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 ranchedLinesOfDe
8c70: 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f velopment lodroo
8c80: 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 6c 61 ts $root.. la
8c90: 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 24 ppend lodroots $
8ca0: 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 20 root..}..return
8cb0: 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20 20 7d 0a $lodroots. }.
8cc0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 42 . method AddB
8cd0: 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 ranchedLinesOfDe
8ce0: 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20 72 6f velopment {lv ro
8cf0: 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 24 ot} {..upvar 1 $
8d00: 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09 77 68 69 lv lodroots..whi
8d10: 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d le {$root ne ""}
8d20: 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 {.. foreach
8d30: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 branch [$root br
8d40: 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 66 20 7b anches] {...if {
8d50: 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63 68 69 ![$branch haschi
8d60: 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 ld]} continue...
8d70: 73 65 74 20 63 68 69 6c 64 20 5b 24 62 72 61 6e set child [$bran
8d80: 63 68 20 63 68 69 6c 64 5d 0a 09 09 23 20 52 65 ch child]...# Re
8d90: 63 75 72 73 65 20 69 6e 74 6f 20 74 68 65 20 62 curse into the b
8da0: 72 61 6e 63 68 20 66 6f 72 20 64 65 65 70 65 72 ranch for deeper
8db0: 20 62 72 61 6e 63 68 65 73 2e 0a 09 09 24 73 65 branches....$se
8dc0: 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69 lf AddBranchedLi
8dd0: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 nesOfDevelopment
8de0: 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 6c 64 lodroots $child
8df0: 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f ...lappend lodro
8e00: 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20 ots $child..
8e10: 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74 20 }.. set root
8e20: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d [$root child]..}
8e30: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
8e40: 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63 6c 75 method Exclu
8e50: 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 6d deNonTrunkInform
8e60: 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 52 65 ation {} {..# Re
8e70: 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74 72 75 move all non-tru
8e80: 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20 72 65 76 nk branches, rev
8e90: 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74 61 67 73 isions, and tags
8ea0: 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65 65 70 20 . We do..# keep
8eb0: 74 68 65 20 74 61 67 73 20 77 68 69 63 68 20 61 the tags which a
8ec0: 72 65 20 6f 6e 20 74 68 65 20 74 72 75 6e 6b 2e re on the trunk.
8ed0: 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f 6f 74 20 ...set ntdbroot
8ee0: 22 22 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 ""..foreach root
8ef0: 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 [$self LinesOfD
8f00: 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 evelopment] {..
8f10: 20 20 20 23 20 4e 6f 74 65 3a 20 48 65 72 65 20 # Note: Here
8f20: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 the order of the
8f30: 20 72 6f 6f 74 73 20 69 73 20 69 6d 70 6f 72 74 roots is import
8f40: 61 6e 74 2c 0a 09 20 20 20 20 23 20 69 2e 65 2e ant,.. # i.e.
8f50: 20 74 68 61 74 20 77 65 20 67 65 74 20 74 68 65 that we get the
8f60: 6d 20 69 6e 20 64 65 70 74 68 20 66 69 72 73 74 m in depth first
8f70: 20 6f 72 64 65 72 2e 20 54 68 69 73 20 65 6e 73 order. This ens
8f80: 75 72 65 73 0a 09 20 20 20 20 23 20 74 68 61 74 ures.. # that
8f90: 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f 66 20 the removal of
8fa0: 61 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 a branch happens
8fb0: 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65 0a only after the.
8fc0: 09 20 20 20 20 23 20 62 72 61 6e 63 68 65 73 20 . # branches
8fd0: 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69 74 20 spawned from it
8fe0: 77 65 72 65 20 72 65 6d 6f 76 65 64 2e 20 4f 74 were removed. Ot
8ff0: 68 65 72 77 69 73 65 20 74 68 65 0a 09 20 20 20 herwise the..
9000: 20 23 20 73 79 73 74 65 6d 20 6d 69 67 68 74 20 # system might
9010: 74 72 79 20 74 6f 20 61 63 63 65 73 73 20 64 65 try to access de
9020: 6c 65 74 65 64 20 6f 62 6a 65 63 74 73 2e 0a 0a leted objects...
9030: 09 20 20 20 20 23 20 44 6f 20 6e 6f 74 20 65 78 . # Do not ex
9040: 63 6c 75 64 65 20 74 68 65 20 74 72 75 6e 6b 2e clude the trunk.
9050: 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24 72 6f 6f .. if {[[$roo
9060: 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e 6b 5d 7d t lod] istrunk]}
9070: 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 24 continue.. $
9080: 73 65 6c 66 20 45 78 63 6c 75 64 65 42 72 61 6e self ExcludeBran
9090: 63 68 20 24 72 6f 6f 74 20 6e 74 64 62 72 6f 6f ch $root ntdbroo
90a0: 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e 74 64 62 t..}...if {$ntdb
90b0: 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 root ne ""} {..
90c0: 20 20 20 24 73 65 6c 66 20 47 72 61 66 74 4e 54 $self GraftNT
90d0: 44 42 32 54 72 75 6e 6b 20 24 6e 74 64 62 72 6f DB2Trunk $ntdbro
90e0: 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 ot..}..return.
90f0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
9100: 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20 7b 72 ExcludeBranch {r
9110: 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20 45 78 63 oot nv} {..# Exc
9120: 6c 75 64 65 20 74 68 65 20 62 72 61 6e 63 68 2f lude the branch/
9130: 6c 6f 64 20 73 74 61 72 74 69 6e 67 20 61 74 20 lod starting at
9140: 72 6f 6f 74 2c 20 61 20 72 65 76 69 73 69 6f 6e root, a revision
9150: 2e 0a 09 23 0a 09 23 20 49 66 20 74 68 65 20 4c ...#..# If the L
9160: 4f 44 20 73 74 61 72 74 73 20 77 69 74 68 20 6e OD starts with n
9170: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 on-trunk default
9180: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e branch revision
9190: 73 2c 0a 09 23 20 77 65 20 6c 65 61 76 65 20 74 s,..# we leave t
91a0: 68 65 6d 20 69 6e 20 70 6c 61 63 65 20 61 6e 64 hem in place and
91b0: 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 65 20 74 do not delete t
91c0: 68 65 20 62 72 61 6e 63 68 2e 20 49 6e 20 74 68 he branch. In th
91d0: 61 74 0a 09 23 20 63 61 73 65 20 74 68 65 20 63 at..# case the c
91e0: 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 68 65 20 ommand sets the
91f0: 76 61 72 69 61 62 6c 65 20 69 6e 20 4e 56 20 73 variable in NV s
9200: 6f 20 74 68 61 74 20 77 65 20 63 61 6e 0a 09 23 o that we can..#
9210: 20 6c 61 74 65 72 20 72 65 77 6f 72 6b 20 74 68 later rework th
9220: 65 73 65 20 72 65 76 69 73 6f 6e 73 20 74 6f 20 ese revisons to
9230: 62 65 20 70 75 72 65 6c 79 20 74 72 75 6e 6b 2e be purely trunk.
9240: 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 20 69 73 ...if {[$root is
9250: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d ondefaultbranch]
9260: 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e 64 6c } {.. # Handl
9270: 69 6e 67 20 61 20 4e 54 44 42 2e 20 54 68 69 73 ing a NTDB. This
9280: 20 62 72 61 6e 63 68 20 6d 61 79 20 63 6f 6e 73 branch may cons
9290: 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79 20 6f 66 ists not only of
92a0: 0a 09 20 20 20 20 23 20 4e 54 44 42 20 72 65 76 .. # NTDB rev
92b0: 69 73 69 6f 6e 73 2c 20 62 75 74 20 61 6c 73 6f isions, but also
92c0: 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42 2e 20 some non-NTDB.
92d0: 54 68 65 20 6c 61 74 74 65 72 20 61 72 65 0a 09 The latter are..
92e0: 20 20 20 20 23 20 74 72 75 6c 79 20 6f 6e 20 61 # truly on a
92f0: 20 62 72 61 6e 63 68 20 61 6e 64 20 68 61 76 65 branch and have
9300: 20 74 6f 20 62 65 20 65 78 63 6c 75 64 65 64 2e to be excluded.
9310: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 09 The following..
9320: 20 20 20 20 23 20 6c 6f 6f 70 20 64 65 74 65 72 # loop deter
9330: 6d 69 6e 65 73 20 69 66 20 74 68 65 72 65 20 61 mines if there a
9340: 72 65 20 73 75 63 68 20 72 65 76 69 73 69 6f 6e re such revision
9350: 73 2e 0a 0a 09 20 20 20 20 75 70 76 61 72 20 31 s.... upvar 1
9360: 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74 0a 09 20 $nv ntdbroot..
9370: 20 20 20 73 65 74 20 6e 74 64 62 72 6f 6f 74 20 set ntdbroot
9380: 24 72 6f 6f 74 0a 09 20 20 20 20 24 72 6f 6f 74 $root.. $root
9390: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 62 72 cutfromparentbr
93a0: 61 6e 63 68 0a 0a 09 20 20 20 20 73 65 74 20 72 anch... set r
93b0: 65 76 20 24 72 6f 6f 74 0a 09 20 20 20 20 77 68 ev $root.. wh
93c0: 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d ile {$rev ne ""}
93d0: 20 7b 0a 09 09 24 72 65 76 20 72 65 6d 6f 76 65 {...$rev remove
93e0: 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09 23 20 allbranches...#
93f0: 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 See note [x]....
9400: 09 69 66 20 7b 5b 24 72 65 76 20 69 73 6f 6e 64 .if {[$rev isond
9410: 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b efaultbranch]} {
9420: 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b ... set rev [
9430: 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 20 $rev child]...}
9440: 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 62 72 65 else {... bre
9450: 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 ak...}.. }...
9460: 20 20 20 20 23 20 72 65 76 20 6e 6f 77 20 63 6f # rev now co
9470: 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 ntains the first
9480: 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76 69 73 69 non-NTDB revisi
9490: 6f 6e 20 61 66 74 65 72 20 74 68 65 0a 09 20 20 on after the..
94a0: 20 20 23 20 4e 54 44 42 2c 20 6f 72 20 69 73 20 # NTDB, or is
94b0: 65 6d 70 74 79 20 69 66 20 74 68 65 72 65 20 69 empty if there i
94c0: 73 20 6e 6f 20 73 75 63 68 2e 20 49 66 20 77 65 s no such. If we
94d0: 20 68 61 76 65 20 73 6f 6d 65 0a 09 20 20 20 20 have some..
94e0: 23 20 74 68 65 79 20 68 61 76 65 20 74 6f 20 72 # they have to r
94f0: 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20 20 69 66 emoved.... if
9500: 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 20 7b {$rev ne ""} {
9510: 0a 09 09 73 65 74 20 6c 61 73 74 6e 74 64 62 20 ...set lastntdb
9520: 5b 24 72 65 76 20 70 61 72 65 6e 74 5d 0a 09 09 [$rev parent]...
9530: 24 6c 61 73 74 6e 74 64 62 20 63 75 74 66 72 6f $lastntdb cutfro
9540: 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c 65 20 7b mchild...while {
9550: 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 $rev ne ""} {...
9560: 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76 65 61 $rev removea
9570: 6c 6c 74 61 67 73 0a 09 09 20 20 20 20 24 72 65 lltags... $re
9580: 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 v removeallbranc
9590: 68 65 73 0a 09 09 20 20 20 20 23 20 4e 6f 74 65 hes... # Note
95a0: 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20 73 74 69 [x]: We may sti
95b0: 6c 6c 20 68 61 76 65 20 68 61 64 20 62 72 61 6e ll have had bran
95c0: 63 68 65 73 20 6f 6e 20 74 68 65 0a 09 09 20 20 ches on the...
95d0: 20 20 23 20 72 65 76 69 73 69 6f 6e 2e 20 42 72 # revision. Br
95e0: 61 6e 63 68 65 73 20 77 69 74 68 6f 75 74 20 72 anches without r
95f0: 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d 69 74 74 evisions committ
9600: 65 64 0a 09 09 20 20 20 20 23 20 6f 6e 20 74 68 ed... # on th
9610: 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f 77 20 75 em do not show u
9620: 70 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 p in the list of
9630: 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09 20 20 20 roots aka...
9640: 20 23 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 # lines of deve
9650: 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20 20 20 73 lopment.... s
9660: 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 et rev [$rev chi
9670: 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 ld]...}.. }..
9680: 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 return..}...
9690: 23 20 4e 6f 20 4e 54 44 42 20 73 74 75 66 66 20 # No NTDB stuff
96a0: 74 6f 20 64 65 61 6c 20 77 69 74 68 2e 20 46 69 to deal with. Fi
96b0: 72 73 74 20 64 65 6c 65 74 65 20 74 68 65 20 62 rst delete the b
96c0: 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a 09 23 20 ranch object..#
96d0: 69 74 73 65 6c 66 2c 20 61 66 74 65 72 20 63 75 itself, after cu
96e0: 74 74 69 6e 67 20 61 6c 6c 20 74 68 65 20 76 61 tting all the va
96f0: 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74 69 6f 6e rious connection
9700: 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e 63 68 20 s....set branch
9710: 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 [$root parentbra
9720: 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72 61 6e 63 nch]..if {$branc
9730: 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 h ne ""} {..
9740: 73 65 74 20 62 72 61 6e 63 68 70 61 72 65 6e 74 set branchparent
9750: 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 [$branch parent
9760: 5d 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70 61 ].. $branchpa
9770: 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 6e 63 rent removebranc
9780: 68 20 20 20 20 20 20 20 20 24 62 72 61 6e 63 68 h $branch
9790: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70 61 72 .. $branchpar
97a0: 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f ent removechildo
97b0: 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d nbranch $root..}
97c0: 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73 ...# The root is
97d0: 20 6e 6f 20 73 75 63 68 20 61 6e 79 20 6c 6f 6e no such any lon
97e0: 67 65 72 20 65 69 74 68 65 72 2e 0a 09 6c 64 65 ger either...lde
97f0: 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f lete myroots $ro
9800: 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f 20 74 68 ot...# Now go th
9810: 72 6f 75 67 68 20 74 68 65 20 6c 69 6e 65 20 61 rough the line a
9820: 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c 20 69 74 nd remove all it
9830: 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 77 s revisions....w
9840: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 hile {$root ne "
9850: 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f 74 20 "} {.. $root
9860: 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09 20 removealltags..
9870: 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 $root removea
9880: 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20 llbranches..
9890: 23 20 4e 6f 74 65 3a 20 53 65 65 20 74 68 65 20 # Note: See the
98a0: 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20 20 20 20 note [x]....
98b0: 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 # From cvs2svn:
98c0: 49 66 20 74 68 69 73 20 69 73 20 74 68 65 20 6c If this is the l
98d0: 61 73 74 20 64 65 66 61 75 6c 74 20 72 65 76 69 ast default revi
98e0: 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20 20 20 23 sion on a.. #
98f0: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau
9900: 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c 6c 6f 77 lt branch follow
9910: 65 64 20 62 79 20 61 20 31 2e 32 20 72 65 76 69 ed by a 1.2 revi
9920: 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 74 68 65 sion,.. # the
9930: 6e 20 74 68 65 20 31 2e 32 20 72 65 76 69 73 69 n the 1.2 revisi
9940: 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 on depends on th
9950: 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d 45 3a 20 is one. FIXME:
9960: 49 74 20 69 73 0a 09 20 20 20 20 23 20 71 75 65 It is.. # que
9970: 73 74 69 6f 6e 61 62 6c 65 20 77 68 65 74 68 65 stionable whethe
9980: 72 20 74 68 69 73 20 68 61 6e 64 6c 69 6e 67 20 r this handling
9990: 69 73 20 63 6f 72 72 65 63 74 2c 20 73 69 6e 63 is correct, sinc
99a0: 65 20 74 68 65 0a 09 20 20 20 20 23 20 6e 6f 6e e the.. # non
99b0: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 -trunk default b
99c0: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 20 ranch revisions
99d0: 61 66 66 65 63 74 20 74 72 75 6e 6b 20 61 6e 64 affect trunk and
99e0: 0a 09 20 20 20 20 23 20 73 68 6f 75 6c 64 20 74 .. # should t
99f0: 68 65 72 65 66 6f 72 65 20 6e 6f 74 20 6a 75 73 herefore not jus
9a00: 74 20 62 65 20 64 69 73 63 61 72 64 65 64 20 65 t be discarded e
9a10: 76 65 6e 20 69 66 0a 09 20 20 20 20 23 20 2d 2d ven if.. # --
9a20: 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09 20 20 trunk-only....
9a30: 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 if {[$root has
9a40: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 defaultbranchchi
9a50: 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 74 64 ld]} {...set ntd
9a60: 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20 64 65 bchild [$root de
9a70: 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 faultbranchchild
9a80: 5d 0a 09 09 69 6e 74 65 67 72 69 74 79 20 61 73 ]...integrity as
9a90: 73 65 72 74 20 7b 0a 09 09 20 20 20 20 5b 24 6e sert {... [$n
9aa0: 74 64 62 63 68 69 6c 64 20 64 65 66 61 75 6c 74 tdbchild default
9ab0: 62 72 61 6e 63 68 70 61 72 65 6e 74 5d 20 65 71 branchparent] eq
9ac0: 20 24 6e 74 64 62 63 68 69 6c 64 0a 09 09 7d 20 $ntdbchild...}
9ad0: 7b 6e 74 64 62 20 2d 20 74 72 75 6e 6b 20 6c 69 {ntdb - trunk li
9ae0: 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 7d 0a 09 09 nkage broken}...
9af0: 24 6e 74 64 62 63 68 69 6c 64 20 63 75 74 64 65 $ntdbchild cutde
9b00: 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e faultbranchparen
9b10: 74 0a 09 09 69 66 20 7b 5b 24 6e 74 64 62 63 68 t...if {[$ntdbch
9b20: 69 6c 64 20 68 61 73 70 61 72 65 6e 74 5d 7d 20 ild hasparent]}
9b30: 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 {... lappend
9b40: 6d 79 72 6f 6f 74 73 20 5b 24 6e 74 64 62 63 68 myroots [$ntdbch
9b50: 69 6c 64 20 70 61 72 65 6e 74 5d 0a 09 09 7d 0a ild parent]...}.
9b60: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73 65 74 . }... set
9b70: 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 root [$root chi
9b80: 6c 64 5d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a ld]..}...return.
9b90: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
9ba0: 64 20 47 72 61 66 74 4e 54 44 42 32 54 72 75 6e d GraftNTDB2Trun
9bb0: 6b 20 7b 72 6f 6f 74 7d 20 7b 0a 09 23 20 57 65 k {root} {..# We
9bc0: 20 63 61 6e 20 6e 6f 77 20 67 72 61 66 74 20 74 can now graft t
9bd0: 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 he non-trunk def
9be0: 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 ault branch revi
9bf0: 73 69 6f 6e 73 20 74 6f 0a 09 23 20 74 72 75 6e sions to..# trun
9c00: 6b 2e 20 54 68 65 79 20 73 68 6f 75 6c 64 20 61 k. They should a
9c10: 6c 72 65 61 64 79 20 62 65 20 61 6c 6f 6e 65 20 lready be alone
9c20: 6f 6e 20 61 20 43 56 53 42 72 61 6e 63 68 2d 6c on a CVSBranch-l
9c30: 65 73 73 0a 09 23 20 62 72 61 6e 63 68 2e 0a 0a ess..# branch...
9c40: 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 .integrity asser
9c50: 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73 70 61 t {![$root haspa
9c60: 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 4e 54 rentbranch]} {NT
9c70: 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 61 DB root still ha
9c80: 73 20 69 74 73 20 62 72 61 6e 63 68 20 73 79 6d s its branch sym
9c90: 62 6f 6c 7d 0a 09 69 6e 74 65 67 72 69 74 79 20 bol}..integrity
9ca0: 61 73 73 65 72 74 20 7b 21 5b 24 72 6f 6f 74 20 assert {![$root
9cb0: 68 61 73 62 72 61 6e 63 68 65 73 5d 7d 20 20 20 hasbranches]}
9cc0: 20 20 7b 4e 54 44 42 20 72 6f 6f 74 20 73 74 69 {NTDB root sti
9cd0: 6c 6c 20 68 61 73 20 73 70 61 77 6e 65 64 20 62 ll has spawned b
9ce0: 72 61 6e 63 68 65 73 7d 0a 0a 09 73 65 74 20 6c ranches}...set l
9cf0: 61 73 74 20 24 72 6f 6f 74 0a 09 77 68 69 6c 65 ast $root..while
9d00: 20 7b 5b 24 6c 61 73 74 20 68 61 73 63 68 69 6c {[$last haschil
9d10: 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74 20 5b 24 d]} {set last [$
9d20: 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a 0a 09 69 last child]}...i
9d30: 66 20 7b 5b 24 6c 61 73 74 20 68 61 73 64 65 66 f {[$last hasdef
9d40: 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d aultbranchchild]
9d50: 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 } {... set re
9d60: 76 31 32 20 5b 24 6c 61 73 74 20 64 65 66 61 75 v12 [$last defau
9d70: 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 0a 09 ltbranchchild]..
9d80: 20 20 20 20 24 72 65 76 31 32 20 63 75 74 64 65 $rev12 cutde
9d90: 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e faultbranchparen
9da0: 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20 63 75 t.. $last cu
9db0: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 tdefaultbranchch
9dc0: 69 6c 64 0a 0a 09 20 20 20 20 24 72 65 76 31 32 ild... $rev12
9dd0: 20 63 68 61 6e 67 65 70 61 72 65 6e 74 20 24 6c changeparent $l
9de0: 61 73 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20 ast.. $last
9df0: 63 68 61 6e 67 65 63 68 69 6c 64 20 24 72 65 76 changechild $rev
9e00: 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 12... ldelete
9e10: 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31 32 0a myroots $rev12.
9e20: 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 61 6e 64 .. # Note and
9e30: 20 72 65 6d 65 6d 62 65 72 20 74 68 61 74 20 74 remember that t
9e40: 68 65 20 74 79 70 65 20 6f 66 20 72 65 76 31 32 he type of rev12
9e50: 20 77 61 73 20 61 6c 72 65 61 64 79 0a 09 20 20 was already..
9e60: 20 20 23 20 61 64 6a 75 73 74 65 64 20 62 79 20 # adjusted by
9e70: 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 AdjustNonTrunkDe
9e80: 66 61 75 6c 74 42 72 61 6e 63 68 2c 20 73 6f 20 faultBranch, so
9e90: 77 65 20 64 6f 6e 27 74 0a 09 20 20 20 20 23 20 we don't.. #
9ea0: 68 61 76 65 20 74 6f 20 63 68 61 6e 67 65 20 69 have to change i
9eb0: 74 73 20 74 79 70 65 20 68 65 72 65 2e 0a 09 7d ts type here...}
9ec0: 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 ...while {$root
9ed0: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 ne ""} {.. $r
9ee0: 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61 75 6c 74 oot setondefault
9ef0: 62 72 61 6e 63 68 20 30 0a 09 20 20 20 20 24 72 branch 0.. $r
9f00: 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d 79 74 72 oot setlod $mytr
9f10: 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 unk.. foreach
9f20: 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 61 67 73 tag [$root tags
9f30: 5d 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c 6f ] {...$tag setlo
9f40: 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20 d $mytrunk..
9f50: 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74 20 }.. set root
9f60: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d [$root child]..}
9f70: 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return
9f80: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
9f90: 6f 64 20 41 63 74 69 76 65 20 7b 7d 20 7b 0a 09 od Active {} {..
9fa0: 73 65 74 20 72 65 76 69 73 69 6f 6e 73 20 7b 7d set revisions {}
9fb0: 0a 09 73 65 74 20 73 79 6d 62 6f 6c 73 20 20 20 ..set symbols
9fc0: 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f {}...foreach roo
9fd0: 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 t [$self LinesOf
9fe0: 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 Development] {..
9ff0: 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 if {[$root h
a000: 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d asparentbranch]}
a010: 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f { lappend symbo
a020: 6c 73 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 ls [$root parent
a030: 62 72 61 6e 63 68 5d 20 7d 0a 09 20 20 20 20 77 branch] }.. w
a040: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 hile {$root ne "
a050: 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72 "} {...lappend r
a060: 65 76 69 73 69 6f 6e 73 20 24 72 6f 6f 74 0a 09 evisions $root..
a070: 09 66 6f 72 65 61 63 68 20 74 61 67 20 20 20 20 .foreach tag
a080: 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 20 20 20 [$root tags]
a090: 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f { lappend symbo
a0a0: 6c 73 20 24 74 61 67 20 20 20 20 7d 0a 09 09 66 ls $tag }...f
a0b0: 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 oreach branch [$
a0c0: 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b root branches] {
a0d0: 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 ... integrity
a0e0: 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b 24 62 assert {....[$b
a0f0: 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 20 65 71 ranch parent] eq
a100: 20 24 72 6f 6f 74 0a 09 09 20 20 20 20 7d 20 7b $root... } {
a110: 42 61 63 6b 72 65 66 65 72 65 6e 63 65 20 62 72 Backreference br
a120: 61 6e 63 68 20 74 6f 20 69 74 73 20 72 6f 6f 74 anch to its root
a130: 20 69 73 20 6d 69 73 73 69 6e 67 20 6f 72 20 77 is missing or w
a140: 72 6f 6e 67 7d 0a 09 09 20 20 20 20 6c 61 70 70 rong}... lapp
a150: 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 62 72 61 end symbols $bra
a160: 6e 63 68 0a 09 09 7d 0a 09 09 73 65 74 20 6c 6f nch...}...set lo
a170: 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a 09 09 d [$root lod]...
a180: 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75 if {![$lod istru
a190: 6e 6b 5d 7d 20 7b 0a 09 09 20 20 20 20 69 6e 74 nk]} {... int
a1a0: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a egrity assert {.
a1b0: 09 09 09 5b 24 6c 6f 64 20 68 61 73 63 68 69 6c ...[$lod haschil
a1c0: 64 5d 0a 09 09 20 20 20 20 7d 20 7b 42 72 61 6e d]... } {Bran
a1d0: 63 68 20 69 73 20 4c 4f 44 20 73 79 6d 62 6f 6c ch is LOD symbol
a1e0: 20 77 69 74 68 6f 75 74 20 72 65 76 69 73 69 6f without revisio
a1f0: 6e 73 7d 0a 09 09 20 20 20 20 6c 61 70 70 65 6e ns}... lappen
a200: 64 20 73 79 6d 62 6f 6c 73 20 24 6c 6f 64 0a 09 d symbols $lod..
a210: 09 7d 0a 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 .}...set root [$
a220: 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 root child]..
a230: 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 20 5b }..}...return [
a240: 6c 69 73 74 20 5b 6c 73 6f 72 74 20 2d 75 6e 69 list [lsort -uni
a250: 71 75 65 20 2d 64 69 63 74 20 24 72 65 76 69 73 que -dict $revis
a260: 69 6f 6e 73 5d 20 5b 6c 73 6f 72 74 20 2d 75 6e ions] [lsort -un
a270: 69 71 75 65 20 2d 64 69 63 74 20 24 73 79 6d 62 ique -dict $symb
a280: 6f 6c 73 5d 5d 0a 20 20 20 20 7d 0a 0a 0a 20 20 ols]]. }...
a290: 20 20 6d 65 74 68 6f 64 20 41 67 67 72 65 67 61 method Aggrega
a2a0: 74 65 53 79 6d 62 6f 6c 44 61 74 61 20 7b 7d 20 teSymbolData {}
a2b0: 7b 0a 09 23 20 4e 6f 77 20 74 68 61 74 20 74 68 {..# Now that th
a2c0: 65 20 65 78 61 63 74 20 73 65 74 20 6f 66 20 72 e exact set of r
a2d0: 65 76 69 73 69 6f 6e 73 20 28 61 6e 64 20 74 68 evisions (and th
a2e0: 72 6f 75 67 68 20 74 68 61 74 0a 09 23 20 62 72 rough that..# br
a2f0: 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67 73 29 anches and tags)
a300: 20 69 73 20 6b 6e 6f 77 6e 20 77 65 20 63 61 6e is known we can
a310: 20 75 70 64 61 74 65 20 74 68 65 20 61 67 67 72 update the aggr
a320: 65 67 61 74 65 0a 09 23 20 73 79 6d 62 6f 6c 20 egate..# symbol
a330: 73 74 61 74 69 73 74 69 63 73 2e 0a 0a 09 66 6f statistics....fo
a340: 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c reach root [$sel
a350: 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 f LinesOfDevelop
a360: 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 73 65 74 ment] {.. set
a370: 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d lod [$root lod]
a380: 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 49 ... # Note: I
a390: 66 20 74 68 65 20 4c 4f 44 20 69 73 20 74 68 65 f the LOD is the
a3a0: 20 74 72 75 6e 6b 20 74 68 65 20 63 6f 75 6e 74 trunk the count
a3b0: 2a 2c 20 65 74 63 2e 20 6d 65 74 68 6f 64 73 0a *, etc. methods.
a3c0: 09 20 20 20 20 23 20 77 69 6c 6c 20 64 6f 20 6e . # will do n
a3d0: 6f 74 68 69 6e 67 2c 20 61 73 20 69 74 20 69 73 othing, as it is
a3e0: 20 61 6c 77 61 79 73 20 70 72 65 73 65 6e 74 20 always present
a3f0: 28 63 61 6e 6e 6f 74 20 62 65 0a 09 20 20 20 20 (cannot be..
a400: 23 20 65 78 63 6c 75 64 65 64 29 2c 20 61 6e 64 # excluded), and
a410: 20 69 73 20 61 6c 77 61 79 73 20 61 20 62 72 61 is always a bra
a420: 6e 63 68 20 74 6f 6f 2e 0a 0a 09 20 20 20 20 23 nch too.... #
a430: 20 4c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f Lines of develo
a440: 70 6d 65 6e 74 20 63 6f 75 6e 74 20 61 73 20 62 pment count as b
a450: 72 61 6e 63 68 65 73 20 61 6e 64 20 68 61 76 65 ranches and have
a460: 20 61 20 63 6f 6d 6d 69 74 0a 09 20 20 20 20 23 a commit.. #
a470: 20 6f 6e 20 74 68 65 6d 20 28 72 6f 6f 74 29 2e on them (root).
a480: 20 49 66 20 74 68 65 79 20 61 72 65 20 73 74 69 If they are sti
a490: 6c 6c 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 ll attached to a
a4a0: 20 74 72 65 65 20 77 65 0a 09 20 20 20 20 23 20 tree we.. #
a4b0: 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 74 65 20 have to compute
a4c0: 61 6e 64 20 72 65 67 69 73 74 65 72 20 70 6f 73 and register pos
a4d0: 73 69 62 6c 65 20 70 61 72 65 6e 74 73 2e 0a 0a sible parents...
a4e0: 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e 74 61 . $lod counta
a4f0: 73 62 72 61 6e 63 68 0a 09 20 20 20 20 24 6c 6f sbranch.. $lo
a500: 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69 74 0a 0a d countacommit..
a510: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 . if {[$root
a520: 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68 5d hasparentbranch]
a530: 7d 20 7b 0a 09 09 23 20 4e 6f 74 65 20 6c 6f 64 } {...# Note lod
a540: 20 3d 3d 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e == [$root paren
a550: 74 62 72 61 6e 63 68 5d 0a 09 09 24 6c 6f 64 20 tbranch]...$lod
a560: 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 73 0a possibleparents.
a570: 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 . } elseif {!
a580: 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 20 26 [$lod istrunk] &
a590: 26 20 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 65 66 & [$root isondef
a5a0: 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 aultbranch]} {..
a5b0: 09 23 20 54 68 69 73 20 69 73 20 74 68 65 20 72 .# This is the r
a5c0: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 6f 66 20 oot revision of
a5d0: 61 20 64 65 74 61 63 68 65 64 20 4e 54 44 42 2e a detached NTDB.
a5e0: 20 57 65 0a 09 09 23 20 68 61 76 65 20 74 6f 20 We...# have to
a5f0: 6d 61 6e 75 61 6c 6c 79 20 73 65 74 20 74 68 65 manually set the
a600: 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 70 only possible p
a610: 61 72 65 6e 74 20 66 6f 72 0a 09 09 23 20 74 68 arent for...# th
a620: 69 73 20 4c 4f 44 2c 20 74 68 65 20 74 72 75 6e is LOD, the trun
a630: 6b 20 69 74 73 65 6c 66 2e 0a 0a 09 09 5b 24 6c k itself.....[$l
a640: 6f 64 20 73 79 6d 62 6f 6c 5d 20 70 6f 73 73 69 od symbol] possi
a650: 62 6c 65 70 61 72 65 6e 74 20 24 6d 79 74 72 75 bleparent $mytru
a660: 6e 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 nk.. }...
a670: 23 20 46 6f 72 20 74 68 65 20 72 65 76 69 73 69 # For the revisi
a680: 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 6e 65 20 ons in the line
a690: 77 65 20 72 65 67 69 73 74 65 72 20 74 68 65 69 we register thei
a6a0: 72 20 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20 r branches..
a6b0: 23 20 61 6e 64 20 74 61 67 73 20 61 73 20 62 6c # and tags as bl
a6c0: 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 65 20 6c ockers for the l
a6d0: 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 65 20 74 od, and update t
a6e0: 68 65 20 74 79 70 65 0a 09 20 20 20 20 23 20 63 he type.. # c
a6f0: 6f 75 6e 74 65 72 73 20 61 73 20 77 65 6c 6c 2e ounters as well.
a700: 20 41 73 20 62 72 61 6e 63 68 20 73 79 6d 62 6f As branch symbo
a710: 6c 73 20 77 69 74 68 6f 75 74 20 63 6f 6d 6d 69 ls without commi
a720: 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 74 68 65 ts on.. # the
a730: 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 74 65 64 m are not listed
a740: 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 as lines of dev
a750: 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 68 61 76 elopment, we hav
a760: 65 20 74 6f 0a 09 20 20 20 20 23 20 63 6f 75 6e e to.. # coun
a770: 74 20 74 68 65 6d 20 68 65 72 65 20 61 73 20 77 t them here as w
a780: 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e 20 62 72 ell, as plain br
a790: 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 73 74 20 anches. At last
a7a0: 77 65 0a 09 20 20 20 20 23 20 68 61 76 65 20 74 we.. # have t
a7b0: 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20 72 65 o compute and re
a7c0: 67 69 73 74 65 72 20 74 68 65 20 70 6f 73 73 69 gister the possi
a7d0: 62 6c 65 20 70 61 72 65 6e 74 73 20 6f 66 20 74 ble parents of t
a7e0: 68 65 0a 09 20 20 20 20 23 20 74 61 67 73 2c 20 he.. # tags,
a7f0: 69 6e 20 63 61 73 65 20 74 68 65 79 20 61 72 65 in case they are
a800: 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 74 65 64 later converted
a810: 20 61 73 20 62 72 61 6e 63 68 65 73 2e 0a 0a 09 as branches....
a820: 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f 6f 74 while {$root
a830: 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 6f 72 65 ne ""} {...fore
a840: 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f ach branch [$roo
a850: 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 t branches] {...
a860: 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65 64 $lod blocked
a870: 62 79 20 24 62 72 61 6e 63 68 0a 09 09 20 20 20 by $branch...
a880: 20 24 62 72 61 6e 63 68 20 70 6f 73 73 69 62 6c $branch possibl
a890: 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20 20 69 eparents... i
a8a0: 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 63 f {[$branch hasc
a8b0: 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a hild]} continue.
a8c0: 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 6f .. $branch co
a8d0: 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 09 7d 0a untasbranch...}.
a8e0: 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 5b ...foreach tag [
a8f0: 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09 $root tags] {...
a900: 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65 64 $lod blocked
a910: 62 79 20 24 74 61 67 0a 09 09 20 20 20 20 24 74 by $tag... $t
a920: 61 67 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e ag possibleparen
a930: 74 73 0a 09 09 20 20 20 20 24 74 61 67 20 63 6f ts... $tag co
a940: 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a 0a 09 09 untastag...}....
a950: 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 set root [$root
a960: 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 09 7d child].. }..}
a970: 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a ...return. }.
a980: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
a990: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
a9a0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 ############.
a9b0: 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f ## Configuratio
a9c0: 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 n.. pragma -h
a9d0: 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f astypeinfo no
a9e0: 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69 6e ; # no type in
a9f0: 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 trospection.
aa00: 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f 20 pragma -hasinfo
aa10: 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e no ; # n
aa20: 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 70 o object introsp
aa30: 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d ection. pragm
aa40: 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68 6f 64 a -hastypemethod
aa50: 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65 20 69 s no ; # type i
aa60: 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74 2e 0a s not relevant..
aa70: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
aa80: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
aa90: 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a ############.}..
aaa0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a namespace eval :
aab0: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
aac0: 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20 20 6e ort::cvs {. n
aad0: 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 amespace export
aae0: 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 73 70 61 file. namespa
aaf0: 63 65 20 65 76 61 6c 20 66 69 6c 65 20 7b 0a 09 ce eval file {..
ab00: 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 72 65 71 # Import not req
ab10: 75 69 72 65 64 2c 20 61 6c 72 65 61 64 79 20 61 uired, already a
ab20: 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 61 63 65 child namespace
ab30: 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 65 20 69 ...# namespace i
ab40: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 mport ::vc::foss
ab50: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
ab60: 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 20 6e 61 :file::rev..# na
ab70: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
ab80: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
ab90: 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a ort::cvs::file::
aba0: 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 sym..namespace i
abb0: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c mport ::vc::tool
abc0: 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 s::misc::*..name
abd0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
abe0: 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c c::tools::troubl
abf0: 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 e..namespace imp
ac00: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ort ::vc::tools:
ac10: 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 63 65 20 :log..namespace
ac20: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 import ::vc::fos
ac30: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
ac40: 3a 3a 62 6c 6f 62 73 74 6f 72 65 0a 09 6e 61 6d ::blobstore..nam
ac50: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import ::
ac60: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
ac70: 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 rt::cvs::state..
ac80: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
ac90: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
aca0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 mport::cvs::inte
acb0: 67 72 69 74 79 0a 09 6e 61 6d 65 73 70 61 63 65 grity..namespace
acc0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo
acd0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
ace0: 73 3a 3a 67 74 63 6f 72 65 0a 20 20 20 20 7d 0a s::gtcore. }.
acf0: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 }..# # ## ### ##
ad00: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
ad10: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 ########## #####
ad20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
ad30: 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 .## Ready..packa
ad40: 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 ge provide vc::f
ad50: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
ad60: 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a 72 65 74 vs::file 1.0.ret
ad70: 75 72 6e 0a urn.