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: 20 63 69 64 20 63 70 61 72 65 6e 74 7d 20 5b 73 cid cparent} [s
26c0: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 tate run {..
26d0: 53 45 4c 45 43 54 20 42 2e 72 69 64 2c 20 52 2e SELECT B.rid, R.
26e0: 72 65 76 2c 20 52 2e 70 61 72 65 6e 74 2c 20 52 rev, R.parent, R
26f0: 2e 63 68 69 6c 64 2c 20 42 2e 63 6f 66 66 2c 20 .child, B.coff,
2700: 42 2e 63 6c 65 6e 2c 20 42 2e 62 69 64 2c 20 42 B.clen, B.bid, B
2710: 2e 70 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 .pid.. FROM
2720: 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 20 42 blob B
2730: 0a 09 20 20 20 20 4c 45 46 54 20 4f 55 54 45 52 .. LEFT OUTER
2740: 20 4a 4f 49 4e 20 72 65 76 69 73 69 6f 6e 20 52 JOIN revision R
2750: 0a 09 20 20 20 20 4f 4e 20 20 20 20 20 20 20 20 .. ON
2760: 20 20 20 20 20 20 42 2e 72 69 64 20 3d 20 52 2e B.rid = R.
2770: 72 69 64 0a 09 20 20 20 20 57 48 45 52 45 20 20 rid.. WHERE
2780: 42 2e 66 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d B.fid = $myid..}
2790: 5d 20 7b 0a 09 20 20 20 20 23 20 4d 61 69 6e 20 ] {.. # Main
27a0: 64 61 74 61 20 61 72 65 20 62 6c 6f 62 73 2c 20 data are blobs,
27b0: 6d 6f 73 74 20 77 69 6c 6c 20 68 61 76 65 20 72 most will have r
27c0: 65 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 6e 6f evisions, but no
27d0: 74 0a 09 20 20 20 20 23 20 61 6c 6c 2e 20 54 68 t.. # all. Th
27e0: 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 61 70 e expansion grap
27f0: 68 20 69 73 20 62 6c 6f 62 20 62 61 73 65 64 2c h is blob based,
2800: 20 77 68 65 72 65 61 73 20 74 68 65 0a 09 20 20 whereas the..
2810: 20 20 23 20 72 65 63 6f 6d 70 72 65 73 73 69 6f # recompressio
2820: 6e 20 67 72 61 70 68 20 69 73 20 72 65 76 69 73 n graph is revis
2830: 69 6f 6e 20 62 61 73 65 64 2e 0a 0a 09 20 20 20 ion based....
2840: 20 69 66 20 7b 24 72 65 76 6e 72 20 6e 65 20 22 if {$revnr ne "
2850: 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72 "} {...lappend r
2860: 65 76 6d 61 70 20 72 24 72 65 76 6e 72 20 24 72 evmap r$revnr $r
2870: 69 64 0a 0a 09 09 24 7a 70 20 6e 6f 64 65 20 69 id....$zp node i
2880: 6e 73 65 72 74 20 24 72 69 64 0a 09 09 24 7a 70 nsert $rid...$zp
2890: 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 72 69 node set $ri
28a0: 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a 09 d revnr $revnr..
28b0: 09 24 7a 70 20 6e 6f 64 65 20 73 65 74 20 20 20 .$zp node set
28c0: 20 24 72 69 64 20 6c 61 62 65 6c 20 3c 24 72 65 $rid label <$re
28d0: 76 6e 72 3e 0a 0a 09 09 69 66 20 7b 24 63 68 69 vnr>....if {$chi
28e0: 6c 64 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 ld ne ""} {...
28f0: 20 20 6c 61 70 70 65 6e 64 20 7a 61 72 63 73 20 lappend zarcs
2900: 24 63 68 69 6c 64 20 24 72 69 64 0a 09 09 7d 0a $child $rid...}.
2910: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 . } else {...
2920: 23 20 57 65 20 66 61 6b 65 20 61 20 72 65 76 6e # We fake a revn
2930: 72 20 66 6f 72 20 74 68 65 20 62 6c 6f 62 73 20 r for the blobs
2940: 77 68 69 63 68 20 68 61 76 65 20 6e 6f 0a 09 09 which have no...
2950: 23 20 72 65 76 69 73 69 6f 6e 2c 20 66 6f 72 20 # revision, for
2960: 75 73 65 20 69 6e 20 74 68 65 20 65 78 70 61 6e use in the expan
2970: 73 69 6f 6e 20 67 72 61 70 68 2e 0a 09 09 73 65 sion graph....se
2980: 74 20 72 65 76 6e 72 20 67 68 6f 73 74 24 63 69 t revnr ghost$ci
2990: 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 d.. }... #
29a0: 20 4e 6f 77 20 74 68 65 20 65 78 70 61 6e 73 69 Now the expansi
29b0: 6f 6e 20 67 72 61 70 68 2e 0a 0a 09 20 20 20 20 on graph....
29c0: 24 65 78 20 6e 6f 64 65 20 69 6e 73 65 72 74 20 $ex node insert
29d0: 24 63 69 64 0a 09 20 20 20 20 24 65 78 20 6e 6f $cid.. $ex no
29e0: 64 65 20 73 65 74 20 20 20 20 24 63 69 64 20 74 de set $cid t
29f0: 65 78 74 20 20 5b 6c 69 73 74 20 24 63 6f 66 66 ext [list $coff
2a00: 20 24 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65 78 $clen].. $ex
2a10: 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 63 69 node set $ci
2a20: 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a 09 d revnr $revnr..
2a30: 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 65 74 $ex node set
2a40: 20 20 20 20 24 63 69 64 20 6c 61 62 65 6c 20 3c $cid label <
2a50: 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69 66 $revnr>... if
2a60: 20 7b 24 63 70 61 72 65 6e 74 20 6e 65 20 22 22 {$cparent ne ""
2a70: 7d 20 7b 0a 09 09 23 20 54 68 65 20 65 78 70 61 } {...# The expa
2a80: 6e 73 69 6f 6e 20 61 72 63 73 20 67 6f 20 66 72 nsion arcs go fr
2a90: 6f 6d 20 62 61 73 65 6c 69 6e 65 20 74 6f 20 64 om baseline to d
2aa0: 65 6c 74 61 0a 09 09 23 20 64 65 73 63 65 6e 64 elta...# descend
2ab0: 61 6e 74 2c 20 62 61 73 65 64 20 6f 6e 20 74 68 ant, based on th
2ac0: 65 20 62 6c 6f 62 20 69 6e 66 6f 72 6d 61 74 69 e blob informati
2ad0: 6f 6e 2e 0a 09 09 6c 61 70 70 65 6e 64 20 65 61 on....lappend ea
2ae0: 72 63 73 20 24 63 70 61 72 65 6e 74 20 24 63 69 rcs $cparent $ci
2af0: 64 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 d.. }..}...#
2b00: 50 68 61 73 65 20 49 49 3a 20 49 6e 73 65 72 74 Phase II: Insert
2b10: 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 65 64 the accumulated
2b20: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 0a 09 dependencies...
2b30: 66 6f 72 65 61 63 68 20 7b 66 72 6f 6d 20 74 6f foreach {from to
2b40: 7d 20 24 65 61 72 63 73 20 7b 20 24 65 78 20 61 } $earcs { $ex a
2b50: 72 63 20 69 6e 73 65 72 74 20 24 66 72 6f 6d 20 rc insert $from
2b60: 24 74 6f 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b $to }..foreach {
2b70: 66 72 6f 6d 20 74 6f 7d 20 24 7a 61 72 63 73 20 from to} $zarcs
2b80: 7b 20 24 7a 70 20 61 72 63 20 69 6e 73 65 72 74 { $zp arc insert
2b90: 20 24 66 72 6f 6d 20 24 74 6f 20 7d 0a 0a 09 23 $from $to }...#
2ba0: 20 50 68 61 73 65 20 49 49 49 3a 20 54 72 61 76 Phase III: Trav
2bb0: 65 72 73 65 20 74 68 65 20 67 72 61 70 68 73 2c erse the graphs,
2bc0: 20 65 78 70 61 6e 64 20 74 68 65 20 66 69 6c 65 expand the file
2bd0: 2c 20 61 6e 64 0a 09 23 20 20 20 20 20 20 20 20 , and..#
2be0: 20 20 20 20 67 65 6e 65 72 61 74 65 20 69 6d 70 generate imp
2bf0: 6f 72 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 ort instructions
2c00: 2e 0a 0a 09 73 65 74 20 61 72 63 68 69 76 65 20 ....set archive
2c10: 5b 3a 3a 66 69 6c 65 20 6a 6f 69 6e 20 5b 24 6d [::file join [$m
2c20: 79 70 72 6f 6a 65 63 74 20 66 75 6c 6c 70 61 74 yproject fullpat
2c30: 68 5d 20 24 6d 79 70 61 74 68 5d 0a 09 73 65 74 h] $mypath]..set
2c40: 20 61 63 20 20 20 20 20 20 5b 6f 70 65 6e 20 24 ac [open $
2c50: 61 72 63 68 69 76 65 20 72 5d 0a 09 66 63 6f 6e archive r]..fcon
2c60: 66 69 67 75 72 65 20 24 61 63 20 2d 74 72 61 6e figure $ac -tran
2c70: 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a 0a slation binary..
2c80: 09 23 20 46 69 72 73 74 20 74 72 61 76 65 72 73 .# First travers
2c90: 65 20 74 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 e the expansion
2ca0: 67 72 61 70 68 2c 20 74 68 69 73 20 67 69 76 65 graph, this give
2cb0: 73 20 75 73 20 74 68 65 0a 09 23 20 72 65 76 69 s us the..# revi
2cc0: 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6f 72 64 sions in the ord
2cd0: 65 72 20 77 65 20 68 61 76 65 20 74 6f 20 65 78 er we have to ex
2ce0: 70 61 6e 64 20 74 68 65 6d 2c 20 77 68 69 63 68 pand them, which
2cf0: 20 77 65 20 64 6f 2e 0a 0a 09 73 65 74 20 6d 61 we do....set ma
2d00: 78 20 5b 6c 6c 65 6e 67 74 68 20 5b 24 65 78 20 x [llength [$ex
2d10: 6e 6f 64 65 73 5d 5d 0a 09 73 65 74 20 6d 79 69 nodes]]..set myi
2d20: 6d 70 6f 72 74 20 30 0a 0a 09 67 74 63 6f 72 65 mport 0...gtcore
2d30: 20 64 61 74 61 63 6d 64 20 20 20 5b 6d 79 6d 65 datacmd [myme
2d40: 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74 61 5d thod ExpandData]
2d50: 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d 61 74 63 ..gtcore formatc
2d60: 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 md [mymethod Exp
2d70: 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67 74 63 6f andFormat]..gtco
2d80: 72 65 20 73 6f 72 74 63 6d 64 20 20 20 5b 6d 79 re sortcmd [my
2d90: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53 6f 72 method ExpandSor
2da0: 74 5d 0a 09 67 74 63 6f 72 65 20 73 61 76 65 63 t]..gtcore savec
2db0: 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 md [mymethod E
2dc0: 78 70 61 6e 64 31 20 24 61 63 20 24 64 69 72 20 xpand1 $ac $dir
2dd0: 24 6d 61 78 5d 0a 0a 09 67 74 63 6f 72 65 20 74 $max]...gtcore t
2de0: 72 61 76 65 72 73 65 20 24 65 78 20 7b 45 78 70 raverse $ex {Exp
2df0: 61 6e 64 69 6e 67 20 72 65 76 69 73 69 6f 6e 73 anding revisions
2e00: 2e 2e 2e 7d 0a 09 63 6c 6f 73 65 20 24 61 63 0a ...}..close $ac.
2e10: 0a 09 23 20 4e 6f 77 20 74 72 61 76 65 72 73 65 ..# Now traverse
2e20: 20 74 68 65 20 69 6d 70 6f 72 74 20 67 72 61 70 the import grap
2e30: 68 2c 20 74 68 69 73 20 62 75 69 6c 64 73 20 74 h, this builds t
2e40: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 09 he instruction..
2e50: 23 20 6d 61 70 20 66 6f 72 20 74 68 65 20 66 6f # map for the fo
2e60: 73 73 69 6c 20 64 65 6c 74 61 73 2e 0a 0a 09 67 ssil deltas....g
2e70: 74 63 6f 72 65 20 64 61 74 61 63 6d 64 20 20 20 tcore datacmd
2e80: 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 [mymethod Expand
2e90: 44 61 74 61 5d 0a 09 67 74 63 6f 72 65 20 66 6f Data]..gtcore fo
2ea0: 72 6d 61 74 63 6d 64 20 5b 6d 79 6d 65 74 68 6f rmatcmd [mymetho
2eb0: 64 20 45 78 70 61 6e 64 46 6f 72 6d 61 74 5d 0a d ExpandFormat].
2ec0: 09 67 74 63 6f 72 65 20 73 6f 72 74 63 6d 64 20 .gtcore sortcmd
2ed0: 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 [mymethod Expa
2ee0: 6e 64 53 6f 72 74 5d 0a 09 67 74 63 6f 72 65 20 ndSort]..gtcore
2ef0: 73 61 76 65 63 6d 64 20 20 20 5b 6d 79 6d 65 74 savecmd [mymet
2f00: 68 6f 64 20 45 78 70 61 6e 64 32 5d 0a 0a 09 73 hod Expand2]...s
2f10: 65 74 20 6d 79 69 6d 70 6f 72 74 20 7b 7d 0a 09 et myimport {}..
2f20: 67 74 63 6f 72 65 20 74 72 61 76 65 72 73 65 20 gtcore traverse
2f30: 24 7a 70 20 7b 47 65 6e 65 72 61 74 69 6e 67 20 $zp {Generating
2f40: 72 65 76 69 73 69 6f 6e 20 6f 72 64 65 72 20 66 revision order f
2f50: 6f 72 20 69 6d 70 6f 72 74 2e 2e 2e 7d 0a 09 73 or import...}..s
2f60: 65 74 20 66 69 6c 65 6d 61 70 20 24 6d 79 69 6d et filemap $myim
2f70: 70 6f 72 74 0a 09 75 6e 73 65 74 20 6d 79 69 6d port..unset myim
2f80: 70 6f 72 74 0a 0a 09 23 20 41 6e 64 20 62 61 63 port...# And bac
2f90: 6b 20 74 6f 20 69 6d 70 6f 72 74 20 63 6f 6e 74 k to import cont
2fa0: 72 6f 6c 0a 0a 09 24 65 78 20 64 65 73 74 72 6f rol...$ex destro
2fb0: 79 0a 09 24 7a 70 20 64 65 73 74 72 6f 79 0a 0a y..$zp destroy..
2fc0: 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 66 .return [list $f
2fd0: 69 6c 65 6d 61 70 20 24 72 65 76 6d 61 70 5d 0a ilemap $revmap].
2fe0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
2ff0: 64 20 45 78 70 61 6e 64 44 61 74 61 20 20 20 7b d ExpandData {
3000: 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 20 72 65 graph node} { re
3010: 74 75 72 6e 20 5b 24 67 72 61 70 68 20 6e 6f 64 turn [$graph nod
3020: 65 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76 6e e get $node revn
3030: 72 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 r] }. method
3040: 45 78 70 61 6e 64 46 6f 72 6d 61 74 20 7b 67 72 ExpandFormat {gr
3050: 61 70 68 20 69 74 65 6d 7d 20 7b 20 72 65 74 75 aph item} { retu
3060: 72 6e 20 3c 5b 6c 69 6e 64 65 78 20 24 69 74 65 rn <[lindex $ite
3070: 6d 20 31 5d 3e 20 7d 20 3b 20 23 20 72 65 76 6e m 1]> } ; # revn
3080: 72 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 r. method Exp
3090: 61 6e 64 53 6f 72 74 20 20 20 7b 67 72 61 70 68 andSort {graph
30a0: 20 63 61 6e 64 69 64 61 74 65 73 7d 20 7b 0a 09 candidates} {..
30b0: 23 20 63 61 6e 64 69 64 61 74 65 73 20 3d 20 6c # candidates = l
30c0: 69 73 74 28 69 74 65 6d 29 2c 20 69 74 65 6d 20 ist(item), item
30d0: 3d 20 6c 69 73 74 28 6e 6f 64 65 20 72 65 76 6e = list(node revn
30e0: 72 29 0a 09 23 20 53 6f 72 74 20 62 79 20 6e 6f r)..# Sort by no
30f0: 64 65 20 61 6e 64 20 72 65 76 6e 72 20 2d 3e 20 de and revnr ->
3100: 54 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 Trunk revisions
3110: 63 6f 6d 65 20 66 69 72 73 74 2e 0a 09 72 65 74 come first...ret
3120: 75 72 6e 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 urn [lsort -inde
3130: 78 20 31 20 2d 64 69 63 74 20 5b 6c 73 6f 72 74 x 1 -dict [lsort
3140: 20 2d 69 6e 64 65 78 20 30 20 2d 64 69 63 74 20 -index 0 -dict
3150: 24 63 61 6e 64 69 64 61 74 65 73 5d 5d 0a 20 20 $candidates]].
3160: 20 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 }. method E
3170: 78 70 61 6e 64 31 20 7b 63 68 61 6e 20 64 69 72 xpand1 {chan dir
3180: 20 6d 61 78 20 67 72 61 70 68 20 6e 6f 64 65 7d max graph node}
3190: 20 7b 0a 09 6c 6f 67 20 70 72 6f 67 72 65 73 73 {..log progress
31a0: 20 33 20 66 69 6c 65 20 24 6d 79 69 6d 70 6f 72 3 file $myimpor
31b0: 74 20 24 6d 61 78 20 3b 20 69 6e 63 72 20 6d 79 t $max ; incr my
31c0: 69 6d 70 6f 72 74 0a 0a 09 73 65 74 20 72 65 76 import...set rev
31d0: 6e 72 20 20 20 20 20 20 20 20 20 20 20 5b 24 67 nr [$g
31e0: 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e raph node get $n
31f0: 6f 64 65 20 72 65 76 6e 72 5d 0a 09 73 65 74 20 ode revnr]..set
3200: 66 6e 61 6d 65 20 20 20 20 20 20 20 20 20 20 72 fname r
3210: 24 72 65 76 6e 72 0a 09 73 74 72 75 63 74 3a 3a $revnr..struct::
3220: 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 24 67 72 list assign [$gr
3230: 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f aph node get $no
3240: 64 65 20 74 65 78 74 5d 20 6f 66 66 73 65 74 20 de text] offset
3250: 6c 65 6e 67 74 68 0a 0a 09 69 66 20 7b 24 6c 65 length...if {$le
3260: 6e 67 74 68 20 3c 20 30 7d 20 7b 0a 09 20 20 20 ngth < 0} {..
3270: 20 73 65 74 20 64 61 74 61 20 22 22 0a 09 7d 20 set data ""..}
3280: 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 65 6b else {.. seek
3290: 20 24 63 68 61 6e 20 24 6f 66 66 73 65 74 20 73 $chan $offset s
32a0: 74 61 72 74 0a 09 20 20 20 20 73 65 74 20 64 61 tart.. set da
32b0: 74 61 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b ta [string map {
32c0: 40 40 20 40 7d 20 5b 72 65 61 64 20 24 63 68 61 @@ @} [read $cha
32d0: 6e 20 24 6c 65 6e 67 74 68 5d 5d 0a 09 7d 0a 0a n $length]]..}..
32e0: 09 69 66 20 7b 21 5b 24 67 72 61 70 68 20 6e 6f .if {![$graph no
32f0: 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6e 6f de keyexists $no
3300: 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a de __base__]} {.
3310: 09 20 20 20 20 23 20 46 75 6c 6c 20 74 65 78 74 . # Full text
3320: 20 6e 6f 64 65 2e 20 47 65 74 20 74 68 65 20 64 node. Get the d
3330: 61 74 61 2c 20 64 65 63 6f 64 65 20 69 74 2c 20 ata, decode it,
3340: 61 6e 64 20 73 61 76 65 2e 0a 0a 09 20 20 20 20 and save....
3350: 6c 6f 67 20 77 72 69 74 65 20 38 20 66 69 6c 65 log write 8 file
3360: 20 7b 45 78 70 61 6e 64 69 6e 67 20 3c 24 72 65 {Expanding <$re
3370: 76 6e 72 3e 2c 20 66 75 6c 6c 20 74 65 78 74 7d vnr>, full text}
3380: 0a 0a 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a ... fileutil:
3390: 3a 77 72 69 74 65 46 69 6c 65 20 2d 74 72 61 6e :writeFile -tran
33a0: 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 slation binary $
33b0: 64 69 72 2f 24 66 6e 61 6d 65 20 24 64 61 74 61 dir/$fname $data
33c0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 ..} else {..
33d0: 23 20 44 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f # Delta node. __
33e0: 62 61 73 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 base__ is the na
33f0: 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63 me of the file c
3400: 6f 6e 74 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 ontaining.. #
3410: 20 74 68 65 20 62 61 73 65 6c 69 6e 65 2e 20 54 the baseline. T
3420: 68 65 20 70 61 74 63 68 20 69 73 20 61 74 20 74 he patch is at t
3430: 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 6f 63 he specified loc
3440: 61 74 69 6f 6e 20 6f 66 0a 09 20 20 20 20 23 20 ation of.. #
3450: 74 68 65 20 61 72 63 68 69 76 65 20 66 69 6c 65 the archive file
3460: 2e 0a 0a 09 20 20 20 20 73 65 74 20 66 62 61 73 .... set fbas
3470: 65 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 e [$graph node g
3480: 65 74 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f et $node __base_
3490: 5f 5d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 _].. log writ
34a0: 65 20 38 20 66 69 6c 65 20 7b 45 78 70 61 6e 64 e 8 file {Expand
34b0: 69 6e 67 20 3c 24 72 65 76 6e 72 3e 2c 20 69 73 ing <$revnr>, is
34c0: 20 64 65 6c 74 61 20 6f 66 20 3c 24 66 62 61 73 delta of <$fbas
34d0: 65 3e 7d 0a 0a 09 20 20 20 20 73 65 74 20 62 61 e>}... set ba
34e0: 73 65 20 5b 66 69 6c 65 75 74 69 6c 3a 3a 63 61 se [fileutil::ca
34f0: 74 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 t -translation b
3500: 69 6e 61 72 79 20 24 64 69 72 2f 24 66 62 61 73 inary $dir/$fbas
3510: 65 5d 0a 0a 09 20 20 20 20 23 20 57 72 69 74 69 e]... # Writi
3520: 6e 67 20 74 68 65 20 70 61 74 63 68 20 74 6f 20 ng the patch to
3530: 64 69 73 6b 20 69 73 20 6a 75 73 74 20 66 6f 72 disk is just for
3540: 20 62 65 74 74 65 72 0a 09 20 20 20 20 23 20 64 better.. # d
3550: 65 62 75 67 67 69 6e 67 2e 20 49 74 20 69 73 20 ebugging. It is
3560: 6e 6f 74 20 75 73 65 64 20 6f 74 68 65 72 77 69 not used otherwi
3570: 73 65 2e 0a 09 20 20 20 20 66 69 6c 65 75 74 69 se... fileuti
3580: 6c 3a 3a 77 72 69 74 65 46 69 6c 65 20 24 64 69 l::writeFile $di
3590: 72 2f 72 70 61 74 63 68 20 24 64 61 74 61 0a 09 r/rpatch $data..
35a0: 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 fileutil::wr
35b0: 69 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61 iteFile -transla
35c0: 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72 tion binary $dir
35d0: 2f 24 66 6e 61 6d 65 20 5c 0a 09 09 5b 41 70 70 /$fname \...[App
35e0: 6c 79 20 24 62 61 73 65 20 24 64 61 74 61 5d 0a ly $base $data].
35f0: 09 7d 0a 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 .}...# Post to a
3600: 6c 6c 20 73 75 63 63 65 73 73 6f 72 73 20 74 68 ll successors th
3610: 61 74 20 74 68 65 20 6a 75 73 74 20 67 65 6e 65 at the just gene
3620: 72 61 74 65 64 20 66 69 6c 65 20 69 73 20 74 68 rated file is th
3630: 65 69 72 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e eir..# baseline.
3640: 0a 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20 5b ...foreach out [
3650: 24 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 $graph nodes -ou
3660: 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 t $node] {..
3670: 24 67 72 61 70 68 20 6e 6f 64 65 20 73 65 74 20 $graph node set
3680: 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 20 24 66 $out __base__ $f
3690: 6e 61 6d 65 0a 09 7d 0a 09 72 65 74 75 72 6e 0a name..}..return.
36a0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 }.. proc
36b0: 41 70 70 6c 79 20 7b 62 61 73 65 20 64 65 6c 74 Apply {base delt
36c0: 61 7d 20 7b 0a 09 23 20 62 61 73 65 20 20 3d 20 a} {..# base =
36d0: 62 61 73 65 20 74 65 78 74 2e 0a 09 23 20 64 65 base text...# de
36e0: 6c 74 61 20 3d 20 64 65 6c 74 61 20 69 6e 20 72 lta = delta in r
36f0: 63 73 20 66 6f 72 6d 61 74 2e 0a 09 23 0a 09 23 cs format...#..#
3700: 20 42 6f 74 68 20 73 74 72 69 6e 67 73 20 61 72 Both strings ar
3710: 65 20 75 6e 65 6e 63 6f 64 65 64 2c 20 69 2e 65 e unencoded, i.e
3720: 2e 20 74 68 69 6e 67 73 20 6c 69 6b 65 20 40 40 . things like @@
3730: 2c 20 65 74 63 2e 20 68 61 76 65 0a 09 23 20 61 , etc. have..# a
3740: 6c 72 65 61 64 79 20 62 65 65 6e 20 72 65 70 6c lready been repl
3750: 61 63 65 64 20 77 69 74 68 20 74 68 65 69 72 20 aced with their
3760: 70 72 6f 70 65 72 20 63 68 61 72 61 63 74 65 72 proper character
3770: 73 2e 0a 09 23 0a 09 23 20 52 65 74 75 72 6e 20 s...#..# Return
3780: 76 61 6c 75 65 20 69 73 20 74 68 65 20 70 61 74 value is the pat
3790: 63 68 65 64 20 74 65 78 74 2e 0a 0a 09 73 65 74 ched text....set
37a0: 20 62 61 73 65 20 5b 73 70 6c 69 74 20 24 62 61 base [split $ba
37b0: 73 65 20 5c 6e 5d 0a 09 73 65 74 20 62 6c 65 6e se \n]..set blen
37c0: 20 5b 6c 6c 65 6e 67 74 68 20 24 62 61 73 65 5d [llength $base]
37d0: 0a 09 73 65 74 20 6f 6f 66 66 20 30 0a 09 73 65 ..set ooff 0..se
37e0: 74 20 72 65 73 20 22 22 0a 0a 09 73 65 74 20 6c t res ""...set l
37f0: 69 6e 65 73 20 20 5b 73 70 6c 69 74 20 24 64 65 ines [split $de
3800: 6c 74 61 20 5c 6e 5d 0a 09 73 65 74 20 6e 6c 69 lta \n]..set nli
3810: 6e 65 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 nes [llength $li
3820: 6e 65 73 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 nes]...log write
3830: 20 31 31 20 66 69 6c 65 20 7b 42 61 73 65 20 20 11 file {Base
3840: 6c 69 6e 65 73 20 3d 20 24 62 6c 65 6e 7d 0a 09 lines = $blen}..
3850: 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c log write 11 fil
3860: 65 20 7b 44 65 6c 74 61 20 6c 69 6e 65 73 20 3d e {Delta lines =
3870: 20 24 6e 6c 69 6e 65 73 7d 0a 0a 09 66 6f 72 20 $nlines}...for
3880: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 {set i 0} {$i <
3890: 24 6e 6c 69 6e 65 73 7d 20 7b 7d 20 7b 0a 09 20 $nlines} {} {..
38a0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 log write 11
38b0: 66 69 6c 65 20 7b 20 20 20 20 40 20 24 69 20 3d file { @ $i =
38c0: 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 [lindex $lines
38d0: 24 69 5d 7d 0a 09 20 20 20 20 6c 6f 67 20 77 72 $i]}.. log wr
38e0: 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 6f 6f ite 11 file { oo
38f0: 66 66 20 24 6f 6f 66 66 7d 0a 0a 09 20 20 20 20 ff $ooff}...
3900: 69 66 20 7b 21 5b 72 65 67 65 78 70 20 7b 5e 28 if {![regexp {^(
3910: 5b 61 64 5d 29 28 5c 64 2b 29 5c 73 28 5c 64 2b [ad])(\d+)\s(\d+
3920: 29 24 7d 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e )$} [lindex $lin
3930: 65 73 20 24 69 5d 20 2d 3e 20 63 6d 64 20 73 6c es $i] -> cmd sl
3940: 20 63 6e 5d 7d 20 7b 0a 09 09 74 72 6f 75 62 6c cn]} {...troubl
3950: 65 20 69 6e 74 65 72 6e 61 6c 20 22 42 61 64 20 e internal "Bad
3960: 65 64 20 63 6f 6d 6d 61 6e 64 20 27 5b 6c 69 6e ed command '[lin
3970: 64 65 78 20 24 6c 69 6e 65 73 20 24 69 5d 27 22 dex $lines $i]'"
3980: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 6c 6f .. }... lo
3990: 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 g write 11 file
39a0: 7b 20 20 63 6d 64 20 24 63 6d 64 7d 0a 09 20 20 { cmd $cmd}..
39b0: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 log write 11 f
39c0: 69 6c 65 20 7b 20 20 20 73 6c 20 24 73 6c 7d 0a ile { sl $sl}.
39d0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 . log write 1
39e0: 31 20 66 69 6c 65 20 7b 20 20 20 63 6e 20 24 63 1 file { cn $c
39f0: 6e 7d 0a 0a 09 20 20 20 20 69 6e 63 72 20 69 0a n}... incr i.
3a00: 09 20 20 20 20 73 65 74 20 65 6c 20 5b 65 78 70 . set el [exp
3a10: 72 20 7b 24 73 6c 20 2b 20 24 63 6e 7d 5d 0a 0a r {$sl + $cn}]..
3a20: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 . log write 1
3a30: 31 20 66 69 6c 65 20 7b 20 20 20 65 6c 20 24 65 1 file { el $e
3a40: 6c 7d 0a 0a 09 20 20 20 20 73 77 69 74 63 68 20 l}... switch
3a50: 2d 65 78 61 63 74 20 2d 2d 20 24 63 6d 64 20 7b -exact -- $cmd {
3a60: 0a 09 09 64 20 7b 0a 09 09 20 20 20 20 69 6e 63 ...d {... inc
3a70: 72 20 73 6c 20 2d 31 0a 09 09 20 20 20 20 69 6e r sl -1... in
3a80: 63 72 20 65 6c 20 2d 31 0a 09 09 20 20 20 20 69 cr el -1... i
3a90: 66 20 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 f {$sl < $ooff}
3aa0: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e { trouble intern
3ab0: 61 6c 20 7b 44 65 6c 65 74 69 6f 6e 20 62 65 66 al {Deletion bef
3ac0: 6f 72 65 20 6c 61 73 74 20 65 64 69 74 7d 20 7d ore last edit} }
3ad0: 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c 20 3e ... if {$sl >
3ae0: 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c $blen} { troubl
3af0: 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c 65 e internal {Dele
3b00: 74 69 6f 6e 20 70 61 73 74 20 66 69 6c 65 20 65 tion past file e
3b10: 6e 64 7d 20 7d 0a 09 09 20 20 20 20 69 66 20 7b nd} }... if {
3b20: 24 65 6c 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 $el > $blen} { t
3b30: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 rouble internal
3b40: 7b 44 65 6c 65 74 69 6f 6e 20 62 65 79 6f 6e 64 {Deletion beyond
3b50: 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 09 09 20 file end} }...
3b60: 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 foreach x [lr
3b70: 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66 ange $base $ooff
3b80: 20 24 73 6c 5d 20 7b 20 6c 61 70 70 65 6e 64 20 $sl] { lappend
3b90: 72 65 73 20 24 78 20 7d 0a 09 09 20 20 20 20 73 res $x }... s
3ba0: 65 74 20 20 6f 6f 66 66 20 24 65 6c 0a 09 09 7d et ooff $el...}
3bb0: 0a 09 09 61 20 7b 0a 09 09 20 20 20 20 69 66 20 ...a {... if
3bc0: 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 {$sl < $ooff} {
3bd0: 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c trouble internal
3be0: 20 7b 49 6e 73 65 72 74 20 62 65 66 6f 72 65 20 {Insert before
3bf0: 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 09 20 last edit} }...
3c00: 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c if {$sl > $bl
3c10: 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e en} { trouble in
3c20: 74 65 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20 70 ternal {Insert p
3c30: 61 73 74 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a ast file end} }.
3c40: 0a 09 09 20 20 20 20 66 6f 72 65 61 63 68 20 78 ... foreach x
3c50: 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65 20 24 [lrange $base $
3c60: 6f 6f 66 66 20 24 73 6c 5d 20 20 20 20 20 20 20 ooff $sl]
3c70: 20 20 20 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 { lappend
3c80: 72 65 73 20 24 78 20 7d 0a 09 09 20 20 20 20 66 res $x }... f
3c90: 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 65 oreach x [lrange
3ca0: 20 24 6c 69 6e 65 73 20 24 69 20 5b 65 78 70 72 $lines $i [expr
3cb0: 20 7b 24 69 20 2b 20 24 63 6e 7d 5d 5d 20 7b 20 {$i + $cn}]] {
3cc0: 6c 61 70 70 65 6e 64 20 72 65 73 20 24 78 20 7d lappend res $x }
3cd0: 0a 09 09 20 20 20 20 73 65 74 20 6f 6f 66 66 20 ... set ooff
3ce0: 24 73 6c 0a 09 09 20 20 20 20 69 6e 63 72 20 69 $sl... incr i
3cf0: 20 24 63 6e 0a 09 09 7d 0a 09 20 20 20 20 7d 0a $cn...}.. }.
3d00: 09 7d 0a 09 66 6f 72 65 61 63 68 20 78 20 5b 6c .}..foreach x [l
3d10: 72 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 range $base $oof
3d20: 66 20 65 6e 64 5d 20 7b 20 6c 61 70 70 65 6e 64 f end] { lappend
3d30: 20 72 65 73 20 24 78 20 7d 0a 09 72 65 74 75 72 res $x }..retur
3d40: 6e 20 5b 6a 6f 69 6e 20 24 72 65 73 20 5c 6e 5d n [join $res \n]
3d50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
3d60: 6f 64 20 45 78 70 61 6e 64 32 20 7b 67 72 61 70 od Expand2 {grap
3d70: 68 20 6e 6f 64 65 7d 20 7b 0a 09 73 65 74 20 72 h node} {..set r
3d80: 65 76 6e 72 20 5b 24 67 72 61 70 68 20 6e 6f 64 evnr [$graph nod
3d90: 65 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76 6e e get $node revn
3da0: 72 5d 0a 0a 09 23 20 46 69 72 73 74 20 69 6d 70 r]...# First imp
3db0: 6f 72 74 20 74 68 65 20 66 69 6c 65 2e 0a 09 6c ort the file...l
3dc0: 61 70 70 65 6e 64 20 6d 79 69 6d 70 6f 72 74 20 append myimport
3dd0: 5b 6c 69 73 74 20 41 20 72 24 72 65 76 6e 72 20 [list A r$revnr
3de0: 7b 7d 5d 0a 0a 09 69 66 20 7b 5b 24 67 72 61 70 {}]...if {[$grap
3df0: 68 20 6e 6f 64 65 20 6b 65 79 65 78 69 73 74 73 h node keyexists
3e00: 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d $node __base__]
3e10: 7d 20 7b 0a 09 20 20 20 20 23 20 44 65 6c 74 61 } {.. # Delta
3e20: 20 6e 6f 64 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 node. __base__
3e30: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 is the name of t
3e40: 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 he file containi
3e50: 6e 67 0a 09 20 20 20 20 23 20 74 68 65 20 62 61 ng.. # the ba
3e60: 73 65 6c 69 6e 65 2e 20 47 65 6e 65 72 61 74 65 seline. Generate
3e70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 instruction to
3e80: 6d 61 6b 65 20 74 68 65 20 64 65 6c 74 61 20 61 make the delta a
3e90: 73 0a 09 20 20 20 20 23 20 77 65 6c 6c 2e 0a 0a s.. # well...
3ea0: 09 20 20 20 20 73 65 74 20 66 62 61 73 65 20 5b . set fbase [
3eb0: 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 $graph node get
3ec0: 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a $node __base__].
3ed0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 69 . lappend myi
3ee0: 6d 70 6f 72 74 20 5b 6c 69 73 74 20 44 20 72 24 mport [list D r$
3ef0: 72 65 76 6e 72 20 72 24 66 62 61 73 65 5d 0a 09 revnr r$fbase]..
3f00: 7d 0a 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 6c }...# Post to al
3f10: 6c 20 73 75 63 63 65 73 73 6f 72 73 20 74 68 61 l successors tha
3f20: 74 20 74 68 65 20 6a 75 73 74 20 67 65 6e 65 72 t the just gener
3f30: 61 74 65 64 20 66 69 6c 65 20 69 73 20 74 68 65 ated file is the
3f40: 69 72 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e 20 ir..# baseline.
3f50: 45 78 63 65 70 74 69 6f 6e 3a 20 54 68 6f 73 65 Exception: Those
3f60: 20 77 68 69 63 68 20 61 76 65 20 61 6c 72 65 61 which ave alrea
3f70: 64 79 20 61 20 62 61 73 65 6c 69 6e 65 20 73 65 dy a baseline se
3f80: 74 2e 0a 09 23 20 54 6f 67 65 74 68 65 72 20 77 t...# Together w
3f90: 69 74 68 20 74 68 65 20 73 6f 72 74 69 6e 67 20 ith the sorting
3fa0: 6f 66 20 74 72 75 6e 6b 20 72 65 76 69 73 69 6f of trunk revisio
3fb0: 6e 73 20 66 69 72 73 74 20 74 68 65 20 74 72 75 ns first the tru
3fc0: 6e 6b 0a 09 23 20 73 68 6f 75 6c 64 20 6f 6e 65 nk..# should one
3fd0: 20 75 6e 69 6e 74 65 72 75 70 74 65 64 20 6c 69 uninterupted li
3fe0: 6e 65 2c 20 77 69 74 68 20 62 72 61 6e 63 68 20 ne, with branch
3ff0: 72 6f 6f 74 73 20 5f 6e 6f 74 5f 20 64 65 6c 74 roots _not_ delt
4000: 61 0a 09 23 20 63 6f 6d 70 72 65 73 73 65 64 20 a..# compressed
4010: 70 65 72 20 74 68 65 69 72 20 62 72 61 6e 63 68 per their branch
4020: 65 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 6f 75 es....foreach ou
4030: 74 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 73 20 t [$graph nodes
4040: 2d 6f 75 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 -out $node] {..
4050: 20 20 20 69 66 20 7b 5b 24 67 72 61 70 68 20 6e if {[$graph n
4060: 6f 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6f ode keyexists $o
4070: 75 74 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 63 6f ut __base__]} co
4080: 6e 74 69 6e 75 65 0a 09 20 20 20 20 24 67 72 61 ntinue.. $gra
4090: 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f 75 74 ph node set $out
40a0: 20 5f 5f 62 61 73 65 5f 5f 20 24 72 65 76 6e 72 __base__ $revnr
40b0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
40c0: 7d 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 }.. variable
40d0: 6d 79 69 6d 70 6f 72 74 0a 0a 20 20 20 20 23 20 myimport.. #
40e0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
40f0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
4100: 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 74 61 #####. ## Sta
4110: 74 65 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 te.. variable
4120: 20 6d 79 69 64 20 20 20 20 20 20 20 20 20 20 20 myid
4130: 20 20 20 7b 7d 20 3b 20 23 20 46 69 6c 65 20 69 {} ; # File i
4140: 64 20 69 6e 20 74 68 65 20 70 65 72 73 69 73 74 d in the persist
4150: 65 6e 74 20 73 74 61 74 65 2e 0a 20 20 20 20 76 ent state.. v
4160: 61 72 69 61 62 6c 65 20 6d 79 70 61 74 68 20 20 ariable mypath
4170: 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 {} ; #
4180: 20 50 61 74 68 20 6f 66 20 74 68 65 20 66 69 6c Path of the fil
4190: 65 27 73 20 72 63 73 20 61 72 63 68 69 76 65 2e e's rcs archive.
41a0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
41b0: 75 73 72 70 61 74 68 20 20 20 20 20 20 20 20 20 usrpath
41c0: 7b 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74 {} ; # Path of t
41d0: 68 65 20 66 69 6c 65 20 61 73 20 73 65 65 6e 20 he file as seen
41e0: 62 79 20 75 73 65 72 73 2e 0a 20 20 20 20 76 61 by users.. va
41f0: 72 69 61 62 6c 65 20 6d 79 65 78 65 63 75 74 61 riable myexecuta
4200: 62 6c 65 20 20 20 20 20 20 30 20 20 3b 20 23 20 ble 0 ; #
4210: 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 20 27 66 69 Boolean flag 'fi
4220: 6c 65 20 65 78 65 63 75 74 61 62 6c 65 27 2e 0a le executable'..
4230: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 variable myp
4240: 72 6f 6a 65 63 74 20 20 20 20 20 20 20 20 20 7b roject {
4250: 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 } ; # Reference
4260: 74 6f 20 74 68 65 20 70 72 6f 6a 65 63 74 20 6f to the project o
4270: 62 6a 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 bject..... #
4280: 74 68 65 20 66 69 6c 65 20 62 65 6c 6f 6e 67 73 the file belongs
4290: 20 74 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c to.. variabl
42a0: 65 20 6d 79 72 65 76 20 2d 61 72 72 61 79 20 20 e myrev -array
42b0: 20 20 20 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 {} ; # Maps
42c0: 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 revision number
42d0: 74 6f 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 to the..... #
42e0: 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 76 69 associated revi
42f0: 73 69 6f 6e 20 6f 62 6a 65 63 74 2e 0a 20 20 20 sion object..
4300: 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65 76 69 variable myrevi
4310: 73 69 6f 6e 73 20 20 20 20 20 20 20 7b 7d 20 3b sions {} ;
4320: 20 23 20 53 61 6d 65 20 61 73 20 6d 79 72 65 76 # Same as myrev
4330: 2c 20 62 75 74 20 61 20 6c 69 73 74 2c 0a 09 09 , but a list,...
4340: 09 09 20 20 20 20 23 20 67 69 76 69 6e 67 20 75 .. # giving u
4350: 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 0a 09 s the order of..
4360: 09 09 09 20 20 20 20 23 20 72 65 76 69 73 69 6f ... # revisio
4370: 6e 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 ns.. variable
4380: 20 6d 79 61 69 64 20 20 20 20 20 20 2d 61 72 72 myaid -arr
4390: 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 72 65 ay {} ; # Map re
43a0: 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 74 vision numbers t
43b0: 6f 20 74 68 65 20 69 64 0a 09 09 09 09 20 20 20 o the id.....
43c0: 20 23 20 6f 66 20 74 68 65 20 61 75 74 68 6f 72 # of the author
43d0: 20 77 68 6f 20 63 6f 6d 6d 69 74 74 65 64 0a 09 who committed..
43e0: 09 09 09 20 20 20 20 23 20 69 74 2e 20 54 68 69 ... # it. Thi
43f0: 73 20 69 73 20 6c 61 74 65 72 20 61 67 67 72 65 s is later aggre
4400: 67 61 74 65 64 0a 09 09 09 09 20 20 20 20 23 20 gated..... #
4410: 77 69 74 68 20 63 6f 6d 6d 69 74 20 6d 65 73 73 with commit mess
4420: 61 67 65 2c 20 62 72 61 6e 63 68 20 6e 61 6d 65 age, branch name
4430: 0a 09 09 09 09 20 20 20 20 23 20 61 6e 64 20 70 ..... # and p
4440: 72 6f 6a 65 63 74 20 69 64 20 66 6f 72 20 61 20 roject id for a
4450: 6d 65 74 61 20 69 64 2e 0a 20 20 20 20 76 61 72 meta id.. var
4460: 69 61 62 6c 65 20 6d 79 68 65 61 64 72 65 76 6e iable myheadrevn
4470: 72 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 48 r {} ; # H
4480: 65 61 64 20 72 65 76 69 73 69 6f 6e 20 28 72 65 ead revision (re
4490: 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 vision number).
44a0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 variable mypr
44b0: 69 6e 63 69 70 61 6c 20 20 20 20 20 20 20 7b 7d incipal {}
44c0: 20 3b 20 23 20 50 72 69 6e 63 69 70 61 6c 20 62 ; # Principal b
44d0: 72 61 6e 63 68 20 28 62 72 61 6e 63 68 20 6e 75 ranch (branch nu
44e0: 6d 62 65 72 29 2e 0a 09 09 09 09 20 20 20 20 23 mber)...... #
44f0: 20 43 6f 6e 74 72 61 72 79 20 74 6f 20 74 68 65 Contrary to the
4500: 20 6e 61 6d 65 20 74 68 69 73 20 69 73 20 74 68 name this is th
4510: 65 0a 09 09 09 09 20 20 20 20 23 20 64 65 66 61 e..... # defa
4520: 75 6c 74 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 ult branch..
4530: 76 61 72 69 61 62 6c 65 20 6d 79 64 65 70 65 6e variable mydepen
4540: 64 65 6e 63 69 65 73 20 20 20 20 7b 7d 20 3b 20 dencies {} ;
4550: 23 20 44 69 63 74 69 6f 6e 61 72 79 20 70 61 72 # Dictionary par
4560: 65 6e 74 20 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 ent -> child,...
4570: 09 09 20 20 20 20 23 20 72 65 63 6f 72 64 73 20 .. # records
4580: 70 72 69 6d 61 72 79 20 64 65 70 65 6e 64 65 6e primary dependen
4590: 63 69 65 73 2e 0a 20 20 20 20 76 61 72 69 61 62 cies.. variab
45a0: 6c 65 20 6d 79 69 6d 70 6f 72 74 65 64 20 20 20 le myimported
45b0: 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 0 ; # Bool
45c0: 65 61 6e 20 66 6c 61 67 2e 20 53 65 74 20 69 66 ean flag. Set if
45d0: 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 09 09 09 and only if....
45e0: 09 20 20 20 20 23 20 72 65 76 20 31 2e 31 20 6f . # rev 1.1 o
45f0: 66 20 74 68 65 20 66 69 6c 65 20 73 65 65 6d 69 f the file seemi
4600: 6e 67 6c 79 0a 09 09 09 09 20 20 20 20 23 20 77 ngly..... # w
4610: 61 73 20 69 6d 70 6f 72 74 65 64 20 69 6e 73 74 as imported inst
4620: 65 61 64 20 6f 66 20 61 64 64 65 64 0a 09 09 09 ead of added....
4630: 09 20 20 20 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e . # normally.
4640: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
4650: 72 6f 6f 74 20 20 20 20 20 20 20 20 20 20 20 20 root
4660: 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 {} ; # Reference
4670: 20 74 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e to the revision
4680: 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 20 20 20 object.....
4690: 23 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f # holding the ro
46a0: 6f 74 20 72 65 76 69 73 69 6f 6e 2e 20 20 49 74 ot revision. It
46b0: 73 0a 09 09 09 09 20 20 20 20 23 20 6e 75 6d 62 s..... # numb
46c0: 65 72 20 75 73 75 61 6c 6c 79 20 69 73 20 27 31 er usually is '1
46d0: 2e 31 27 2e 20 43 61 6e 20 62 65 0a 09 09 09 09 .1'. Can be.....
46e0: 20 20 20 20 23 20 61 20 64 69 66 66 65 72 65 6e # a differen
46f0: 74 20 6e 75 6d 62 65 72 2c 20 62 65 63 61 75 73 t number, becaus
4700: 65 20 6f 66 0a 09 09 09 09 20 20 20 20 23 20 67 e of..... # g
4710: 61 70 73 20 63 72 65 61 74 65 64 20 76 69 61 20 aps created via
4720: 27 63 76 73 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 'cvsadmin -o'..
4730: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 variable mybr
4740: 61 6e 63 68 65 73 20 2d 61 72 72 61 79 20 7b 7d anches -array {}
4750: 20 3b 20 23 20 4d 61 70 73 20 62 72 61 6e 63 68 ; # Maps branch
4760: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 73 number to the s
4770: 79 6d 62 6f 6c 0a 09 09 09 09 20 20 20 20 23 20 ymbol..... #
4780: 6f 62 6a 65 63 74 20 68 61 6e 64 6c 69 6e 67 20 object handling
4790: 74 68 65 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 the branch..
47a0: 76 61 72 69 61 62 6c 65 20 6d 79 74 61 67 73 20 variable mytags
47b0: 20 20 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 -array {} ;
47c0: 23 20 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20 # Maps revision
47d0: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6c 69 number to the li
47e0: 73 74 0a 09 09 09 09 20 20 20 20 23 20 6f 66 20 st..... # of
47f0: 73 79 6d 62 6f 6c 20 6f 62 6a 65 63 74 73 20 66 symbol objects f
4800: 6f 72 20 74 68 65 20 74 61 67 73 0a 09 09 09 09 or the tags.....
4810: 20 20 20 20 23 20 61 73 73 6f 63 69 61 74 65 64 # associated
4820: 20 77 69 74 68 20 74 68 65 20 72 65 76 69 73 69 with the revisi
4830: 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 on.. variable
4840: 20 6d 79 73 79 6d 62 6f 6c 73 20 20 20 20 20 20 mysymbols
4850: 20 20 20 7b 7d 20 3b 20 23 20 53 65 74 20 6f 66 {} ; # Set of
4860: 20 74 68 65 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 the symbol name
4870: 73 20 66 6f 75 6e 64 20 69 6e 0a 09 09 09 09 20 s found in.....
4880: 20 20 20 23 20 74 68 69 73 20 66 69 6c 65 2e 0a # this file..
4890: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
48a0: 62 72 61 6e 63 68 63 6e 74 20 30 20 3b 20 23 20 branchcnt 0 ; #
48b0: 43 6f 75 6e 74 65 72 20 66 6f 72 20 62 72 61 6e Counter for bran
48c0: 63 68 65 73 2c 20 74 6f 20 72 65 63 6f 72 64 20 ches, to record
48d0: 74 68 65 69 72 0a 09 09 09 20 20 20 20 20 23 20 their.... #
48e0: 6f 72 64 65 72 20 6f 66 20 64 65 66 69 6e 69 74 order of definit
48f0: 69 6f 6e 2e 20 54 68 69 73 20 61 6c 73 6f 20 64 ion. This also d
4900: 65 66 69 6e 65 73 0a 09 09 09 20 20 20 20 20 23 efines.... #
4910: 20 74 68 65 69 72 20 6f 72 64 65 72 20 6f 66 20 their order of
4920: 63 72 65 61 74 69 6f 6e 2c 20 77 68 69 63 68 20 creation, which
4930: 69 73 20 74 68 65 0a 09 09 09 20 20 20 20 20 23 is the.... #
4940: 20 72 65 76 65 72 73 65 20 6f 66 20 64 65 66 69 reverse of defi
4950: 6e 69 74 69 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 nition. I.e. a
4960: 73 6d 61 6c 6c 65 72 0a 09 09 09 20 20 20 20 20 smaller....
4970: 23 20 6e 75 6d 62 65 72 20 6d 65 61 6e 73 20 27 # number means '
4980: 44 65 66 69 6e 65 64 20 65 61 72 6c 69 65 72 27 Defined earlier'
4990: 2c 20 6d 65 61 6e 73 0a 09 09 09 20 20 20 20 20 , means....
49a0: 23 20 27 43 72 65 61 74 65 64 20 6c 61 74 65 72 # 'Created later
49b0: 27 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 '... variable
49c0: 20 6d 79 74 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 mytrunk {} ; #
49d0: 44 69 72 65 63 74 20 72 65 66 65 72 65 6e 63 65 Direct reference
49e0: 20 74 6f 20 6d 79 70 72 6f 6a 65 63 74 20 2d 3e to myproject ->
49f0: 20 74 72 75 6e 6b 2e 0a 20 20 20 20 76 61 72 69 trunk.. vari
4a00: 61 62 6c 65 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 able myroots {}
4a10: 3b 20 23 20 4c 69 73 74 20 6f 66 20 72 6f 6f 74 ; # List of root
4a20: 73 20 69 6e 20 74 68 65 20 66 6f 72 65 73 74 20 s in the forest
4a30: 6f 66 0a 09 09 09 20 20 23 20 6c 6f 64 27 73 2e of.... # lod's.
4a40: 20 4f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 Object referenc
4a50: 65 73 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 es to revisions
4a60: 61 6e 64 0a 09 09 09 20 20 23 20 62 72 61 6e 63 and.... # branc
4a70: 68 65 73 2e 20 54 68 65 20 6c 61 74 74 65 72 20 hes. The latter
4a80: 63 61 6e 20 61 70 70 65 61 72 20 77 68 65 6e 20 can appear when
4a90: 74 68 65 79 0a 09 09 09 20 20 23 20 61 72 65 20 they.... # are
4aa0: 73 65 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65 severed from the
4ab0: 69 72 20 70 61 72 65 6e 74 2e 0a 0a 20 20 20 20 ir parent...
4ac0: 76 61 72 69 61 62 6c 65 20 6d 79 62 6c 6f 62 20 variable myblob
4ad0: 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 {} ; # Reference
4ae0: 20 74 6f 20 74 68 65 20 6f 62 6a 65 63 74 20 6d to the object m
4af0: 61 6e 61 67 69 6e 67 20 74 68 65 20 62 6c 6f 62 anaging the blob
4b00: 0a 09 09 09 20 23 20 69 6e 66 6f 72 6d 61 74 69 .... # informati
4b10: 6f 6e 20 28 74 65 78 74 72 61 6e 67 65 20 6f 66 on (textrange of
4b20: 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 0a revisions, and.
4b30: 09 09 09 20 23 20 64 65 6c 74 61 20 64 65 70 65 ... # delta depe
4b40: 6e 64 65 6e 63 69 65 73 29 20 6f 66 20 74 68 69 ndencies) of thi
4b50: 73 20 66 69 6c 65 2e 0a 0a 20 20 20 20 23 20 23 s file... # #
4b60: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ##
4b70: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### #########
4b80: 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 ####. ## Inte
4b90: 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 rnal methods..
4ba0: 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 method RecordB
4bb0: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 72 ranchCommits {br
4bc0: 61 6e 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 61 anches} {..forea
4bd0: 63 68 20 62 72 61 6e 63 68 72 65 76 6e 72 20 24 ch branchrevnr $
4be0: 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 branches {..
4bf0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 73 if {[catch {...s
4c00: 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 et branch [$self
4c10: 20 52 65 76 32 42 72 61 6e 63 68 20 24 62 72 61 Rev2Branch $bra
4c20: 6e 63 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 7d nchrevnr].. }
4c30: 5d 7d 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 ]} {...set branc
4c40: 68 20 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c 61 h [$self AddUnla
4c50: 62 65 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 76 beledBranch [rev
4c60: 20 32 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 2branchnr $bran
4c70: 63 68 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d chrevnr]].. }
4c80: 0a 0a 09 20 20 20 20 23 20 52 65 63 6f 72 64 20 ... # Record
4c90: 74 68 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 74 the commit, just
4ca0: 20 61 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d as revision num
4cb0: 62 65 72 20 66 6f 72 0a 09 20 20 20 20 23 20 6e ber for.. # n
4cc0: 6f 77 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 68 ow. ProcesBranch
4cd0: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 77 69 6c Dependencies wil
4ce0: 6c 20 65 78 74 65 6e 64 20 74 68 61 74 20 69 74 l extend that it
4cf0: 6f 20 61 0a 09 20 20 20 20 23 20 70 72 6f 70 65 o a.. # prope
4d00: 72 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e r object referen
4d10: 63 65 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 ce.... $branc
4d20: 68 20 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20 h setchildrevnr
4d30: 24 62 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d 0a $branchrevnr..}.
4d40: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
4d50: 20 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72 method Rev2Br
4d60: 61 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 20 anch {revnr} {.
4d70: 20 20 20 20 20 20 20 69 6e 74 65 67 72 69 74 79 integrity
4d80: 20 61 73 73 65 72 74 20 7b 21 5b 72 65 76 20 69 assert {![rev i
4d90: 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 strunkrevnr $rev
4da0: 6e 72 5d 7d 20 7b 45 78 70 65 63 74 65 64 20 61 nr]} {Expected a
4db0: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e branch revision
4dc0: 20 6e 75 6d 62 65 72 7d 0a 09 72 65 74 75 72 6e number}..return
4dd0: 20 24 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65 $mybranches([re
4de0: 76 20 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76 v 2branchnr $rev
4df0: 6e 72 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 nr]). }..
4e00: 6d 65 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65 method AddUnlabe
4e10: 6c 65 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63 ledBranch {branc
4e20: 68 6e 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b hnr} {..return [
4e30: 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20 $self AddBranch
4e40: 75 6e 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63 unlabeled-$branc
4e50: 68 6e 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20 hnr $branchnr].
4e60: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
4e70: 20 41 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65 AddBranch {name
4e80: 20 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 branchnr} {..if
4e90: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d {[info exists m
4ea0: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 ybranches($branc
4eb0: 68 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f hnr)]} {.. lo
4ec0: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 g write 1 file "
4ed0: 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72 In '$mypath': Br
4ee0: 61 6e 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27 anch '$branchnr'
4ef0: 20 6e 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e named '[$mybran
4f00: 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20 ches($branchnr)
4f10: 6e 61 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67 name]'".. log
4f20: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 43 write 1 file "C
4f30: 61 6e 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e annot have secon
4f40: 64 20 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20 d name '$name',
4f50: 69 67 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20 ignoring it"..
4f60: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74 return..}..set
4f70: 20 62 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55 branch [sym %AU
4f80: 54 4f 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e TO% branch $bran
4f90: 63 68 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 chnr [$myproject
4fa0: 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 getsymbol $name
4fb0: 5d 20 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e 63 ] $self]..$branc
4fc0: 68 20 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69 h setposition [i
4fd0: 6e 63 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d ncr mybranchcnt]
4fe0: 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 ..set mybranches
4ff0: 28 24 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61 ($branchnr) $bra
5000: 6e 63 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61 nch..return $bra
5010: 6e 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d nch. }.. m
5020: 65 74 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61 ethod AddTag {na
5030: 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 me revnr} {..set
5040: 20 74 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25 tag [sym %AUTO%
5050: 20 74 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79 tag $revnr [$my
5060: 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f project getsymbo
5070: 6c 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a l $name] $self].
5080: 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28 .lappend mytags(
5090: 24 72 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65 $revnr) $tag..re
50a0: 74 75 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a turn $tag. }.
50b0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f . method Reco
50c0: 72 64 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63 rdBasicDependenc
50d0: 69 65 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d ies {revnr next}
50e0: 20 7b 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65 {..# Handle the
50f0: 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 revision depend
5100: 65 6e 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74 encies. Record t
5110: 68 65 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a hem for now, do.
5120: 09 23 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20 .# nothing with
5130: 74 68 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e them yet....# On
5140: 20 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27 the trunk the '
5150: 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e next' field poin
5160: 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f ts to the previo
5170: 75 73 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20 us..# revision,
5180: 69 2e 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74 i.e. the _parent
5190: 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 _ of the current
51a0: 20 6f 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 one. Example:..
51b0: 23 20 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20 # 1.6's next is
51c0: 31 2e 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20 1.5 (modulo cvs
51d0: 61 64 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 admin -o)....# C
51e0: 6f 6e 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62 ontrarily on a b
51f0: 72 61 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27 ranch the 'next'
5200: 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f field points to
5210: 20 74 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20 the..# primary
5220: 5f 63 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63 _child_ of the c
5230: 75 72 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e urrent revision.
5240: 20 41 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20 As example,..#
5250: 31 2e 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27 1.1.3.2's 'next'
5260: 20 77 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33 will be 1.1.3.3
5270: 2e 0a 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27 ....# The 'next'
5280: 20 66 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20 field actually
5290: 61 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 6f always refers to
52a0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 the revision..#
52b0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 containing the
52c0: 64 65 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20 delta needed to
52d0: 72 65 74 72 69 65 76 65 20 74 68 61 74 20 72 65 retrieve that re
52e0: 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 vision....# The
52f0: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65 dependencies nee
5300: 64 65 64 20 68 65 72 65 20 61 72 65 20 74 68 65 ded here are the
5310: 20 6c 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75 logical structu
5320: 72 65 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68 re,..# parent/ch
5330: 69 6c 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65 ild, and not the
5340: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 implementation
5350: 64 65 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a dependent delta.
5360: 09 23 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 .# pointers....i
5370: 66 20 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20 f {$next eq ""}
5380: 72 65 74 75 72 6e 0a 09 23 20 20 20 20 20 20 20 return..#
5390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
53a0: 20 20 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 parent -> chi
53b0: 6c 64 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 ld..if {[rev ist
53c0: 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 runkrevnr $revnr
53d0: 5d 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e ]} {.. lappen
53e0: 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 d mydependencies
53f0: 20 24 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d $next $revnr..}
5400: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70 else {.. lap
5410: 70 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 pend mydependenc
5420: 69 65 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74 ies $revnr $next
5430: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
5440: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 }.. method Pr
5450: 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 ocessPrimaryDepe
5460: 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 ndencies {} {..f
5470: 6f 72 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65 oreach {parentre
5480: 76 6e 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20 vnr childrevnr}
5490: 24 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 $mydependencies
54a0: 7b 0a 09 20 20 20 20 73 65 74 20 70 61 72 65 6e {.. set paren
54b0: 74 20 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74 t $myrev($parent
54c0: 72 65 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20 revnr).. set
54d0: 63 68 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63 child $myrev($c
54e0: 68 69 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20 hildrevnr)..
54f0: 24 70 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64 $parent setchild
5500: 20 24 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 $child.. $ch
5510: 69 6c 64 20 73 65 74 70 61 72 65 6e 74 20 24 70 ild setparent $p
5520: 61 72 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e arent..}..return
5530: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
5540: 6f 64 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 od ProcessBranch
5550: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 Dependencies {}
5560: 7b 0a 09 66 6f 72 65 61 63 68 20 7b 62 72 61 6e {..foreach {bran
5570: 63 68 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 72 chnr branch} [ar
5580: 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 ray get mybranch
5590: 65 73 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72 es] {.. set r
55a0: 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 61 evnr [$branch pa
55b0: 72 65 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20 rentrevnr]...
55c0: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis
55d0: 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 ts myrev($revnr)
55e0: 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 ]} {...log write
55f0: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 1 file "In '$my
5600: 70 61 74 68 27 3a 20 54 68 65 20 62 72 61 6e 63 path': The branc
5610: 68 20 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65 h '[$branch name
5620: 5d 27 20 72 65 66 65 72 65 6e 63 65 73 22 0a 09 ]' references"..
5630: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c .log write 1 fil
5640: 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 e "the bogus rev
5650: 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 ision '$revnr' a
5660: 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 nd will be ignor
5670: 65 64 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 64 ed."...$branch d
5680: 65 73 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d estroy...unset m
5690: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 ybranches($branc
56a0: 68 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 hnr).. } else
56b0: 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 {...set rev $my
56c0: 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 24 72 rev($revnr)...$r
56d0: 65 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 72 ev addbranch $br
56e0: 61 6e 63 68 0a 09 09 24 62 72 61 6e 63 68 20 73 anch...$branch s
56f0: 65 74 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09 etparent $rev...
5700: 09 23 20 49 66 20 72 65 76 69 73 69 6f 6e 73 20 .# If revisions
5710: 77 65 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f were committed o
5720: 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 65 20 n the branch we
5730: 73 74 6f 72 65 20 61 0a 09 09 23 20 72 65 66 65 store a...# refe
5740: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 62 72 61 rence to the bra
5750: 6e 63 68 20 74 68 65 72 65 2c 20 61 6e 64 20 66 nch there, and f
5760: 75 72 74 68 65 72 20 64 65 63 6c 61 72 65 0a 09 urther declare..
5770: 09 23 20 74 68 65 20 66 69 72 73 74 20 63 68 69 .# the first chi
5780: 6c 64 27 73 20 70 61 72 65 6e 74 20 74 6f 20 62 ld's parent to b
5790: 65 20 62 72 61 6e 63 68 27 73 20 70 61 72 65 6e e branch's paren
57a0: 74 2c 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 20 t, and...# list
57b0: 74 68 69 73 20 63 68 69 6c 64 20 69 6e 20 74 68 this child in th
57c0: 65 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f e parent revisio
57d0: 6e 2e 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e n.....if {[$bran
57e0: 63 68 20 68 61 73 63 68 69 6c 64 72 65 76 5d 7d ch haschildrev]}
57f0: 20 7b 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 {... set chi
5800: 6c 64 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 ldrevnr [$branch
5810: 20 63 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20 childrevnr]...
5820: 20 20 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79 set child $my
5830: 72 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 rev($childrevnr)
5840: 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 ... $branch s
5850: 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a etchild $child..
5860: 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 .. $child set
5870: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 parentbranch $br
5880: 61 6e 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c anch... $chil
5890: 64 20 73 65 74 70 61 72 65 6e 74 20 20 20 20 20 d setparent
58a0: 20 20 24 72 65 76 0a 09 09 20 20 20 20 24 72 65 $rev... $re
58b0: 76 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e v addchildonbran
58c0: 63 68 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20 ch $child...}..
58d0: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a }..}..return.
58e0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
58f0: 64 20 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b d SortBranches {
5900: 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 } {..foreach {re
5910: 76 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 vnr rev} [array
5920: 67 65 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65 get myrev] { $re
5930: 76 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d v sortbranches }
5940: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
5950: 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 method Proce
5960: 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65 ssTagDependencie
5970: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 s {} {..foreach
5980: 7b 72 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20 {revnr taglist}
5990: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 [array get mytag
59a0: 73 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b s] {.. if {![
59b0: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 info exists myre
59c0: 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 v($revnr)]} {...
59d0: 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 set n [llength $
59e0: 74 61 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77 taglist]...log w
59f0: 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 rite 1 file "In
5a00: 27 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66 '$mypath': The f
5a10: 6f 6c 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e ollowing [nsp $n
5a20: 20 74 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22 tag] reference"
5a30: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 ...log write 1 f
5a40: 69 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 ile "the bogus r
5a50: 65 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 evision '$revnr'
5a60: 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e and will be ign
5a70: 6f 72 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68 ored."...foreach
5a80: 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a tag $taglist {.
5a90: 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
5aa0: 31 20 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61 1 file " [$ta
5ab0: 67 20 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24 g name]"... $
5ac0: 74 61 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a tag destroy...}.
5ad0: 09 09 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24 ..unset mytags($
5ae0: 72 65 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c revnr).. } el
5af0: 73 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 se {...set rev $
5b00: 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 myrev($revnr)...
5b10: 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 foreach tag $tag
5b20: 6c 69 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65 list {... $re
5b30: 76 20 61 64 64 74 61 67 20 20 20 20 24 74 61 67 v addtag $tag
5b40: 0a 09 09 20 20 20 20 24 74 61 67 20 73 65 74 74 ... $tag sett
5b50: 61 67 72 65 76 20 24 72 65 76 0a 09 09 7d 0a 09 agrev $rev...}..
5b60: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e }..}..return
5b70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
5b80: 6f 64 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52 od DetermineTheR
5b90: 6f 6f 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b ootRevision {} {
5ba0: 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20 ..# The root is
5bb0: 74 68 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e the one revision
5bc0: 20 77 68 69 63 68 20 68 61 73 20 6e 6f 20 70 61 which has no pa
5bd0: 72 65 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 63 rent. By..# chec
5be0: 6b 69 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 6f king all revisio
5bf0: 6e 73 20 77 65 20 65 6e 73 75 72 65 20 74 68 61 ns we ensure tha
5c00: 74 20 77 65 20 63 61 6e 20 64 65 74 65 63 74 20 t we can detect
5c10: 61 6e 64 0a 09 23 20 72 65 70 6f 72 74 20 74 68 and..# report th
5c20: 65 20 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 70 e case of multip
5c30: 6c 65 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f 75 le roots. Withou
5c40: 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 0a t that we could.
5c50: 09 23 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 6f .# simply take o
5c60: 6e 65 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 ne revision and
5c70: 66 6f 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 6e follow the paren
5c80: 74 20 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 68 t links to..# th
5c90: 65 69 72 20 72 6f 6f 74 20 28 73 69 63 21 29 2e eir root (sic!).
5ca0: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e ...foreach {revn
5cb0: 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 r rev} [array ge
5cc0: 74 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20 t myrev] {..
5cd0: 69 66 20 7b 5b 24 72 65 76 20 68 61 73 70 61 72 if {[$rev haspar
5ce0: 65 6e 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 ent]} continue..
5cf0: 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 integrity as
5d00: 73 65 72 74 20 7b 24 6d 79 72 6f 6f 74 20 65 71 sert {$myroot eq
5d10: 20 22 22 7d 20 7b 4d 75 6c 74 69 70 6c 65 20 72 ""} {Multiple r
5d20: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66 6f oot revisions fo
5d30: 75 6e 64 7d 0a 09 20 20 20 20 73 65 74 20 6d 79 und}.. set my
5d40: 72 6f 6f 74 20 24 72 65 76 0a 09 7d 0a 0a 09 23 root $rev..}...#
5d50: 20 49 6e 20 74 68 65 20 66 75 74 75 72 65 20 77 In the future w
5d60: 65 20 61 6c 73 6f 20 6e 65 65 64 20 61 20 6c 69 e also need a li
5d70: 73 74 2c 20 61 73 20 62 72 61 6e 63 68 65 73 20 st, as branches
5d80: 63 61 6e 20 62 65 63 6f 6d 65 0a 09 23 20 73 65 can become..# se
5d90: 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 vered from their
5da0: 20 70 61 72 65 6e 74 2c 20 6d 61 6b 69 6e 67 20 parent, making
5db0: 74 68 65 6d 20 74 68 65 69 72 20 6f 77 6e 20 72 them their own r
5dc0: 6f 6f 74 2e 0a 09 73 65 74 20 6d 79 72 6f 6f 74 oot...set myroot
5dd0: 73 20 5b 6c 69 73 74 20 24 6d 79 72 6f 6f 74 5d s [list $myroot]
5de0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
5df0: 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 method Deter
5e00: 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 mineRevisionOper
5e10: 61 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72 ations {} {..for
5e20: 65 61 63 68 20 72 65 76 20 24 6d 79 72 65 76 69 each rev $myrevi
5e30: 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 74 sions { $rev det
5e40: 65 72 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20 ermineoperation
5e50: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
5e60: 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 . method Dete
5e70: 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65 rmineLinesOfDeve
5e80: 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 lopment {} {..#
5e90: 46 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 74 68 For revisions th
5ea0: 69 73 20 68 61 73 20 62 65 65 6e 20 64 6f 6e 65 is has been done
5eb0: 20 61 6c 72 65 61 64 79 2c 20 69 6e 20 27 65 78 already, in 'ex
5ec0: 74 65 6e 64 27 2e 20 4e 6f 77 0a 09 23 20 77 65 tend'. Now..# we
5ed0: 20 64 6f 20 74 68 69 73 20 66 6f 72 20 74 68 65 do this for the
5ee0: 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 branches and ta
5ef0: 67 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f gs....foreach {_
5f00: 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 branch} [array
5f10: 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 get mybranches]
5f20: 7b 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 {.. $branch s
5f30: 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 etlod [$self Get
5f40: 4c 4f 44 20 5b 24 62 72 61 6e 63 68 20 70 61 72 LOD [$branch par
5f50: 65 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09 entrevnr]]..}...
5f60: 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 foreach {_ tagli
5f70: 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d st} [array get m
5f80: 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f ytags] {.. fo
5f90: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 reach tag $tagli
5fa0: 73 74 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c st {...$tag setl
5fb0: 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 od [$self GetLOD
5fc0: 20 5b 24 74 61 67 20 74 61 67 72 65 76 6e 72 5d [$tag tagrevnr]
5fd0: 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 ].. }..}..ret
5fe0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
5ff0: 65 74 68 6f 64 20 47 65 74 4c 4f 44 20 7b 72 65 ethod GetLOD {re
6000: 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 vnr} {..if {[rev
6010: 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 istrunkrevnr $r
6020: 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65 evnr]} {.. re
6030: 74 75 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 7d turn $mytrunk..}
6040: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 74 else {.. ret
6050: 75 72 6e 20 5b 24 73 65 6c 66 20 52 65 76 32 42 urn [$self Rev2B
6060: 72 61 6e 63 68 20 24 72 65 76 6e 72 5d 0a 09 7d ranch $revnr]..}
6070: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
6080: 6f 64 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e od HandleNonTrun
6090: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b kDefaultBranch {
60a0: 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 69 73 74 } {..set revlist
60b0: 20 5b 24 73 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b [$self NonTrunk
60c0: 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73 DefaultRevisions
60d0: 5d 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 ]..if {![llength
60e0: 20 24 72 65 76 6c 69 73 74 5d 7d 20 72 65 74 75 $revlist]} retu
60f0: 72 6e 0a 0a 09 24 73 65 6c 66 20 41 64 6a 75 73 rn...$self Adjus
6100: 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 tNonTrunkDefault
6110: 42 72 61 6e 63 68 20 24 72 65 76 6c 69 73 74 0a Branch $revlist.
6120: 09 24 73 65 6c 66 20 43 68 65 63 6b 4c 4f 44 73 .$self CheckLODs
6130: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
6140: 20 20 20 20 6d 65 74 68 6f 64 20 4e 6f 6e 54 72 method NonTr
6150: 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69 unkDefaultRevisi
6160: 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d ons {} {..# From
6170: 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f 6c cvs2svn the fol
6180: 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 69 lowing explanati
6190: 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69 63 on (with modific
61a0: 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75 ations..# for ou
61b0: 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 r algorithm):...
61c0: 23 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 # Determine whet
61d0: 68 65 72 20 74 68 65 72 65 20 61 72 65 20 61 6e her there are an
61e0: 79 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 y non-trunk defa
61f0: 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 ult branch..# re
6200: 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 49 66 20 visions....# If
6210: 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 a non-trunk defa
6220: 75 6c 74 20 62 72 61 6e 63 68 20 69 73 20 64 65 ult branch is de
6230: 74 65 72 6d 69 6e 65 64 20 74 6f 20 68 61 76 65 termined to have
6240: 20 65 78 69 73 74 65 64 2c 0a 09 23 20 72 65 74 existed,..# ret
6250: 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 6f 62 urn a list of ob
6260: 6a 65 63 74 73 20 66 6f 72 20 61 6c 6c 20 72 65 jects for all re
6270: 76 69 73 69 6f 6e 73 20 74 68 61 74 20 77 65 72 visions that wer
6280: 65 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74 72 e once..# non-tr
6290: 75 6e 6b 20 64 65 66 61 75 6c 74 20 72 65 76 69 unk default revi
62a0: 73 69 6f 6e 73 2c 20 69 6e 20 64 65 70 65 6e 64 sions, in depend
62b0: 65 6e 63 79 20 6f 72 64 65 72 20 28 69 2e 65 2e ency order (i.e.
62c0: 20 72 6f 6f 74 0a 09 23 20 66 69 72 73 74 29 2e root..# first).
62d0: 0a 0a 09 23 20 54 68 65 72 65 20 61 72 65 20 74 ...# There are t
62e0: 77 6f 20 63 61 73 65 73 20 74 6f 20 68 61 6e 64 wo cases to hand
62f0: 6c 65 3a 0a 0a 09 23 20 4f 6e 65 20 63 61 73 65 le:...# One case
6300: 20 69 73 20 73 69 6d 70 6c 65 2e 20 20 54 68 65 is simple. The
6310: 20 52 43 53 20 66 69 6c 65 20 6c 69 73 74 73 20 RCS file lists
6320: 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 a default branch
6330: 0a 09 23 20 65 78 70 6c 69 63 69 74 6c 79 20 69 ..# explicitly i
6340: 6e 20 69 74 73 20 68 65 61 64 65 72 2c 20 73 75 n its header, su
6350: 63 68 20 61 73 20 27 31 2e 31 2e 31 27 2e 20 20 ch as '1.1.1'.
6360: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 65 In this case, we
6370: 0a 09 23 20 6b 6e 6f 77 20 74 68 61 74 20 65 76 ..# know that ev
6380: 65 72 79 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 ery revision on
6390: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 the vendor branc
63a0: 68 20 69 73 20 74 6f 20 62 65 0a 09 23 20 74 72 h is to be..# tr
63b0: 65 61 74 65 64 20 61 73 20 68 65 61 64 20 6f 66 eated as head of
63c0: 20 74 72 75 6e 6b 20 61 74 20 74 68 61 74 20 70 trunk at that p
63d0: 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e 0a 0a 09 oint in time....
63e0: 23 20 42 75 74 20 74 68 65 72 65 27 73 20 61 6c # But there's al
63f0: 73 6f 20 61 20 64 65 67 65 6e 65 72 61 74 65 20 so a degenerate
6400: 63 61 73 65 2e 20 20 54 68 65 20 52 43 53 20 66 case. The RCS f
6410: 69 6c 65 20 64 6f 65 73 20 6e 6f 74 0a 09 23 20 ile does not..#
6420: 63 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 currently have a
6430: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c default branch,
6440: 20 79 65 74 20 77 65 20 63 61 6e 20 64 65 64 75 yet we can dedu
6450: 63 65 20 74 68 61 74 20 66 6f 72 0a 09 23 20 73 ce that for..# s
6460: 6f 6d 65 20 70 65 72 69 6f 64 20 69 6e 20 74 68 ome period in th
6470: 65 20 70 61 73 74 20 69 74 20 70 72 6f 62 61 62 e past it probab
6480: 6c 79 20 2a 64 69 64 2a 20 68 61 76 65 20 6f 6e ly *did* have on
6490: 65 2e 20 20 46 6f 72 0a 09 23 20 65 78 61 6d 70 e. For..# examp
64a0: 6c 65 2c 20 74 68 65 20 66 69 6c 65 20 68 61 73 le, the file has
64b0: 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e vendor revision
64c0: 73 20 31 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e 31 s 1.1.1.1 -> 1.1
64d0: 2e 31 2e 39 36 2c 0a 09 23 20 61 6c 6c 20 6f 66 .1.96,..# all of
64e0: 20 77 68 69 63 68 20 61 72 65 20 64 61 74 65 64 which are dated
64f0: 20 62 65 66 6f 72 65 20 31 2e 32 2c 20 61 6e 64 before 1.2, and
6500: 20 74 68 65 6e 20 69 74 20 68 61 73 20 31 2e 31 then it has 1.1
6510: 2e 31 2e 39 37 0a 09 23 20 2d 3e 20 31 2e 31 2e .1.97..# -> 1.1.
6520: 31 2e 31 30 30 20 64 61 74 65 64 20 61 66 74 65 1.100 dated afte
6530: 72 20 31 2e 32 2e 20 20 49 6e 20 74 68 69 73 20 r 1.2. In this
6540: 63 61 73 65 2c 20 77 65 20 73 68 6f 75 6c 64 0a case, we should.
6550: 09 23 20 72 65 63 6f 72 64 20 31 2e 31 2e 31 2e .# record 1.1.1.
6560: 39 36 20 61 73 20 74 68 65 20 6c 61 73 74 20 76 96 as the last v
6570: 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 20 74 endor revision t
6580: 6f 20 68 61 76 65 20 62 65 65 6e 20 74 68 65 0a o have been the.
6590: 09 23 20 68 65 61 64 20 6f 66 20 74 68 65 20 64 .# head of the d
65a0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 0a efault branch...
65b0: 09 69 66 20 7b 24 6d 79 70 72 69 6e 63 69 70 61 .if {$myprincipa
65c0: 6c 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 l ne ""} {..
65d0: 23 20 54 68 65 72 65 20 69 73 20 73 74 69 6c 6c # There is still
65e0: 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 a default branc
65f0: 68 3b 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 h; that means th
6600: 61 74 20 61 6c 6c 0a 09 20 20 20 20 23 20 72 65 at all.. # re
6610: 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 61 74 20 visions on that
6620: 62 72 61 6e 63 68 20 67 65 74 20 6d 61 72 6b 65 branch get marke
6630: 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 d.... log wri
6640: 74 65 20 35 20 66 69 6c 65 20 22 46 6f 75 6e 64 te 5 file "Found
6650: 20 65 78 70 6c 69 63 69 74 6c 79 20 6d 61 72 6b explicitly mark
6660: 65 64 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 ed NTDB"... s
6670: 65 74 20 72 6e 65 78 74 20 5b 24 6d 79 72 6f 6f et rnext [$myroo
6680: 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 69 66 t child].. if
6690: 20 7b 24 72 6e 65 78 74 20 6e 65 20 22 22 7d 20 {$rnext ne ""}
66a0: 7b 0a 09 09 74 72 6f 75 62 6c 65 20 66 61 74 61 {...trouble fata
66b0: 6c 20 22 46 69 6c 65 20 77 69 74 68 20 64 65 66 l "File with def
66c0: 61 75 6c 74 20 62 72 61 6e 63 68 20 24 6d 79 70 ault branch $myp
66d0: 72 69 6e 63 69 70 61 6c 20 61 6c 73 6f 20 68 61 rincipal also ha
66e0: 73 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6e 65 s revision [$rne
66f0: 78 74 20 72 65 76 6e 72 5d 22 0a 09 09 72 65 74 xt revnr]"...ret
6700: 75 72 6e 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 urn.. }...
6710: 20 73 65 74 20 72 65 76 20 5b 24 6d 79 62 72 61 set rev [$mybra
6720: 6e 63 68 65 73 28 24 6d 79 70 72 69 6e 63 69 70 nches($myprincip
6730: 61 6c 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 al) child]..
6740: 73 65 74 20 72 65 73 20 7b 7d 0a 0a 09 20 20 20 set res {}...
6750: 20 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 while {$rev ne
6760: 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 ""} {...lappend
6770: 72 65 73 20 24 72 65 76 0a 09 09 73 65 74 20 72 res $rev...set r
6780: 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a ev [$rev child].
6790: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 . }... ret
67a0: 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 urn $res...} els
67b0: 65 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 eif {$myimported
67c0: 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 20 64 65 } {.. # No de
67d0: 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 62 75 fault branch, bu
67e0: 74 20 74 68 65 20 66 69 6c 65 20 61 70 70 65 61 t the file appea
67f0: 72 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 0a rs to have been.
6800: 09 20 20 20 20 23 20 69 6d 70 6f 72 74 65 64 2e . # imported.
6810: 20 20 53 6f 20 6f 75 72 20 65 64 75 63 61 74 65 So our educate
6820: 64 20 67 75 65 73 73 20 69 73 20 74 68 61 74 20 d guess is that
6830: 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 all revisions..
6840: 20 20 20 23 20 6f 6e 20 74 68 65 20 27 31 2e 31 # on the '1.1
6850: 2e 31 27 20 62 72 61 6e 63 68 20 77 69 74 68 20 .1' branch with
6860: 74 69 6d 65 73 74 61 6d 70 73 20 70 72 69 6f 72 timestamps prior
6870: 20 74 6f 20 74 68 65 0a 09 20 20 20 20 23 20 74 to the.. # t
6880: 69 6d 65 73 74 61 6d 70 20 6f 66 20 27 31 2e 32 imestamp of '1.2
6890: 27 20 77 65 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b ' were non-trunk
68a0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a default branch.
68b0: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 . # revisions
68c0: 2e 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 72 .... # This r
68d0: 65 61 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f 63 65 eally only proce
68e0: 73 73 65 73 20 73 74 61 6e 64 61 72 64 20 27 31 sses standard '1
68f0: 2e 31 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a 09 20 .1.1.*'-style..
6900: 20 20 20 23 20 76 65 6e 64 6f 72 20 72 65 76 69 # vendor revi
6910: 73 69 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f 75 6c sions. One coul
6920: 64 20 63 6f 6e 63 65 69 76 61 62 6c 79 20 68 61 d conceivably ha
6930: 76 65 20 61 20 66 69 6c 65 0a 09 20 20 20 20 23 ve a file.. #
6940: 20 77 68 6f 73 65 20 64 65 66 61 75 6c 74 20 62 whose default b
6950: 72 61 6e 63 68 20 69 73 20 31 2e 31 2e 33 20 6f ranch is 1.1.3 o
6960: 72 20 77 68 61 74 65 76 65 72 2c 20 6f 72 20 77 r whatever, or w
6970: 61 73 20 74 68 61 74 0a 09 20 20 20 20 23 20 61 as that.. # a
6980: 74 20 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e 20 t some point in
6990: 74 69 6d 65 2c 20 77 69 74 68 20 76 65 6e 64 6f time, with vendo
69a0: 72 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e r revisions 1.1.
69b0: 33 2e 31 2c 0a 09 20 20 20 20 23 20 31 2e 31 2e 3.1,.. # 1.1.
69c0: 33 2e 32 2c 20 65 74 63 2e 20 20 42 75 74 20 77 3.2, etc. But w
69d0: 69 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 ith the default
69e0: 62 72 61 6e 63 68 20 67 6f 6e 65 20 6e 6f 77 2c branch gone now,
69f0: 0a 09 20 20 20 20 23 20 77 65 27 64 20 68 61 76 .. # we'd hav
6a00: 65 20 6e 6f 20 62 61 73 69 73 20 66 6f 72 20 61 e no basis for a
6a10: 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 ssuming that the
6a20: 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 0a 09 20 non-standard..
6a30: 20 20 20 23 20 76 65 6e 64 6f 72 20 62 72 61 6e # vendor bran
6a40: 63 68 20 68 61 64 20 65 76 65 72 20 62 65 65 6e ch had ever been
6a50: 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 the default bra
6a60: 6e 63 68 20 61 6e 79 77 61 79 2e 0a 0a 09 20 20 nch anyway....
6a70: 20 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65 # Note that we
6a80: 20 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 rely on compari
6a90: 73 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 sons between the
6aa0: 20 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 timestamps..
6ab0: 20 23 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 # of the revisi
6ac0: 6f 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f ons on the vendo
6ad0: 72 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61 r branch and tha
6ae0: 74 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69 t of.. # revi
6af0: 73 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 sion 1.2, even t
6b00: 68 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73 74 hough the timest
6b10: 61 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20 amps might be..
6b20: 20 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64 # incorrect d
6b30: 75 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 ue to clock skew
6b40: 2e 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 . We could do a
6b50: 20 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23 slightly.. #
6b60: 20 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77 better job if w
6b70: 65 20 75 73 65 64 20 74 68 65 20 63 68 61 6e 67 e used the chang
6b80: 65 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c eset timestamps,
6b90: 20 61 73 20 69 74 20 69 73 0a 09 20 20 20 20 23 as it is.. #
6ba0: 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74 possible that t
6bb0: 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 he dependencies
6bc0: 74 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 that went into..
6bd0: 20 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e # determinin
6be0: 67 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d g those timestam
6bf0: 70 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75 ps are more accu
6c00: 72 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20 rate. But..
6c10: 23 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71 # that would req
6c20: 75 69 72 65 20 61 6e 20 65 78 74 72 61 20 70 61 uire an extra pa
6c30: 73 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 ss or two....
6c40: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis
6c50: 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e ts mybranches(1.
6c60: 31 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 1.1)]} { return
6c70: 7b 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 {} }... log w
6c80: 72 69 74 65 20 35 20 66 69 6c 65 20 22 44 65 64 rite 5 file "Ded
6c90: 75 63 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f uced existence o
6ca0: 66 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 f NTDB"... se
6cb0: 74 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 t rev [$mybranc
6cc0: 68 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 hes(1.1.1) child
6cd0: 5d 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 20 ].. set res
6ce0: 7b 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70 {}.. set stop
6cf0: 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d [$myroot child]
6d00: 0a 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 ... if {$stop
6d10: 20 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 eq ""} {...# Ge
6d20: 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 t everything on
6d30: 74 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69 the branch...whi
6d40: 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 le {$rev ne ""}
6d50: 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 {... lappend
6d60: 72 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 res $rev... s
6d70: 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 et rev [$rev chi
6d80: 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 ld]...}.. } e
6d90: 6c 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 lse {...# Collec
6da0: 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 t everything on
6db0: 74 68 65 20 62 72 61 6e 63 68 20 77 68 69 63 68 the branch which
6dc0: 20 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 seems to have..
6dd0: 09 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 .# been committe
6de0: 64 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 d before the fir
6df0: 73 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 st primary child
6e00: 20 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 of the...# root
6e10: 20 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 revision....set
6e20: 20 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 stopdate [$stop
6e30: 20 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b date]...while {
6e40: 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 $rev ne ""} {...
6e50: 20 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61 if {[$rev da
6e60: 74 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 te] >= $stopdate
6e70: 7d 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 } break... la
6e80: 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 ppend res $rev..
6e90: 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 . set rev [$r
6ea0: 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 ev child]...}..
6eb0: 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 }... retur
6ec0: 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 n $res...} else
6ed0: 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d {.. return {}
6ee0: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 ..}. }.. #
6ef0: 20 47 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49 General note: I
6f00: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 n the following
6f10: 6d 65 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20 methods we only
6f20: 6d 6f 64 69 66 79 20 74 68 65 20 6c 69 6e 6b 73 modify the links
6f30: 0a 20 20 20 20 23 20 62 65 74 77 65 65 6e 20 72 . # between r
6f40: 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d evisions and sym
6f50: 62 6f 6c 73 20 74 6f 20 72 65 73 74 72 75 63 74 bols to restruct
6f60: 75 72 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e ure the revision
6f70: 0a 20 20 20 20 23 20 74 72 65 65 2e 20 57 65 20 . # tree. We
6f80: 64 6f 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 do __not__ destr
6f90: 6f 79 20 74 68 65 20 6f 62 6a 65 63 74 73 2e 20 oy the objects.
6fa0: 47 69 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65 Given the comple
6fb0: 78 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 43 x links. # GC
6fc0: 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 61 74 is difficult at
6fd0: 20 74 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 20 this level. It
6fe0: 69 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 74 is much easier t
6ff0: 6f 20 64 72 6f 70 0a 20 20 20 20 23 20 65 76 65 o drop. # eve
7000: 72 79 74 68 69 6e 67 20 77 68 65 6e 20 77 65 20 rything when we
7010: 77 65 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 69 we are done. Thi
7020: 73 20 68 61 70 70 65 6e 73 20 69 6e 20 27 64 72 s happens in 'dr
7030: 6f 70 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 23 op', using. #
7040: 20 74 68 65 20 73 74 61 74 65 20 76 61 72 69 61 the state varia
7050: 62 6c 65 20 27 6d 79 72 65 76 27 2c 20 27 6d 79 ble 'myrev', 'my
7060: 62 72 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 27 branches', and '
7070: 6d 79 74 61 67 73 27 2e 20 57 68 61 74 20 77 65 mytags'. What we
7080: 0a 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 70 . # have to p
7090: 65 72 73 69 73 74 2c 20 70 65 72 66 6f 72 6d 65 ersist, performe
70a0: 64 20 62 79 20 27 70 65 72 73 69 73 74 27 2c 20 d by 'persist',
70b0: 77 65 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a we know will be.
70c0: 20 20 20 20 23 20 72 65 61 63 68 61 62 6c 65 20 # reachable
70d0: 74 68 72 6f 75 67 68 20 74 68 65 20 72 65 76 69 through the revi
70e0: 73 69 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e 20 sions listed in
70f0: 27 6d 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 68 'myroots' and th
7100: 65 69 72 0a 20 20 20 20 23 20 63 68 69 6c 64 72 eir. # childr
7110: 65 6e 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a en and symbols..
7120: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 6a 75 . method Adju
7130: 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c stNonTrunkDefaul
7140: 74 42 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 74 tBranch {revlist
7150: 7d 20 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b 24 } {..set stop [$
7160: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23 myroot child] ;#
7170: 20 72 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 rev '1.2'...log
7180: 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 41 write 5 file "A
7190: 64 6a 75 73 74 69 6e 67 20 4e 54 44 42 20 63 6f djusting NTDB co
71a0: 6e 74 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c ntaining [nsp [l
71b0: 6c 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d length $revlist]
71c0: 20 72 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 revision]"...#
71d0: 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 From cvs2svn the
71e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 following expla
71f0: 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 nation (with mod
7200: 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f ifications..# fo
7210: 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 r our algorithm)
7220: 3a 0a 0a 09 23 20 41 64 6a 75 73 74 20 74 68 65 :...# Adjust the
7230: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau
7240: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 lt branch revisi
7250: 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 ons found in the
7260: 0a 09 23 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a ..# 'revlist'...
7270: 09 23 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 20 .# 'myimported'
7280: 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 is a boolean fla
7290: 67 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 g indicating whe
72a0: 74 68 65 72 20 74 68 69 73 20 66 69 6c 65 0a 09 ther this file..
72b0: 23 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 # appears to hav
72c0: 65 20 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c e been imported,
72d0: 20 77 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e which also mean
72e0: 73 20 74 68 61 74 0a 09 23 20 72 65 76 69 73 69 s that..# revisi
72f0: 6f 6e 20 31 2e 31 20 68 61 73 20 61 20 67 65 6e on 1.1 has a gen
7300: 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 erated log messa
7310: 67 65 20 74 68 61 74 20 6e 65 65 64 20 6e 6f 74 ge that need not
7320: 20 62 65 0a 09 23 20 70 72 65 73 65 72 76 65 64 be..# preserved
7330: 2e 20 20 27 72 65 76 6c 69 73 74 27 20 69 73 20 . 'revlist' is
7340: 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 a list of object
7350: 20 72 65 66 65 72 65 6e 63 65 73 20 66 6f 72 20 references for
7360: 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 the..# revisions
7370: 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 that have been
7380: 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 determined to be
7390: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau
73a0: 6c 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 lt..# branch rev
73b0: 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 isions....# Note
73c0: 20 74 68 61 74 20 74 68 65 20 66 69 72 73 74 20 that the first
73d0: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 revision on the
73e0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 default branch i
73f0: 73 0a 09 23 20 68 61 6e 64 6c 65 64 20 73 74 72 s..# handled str
7400: 61 6e 67 65 6c 79 20 62 79 20 43 56 53 2e 20 20 angely by CVS.
7410: 49 66 20 61 20 66 69 6c 65 20 69 73 20 69 6d 70 If a file is imp
7420: 6f 72 74 65 64 20 28 61 73 20 6f 70 70 6f 73 65 orted (as oppose
7430: 64 0a 09 23 20 74 6f 20 62 65 69 6e 67 20 61 64 d..# to being ad
7440: 64 65 64 29 2c 20 43 56 53 20 63 72 65 61 74 65 ded), CVS create
7450: 73 20 61 20 31 2e 31 20 72 65 76 69 73 69 6f 6e s a 1.1 revision
7460: 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 61 , then creates a
7470: 0a 09 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 ..# vendor branc
7480: 68 20 31 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e h 1.1.1 based on
7490: 20 31 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 74 1.1, then creat
74a0: 65 73 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20 es a 1.1.1.1..#
74b0: 72 65 76 69 73 69 6f 6e 20 74 68 61 74 20 69 73 revision that is
74c0: 20 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 68 identical to th
74d0: 65 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 e 1.1 revision (
74e0: 69 2e 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c i.e., its..# del
74f0: 74 61 74 65 78 74 20 69 73 20 65 6d 70 74 79 29 tatext is empty)
7500: 2e 20 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 61 . The log messa
7510: 67 65 20 74 68 61 74 20 74 68 65 20 75 73 65 72 ge that the user
7520: 20 74 79 70 65 64 0a 09 23 20 77 68 65 6e 20 69 typed..# when i
7530: 6d 70 6f 72 74 69 6e 67 20 69 73 20 73 74 6f 72 mporting is stor
7540: 65 64 20 77 69 74 68 20 74 68 65 20 31 2e 31 2e ed with the 1.1.
7550: 31 2e 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 54 1.1 revision. T
7560: 68 65 20 31 2e 31 0a 09 23 20 72 65 76 69 73 69 he 1.1..# revisi
7570: 6f 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 on always contai
7580: 6e 73 20 61 20 73 74 61 6e 64 61 72 64 2c 20 67 ns a standard, g
7590: 65 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 enerated log mes
75a0: 73 61 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 61 sage,..# 'Initia
75b0: 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a l revision\n'...
75c0: 09 23 20 57 68 65 6e 20 77 65 20 64 65 74 65 63 .# When we detec
75d0: 74 20 61 20 73 74 72 61 69 67 68 74 66 6f 72 77 t a straightforw
75e0: 61 72 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20 ard import like
75f0: 74 68 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 23 this, we want..#
7600: 20 74 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 79 to handle it by
7610: 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 31 2e deleting the 1.
7620: 31 20 72 65 76 69 73 69 6f 6e 20 28 77 68 69 63 1 revision (whic
7630: 68 20 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e h doesn't..# con
7640: 74 61 69 6e 20 61 6e 79 20 75 73 65 66 75 6c 20 tain any useful
7650: 69 6e 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 information) and
7660: 20 6d 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20 making 1.1.1.1
7670: 69 6e 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70 into an..# indep
7680: 65 6e 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74 endent root in t
7690: 68 65 20 66 69 6c 65 27 73 20 64 65 70 65 6e 64 he file's depend
76a0: 65 6e 63 79 20 74 72 65 65 2e 20 20 49 6e 20 53 ency tree. In S
76b0: 56 4e 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77 VN,..# 1.1.1.1 w
76c0: 69 6c 6c 20 62 65 20 61 64 64 65 64 20 64 69 72 ill be added dir
76d0: 65 63 74 6c 79 20 74 6f 20 74 68 65 20 76 65 6e ectly to the ven
76e0: 64 6f 72 20 62 72 61 6e 63 68 20 77 69 74 68 20 dor branch with
76f0: 69 74 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 63 its..# initial c
7700: 6f 6e 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e ontent. Then in
7710: 20 61 20 73 70 65 63 69 61 6c 20 27 70 6f 73 74 a special 'post
7720: 2d 63 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23 -commit', the..#
7730: 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 1.1.1.1 revisio
7740: 6e 20 69 73 20 63 6f 70 69 65 64 20 62 61 63 6b n is copied back
7750: 20 74 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 to trunk....# I
7760: 66 20 74 68 65 20 75 73 65 72 20 69 6d 70 6f 72 f the user impor
7770: 74 73 20 61 67 61 69 6e 20 74 6f 20 74 68 65 20 ts again to the
7780: 73 61 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 6e same vendor bran
7790: 63 68 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 20 ch, then CVS..#
77a0: 63 72 65 61 74 65 73 20 72 65 76 69 73 69 6f 6e creates revision
77b0: 73 20 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 s 1.1.1.2, 1.1.1
77c0: 2e 33 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 20 .3, etc. on the
77d0: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 vendor branch,..
77e0: 23 20 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e # *without* coun
77f0: 74 65 72 70 61 72 74 73 20 69 6e 20 74 72 75 6e terparts in trun
7800: 6b 20 28 65 76 65 6e 20 74 68 6f 75 67 68 20 74 k (even though t
7810: 68 65 73 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 hese revisions..
7820: 23 20 65 66 66 65 63 74 69 76 65 6c 79 20 70 6c # effectively pl
7830: 61 79 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 74 ay the role of t
7840: 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e runk revisions).
7850: 20 20 53 6f 20 61 66 74 65 72 20 77 65 20 61 64 So after we ad
7860: 64 0a 09 23 20 73 75 63 68 20 72 65 76 69 73 69 d..# such revisi
7870: 6f 6e 73 20 74 6f 20 74 68 65 20 76 65 6e 64 6f ons to the vendo
7880: 72 20 62 72 61 6e 63 68 2c 20 77 65 20 61 6c 73 r branch, we als
7890: 6f 20 63 6f 70 79 20 74 68 65 6d 20 62 61 63 6b o copy them back
78a0: 20 74 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20 to..# trunk in
78b0: 70 6f 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 post-commits....
78c0: 23 20 57 65 20 6d 61 72 6b 20 74 68 65 20 72 65 # We mark the re
78d0: 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e visions found in
78e0: 20 27 72 65 76 6c 69 73 74 27 20 61 73 20 64 65 'revlist' as de
78f0: 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 fault branch..#
7900: 72 65 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f revisions. Also
7910: 2c 20 69 66 20 74 68 65 20 72 6f 6f 74 20 72 65 , if the root re
7920: 76 69 73 69 6f 6e 20 68 61 73 20 61 20 70 72 69 vision has a pri
7930: 6d 61 72 79 20 63 68 69 6c 64 0a 09 23 20 77 65 mary child..# we
7940: 20 73 65 74 20 74 68 61 74 20 72 65 76 69 73 69 set that revisi
7950: 6f 6e 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20 on to depend on
7960: 74 68 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 the last non-tru
7970: 6e 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 nk default..# br
7980: 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 61 6e anch revision an
7990: 64 20 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 73 d possibly adjus
79a0: 74 20 69 74 73 20 74 79 70 65 20 61 63 63 6f 72 t its type accor
79b0: 64 69 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69 dingly....set fi
79c0: 72 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 rst [lindex $rev
79d0: 6c 69 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 list 0]...log wr
79e0: 69 74 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 66 ite 6 file "<[$f
79f0: 69 72 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78 irst revnr]> [ex
7a00: 70 72 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 pr {$myimported
7a10: 3f 20 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 22 ? "imported" : "
7a20: 6e 6f 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c not imported"}],
7a30: 20 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 69 [$first operati
7a40: 6f 6e 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69 on], [expr {[$fi
7a50: 72 73 74 20 68 61 73 74 65 78 74 5d 20 3f 20 22 rst hastext] ? "
7a60: 68 61 73 20 74 65 78 74 22 20 3a 20 22 6e 6f 20 has text" : "no
7a70: 74 65 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 text"}]"...if {$
7a80: 6d 79 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 20 myimported &&..
7a90: 20 20 20 5b 24 66 69 72 73 74 20 72 65 76 6e 72 [$first revnr
7aa0: 5d 20 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 26 ] eq "1.1.1.1" &
7ab0: 26 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20 6f &.. [$first o
7ac0: 70 65 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 68 peration] eq "ch
7ad0: 61 6e 67 65 22 20 26 26 0a 09 20 20 20 20 21 5b ange" &&.. ![
7ae0: 24 66 69 72 73 74 20 68 61 73 74 65 78 74 5d 7d $first hastext]}
7af0: 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 {... set rev
7b00: 31 31 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 11 [$first paren
7b10: 74 5d 20 3b 20 23 20 41 73 73 65 72 74 3a 20 53 t] ; # Assert: S
7b20: 68 6f 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e hould be myroot.
7b30: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
7b40: 33 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 3 file "Removing
7b50: 20 69 72 72 65 6c 65 76 61 6e 74 20 72 65 76 69 irrelevant revi
7b60: 73 69 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 76 sion [$rev11 rev
7b70: 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 74 nr]"... # Cut
7b80: 20 6f 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 72 out the old myr
7b90: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 oot revision....
7ba0: 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f ldelete myro
7bb0: 6f 74 73 20 24 72 65 76 31 31 20 3b 20 23 20 4e ots $rev11 ; # N
7bc0: 6f 74 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f ot a root any lo
7bd0: 6e 67 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 72 nger.... $fir
7be0: 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 st cutfromparent
7bf0: 20 3b 20 23 20 53 65 76 65 72 20 72 65 76 69 73 ; # Sever revis
7c00: 69 6f 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 ion from parent
7c10: 72 65 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69 revision... i
7c20: 66 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 f {$stop ne ""}
7c30: 7b 0a 09 09 24 73 74 6f 70 20 63 75 74 66 72 6f {...$stop cutfro
7c40: 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e mparent...lappen
7c50: 64 20 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 20 d myroots $stop
7c60: 3b 20 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66 ; # New root, af
7c70: 74 65 72 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 ter vendor branc
7c80: 68 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 h.. }... #
7c90: 20 43 75 74 20 6f 75 74 20 74 68 65 20 76 65 6e Cut out the ven
7ca0: 64 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f dor branch symbo
7cb0: 6c 0a 0a 09 20 20 20 20 73 65 74 20 76 65 6e 64 l... set vend
7cc0: 6f 72 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e or [$first paren
7cd0: 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 6e tbranch].. in
7ce0: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
7cf0: 24 76 65 6e 64 6f 72 20 6e 65 20 22 22 7d 20 7b $vendor ne ""} {
7d00: 46 69 72 73 74 20 4e 54 44 42 20 72 65 76 69 73 First NTDB revis
7d10: 69 6f 6e 20 68 61 73 20 6e 6f 20 62 72 61 6e 63 ion has no branc
7d20: 68 7d 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65 h}.. if {[$ve
7d30: 6e 64 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20 ndor parent] eq
7d40: 24 72 65 76 31 31 7d 20 7b 0a 09 09 24 72 65 76 $rev11} {...$rev
7d50: 31 31 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 11 removebranch
7d60: 20 20 20 20 20 20 20 24 76 65 6e 64 6f 72 0a 09 $vendor..
7d70: 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 63 68 .$rev11 removech
7d80: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 66 69 72 ildonbranch $fir
7d90: 73 74 0a 09 09 24 76 65 6e 64 6f 72 20 63 75 74 st...$vendor cut
7da0: 62 72 61 6e 63 68 70 61 72 65 6e 74 20 20 20 20 branchparent
7db0: 3b 23 20 62 70 20 3d 20 72 65 76 31 31 2c 20 61 ;# bp = rev11, a
7dc0: 62 6f 75 74 20 74 6f 20 62 65 20 67 6f 6e 65 0a bout to be gone.
7dd0: 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d ..$first cutfrom
7de0: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 3b 23 20 parentbranch ;#
7df0: 70 62 20 3d 20 76 65 6e 64 6f 72 2c 20 74 6f 20 pb = vendor, to
7e00: 62 65 20 61 20 64 65 74 61 63 68 65 64 20 4c 4f be a detached LO
7e10: 44 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f D...lappend myro
7e20: 6f 74 73 20 24 66 69 72 73 74 0a 09 20 20 20 20 ots $first..
7e30: 7d 0a 0a 09 20 20 20 20 23 20 43 68 61 6e 67 65 }... # Change
7e40: 20 74 68 65 20 74 79 70 65 20 6f 66 20 66 69 72 the type of fir
7e50: 73 74 20 28 74 79 70 69 63 61 6c 6c 79 20 66 72 st (typically fr
7e60: 6f 6d 20 43 68 61 6e 67 65 20 74 6f 20 41 64 64 om Change to Add
7e70: 29 3a 0a 09 20 20 20 20 24 66 69 72 73 74 20 72 ):.. $first r
7e80: 65 74 79 70 65 20 61 64 64 0a 0a 09 20 20 20 20 etype add...
7e90: 23 20 4d 6f 76 65 20 61 6e 79 20 74 61 67 73 20 # Move any tags
7ea0: 61 6e 64 20 62 72 61 6e 63 68 65 73 20 66 72 6f and branches fro
7eb0: 6d 20 74 68 65 20 6f 6c 64 20 74 6f 20 74 68 65 m the old to the
7ec0: 20 6e 65 77 20 72 6f 6f 74 2e 0a 09 20 20 20 20 new root...
7ed0: 24 72 65 76 31 31 20 6d 6f 76 65 73 79 6d 62 6f $rev11 movesymbo
7ee0: 6c 73 74 6f 20 24 66 69 72 73 74 0a 09 7d 0a 0a lsto $first..}..
7ef0: 09 23 20 4d 61 72 6b 20 61 6c 6c 20 74 68 65 20 .# Mark all the
7f00: 73 70 65 63 69 61 6c 20 72 65 76 69 73 69 6f 6e special revision
7f10: 73 20 61 73 20 73 75 63 68 0a 09 66 6f 72 65 61 s as such..forea
7f20: 63 68 20 72 65 76 20 24 72 65 76 6c 69 73 74 20 ch rev $revlist
7f30: 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 {.. log write
7f40: 20 33 20 66 69 6c 65 20 22 52 65 76 69 73 69 6f 3 file "Revisio
7f50: 6e 20 6f 6e 20 64 65 66 61 75 6c 74 20 62 72 61 n on default bra
7f60: 6e 63 68 3a 20 5b 24 72 65 76 20 72 65 76 6e 72 nch: [$rev revnr
7f70: 5d 22 0a 09 20 20 20 20 24 72 65 76 20 73 65 74 ]".. $rev set
7f80: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 ondefaultbranch
7f90: 31 0a 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f 70 1..}...if {$stop
7fa0: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 ne ""} {.. #
7fb0: 20 52 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c 6f Revision 1.2 lo
7fc0: 67 69 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20 gically follows
7fd0: 74 68 65 20 69 6d 70 6f 72 74 65 64 20 72 65 76 the imported rev
7fe0: 69 73 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20 6e isions,.. # n
7ff0: 6f 74 20 31 2e 31 2e 20 20 41 63 63 6f 72 64 69 ot 1.1. Accordi
8000: 6e 67 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69 74 ngly, connect it
8010: 20 74 6f 20 74 68 65 20 6c 61 73 74 20 4e 54 44 to the last NTD
8020: 42 52 20 61 6e 64 0a 09 20 20 20 20 23 20 70 6f BR and.. # po
8030: 73 73 69 62 6c 79 20 63 68 61 6e 67 65 20 69 74 ssibly change it
8040: 73 20 74 79 70 65 2e 0a 0a 09 20 20 20 20 73 65 s type.... se
8050: 74 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20 24 t last [lindex $
8060: 72 65 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20 20 revlist end]..
8070: 20 20 24 73 74 6f 70 20 73 65 74 64 65 66 61 75 $stop setdefau
8080: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 24 ltbranchparent $
8090: 6c 61 73 74 20 3b 20 23 20 52 65 74 79 70 65 73 last ; # Retypes
80a0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f the revision to
80b0: 6f 2e 0a 09 20 20 20 20 24 6c 61 73 74 20 73 65 o... $last se
80c0: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 tdefaultbranchch
80d0: 69 6c 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09 72 ild $stop..}..r
80e0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
80f0: 20 6d 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f 44 method CheckLOD
8100: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 s {} {..foreach
8110: 7b 5f 20 62 72 61 6e 63 68 7d 20 20 5b 61 72 72 {_ branch} [arr
8120: 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 ay get mybranche
8130: 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 63 68 65 s] { $branch che
8140: 63 6b 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63 68 cklod }..foreach
8150: 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 {_ taglist} [ar
8160: 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 ray get mytags]
8170: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 {.. foreach t
8180: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74 ag $taglist { $t
8190: 61 67 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d ag checklod }..}
81a0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
81b0: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 method Remov
81c0: 65 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 74 eIrrelevantDelet
81d0: 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f ions {} {..# Fro
81e0: 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 61 20 m cvs2svn: If a
81f0: 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e file is added on
8200: 20 61 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20 a branch, then
8210: 61 20 74 72 75 6e 6b 0a 09 23 20 72 65 76 69 73 a trunk..# revis
8220: 69 6f 6e 20 69 73 20 61 64 64 65 64 20 61 74 20 ion is added at
8230: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 69 6e the same time in
8240: 20 74 68 65 20 27 44 65 61 64 27 20 73 74 61 74 the 'Dead' stat
8250: 65 2e 0a 09 23 20 54 68 69 73 20 72 65 76 69 73 e...# This revis
8260: 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61 ion doesn't do a
8270: 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 2c 20 nything useful,
8280: 73 6f 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a 09 so delete it....
8290: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79 foreach root $my
82a0: 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 69 66 20 roots {.. if
82b0: 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 {[$root isneeded
82c0: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 ]} continue..
82d0: 20 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c log write 2 fil
82e0: 65 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 e "Removing unne
82f0: 63 65 73 73 61 72 79 20 64 65 61 64 20 72 65 76 cessary dead rev
8300: 69 73 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65 76 ision [$root rev
8310: 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 52 65 6d nr]"... # Rem
8320: 6f 76 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61 6b ove as root, mak
8330: 65 20 69 74 73 20 63 68 69 6c 64 20 6e 65 77 20 e its child new
8340: 72 6f 6f 74 20 61 66 74 65 72 0a 09 20 20 20 20 root after..
8350: 23 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 # disconnecting
8360: 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 it from the revi
8370: 73 69 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67 20 sion just going
8380: 61 77 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65 6c away.... ldel
8390: 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f ete myroots $roo
83a0: 74 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f t.. if {[$roo
83b0: 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a 09 t haschild]} {..
83c0: 09 73 65 74 20 63 68 69 6c 64 20 5b 24 72 6f 6f .set child [$roo
83d0: 74 20 63 68 69 6c 64 5d 0a 09 09 24 63 68 69 6c t child]...$chil
83e0: 64 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a d cutfromparent.
83f0: 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 ..lappend myroot
8400: 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a s $child.. }.
8410: 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 .. # Cut out
8420: 74 68 65 20 62 72 61 6e 63 68 65 73 20 73 70 61 the branches spa
8430: 77 6e 65 64 20 62 79 20 74 68 65 20 72 65 76 69 wned by the revi
8440: 73 69 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20 20 sion to be..
8450: 23 20 64 65 6c 65 74 65 64 2e 20 49 66 20 74 68 # deleted. If th
8460: 65 20 62 72 61 6e 63 68 20 68 61 73 20 72 65 76 e branch has rev
8470: 69 73 69 6f 6e 73 20 74 68 65 79 20 73 68 6f 75 isions they shou
8480: 6c 64 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20 ld already..
8490: 23 20 75 73 65 20 6f 70 65 72 61 74 69 6f 6e 20 # use operation
84a0: 27 61 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20 74 'add', no need t
84b0: 6f 20 63 68 61 6e 67 65 20 74 68 61 74 2e 20 54 o change that. T
84c0: 68 65 20 66 69 72 73 74 0a 09 20 20 20 20 23 20 he first.. #
84d0: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63 68 revision on each
84e0: 20 62 72 61 6e 63 68 20 62 65 63 6f 6d 65 73 20 branch becomes
84f0: 61 20 6e 65 77 20 61 6e 64 20 64 69 73 63 6f 6e a new and discon
8500: 6e 65 63 74 65 64 0a 09 20 20 20 20 23 20 72 6f nected.. # ro
8510: 6f 74 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61 63 ot.... foreac
8520: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 h branch [$root
8530: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 24 62 branches] {...$b
8540: 72 61 6e 63 68 20 63 75 74 62 72 61 6e 63 68 70 ranch cutbranchp
8550: 61 72 65 6e 74 0a 09 09 69 66 20 7b 21 5b 24 62 arent...if {![$b
8560: 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d ranch haschild]}
8570: 20 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 continue...set
8580: 66 69 72 73 74 20 5b 24 62 72 61 6e 63 68 20 63 first [$branch c
8590: 68 69 6c 64 5d 0a 09 09 24 66 69 72 73 74 20 63 hild]...$first c
85a0: 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c utfromparent...l
85b0: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 append myroots $
85c0: 66 69 72 73 74 0a 09 20 20 20 20 7d 0a 09 20 20 first.. }..
85d0: 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c $root removeal
85e0: 6c 62 72 61 6e 63 68 65 73 0a 0a 09 20 20 20 20 lbranches...
85f0: 23 20 54 61 67 67 69 6e 67 20 61 20 64 65 61 64 # Tagging a dead
8600: 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 revision doesn'
8610: 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73 t do anything, s
8620: 6f 20 72 65 6d 6f 76 65 0a 09 20 20 20 20 23 20 o remove.. #
8630: 61 6e 79 20 74 61 67 73 20 74 68 61 74 20 77 65 any tags that we
8640: 72 65 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 re set on it....
8650: 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 $root remove
8660: 61 6c 6c 74 61 67 73 0a 0a 09 20 20 20 20 23 20 alltags... #
8670: 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61 This can only ha
8680: 70 70 65 6e 20 6f 6e 63 65 20 70 65 72 20 66 69 ppen once per fi
8690: 6c 65 2c 20 61 6e 64 20 77 65 20 6d 69 67 68 74 le, and we might
86a0: 20 68 61 76 65 0a 09 20 20 20 20 23 20 6a 75 73 have.. # jus
86b0: 74 20 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74 t changed myroot
86c0: 73 2c 20 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f s, so end the lo
86d0: 6f 70 0a 09 20 20 20 20 62 72 65 61 6b 0a 09 7d op.. break..}
86e0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
86f0: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 method Remov
8700: 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65 eInitialBranchDe
8710: 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 letions {} {..#
8720: 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 From cvs2svn: If
8730: 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69 73 the first revis
8740: 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 ion on a branch
8750: 69 73 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73 is an..# unneces
8760: 73 61 72 79 20 64 65 6c 65 74 65 2c 20 72 65 6d sary delete, rem
8770: 6f 76 65 20 69 74 2e 0a 09 23 0a 09 23 20 49 66 ove it...#..# If
8780: 20 61 20 66 69 6c 65 20 69 73 20 61 64 64 65 64 a file is added
8790: 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 28 77 68 on a branch (wh
87a0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 ether or not it
87b0: 61 6c 72 65 61 64 79 0a 09 23 20 65 78 69 73 74 already..# exist
87c0: 65 64 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68 ed on trunk), th
87d0: 65 6e 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 en new versions
87e0: 6f 66 20 43 56 53 20 61 64 64 20 61 20 66 69 72 of CVS add a fir
87f0: 73 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 st..# branch rev
8800: 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 27 64 65 ision in the 'de
8810: 61 64 27 20 73 74 61 74 65 20 28 74 6f 20 69 6e ad' state (to in
8820: 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 0a dicate that the.
8830: 09 23 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20 .# file did not
8840: 65 78 69 73 74 20 6f 6e 20 74 68 65 20 62 72 61 exist on the bra
8850: 6e 63 68 20 77 68 65 6e 20 74 68 65 20 62 72 61 nch when the bra
8860: 6e 63 68 20 77 61 73 0a 09 23 20 63 72 65 61 74 nch was..# creat
8870: 65 64 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 ed) followed by
8880: 74 68 65 20 73 65 63 6f 6e 64 20 62 72 61 6e 63 the second branc
8890: 68 20 72 65 76 69 73 69 6f 6e 2c 20 77 68 69 63 h revision, whic
88a0: 68 20 69 73 20 61 6e 0a 09 23 20 61 64 64 2e 20 h is an..# add.
88b0: 20 57 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74 When we encount
88c0: 65 72 20 74 68 69 73 20 73 69 74 75 61 74 69 6f er this situatio
88d0: 6e 2c 20 77 65 20 73 65 76 65 72 20 74 68 65 20 n, we sever the
88e0: 62 72 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74 branch..# from t
88f0: 72 75 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65 20 runk and delete
8900: 74 68 65 20 66 69 72 73 74 20 62 72 61 6e 63 68 the first branch
8910: 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 revision....# A
8920: 74 20 74 68 69 73 20 70 6f 69 6e 74 20 77 65 20 t this point we
8930: 6d 61 79 20 68 61 76 65 20 61 6c 72 65 61 64 79 may have already
8940: 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20 multiple roots
8950: 69 6e 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77 in myroots,..# w
8960: 65 20 68 61 76 65 20 74 6f 20 70 72 6f 63 65 73 e have to proces
8970: 73 20 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f s them all....fo
8980: 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c reach root [$sel
8990: 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 f LinesOfDevelop
89a0: 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 ment] {.. if
89b0: 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 {[$root isneeded
89c0: 62 72 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 branchdel]} cont
89d0: 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 inue.. log wr
89e0: 69 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f ite 2 file "Remo
89f0: 76 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 ving unnecessary
8a00: 20 69 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20 initial branch
8a10: 64 65 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72 65 delete [$root re
8a20: 76 6e 72 5d 22 0a 0a 09 20 20 20 20 73 65 74 20 vnr]"... set
8a30: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 branch [$root pa
8a40: 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 rentbranch]..
8a50: 20 73 65 74 20 70 61 72 65 6e 74 20 5b 24 72 6f set parent [$ro
8a60: 6f 74 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 ot parent]..
8a70: 73 65 74 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f set child [$roo
8a80: 74 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c t child]... l
8a90: 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 delete myroots $
8aa0: 72 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e root.. lappen
8ab0: 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 d myroots $child
8ac0: 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 ... $branch c
8ad0: 75 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 utbranchparent..
8ae0: 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 63 $branch cutc
8af0: 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 hild.. $child
8b00: 20 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a cutfromparent.
8b10: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 .. $branch se
8b20: 74 63 68 69 6c 64 20 20 20 20 20 20 20 20 24 63 tchild $c
8b30: 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 hild.. $child
8b40: 20 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63 setparentbranc
8b50: 68 20 24 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 h $branch...
8b60: 24 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 $parent removebr
8b70: 61 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61 anch $bra
8b80: 6e 63 68 0a 09 20 20 20 20 24 70 61 72 65 6e 74 nch.. $parent
8b90: 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 removechildonbr
8ba0: 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 anch $root..}..r
8bb0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
8bc0: 20 6d 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66 44 method LinesOfD
8bd0: 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a evelopment {} {.
8be0: 09 23 20 44 65 74 65 72 6d 69 6e 65 20 61 6c 6c .# Determine all
8bf0: 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f lines of develo
8c00: 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 66 69 pment for the fi
8c10: 6c 65 2e 20 54 68 69 73 20 61 72 65 0a 09 23 20 le. This are..#
8c20: 74 68 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c the known roots,
8c30: 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f 66 and the root of
8c40: 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 66 6f all branches fo
8c50: 75 6e 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c 69 und on the..# li
8c60: 6e 65 20 6f 66 20 70 72 69 6d 61 72 79 20 63 68 ne of primary ch
8c70: 69 6c 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f ildren....set lo
8c80: 64 72 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65 61 droots {}..forea
8c90: 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 ch root $myroots
8ca0: 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64 {.. $self Ad
8cb0: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 dBranchedLinesOf
8cc0: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 Development lodr
8cd0: 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 oots $root..
8ce0: 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 lappend lodroots
8cf0: 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 $root..}..retur
8d00: 6e 20 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20 20 n $lodroots.
8d10: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 }.. method Ad
8d20: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 dBranchedLinesOf
8d30: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20 Development {lv
8d40: 72 6f 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20 31 root} {..upvar 1
8d50: 20 24 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09 77 $lv lodroots..w
8d60: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 hile {$root ne "
8d70: 22 7d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 "} {.. foreac
8d80: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 h branch [$root
8d90: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 66 branches] {...if
8da0: 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63 {![$branch hasc
8db0: 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a hild]} continue.
8dc0: 09 09 73 65 74 20 63 68 69 6c 64 20 5b 24 62 72 ..set child [$br
8dd0: 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 23 20 anch child]...#
8de0: 52 65 63 75 72 73 65 20 69 6e 74 6f 20 74 68 65 Recurse into the
8df0: 20 62 72 61 6e 63 68 20 66 6f 72 20 64 65 65 70 branch for deep
8e00: 65 72 20 62 72 61 6e 63 68 65 73 2e 0a 09 09 24 er branches....$
8e10: 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64 self AddBranched
8e20: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 LinesOfDevelopme
8e30: 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 nt lodroots $chi
8e40: 6c 64 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f 64 ld...lappend lod
8e50: 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 20 roots $child..
8e60: 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f }.. set roo
8e70: 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a t [$root child].
8e80: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. }
8e90: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63 .. method Exc
8ea0: 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f ludeNonTrunkInfo
8eb0: 72 6d 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 rmation {} {..#
8ec0: 52 65 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74 Remove all non-t
8ed0: 72 75 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20 72 runk branches, r
8ee0: 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74 61 evisions, and ta
8ef0: 67 73 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65 65 gs. We do..# kee
8f00: 70 20 74 68 65 20 74 61 67 73 20 77 68 69 63 68 p the tags which
8f10: 20 61 72 65 20 6f 6e 20 74 68 65 20 74 72 75 6e are on the trun
8f20: 6b 2e 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f 6f k....set ntdbroo
8f30: 74 20 22 22 0a 09 66 6f 72 65 61 63 68 20 72 6f t ""..foreach ro
8f40: 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f ot [$self LinesO
8f50: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a fDevelopment] {.
8f60: 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 48 65 72 . # Note: Her
8f70: 65 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 e the order of t
8f80: 68 65 20 72 6f 6f 74 73 20 69 73 20 69 6d 70 6f he roots is impo
8f90: 72 74 61 6e 74 2c 0a 09 20 20 20 20 23 20 69 2e rtant,.. # i.
8fa0: 65 2e 20 74 68 61 74 20 77 65 20 67 65 74 20 74 e. that we get t
8fb0: 68 65 6d 20 69 6e 20 64 65 70 74 68 20 66 69 72 hem in depth fir
8fc0: 73 74 20 6f 72 64 65 72 2e 20 54 68 69 73 20 65 st order. This e
8fd0: 6e 73 75 72 65 73 0a 09 20 20 20 20 23 20 74 68 nsures.. # th
8fe0: 61 74 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f at the removal o
8ff0: 66 20 61 20 62 72 61 6e 63 68 20 68 61 70 70 65 f a branch happe
9000: 6e 73 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 ns only after th
9010: 65 0a 09 20 20 20 20 23 20 62 72 61 6e 63 68 65 e.. # branche
9020: 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69 s spawned from i
9030: 74 20 77 65 72 65 20 72 65 6d 6f 76 65 64 2e 20 t were removed.
9040: 4f 74 68 65 72 77 69 73 65 20 74 68 65 0a 09 20 Otherwise the..
9050: 20 20 20 23 20 73 79 73 74 65 6d 20 6d 69 67 68 # system migh
9060: 74 20 74 72 79 20 74 6f 20 61 63 63 65 73 73 20 t try to access
9070: 64 65 6c 65 74 65 64 20 6f 62 6a 65 63 74 73 2e deleted objects.
9080: 0a 0a 09 20 20 20 20 23 20 44 6f 20 6e 6f 74 20 ... # Do not
9090: 65 78 63 6c 75 64 65 20 74 68 65 20 74 72 75 6e exclude the trun
90a0: 6b 2e 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24 72 k... if {[[$r
90b0: 6f 6f 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e 6b oot lod] istrunk
90c0: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 ]} continue..
90d0: 20 24 73 65 6c 66 20 45 78 63 6c 75 64 65 42 72 $self ExcludeBr
90e0: 61 6e 63 68 20 24 72 6f 6f 74 20 6e 74 64 62 72 anch $root ntdbr
90f0: 6f 6f 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e 74 oot..}...if {$nt
9100: 64 62 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a dbroot ne ""} {.
9110: 09 20 20 20 20 24 73 65 6c 66 20 47 72 61 66 74 . $self Graft
9120: 4e 54 44 42 32 54 72 75 6e 6b 20 24 6e 74 64 62 NTDB2Trunk $ntdb
9130: 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a root..}..return.
9140: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
9150: 64 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20 d ExcludeBranch
9160: 7b 72 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20 45 {root nv} {..# E
9170: 78 63 6c 75 64 65 20 74 68 65 20 62 72 61 6e 63 xclude the branc
9180: 68 2f 6c 6f 64 20 73 74 61 72 74 69 6e 67 20 61 h/lod starting a
9190: 74 20 72 6f 6f 74 2c 20 61 20 72 65 76 69 73 69 t root, a revisi
91a0: 6f 6e 2e 0a 09 23 0a 09 23 20 49 66 20 74 68 65 on...#..# If the
91b0: 20 4c 4f 44 20 73 74 61 72 74 73 20 77 69 74 68 LOD starts with
91c0: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau
91d0: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 lt branch revisi
91e0: 6f 6e 73 2c 0a 09 23 20 77 65 20 6c 65 61 76 65 ons,..# we leave
91f0: 20 74 68 65 6d 20 69 6e 20 70 6c 61 63 65 20 61 them in place a
9200: 6e 64 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 65 nd do not delete
9210: 20 74 68 65 20 62 72 61 6e 63 68 2e 20 49 6e 20 the branch. In
9220: 74 68 61 74 0a 09 23 20 63 61 73 65 20 74 68 65 that..# case the
9230: 20 63 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 68 command sets th
9240: 65 20 76 61 72 69 61 62 6c 65 20 69 6e 20 4e 56 e variable in NV
9250: 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 0a so that we can.
9260: 09 23 20 6c 61 74 65 72 20 72 65 77 6f 72 6b 20 .# later rework
9270: 74 68 65 73 65 20 72 65 76 69 73 6f 6e 73 20 74 these revisons t
9280: 6f 20 62 65 20 70 75 72 65 6c 79 20 74 72 75 6e o be purely trun
9290: 6b 2e 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 20 k....if {[$root
92a0: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 isondefaultbranc
92b0: 68 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e h]} {.. # Han
92c0: 64 6c 69 6e 67 20 61 20 4e 54 44 42 2e 20 54 68 dling a NTDB. Th
92d0: 69 73 20 62 72 61 6e 63 68 20 6d 61 79 20 63 6f is branch may co
92e0: 6e 73 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79 20 nsists not only
92f0: 6f 66 0a 09 20 20 20 20 23 20 4e 54 44 42 20 72 of.. # NTDB r
9300: 65 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 61 6c evisions, but al
9310: 73 6f 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42 so some non-NTDB
9320: 2e 20 54 68 65 20 6c 61 74 74 65 72 20 61 72 65 . The latter are
9330: 0a 09 20 20 20 20 23 20 74 72 75 6c 79 20 6f 6e .. # truly on
9340: 20 61 20 62 72 61 6e 63 68 20 61 6e 64 20 68 61 a branch and ha
9350: 76 65 20 74 6f 20 62 65 20 65 78 63 6c 75 64 65 ve to be exclude
9360: 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 d. The following
9370: 0a 09 20 20 20 20 23 20 6c 6f 6f 70 20 64 65 74 .. # loop det
9380: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 72 65 ermines if there
9390: 20 61 72 65 20 73 75 63 68 20 72 65 76 69 73 69 are such revisi
93a0: 6f 6e 73 2e 0a 0a 09 20 20 20 20 75 70 76 61 72 ons.... upvar
93b0: 20 31 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74 0a 1 $nv ntdbroot.
93c0: 09 20 20 20 20 73 65 74 20 6e 74 64 62 72 6f 6f . set ntdbroo
93d0: 74 20 24 72 6f 6f 74 0a 09 20 20 20 20 24 72 6f t $root.. $ro
93e0: 6f 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 ot cutfromparent
93f0: 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 73 65 74 branch... set
9400: 20 72 65 76 20 24 72 6f 6f 74 0a 09 20 20 20 20 rev $root..
9410: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 while {$rev ne "
9420: 22 7d 20 7b 0a 09 09 24 72 65 76 20 72 65 6d 6f "} {...$rev remo
9430: 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09 veallbranches...
9440: 23 20 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a # See note [x]..
9450: 0a 09 09 69 66 20 7b 5b 24 72 65 76 20 69 73 6f ...if {[$rev iso
9460: 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d ndefaultbranch]}
9470: 20 7b 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 {... set rev
9480: 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 [$rev child]...
9490: 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 62 } else {... b
94a0: 72 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a reak...}.. }.
94b0: 0a 09 20 20 20 20 23 20 72 65 76 20 6e 6f 77 20 .. # rev now
94c0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 contains the fir
94d0: 73 74 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76 69 st non-NTDB revi
94e0: 73 69 6f 6e 20 61 66 74 65 72 20 74 68 65 0a 09 sion after the..
94f0: 20 20 20 20 23 20 4e 54 44 42 2c 20 6f 72 20 69 # NTDB, or i
9500: 73 20 65 6d 70 74 79 20 69 66 20 74 68 65 72 65 s empty if there
9510: 20 69 73 20 6e 6f 20 73 75 63 68 2e 20 49 66 20 is no such. If
9520: 77 65 20 68 61 76 65 20 73 6f 6d 65 0a 09 20 20 we have some..
9530: 20 20 23 20 74 68 65 79 20 68 61 76 65 20 74 6f # they have to
9540: 20 72 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20 20 removed....
9550: 69 66 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 if {$rev ne ""}
9560: 20 7b 0a 09 09 73 65 74 20 6c 61 73 74 6e 74 64 {...set lastntd
9570: 62 20 5b 24 72 65 76 20 70 61 72 65 6e 74 5d 0a b [$rev parent].
9580: 09 09 24 6c 61 73 74 6e 74 64 62 20 63 75 74 66 ..$lastntdb cutf
9590: 72 6f 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c 65 romchild...while
95a0: 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a {$rev ne ""} {.
95b0: 09 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76 .. $rev remov
95c0: 65 61 6c 6c 74 61 67 73 0a 09 09 20 20 20 20 24 ealltags... $
95d0: 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 rev removeallbra
95e0: 6e 63 68 65 73 0a 09 09 20 20 20 20 23 20 4e 6f nches... # No
95f0: 74 65 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20 73 te [x]: We may s
9600: 74 69 6c 6c 20 68 61 76 65 20 68 61 64 20 62 72 till have had br
9610: 61 6e 63 68 65 73 20 6f 6e 20 74 68 65 0a 09 09 anches on the...
9620: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2e 20 # revision.
9630: 42 72 61 6e 63 68 65 73 20 77 69 74 68 6f 75 74 Branches without
9640: 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d 69 revisions commi
9650: 74 74 65 64 0a 09 09 20 20 20 20 23 20 6f 6e 20 tted... # on
9660: 74 68 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f 77 them do not show
9670: 20 75 70 20 69 6e 20 74 68 65 20 6c 69 73 74 20 up in the list
9680: 6f 66 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09 20 of roots aka...
9690: 20 20 20 23 20 6c 69 6e 65 73 20 6f 66 20 64 65 # lines of de
96a0: 76 65 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20 20 velopment....
96b0: 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 set rev [$rev c
96c0: 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d hild]...}.. }
96d0: 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a .. return..}.
96e0: 0a 09 23 20 4e 6f 20 4e 54 44 42 20 73 74 75 66 ..# No NTDB stuf
96f0: 66 20 74 6f 20 64 65 61 6c 20 77 69 74 68 2e 20 f to deal with.
9700: 46 69 72 73 74 20 64 65 6c 65 74 65 20 74 68 65 First delete the
9710: 20 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a 09 branch object..
9720: 23 20 69 74 73 65 6c 66 2c 20 61 66 74 65 72 20 # itself, after
9730: 63 75 74 74 69 6e 67 20 61 6c 6c 20 74 68 65 20 cutting all the
9740: 76 61 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74 69 various connecti
9750: 6f 6e 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e 63 ons....set branc
9760: 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 h [$root parentb
9770: 72 61 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72 61 ranch]..if {$bra
9780: 6e 63 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 nch ne ""} {..
9790: 20 20 73 65 74 20 62 72 61 6e 63 68 70 61 72 65 set branchpare
97a0: 6e 74 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 nt [$branch pare
97b0: 6e 74 5d 0a 09 20 20 20 20 24 62 72 61 6e 63 68 nt].. $branch
97c0: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 parent removebra
97d0: 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e nch $bran
97e0: 63 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70 ch.. $branchp
97f0: 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c arent removechil
9800: 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a donbranch $root.
9810: 09 7d 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 .}...# The root
9820: 69 73 20 6e 6f 20 73 75 63 68 20 61 6e 79 20 6c is no such any l
9830: 6f 6e 67 65 72 20 65 69 74 68 65 72 2e 0a 09 6c onger either...l
9840: 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 delete myroots $
9850: 72 6f 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f 20 root...# Now go
9860: 74 68 72 6f 75 67 68 20 74 68 65 20 6c 69 6e 65 through the line
9870: 20 61 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c 20 and remove all
9880: 69 74 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a its revisions...
9890: 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 .while {$root ne
98a0: 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f ""} {.. $roo
98b0: 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a t removealltags.
98c0: 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 . $root remov
98d0: 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20 20 eallbranches..
98e0: 20 20 23 20 4e 6f 74 65 3a 20 53 65 65 20 74 68 # Note: See th
98f0: 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20 20 e note [x]....
9900: 20 20 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e # From cvs2svn
9910: 3a 20 49 66 20 74 68 69 73 20 69 73 20 74 68 65 : If this is the
9920: 20 6c 61 73 74 20 64 65 66 61 75 6c 74 20 72 65 last default re
9930: 76 69 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20 20 vision on a..
9940: 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 # non-trunk def
9950: 61 75 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c 6c ault branch foll
9960: 6f 77 65 64 20 62 79 20 61 20 31 2e 32 20 72 65 owed by a 1.2 re
9970: 76 69 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 74 vision,.. # t
9980: 68 65 6e 20 74 68 65 20 31 2e 32 20 72 65 76 69 hen the 1.2 revi
9990: 73 69 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e 20 sion depends on
99a0: 74 68 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d 45 this one. FIXME
99b0: 3a 20 49 74 20 69 73 0a 09 20 20 20 20 23 20 71 : It is.. # q
99c0: 75 65 73 74 69 6f 6e 61 62 6c 65 20 77 68 65 74 uestionable whet
99d0: 68 65 72 20 74 68 69 73 20 68 61 6e 64 6c 69 6e her this handlin
99e0: 67 20 69 73 20 63 6f 72 72 65 63 74 2c 20 73 69 g is correct, si
99f0: 6e 63 65 20 74 68 65 0a 09 20 20 20 20 23 20 6e nce the.. # n
9a00: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 on-trunk default
9a10: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e branch revision
9a20: 73 20 61 66 66 65 63 74 20 74 72 75 6e 6b 20 61 s affect trunk a
9a30: 6e 64 0a 09 20 20 20 20 23 20 73 68 6f 75 6c 64 nd.. # should
9a40: 20 74 68 65 72 65 66 6f 72 65 20 6e 6f 74 20 6a therefore not j
9a50: 75 73 74 20 62 65 20 64 69 73 63 61 72 64 65 64 ust be discarded
9a60: 20 65 76 65 6e 20 69 66 0a 09 20 20 20 20 23 20 even if.. #
9a70: 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09 --trunk-only....
9a80: 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 if {[$root h
9a90: 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 asdefaultbranchc
9aa0: 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 6e hild]} {...set n
9ab0: 74 64 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20 tdbchild [$root
9ac0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 defaultbranchchi
9ad0: 6c 64 5d 0a 09 09 69 6e 74 65 67 72 69 74 79 20 ld]...integrity
9ae0: 61 73 73 65 72 74 20 7b 0a 09 09 20 20 20 20 5b assert {... [
9af0: 24 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61 75 $ntdbchild defau
9b00: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d 20 ltbranchparent]
9b10: 65 71 20 24 6e 74 64 62 63 68 69 6c 64 0a 09 09 eq $ntdbchild...
9b20: 7d 20 7b 6e 74 64 62 20 2d 20 74 72 75 6e 6b 20 } {ntdb - trunk
9b30: 6c 69 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 7d 0a linkage broken}.
9b40: 09 09 24 6e 74 64 62 63 68 69 6c 64 20 63 75 74 ..$ntdbchild cut
9b50: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 defaultbranchpar
9b60: 65 6e 74 0a 09 09 69 66 20 7b 5b 24 6e 74 64 62 ent...if {[$ntdb
9b70: 63 68 69 6c 64 20 68 61 73 70 61 72 65 6e 74 5d child hasparent]
9b80: 7d 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e } {... lappen
9b90: 64 20 6d 79 72 6f 6f 74 73 20 5b 24 6e 74 64 62 d myroots [$ntdb
9ba0: 63 68 69 6c 64 20 70 61 72 65 6e 74 5d 0a 09 09 child parent]...
9bb0: 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73 }.. }... s
9bc0: 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 et root [$root c
9bd0: 68 69 6c 64 5d 0a 09 7d 0a 0a 09 72 65 74 75 72 hild]..}...retur
9be0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
9bf0: 68 6f 64 20 47 72 61 66 74 4e 54 44 42 32 54 72 hod GraftNTDB2Tr
9c00: 75 6e 6b 20 7b 72 6f 6f 74 7d 20 7b 0a 09 23 20 unk {root} {..#
9c10: 57 65 20 63 61 6e 20 6e 6f 77 20 67 72 61 66 74 We can now graft
9c20: 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 the non-trunk d
9c30: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 efault branch re
9c40: 76 69 73 69 6f 6e 73 20 74 6f 0a 09 23 20 74 72 visions to..# tr
9c50: 75 6e 6b 2e 20 54 68 65 79 20 73 68 6f 75 6c 64 unk. They should
9c60: 20 61 6c 72 65 61 64 79 20 62 65 20 61 6c 6f 6e already be alon
9c70: 65 20 6f 6e 20 61 20 43 56 53 42 72 61 6e 63 68 e on a CVSBranch
9c80: 2d 6c 65 73 73 0a 09 23 20 62 72 61 6e 63 68 2e -less..# branch.
9c90: 0a 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 ...integrity ass
9ca0: 65 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73 ert {![$root has
9cb0: 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b parentbranch]} {
9cc0: 4e 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 NTDB root still
9cd0: 68 61 73 20 69 74 73 20 62 72 61 6e 63 68 20 73 has its branch s
9ce0: 79 6d 62 6f 6c 7d 0a 09 69 6e 74 65 67 72 69 74 ymbol}..integrit
9cf0: 79 20 61 73 73 65 72 74 20 7b 21 5b 24 72 6f 6f y assert {![$roo
9d00: 74 20 68 61 73 62 72 61 6e 63 68 65 73 5d 7d 20 t hasbranches]}
9d10: 20 20 20 20 7b 4e 54 44 42 20 72 6f 6f 74 20 73 {NTDB root s
9d20: 74 69 6c 6c 20 68 61 73 20 73 70 61 77 6e 65 64 till has spawned
9d30: 20 62 72 61 6e 63 68 65 73 7d 0a 0a 09 73 65 74 branches}...set
9d40: 20 6c 61 73 74 20 24 72 6f 6f 74 0a 09 77 68 69 last $root..whi
9d50: 6c 65 20 7b 5b 24 6c 61 73 74 20 68 61 73 63 68 le {[$last hasch
9d60: 69 6c 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74 20 ild]} {set last
9d70: 5b 24 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a 0a [$last child]}..
9d80: 09 69 66 20 7b 5b 24 6c 61 73 74 20 68 61 73 64 .if {[$last hasd
9d90: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c efaultbranchchil
9da0: 64 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 d]} {... set
9db0: 72 65 76 31 32 20 5b 24 6c 61 73 74 20 64 65 66 rev12 [$last def
9dc0: 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d aultbranchchild]
9dd0: 0a 09 20 20 20 20 24 72 65 76 31 32 20 63 75 74 .. $rev12 cut
9de0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 defaultbranchpar
9df0: 65 6e 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20 ent.. $last
9e00: 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 cutdefaultbranch
9e10: 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 72 65 76 child... $rev
9e20: 31 32 20 63 68 61 6e 67 65 70 61 72 65 6e 74 20 12 changeparent
9e30: 24 6c 61 73 74 0a 09 20 20 20 20 24 6c 61 73 74 $last.. $last
9e40: 20 20 63 68 61 6e 67 65 63 68 69 6c 64 20 24 72 changechild $r
9e50: 65 76 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c 65 ev12... ldele
9e60: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31 te myroots $rev1
9e70: 32 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 61 2... # Note a
9e80: 6e 64 20 72 65 6d 65 6d 62 65 72 20 74 68 61 74 nd remember that
9e90: 20 74 68 65 20 74 79 70 65 20 6f 66 20 72 65 76 the type of rev
9ea0: 31 32 20 77 61 73 20 61 6c 72 65 61 64 79 0a 09 12 was already..
9eb0: 20 20 20 20 23 20 61 64 6a 75 73 74 65 64 20 62 # adjusted b
9ec0: 79 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b y AdjustNonTrunk
9ed0: 44 65 66 61 75 6c 74 42 72 61 6e 63 68 2c 20 73 DefaultBranch, s
9ee0: 6f 20 77 65 20 64 6f 6e 27 74 0a 09 20 20 20 20 o we don't..
9ef0: 23 20 68 61 76 65 20 74 6f 20 63 68 61 6e 67 65 # have to change
9f00: 20 69 74 73 20 74 79 70 65 20 68 65 72 65 2e 0a its type here..
9f10: 09 7d 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f .}...while {$roo
9f20: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 t ne ""} {..
9f30: 24 72 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61 75 $root setondefau
9f40: 6c 74 62 72 61 6e 63 68 20 30 0a 09 20 20 20 20 ltbranch 0..
9f50: 24 72 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d 79 $root setlod $my
9f60: 74 72 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65 61 trunk.. forea
9f70: 63 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 61 ch tag [$root ta
9f80: 67 73 5d 20 7b 0a 09 09 24 74 61 67 20 73 65 74 gs] {...$tag set
9f90: 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 lod $mytrunk..
9fa0: 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f }.. set roo
9fb0: 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a t [$root child].
9fc0: 09 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 .}.. retu
9fd0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
9fe0: 74 68 6f 64 20 41 63 74 69 76 65 20 7b 7d 20 7b thod Active {} {
9ff0: 0a 09 73 65 74 20 72 65 76 69 73 69 6f 6e 73 20 ..set revisions
a000: 7b 7d 0a 09 73 65 74 20 73 79 6d 62 6f 6c 73 20 {}..set symbols
a010: 20 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 72 {}...foreach r
a020: 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 oot [$self Lines
a030: 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b OfDevelopment] {
a040: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 .. if {[$root
a050: 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68 hasparentbranch
a060: 5d 7d 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d ]} { lappend sym
a070: 62 6f 6c 73 20 5b 24 72 6f 6f 74 20 70 61 72 65 bols [$root pare
a080: 6e 74 62 72 61 6e 63 68 5d 20 7d 0a 09 20 20 20 ntbranch] }..
a090: 20 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 while {$root ne
a0a0: 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 ""} {...lappend
a0b0: 20 72 65 76 69 73 69 6f 6e 73 20 24 72 6f 6f 74 revisions $root
a0c0: 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 20 ...foreach tag
a0d0: 20 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 20 [$root tags]
a0e0: 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d { lappend sym
a0f0: 62 6f 6c 73 20 24 74 61 67 20 20 20 20 7d 0a 09 bols $tag }..
a100: 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 .foreach branch
a110: 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d [$root branches]
a120: 20 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 {... integri
a130: 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b ty assert {....[
a140: 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 20 $branch parent]
a150: 65 71 20 24 72 6f 6f 74 0a 09 09 20 20 20 20 7d eq $root... }
a160: 20 7b 42 61 63 6b 72 65 66 65 72 65 6e 63 65 20 {Backreference
a170: 62 72 61 6e 63 68 20 74 6f 20 69 74 73 20 72 6f branch to its ro
a180: 6f 74 20 69 73 20 6d 69 73 73 69 6e 67 20 6f 72 ot is missing or
a190: 20 77 72 6f 6e 67 7d 0a 09 09 20 20 20 20 6c 61 wrong}... la
a1a0: 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 62 ppend symbols $b
a1b0: 72 61 6e 63 68 0a 09 09 7d 0a 09 09 73 65 74 20 ranch...}...set
a1c0: 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a lod [$root lod].
a1d0: 09 09 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74 ..if {![$lod ist
a1e0: 72 75 6e 6b 5d 7d 20 7b 0a 09 09 20 20 20 20 69 runk]} {... i
a1f0: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
a200: 7b 0a 09 09 09 5b 24 6c 6f 64 20 68 61 73 63 68 {....[$lod hasch
a210: 69 6c 64 5d 0a 09 09 20 20 20 20 7d 20 7b 42 72 ild]... } {Br
a220: 61 6e 63 68 20 69 73 20 4c 4f 44 20 73 79 6d 62 anch is LOD symb
a230: 6f 6c 20 77 69 74 68 6f 75 74 20 72 65 76 69 73 ol without revis
a240: 69 6f 6e 73 7d 0a 09 09 20 20 20 20 6c 61 70 70 ions}... lapp
a250: 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 6c 6f 64 end symbols $lod
a260: 0a 09 09 7d 0a 09 09 73 65 74 20 72 6f 6f 74 20 ...}...set root
a270: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 [$root child]..
a280: 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e }..}...return
a290: 20 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 20 2d 75 [list [lsort -u
a2a0: 6e 69 71 75 65 20 2d 64 69 63 74 20 24 72 65 76 nique -dict $rev
a2b0: 69 73 69 6f 6e 73 5d 20 5b 6c 73 6f 72 74 20 2d isions] [lsort -
a2c0: 75 6e 69 71 75 65 20 2d 64 69 63 74 20 24 73 79 unique -dict $sy
a2d0: 6d 62 6f 6c 73 5d 5d 0a 20 20 20 20 7d 0a 0a 0a mbols]]. }...
a2e0: 20 20 20 20 6d 65 74 68 6f 64 20 41 67 67 72 65 method Aggre
a2f0: 67 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 20 7b gateSymbolData {
a300: 7d 20 7b 0a 09 23 20 4e 6f 77 20 74 68 61 74 20 } {..# Now that
a310: 74 68 65 20 65 78 61 63 74 20 73 65 74 20 6f 66 the exact set of
a320: 20 72 65 76 69 73 69 6f 6e 73 20 28 61 6e 64 20 revisions (and
a330: 74 68 72 6f 75 67 68 20 74 68 61 74 0a 09 23 20 through that..#
a340: 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67 branches and tag
a350: 73 29 20 69 73 20 6b 6e 6f 77 6e 20 77 65 20 63 s) is known we c
a360: 61 6e 20 75 70 64 61 74 65 20 74 68 65 20 61 67 an update the ag
a370: 67 72 65 67 61 74 65 0a 09 23 20 73 79 6d 62 6f gregate..# symbo
a380: 6c 20 73 74 61 74 69 73 74 69 63 73 2e 0a 0a 09 l statistics....
a390: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 foreach root [$s
a3a0: 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c elf LinesOfDevel
a3b0: 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 73 opment] {.. s
a3c0: 65 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f et lod [$root lo
a3d0: 64 5d 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a d]... # Note:
a3e0: 20 49 66 20 74 68 65 20 4c 4f 44 20 69 73 20 74 If the LOD is t
a3f0: 68 65 20 74 72 75 6e 6b 20 74 68 65 20 63 6f 75 he trunk the cou
a400: 6e 74 2a 2c 20 65 74 63 2e 20 6d 65 74 68 6f 64 nt*, etc. method
a410: 73 0a 09 20 20 20 20 23 20 77 69 6c 6c 20 64 6f s.. # will do
a420: 20 6e 6f 74 68 69 6e 67 2c 20 61 73 20 69 74 20 nothing, as it
a430: 69 73 20 61 6c 77 61 79 73 20 70 72 65 73 65 6e is always presen
a440: 74 20 28 63 61 6e 6e 6f 74 20 62 65 0a 09 20 20 t (cannot be..
a450: 20 20 23 20 65 78 63 6c 75 64 65 64 29 2c 20 61 # excluded), a
a460: 6e 64 20 69 73 20 61 6c 77 61 79 73 20 61 20 62 nd is always a b
a470: 72 61 6e 63 68 20 74 6f 6f 2e 0a 0a 09 20 20 20 ranch too....
a480: 20 23 20 4c 69 6e 65 73 20 6f 66 20 64 65 76 65 # Lines of deve
a490: 6c 6f 70 6d 65 6e 74 20 63 6f 75 6e 74 20 61 73 lopment count as
a4a0: 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 68 61 branches and ha
a4b0: 76 65 20 61 20 63 6f 6d 6d 69 74 0a 09 20 20 20 ve a commit..
a4c0: 20 23 20 6f 6e 20 74 68 65 6d 20 28 72 6f 6f 74 # on them (root
a4d0: 29 2e 20 49 66 20 74 68 65 79 20 61 72 65 20 73 ). If they are s
a4e0: 74 69 6c 6c 20 61 74 74 61 63 68 65 64 20 74 6f till attached to
a4f0: 20 61 20 74 72 65 65 20 77 65 0a 09 20 20 20 20 a tree we..
a500: 23 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 74 # have to comput
a510: 65 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 70 e and register p
a520: 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73 2e ossible parents.
a530: 0a 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e ... $lod coun
a540: 74 61 73 62 72 61 6e 63 68 0a 09 20 20 20 20 24 tasbranch.. $
a550: 6c 6f 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69 74 lod countacommit
a560: 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f ... if {[$roo
a570: 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 t hasparentbranc
a580: 68 5d 7d 20 7b 0a 09 09 23 20 4e 6f 74 65 20 6c h]} {...# Note l
a590: 6f 64 20 3d 3d 20 5b 24 72 6f 6f 74 20 70 61 72 od == [$root par
a5a0: 65 6e 74 62 72 61 6e 63 68 5d 0a 09 09 24 6c 6f entbranch]...$lo
a5b0: 64 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 d possibleparent
a5c0: 73 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 s.. } elseif
a5d0: 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d {![$lod istrunk]
a5e0: 20 26 26 20 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 && [$root isond
a5f0: 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b efaultbranch]} {
a600: 0a 09 09 23 20 54 68 69 73 20 69 73 20 74 68 65 ...# This is the
a610: 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 6f root revision o
a620: 66 20 61 20 64 65 74 61 63 68 65 64 20 4e 54 44 f a detached NTD
a630: 42 2e 20 57 65 0a 09 09 23 20 68 61 76 65 20 74 B. We...# have t
a640: 6f 20 6d 61 6e 75 61 6c 6c 79 20 73 65 74 20 74 o manually set t
a650: 68 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 he only possible
a660: 20 70 61 72 65 6e 74 20 66 6f 72 0a 09 09 23 20 parent for...#
a670: 74 68 69 73 20 4c 4f 44 2c 20 74 68 65 20 74 72 this LOD, the tr
a680: 75 6e 6b 20 69 74 73 65 6c 66 2e 0a 0a 09 09 5b unk itself.....[
a690: 24 6c 6f 64 20 73 79 6d 62 6f 6c 5d 20 70 6f 73 $lod symbol] pos
a6a0: 73 69 62 6c 65 70 61 72 65 6e 74 20 24 6d 79 74 sibleparent $myt
a6b0: 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 20 runk.. }...
a6c0: 20 20 23 20 46 6f 72 20 74 68 65 20 72 65 76 69 # For the revi
a6d0: 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 6e sions in the lin
a6e0: 65 20 77 65 20 72 65 67 69 73 74 65 72 20 74 68 e we register th
a6f0: 65 69 72 20 62 72 61 6e 63 68 65 73 0a 09 20 20 eir branches..
a700: 20 20 23 20 61 6e 64 20 74 61 67 73 20 61 73 20 # and tags as
a710: 62 6c 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 65 blockers for the
a720: 20 6c 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 65 lod, and update
a730: 20 74 68 65 20 74 79 70 65 0a 09 20 20 20 20 23 the type.. #
a740: 20 63 6f 75 6e 74 65 72 73 20 61 73 20 77 65 6c counters as wel
a750: 6c 2e 20 41 73 20 62 72 61 6e 63 68 20 73 79 6d l. As branch sym
a760: 62 6f 6c 73 20 77 69 74 68 6f 75 74 20 63 6f 6d bols without com
a770: 6d 69 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 74 mits on.. # t
a780: 68 65 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 74 hem are not list
a790: 65 64 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 64 ed as lines of d
a7a0: 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 68 evelopment, we h
a7b0: 61 76 65 20 74 6f 0a 09 20 20 20 20 23 20 63 6f ave to.. # co
a7c0: 75 6e 74 20 74 68 65 6d 20 68 65 72 65 20 61 73 unt them here as
a7d0: 20 77 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e 20 well, as plain
a7e0: 62 72 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 73 branches. At las
a7f0: 74 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 65 t we.. # have
a800: 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20 to compute and
a810: 72 65 67 69 73 74 65 72 20 74 68 65 20 70 6f 73 register the pos
a820: 73 69 62 6c 65 20 70 61 72 65 6e 74 73 20 6f 66 sible parents of
a830: 20 74 68 65 0a 09 20 20 20 20 23 20 74 61 67 73 the.. # tags
a840: 2c 20 69 6e 20 63 61 73 65 20 74 68 65 79 20 61 , in case they a
a850: 72 65 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 74 re later convert
a860: 65 64 20 61 73 20 62 72 61 6e 63 68 65 73 2e 0a ed as branches..
a870: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f .. while {$ro
a880: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 6f ot ne ""} {...fo
a890: 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72 reach branch [$r
a8a0: 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a oot branches] {.
a8b0: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b .. $lod block
a8c0: 65 64 62 79 20 24 62 72 61 6e 63 68 0a 09 09 20 edby $branch...
a8d0: 20 20 20 24 62 72 61 6e 63 68 20 70 6f 73 73 69 $branch possi
a8e0: 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20 bleparents...
a8f0: 20 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 if {[$branch ha
a900: 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 schild]} continu
a910: 65 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 e... $branch
a920: 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 09 countasbranch...
a930: 7d 0a 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 }....foreach tag
a940: 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a [$root tags] {.
a950: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b .. $lod block
a960: 65 64 62 79 20 24 74 61 67 0a 09 09 20 20 20 20 edby $tag...
a970: 24 74 61 67 20 70 6f 73 73 69 62 6c 65 70 61 72 $tag possiblepar
a980: 65 6e 74 73 0a 09 09 20 20 20 20 24 74 61 67 20 ents... $tag
a990: 63 6f 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a 0a countastag...}..
a9a0: 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f ..set root [$roo
a9b0: 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a t child].. }.
a9c0: 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 .}...return.
a9d0: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ##
a9e0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
a9f0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############.
aa00: 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 ## Configurat
aa10: 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 ion.. pragma
aa20: 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 -hastypeinfo
aa30: 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 no ; # no type
aa40: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 introspection.
aa50: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 pragma -hasinf
aa60: 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 o no ; #
aa70: 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f no object intro
aa80: 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 spection. pra
aa90: 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68 gma -hastypemeth
aaa0: 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65 ods no ; # type
aab0: 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74 is not relevant
aac0: 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 ... # # ## ##
aad0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
aae0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d #############.}
aaf0: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c ..namespace eval
ab00: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
ab10: 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20 mport::cvs {.
ab20: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 namespace expor
ab30: 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 73 t file. names
ab40: 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 7b pace eval file {
ab50: 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 72 ..# Import not r
ab60: 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 79 equired, already
ab70: 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 61 a child namespa
ab80: 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 65 ce...# namespace
ab90: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo
aba0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
abb0: 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 20 s::file::rev..#
abc0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
abd0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
abe0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 mport::cvs::file
abf0: 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 65 ::sym..namespace
ac00: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f import ::vc::to
ac10: 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 ols::misc::*..na
ac20: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
ac30: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 :vc::tools::trou
ac40: 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 ble..namespace i
ac50: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c mport ::vc::tool
ac60: 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 63 s::log..namespac
ac70: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
ac80: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
ac90: 76 73 3a 3a 62 6c 6f 62 73 74 6f 72 65 0a 09 6e vs::blobstore..n
aca0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
acb0: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im
acc0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 port::cvs::state
acd0: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f ..namespace impo
ace0: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a rt ::vc::fossil:
acf0: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e :import::cvs::in
ad00: 74 65 67 72 69 74 79 0a 09 6e 61 6d 65 73 70 61 tegrity..namespa
ad10: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
ad20: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
ad30: 63 76 73 3a 3a 67 74 63 6f 72 65 0a 20 20 20 20 cvs::gtcore.
ad40: 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 }.}..# # ## ###
ad50: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
ad60: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 ############ ###
ad70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
ad80: 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 ##.## Ready..pac
ad90: 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a kage provide vc:
ada0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
adb0: 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a 72 :cvs::file 1.0.r
adc0: 65 74 75 72 6e 0a eturn.