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 23 20 4e 6f 74 65 3a 20 57 65 20 id]..# Note: We
1d80: 6b 65 65 70 20 73 65 74 74 65 78 74 20 6f 6e 20 keep settext on
1d90: 66 69 6c 65 3a 3a 72 65 76 20 66 6f 72 20 74 68 file::rev for th
1da0: 65 20 68 61 73 74 65 78 74 20 71 75 65 72 69 65 e hastext querie
1db0: 73 0a 09 23 20 75 73 65 64 20 62 79 20 73 65 76 s..# used by sev
1dc0: 65 72 61 6c 20 63 68 65 63 6b 73 2e 0a 09 24 72 eral checks...$r
1dd0: 65 76 20 73 65 74 74 65 78 74 20 24 74 65 78 74 ev settext $text
1de0: 72 61 6e 67 65 0a 09 24 72 65 76 20 73 65 74 6c range..$rev setl
1df0: 6f 64 20 20 24 6c 6f 64 0a 0a 09 24 6d 79 62 6c od $lod...$mybl
1e00: 6f 62 20 65 78 74 65 6e 64 20 24 72 65 76 6e 72 ob extend $revnr
1e10: 20 24 74 65 78 74 72 61 6e 67 65 0a 0a 09 23 20 $textrange...#
1e20: 49 66 20 74 68 69 73 20 69 73 20 72 65 76 69 73 If this is revis
1e30: 69 6f 6e 20 31 2e 31 2c 20 77 65 20 68 61 76 65 ion 1.1, we have
1e40: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 to determine wh
1e50: 65 74 68 65 72 20 74 68 65 0a 09 23 20 66 69 6c ether the..# fil
1e60: 65 20 73 65 65 6d 73 20 74 6f 20 68 61 76 65 20 e seems to have
1e70: 62 65 65 6e 20 63 72 65 61 74 65 64 20 74 68 72 been created thr
1e80: 6f 75 67 68 20 27 63 76 73 20 61 64 64 27 20 69 ough 'cvs add' i
1e90: 6e 73 74 65 61 64 20 6f 66 0a 09 23 20 27 63 76 nstead of..# 'cv
1ea0: 73 20 69 6d 70 6f 72 74 27 2e 20 54 68 69 73 20 s import'. This
1eb0: 63 61 6e 20 62 65 20 64 6f 6e 65 20 62 79 20 6c can be done by l
1ec0: 6f 6f 6b 69 6e 67 20 61 74 20 74 68 65 20 75 6e ooking at the un
1ed0: 2d 0a 09 23 20 61 64 75 6c 74 65 72 61 74 65 64 -..# adulterated
1ee0: 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 2c commit message,
1ef0: 20 61 73 20 43 56 53 20 75 73 65 73 20 61 20 68 as CVS uses a h
1f00: 61 72 64 77 69 72 65 64 20 6d 61 67 69 63 0a 09 ardwired magic..
1f10: 23 20 6d 65 73 73 61 67 65 20 66 6f 72 20 74 68 # message for th
1f20: 65 20 6c 61 74 74 65 72 2c 20 69 2e 65 2e 20 22 e latter, i.e. "
1f30: 49 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f 6e Initial revision
1f40: 5c 6e 22 2c 20 6e 6f 0a 09 23 20 70 65 72 69 6f \n", no..# perio
1f50: 64 2e 20 20 28 54 68 69 73 20 66 61 63 74 20 61 d. (This fact a
1f60: 6c 73 6f 20 68 65 6c 70 73 20 75 73 20 77 68 65 lso helps us whe
1f70: 6e 20 74 68 65 20 74 69 6d 65 20 63 6f 6d 65 73 n the time comes
1f80: 20 74 6f 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 to..# determine
1f90: 20 77 68 65 74 68 65 72 20 74 68 69 73 20 66 69 whether this fi
1fa0: 6c 65 20 6d 69 67 68 74 20 68 61 76 65 20 68 61 le might have ha
1fb0: 64 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e d a default bran
1fc0: 63 68 0a 09 23 20 69 6e 20 74 68 65 20 70 61 73 ch..# in the pas
1fd0: 74 2e 29 0a 0a 09 69 66 20 7b 24 72 65 76 6e 72 t.)...if {$revnr
1fe0: 20 65 71 20 22 31 2e 31 22 7d 20 7b 0a 09 20 20 eq "1.1"} {..
1ff0: 20 20 73 65 74 20 6d 79 69 6d 70 6f 72 74 65 64 set myimported
2000: 20 5b 65 78 70 72 20 7b 24 63 6f 6d 6d 69 74 6d [expr {$commitm
2010: 73 67 20 65 71 20 22 49 6e 69 74 69 61 6c 20 72 sg eq "Initial r
2020: 65 76 69 73 69 6f 6e 5c 6e 22 7d 5d 0a 09 7d 0a evision\n"}]..}.
2030: 0a 09 23 20 48 65 72 65 20 77 65 20 61 6c 73 6f ..# Here we also
2040: 20 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74 keep track of t
2050: 68 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 he order in whic
2060: 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 0a h the revisions.
2070: 09 23 20 77 65 72 65 20 61 64 64 65 64 20 74 6f .# were added to
2080: 20 74 68 65 20 66 69 6c 65 2e 0a 0a 09 6c 61 70 the file....lap
2090: 70 65 6e 64 20 6d 79 72 65 76 69 73 69 6f 6e 73 pend myrevisions
20a0: 20 24 72 65 76 0a 09 72 65 74 75 72 6e 0a 20 20 $rev..return.
20b0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
20c0: 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 43 6f 6d done {} {..# Com
20d0: 70 6c 65 74 65 20 74 68 65 20 72 65 76 69 73 69 plete the revisi
20e0: 6f 6e 73 2c 20 62 72 61 6e 63 68 65 73 2c 20 61 ons, branches, a
20f0: 6e 64 20 74 61 67 73 2e 20 54 68 69 73 20 69 6e nd tags. This in
2100: 63 6c 75 64 65 73 0a 09 23 20 6c 6f 6f 6b 69 6e cludes..# lookin
2110: 67 20 66 6f 72 20 61 20 6e 6f 6e 2d 74 72 75 6e g for a non-trun
2120: 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 k default branch
2130: 2c 20 6d 61 72 6b 69 6e 67 20 69 74 73 20 6d 65 , marking its me
2140: 6d 62 65 72 73 0a 09 23 20 61 6e 64 20 6c 69 6e mbers..# and lin
2150: 6b 69 6e 67 20 74 68 65 6d 20 69 6e 74 6f 20 74 king them into t
2160: 68 65 20 74 72 75 6e 6b 2c 20 70 6f 73 73 69 62 he trunk, possib
2170: 6c 79 20 65 78 63 6c 75 64 69 6e 67 0a 09 23 20 ly excluding..#
2180: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 61 74 61 2c 20 non-trunk data,
2190: 61 6e 64 20 63 6f 6c 6c 65 63 74 69 6e 67 20 61 and collecting a
21a0: 67 67 72 65 67 61 74 65 20 73 79 6d 62 6f 6c 20 ggregate symbol
21b0: 73 74 61 74 69 73 74 69 63 73 2e 0a 0a 09 24 73 statistics....$s
21c0: 65 6c 66 20 44 65 74 65 72 6d 69 6e 65 52 65 76 elf DetermineRev
21d0: 69 73 69 6f 6e 4f 70 65 72 61 74 69 6f 6e 73 0a isionOperations.
21e0: 09 24 73 65 6c 66 20 44 65 74 65 72 6d 69 6e 65 .$self Determine
21f0: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 LinesOfDevelopme
2200: 6e 74 0a 09 24 73 65 6c 66 20 48 61 6e 64 6c 65 nt..$self Handle
2210: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 NonTrunkDefaultB
2220: 72 61 6e 63 68 0a 09 24 73 65 6c 66 20 52 65 6d ranch..$self Rem
2230: 6f 76 65 49 72 72 65 6c 65 76 61 6e 74 44 65 6c oveIrrelevantDel
2240: 65 74 69 6f 6e 73 0a 09 24 73 65 6c 66 20 52 65 etions..$self Re
2250: 6d 6f 76 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 moveInitialBranc
2260: 68 44 65 6c 65 74 69 6f 6e 73 0a 0a 09 69 66 20 hDeletions...if
2270: 7b 5b 24 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 {[$myproject tru
2280: 6e 6b 6f 6e 6c 79 5d 7d 20 7b 0a 09 20 20 20 20 nkonly]} {..
2290: 24 73 65 6c 66 20 45 78 63 6c 75 64 65 4e 6f 6e $self ExcludeNon
22a0: 54 72 75 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e TrunkInformation
22b0: 0a 09 7d 0a 0a 09 24 73 65 6c 66 20 41 67 67 72 ..}...$self Aggr
22c0: 65 67 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 0a egateSymbolData.
22d0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
22e0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ##
22f0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
2300: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 ##########. #
2310: 23 20 50 61 73 73 20 58 49 49 20 28 49 6d 70 6f # Pass XII (Impo
2320: 72 74 29 2e 0a 0a 20 20 20 20 6d 65 74 68 6f 64 rt)... method
2330: 20 70 75 73 68 74 6f 20 7b 72 65 70 6f 73 69 74 pushto {reposit
2340: 6f 72 79 7d 20 7b 0a 09 73 65 74 20 77 73 20 5b ory} {..set ws [
2350: 24 72 65 70 6f 73 69 74 6f 72 79 20 77 6f 72 6b $repository work
2360: 73 70 61 63 65 5d 0a 09 73 74 72 75 63 74 3a 3a space]..struct::
2370: 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 24 73 65 list assign [$se
2380: 6c 66 20 45 78 70 61 6e 64 20 24 77 73 5d 20 66 lf Expand $ws] f
2390: 69 6c 65 6d 61 70 20 72 65 76 6d 61 70 0a 09 23 ilemap revmap..#
23a0: 20 66 69 6c 65 6d 61 70 20 3d 20 64 69 63 74 20 filemap = dict
23b0: 28 70 61 74 68 20 2d 3e 20 75 75 69 64 29 0a 09 (path -> uuid)..
23c0: 23 20 72 65 76 6d 61 70 20 20 3d 20 64 69 63 74 # revmap = dict
23d0: 20 28 70 61 74 68 20 2d 3e 20 72 69 64 29 0a 0a (path -> rid)..
23e0: 09 61 72 72 61 79 20 73 65 74 20 69 64 6d 61 70 .array set idmap
23f0: 20 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 69 6d [$repository im
2400: 70 6f 72 74 66 69 6c 65 73 20 24 66 69 6c 65 6d portfiles $filem
2410: 61 70 5d 0a 0a 09 23 20 57 69 70 65 20 77 6f 72 ap]...# Wipe wor
2420: 6b 73 70 61 63 65 20 63 6c 65 61 6e 20 6f 66 20 kspace clean of
2430: 74 68 65 20 69 6d 70 6f 72 74 65 64 20 66 69 6c the imported fil
2440: 65 73 2e 0a 09 66 6f 72 65 61 63 68 20 78 20 5b es...foreach x [
2450: 67 6c 6f 62 20 2d 64 69 72 65 63 74 6f 72 79 20 glob -directory
2460: 24 77 73 20 72 2a 5d 20 7b 20 3a 3a 66 69 6c 65 $ws r*] { ::file
2470: 20 64 65 6c 65 74 65 20 24 78 20 7d 0a 0a 09 66 delete $x }...f
2480: 6f 72 65 61 63 68 20 7b 70 61 74 68 20 72 69 64 oreach {path rid
2490: 7d 20 24 72 65 76 6d 61 70 20 7b 0a 09 20 20 20 } $revmap {..
24a0: 20 73 65 74 20 75 75 69 64 20 24 69 64 6d 61 70 set uuid $idmap
24b0: 28 24 70 61 74 68 29 0a 09 20 20 20 20 73 74 61 ($path).. sta
24c0: 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 52 te run {...INSER
24d0: 54 20 49 4e 54 4f 20 72 65 76 75 75 69 64 20 28 T INTO revuuid (
24e0: 72 69 64 2c 20 20 75 75 69 64 29 0a 09 09 56 41 rid, uuid)...VA
24f0: 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20 20 LUES
2500: 20 20 28 24 72 69 64 2c 20 24 75 75 69 64 29 0a ($rid, $uuid).
2510: 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 . }..}..retur
2520: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
2530: 68 6f 64 20 45 78 70 61 6e 64 20 7b 64 69 72 7d hod Expand {dir}
2540: 20 7b 0a 09 73 65 74 20 65 78 20 5b 73 74 72 75 {..set ex [stru
2550: 63 74 3a 3a 67 72 61 70 68 20 65 78 5d 20 3b 20 ct::graph ex] ;
2560: 23 20 45 78 70 61 6e 73 69 6f 6e 20 67 72 61 70 # Expansion grap
2570: 68 2e 0a 09 73 65 74 20 7a 70 20 5b 73 74 72 75 h...set zp [stru
2580: 63 74 3a 3a 67 72 61 70 68 20 7a 70 5d 20 3b 20 ct::graph zp] ;
2590: 23 20 5a 69 70 2f 49 6d 70 6f 72 74 20 67 72 61 # Zip/Import gra
25a0: 70 68 2e 0a 0a 09 63 6c 6f 73 65 20 5b 6f 70 65 ph....close [ope
25b0: 6e 20 24 64 69 72 2f 72 5f 5f 65 6d 70 74 79 5f n $dir/r__empty_
25c0: 5f 20 77 5d 3b 23 20 42 61 73 65 20 66 6f 72 20 _ w];# Base for
25d0: 64 65 74 61 63 68 65 64 20 72 6f 6f 74 73 20 6f detached roots o
25e0: 6e 20 62 72 61 6e 63 68 65 73 2e 0a 0a 09 23 20 n branches....#
25f0: 50 68 61 73 65 20 49 3a 20 50 75 6c 6c 20 62 6c Phase I: Pull bl
2600: 6f 62 73 20 61 6e 64 20 72 65 66 65 72 65 6e 63 obs and referenc
2610: 65 64 20 72 65 76 69 73 69 6f 6e 73 20 66 72 6f ed revisions fro
2620: 6d 20 74 68 65 20 73 74 61 74 65 0a 09 23 20 20 m the state..#
2630: 20 20 20 20 20 20 20 20 61 6e 64 20 66 69 6c 6c and fill
2640: 20 74 68 65 20 67 72 61 70 68 73 20 77 69 74 68 the graphs with
2650: 20 74 68 65 6d 2e 2e 2e 0a 0a 09 23 20 4e 6f 74 them......# Not
2660: 65 3a 20 57 65 20 75 73 65 20 74 68 65 20 62 6c e: We use the bl
2670: 6f 62 73 20 66 6f 72 20 65 78 70 61 6e 73 69 6f obs for expansio
2680: 6e 20 62 65 63 61 75 73 65 20 77 65 20 6e 65 65 n because we nee
2690: 64 20 74 68 65 6d 0a 09 23 20 20 20 20 20 20 20 d them..#
26a0: 61 6c 6c 2c 20 65 76 65 6e 20 74 68 6f 73 65 20 all, even those
26b0: 77 69 74 68 6f 75 74 20 72 65 76 69 73 69 6f 6e without revision
26c0: 2c 20 66 6f 72 20 62 6f 74 68 20 70 72 6f 70 65 , for both prope
26d0: 72 0a 09 23 20 20 20 20 20 20 20 6f 72 64 65 72 r..# order
26e0: 69 6e 67 20 61 6e 64 20 65 78 61 63 74 20 70 61 ing and exact pa
26f0: 74 63 68 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e tch application.
2700: 0a 0a 09 73 65 74 20 65 61 72 63 73 20 20 20 7b ...set earcs {
2710: 7d 20 3b 20 23 20 41 72 63 73 20 66 6f 72 20 65 } ; # Arcs for e
2720: 78 70 61 6e 73 69 6f 6e 20 67 72 61 70 68 0a 09 xpansion graph..
2730: 73 65 74 20 7a 61 72 63 73 20 20 20 7b 7d 20 3b set zarcs {} ;
2740: 20 23 20 41 72 63 73 20 66 6f 72 20 7a 69 70 20 # Arcs for zip
2750: 67 72 61 70 68 0a 09 73 65 74 20 72 65 76 6d 61 graph..set revma
2760: 70 20 20 7b 7d 20 3b 20 23 20 70 61 74 68 20 2d p {} ; # path -
2770: 3e 20 72 69 64 20 6d 61 70 20 74 6f 20 6c 61 74 > rid map to lat
2780: 65 72 20 6d 65 72 67 65 20 75 75 69 64 20 69 6e er merge uuid in
2790: 66 6f 72 6d 61 74 69 6f 6e 0a 0a 09 66 6f 72 65 formation...fore
27a0: 61 63 68 20 7b 72 69 64 20 72 65 76 6e 72 20 70 ach {rid revnr p
27b0: 61 72 65 6e 74 20 63 68 69 6c 64 20 63 6f 66 66 arent child coff
27c0: 20 63 6c 65 6e 20 63 69 64 20 63 70 61 72 65 6e clen cid cparen
27d0: 74 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a t} [state run {.
27e0: 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e 72 69 . SELECT B.ri
27f0: 64 2c 20 52 2e 72 65 76 2c 20 52 2e 70 61 72 65 d, R.rev, R.pare
2800: 6e 74 2c 20 52 2e 63 68 69 6c 64 2c 20 42 2e 63 nt, R.child, B.c
2810: 6f 66 66 2c 20 42 2e 63 6c 65 6e 2c 20 42 2e 62 off, B.clen, B.b
2820: 69 64 2c 20 42 2e 70 69 64 0a 09 20 20 20 20 46 id, B.pid.. F
2830: 52 4f 4d 20 20 20 20 20 20 20 20 20 20 20 20 62 ROM b
2840: 6c 6f 62 20 42 0a 09 20 20 20 20 4c 45 46 54 20 lob B.. LEFT
2850: 4f 55 54 45 52 20 4a 4f 49 4e 20 72 65 76 69 73 OUTER JOIN revis
2860: 69 6f 6e 20 52 0a 09 20 20 20 20 4f 4e 20 20 20 ion R.. ON
2870: 20 20 20 20 20 20 20 20 20 20 20 42 2e 72 69 64 B.rid
2880: 20 3d 20 52 2e 72 69 64 0a 09 20 20 20 20 57 48 = R.rid.. WH
2890: 45 52 45 20 20 42 2e 66 69 64 20 3d 20 24 6d 79 ERE B.fid = $my
28a0: 69 64 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 23 20 id..}] {.. #
28b0: 4d 61 69 6e 20 64 61 74 61 20 61 72 65 20 62 6c Main data are bl
28c0: 6f 62 73 2c 20 6d 6f 73 74 20 77 69 6c 6c 20 68 obs, most will h
28d0: 61 76 65 20 72 65 76 69 73 69 6f 6e 73 2c 20 62 ave revisions, b
28e0: 75 74 20 6e 6f 74 0a 09 20 20 20 20 23 20 61 6c ut not.. # al
28f0: 6c 2e 20 54 68 65 20 65 78 70 61 6e 73 69 6f 6e l. The expansion
2900: 20 67 72 61 70 68 20 69 73 20 62 6c 6f 62 20 62 graph is blob b
2910: 61 73 65 64 2c 20 77 68 65 72 65 61 73 20 74 68 ased, whereas th
2920: 65 0a 09 20 20 20 20 23 20 72 65 63 6f 6d 70 72 e.. # recompr
2930: 65 73 73 69 6f 6e 20 67 72 61 70 68 20 69 73 20 ession graph is
2940: 72 65 76 69 73 69 6f 6e 20 62 61 73 65 64 2e 0a revision based..
2950: 0a 09 20 20 20 20 69 66 20 7b 24 72 65 76 6e 72 .. if {$revnr
2960: 20 6e 65 20 22 22 7d 20 7b 0a 09 09 23 20 42 6c ne ""} {...# Bl
2970: 6f 62 20 68 61 73 20 72 65 76 69 73 69 6f 6e 2c ob has revision,
2980: 20 65 78 74 65 6e 64 20 72 65 63 6f 6d 70 72 65 extend recompre
2990: 73 73 69 6f 6e 20 67 72 61 70 68 2e 0a 0a 09 09 ssion graph.....
29a0: 6c 61 70 70 65 6e 64 20 72 65 76 6d 61 70 20 72 lappend revmap r
29b0: 24 72 65 76 6e 72 20 24 72 69 64 0a 0a 09 09 24 $revnr $rid....$
29c0: 7a 70 20 6e 6f 64 65 20 69 6e 73 65 72 74 20 24 zp node insert $
29d0: 72 69 64 0a 09 09 24 7a 70 20 6e 6f 64 65 20 73 rid...$zp node s
29e0: 65 74 20 20 20 20 24 72 69 64 20 72 65 76 6e 72 et $rid revnr
29f0: 20 24 72 65 76 6e 72 0a 09 09 24 7a 70 20 6e 6f $revnr...$zp no
2a00: 64 65 20 73 65 74 20 20 20 20 24 72 69 64 20 6c de set $rid l
2a10: 61 62 65 6c 20 3c 24 72 65 76 6e 72 3e 0a 0a 09 abel <$revnr>...
2a20: 09 69 66 20 7b 24 63 68 69 6c 64 20 6e 65 20 22 .if {$child ne "
2a30: 22 7d 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 "} {... lappe
2a40: 6e 64 20 7a 61 72 63 73 20 24 63 68 69 6c 64 20 nd zarcs $child
2a50: 24 72 69 64 0a 09 09 7d 0a 09 20 20 20 20 7d 20 $rid...}.. }
2a60: 65 6c 73 65 20 7b 0a 09 09 23 20 57 65 20 66 61 else {...# We fa
2a70: 6b 65 20 61 20 72 65 76 6e 72 20 66 6f 72 20 74 ke a revnr for t
2a80: 68 65 20 62 6c 6f 62 73 20 77 68 69 63 68 20 68 he blobs which h
2a90: 61 76 65 20 6e 6f 0a 09 09 23 20 72 65 76 69 73 ave no...# revis
2aa0: 69 6f 6e 2c 20 66 6f 72 20 75 73 65 20 69 6e 20 ion, for use in
2ab0: 74 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 the expansion gr
2ac0: 61 70 68 2e 0a 09 09 73 65 74 20 72 65 76 6e 72 aph....set revnr
2ad0: 20 67 68 6f 73 74 24 63 69 64 0a 09 20 20 20 20 ghost$cid..
2ae0: 7d 0a 0a 09 20 20 20 20 23 20 4e 6f 77 20 74 68 }... # Now th
2af0: 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 61 70 e expansion grap
2b00: 68 2e 0a 0a 09 20 20 20 20 24 65 78 20 6e 6f 64 h.... $ex nod
2b10: 65 20 69 6e 73 65 72 74 20 24 63 69 64 0a 09 20 e insert $cid..
2b20: 20 20 20 24 65 78 20 6e 6f 64 65 20 73 65 74 20 $ex node set
2b30: 20 20 20 24 63 69 64 20 74 65 78 74 20 20 5b 6c $cid text [l
2b40: 69 73 74 20 24 63 6f 66 66 20 24 63 6c 65 6e 5d ist $coff $clen]
2b50: 0a 09 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 .. $ex node s
2b60: 65 74 20 20 20 20 24 63 69 64 20 72 65 76 6e 72 et $cid revnr
2b70: 20 24 72 65 76 6e 72 0a 09 20 20 20 20 24 65 78 $revnr.. $ex
2b80: 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 63 69 node set $ci
2b90: 64 20 6c 61 62 65 6c 20 3c 24 72 65 76 6e 72 3e d label <$revnr>
2ba0: 0a 0a 09 20 20 20 20 69 66 20 7b 24 63 70 61 72 ... if {$cpar
2bb0: 65 6e 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 23 ent ne ""} {...#
2bc0: 20 54 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 61 The expansion a
2bd0: 72 63 73 20 67 6f 20 66 72 6f 6d 20 62 61 73 65 rcs go from base
2be0: 6c 69 6e 65 20 74 6f 20 64 65 6c 74 61 0a 09 09 line to delta...
2bf0: 23 20 64 65 73 63 65 6e 64 61 6e 74 2c 20 62 61 # descendant, ba
2c00: 73 65 64 20 6f 6e 20 74 68 65 20 62 6c 6f 62 20 sed on the blob
2c10: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 09 09 6c information....l
2c20: 61 70 70 65 6e 64 20 65 61 72 63 73 20 24 63 70 append earcs $cp
2c30: 61 72 65 6e 74 20 24 63 69 64 0a 09 20 20 20 20 arent $cid..
2c40: 7d 0a 09 7d 0a 0a 09 23 20 50 68 61 73 65 20 49 }..}...# Phase I
2c50: 49 3a 20 49 6e 73 65 72 74 20 74 68 65 20 61 63 I: Insert the ac
2c60: 63 75 6d 75 6c 61 74 65 64 20 64 65 70 65 6e 64 cumulated depend
2c70: 65 6e 63 69 65 73 0a 0a 09 66 6f 72 65 61 63 68 encies...foreach
2c80: 20 7b 66 72 6f 6d 20 74 6f 7d 20 24 65 61 72 63 {from to} $earc
2c90: 73 20 7b 20 24 65 78 20 61 72 63 20 69 6e 73 65 s { $ex arc inse
2ca0: 72 74 20 24 66 72 6f 6d 20 24 74 6f 20 7d 0a 09 rt $from $to }..
2cb0: 66 6f 72 65 61 63 68 20 7b 66 72 6f 6d 20 74 6f foreach {from to
2cc0: 7d 20 24 7a 61 72 63 73 20 7b 20 24 7a 70 20 61 } $zarcs { $zp a
2cd0: 72 63 20 69 6e 73 65 72 74 20 24 66 72 6f 6d 20 rc insert $from
2ce0: 24 74 6f 20 7d 0a 0a 09 23 20 50 68 61 73 65 20 $to }...# Phase
2cf0: 49 49 49 3a 20 54 72 61 76 65 72 73 65 20 74 68 III: Traverse th
2d00: 65 20 67 72 61 70 68 73 2c 20 65 78 70 61 6e 64 e graphs, expand
2d10: 20 74 68 65 20 66 69 6c 65 2c 20 61 6e 64 0a 09 the file, and..
2d20: 23 20 20 20 20 20 20 20 20 20 20 20 20 67 65 6e # gen
2d30: 65 72 61 74 65 20 69 6d 70 6f 72 74 20 69 6e 73 erate import ins
2d40: 74 72 75 63 74 69 6f 6e 73 2e 0a 0a 09 73 65 74 tructions....set
2d50: 20 61 72 63 68 69 76 65 20 5b 3a 3a 66 69 6c 65 archive [::file
2d60: 20 6a 6f 69 6e 20 5b 24 6d 79 70 72 6f 6a 65 63 join [$myprojec
2d70: 74 20 66 75 6c 6c 70 61 74 68 5d 20 24 6d 79 70 t fullpath] $myp
2d80: 61 74 68 5d 0a 09 73 65 74 20 61 63 20 20 20 20 ath]..set ac
2d90: 20 20 5b 6f 70 65 6e 20 24 61 72 63 68 69 76 65 [open $archive
2da0: 20 72 5d 0a 09 66 63 6f 6e 66 69 67 75 72 65 20 r]..fconfigure
2db0: 24 61 63 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e $ac -translation
2dc0: 20 62 69 6e 61 72 79 0a 0a 09 23 20 46 69 72 73 binary...# Firs
2dd0: 74 20 74 72 61 76 65 72 73 65 20 74 68 65 20 65 t traverse the e
2de0: 78 70 61 6e 73 69 6f 6e 20 67 72 61 70 68 2c 20 xpansion graph,
2df0: 74 68 69 73 20 67 69 76 65 73 20 75 73 20 74 68 this gives us th
2e00: 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 69 e..# revisions i
2e10: 6e 20 74 68 65 20 6f 72 64 65 72 20 77 65 20 68 n the order we h
2e20: 61 76 65 20 74 6f 20 65 78 70 61 6e 64 20 74 68 ave to expand th
2e30: 65 6d 2c 20 77 68 69 63 68 20 77 65 20 64 6f 2e em, which we do.
2e40: 0a 0a 09 73 65 74 20 6d 61 78 20 5b 6c 6c 65 6e ...set max [llen
2e50: 67 74 68 20 5b 24 65 78 20 6e 6f 64 65 73 5d 5d gth [$ex nodes]]
2e60: 0a 09 73 65 74 20 6d 79 69 6d 70 6f 72 74 20 30 ..set myimport 0
2e70: 0a 0a 09 67 74 63 6f 72 65 20 64 61 74 61 63 6d ...gtcore datacm
2e80: 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 d [mymethod Ex
2e90: 70 61 6e 64 44 61 74 61 5d 0a 09 67 74 63 6f 72 pandData]..gtcor
2ea0: 65 20 66 6f 72 6d 61 74 63 6d 64 20 5b 6d 79 6d e formatcmd [mym
2eb0: 65 74 68 6f 64 20 45 78 70 61 6e 64 46 6f 72 6d ethod ExpandForm
2ec0: 61 74 5d 0a 09 67 74 63 6f 72 65 20 73 6f 72 74 at]..gtcore sort
2ed0: 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 cmd [mymethod
2ee0: 45 78 70 61 6e 64 53 6f 72 74 5d 0a 09 67 74 63 ExpandSort]..gtc
2ef0: 6f 72 65 20 73 61 76 65 63 6d 64 20 20 20 5b 6d ore savecmd [m
2f00: 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 31 20 ymethod Expand1
2f10: 24 61 63 20 24 64 69 72 20 24 6d 61 78 5d 0a 0a $ac $dir $max]..
2f20: 09 67 74 63 6f 72 65 20 74 72 61 76 65 72 73 65 .gtcore traverse
2f30: 20 24 65 78 20 7b 45 78 70 61 6e 64 69 6e 67 20 $ex {Expanding
2f40: 72 65 76 69 73 69 6f 6e 73 2e 2e 2e 7d 0a 09 63 revisions...}..c
2f50: 6c 6f 73 65 20 24 61 63 0a 0a 09 23 20 4e 6f 77 lose $ac...# Now
2f60: 20 74 72 61 76 65 72 73 65 20 74 68 65 20 69 6d traverse the im
2f70: 70 6f 72 74 20 67 72 61 70 68 2c 20 74 68 69 73 port graph, this
2f80: 20 62 75 69 6c 64 73 20 74 68 65 20 69 6e 73 74 builds the inst
2f90: 72 75 63 74 69 6f 6e 0a 09 23 20 6d 61 70 20 66 ruction..# map f
2fa0: 6f 72 20 74 68 65 20 66 6f 73 73 69 6c 20 64 65 or the fossil de
2fb0: 6c 74 61 73 2e 0a 0a 09 67 74 63 6f 72 65 20 64 ltas....gtcore d
2fc0: 61 74 61 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 atacmd [mymeth
2fd0: 6f 64 20 45 78 70 61 6e 64 44 61 74 61 5d 0a 09 od ExpandData]..
2fe0: 67 74 63 6f 72 65 20 66 6f 72 6d 61 74 63 6d 64 gtcore formatcmd
2ff0: 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e [mymethod Expan
3000: 64 46 6f 72 6d 61 74 5d 0a 09 67 74 63 6f 72 65 dFormat]..gtcore
3010: 20 73 6f 72 74 63 6d 64 20 20 20 5b 6d 79 6d 65 sortcmd [myme
3020: 74 68 6f 64 20 45 78 70 61 6e 64 53 6f 72 74 5d thod ExpandSort]
3030: 0a 09 67 74 63 6f 72 65 20 73 61 76 65 63 6d 64 ..gtcore savecmd
3040: 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 [mymethod Exp
3050: 61 6e 64 32 5d 0a 0a 09 73 65 74 20 6d 79 69 6d and2]...set myim
3060: 70 6f 72 74 20 7b 7d 0a 09 67 74 63 6f 72 65 20 port {}..gtcore
3070: 74 72 61 76 65 72 73 65 20 24 7a 70 20 7b 47 65 traverse $zp {Ge
3080: 6e 65 72 61 74 69 6e 67 20 72 65 76 69 73 69 6f nerating revisio
3090: 6e 20 6f 72 64 65 72 20 66 6f 72 20 69 6d 70 6f n order for impo
30a0: 72 74 2e 2e 2e 7d 0a 09 73 65 74 20 66 69 6c 65 rt...}..set file
30b0: 6d 61 70 20 24 6d 79 69 6d 70 6f 72 74 0a 09 75 map $myimport..u
30c0: 6e 73 65 74 20 6d 79 69 6d 70 6f 72 74 0a 0a 09 nset myimport...
30d0: 23 20 41 6e 64 20 62 61 63 6b 20 74 6f 20 69 6d # And back to im
30e0: 70 6f 72 74 20 63 6f 6e 74 72 6f 6c 0a 0a 09 24 port control...$
30f0: 65 78 20 64 65 73 74 72 6f 79 0a 09 24 7a 70 20 ex destroy..$zp
3100: 64 65 73 74 72 6f 79 0a 0a 09 72 65 74 75 72 6e destroy...return
3110: 20 5b 6c 69 73 74 20 24 66 69 6c 65 6d 61 70 20 [list $filemap
3120: 24 72 65 76 6d 61 70 5d 0a 20 20 20 20 7d 0a 0a $revmap]. }..
3130: 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e method Expan
3140: 64 44 61 74 61 20 20 20 7b 67 72 61 70 68 20 6e dData {graph n
3150: 6f 64 65 7d 20 7b 20 72 65 74 75 72 6e 20 5b 24 ode} { return [$
3160: 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 graph node get $
3170: 6e 6f 64 65 20 72 65 76 6e 72 5d 20 7d 0a 20 20 node revnr] }.
3180: 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 46 method ExpandF
3190: 6f 72 6d 61 74 20 7b 67 72 61 70 68 20 69 74 65 ormat {graph ite
31a0: 6d 7d 20 7b 20 72 65 74 75 72 6e 20 3c 5b 6c 69 m} { return <[li
31b0: 6e 64 65 78 20 24 69 74 65 6d 20 31 5d 3e 20 7d ndex $item 1]> }
31c0: 20 3b 20 23 20 72 65 76 6e 72 0a 20 20 20 20 6d ; # revnr. m
31d0: 65 74 68 6f 64 20 45 78 70 61 6e 64 53 6f 72 74 ethod ExpandSort
31e0: 20 20 20 7b 67 72 61 70 68 20 63 61 6e 64 69 64 {graph candid
31f0: 61 74 65 73 7d 20 7b 0a 09 23 20 63 61 6e 64 69 ates} {..# candi
3200: 64 61 74 65 73 20 3d 20 6c 69 73 74 28 69 74 65 dates = list(ite
3210: 6d 29 2c 20 69 74 65 6d 20 3d 20 6c 69 73 74 28 m), item = list(
3220: 6e 6f 64 65 20 72 65 76 6e 72 29 0a 09 23 20 53 node revnr)..# S
3230: 6f 72 74 20 62 79 20 6e 6f 64 65 20 61 6e 64 20 ort by node and
3240: 72 65 76 6e 72 20 2d 3e 20 54 72 75 6e 6b 20 72 revnr -> Trunk r
3250: 65 76 69 73 69 6f 6e 73 20 63 6f 6d 65 20 66 69 evisions come fi
3260: 72 73 74 2e 0a 09 72 65 74 75 72 6e 20 5b 6c 73 rst...return [ls
3270: 6f 72 74 20 2d 69 6e 64 65 78 20 31 20 2d 64 69 ort -index 1 -di
3280: 63 74 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 ct [lsort -index
3290: 20 30 20 2d 64 69 63 74 20 24 63 61 6e 64 69 64 0 -dict $candid
32a0: 61 74 65 73 5d 5d 0a 20 20 20 20 7d 0a 20 20 20 ates]]. }.
32b0: 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 31 20 method Expand1
32c0: 7b 63 68 61 6e 20 64 69 72 20 6d 61 78 20 67 72 {chan dir max gr
32d0: 61 70 68 20 6e 6f 64 65 7d 20 7b 0a 09 6c 6f 67 aph node} {..log
32e0: 20 70 72 6f 67 72 65 73 73 20 33 20 66 69 6c 65 progress 3 file
32f0: 20 24 6d 79 69 6d 70 6f 72 74 20 24 6d 61 78 20 $myimport $max
3300: 3b 20 69 6e 63 72 20 6d 79 69 6d 70 6f 72 74 0a ; incr myimport.
3310: 0a 09 73 65 74 20 72 65 76 6e 72 20 20 20 20 20 ..set revnr
3320: 20 20 20 20 20 20 5b 24 67 72 61 70 68 20 6e 6f [$graph no
3330: 64 65 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76 de get $node rev
3340: 6e 72 5d 0a 09 73 65 74 20 66 6e 61 6d 65 20 20 nr]..set fname
3350: 20 20 20 20 20 20 20 20 72 24 72 65 76 6e 72 0a r$revnr.
3360: 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 .struct::list as
3370: 73 69 67 6e 20 5b 24 67 72 61 70 68 20 6e 6f 64 sign [$graph nod
3380: 65 20 67 65 74 20 24 6e 6f 64 65 20 74 65 78 74 e get $node text
3390: 5d 20 6f 66 66 73 65 74 20 6c 65 6e 67 74 68 0a ] offset length.
33a0: 0a 09 69 66 20 7b 24 6c 65 6e 67 74 68 20 3c 20 ..if {$length <
33b0: 30 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 64 61 0} {.. set da
33c0: 74 61 20 22 22 0a 09 7d 20 65 6c 73 65 20 7b 0a ta ""..} else {.
33d0: 09 20 20 20 20 73 65 65 6b 20 24 63 68 61 6e 20 . seek $chan
33e0: 24 6f 66 66 73 65 74 20 73 74 61 72 74 0a 09 20 $offset start..
33f0: 20 20 20 73 65 74 20 64 61 74 61 20 5b 73 74 72 set data [str
3400: 69 6e 67 20 6d 61 70 20 7b 40 40 20 40 7d 20 5b ing map {@@ @} [
3410: 72 65 61 64 20 24 63 68 61 6e 20 24 6c 65 6e 67 read $chan $leng
3420: 74 68 5d 5d 0a 09 7d 0a 0a 09 69 66 20 7b 21 5b th]]..}...if {![
3430: 24 67 72 61 70 68 20 6e 6f 64 65 20 6b 65 79 65 $graph node keye
3440: 78 69 73 74 73 20 24 6e 6f 64 65 20 5f 5f 62 61 xists $node __ba
3450: 73 65 5f 5f 5d 7d 20 7b 0a 09 20 20 20 20 23 20 se__]} {.. #
3460: 46 75 6c 6c 20 74 65 78 74 20 6e 6f 64 65 2e 20 Full text node.
3470: 47 65 74 20 74 68 65 20 64 61 74 61 2c 20 64 65 Get the data, de
3480: 63 6f 64 65 20 69 74 2c 20 61 6e 64 20 73 61 76 code it, and sav
3490: 65 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 e.... log wri
34a0: 74 65 20 38 20 66 69 6c 65 20 7b 45 78 70 61 6e te 8 file {Expan
34b0: 64 69 6e 67 20 3c 24 72 65 76 6e 72 3e 2c 20 66 ding <$revnr>, f
34c0: 75 6c 6c 20 74 65 78 74 7d 0a 0a 09 20 20 20 20 ull text}...
34d0: 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74 65 46 fileutil::writeF
34e0: 69 6c 65 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e ile -translation
34f0: 20 62 69 6e 61 72 79 20 24 64 69 72 2f 24 66 6e binary $dir/$fn
3500: 61 6d 65 20 24 64 61 74 61 0a 09 7d 20 65 6c 73 ame $data..} els
3510: 65 20 7b 0a 09 20 20 20 20 23 20 44 65 6c 74 61 e {.. # Delta
3520: 20 6e 6f 64 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 node. __base__
3530: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 is the name of t
3540: 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 he file containi
3550: 6e 67 0a 09 20 20 20 20 23 20 74 68 65 20 62 61 ng.. # the ba
3560: 73 65 6c 69 6e 65 2e 20 54 68 65 20 70 61 74 63 seline. The patc
3570: 68 20 69 73 20 61 74 20 74 68 65 20 73 70 65 63 h is at the spec
3580: 69 66 69 65 64 20 6c 6f 63 61 74 69 6f 6e 20 6f ified location o
3590: 66 0a 09 20 20 20 20 23 20 74 68 65 20 61 72 63 f.. # the arc
35a0: 68 69 76 65 20 66 69 6c 65 2e 0a 0a 09 20 20 20 hive file....
35b0: 20 73 65 74 20 66 62 61 73 65 20 5b 24 67 72 61 set fbase [$gra
35c0: 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 ph node get $nod
35d0: 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09 20 20 20 e __base__]..
35e0: 20 6c 6f 67 20 77 72 69 74 65 20 38 20 66 69 6c log write 8 fil
35f0: 65 20 7b 45 78 70 61 6e 64 69 6e 67 20 3c 24 72 e {Expanding <$r
3600: 65 76 6e 72 3e 2c 20 69 73 20 64 65 6c 74 61 20 evnr>, is delta
3610: 6f 66 20 3c 24 66 62 61 73 65 3e 7d 0a 0a 09 20 of <$fbase>}...
3620: 20 20 20 73 65 74 20 62 61 73 65 20 5b 66 69 6c set base [fil
3630: 65 75 74 69 6c 3a 3a 63 61 74 20 2d 74 72 61 6e eutil::cat -tran
3640: 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 slation binary $
3650: 64 69 72 2f 24 66 62 61 73 65 5d 0a 0a 09 20 20 dir/$fbase]...
3660: 20 20 23 20 57 72 69 74 69 6e 67 20 74 68 65 20 # Writing the
3670: 70 61 74 63 68 20 74 6f 20 64 69 73 6b 20 69 73 patch to disk is
3680: 20 6a 75 73 74 20 66 6f 72 20 62 65 74 74 65 72 just for better
3690: 0a 09 20 20 20 20 23 20 64 65 62 75 67 67 69 6e .. # debuggin
36a0: 67 2e 20 49 74 20 69 73 20 6e 6f 74 20 75 73 65 g. It is not use
36b0: 64 20 6f 74 68 65 72 77 69 73 65 2e 0a 09 20 20 d otherwise...
36c0: 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74 fileutil::writ
36d0: 65 46 69 6c 65 20 24 64 69 72 2f 72 70 61 74 63 eFile $dir/rpatc
36e0: 68 20 24 64 61 74 61 0a 09 20 20 20 20 66 69 6c h $data.. fil
36f0: 65 75 74 69 6c 3a 3a 77 72 69 74 65 46 69 6c 65 eutil::writeFile
3700: 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 -translation bi
3710: 6e 61 72 79 20 24 64 69 72 2f 24 66 6e 61 6d 65 nary $dir/$fname
3720: 20 5c 0a 09 09 5b 41 70 70 6c 79 20 24 62 61 73 \...[Apply $bas
3730: 65 20 24 64 61 74 61 5d 0a 09 7d 0a 0a 09 23 20 e $data]..}...#
3740: 50 6f 73 74 20 74 6f 20 61 6c 6c 20 73 75 63 63 Post to all succ
3750: 65 73 73 6f 72 73 20 74 68 61 74 20 74 68 65 20 essors that the
3760: 6a 75 73 74 20 67 65 6e 65 72 61 74 65 64 20 66 just generated f
3770: 69 6c 65 20 69 73 20 74 68 65 69 72 0a 09 23 20 ile is their..#
3780: 62 61 73 65 6c 69 6e 65 2e 0a 0a 09 66 6f 72 65 baseline....fore
3790: 61 63 68 20 6f 75 74 20 5b 24 67 72 61 70 68 20 ach out [$graph
37a0: 6e 6f 64 65 73 20 2d 6f 75 74 20 24 6e 6f 64 65 nodes -out $node
37b0: 5d 20 7b 0a 09 20 20 20 20 24 67 72 61 70 68 20 ] {.. $graph
37c0: 6e 6f 64 65 20 73 65 74 20 24 6f 75 74 20 5f 5f node set $out __
37d0: 62 61 73 65 5f 5f 20 24 66 6e 61 6d 65 0a 09 7d base__ $fname..}
37e0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
37f0: 20 20 20 20 70 72 6f 63 20 41 70 70 6c 79 20 7b proc Apply {
3800: 62 61 73 65 20 64 65 6c 74 61 7d 20 7b 0a 09 23 base delta} {..#
3810: 20 62 61 73 65 20 20 3d 20 62 61 73 65 20 74 65 base = base te
3820: 78 74 2e 0a 09 23 20 64 65 6c 74 61 20 3d 20 64 xt...# delta = d
3830: 65 6c 74 61 20 69 6e 20 72 63 73 20 66 6f 72 6d elta in rcs form
3840: 61 74 2e 0a 09 23 0a 09 23 20 42 6f 74 68 20 73 at...#..# Both s
3850: 74 72 69 6e 67 73 20 61 72 65 20 75 6e 65 6e 63 trings are unenc
3860: 6f 64 65 64 2c 20 69 2e 65 2e 20 74 68 69 6e 67 oded, i.e. thing
3870: 73 20 6c 69 6b 65 20 40 40 2c 20 65 74 63 2e 20 s like @@, etc.
3880: 68 61 76 65 0a 09 23 20 61 6c 72 65 61 64 79 20 have..# already
3890: 62 65 65 6e 20 72 65 70 6c 61 63 65 64 20 77 69 been replaced wi
38a0: 74 68 20 74 68 65 69 72 20 70 72 6f 70 65 72 20 th their proper
38b0: 63 68 61 72 61 63 74 65 72 73 2e 0a 09 23 0a 09 characters...#..
38c0: 23 20 52 65 74 75 72 6e 20 76 61 6c 75 65 20 69 # Return value i
38d0: 73 20 74 68 65 20 70 61 74 63 68 65 64 20 74 65 s the patched te
38e0: 78 74 2e 0a 0a 09 73 65 74 20 62 61 73 65 20 5b xt....set base [
38f0: 73 70 6c 69 74 20 24 62 61 73 65 20 5c 6e 5d 0a split $base \n].
3900: 09 73 65 74 20 62 6c 65 6e 20 5b 6c 6c 65 6e 67 .set blen [lleng
3910: 74 68 20 24 62 61 73 65 5d 0a 09 73 65 74 20 6f th $base]..set o
3920: 6f 66 66 20 30 0a 09 73 65 74 20 72 65 73 20 22 off 0..set res "
3930: 22 0a 0a 09 73 65 74 20 6c 69 6e 65 73 20 20 5b "...set lines [
3940: 73 70 6c 69 74 20 24 64 65 6c 74 61 20 5c 6e 5d split $delta \n]
3950: 0a 09 73 65 74 20 6e 6c 69 6e 65 73 20 5b 6c 6c ..set nlines [ll
3960: 65 6e 67 74 68 20 24 6c 69 6e 65 73 5d 0a 0a 09 ength $lines]...
3970: 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c log write 11 fil
3980: 65 20 7b 42 61 73 65 20 20 6c 69 6e 65 73 20 3d e {Base lines =
3990: 20 24 62 6c 65 6e 7d 0a 09 6c 6f 67 20 77 72 69 $blen}..log wri
39a0: 74 65 20 31 31 20 66 69 6c 65 20 7b 44 65 6c 74 te 11 file {Delt
39b0: 61 20 6c 69 6e 65 73 20 3d 20 24 6e 6c 69 6e 65 a lines = $nline
39c0: 73 7d 0a 0a 09 66 6f 72 20 7b 73 65 74 20 69 20 s}...for {set i
39d0: 30 7d 20 7b 24 69 20 3c 20 24 6e 6c 69 6e 65 73 0} {$i < $nlines
39e0: 7d 20 7b 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 } {} {.. log
39f0: 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 write 11 file {
3a00: 20 20 20 40 20 24 69 20 3d 20 5b 6c 69 6e 64 65 @ $i = [linde
3a10: 78 20 24 6c 69 6e 65 73 20 24 69 5d 7d 0a 09 20 x $lines $i]}..
3a20: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 log write 11
3a30: 66 69 6c 65 20 7b 20 6f 6f 66 66 20 24 6f 6f 66 file { ooff $oof
3a40: 66 7d 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b 72 f}... if {![r
3a50: 65 67 65 78 70 20 7b 5e 28 5b 61 64 5d 29 28 5c egexp {^([ad])(\
3a60: 64 2b 29 5c 73 28 5c 64 2b 29 24 7d 20 5b 6c 69 d+)\s(\d+)$} [li
3a70: 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69 5d 20 ndex $lines $i]
3a80: 2d 3e 20 63 6d 64 20 73 6c 20 63 6e 5d 7d 20 7b -> cmd sl cn]} {
3a90: 0a 09 09 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 ...trouble inter
3aa0: 6e 61 6c 20 22 42 61 64 20 65 64 20 63 6f 6d 6d nal "Bad ed comm
3ab0: 61 6e 64 20 27 5b 6c 69 6e 64 65 78 20 24 6c 69 and '[lindex $li
3ac0: 6e 65 73 20 24 69 5d 27 22 0a 09 20 20 20 20 7d nes $i]'".. }
3ad0: 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 ... log write
3ae0: 20 31 31 20 66 69 6c 65 20 7b 20 20 63 6d 64 20 11 file { cmd
3af0: 24 63 6d 64 7d 0a 09 20 20 20 20 6c 6f 67 20 77 $cmd}.. log w
3b00: 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 20 rite 11 file {
3b10: 20 73 6c 20 24 73 6c 7d 0a 09 20 20 20 20 6c 6f sl $sl}.. lo
3b20: 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 g write 11 file
3b30: 7b 20 20 20 63 6e 20 24 63 6e 7d 0a 0a 09 20 20 { cn $cn}...
3b40: 20 20 69 6e 63 72 20 69 0a 09 20 20 20 20 73 65 incr i.. se
3b50: 74 20 65 6c 20 5b 65 78 70 72 20 7b 24 73 6c 20 t el [expr {$sl
3b60: 2b 20 24 63 6e 7d 5d 0a 0a 09 20 20 20 20 6c 6f + $cn}]... lo
3b70: 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 g write 11 file
3b80: 7b 20 20 20 65 6c 20 24 65 6c 7d 0a 0a 09 20 20 { el $el}...
3b90: 20 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 switch -exact
3ba0: 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 64 20 7b 0a -- $cmd {...d {.
3bb0: 09 09 20 20 20 20 69 6e 63 72 20 73 6c 20 2d 31 .. incr sl -1
3bc0: 0a 09 09 20 20 20 20 69 6e 63 72 20 65 6c 20 2d ... incr el -
3bd0: 31 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c 20 1... if {$sl
3be0: 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72 6f 75 62 < $ooff} { troub
3bf0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c le internal {Del
3c00: 65 74 69 6f 6e 20 62 65 66 6f 72 65 20 6c 61 73 etion before las
3c10: 74 20 65 64 69 74 7d 20 7d 0a 09 09 20 20 20 20 t edit} }...
3c20: 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c 65 6e 7d if {$sl > $blen}
3c30: 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 { trouble inter
3c40: 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e 20 70 61 nal {Deletion pa
3c50: 73 74 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 09 st file end} }..
3c60: 09 20 20 20 20 69 66 20 7b 24 65 6c 20 3e 20 24 . if {$el > $
3c70: 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 blen} { trouble
3c80: 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 internal {Deleti
3c90: 6f 6e 20 62 65 79 6f 6e 64 20 66 69 6c 65 20 65 on beyond file e
3ca0: 6e 64 7d 20 7d 0a 09 09 20 20 20 20 66 6f 72 65 nd} }... fore
3cb0: 61 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 62 ach x [lrange $b
3cc0: 61 73 65 20 24 6f 6f 66 66 20 24 73 6c 5d 20 7b ase $ooff $sl] {
3cd0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 78 20 lappend res $x
3ce0: 7d 0a 09 09 20 20 20 20 73 65 74 20 20 6f 6f 66 }... set oof
3cf0: 66 20 24 65 6c 0a 09 09 7d 0a 09 09 61 20 7b 0a f $el...}...a {.
3d00: 09 09 20 20 20 20 69 66 20 7b 24 73 6c 20 3c 20 .. if {$sl <
3d10: 24 6f 6f 66 66 7d 20 7b 20 74 72 6f 75 62 6c 65 $ooff} { trouble
3d20: 20 69 6e 74 65 72 6e 61 6c 20 7b 49 6e 73 65 72 internal {Inser
3d30: 74 20 62 65 66 6f 72 65 20 6c 61 73 74 20 65 64 t before last ed
3d40: 69 74 7d 20 7d 0a 09 09 20 20 20 20 69 66 20 7b it} }... if {
3d50: 24 73 6c 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 $sl > $blen} { t
3d60: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 rouble internal
3d70: 7b 49 6e 73 65 72 74 20 70 61 73 74 20 66 69 6c {Insert past fil
3d80: 65 20 65 6e 64 7d 20 7d 0a 0a 09 09 20 20 20 20 e end} }....
3d90: 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 foreach x [lrang
3da0: 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 24 73 e $base $ooff $s
3db0: 6c 5d 20 20 20 20 20 20 20 20 20 20 20 20 20 7b l] {
3dc0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 78 20 lappend res $x
3dd0: 7d 0a 09 09 20 20 20 20 66 6f 72 65 61 63 68 20 }... foreach
3de0: 78 20 5b 6c 72 61 6e 67 65 20 24 6c 69 6e 65 73 x [lrange $lines
3df0: 20 24 69 20 5b 65 78 70 72 20 7b 24 69 20 2b 20 $i [expr {$i +
3e00: 24 63 6e 7d 5d 5d 20 7b 20 6c 61 70 70 65 6e 64 $cn}]] { lappend
3e10: 20 72 65 73 20 24 78 20 7d 0a 09 09 20 20 20 20 res $x }...
3e20: 73 65 74 20 6f 6f 66 66 20 24 73 6c 0a 09 09 20 set ooff $sl...
3e30: 20 20 20 69 6e 63 72 20 69 20 24 63 6e 0a 09 09 incr i $cn...
3e40: 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 66 6f 72 }.. }..}..for
3e50: 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 each x [lrange $
3e60: 62 61 73 65 20 24 6f 6f 66 66 20 65 6e 64 5d 20 base $ooff end]
3e70: 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 78 { lappend res $x
3e80: 20 7d 0a 09 72 65 74 75 72 6e 20 5b 6a 6f 69 6e }..return [join
3e90: 20 24 72 65 73 20 5c 6e 5d 0a 20 20 20 20 7d 0a $res \n]. }.
3ea0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 . method Expa
3eb0: 6e 64 32 20 7b 67 72 61 70 68 20 6e 6f 64 65 7d nd2 {graph node}
3ec0: 20 7b 0a 09 73 65 74 20 72 65 76 6e 72 20 5b 24 {..set revnr [$
3ed0: 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 graph node get $
3ee0: 6e 6f 64 65 20 72 65 76 6e 72 5d 0a 0a 09 23 20 node revnr]...#
3ef0: 46 69 72 73 74 20 69 6d 70 6f 72 74 20 74 68 65 First import the
3f00: 20 66 69 6c 65 2e 0a 09 6c 61 70 70 65 6e 64 20 file...lappend
3f10: 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 73 74 20 41 myimport [list A
3f20: 20 72 24 72 65 76 6e 72 20 7b 7d 5d 0a 0a 09 69 r$revnr {}]...i
3f30: 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 f {[$graph node
3f40: 6b 65 79 65 78 69 73 74 73 20 24 6e 6f 64 65 20 keyexists $node
3f50: 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a 09 20 20 __base__]} {..
3f60: 20 20 23 20 44 65 6c 74 61 20 6e 6f 64 65 2e 20 # Delta node.
3f70: 5f 5f 62 61 73 65 5f 5f 20 69 73 20 74 68 65 20 __base__ is the
3f80: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65 name of the file
3f90: 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 09 20 20 20 containing..
3fa0: 20 23 20 74 68 65 20 62 61 73 65 6c 69 6e 65 2e # the baseline.
3fb0: 20 47 65 6e 65 72 61 74 65 20 69 6e 73 74 72 75 Generate instru
3fc0: 63 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 20 74 68 ction to make th
3fd0: 65 20 64 65 6c 74 61 20 61 73 0a 09 20 20 20 20 e delta as..
3fe0: 23 20 77 65 6c 6c 2e 0a 0a 09 20 20 20 20 73 65 # well.... se
3ff0: 74 20 66 62 61 73 65 20 5b 24 67 72 61 70 68 20 t fbase [$graph
4000: 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20 5f node get $node _
4010: 5f 62 61 73 65 5f 5f 5d 0a 09 20 20 20 20 6c 61 _base__].. la
4020: 70 70 65 6e 64 20 6d 79 69 6d 70 6f 72 74 20 5b ppend myimport [
4030: 6c 69 73 74 20 44 20 72 24 72 65 76 6e 72 20 72 list D r$revnr r
4040: 24 66 62 61 73 65 5d 0a 09 7d 0a 0a 09 23 20 50 $fbase]..}...# P
4050: 6f 73 74 20 74 6f 20 61 6c 6c 20 73 75 63 63 65 ost to all succe
4060: 73 73 6f 72 73 20 74 68 61 74 20 74 68 65 20 6a ssors that the j
4070: 75 73 74 20 67 65 6e 65 72 61 74 65 64 20 66 69 ust generated fi
4080: 6c 65 20 69 73 20 74 68 65 69 72 0a 09 23 20 62 le is their..# b
4090: 61 73 65 6c 69 6e 65 2e 20 45 78 63 65 70 74 69 aseline. Excepti
40a0: 6f 6e 3a 20 54 68 6f 73 65 20 77 68 69 63 68 20 on: Those which
40b0: 61 76 65 20 61 6c 72 65 61 64 79 20 61 20 62 61 ave already a ba
40c0: 73 65 6c 69 6e 65 20 73 65 74 2e 0a 09 23 20 54 seline set...# T
40d0: 6f 67 65 74 68 65 72 20 77 69 74 68 20 74 68 65 ogether with the
40e0: 20 73 6f 72 74 69 6e 67 20 6f 66 20 74 72 75 6e sorting of trun
40f0: 6b 20 72 65 76 69 73 69 6f 6e 73 20 66 69 72 73 k revisions firs
4100: 74 20 74 68 65 20 74 72 75 6e 6b 0a 09 23 20 73 t the trunk..# s
4110: 68 6f 75 6c 64 20 6f 6e 65 20 75 6e 69 6e 74 65 hould one uninte
4120: 72 75 70 74 65 64 20 6c 69 6e 65 2c 20 77 69 74 rupted line, wit
4130: 68 20 62 72 61 6e 63 68 20 72 6f 6f 74 73 20 5f h branch roots _
4140: 6e 6f 74 5f 20 64 65 6c 74 61 0a 09 23 20 63 6f not_ delta..# co
4150: 6d 70 72 65 73 73 65 64 20 70 65 72 20 74 68 65 mpressed per the
4160: 69 72 20 62 72 61 6e 63 68 65 73 2e 0a 0a 09 66 ir branches....f
4170: 6f 72 65 61 63 68 20 6f 75 74 20 5b 24 67 72 61 oreach out [$gra
4180: 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74 20 24 6e ph nodes -out $n
4190: 6f 64 65 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b ode] {.. if {
41a0: 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 6b 65 79 [$graph node key
41b0: 65 78 69 73 74 73 20 24 6f 75 74 20 5f 5f 62 61 exists $out __ba
41c0: 73 65 5f 5f 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a se__]} continue.
41d0: 09 20 20 20 20 24 67 72 61 70 68 20 6e 6f 64 65 . $graph node
41e0: 20 73 65 74 20 24 6f 75 74 20 5f 5f 62 61 73 65 set $out __base
41f0: 5f 5f 20 24 72 65 76 6e 72 0a 09 7d 0a 09 72 65 __ $revnr..}..re
4200: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
4210: 76 61 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 variable myimpor
4220: 74 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 t.. # # ## ##
4230: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
4240: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############.
4250: 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20 20 20 ## State..
4260: 20 76 61 72 69 61 62 6c 65 20 6d 79 69 64 20 20 variable myid
4270: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b {} ;
4280: 20 23 20 46 69 6c 65 20 69 64 20 69 6e 20 74 68 # File id in th
4290: 65 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 61 e persistent sta
42a0: 74 65 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 te.. variable
42b0: 20 6d 79 70 61 74 68 20 20 20 20 20 20 20 20 20 mypath
42c0: 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 68 20 6f {} ; # Path o
42d0: 66 20 74 68 65 20 66 69 6c 65 27 73 20 72 63 73 f the file's rcs
42e0: 20 61 72 63 68 69 76 65 2e 0a 20 20 20 20 76 61 archive.. va
42f0: 72 69 61 62 6c 65 20 6d 79 75 73 72 70 61 74 68 riable myusrpath
4300: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 {} ; #
4310: 50 61 74 68 20 6f 66 20 74 68 65 20 66 69 6c 65 Path of the file
4320: 20 61 73 20 73 65 65 6e 20 62 79 20 75 73 65 72 as seen by user
4330: 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 s.. variable
4340: 6d 79 65 78 65 63 75 74 61 62 6c 65 20 20 20 20 myexecutable
4350: 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 0 ; # Boolean
4360: 20 66 6c 61 67 20 27 66 69 6c 65 20 65 78 65 63 flag 'file exec
4370: 75 74 61 62 6c 65 27 2e 0a 20 20 20 20 76 61 72 utable'.. var
4380: 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65 63 74 20 iable myproject
4390: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 {} ; # R
43a0: 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 eference to the
43b0: 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63 74 0a 09 project object..
43c0: 09 09 09 20 20 20 20 23 20 74 68 65 20 66 69 6c ... # the fil
43d0: 65 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 e belongs to..
43e0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65 76 variable myrev
43f0: 20 2d 61 72 72 61 79 20 20 20 20 20 20 7b 7d 20 -array {}
4400: 3b 20 23 20 4d 61 70 73 20 72 65 76 69 73 69 6f ; # Maps revisio
4410: 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 0a n number to the.
4420: 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63 69 .... # associ
4430: 61 74 65 64 20 72 65 76 69 73 69 6f 6e 20 6f 62 ated revision ob
4440: 6a 65 63 74 2e 0a 20 20 20 20 76 61 72 69 61 62 ject.. variab
4450: 6c 65 20 6d 79 72 65 76 69 73 69 6f 6e 73 20 20 le myrevisions
4460: 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 61 6d 65 {} ; # Same
4470: 20 61 73 20 6d 79 72 65 76 2c 20 62 75 74 20 61 as myrev, but a
4480: 20 6c 69 73 74 2c 0a 09 09 09 09 20 20 20 20 23 list,..... #
4490: 20 67 69 76 69 6e 67 20 75 73 20 74 68 65 20 6f giving us the o
44a0: 72 64 65 72 20 6f 66 0a 09 09 09 09 20 20 20 20 rder of.....
44b0: 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a 20 20 20 # revisions..
44c0: 20 76 61 72 69 61 62 6c 65 20 6d 79 61 69 64 20 variable myaid
44d0: 20 20 20 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b -array {} ;
44e0: 20 23 20 4d 61 70 20 72 65 76 69 73 69 6f 6e 20 # Map revision
44f0: 6e 75 6d 62 65 72 73 20 74 6f 20 74 68 65 20 69 numbers to the i
4500: 64 0a 09 09 09 09 20 20 20 20 23 20 6f 66 20 74 d..... # of t
4510: 68 65 20 61 75 74 68 6f 72 20 77 68 6f 20 63 6f he author who co
4520: 6d 6d 69 74 74 65 64 0a 09 09 09 09 20 20 20 20 mmitted.....
4530: 23 20 69 74 2e 20 54 68 69 73 20 69 73 20 6c 61 # it. This is la
4540: 74 65 72 20 61 67 67 72 65 67 61 74 65 64 0a 09 ter aggregated..
4550: 09 09 09 20 20 20 20 23 20 77 69 74 68 20 63 6f ... # with co
4560: 6d 6d 69 74 20 6d 65 73 73 61 67 65 2c 20 62 72 mmit message, br
4570: 61 6e 63 68 20 6e 61 6d 65 0a 09 09 09 09 20 20 anch name.....
4580: 20 20 23 20 61 6e 64 20 70 72 6f 6a 65 63 74 20 # and project
4590: 69 64 20 66 6f 72 20 61 20 6d 65 74 61 20 69 64 id for a meta id
45a0: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
45b0: 79 68 65 61 64 72 65 76 6e 72 20 20 20 20 20 20 yheadrevnr
45c0: 20 7b 7d 20 3b 20 23 20 48 65 61 64 20 72 65 76 {} ; # Head rev
45d0: 69 73 69 6f 6e 20 28 72 65 76 69 73 69 6f 6e 20 ision (revision
45e0: 6e 75 6d 62 65 72 29 0a 20 20 20 20 76 61 72 69 number). vari
45f0: 61 62 6c 65 20 6d 79 70 72 69 6e 63 69 70 61 6c able myprincipal
4600: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 72 {} ; # Pr
4610: 69 6e 63 69 70 61 6c 20 62 72 61 6e 63 68 20 28 incipal branch (
4620: 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 29 2e 0a branch number)..
4630: 09 09 09 09 20 20 20 20 23 20 43 6f 6e 74 72 61 .... # Contra
4640: 72 79 20 74 6f 20 74 68 65 20 6e 61 6d 65 20 74 ry to the name t
4650: 68 69 73 20 69 73 20 74 68 65 0a 09 09 09 09 20 his is the.....
4660: 20 20 20 23 20 64 65 66 61 75 6c 74 20 62 72 61 # default bra
4670: 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 61 62 6c nch.. variabl
4680: 65 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 e mydependencies
4690: 20 20 20 20 7b 7d 20 3b 20 23 20 44 69 63 74 69 {} ; # Dicti
46a0: 6f 6e 61 72 79 20 70 61 72 65 6e 74 20 2d 3e 20 onary parent ->
46b0: 63 68 69 6c 64 2c 0a 09 09 09 09 20 20 20 20 23 child,..... #
46c0: 20 72 65 63 6f 72 64 73 20 70 72 69 6d 61 72 79 records primary
46d0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 0a 20 dependencies..
46e0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 6d variable myim
46f0: 70 6f 72 74 65 64 20 20 20 20 20 20 20 20 30 20 ported 0
4700: 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 ; # Boolean fla
4710: 67 2e 20 53 65 74 20 69 66 20 61 6e 64 20 6f 6e g. Set if and on
4720: 6c 79 20 69 66 0a 09 09 09 09 20 20 20 20 23 20 ly if..... #
4730: 72 65 76 20 31 2e 31 20 6f 66 20 74 68 65 20 66 rev 1.1 of the f
4740: 69 6c 65 20 73 65 65 6d 69 6e 67 6c 79 0a 09 09 ile seemingly...
4750: 09 09 20 20 20 20 23 20 77 61 73 20 69 6d 70 6f .. # was impo
4760: 72 74 65 64 20 69 6e 73 74 65 61 64 20 6f 66 20 rted instead of
4770: 61 64 64 65 64 0a 09 09 09 09 20 20 20 20 23 20 added..... #
4780: 6e 6f 72 6d 61 6c 6c 79 2e 0a 20 20 20 20 76 61 normally.. va
4790: 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74 20 20 20 riable myroot
47a0: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 {} ; #
47b0: 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 Reference to the
47c0: 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 revision object
47d0: 0a 09 09 09 09 20 20 20 20 23 20 68 6f 6c 64 69 ..... # holdi
47e0: 6e 67 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69 ng the root revi
47f0: 73 69 6f 6e 2e 20 20 49 74 73 0a 09 09 09 09 20 sion. Its.....
4800: 20 20 20 23 20 6e 75 6d 62 65 72 20 75 73 75 61 # number usua
4810: 6c 6c 79 20 69 73 20 27 31 2e 31 27 2e 20 43 61 lly is '1.1'. Ca
4820: 6e 20 62 65 0a 09 09 09 09 20 20 20 20 23 20 61 n be..... # a
4830: 20 64 69 66 66 65 72 65 6e 74 20 6e 75 6d 62 65 different numbe
4840: 72 2c 20 62 65 63 61 75 73 65 20 6f 66 0a 09 09 r, because of...
4850: 09 09 20 20 20 20 23 20 67 61 70 73 20 63 72 65 .. # gaps cre
4860: 61 74 65 64 20 76 69 61 20 27 63 76 73 61 64 6d ated via 'cvsadm
4870: 69 6e 20 2d 6f 27 2e 0a 20 20 20 20 76 61 72 69 in -o'.. vari
4880: 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 65 73 20 able mybranches
4890: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 -array {} ; # Ma
48a0: 70 73 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 ps branch number
48b0: 20 74 6f 20 74 68 65 20 73 79 6d 62 6f 6c 0a 09 to the symbol..
48c0: 09 09 09 20 20 20 20 23 20 6f 62 6a 65 63 74 20 ... # object
48d0: 68 61 6e 64 6c 69 6e 67 20 74 68 65 20 62 72 61 handling the bra
48e0: 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 61 62 6c nch.. variabl
48f0: 65 20 6d 79 74 61 67 73 20 20 20 20 20 2d 61 72 e mytags -ar
4900: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 ray {} ; # Maps
4910: 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 revision number
4920: 74 6f 20 74 68 65 20 6c 69 73 74 0a 09 09 09 09 to the list.....
4930: 20 20 20 20 23 20 6f 66 20 73 79 6d 62 6f 6c 20 # of symbol
4940: 6f 62 6a 65 63 74 73 20 66 6f 72 20 74 68 65 20 objects for the
4950: 74 61 67 73 0a 09 09 09 09 20 20 20 20 23 20 61 tags..... # a
4960: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 ssociated with t
4970: 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20 he revision..
4980: 20 76 61 72 69 61 62 6c 65 20 6d 79 73 79 6d 62 variable mysymb
4990: 6f 6c 73 20 20 20 20 20 20 20 20 20 7b 7d 20 3b ols {} ;
49a0: 20 23 20 53 65 74 20 6f 66 20 74 68 65 20 73 79 # Set of the sy
49b0: 6d 62 6f 6c 20 6e 61 6d 65 73 20 66 6f 75 6e 64 mbol names found
49c0: 20 69 6e 0a 09 09 09 09 20 20 20 20 23 20 74 68 in..... # th
49d0: 69 73 20 66 69 6c 65 2e 0a 0a 20 20 20 20 76 61 is file... va
49e0: 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 63 riable mybranchc
49f0: 6e 74 20 30 20 3b 20 23 20 43 6f 75 6e 74 65 72 nt 0 ; # Counter
4a00: 20 66 6f 72 20 62 72 61 6e 63 68 65 73 2c 20 74 for branches, t
4a10: 6f 20 72 65 63 6f 72 64 20 74 68 65 69 72 0a 09 o record their..
4a20: 09 09 20 20 20 20 20 23 20 6f 72 64 65 72 20 6f .. # order o
4a30: 66 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 54 68 f definition. Th
4a40: 69 73 20 61 6c 73 6f 20 64 65 66 69 6e 65 73 0a is also defines.
4a50: 09 09 09 20 20 20 20 20 23 20 74 68 65 69 72 20 ... # their
4a60: 6f 72 64 65 72 20 6f 66 20 63 72 65 61 74 69 6f order of creatio
4a70: 6e 2c 20 77 68 69 63 68 20 69 73 20 74 68 65 0a n, which is the.
4a80: 09 09 09 20 20 20 20 20 23 20 72 65 76 65 72 73 ... # revers
4a90: 65 20 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e 2e e of definition.
4aa0: 20 20 49 2e 65 2e 20 61 20 73 6d 61 6c 6c 65 72 I.e. a smaller
4ab0: 0a 09 09 09 20 20 20 20 20 23 20 6e 75 6d 62 65 .... # numbe
4ac0: 72 20 6d 65 61 6e 73 20 27 44 65 66 69 6e 65 64 r means 'Defined
4ad0: 20 65 61 72 6c 69 65 72 27 2c 20 6d 65 61 6e 73 earlier', means
4ae0: 0a 09 09 09 20 20 20 20 20 23 20 27 43 72 65 61 .... # 'Crea
4af0: 74 65 64 20 6c 61 74 65 72 27 2e 0a 0a 20 20 20 ted later'...
4b00: 20 76 61 72 69 61 62 6c 65 20 6d 79 74 72 75 6e variable mytrun
4b10: 6b 20 7b 7d 20 3b 20 23 20 44 69 72 65 63 74 20 k {} ; # Direct
4b20: 72 65 66 65 72 65 6e 63 65 20 74 6f 20 6d 79 70 reference to myp
4b30: 72 6f 6a 65 63 74 20 2d 3e 20 74 72 75 6e 6b 2e roject -> trunk.
4b40: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
4b50: 72 6f 6f 74 73 20 7b 7d 20 3b 20 23 20 4c 69 73 roots {} ; # Lis
4b60: 74 20 6f 66 20 72 6f 6f 74 73 20 69 6e 20 74 68 t of roots in th
4b70: 65 20 66 6f 72 65 73 74 20 6f 66 0a 09 09 09 20 e forest of....
4b80: 20 23 20 6c 6f 64 27 73 2e 20 4f 62 6a 65 63 74 # lod's. Object
4b90: 20 72 65 66 65 72 65 6e 63 65 73 20 74 6f 20 72 references to r
4ba0: 65 76 69 73 69 6f 6e 73 20 61 6e 64 0a 09 09 09 evisions and....
4bb0: 20 20 23 20 62 72 61 6e 63 68 65 73 2e 20 54 68 # branches. Th
4bc0: 65 20 6c 61 74 74 65 72 20 63 61 6e 20 61 70 70 e latter can app
4bd0: 65 61 72 20 77 68 65 6e 20 74 68 65 79 0a 09 09 ear when they...
4be0: 09 20 20 23 20 61 72 65 20 73 65 76 65 72 65 64 . # are severed
4bf0: 20 66 72 6f 6d 20 74 68 65 69 72 20 70 61 72 65 from their pare
4c00: 6e 74 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c nt... variabl
4c10: 65 20 6d 79 62 6c 6f 62 20 7b 7d 20 3b 20 23 20 e myblob {} ; #
4c20: 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 Reference to the
4c30: 20 6f 62 6a 65 63 74 20 6d 61 6e 61 67 69 6e 67 object managing
4c40: 20 74 68 65 20 62 6c 6f 62 0a 09 09 09 20 23 20 the blob.... #
4c50: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 28 74 65 78 information (tex
4c60: 74 72 61 6e 67 65 20 6f 66 20 72 65 76 69 73 69 trange of revisi
4c70: 6f 6e 73 2c 20 61 6e 64 0a 09 09 09 20 23 20 64 ons, and.... # d
4c80: 65 6c 74 61 20 64 65 70 65 6e 64 65 6e 63 69 65 elta dependencie
4c90: 73 29 20 6f 66 20 74 68 69 73 20 66 69 6c 65 2e s) of this file.
4ca0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 .. # # ## ###
4cb0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
4cc0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 #############.
4cd0: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 ## Internal me
4ce0: 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f thods.. metho
4cf0: 64 20 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f d RecordBranchCo
4d00: 6d 6d 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d mmits {branches}
4d10: 20 7b 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e {..foreach bran
4d20: 63 68 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65 chrevnr $branche
4d30: 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61 s {.. if {[ca
4d40: 74 63 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e tch {...set bran
4d50: 63 68 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 ch [$self Rev2Br
4d60: 61 6e 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e anch $branchrevn
4d70: 72 5d 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 r].. }]} {...
4d80: 73 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c set branch [$sel
4d90: 66 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 f AddUnlabeledBr
4da0: 61 6e 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63 anch [rev 2branc
4db0: 68 6e 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72 hnr $branchrevnr
4dc0: 5d 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 ]].. }...
4dd0: 23 20 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d # Record the com
4de0: 6d 69 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76 mit, just as rev
4df0: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 ision number for
4e00: 0a 09 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f .. # now. Pro
4e10: 63 65 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 cesBranchDepende
4e20: 6e 63 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e ncies will exten
4e30: 64 20 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20 d that ito a..
4e40: 20 20 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63 # proper objec
4e50: 74 20 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20 t reference....
4e60: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 $branch setch
4e70: 69 6c 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68 ildrevnr $branch
4e80: 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e revnr..}..return
4e90: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
4ea0: 6f 64 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72 od Rev2Branch {r
4eb0: 65 76 6e 72 7d 20 7b 0a 20 20 20 20 20 20 20 20 evnr} {.
4ec0: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 integrity assert
4ed0: 20 7b 21 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 {![rev istrunkr
4ee0: 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 45 evnr $revnr]} {E
4ef0: 78 70 65 63 74 65 64 20 61 20 62 72 61 6e 63 68 xpected a branch
4f00: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 revision number
4f10: 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 62 72 61 }..return $mybra
4f20: 6e 63 68 65 73 28 5b 72 65 76 20 32 62 72 61 6e nches([rev 2bran
4f30: 63 68 6e 72 20 24 72 65 76 6e 72 5d 29 0a 20 20 chnr $revnr]).
4f40: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
4f50: 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e AddUnlabeledBran
4f60: 63 68 20 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a ch {branchnr} {.
4f70: 09 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 41 .return [$self A
4f80: 64 64 42 72 61 6e 63 68 20 75 6e 6c 61 62 65 6c ddBranch unlabel
4f90: 65 64 2d 24 62 72 61 6e 63 68 6e 72 20 24 62 72 ed-$branchnr $br
4fa0: 61 6e 63 68 6e 72 5d 0a 20 20 20 20 7d 0a 0a 20 anchnr]. }..
4fb0: 20 20 20 6d 65 74 68 6f 64 20 41 64 64 42 72 61 method AddBra
4fc0: 6e 63 68 20 7b 6e 61 6d 65 20 62 72 61 6e 63 68 nch {name branch
4fd0: 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f nr} {..if {[info
4fe0: 20 65 78 69 73 74 73 20 6d 79 62 72 61 6e 63 68 exists mybranch
4ff0: 65 73 28 24 62 72 61 6e 63 68 6e 72 29 5d 7d 20 es($branchnr)]}
5000: 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 {.. log write
5010: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 1 file "In '$my
5020: 70 61 74 68 27 3a 20 42 72 61 6e 63 68 20 27 24 path': Branch '$
5030: 62 72 61 6e 63 68 6e 72 27 20 6e 61 6d 65 64 20 branchnr' named
5040: 27 5b 24 6d 79 62 72 61 6e 63 68 65 73 28 24 62 '[$mybranches($b
5050: 72 61 6e 63 68 6e 72 29 20 6e 61 6d 65 5d 27 22 ranchnr) name]'"
5060: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
5070: 31 20 66 69 6c 65 20 22 43 61 6e 6e 6f 74 20 68 1 file "Cannot h
5080: 61 76 65 20 73 65 63 6f 6e 64 20 6e 61 6d 65 20 ave second name
5090: 27 24 6e 61 6d 65 27 2c 20 69 67 6e 6f 72 69 6e '$name', ignorin
50a0: 67 20 69 74 22 0a 09 20 20 20 20 72 65 74 75 72 g it".. retur
50b0: 6e 0a 09 7d 0a 09 73 65 74 20 62 72 61 6e 63 68 n..}..set branch
50c0: 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 62 72 61 [sym %AUTO% bra
50d0: 6e 63 68 20 24 62 72 61 6e 63 68 6e 72 20 5b 24 nch $branchnr [$
50e0: 6d 79 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d myproject getsym
50f0: 62 6f 6c 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 bol $name] $self
5100: 5d 0a 09 24 62 72 61 6e 63 68 20 73 65 74 70 6f ]..$branch setpo
5110: 73 69 74 69 6f 6e 20 5b 69 6e 63 72 20 6d 79 62 sition [incr myb
5120: 72 61 6e 63 68 63 6e 74 5d 0a 09 73 65 74 20 6d ranchcnt]..set m
5130: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 ybranches($branc
5140: 68 6e 72 29 20 24 62 72 61 6e 63 68 0a 09 72 65 hnr) $branch..re
5150: 74 75 72 6e 20 24 62 72 61 6e 63 68 0a 20 20 20 turn $branch.
5160: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 }.. method A
5170: 64 64 54 61 67 20 7b 6e 61 6d 65 20 72 65 76 6e ddTag {name revn
5180: 72 7d 20 7b 0a 09 73 65 74 20 74 61 67 20 5b 73 r} {..set tag [s
5190: 79 6d 20 25 41 55 54 4f 25 20 74 61 67 20 24 72 ym %AUTO% tag $r
51a0: 65 76 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 evnr [$myproject
51b0: 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 getsymbol $name
51c0: 5d 20 24 73 65 6c 66 5d 0a 09 6c 61 70 70 65 6e ] $self]..lappen
51d0: 64 20 6d 79 74 61 67 73 28 24 72 65 76 6e 72 29 d mytags($revnr)
51e0: 20 24 74 61 67 0a 09 72 65 74 75 72 6e 20 24 74 $tag..return $t
51f0: 61 67 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 ag. }.. me
5200: 74 68 6f 64 20 52 65 63 6f 72 64 42 61 73 69 63 thod RecordBasic
5210: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 72 65 Dependencies {re
5220: 76 6e 72 20 6e 65 78 74 7d 20 7b 0a 09 23 20 48 vnr next} {..# H
5230: 61 6e 64 6c 65 20 74 68 65 20 72 65 76 69 73 69 andle the revisi
5240: 6f 6e 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e on dependencies.
5250: 20 52 65 63 6f 72 64 20 74 68 65 6d 20 66 6f 72 Record them for
5260: 20 6e 6f 77 2c 20 64 6f 0a 09 23 20 6e 6f 74 68 now, do..# noth
5270: 69 6e 67 20 77 69 74 68 20 74 68 65 6d 20 79 65 ing with them ye
5280: 74 2e 0a 0a 09 23 20 4f 6e 20 74 68 65 20 74 72 t....# On the tr
5290: 75 6e 6b 20 74 68 65 20 27 6e 65 78 74 27 20 66 unk the 'next' f
52a0: 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 ield points to t
52b0: 68 65 20 70 72 65 76 69 6f 75 73 0a 09 23 20 72 he previous..# r
52c0: 65 76 69 73 69 6f 6e 2c 20 69 2e 65 2e 20 74 68 evision, i.e. th
52d0: 65 20 5f 70 61 72 65 6e 74 5f 20 6f 66 20 74 68 e _parent_ of th
52e0: 65 20 63 75 72 72 65 6e 74 20 6f 6e 65 2e 20 45 e current one. E
52f0: 78 61 6d 70 6c 65 3a 0a 09 23 20 31 2e 36 27 73 xample:..# 1.6's
5300: 20 6e 65 78 74 20 69 73 20 31 2e 35 20 28 6d 6f next is 1.5 (mo
5310: 64 75 6c 6f 20 63 76 73 20 61 64 6d 69 6e 20 2d dulo cvs admin -
5320: 6f 29 2e 0a 0a 09 23 20 43 6f 6e 74 72 61 72 69 o)....# Contrari
5330: 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 74 ly on a branch t
5340: 68 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20 he 'next' field
5350: 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 09 23 points to the..#
5360: 20 70 72 69 6d 61 72 79 20 5f 63 68 69 6c 64 5f primary _child_
5370: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 of the current
5380: 72 65 76 69 73 69 6f 6e 2e 20 41 73 20 65 78 61 revision. As exa
5390: 6d 70 6c 65 2c 0a 09 23 20 31 2e 31 2e 33 2e 32 mple,..# 1.1.3.2
53a0: 27 73 20 27 6e 65 78 74 27 20 77 69 6c 6c 20 62 's 'next' will b
53b0: 65 20 31 2e 31 2e 33 2e 33 2e 0a 0a 09 23 20 54 e 1.1.3.3....# T
53c0: 68 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20 he 'next' field
53d0: 61 63 74 75 61 6c 6c 79 20 61 6c 77 61 79 73 20 actually always
53e0: 72 65 66 65 72 73 20 74 6f 20 74 68 65 20 72 65 refers to the re
53f0: 76 69 73 69 6f 6e 0a 09 23 20 63 6f 6e 74 61 69 vision..# contai
5400: 6e 69 6e 67 20 74 68 65 20 64 65 6c 74 61 20 6e ning the delta n
5410: 65 65 64 65 64 20 74 6f 20 72 65 74 72 69 65 76 eeded to retriev
5420: 65 20 74 68 61 74 20 72 65 76 69 73 69 6f 6e 2e e that revision.
5430: 0a 0a 09 23 20 54 68 65 20 64 65 70 65 6e 64 65 ...# The depende
5440: 6e 63 69 65 73 20 6e 65 65 64 65 64 20 68 65 72 ncies needed her
5450: 65 20 61 72 65 20 74 68 65 20 6c 6f 67 69 63 61 e are the logica
5460: 6c 20 73 74 72 75 63 74 75 72 65 2c 0a 09 23 20 l structure,..#
5470: 70 61 72 65 6e 74 2f 63 68 69 6c 64 2c 20 61 6e parent/child, an
5480: 64 20 6e 6f 74 20 74 68 65 20 69 6d 70 6c 65 6d d not the implem
5490: 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 entation depende
54a0: 6e 74 20 64 65 6c 74 61 0a 09 23 20 70 6f 69 6e nt delta..# poin
54b0: 74 65 72 73 2e 0a 0a 09 69 66 20 7b 24 6e 65 78 ters....if {$nex
54c0: 74 20 65 71 20 22 22 7d 20 72 65 74 75 72 6e 0a t eq ""} return.
54d0: 09 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .#
54e0: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65 pare
54f0: 6e 74 20 2d 3e 20 63 68 69 6c 64 0a 09 69 66 20 nt -> child..if
5500: 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 {[rev istrunkrev
5510: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 nr $revnr]} {..
5520: 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 70 lappend mydep
5530: 65 6e 64 65 6e 63 69 65 73 20 24 6e 65 78 74 20 endencies $next
5540: 24 72 65 76 6e 72 0a 09 7d 20 65 6c 73 65 20 7b $revnr..} else {
5550: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 .. lappend my
5560: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65 dependencies $re
5570: 76 6e 72 20 24 6e 65 78 74 0a 09 7d 0a 09 72 65 vnr $next..}..re
5580: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
5590: 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 50 72 method ProcessPr
55a0: 69 6d 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65 imaryDependencie
55b0: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 s {} {..foreach
55c0: 7b 70 61 72 65 6e 74 72 65 76 6e 72 20 63 68 69 {parentrevnr chi
55d0: 6c 64 72 65 76 6e 72 7d 20 24 6d 79 64 65 70 65 ldrevnr} $mydepe
55e0: 6e 64 65 6e 63 69 65 73 20 7b 0a 09 20 20 20 20 ndencies {..
55f0: 73 65 74 20 70 61 72 65 6e 74 20 24 6d 79 72 65 set parent $myre
5600: 76 28 24 70 61 72 65 6e 74 72 65 76 6e 72 29 0a v($parentrevnr).
5610: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 20 . set child
5620: 24 6d 79 72 65 76 28 24 63 68 69 6c 64 72 65 76 $myrev($childrev
5630: 6e 72 29 0a 09 20 20 20 20 24 70 61 72 65 6e 74 nr).. $parent
5640: 20 73 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64 setchild $child
5650: 0a 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 .. $child set
5660: 70 61 72 65 6e 74 20 24 70 61 72 65 6e 74 0a 09 parent $parent..
5670: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
5680: 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 . method Proc
5690: 65 73 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 essBranchDepende
56a0: 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 ncies {} {..fore
56b0: 61 63 68 20 7b 62 72 61 6e 63 68 6e 72 20 62 72 ach {branchnr br
56c0: 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74 anch} [array get
56d0: 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 mybranches] {..
56e0: 20 20 20 20 73 65 74 20 72 65 76 6e 72 20 5b 24 set revnr [$
56f0: 62 72 61 6e 63 68 20 70 61 72 65 6e 74 72 65 76 branch parentrev
5700: 6e 72 5d 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b nr]... if {![
5710: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 info exists myre
5720: 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 v($revnr)]} {...
5730: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 log write 1 file
5740: 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 "In '$mypath':
5750: 54 68 65 20 62 72 61 6e 63 68 20 27 5b 24 62 72 The branch '[$br
5760: 61 6e 63 68 20 6e 61 6d 65 5d 27 20 72 65 66 65 anch name]' refe
5770: 72 65 6e 63 65 73 22 0a 09 09 6c 6f 67 20 77 72 rences"...log wr
5780: 69 74 65 20 31 20 66 69 6c 65 20 22 74 68 65 20 ite 1 file "the
5790: 62 6f 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27 bogus revision '
57a0: 24 72 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c $revnr' and will
57b0: 20 62 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09 be ignored."...
57c0: 24 62 72 61 6e 63 68 20 64 65 73 74 72 6f 79 0a $branch destroy.
57d0: 09 09 75 6e 73 65 74 20 6d 79 62 72 61 6e 63 68 ..unset mybranch
57e0: 65 73 28 24 62 72 61 6e 63 68 6e 72 29 0a 09 20 es($branchnr)..
57f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 } else {...se
5800: 74 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 t rev $myrev($re
5810: 76 6e 72 29 0a 09 09 24 72 65 76 20 61 64 64 62 vnr)...$rev addb
5820: 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09 ranch $branch...
5830: 24 62 72 61 6e 63 68 20 73 65 74 70 61 72 65 6e $branch setparen
5840: 74 20 24 72 65 76 0a 0a 09 09 23 20 49 66 20 72 t $rev....# If r
5850: 65 76 69 73 69 6f 6e 73 20 77 65 72 65 20 63 6f evisions were co
5860: 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 62 mmitted on the b
5870: 72 61 6e 63 68 20 77 65 20 73 74 6f 72 65 20 61 ranch we store a
5880: 0a 09 09 23 20 72 65 66 65 72 65 6e 63 65 20 74 ...# reference t
5890: 6f 20 74 68 65 20 62 72 61 6e 63 68 20 74 68 65 o the branch the
58a0: 72 65 2c 20 61 6e 64 20 66 75 72 74 68 65 72 20 re, and further
58b0: 64 65 63 6c 61 72 65 0a 09 09 23 20 74 68 65 20 declare...# the
58c0: 66 69 72 73 74 20 63 68 69 6c 64 27 73 20 70 61 first child's pa
58d0: 72 65 6e 74 20 74 6f 20 62 65 20 62 72 61 6e 63 rent to be branc
58e0: 68 27 73 20 70 61 72 65 6e 74 2c 20 61 6e 64 0a h's parent, and.
58f0: 09 09 23 20 6c 69 73 74 20 74 68 69 73 20 63 68 ..# list this ch
5900: 69 6c 64 20 69 6e 20 74 68 65 20 70 61 72 65 6e ild in the paren
5910: 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 09 69 t revision.....i
5920: 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 63 f {[$branch hasc
5930: 68 69 6c 64 72 65 76 5d 7d 20 7b 0a 09 09 20 20 hildrev]} {...
5940: 20 20 73 65 74 20 63 68 69 6c 64 72 65 76 6e 72 set childrevnr
5950: 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 72 [$branch childr
5960: 65 76 6e 72 5d 0a 09 09 20 20 20 20 73 65 74 20 evnr]... set
5970: 63 68 69 6c 64 20 24 6d 79 72 65 76 28 24 63 68 child $myrev($ch
5980: 69 6c 64 72 65 76 6e 72 29 0a 09 09 20 20 20 20 ildrevnr)...
5990: 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c 64 $branch setchild
59a0: 20 24 63 68 69 6c 64 0a 0a 09 09 20 20 20 20 24 $child.... $
59b0: 63 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74 62 child setparentb
59c0: 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09 ranch $branch...
59d0: 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 $child setpa
59e0: 72 65 6e 74 20 20 20 20 20 20 20 24 72 65 76 0a rent $rev.
59f0: 09 09 20 20 20 20 24 72 65 76 20 61 64 64 63 68 .. $rev addch
5a00: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 63 68 69 ildonbranch $chi
5a10: 6c 64 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d ld...}.. }..}
5a20: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
5a30: 20 20 20 20 6d 65 74 68 6f 64 20 53 6f 72 74 42 method SortB
5a40: 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a 09 66 6f ranches {} {..fo
5a50: 72 65 61 63 68 20 7b 72 65 76 6e 72 20 72 65 76 reach {revnr rev
5a60: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 72 } [array get myr
5a70: 65 76 5d 20 7b 20 24 72 65 76 20 73 6f 72 74 62 ev] { $rev sortb
5a80: 72 61 6e 63 68 65 73 20 7d 0a 09 72 65 74 75 72 ranches }..retur
5a90: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
5aa0: 68 6f 64 20 50 72 6f 63 65 73 73 54 61 67 44 65 hod ProcessTagDe
5ab0: 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a pendencies {} {.
5ac0: 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 .foreach {revnr
5ad0: 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 taglist} [array
5ae0: 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 get mytags] {..
5af0: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex
5b00: 69 73 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e ists myrev($revn
5b10: 72 29 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 20 5b r)]} {...set n [
5b20: 6c 6c 65 6e 67 74 68 20 24 74 61 67 6c 69 73 74 llength $taglist
5b30: 5d 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 ]...log write 1
5b40: 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 file "In '$mypat
5b50: 68 27 3a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e h': The followin
5b60: 67 20 5b 6e 73 70 20 24 6e 20 74 61 67 5d 20 72 g [nsp $n tag] r
5b70: 65 66 65 72 65 6e 63 65 22 0a 09 09 6c 6f 67 20 eference"...log
5b80: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 74 68 write 1 file "th
5b90: 65 20 62 6f 67 75 73 20 72 65 76 69 73 69 6f 6e e bogus revision
5ba0: 20 27 24 72 65 76 6e 72 27 20 61 6e 64 20 77 69 '$revnr' and wi
5bb0: 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e 22 0a ll be ignored.".
5bc0: 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 ..foreach tag $t
5bd0: 61 67 6c 69 73 74 20 7b 0a 09 09 20 20 20 20 6c aglist {... l
5be0: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 og write 1 file
5bf0: 22 20 20 20 20 5b 24 74 61 67 20 6e 61 6d 65 5d " [$tag name]
5c00: 22 0a 09 09 20 20 20 20 24 74 61 67 20 64 65 73 "... $tag des
5c10: 74 72 6f 79 0a 09 09 7d 0a 09 09 75 6e 73 65 74 troy...}...unset
5c20: 20 6d 79 74 61 67 73 28 24 72 65 76 6e 72 29 0a mytags($revnr).
5c30: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 . } else {...
5c40: 73 65 74 20 72 65 76 20 24 6d 79 72 65 76 28 24 set rev $myrev($
5c50: 72 65 76 6e 72 29 0a 09 09 66 6f 72 65 61 63 68 revnr)...foreach
5c60: 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a tag $taglist {.
5c70: 09 09 20 20 20 20 24 72 65 76 20 61 64 64 74 61 .. $rev addta
5c80: 67 20 20 20 20 24 74 61 67 0a 09 09 20 20 20 20 g $tag...
5c90: 24 74 61 67 20 73 65 74 74 61 67 72 65 76 20 24 $tag settagrev $
5ca0: 72 65 76 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 rev...}.. }..
5cb0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
5cc0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 . method Dete
5cd0: 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 rmineTheRootRevi
5ce0: 73 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 54 68 65 sion {} {..# The
5cf0: 20 72 6f 6f 74 20 69 73 20 74 68 65 20 6f 6e 65 root is the one
5d00: 20 72 65 76 69 73 69 6f 6e 20 77 68 69 63 68 20 revision which
5d10: 68 61 73 20 6e 6f 20 70 61 72 65 6e 74 2e 20 42 has no parent. B
5d20: 79 0a 09 23 20 63 68 65 63 6b 69 6e 67 20 61 6c y..# checking al
5d30: 6c 20 72 65 76 69 73 69 6f 6e 73 20 77 65 20 65 l revisions we e
5d40: 6e 73 75 72 65 20 74 68 61 74 20 77 65 20 63 61 nsure that we ca
5d50: 6e 20 64 65 74 65 63 74 20 61 6e 64 0a 09 23 20 n detect and..#
5d60: 72 65 70 6f 72 74 20 74 68 65 20 63 61 73 65 20 report the case
5d70: 6f 66 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 of multiple root
5d80: 73 2e 20 57 69 74 68 6f 75 74 20 74 68 61 74 20 s. Without that
5d90: 77 65 20 63 6f 75 6c 64 0a 09 23 20 73 69 6d 70 we could..# simp
5da0: 6c 79 20 74 61 6b 65 20 6f 6e 65 20 72 65 76 69 ly take one revi
5db0: 73 69 6f 6e 20 61 6e 64 20 66 6f 6c 6c 6f 77 20 sion and follow
5dc0: 74 68 65 20 70 61 72 65 6e 74 20 6c 69 6e 6b 73 the parent links
5dd0: 20 74 6f 0a 09 23 20 74 68 65 69 72 20 72 6f 6f to..# their roo
5de0: 74 20 28 73 69 63 21 29 2e 0a 0a 09 66 6f 72 65 t (sic!)....fore
5df0: 61 63 68 20 7b 72 65 76 6e 72 20 72 65 76 7d 20 ach {revnr rev}
5e00: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 72 65 76 [array get myrev
5e10: 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 ] {.. if {[$r
5e20: 65 76 20 68 61 73 70 61 72 65 6e 74 5d 7d 20 63 ev hasparent]} c
5e30: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 69 6e 74 ontinue.. int
5e40: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 egrity assert {$
5e50: 6d 79 72 6f 6f 74 20 65 71 20 22 22 7d 20 7b 4d myroot eq ""} {M
5e60: 75 6c 74 69 70 6c 65 20 72 6f 6f 74 20 72 65 76 ultiple root rev
5e70: 69 73 69 6f 6e 73 20 66 6f 75 6e 64 7d 0a 09 20 isions found}..
5e80: 20 20 20 73 65 74 20 6d 79 72 6f 6f 74 20 24 72 set myroot $r
5e90: 65 76 0a 09 7d 0a 0a 09 23 20 49 6e 20 74 68 65 ev..}...# In the
5ea0: 20 66 75 74 75 72 65 20 77 65 20 61 6c 73 6f 20 future we also
5eb0: 6e 65 65 64 20 61 20 6c 69 73 74 2c 20 61 73 20 need a list, as
5ec0: 62 72 61 6e 63 68 65 73 20 63 61 6e 20 62 65 63 branches can bec
5ed0: 6f 6d 65 0a 09 23 20 73 65 76 65 72 65 64 20 66 ome..# severed f
5ee0: 72 6f 6d 20 74 68 65 69 72 20 70 61 72 65 6e 74 rom their parent
5ef0: 2c 20 6d 61 6b 69 6e 67 20 74 68 65 6d 20 74 68 , making them th
5f00: 65 69 72 20 6f 77 6e 20 72 6f 6f 74 2e 0a 09 73 eir own root...s
5f10: 65 74 20 6d 79 72 6f 6f 74 73 20 5b 6c 69 73 74 et myroots [list
5f20: 20 24 6d 79 72 6f 6f 74 5d 0a 09 72 65 74 75 72 $myroot]..retur
5f30: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
5f40: 68 6f 64 20 44 65 74 65 72 6d 69 6e 65 52 65 76 hod DetermineRev
5f50: 69 73 69 6f 6e 4f 70 65 72 61 74 69 6f 6e 73 20 isionOperations
5f60: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 72 65 {} {..foreach re
5f70: 76 20 24 6d 79 72 65 76 69 73 69 6f 6e 73 20 7b v $myrevisions {
5f80: 20 24 72 65 76 20 64 65 74 65 72 6d 69 6e 65 6f $rev determineo
5f90: 70 65 72 61 74 69 6f 6e 20 7d 0a 09 72 65 74 75 peration }..retu
5fa0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
5fb0: 74 68 6f 64 20 44 65 74 65 72 6d 69 6e 65 4c 69 thod DetermineLi
5fc0: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 nesOfDevelopment
5fd0: 20 7b 7d 20 7b 0a 09 23 20 46 6f 72 20 72 65 76 {} {..# For rev
5fe0: 69 73 69 6f 6e 73 20 74 68 69 73 20 68 61 73 20 isions this has
5ff0: 62 65 65 6e 20 64 6f 6e 65 20 61 6c 72 65 61 64 been done alread
6000: 79 2c 20 69 6e 20 27 65 78 74 65 6e 64 27 2e 20 y, in 'extend'.
6010: 4e 6f 77 0a 09 23 20 77 65 20 64 6f 20 74 68 69 Now..# we do thi
6020: 73 20 66 6f 72 20 74 68 65 20 62 72 61 6e 63 68 s for the branch
6030: 65 73 20 61 6e 64 20 74 61 67 73 2e 0a 0a 09 66 es and tags....f
6040: 6f 72 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 oreach {_ branch
6050: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62 } [array get myb
6060: 72 61 6e 63 68 65 73 5d 20 7b 0a 09 20 20 20 20 ranches] {..
6070: 24 62 72 61 6e 63 68 20 73 65 74 6c 6f 64 20 5b $branch setlod [
6080: 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 5b 24 62 $self GetLOD [$b
6090: 72 61 6e 63 68 20 70 61 72 65 6e 74 72 65 76 6e ranch parentrevn
60a0: 72 5d 5d 0a 09 7d 0a 0a 09 66 6f 72 65 61 63 68 r]]..}...foreach
60b0: 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 {_ taglist} [ar
60c0: 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 ray get mytags]
60d0: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 {.. foreach t
60e0: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 ag $taglist {...
60f0: 24 74 61 67 20 73 65 74 6c 6f 64 20 5b 24 73 65 $tag setlod [$se
6100: 6c 66 20 47 65 74 4c 4f 44 20 5b 24 74 61 67 20 lf GetLOD [$tag
6110: 74 61 67 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 tagrevnr]]..
6120: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 }..}..return.
6130: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 47 }.. method G
6140: 65 74 4c 4f 44 20 7b 72 65 76 6e 72 7d 20 7b 0a etLOD {revnr} {.
6150: 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e .if {[rev istrun
6160: 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 krevnr $revnr]}
6170: 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 24 6d {.. return $m
6180: 79 74 72 75 6e 6b 0a 09 7d 20 65 6c 73 65 20 7b ytrunk..} else {
6190: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 5b 24 73 .. return [$s
61a0: 65 6c 66 20 52 65 76 32 42 72 61 6e 63 68 20 24 elf Rev2Branch $
61b0: 72 65 76 6e 72 5d 0a 09 7d 0a 20 20 20 20 7d 0a revnr]..}. }.
61c0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 48 61 6e 64 . method Hand
61d0: 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c leNonTrunkDefaul
61e0: 74 42 72 61 6e 63 68 20 7b 7d 20 7b 0a 09 73 65 tBranch {} {..se
61f0: 74 20 72 65 76 6c 69 73 74 20 5b 24 73 65 6c 66 t revlist [$self
6200: 20 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 NonTrunkDefault
6210: 52 65 76 69 73 69 6f 6e 73 5d 0a 09 69 66 20 7b Revisions]..if {
6220: 21 5b 6c 6c 65 6e 67 74 68 20 24 72 65 76 6c 69 ![llength $revli
6230: 73 74 5d 7d 20 72 65 74 75 72 6e 0a 0a 09 24 73 st]} return...$s
6240: 65 6c 66 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 elf AdjustNonTru
6250: 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 nkDefaultBranch
6260: 24 72 65 76 6c 69 73 74 0a 09 24 73 65 6c 66 20 $revlist..$self
6270: 43 68 65 63 6b 4c 4f 44 73 0a 09 72 65 74 75 72 CheckLODs..retur
6280: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
6290: 68 6f 64 20 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 hod NonTrunkDefa
62a0: 75 6c 74 52 65 76 69 73 69 6f 6e 73 20 7b 7d 20 ultRevisions {}
62b0: 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76 {..# From cvs2sv
62c0: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 n the following
62d0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 77 69 74 explanation (wit
62e0: 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 0a h modifications.
62f0: 09 23 20 66 6f 72 20 6f 75 72 20 61 6c 67 6f 72 .# for our algor
6300: 69 74 68 6d 29 3a 0a 0a 09 23 20 44 65 74 65 72 ithm):...# Deter
6310: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 mine whether the
6320: 72 65 20 61 72 65 20 61 6e 79 20 6e 6f 6e 2d 74 re are any non-t
6330: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 runk default bra
6340: 6e 63 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 nch..# revisions
6350: 2e 0a 0a 09 23 20 49 66 20 61 20 6e 6f 6e 2d 74 ....# If a non-t
6360: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 runk default bra
6370: 6e 63 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65 nch is determine
6380: 64 20 74 6f 20 68 61 76 65 20 65 78 69 73 74 65 d to have existe
6390: 64 2c 0a 09 23 20 72 65 74 75 72 6e 20 61 20 6c d,..# return a l
63a0: 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 73 20 66 ist of objects f
63b0: 6f 72 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 or all revisions
63c0: 20 74 68 61 74 20 77 65 72 65 20 6f 6e 63 65 0a that were once.
63d0: 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 .# non-trunk def
63e0: 61 75 6c 74 20 72 65 76 69 73 69 6f 6e 73 2c 20 ault revisions,
63f0: 69 6e 20 64 65 70 65 6e 64 65 6e 63 79 20 6f 72 in dependency or
6400: 64 65 72 20 28 69 2e 65 2e 20 72 6f 6f 74 0a 09 der (i.e. root..
6410: 23 20 66 69 72 73 74 29 2e 0a 0a 09 23 20 54 68 # first)....# Th
6420: 65 72 65 20 61 72 65 20 74 77 6f 20 63 61 73 65 ere are two case
6430: 73 20 74 6f 20 68 61 6e 64 6c 65 3a 0a 0a 09 23 s to handle:...#
6440: 20 4f 6e 65 20 63 61 73 65 20 69 73 20 73 69 6d One case is sim
6450: 70 6c 65 2e 20 20 54 68 65 20 52 43 53 20 66 69 ple. The RCS fi
6460: 6c 65 20 6c 69 73 74 73 20 61 20 64 65 66 61 75 le lists a defau
6470: 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 65 78 70 lt branch..# exp
6480: 6c 69 63 69 74 6c 79 20 69 6e 20 69 74 73 20 68 licitly in its h
6490: 65 61 64 65 72 2c 20 73 75 63 68 20 61 73 20 27 eader, such as '
64a0: 31 2e 31 2e 31 27 2e 20 20 49 6e 20 74 68 69 73 1.1.1'. In this
64b0: 20 63 61 73 65 2c 20 77 65 0a 09 23 20 6b 6e 6f case, we..# kno
64c0: 77 20 74 68 61 74 20 65 76 65 72 79 20 72 65 76 w that every rev
64d0: 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 76 65 6e ision on the ven
64e0: 64 6f 72 20 62 72 61 6e 63 68 20 69 73 20 74 6f dor branch is to
64f0: 20 62 65 0a 09 23 20 74 72 65 61 74 65 64 20 61 be..# treated a
6500: 73 20 68 65 61 64 20 6f 66 20 74 72 75 6e 6b 20 s head of trunk
6510: 61 74 20 74 68 61 74 20 70 6f 69 6e 74 20 69 6e at that point in
6520: 20 74 69 6d 65 2e 0a 0a 09 23 20 42 75 74 20 74 time....# But t
6530: 68 65 72 65 27 73 20 61 6c 73 6f 20 61 20 64 65 here's also a de
6540: 67 65 6e 65 72 61 74 65 20 63 61 73 65 2e 20 20 generate case.
6550: 54 68 65 20 52 43 53 20 66 69 6c 65 20 64 6f 65 The RCS file doe
6560: 73 20 6e 6f 74 0a 09 23 20 63 75 72 72 65 6e 74 s not..# current
6570: 6c 79 20 68 61 76 65 20 61 20 64 65 66 61 75 6c ly have a defaul
6580: 74 20 62 72 61 6e 63 68 2c 20 79 65 74 20 77 65 t branch, yet we
6590: 20 63 61 6e 20 64 65 64 75 63 65 20 74 68 61 74 can deduce that
65a0: 20 66 6f 72 0a 09 23 20 73 6f 6d 65 20 70 65 72 for..# some per
65b0: 69 6f 64 20 69 6e 20 74 68 65 20 70 61 73 74 20 iod in the past
65c0: 69 74 20 70 72 6f 62 61 62 6c 79 20 2a 64 69 64 it probably *did
65d0: 2a 20 68 61 76 65 20 6f 6e 65 2e 20 20 46 6f 72 * have one. For
65e0: 0a 09 23 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 ..# example, the
65f0: 20 66 69 6c 65 20 68 61 73 20 76 65 6e 64 6f 72 file has vendor
6600: 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31 revisions 1.1.1
6610: 2e 31 20 2d 3e 20 31 2e 31 2e 31 2e 39 36 2c 0a .1 -> 1.1.1.96,.
6620: 09 23 20 61 6c 6c 20 6f 66 20 77 68 69 63 68 20 .# all of which
6630: 61 72 65 20 64 61 74 65 64 20 62 65 66 6f 72 65 are dated before
6640: 20 31 2e 32 2c 20 61 6e 64 20 74 68 65 6e 20 69 1.2, and then i
6650: 74 20 68 61 73 20 31 2e 31 2e 31 2e 39 37 0a 09 t has 1.1.1.97..
6660: 23 20 2d 3e 20 31 2e 31 2e 31 2e 31 30 30 20 64 # -> 1.1.1.100 d
6670: 61 74 65 64 20 61 66 74 65 72 20 31 2e 32 2e 20 ated after 1.2.
6680: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 In this case, w
6690: 65 20 73 68 6f 75 6c 64 0a 09 23 20 72 65 63 6f e should..# reco
66a0: 72 64 20 31 2e 31 2e 31 2e 39 36 20 61 73 20 74 rd 1.1.1.96 as t
66b0: 68 65 20 6c 61 73 74 20 76 65 6e 64 6f 72 20 72 he last vendor r
66c0: 65 76 69 73 69 6f 6e 20 74 6f 20 68 61 76 65 20 evision to have
66d0: 62 65 65 6e 20 74 68 65 0a 09 23 20 68 65 61 64 been the..# head
66e0: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 of the default
66f0: 62 72 61 6e 63 68 2e 0a 0a 09 69 66 20 7b 24 6d branch....if {$m
6700: 79 70 72 69 6e 63 69 70 61 6c 20 6e 65 20 22 22 yprincipal ne ""
6710: 7d 20 7b 0a 09 20 20 20 20 23 20 54 68 65 72 65 } {.. # There
6720: 20 69 73 20 73 74 69 6c 6c 20 61 20 64 65 66 61 is still a defa
6730: 75 6c 74 20 62 72 61 6e 63 68 3b 20 74 68 61 74 ult branch; that
6740: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 6c 6c 0a means that all.
6750: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 . # revisions
6760: 20 6f 6e 20 74 68 61 74 20 62 72 61 6e 63 68 20 on that branch
6770: 67 65 74 20 6d 61 72 6b 65 64 2e 0a 0a 09 20 20 get marked....
6780: 20 20 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69 log write 5 fi
6790: 6c 65 20 22 46 6f 75 6e 64 20 65 78 70 6c 69 63 le "Found explic
67a0: 69 74 6c 79 20 6d 61 72 6b 65 64 20 4e 54 44 42 itly marked NTDB
67b0: 22 0a 0a 09 20 20 20 20 73 65 74 20 72 6e 65 78 "... set rnex
67c0: 74 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 t [$myroot child
67d0: 5d 0a 09 20 20 20 20 69 66 20 7b 24 72 6e 65 78 ].. if {$rnex
67e0: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 74 72 6f t ne ""} {...tro
67f0: 75 62 6c 65 20 66 61 74 61 6c 20 22 46 69 6c 65 uble fatal "File
6800: 20 77 69 74 68 20 64 65 66 61 75 6c 74 20 62 72 with default br
6810: 61 6e 63 68 20 24 6d 79 70 72 69 6e 63 69 70 61 anch $myprincipa
6820: 6c 20 61 6c 73 6f 20 68 61 73 20 72 65 76 69 73 l also has revis
6830: 69 6f 6e 20 5b 24 72 6e 65 78 74 20 72 65 76 6e ion [$rnext revn
6840: 72 5d 22 0a 09 09 72 65 74 75 72 6e 0a 09 20 20 r]"...return..
6850: 20 20 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 65 }... set re
6860: 76 20 5b 24 6d 79 62 72 61 6e 63 68 65 73 28 24 v [$mybranches($
6870: 6d 79 70 72 69 6e 63 69 70 61 6c 29 20 63 68 69 myprincipal) chi
6880: 6c 64 5d 0a 09 20 20 20 20 73 65 74 20 72 65 73 ld].. set res
6890: 20 7b 7d 0a 0a 09 20 20 20 20 77 68 69 6c 65 20 {}... while
68a0: 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 {$rev ne ""} {..
68b0: 09 6c 61 70 70 65 6e 64 20 72 65 73 20 24 72 65 .lappend res $re
68c0: 76 0a 09 09 73 65 74 20 72 65 76 20 5b 24 72 65 v...set rev [$re
68d0: 76 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a v child].. }.
68e0: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 .. return $re
68f0: 73 0a 0a 09 7d 20 65 6c 73 65 69 66 20 7b 24 6d s...} elseif {$m
6900: 79 69 6d 70 6f 72 74 65 64 7d 20 7b 0a 09 20 20 yimported} {..
6910: 20 20 23 20 4e 6f 20 64 65 66 61 75 6c 74 20 62 # No default b
6920: 72 61 6e 63 68 2c 20 62 75 74 20 74 68 65 20 66 ranch, but the f
6930: 69 6c 65 20 61 70 70 65 61 72 73 20 74 6f 20 68 ile appears to h
6940: 61 76 65 20 62 65 65 6e 0a 09 20 20 20 20 23 20 ave been.. #
6950: 69 6d 70 6f 72 74 65 64 2e 20 20 53 6f 20 6f 75 imported. So ou
6960: 72 20 65 64 75 63 61 74 65 64 20 67 75 65 73 73 r educated guess
6970: 20 69 73 20 74 68 61 74 20 61 6c 6c 20 72 65 76 is that all rev
6980: 69 73 69 6f 6e 73 0a 09 20 20 20 20 23 20 6f 6e isions.. # on
6990: 20 74 68 65 20 27 31 2e 31 2e 31 27 20 62 72 61 the '1.1.1' bra
69a0: 6e 63 68 20 77 69 74 68 20 74 69 6d 65 73 74 61 nch with timesta
69b0: 6d 70 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 mps prior to the
69c0: 0a 09 20 20 20 20 23 20 74 69 6d 65 73 74 61 6d .. # timestam
69d0: 70 20 6f 66 20 27 31 2e 32 27 20 77 65 72 65 20 p of '1.2' were
69e0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul
69f0: 74 20 62 72 61 6e 63 68 0a 09 20 20 20 20 23 20 t branch.. #
6a00: 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 20 20 revisions....
6a10: 20 23 20 54 68 69 73 20 72 65 61 6c 6c 79 20 6f # This really o
6a20: 6e 6c 79 20 70 72 6f 63 65 73 73 65 73 20 73 74 nly processes st
6a30: 61 6e 64 61 72 64 20 27 31 2e 31 2e 31 2e 2a 27 andard '1.1.1.*'
6a40: 2d 73 74 79 6c 65 0a 09 20 20 20 20 23 20 76 65 -style.. # ve
6a50: 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e 20 ndor revisions.
6a60: 20 4f 6e 65 20 63 6f 75 6c 64 20 63 6f 6e 63 65 One could conce
6a70: 69 76 61 62 6c 79 20 68 61 76 65 20 61 20 66 69 ivably have a fi
6a80: 6c 65 0a 09 20 20 20 20 23 20 77 68 6f 73 65 20 le.. # whose
6a90: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 default branch i
6aa0: 73 20 31 2e 31 2e 33 20 6f 72 20 77 68 61 74 65 s 1.1.3 or whate
6ab0: 76 65 72 2c 20 6f 72 20 77 61 73 20 74 68 61 74 ver, or was that
6ac0: 0a 09 20 20 20 20 23 20 61 74 20 73 6f 6d 65 20 .. # at some
6ad0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 77 point in time, w
6ae0: 69 74 68 20 76 65 6e 64 6f 72 20 72 65 76 69 73 ith vendor revis
6af0: 69 6f 6e 73 20 31 2e 31 2e 33 2e 31 2c 0a 09 20 ions 1.1.3.1,..
6b00: 20 20 20 23 20 31 2e 31 2e 33 2e 32 2c 20 65 74 # 1.1.3.2, et
6b10: 63 2e 20 20 42 75 74 20 77 69 74 68 20 74 68 65 c. But with the
6b20: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 default branch
6b30: 67 6f 6e 65 20 6e 6f 77 2c 0a 09 20 20 20 20 23 gone now,.. #
6b40: 20 77 65 27 64 20 68 61 76 65 20 6e 6f 20 62 61 we'd have no ba
6b50: 73 69 73 20 66 6f 72 20 61 73 73 75 6d 69 6e 67 sis for assuming
6b60: 20 74 68 61 74 20 74 68 65 20 6e 6f 6e 2d 73 74 that the non-st
6b70: 61 6e 64 61 72 64 0a 09 20 20 20 20 23 20 76 65 andard.. # ve
6b80: 6e 64 6f 72 20 62 72 61 6e 63 68 20 68 61 64 20 ndor branch had
6b90: 65 76 65 72 20 62 65 65 6e 20 74 68 65 20 64 65 ever been the de
6ba0: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 61 6e 79 fault branch any
6bb0: 77 61 79 2e 0a 0a 09 20 20 20 20 23 20 4e 6f 74 way.... # Not
6bc0: 65 20 74 68 61 74 20 77 65 20 72 65 6c 79 20 6f e that we rely o
6bd0: 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 62 65 n comparisons be
6be0: 74 77 65 65 6e 20 74 68 65 20 74 69 6d 65 73 74 tween the timest
6bf0: 61 6d 70 73 0a 09 20 20 20 20 23 20 6f 66 20 74 amps.. # of t
6c00: 68 65 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 he revisions on
6c10: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 the vendor branc
6c20: 68 20 61 6e 64 20 74 68 61 74 20 6f 66 0a 09 20 h and that of..
6c30: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 31 2e # revision 1.
6c40: 32 2c 20 65 76 65 6e 20 74 68 6f 75 67 68 20 74 2, even though t
6c50: 68 65 20 74 69 6d 65 73 74 61 6d 70 73 20 6d 69 he timestamps mi
6c60: 67 68 74 20 62 65 0a 09 20 20 20 20 23 20 69 6e ght be.. # in
6c70: 63 6f 72 72 65 63 74 20 64 75 65 20 74 6f 20 63 correct due to c
6c80: 6c 6f 63 6b 20 73 6b 65 77 2e 20 20 57 65 20 63 lock skew. We c
6c90: 6f 75 6c 64 20 64 6f 20 61 20 73 6c 69 67 68 74 ould do a slight
6ca0: 6c 79 0a 09 20 20 20 20 23 20 62 65 74 74 65 72 ly.. # better
6cb0: 20 6a 6f 62 20 69 66 20 77 65 20 75 73 65 64 20 job if we used
6cc0: 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 74 69 the changeset ti
6cd0: 6d 65 73 74 61 6d 70 73 2c 20 61 73 20 69 74 20 mestamps, as it
6ce0: 69 73 0a 09 20 20 20 20 23 20 70 6f 73 73 69 62 is.. # possib
6cf0: 6c 65 20 74 68 61 74 20 74 68 65 20 64 65 70 65 le that the depe
6d00: 6e 64 65 6e 63 69 65 73 20 74 68 61 74 20 77 65 ndencies that we
6d10: 6e 74 20 69 6e 74 6f 0a 09 20 20 20 20 23 20 64 nt into.. # d
6d20: 65 74 65 72 6d 69 6e 69 6e 67 20 74 68 6f 73 65 etermining those
6d30: 20 74 69 6d 65 73 74 61 6d 70 73 20 61 72 65 20 timestamps are
6d40: 6d 6f 72 65 20 61 63 63 75 72 61 74 65 2e 20 20 more accurate.
6d50: 42 75 74 0a 09 20 20 20 20 23 20 74 68 61 74 20 But.. # that
6d60: 77 6f 75 6c 64 20 72 65 71 75 69 72 65 20 61 6e would require an
6d70: 20 65 78 74 72 61 20 70 61 73 73 20 6f 72 20 74 extra pass or t
6d80: 77 6f 2e 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b wo.... if {![
6d90: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72 info exists mybr
6da0: 61 6e 63 68 65 73 28 31 2e 31 2e 31 29 5d 7d 20 anches(1.1.1)]}
6db0: 7b 20 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 0a 09 { return {} }...
6dc0: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 35 20 log write 5
6dd0: 66 69 6c 65 20 22 44 65 64 75 63 65 64 20 65 78 file "Deduced ex
6de0: 69 73 74 65 6e 63 65 20 6f 66 20 4e 54 44 42 22 istence of NTDB"
6df0: 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 20 20 ... set rev
6e00: 5b 24 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 [$mybranches(1.1
6e10: 2e 31 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 .1) child]..
6e20: 73 65 74 20 72 65 73 20 20 7b 7d 0a 09 20 20 20 set res {}..
6e30: 20 73 65 74 20 73 74 6f 70 20 5b 24 6d 79 72 6f set stop [$myro
6e40: 6f 74 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 ot child]...
6e50: 69 66 20 7b 24 73 74 6f 70 20 65 71 20 22 22 7d if {$stop eq ""}
6e60: 20 7b 0a 09 09 23 20 47 65 74 20 65 76 65 72 79 {...# Get every
6e70: 74 68 69 6e 67 20 6f 6e 20 74 68 65 20 62 72 61 thing on the bra
6e80: 6e 63 68 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 nch...while {$re
6e90: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 v ne ""} {...
6ea0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 72 65 lappend res $re
6eb0: 76 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 20 v... set rev
6ec0: 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d [$rev child]...}
6ed0: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 .. } else {..
6ee0: 09 23 20 43 6f 6c 6c 65 63 74 20 65 76 65 72 79 .# Collect every
6ef0: 74 68 69 6e 67 20 6f 6e 20 74 68 65 20 62 72 61 thing on the bra
6f00: 6e 63 68 20 77 68 69 63 68 20 73 65 65 6d 73 20 nch which seems
6f10: 74 6f 20 68 61 76 65 0a 09 09 23 20 62 65 65 6e to have...# been
6f20: 20 63 6f 6d 6d 69 74 74 65 64 20 62 65 66 6f 72 committed befor
6f30: 65 20 74 68 65 20 66 69 72 73 74 20 70 72 69 6d e the first prim
6f40: 61 72 79 20 63 68 69 6c 64 20 6f 66 20 74 68 65 ary child of the
6f50: 0a 09 09 23 20 72 6f 6f 74 20 72 65 76 69 73 69 ...# root revisi
6f60: 6f 6e 2e 0a 09 09 73 65 74 20 73 74 6f 70 64 61 on....set stopda
6f70: 74 65 20 5b 24 73 74 6f 70 20 64 61 74 65 5d 0a te [$stop date].
6f80: 09 09 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 ..while {$rev ne
6f90: 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 69 66 20 ""} {... if
6fa0: 7b 5b 24 72 65 76 20 64 61 74 65 5d 20 3e 3d 20 {[$rev date] >=
6fb0: 24 73 74 6f 70 64 61 74 65 7d 20 62 72 65 61 6b $stopdate} break
6fc0: 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 ... lappend r
6fd0: 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 es $rev... se
6fe0: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c t rev [$rev chil
6ff0: 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 d]...}.. }...
7000: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a return $res.
7010: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 ..} else {..
7020: 72 65 74 75 72 6e 20 7b 7d 0a 09 7d 0a 20 20 20 return {}..}.
7030: 20 7d 0a 0a 20 20 20 20 23 20 47 65 6e 65 72 61 }.. # Genera
7040: 6c 20 6e 6f 74 65 3a 20 49 6e 20 74 68 65 20 66 l note: In the f
7050: 6f 6c 6c 6f 77 69 6e 67 20 6d 65 74 68 6f 64 73 ollowing methods
7060: 20 77 65 20 6f 6e 6c 79 20 6d 6f 64 69 66 79 20 we only modify
7070: 74 68 65 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 the links. #
7080: 62 65 74 77 65 65 6e 20 72 65 76 69 73 69 6f 6e between revision
7090: 73 20 61 6e 64 20 73 79 6d 62 6f 6c 73 20 74 6f s and symbols to
70a0: 20 72 65 73 74 72 75 63 74 75 72 65 20 74 68 65 restructure the
70b0: 20 72 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 revision. #
70c0: 74 72 65 65 2e 20 57 65 20 64 6f 20 5f 5f 6e 6f tree. We do __no
70d0: 74 5f 5f 20 64 65 73 74 72 6f 79 20 74 68 65 20 t__ destroy the
70e0: 6f 62 6a 65 63 74 73 2e 20 47 69 76 65 6e 20 74 objects. Given t
70f0: 68 65 20 63 6f 6d 70 6c 65 78 20 6c 69 6e 6b 73 he complex links
7100: 0a 20 20 20 20 23 20 47 43 20 69 73 20 64 69 66 . # GC is dif
7110: 66 69 63 75 6c 74 20 61 74 20 74 68 69 73 20 6c ficult at this l
7120: 65 76 65 6c 2e 20 49 74 20 69 73 20 6d 75 63 68 evel. It is much
7130: 20 65 61 73 69 65 72 20 74 6f 20 64 72 6f 70 0a easier to drop.
7140: 20 20 20 20 23 20 65 76 65 72 79 74 68 69 6e 67 # everything
7150: 20 77 68 65 6e 20 77 65 20 77 65 20 61 72 65 20 when we we are
7160: 64 6f 6e 65 2e 20 54 68 69 73 20 68 61 70 70 65 done. This happe
7170: 6e 73 20 69 6e 20 27 64 72 6f 70 27 2c 20 75 73 ns in 'drop', us
7180: 69 6e 67 0a 20 20 20 20 23 20 74 68 65 20 73 74 ing. # the st
7190: 61 74 65 20 76 61 72 69 61 62 6c 65 20 27 6d 79 ate variable 'my
71a0: 72 65 76 27 2c 20 27 6d 79 62 72 61 6e 63 68 65 rev', 'mybranche
71b0: 73 27 2c 20 61 6e 64 20 27 6d 79 74 61 67 73 27 s', and 'mytags'
71c0: 2e 20 57 68 61 74 20 77 65 0a 20 20 20 20 23 20 . What we. #
71d0: 68 61 76 65 20 74 6f 20 70 65 72 73 69 73 74 2c have to persist,
71e0: 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 27 70 performed by 'p
71f0: 65 72 73 69 73 74 27 2c 20 77 65 20 6b 6e 6f 77 ersist', we know
7200: 20 77 69 6c 6c 20 62 65 0a 20 20 20 20 23 20 72 will be. # r
7210: 65 61 63 68 61 62 6c 65 20 74 68 72 6f 75 67 68 eachable through
7220: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 6c the revisions l
7230: 69 73 74 65 64 20 69 6e 20 27 6d 79 72 6f 6f 74 isted in 'myroot
7240: 73 27 20 61 6e 64 20 74 68 65 69 72 0a 20 20 20 s' and their.
7250: 20 23 20 63 68 69 6c 64 72 65 6e 20 61 6e 64 20 # children and
7260: 73 79 6d 62 6f 6c 73 2e 0a 0a 20 20 20 20 6d 65 symbols... me
7270: 74 68 6f 64 20 41 64 6a 75 73 74 4e 6f 6e 54 72 thod AdjustNonTr
7280: 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 unkDefaultBranch
7290: 20 7b 72 65 76 6c 69 73 74 7d 20 7b 0a 09 73 65 {revlist} {..se
72a0: 74 20 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74 20 t stop [$myroot
72b0: 63 68 69 6c 64 5d 20 3b 23 20 72 65 76 20 27 31 child] ;# rev '1
72c0: 2e 32 27 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 .2'...log write
72d0: 35 20 66 69 6c 65 20 22 41 64 6a 75 73 74 69 6e 5 file "Adjustin
72e0: 67 20 4e 54 44 42 20 63 6f 6e 74 61 69 6e 69 6e g NTDB containin
72f0: 67 20 5b 6e 73 70 20 5b 6c 6c 65 6e 67 74 68 20 g [nsp [llength
7300: 24 72 65 76 6c 69 73 74 5d 20 72 65 76 69 73 69 $revlist] revisi
7310: 6f 6e 5d 22 0a 0a 09 23 20 46 72 6f 6d 20 63 76 on]"...# From cv
7320: 73 32 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 s2svn the follow
7330: 69 6e 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 ing explanation
7340: 28 77 69 74 68 20 6d 6f 64 69 66 69 63 61 74 69 (with modificati
7350: 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75 72 20 61 ons..# for our a
7360: 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20 41 lgorithm):...# A
7370: 64 6a 75 73 74 20 74 68 65 20 6e 6f 6e 2d 74 72 djust the non-tr
7380: 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e unk default bran
7390: 63 68 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 ch revisions fou
73a0: 6e 64 20 69 6e 20 74 68 65 0a 09 23 20 27 72 65 nd in the..# 're
73b0: 76 6c 69 73 74 27 2e 0a 0a 09 23 20 27 6d 79 69 vlist'....# 'myi
73c0: 6d 70 6f 72 74 65 64 27 20 69 73 20 61 20 62 6f mported' is a bo
73d0: 6f 6c 65 61 6e 20 66 6c 61 67 20 69 6e 64 69 63 olean flag indic
73e0: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 74 68 ating whether th
73f0: 69 73 20 66 69 6c 65 0a 09 23 20 61 70 70 65 61 is file..# appea
7400: 72 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 rs to have been
7410: 69 6d 70 6f 72 74 65 64 2c 20 77 68 69 63 68 20 imported, which
7420: 61 6c 73 6f 20 6d 65 61 6e 73 20 74 68 61 74 0a also means that.
7430: 09 23 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 20 .# revision 1.1
7440: 68 61 73 20 61 20 67 65 6e 65 72 61 74 65 64 20 has a generated
7450: 6c 6f 67 20 6d 65 73 73 61 67 65 20 74 68 61 74 log message that
7460: 20 6e 65 65 64 20 6e 6f 74 20 62 65 0a 09 23 20 need not be..#
7470: 70 72 65 73 65 72 76 65 64 2e 20 20 27 72 65 76 preserved. 'rev
7480: 6c 69 73 74 27 20 69 73 20 61 20 6c 69 73 74 20 list' is a list
7490: 6f 66 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 of object refere
74a0: 6e 63 65 73 20 66 6f 72 20 74 68 65 0a 09 23 20 nces for the..#
74b0: 72 65 76 69 73 69 6f 6e 73 20 74 68 61 74 20 68 revisions that h
74c0: 61 76 65 20 62 65 65 6e 20 64 65 74 65 72 6d 69 ave been determi
74d0: 6e 65 64 20 74 6f 20 62 65 20 6e 6f 6e 2d 74 72 ned to be non-tr
74e0: 75 6e 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 unk default..# b
74f0: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 2e ranch revisions.
7500: 0a 0a 09 23 20 4e 6f 74 65 20 74 68 61 74 20 74 ...# Note that t
7510: 68 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f he first revisio
7520: 6e 20 6f 6e 20 74 68 65 20 64 65 66 61 75 6c 74 n on the default
7530: 20 62 72 61 6e 63 68 20 69 73 0a 09 23 20 68 61 branch is..# ha
7540: 6e 64 6c 65 64 20 73 74 72 61 6e 67 65 6c 79 20 ndled strangely
7550: 62 79 20 43 56 53 2e 20 20 49 66 20 61 20 66 69 by CVS. If a fi
7560: 6c 65 20 69 73 20 69 6d 70 6f 72 74 65 64 20 28 le is imported (
7570: 61 73 20 6f 70 70 6f 73 65 64 0a 09 23 20 74 6f as opposed..# to
7580: 20 62 65 69 6e 67 20 61 64 64 65 64 29 2c 20 43 being added), C
7590: 56 53 20 63 72 65 61 74 65 73 20 61 20 31 2e 31 VS creates a 1.1
75a0: 20 72 65 76 69 73 69 6f 6e 2c 20 74 68 65 6e 20 revision, then
75b0: 63 72 65 61 74 65 73 20 61 0a 09 23 20 76 65 6e creates a..# ven
75c0: 64 6f 72 20 62 72 61 6e 63 68 20 31 2e 31 2e 31 dor branch 1.1.1
75d0: 20 62 61 73 65 64 20 6f 6e 20 31 2e 31 2c 20 74 based on 1.1, t
75e0: 68 65 6e 20 63 72 65 61 74 65 73 20 61 20 31 2e hen creates a 1.
75f0: 31 2e 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 1.1.1..# revisio
7600: 6e 20 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 n that is identi
7610: 63 61 6c 20 74 6f 20 74 68 65 20 31 2e 31 20 72 cal to the 1.1 r
7620: 65 76 69 73 69 6f 6e 20 28 69 2e 65 2e 2c 20 69 evision (i.e., i
7630: 74 73 0a 09 23 20 64 65 6c 74 61 74 65 78 74 20 ts..# deltatext
7640: 69 73 20 65 6d 70 74 79 29 2e 20 20 54 68 65 20 is empty). The
7650: 6c 6f 67 20 6d 65 73 73 61 67 65 20 74 68 61 74 log message that
7660: 20 74 68 65 20 75 73 65 72 20 74 79 70 65 64 0a the user typed.
7670: 09 23 20 77 68 65 6e 20 69 6d 70 6f 72 74 69 6e .# when importin
7680: 67 20 69 73 20 73 74 6f 72 65 64 20 77 69 74 68 g is stored with
7690: 20 74 68 65 20 31 2e 31 2e 31 2e 31 20 72 65 76 the 1.1.1.1 rev
76a0: 69 73 69 6f 6e 2e 20 20 54 68 65 20 31 2e 31 0a ision. The 1.1.
76b0: 09 23 20 72 65 76 69 73 69 6f 6e 20 61 6c 77 61 .# revision alwa
76c0: 79 73 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 74 ys contains a st
76d0: 61 6e 64 61 72 64 2c 20 67 65 6e 65 72 61 74 65 andard, generate
76e0: 64 20 6c 6f 67 20 6d 65 73 73 61 67 65 2c 0a 09 d log message,..
76f0: 23 20 27 49 6e 69 74 69 61 6c 20 72 65 76 69 73 # 'Initial revis
7700: 69 6f 6e 5c 6e 27 2e 0a 0a 09 23 20 57 68 65 6e ion\n'....# When
7710: 20 77 65 20 64 65 74 65 63 74 20 61 20 73 74 72 we detect a str
7720: 61 69 67 68 74 66 6f 72 77 61 72 64 20 69 6d 70 aightforward imp
7730: 6f 72 74 20 6c 69 6b 65 20 74 68 69 73 2c 20 77 ort like this, w
7740: 65 20 77 61 6e 74 0a 09 23 20 74 6f 20 68 61 6e e want..# to han
7750: 64 6c 65 20 69 74 20 62 79 20 64 65 6c 65 74 69 dle it by deleti
7760: 6e 67 20 74 68 65 20 31 2e 31 20 72 65 76 69 73 ng the 1.1 revis
7770: 69 6f 6e 20 28 77 68 69 63 68 20 64 6f 65 73 6e ion (which doesn
7780: 27 74 0a 09 23 20 63 6f 6e 74 61 69 6e 20 61 6e 't..# contain an
7790: 79 20 75 73 65 66 75 6c 20 69 6e 66 6f 72 6d 61 y useful informa
77a0: 74 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 69 6e 67 tion) and making
77b0: 20 31 2e 31 2e 31 2e 31 20 69 6e 74 6f 20 61 6e 1.1.1.1 into an
77c0: 0a 09 23 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 ..# independent
77d0: 72 6f 6f 74 20 69 6e 20 74 68 65 20 66 69 6c 65 root in the file
77e0: 27 73 20 64 65 70 65 6e 64 65 6e 63 79 20 74 72 's dependency tr
77f0: 65 65 2e 20 20 49 6e 20 53 56 4e 2c 0a 09 23 20 ee. In SVN,..#
7800: 31 2e 31 2e 31 2e 31 20 77 69 6c 6c 20 62 65 20 1.1.1.1 will be
7810: 61 64 64 65 64 20 64 69 72 65 63 74 6c 79 20 74 added directly t
7820: 6f 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 o the vendor bra
7830: 6e 63 68 20 77 69 74 68 20 69 74 73 0a 09 23 20 nch with its..#
7840: 69 6e 69 74 69 61 6c 20 63 6f 6e 74 65 6e 74 2e initial content.
7850: 20 20 54 68 65 6e 20 69 6e 20 61 20 73 70 65 63 Then in a spec
7860: 69 61 6c 20 27 70 6f 73 74 2d 63 6f 6d 6d 69 74 ial 'post-commit
7870: 27 2c 20 74 68 65 0a 09 23 20 31 2e 31 2e 31 2e ', the..# 1.1.1.
7880: 31 20 72 65 76 69 73 69 6f 6e 20 69 73 20 63 6f 1 revision is co
7890: 70 69 65 64 20 62 61 63 6b 20 74 6f 20 74 72 75 pied back to tru
78a0: 6e 6b 2e 0a 0a 09 23 20 49 66 20 74 68 65 20 75 nk....# If the u
78b0: 73 65 72 20 69 6d 70 6f 72 74 73 20 61 67 61 69 ser imports agai
78c0: 6e 20 74 6f 20 74 68 65 20 73 61 6d 65 20 76 65 n to the same ve
78d0: 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20 74 68 65 ndor branch, the
78e0: 6e 20 43 56 53 0a 09 23 20 63 72 65 61 74 65 73 n CVS..# creates
78f0: 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31 revisions 1.1.1
7900: 2e 32 2c 20 31 2e 31 2e 31 2e 33 2c 20 65 74 63 .2, 1.1.1.3, etc
7910: 2e 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 . on the vendor
7920: 62 72 61 6e 63 68 2c 0a 09 23 20 2a 77 69 74 68 branch,..# *with
7930: 6f 75 74 2a 20 63 6f 75 6e 74 65 72 70 61 72 74 out* counterpart
7940: 73 20 69 6e 20 74 72 75 6e 6b 20 28 65 76 65 6e s in trunk (even
7950: 20 74 68 6f 75 67 68 20 74 68 65 73 65 20 72 65 though these re
7960: 76 69 73 69 6f 6e 73 0a 09 23 20 65 66 66 65 63 visions..# effec
7970: 74 69 76 65 6c 79 20 70 6c 61 79 20 74 68 65 20 tively play the
7980: 72 6f 6c 65 20 6f 66 20 74 72 75 6e 6b 20 72 65 role of trunk re
7990: 76 69 73 69 6f 6e 73 29 2e 20 20 53 6f 20 61 66 visions). So af
79a0: 74 65 72 20 77 65 20 61 64 64 0a 09 23 20 73 75 ter we add..# su
79b0: 63 68 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 20 ch revisions to
79c0: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 the vendor branc
79d0: 68 2c 20 77 65 20 61 6c 73 6f 20 63 6f 70 79 20 h, we also copy
79e0: 74 68 65 6d 20 62 61 63 6b 20 74 6f 0a 09 23 20 them back to..#
79f0: 74 72 75 6e 6b 20 69 6e 20 70 6f 73 74 2d 63 6f trunk in post-co
7a00: 6d 6d 69 74 73 2e 0a 0a 09 23 20 57 65 20 6d 61 mmits....# We ma
7a10: 72 6b 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 rk the revisions
7a20: 20 66 6f 75 6e 64 20 69 6e 20 27 72 65 76 6c 69 found in 'revli
7a30: 73 74 27 20 61 73 20 64 65 66 61 75 6c 74 20 62 st' as default b
7a40: 72 61 6e 63 68 0a 09 23 20 72 65 76 69 73 69 6f ranch..# revisio
7a50: 6e 73 2e 20 20 41 6c 73 6f 2c 20 69 66 20 74 68 ns. Also, if th
7a60: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 e root revision
7a70: 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 63 68 has a primary ch
7a80: 69 6c 64 0a 09 23 20 77 65 20 73 65 74 20 74 68 ild..# we set th
7a90: 61 74 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 64 at revision to d
7aa0: 65 70 65 6e 64 20 6f 6e 20 74 68 65 20 6c 61 73 epend on the las
7ab0: 74 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 t non-trunk defa
7ac0: 75 6c 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 ult..# branch re
7ad0: 76 69 73 69 6f 6e 20 61 6e 64 20 70 6f 73 73 69 vision and possi
7ae0: 62 6c 79 20 61 64 6a 75 73 74 20 69 74 73 20 74 bly adjust its t
7af0: 79 70 65 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e ype accordingly.
7b00: 0a 0a 09 73 65 74 20 66 69 72 73 74 20 5b 6c 69 ...set first [li
7b10: 6e 64 65 78 20 24 72 65 76 6c 69 73 74 20 30 5d ndex $revlist 0]
7b20: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 36 20 66 ...log write 6 f
7b30: 69 6c 65 20 22 3c 5b 24 66 69 72 73 74 20 72 65 ile "<[$first re
7b40: 76 6e 72 5d 3e 20 5b 65 78 70 72 20 7b 24 6d 79 vnr]> [expr {$my
7b50: 69 6d 70 6f 72 74 65 64 20 3f 20 22 69 6d 70 6f imported ? "impo
7b60: 72 74 65 64 22 20 3a 20 22 6e 6f 74 20 69 6d 70 rted" : "not imp
7b70: 6f 72 74 65 64 22 7d 5d 2c 20 5b 24 66 69 72 73 orted"}], [$firs
7b80: 74 20 6f 70 65 72 61 74 69 6f 6e 5d 2c 20 5b 65 t operation], [e
7b90: 78 70 72 20 7b 5b 24 66 69 72 73 74 20 68 61 73 xpr {[$first has
7ba0: 74 65 78 74 5d 20 3f 20 22 68 61 73 20 74 65 78 text] ? "has tex
7bb0: 74 22 20 3a 20 22 6e 6f 20 74 65 78 74 22 7d 5d t" : "no text"}]
7bc0: 22 0a 0a 09 69 66 20 7b 24 6d 79 69 6d 70 6f 72 "...if {$myimpor
7bd0: 74 65 64 20 26 26 0a 09 20 20 20 20 5b 24 66 69 ted &&.. [$fi
7be0: 72 73 74 20 72 65 76 6e 72 5d 20 65 71 20 22 31 rst revnr] eq "1
7bf0: 2e 31 2e 31 2e 31 22 20 26 26 0a 09 20 20 20 20 .1.1.1" &&..
7c00: 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f [$first operatio
7c10: 6e 5d 20 65 71 20 22 63 68 61 6e 67 65 22 20 26 n] eq "change" &
7c20: 26 0a 09 20 20 20 20 21 5b 24 66 69 72 73 74 20 &.. ![$first
7c30: 68 61 73 74 65 78 74 5d 7d 20 7b 0a 0a 09 20 20 hastext]} {...
7c40: 20 20 73 65 74 20 72 65 76 31 31 20 5b 24 66 69 set rev11 [$fi
7c50: 72 73 74 20 70 61 72 65 6e 74 5d 20 3b 20 23 20 rst parent] ; #
7c60: 41 73 73 65 72 74 3a 20 53 68 6f 75 6c 64 20 62 Assert: Should b
7c70: 65 20 6d 79 72 6f 6f 74 2e 0a 09 20 20 20 20 6c e myroot... l
7c80: 6f 67 20 77 72 69 74 65 20 33 20 66 69 6c 65 20 og write 3 file
7c90: 22 52 65 6d 6f 76 69 6e 67 20 69 72 72 65 6c 65 "Removing irrele
7ca0: 76 61 6e 74 20 72 65 76 69 73 69 6f 6e 20 5b 24 vant revision [$
7cb0: 72 65 76 31 31 20 72 65 76 6e 72 5d 22 0a 0a 09 rev11 revnr]"...
7cc0: 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 74 68 # Cut out th
7cd0: 65 20 6f 6c 64 20 6d 79 72 6f 6f 74 20 72 65 76 e old myroot rev
7ce0: 69 73 69 6f 6e 2e 0a 0a 09 20 20 20 20 6c 64 65 ision.... lde
7cf0: 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 lete myroots $re
7d00: 76 31 31 20 3b 20 23 20 4e 6f 74 20 61 20 72 6f v11 ; # Not a ro
7d10: 6f 74 20 61 6e 79 20 6c 6f 6e 67 65 72 2e 0a 0a ot any longer...
7d20: 09 20 20 20 20 24 66 69 72 73 74 20 63 75 74 66 . $first cutf
7d30: 72 6f 6d 70 61 72 65 6e 74 20 3b 20 23 20 53 65 romparent ; # Se
7d40: 76 65 72 20 72 65 76 69 73 69 6f 6e 20 66 72 6f ver revision fro
7d50: 6d 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f m parent revisio
7d60: 6e 2e 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f n... if {$sto
7d70: 70 20 6e 65 20 22 22 7d 20 7b 0a 09 09 24 73 74 p ne ""} {...$st
7d80: 6f 70 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 op cutfromparent
7d90: 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f ...lappend myroo
7da0: 74 73 20 24 73 74 6f 70 20 3b 20 23 20 4e 65 77 ts $stop ; # New
7db0: 20 72 6f 6f 74 2c 20 61 66 74 65 72 20 76 65 6e root, after ven
7dc0: 64 6f 72 20 62 72 61 6e 63 68 0a 09 20 20 20 20 dor branch..
7dd0: 7d 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 }... # Cut ou
7de0: 74 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 t the vendor bra
7df0: 6e 63 68 20 73 79 6d 62 6f 6c 0a 0a 09 20 20 20 nch symbol...
7e00: 20 73 65 74 20 76 65 6e 64 6f 72 20 5b 24 66 69 set vendor [$fi
7e10: 72 73 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 rst parentbranch
7e20: 5d 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 ].. integrity
7e30: 20 61 73 73 65 72 74 20 7b 24 76 65 6e 64 6f 72 assert {$vendor
7e40: 20 6e 65 20 22 22 7d 20 7b 46 69 72 73 74 20 4e ne ""} {First N
7e50: 54 44 42 20 72 65 76 69 73 69 6f 6e 20 68 61 73 TDB revision has
7e60: 20 6e 6f 20 62 72 61 6e 63 68 7d 0a 09 20 20 20 no branch}..
7e70: 20 69 66 20 7b 5b 24 76 65 6e 64 6f 72 20 70 61 if {[$vendor pa
7e80: 72 65 6e 74 5d 20 65 71 20 24 72 65 76 31 31 7d rent] eq $rev11}
7e90: 20 7b 0a 09 09 24 72 65 76 31 31 20 72 65 6d 6f {...$rev11 remo
7ea0: 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 20 vebranch
7eb0: 24 76 65 6e 64 6f 72 0a 09 09 24 72 65 76 31 31 $vendor...$rev11
7ec0: 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 removechildonbr
7ed0: 61 6e 63 68 20 24 66 69 72 73 74 0a 09 09 24 76 anch $first...$v
7ee0: 65 6e 64 6f 72 20 63 75 74 62 72 61 6e 63 68 70 endor cutbranchp
7ef0: 61 72 65 6e 74 20 20 20 20 3b 23 20 62 70 20 3d arent ;# bp =
7f00: 20 72 65 76 31 31 2c 20 61 62 6f 75 74 20 74 6f rev11, about to
7f10: 20 62 65 20 67 6f 6e 65 0a 09 09 24 66 69 72 73 be gone...$firs
7f20: 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 62 t cutfromparentb
7f30: 72 61 6e 63 68 20 3b 23 20 70 62 20 3d 20 76 65 ranch ;# pb = ve
7f40: 6e 64 6f 72 2c 20 74 6f 20 62 65 20 61 20 64 65 ndor, to be a de
7f50: 74 61 63 68 65 64 20 4c 4f 44 0a 09 09 6c 61 70 tached LOD...lap
7f60: 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 pend myroots $fi
7f70: 72 73 74 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 rst.. }...
7f80: 20 23 20 43 68 61 6e 67 65 20 74 68 65 20 74 79 # Change the ty
7f90: 70 65 20 6f 66 20 66 69 72 73 74 20 28 74 79 70 pe of first (typ
7fa0: 69 63 61 6c 6c 79 20 66 72 6f 6d 20 43 68 61 6e ically from Chan
7fb0: 67 65 20 74 6f 20 41 64 64 29 3a 0a 09 20 20 20 ge to Add):..
7fc0: 20 24 66 69 72 73 74 20 72 65 74 79 70 65 20 61 $first retype a
7fd0: 64 64 0a 0a 09 20 20 20 20 23 20 4d 6f 76 65 20 dd... # Move
7fe0: 61 6e 79 20 74 61 67 73 20 61 6e 64 20 62 72 61 any tags and bra
7ff0: 6e 63 68 65 73 20 66 72 6f 6d 20 74 68 65 20 6f nches from the o
8000: 6c 64 20 74 6f 20 74 68 65 20 6e 65 77 20 72 6f ld to the new ro
8010: 6f 74 2e 0a 09 20 20 20 20 24 72 65 76 31 31 20 ot... $rev11
8020: 6d 6f 76 65 73 79 6d 62 6f 6c 73 74 6f 20 24 66 movesymbolsto $f
8030: 69 72 73 74 0a 09 7d 0a 0a 09 23 20 4d 61 72 6b irst..}...# Mark
8040: 20 61 6c 6c 20 74 68 65 20 73 70 65 63 69 61 6c all the special
8050: 20 72 65 76 69 73 69 6f 6e 73 20 61 73 20 73 75 revisions as su
8060: 63 68 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 ch..foreach rev
8070: 24 72 65 76 6c 69 73 74 20 7b 0a 09 20 20 20 20 $revlist {..
8080: 6c 6f 67 20 77 72 69 74 65 20 33 20 66 69 6c 65 log write 3 file
8090: 20 22 52 65 76 69 73 69 6f 6e 20 6f 6e 20 64 65 "Revision on de
80a0: 66 61 75 6c 74 20 62 72 61 6e 63 68 3a 20 5b 24 fault branch: [$
80b0: 72 65 76 20 72 65 76 6e 72 5d 22 0a 09 20 20 20 rev revnr]"..
80c0: 20 24 72 65 76 20 73 65 74 6f 6e 64 65 66 61 75 $rev setondefau
80d0: 6c 74 62 72 61 6e 63 68 20 31 0a 09 7d 0a 0a 09 ltbranch 1..}...
80e0: 69 66 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d if {$stop ne ""}
80f0: 20 7b 0a 09 20 20 20 20 23 20 52 65 76 69 73 69 {.. # Revisi
8100: 6f 6e 20 31 2e 32 20 6c 6f 67 69 63 61 6c 6c 79 on 1.2 logically
8110: 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 69 6d 70 follows the imp
8120: 6f 72 74 65 64 20 72 65 76 69 73 69 6f 6e 73 2c orted revisions,
8130: 0a 09 20 20 20 20 23 20 6e 6f 74 20 31 2e 31 2e .. # not 1.1.
8140: 20 20 41 63 63 6f 72 64 69 6e 67 6c 79 2c 20 63 Accordingly, c
8150: 6f 6e 6e 65 63 74 20 69 74 20 74 6f 20 74 68 65 onnect it to the
8160: 20 6c 61 73 74 20 4e 54 44 42 52 20 61 6e 64 0a last NTDBR and.
8170: 09 20 20 20 20 23 20 70 6f 73 73 69 62 6c 79 20 . # possibly
8180: 63 68 61 6e 67 65 20 69 74 73 20 74 79 70 65 2e change its type.
8190: 0a 0a 09 20 20 20 20 73 65 74 20 6c 61 73 74 20 ... set last
81a0: 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c 69 73 74 [lindex $revlist
81b0: 20 65 6e 64 5d 0a 09 20 20 20 20 24 73 74 6f 70 end].. $stop
81c0: 20 73 65 74 64 65 66 61 75 6c 74 62 72 61 6e 63 setdefaultbranc
81d0: 68 70 61 72 65 6e 74 20 24 6c 61 73 74 20 3b 20 hparent $last ;
81e0: 23 20 52 65 74 79 70 65 73 20 74 68 65 20 72 65 # Retypes the re
81f0: 76 69 73 69 6f 6e 20 74 6f 6f 2e 0a 09 20 20 20 vision too...
8200: 20 24 6c 61 73 74 20 73 65 74 64 65 66 61 75 6c $last setdefaul
8210: 74 62 72 61 6e 63 68 63 68 69 6c 64 20 20 24 73 tbranchchild $s
8220: 74 6f 70 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 top..}..return.
8230: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
8240: 20 43 68 65 63 6b 4c 4f 44 73 20 7b 7d 20 7b 0a CheckLODs {} {.
8250: 09 66 6f 72 65 61 63 68 20 7b 5f 20 62 72 61 6e .foreach {_ bran
8260: 63 68 7d 20 20 5b 61 72 72 61 79 20 67 65 74 20 ch} [array get
8270: 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 20 24 62 mybranches] { $b
8280: 72 61 6e 63 68 20 63 68 65 63 6b 6c 6f 64 20 7d ranch checklod }
8290: 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 ..foreach {_ tag
82a0: 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 list} [array get
82b0: 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 mytags] {..
82c0: 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 foreach tag $tag
82d0: 6c 69 73 74 20 7b 20 24 74 61 67 20 63 68 65 63 list { $tag chec
82e0: 6b 6c 6f 64 20 7d 0a 09 7d 0a 09 72 65 74 75 72 klod }..}..retur
82f0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
8300: 68 6f 64 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 hod RemoveIrrele
8310: 76 61 6e 74 44 65 6c 65 74 69 6f 6e 73 20 7b 7d vantDeletions {}
8320: 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 {..# From cvs2s
8330: 76 6e 3a 20 49 66 20 61 20 66 69 6c 65 20 69 73 vn: If a file is
8340: 20 61 64 64 65 64 20 6f 6e 20 61 20 62 72 61 6e added on a bran
8350: 63 68 2c 20 74 68 65 6e 20 61 20 74 72 75 6e 6b ch, then a trunk
8360: 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 69 73 20 ..# revision is
8370: 61 64 64 65 64 20 61 74 20 74 68 65 20 73 61 6d added at the sam
8380: 65 20 74 69 6d 65 20 69 6e 20 74 68 65 20 27 44 e time in the 'D
8390: 65 61 64 27 20 73 74 61 74 65 2e 0a 09 23 20 54 ead' state...# T
83a0: 68 69 73 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 his revision doe
83b0: 73 6e 27 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 sn't do anything
83c0: 20 75 73 65 66 75 6c 2c 20 73 6f 20 64 65 6c 65 useful, so dele
83d0: 74 65 20 69 74 2e 0a 0a 09 66 6f 72 65 61 63 68 te it....foreach
83e0: 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 7b root $myroots {
83f0: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 .. if {[$root
8400: 20 69 73 6e 65 65 64 65 64 5d 7d 20 63 6f 6e 74 isneeded]} cont
8410: 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 inue.. log wr
8420: 69 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f ite 2 file "Remo
8430: 76 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 ving unnecessary
8440: 20 64 65 61 64 20 72 65 76 69 73 69 6f 6e 20 5b dead revision [
8450: 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22 0a 0a 09 $root revnr]"...
8460: 20 20 20 20 23 20 52 65 6d 6f 76 65 20 61 73 20 # Remove as
8470: 72 6f 6f 74 2c 20 6d 61 6b 65 20 69 74 73 20 63 root, make its c
8480: 68 69 6c 64 20 6e 65 77 20 72 6f 6f 74 20 61 66 hild new root af
8490: 74 65 72 0a 09 20 20 20 20 23 20 64 69 73 63 6f ter.. # disco
84a0: 6e 6e 65 63 74 69 6e 67 20 69 74 20 66 72 6f 6d nnecting it from
84b0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6a 75 the revision ju
84c0: 73 74 20 67 6f 69 6e 67 20 61 77 61 79 2e 0a 0a st going away...
84d0: 09 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 . ldelete myr
84e0: 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 oots $root..
84f0: 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 63 68 if {[$root hasch
8500: 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 63 68 ild]} {...set ch
8510: 69 6c 64 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 ild [$root child
8520: 5d 0a 09 09 24 63 68 69 6c 64 20 63 75 74 66 72 ]...$child cutfr
8530: 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 omparent...lappe
8540: 6e 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c nd myroots $chil
8550: 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 d.. }... #
8560: 20 43 75 74 20 6f 75 74 20 74 68 65 20 62 72 61 Cut out the bra
8570: 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 62 79 nches spawned by
8580: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f the revision to
8590: 20 62 65 0a 09 20 20 20 20 23 20 64 65 6c 65 74 be.. # delet
85a0: 65 64 2e 20 49 66 20 74 68 65 20 62 72 61 6e 63 ed. If the branc
85b0: 68 20 68 61 73 20 72 65 76 69 73 69 6f 6e 73 20 h has revisions
85c0: 74 68 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 they should alre
85d0: 61 64 79 0a 09 20 20 20 20 23 20 75 73 65 20 6f ady.. # use o
85e0: 70 65 72 61 74 69 6f 6e 20 27 61 64 64 27 2c 20 peration 'add',
85f0: 6e 6f 20 6e 65 65 64 20 74 6f 20 63 68 61 6e 67 no need to chang
8600: 65 20 74 68 61 74 2e 20 54 68 65 20 66 69 72 73 e that. The firs
8610: 74 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 6f t.. # revisio
8620: 6e 20 6f 6e 20 65 61 63 68 20 62 72 61 6e 63 68 n on each branch
8630: 20 62 65 63 6f 6d 65 73 20 61 20 6e 65 77 20 61 becomes a new a
8640: 6e 64 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 0a nd disconnected.
8650: 09 20 20 20 20 23 20 72 6f 6f 74 2e 0a 0a 09 20 . # root....
8660: 20 20 20 66 6f 72 65 61 63 68 20 62 72 61 6e 63 foreach branc
8670: 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 h [$root branche
8680: 73 5d 20 7b 0a 09 09 24 62 72 61 6e 63 68 20 63 s] {...$branch c
8690: 75 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 utbranchparent..
86a0: 09 69 66 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 .if {![$branch h
86b0: 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e aschild]} contin
86c0: 75 65 0a 09 09 73 65 74 20 66 69 72 73 74 20 5b ue...set first [
86d0: 24 62 72 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 $branch child]..
86e0: 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 .$first cutfromp
86f0: 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 arent...lappend
8700: 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a 09 myroots $first..
8710: 20 20 20 20 7d 0a 09 20 20 20 20 24 72 6f 6f 74 }.. $root
8720: 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 removeallbranch
8730: 65 73 0a 0a 09 20 20 20 20 23 20 54 61 67 67 69 es... # Taggi
8740: 6e 67 20 61 20 64 65 61 64 20 72 65 76 69 73 69 ng a dead revisi
8750: 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61 6e on doesn't do an
8760: 79 74 68 69 6e 67 2c 20 73 6f 20 72 65 6d 6f 76 ything, so remov
8770: 65 0a 09 20 20 20 20 23 20 61 6e 79 20 74 61 67 e.. # any tag
8780: 73 20 74 68 61 74 20 77 65 72 65 20 73 65 74 20 s that were set
8790: 6f 6e 20 69 74 2e 0a 0a 09 20 20 20 20 24 72 6f on it.... $ro
87a0: 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 ot removealltags
87b0: 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 63 61 ... # This ca
87c0: 6e 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 6f 6e n only happen on
87d0: 63 65 20 70 65 72 20 66 69 6c 65 2c 20 61 6e 64 ce per file, and
87e0: 20 77 65 20 6d 69 67 68 74 20 68 61 76 65 0a 09 we might have..
87f0: 20 20 20 20 23 20 6a 75 73 74 20 63 68 61 6e 67 # just chang
8800: 65 64 20 6d 79 72 6f 6f 74 73 2c 20 73 6f 20 65 ed myroots, so e
8810: 6e 64 20 74 68 65 20 6c 6f 6f 70 0a 09 20 20 20 nd the loop..
8820: 20 62 72 65 61 6b 0a 09 7d 0a 09 72 65 74 75 72 break..}..retur
8830: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
8840: 68 6f 64 20 52 65 6d 6f 76 65 49 6e 69 74 69 61 hod RemoveInitia
8850: 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e 73 lBranchDeletions
8860: 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76 {} {..# From cv
8870: 73 32 73 76 6e 3a 20 49 66 20 74 68 65 20 66 69 s2svn: If the fi
8880: 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 rst revision on
8890: 61 20 62 72 61 6e 63 68 20 69 73 20 61 6e 0a 09 a branch is an..
88a0: 23 20 75 6e 6e 65 63 65 73 73 61 72 79 20 64 65 # unnecessary de
88b0: 6c 65 74 65 2c 20 72 65 6d 6f 76 65 20 69 74 2e lete, remove it.
88c0: 0a 09 23 0a 09 23 20 49 66 20 61 20 66 69 6c 65 ..#..# If a file
88d0: 20 69 73 20 61 64 64 65 64 20 6f 6e 20 61 20 62 is added on a b
88e0: 72 61 6e 63 68 20 28 77 68 65 74 68 65 72 20 6f ranch (whether o
88f0: 72 20 6e 6f 74 20 69 74 20 61 6c 72 65 61 64 79 r not it already
8900: 0a 09 23 20 65 78 69 73 74 65 64 20 6f 6e 20 74 ..# existed on t
8910: 72 75 6e 6b 29 2c 20 74 68 65 6e 20 6e 65 77 20 runk), then new
8920: 76 65 72 73 69 6f 6e 73 20 6f 66 20 43 56 53 20 versions of CVS
8930: 61 64 64 20 61 20 66 69 72 73 74 0a 09 23 20 62 add a first..# b
8940: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 69 ranch revision i
8950: 6e 20 74 68 65 20 27 64 65 61 64 27 20 73 74 61 n the 'dead' sta
8960: 74 65 20 28 74 6f 20 69 6e 64 69 63 61 74 65 20 te (to indicate
8970: 74 68 61 74 20 74 68 65 0a 09 23 20 66 69 6c 65 that the..# file
8980: 20 64 69 64 20 6e 6f 74 20 65 78 69 73 74 20 6f did not exist o
8990: 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 68 65 n the branch whe
89a0: 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 61 73 n the branch was
89b0: 0a 09 23 20 63 72 65 61 74 65 64 29 20 66 6f 6c ..# created) fol
89c0: 6c 6f 77 65 64 20 62 79 20 74 68 65 20 73 65 63 lowed by the sec
89d0: 6f 6e 64 20 62 72 61 6e 63 68 20 72 65 76 69 73 ond branch revis
89e0: 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20 61 6e ion, which is an
89f0: 0a 09 23 20 61 64 64 2e 20 20 57 68 65 6e 20 77 ..# add. When w
8a00: 65 20 65 6e 63 6f 75 6e 74 65 72 20 74 68 69 73 e encounter this
8a10: 20 73 69 74 75 61 74 69 6f 6e 2c 20 77 65 20 73 situation, we s
8a20: 65 76 65 72 20 74 68 65 20 62 72 61 6e 63 68 0a ever the branch.
8a30: 09 23 20 66 72 6f 6d 20 74 72 75 6e 6b 20 61 6e .# from trunk an
8a40: 64 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 72 d delete the fir
8a50: 73 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 st branch revisi
8a60: 6f 6e 2e 0a 0a 09 23 20 41 74 20 74 68 69 73 20 on....# At this
8a70: 70 6f 69 6e 74 20 77 65 20 6d 61 79 20 68 61 76 point we may hav
8a80: 65 20 61 6c 72 65 61 64 79 20 6d 75 6c 74 69 70 e already multip
8a90: 6c 65 20 72 6f 6f 74 73 20 69 6e 20 6d 79 72 6f le roots in myro
8aa0: 6f 74 73 2c 0a 09 23 20 77 65 20 68 61 76 65 20 ots,..# we have
8ab0: 74 6f 20 70 72 6f 63 65 73 73 20 74 68 65 6d 20 to process them
8ac0: 61 6c 6c 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72 all....foreach r
8ad0: 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 oot [$self Lines
8ae0: 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b OfDevelopment] {
8af0: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 .. if {[$root
8b00: 20 69 73 6e 65 65 64 65 64 62 72 61 6e 63 68 64 isneededbranchd
8b10: 65 6c 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 el]} continue..
8b20: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 32 20 66 log write 2 f
8b30: 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e ile "Removing un
8b40: 6e 65 63 65 73 73 61 72 79 20 69 6e 69 74 69 61 necessary initia
8b50: 6c 20 62 72 61 6e 63 68 20 64 65 6c 65 74 65 20 l branch delete
8b60: 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22 0a 0a [$root revnr]"..
8b70: 09 20 20 20 20 73 65 74 20 62 72 61 6e 63 68 20 . set branch
8b80: 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 [$root parentbra
8b90: 6e 63 68 5d 0a 09 20 20 20 20 73 65 74 20 70 61 nch].. set pa
8ba0: 72 65 6e 74 20 5b 24 72 6f 6f 74 20 70 61 72 65 rent [$root pare
8bb0: 6e 74 5d 0a 09 20 20 20 20 73 65 74 20 63 68 69 nt].. set chi
8bc0: 6c 64 20 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 ld [$root child
8bd0: 5d 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 20 ]... ldelete
8be0: 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 myroots $root..
8bf0: 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f lappend myroo
8c00: 74 73 20 24 63 68 69 6c 64 0a 0a 09 20 20 20 20 ts $child...
8c10: 24 62 72 61 6e 63 68 20 63 75 74 62 72 61 6e 63 $branch cutbranc
8c20: 68 70 61 72 65 6e 74 0a 09 20 20 20 20 24 62 72 hparent.. $br
8c30: 61 6e 63 68 20 63 75 74 63 68 69 6c 64 0a 09 20 anch cutchild..
8c40: 20 20 20 24 63 68 69 6c 64 20 20 63 75 74 66 72 $child cutfr
8c50: 6f 6d 70 61 72 65 6e 74 0a 0a 09 20 20 20 20 24 omparent... $
8c60: 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c 64 20 branch setchild
8c70: 20 20 20 20 20 20 20 24 63 68 69 6c 64 0a 09 20 $child..
8c80: 20 20 20 24 63 68 69 6c 64 20 20 73 65 74 70 61 $child setpa
8c90: 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e rentbranch $bran
8ca0: 63 68 0a 0a 09 20 20 20 20 24 70 61 72 65 6e 74 ch... $parent
8cb0: 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 removebranch
8cc0: 20 20 20 20 20 24 62 72 61 6e 63 68 0a 09 20 20 $branch..
8cd0: 20 20 24 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 $parent remove
8ce0: 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 72 childonbranch $r
8cf0: 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 oot..}..return.
8d00: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
8d10: 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d LinesOfDevelopm
8d20: 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 44 65 74 65 ent {} {..# Dete
8d30: 72 6d 69 6e 65 20 61 6c 6c 20 6c 69 6e 65 73 20 rmine all lines
8d40: 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 of development f
8d50: 6f 72 20 74 68 65 20 66 69 6c 65 2e 20 54 68 69 or the file. Thi
8d60: 73 20 61 72 65 0a 09 23 20 74 68 65 20 6b 6e 6f s are..# the kno
8d70: 77 6e 20 72 6f 6f 74 73 2c 20 61 6e 64 20 74 68 wn roots, and th
8d80: 65 20 72 6f 6f 74 20 6f 66 20 61 6c 6c 20 62 72 e root of all br
8d90: 61 6e 63 68 65 73 20 66 6f 75 6e 64 20 6f 6e 20 anches found on
8da0: 74 68 65 0a 09 23 20 6c 69 6e 65 20 6f 66 20 70 the..# line of p
8db0: 72 69 6d 61 72 79 20 63 68 69 6c 64 72 65 6e 2e rimary children.
8dc0: 0a 0a 09 73 65 74 20 6c 6f 64 72 6f 6f 74 73 20 ...set lodroots
8dd0: 7b 7d 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 {}..foreach root
8de0: 20 24 6d 79 72 6f 6f 74 73 20 7b 0a 09 20 20 20 $myroots {..
8df0: 20 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 $self AddBranch
8e00: 65 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 edLinesOfDevelop
8e10: 6d 65 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 72 ment lodroots $r
8e20: 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 oot.. lappend
8e30: 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74 0a lodroots $root.
8e40: 09 7d 0a 09 72 65 74 75 72 6e 20 24 6c 6f 64 72 .}..return $lodr
8e50: 6f 6f 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 oots. }..
8e60: 6d 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63 68 method AddBranch
8e70: 65 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 edLinesOfDevelop
8e80: 6d 65 6e 74 20 7b 6c 76 20 72 6f 6f 74 7d 20 7b ment {lv root} {
8e90: 0a 09 75 70 76 61 72 20 31 20 24 6c 76 20 6c 6f ..upvar 1 $lv lo
8ea0: 64 72 6f 6f 74 73 0a 09 77 68 69 6c 65 20 7b 24 droots..while {$
8eb0: 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 root ne ""} {..
8ec0: 20 20 20 66 6f 72 65 61 63 68 20 62 72 61 6e 63 foreach branc
8ed0: 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 h [$root branche
8ee0: 73 5d 20 7b 0a 09 09 69 66 20 7b 21 5b 24 62 72 s] {...if {![$br
8ef0: 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 anch haschild]}
8f00: 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 63 continue...set c
8f10: 68 69 6c 64 20 5b 24 62 72 61 6e 63 68 20 63 68 hild [$branch ch
8f20: 69 6c 64 5d 0a 09 09 23 20 52 65 63 75 72 73 65 ild]...# Recurse
8f30: 20 69 6e 74 6f 20 74 68 65 20 62 72 61 6e 63 68 into the branch
8f40: 20 66 6f 72 20 64 65 65 70 65 72 20 62 72 61 6e for deeper bran
8f50: 63 68 65 73 2e 0a 09 09 24 73 65 6c 66 20 41 64 ches....$self Ad
8f60: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 dBranchedLinesOf
8f70: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 Development lodr
8f80: 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 09 6c 61 oots $child...la
8f90: 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 24 ppend lodroots $
8fa0: 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a 09 20 20 child.. }..
8fb0: 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f set root [$roo
8fc0: 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 t child]..}..ret
8fd0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
8fe0: 65 74 68 6f 64 20 45 78 63 6c 75 64 65 4e 6f 6e ethod ExcludeNon
8ff0: 54 72 75 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e TrunkInformation
9000: 20 7b 7d 20 7b 0a 09 23 20 52 65 6d 6f 76 65 20 {} {..# Remove
9010: 61 6c 6c 20 6e 6f 6e 2d 74 72 75 6e 6b 20 62 72 all non-trunk br
9020: 61 6e 63 68 65 73 2c 20 72 65 76 69 73 69 6f 6e anches, revision
9030: 73 2c 20 61 6e 64 20 74 61 67 73 2e 20 57 65 20 s, and tags. We
9040: 64 6f 0a 09 23 20 6b 65 65 70 20 74 68 65 20 74 do..# keep the t
9050: 61 67 73 20 77 68 69 63 68 20 61 72 65 20 6f 6e ags which are on
9060: 20 74 68 65 20 74 72 75 6e 6b 2e 0a 0a 09 73 65 the trunk....se
9070: 74 20 6e 74 64 62 72 6f 6f 74 20 22 22 0a 09 66 t ntdbroot ""..f
9080: 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 oreach root [$se
9090: 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f lf LinesOfDevelo
90a0: 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 23 20 pment] {.. #
90b0: 4e 6f 74 65 3a 20 48 65 72 65 20 74 68 65 20 6f Note: Here the o
90c0: 72 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 rder of the root
90d0: 73 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2c 0a s is important,.
90e0: 09 20 20 20 20 23 20 69 2e 65 2e 20 74 68 61 74 . # i.e. that
90f0: 20 77 65 20 67 65 74 20 74 68 65 6d 20 69 6e 20 we get them in
9100: 64 65 70 74 68 20 66 69 72 73 74 20 6f 72 64 65 depth first orde
9110: 72 2e 20 54 68 69 73 20 65 6e 73 75 72 65 73 0a r. This ensures.
9120: 09 20 20 20 20 23 20 74 68 61 74 20 74 68 65 20 . # that the
9130: 72 65 6d 6f 76 61 6c 20 6f 66 20 61 20 62 72 61 removal of a bra
9140: 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 nch happens only
9150: 20 61 66 74 65 72 20 74 68 65 0a 09 20 20 20 20 after the..
9160: 23 20 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e # branches spawn
9170: 65 64 20 66 72 6f 6d 20 69 74 20 77 65 72 65 20 ed from it were
9180: 72 65 6d 6f 76 65 64 2e 20 4f 74 68 65 72 77 69 removed. Otherwi
9190: 73 65 20 74 68 65 0a 09 20 20 20 20 23 20 73 79 se the.. # sy
91a0: 73 74 65 6d 20 6d 69 67 68 74 20 74 72 79 20 74 stem might try t
91b0: 6f 20 61 63 63 65 73 73 20 64 65 6c 65 74 65 64 o access deleted
91c0: 20 6f 62 6a 65 63 74 73 2e 0a 0a 09 20 20 20 20 objects....
91d0: 23 20 44 6f 20 6e 6f 74 20 65 78 63 6c 75 64 65 # Do not exclude
91e0: 20 74 68 65 20 74 72 75 6e 6b 2e 0a 09 20 20 20 the trunk...
91f0: 20 69 66 20 7b 5b 5b 24 72 6f 6f 74 20 6c 6f 64 if {[[$root lod
9200: 5d 20 69 73 74 72 75 6e 6b 5d 7d 20 63 6f 6e 74 ] istrunk]} cont
9210: 69 6e 75 65 0a 09 20 20 20 20 24 73 65 6c 66 20 inue.. $self
9220: 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20 24 72 ExcludeBranch $r
9230: 6f 6f 74 20 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a oot ntdbroot..}.
9240: 0a 09 69 66 20 7b 24 6e 74 64 62 72 6f 6f 74 20 ..if {$ntdbroot
9250: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 73 ne ""} {.. $s
9260: 65 6c 66 20 47 72 61 66 74 4e 54 44 42 32 54 72 elf GraftNTDB2Tr
9270: 75 6e 6b 20 24 6e 74 64 62 72 6f 6f 74 0a 09 7d unk $ntdbroot..}
9280: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
9290: 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63 6c 75 method Exclu
92a0: 64 65 42 72 61 6e 63 68 20 7b 72 6f 6f 74 20 6e deBranch {root n
92b0: 76 7d 20 7b 0a 09 23 20 45 78 63 6c 75 64 65 20 v} {..# Exclude
92c0: 74 68 65 20 62 72 61 6e 63 68 2f 6c 6f 64 20 73 the branch/lod s
92d0: 74 61 72 74 69 6e 67 20 61 74 20 72 6f 6f 74 2c tarting at root,
92e0: 20 61 20 72 65 76 69 73 69 6f 6e 2e 0a 09 23 0a a revision...#.
92f0: 09 23 20 49 66 20 74 68 65 20 4c 4f 44 20 73 74 .# If the LOD st
9300: 61 72 74 73 20 77 69 74 68 20 6e 6f 6e 2d 74 72 arts with non-tr
9310: 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e unk default bran
9320: 63 68 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 23 ch revisions,..#
9330: 20 77 65 20 6c 65 61 76 65 20 74 68 65 6d 20 69 we leave them i
9340: 6e 20 70 6c 61 63 65 20 61 6e 64 20 64 6f 20 6e n place and do n
9350: 6f 74 20 64 65 6c 65 74 65 20 74 68 65 20 62 72 ot delete the br
9360: 61 6e 63 68 2e 20 49 6e 20 74 68 61 74 0a 09 23 anch. In that..#
9370: 20 63 61 73 65 20 74 68 65 20 63 6f 6d 6d 61 6e case the comman
9380: 64 20 73 65 74 73 20 74 68 65 20 76 61 72 69 61 d sets the varia
9390: 62 6c 65 20 69 6e 20 4e 56 20 73 6f 20 74 68 61 ble in NV so tha
93a0: 74 20 77 65 20 63 61 6e 0a 09 23 20 6c 61 74 65 t we can..# late
93b0: 72 20 72 65 77 6f 72 6b 20 74 68 65 73 65 20 72 r rework these r
93c0: 65 76 69 73 6f 6e 73 20 74 6f 20 62 65 20 70 75 evisons to be pu
93d0: 72 65 6c 79 20 74 72 75 6e 6b 2e 0a 0a 09 69 66 rely trunk....if
93e0: 20 7b 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 65 66 {[$root isondef
93f0: 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 aultbranch]} {..
9400: 20 20 20 20 23 20 48 61 6e 64 6c 69 6e 67 20 61 # Handling a
9410: 20 4e 54 44 42 2e 20 54 68 69 73 20 62 72 61 6e NTDB. This bran
9420: 63 68 20 6d 61 79 20 63 6f 6e 73 69 73 74 73 20 ch may consists
9430: 6e 6f 74 20 6f 6e 6c 79 20 6f 66 0a 09 20 20 20 not only of..
9440: 20 23 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e # NTDB revision
9450: 73 2c 20 62 75 74 20 61 6c 73 6f 20 73 6f 6d 65 s, but also some
9460: 20 6e 6f 6e 2d 4e 54 44 42 2e 20 54 68 65 20 6c non-NTDB. The l
9470: 61 74 74 65 72 20 61 72 65 0a 09 20 20 20 20 23 atter are.. #
9480: 20 74 72 75 6c 79 20 6f 6e 20 61 20 62 72 61 6e truly on a bran
9490: 63 68 20 61 6e 64 20 68 61 76 65 20 74 6f 20 62 ch and have to b
94a0: 65 20 65 78 63 6c 75 64 65 64 2e 20 54 68 65 20 e excluded. The
94b0: 66 6f 6c 6c 6f 77 69 6e 67 0a 09 20 20 20 20 23 following.. #
94c0: 20 6c 6f 6f 70 20 64 65 74 65 72 6d 69 6e 65 73 loop determines
94d0: 20 69 66 20 74 68 65 72 65 20 61 72 65 20 73 75 if there are su
94e0: 63 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 ch revisions....
94f0: 20 20 20 20 75 70 76 61 72 20 31 20 24 6e 76 20 upvar 1 $nv
9500: 6e 74 64 62 72 6f 6f 74 0a 09 20 20 20 20 73 65 ntdbroot.. se
9510: 74 20 6e 74 64 62 72 6f 6f 74 20 24 72 6f 6f 74 t ntdbroot $root
9520: 0a 09 20 20 20 20 24 72 6f 6f 74 20 63 75 74 66 .. $root cutf
9530: 72 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 0a romparentbranch.
9540: 0a 09 20 20 20 20 73 65 74 20 72 65 76 20 24 72 .. set rev $r
9550: 6f 6f 74 0a 09 20 20 20 20 77 68 69 6c 65 20 7b oot.. while {
9560: 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 $rev ne ""} {...
9570: 24 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 $rev removeallbr
9580: 61 6e 63 68 65 73 0a 09 09 23 20 53 65 65 20 6e anches...# See n
9590: 6f 74 65 20 5b 78 5d 2e 0a 0a 09 09 69 66 20 7b ote [x].....if {
95a0: 5b 24 72 65 76 20 69 73 6f 6e 64 65 66 61 75 6c [$rev isondefaul
95b0: 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 20 20 tbranch]} {...
95c0: 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 set rev [$rev
95d0: 63 68 69 6c 64 5d 0a 09 09 7d 20 65 6c 73 65 20 child]...} else
95e0: 7b 0a 09 09 20 20 20 20 62 72 65 61 6b 0a 09 09 {... break...
95f0: 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 }.. }... #
9600: 20 72 65 76 20 6e 6f 77 20 63 6f 6e 74 61 69 6e rev now contain
9610: 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d s the first non-
9620: 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 20 61 66 NTDB revision af
9630: 74 65 72 20 74 68 65 0a 09 20 20 20 20 23 20 4e ter the.. # N
9640: 54 44 42 2c 20 6f 72 20 69 73 20 65 6d 70 74 79 TDB, or is empty
9650: 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 if there is no
9660: 73 75 63 68 2e 20 49 66 20 77 65 20 68 61 76 65 such. If we have
9670: 20 73 6f 6d 65 0a 09 20 20 20 20 23 20 74 68 65 some.. # the
9680: 79 20 68 61 76 65 20 74 6f 20 72 65 6d 6f 76 65 y have to remove
9690: 64 2e 0a 0a 09 20 20 20 20 69 66 20 7b 24 72 65 d.... if {$re
96a0: 76 20 6e 65 20 22 22 7d 20 20 7b 0a 09 09 73 65 v ne ""} {...se
96b0: 74 20 6c 61 73 74 6e 74 64 62 20 5b 24 72 65 76 t lastntdb [$rev
96c0: 20 70 61 72 65 6e 74 5d 0a 09 09 24 6c 61 73 74 parent]...$last
96d0: 6e 74 64 62 20 63 75 74 66 72 6f 6d 63 68 69 6c ntdb cutfromchil
96e0: 64 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 76 20 d...while {$rev
96f0: 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 24 ne ""} {... $
9700: 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 rev removealltag
9710: 73 0a 09 09 20 20 20 20 24 72 65 76 20 72 65 6d s... $rev rem
9720: 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 oveallbranches..
9730: 09 20 20 20 20 23 20 4e 6f 74 65 20 5b 78 5d 3a . # Note [x]:
9740: 20 57 65 20 6d 61 79 20 73 74 69 6c 6c 20 68 61 We may still ha
9750: 76 65 20 68 61 64 20 62 72 61 6e 63 68 65 73 20 ve had branches
9760: 6f 6e 20 74 68 65 0a 09 09 20 20 20 20 23 20 72 on the... # r
9770: 65 76 69 73 69 6f 6e 2e 20 42 72 61 6e 63 68 65 evision. Branche
9780: 73 20 77 69 74 68 6f 75 74 20 72 65 76 69 73 69 s without revisi
9790: 6f 6e 73 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 ons committed...
97a0: 20 20 20 20 23 20 6f 6e 20 74 68 65 6d 20 64 6f # on them do
97b0: 20 6e 6f 74 20 73 68 6f 77 20 75 70 20 69 6e 20 not show up in
97c0: 74 68 65 20 6c 69 73 74 20 6f 66 20 72 6f 6f 74 the list of root
97d0: 73 20 61 6b 61 0a 09 09 20 20 20 20 23 20 6c 69 s aka... # li
97e0: 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 nes of developme
97f0: 6e 74 2e 0a 09 09 20 20 20 20 73 65 74 20 72 65 nt.... set re
9800: 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 v [$rev child]..
9810: 09 7d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 72 .}.. }.. r
9820: 65 74 75 72 6e 0a 09 7d 0a 0a 09 23 20 4e 6f 20 eturn..}...# No
9830: 4e 54 44 42 20 73 74 75 66 66 20 74 6f 20 64 65 NTDB stuff to de
9840: 61 6c 20 77 69 74 68 2e 20 46 69 72 73 74 20 64 al with. First d
9850: 65 6c 65 74 65 20 74 68 65 20 62 72 61 6e 63 68 elete the branch
9860: 20 6f 62 6a 65 63 74 0a 09 23 20 69 74 73 65 6c object..# itsel
9870: 66 2c 20 61 66 74 65 72 20 63 75 74 74 69 6e 67 f, after cutting
9880: 20 61 6c 6c 20 74 68 65 20 76 61 72 69 6f 75 73 all the various
9890: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0a 0a 09 connections....
98a0: 73 65 74 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f set branch [$roo
98b0: 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a t parentbranch].
98c0: 09 69 66 20 7b 24 62 72 61 6e 63 68 20 6e 65 20 .if {$branch ne
98d0: 22 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 62 ""} {.. set b
98e0: 72 61 6e 63 68 70 61 72 65 6e 74 20 5b 24 62 72 ranchparent [$br
98f0: 61 6e 63 68 20 70 61 72 65 6e 74 5d 0a 09 20 20 anch parent]..
9900: 20 20 24 62 72 61 6e 63 68 70 61 72 65 6e 74 20 $branchparent
9910: 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 20 removebranch
9920: 20 20 20 20 24 62 72 61 6e 63 68 0a 09 20 20 20 $branch..
9930: 20 24 62 72 61 6e 63 68 70 61 72 65 6e 74 20 72 $branchparent r
9940: 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e emovechildonbran
9950: 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 0a 09 23 20 ch $root..}...#
9960: 54 68 65 20 72 6f 6f 74 20 69 73 20 6e 6f 20 73 The root is no s
9970: 75 63 68 20 61 6e 79 20 6c 6f 6e 67 65 72 20 65 uch any longer e
9980: 69 74 68 65 72 2e 0a 09 6c 64 65 6c 65 74 65 20 ither...ldelete
9990: 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 0a 09 myroots $root...
99a0: 23 20 4e 6f 77 20 67 6f 20 74 68 72 6f 75 67 68 # Now go through
99b0: 20 74 68 65 20 6c 69 6e 65 20 61 6e 64 20 72 65 the line and re
99c0: 6d 6f 76 65 20 61 6c 6c 20 69 74 73 20 72 65 76 move all its rev
99d0: 69 73 69 6f 6e 73 2e 0a 0a 09 77 68 69 6c 65 20 isions....while
99e0: 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a {$root ne ""} {.
99f0: 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 . $root remov
9a00: 65 61 6c 6c 74 61 67 73 0a 09 20 20 20 20 24 72 ealltags.. $r
9a10: 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 oot removeallbra
9a20: 6e 63 68 65 73 0a 09 20 20 20 20 23 20 4e 6f 74 nches.. # Not
9a30: 65 3a 20 53 65 65 20 74 68 65 20 6e 6f 74 65 20 e: See the note
9a40: 5b 78 5d 2e 0a 0a 09 20 20 20 20 23 20 46 72 6f [x].... # Fro
9a50: 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74 68 m cvs2svn: If th
9a60: 69 73 20 69 73 20 74 68 65 20 6c 61 73 74 20 64 is is the last d
9a70: 65 66 61 75 6c 74 20 72 65 76 69 73 69 6f 6e 20 efault revision
9a80: 6f 6e 20 61 0a 09 20 20 20 20 23 20 6e 6f 6e 2d on a.. # non-
9a90: 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 trunk default br
9aa0: 61 6e 63 68 20 66 6f 6c 6c 6f 77 65 64 20 62 79 anch followed by
9ab0: 20 61 20 31 2e 32 20 72 65 76 69 73 69 6f 6e 2c a 1.2 revision,
9ac0: 0a 09 20 20 20 20 23 20 74 68 65 6e 20 74 68 65 .. # then the
9ad0: 20 31 2e 32 20 72 65 76 69 73 69 6f 6e 20 64 65 1.2 revision de
9ae0: 70 65 6e 64 73 20 6f 6e 20 74 68 69 73 20 6f 6e pends on this on
9af0: 65 2e 20 20 46 49 58 4d 45 3a 20 49 74 20 69 73 e. FIXME: It is
9b00: 0a 09 20 20 20 20 23 20 71 75 65 73 74 69 6f 6e .. # question
9b10: 61 62 6c 65 20 77 68 65 74 68 65 72 20 74 68 69 able whether thi
9b20: 73 20 68 61 6e 64 6c 69 6e 67 20 69 73 20 63 6f s handling is co
9b30: 72 72 65 63 74 2c 20 73 69 6e 63 65 20 74 68 65 rrect, since the
9b40: 0a 09 20 20 20 20 23 20 6e 6f 6e 2d 74 72 75 6e .. # non-trun
9b50: 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 k default branch
9b60: 20 72 65 76 69 73 69 6f 6e 73 20 61 66 66 65 63 revisions affec
9b70: 74 20 74 72 75 6e 6b 20 61 6e 64 0a 09 20 20 20 t trunk and..
9b80: 20 23 20 73 68 6f 75 6c 64 20 74 68 65 72 65 66 # should theref
9b90: 6f 72 65 20 6e 6f 74 20 6a 75 73 74 20 62 65 20 ore not just be
9ba0: 64 69 73 63 61 72 64 65 64 20 65 76 65 6e 20 69 discarded even i
9bb0: 66 0a 09 20 20 20 20 23 20 2d 2d 74 72 75 6e 6b f.. # --trunk
9bc0: 2d 6f 6e 6c 79 2e 0a 0a 09 20 20 20 20 69 66 20 -only.... if
9bd0: 7b 5b 24 72 6f 6f 74 20 68 61 73 64 65 66 61 75 {[$root hasdefau
9be0: 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 7d 20 ltbranchchild]}
9bf0: 7b 0a 09 09 73 65 74 20 6e 74 64 62 63 68 69 6c {...set ntdbchil
9c00: 64 20 5b 24 72 6f 6f 74 20 64 65 66 61 75 6c 74 d [$root default
9c10: 62 72 61 6e 63 68 63 68 69 6c 64 5d 0a 09 09 69 branchchild]...i
9c20: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
9c30: 7b 0a 09 09 20 20 20 20 5b 24 6e 74 64 62 63 68 {... [$ntdbch
9c40: 69 6c 64 20 64 65 66 61 75 6c 74 62 72 61 6e 63 ild defaultbranc
9c50: 68 70 61 72 65 6e 74 5d 20 65 71 20 24 6e 74 64 hparent] eq $ntd
9c60: 62 63 68 69 6c 64 0a 09 09 7d 20 7b 6e 74 64 62 bchild...} {ntdb
9c70: 20 2d 20 74 72 75 6e 6b 20 6c 69 6e 6b 61 67 65 - trunk linkage
9c80: 20 62 72 6f 6b 65 6e 7d 0a 09 09 24 6e 74 64 62 broken}...$ntdb
9c90: 63 68 69 6c 64 20 63 75 74 64 65 66 61 75 6c 74 child cutdefault
9ca0: 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 09 69 branchparent...i
9cb0: 66 20 7b 5b 24 6e 74 64 62 63 68 69 6c 64 20 68 f {[$ntdbchild h
9cc0: 61 73 70 61 72 65 6e 74 5d 7d 20 7b 0a 09 09 20 asparent]} {...
9cd0: 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f lappend myroo
9ce0: 74 73 20 5b 24 6e 74 64 62 63 68 69 6c 64 20 70 ts [$ntdbchild p
9cf0: 61 72 65 6e 74 5d 0a 09 09 7d 0a 09 20 20 20 20 arent]...}..
9d00: 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74 }... set root
9d10: 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 [$root child]..
9d20: 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d }...return. }
9d30: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 47 72 61 .. method Gra
9d40: 66 74 4e 54 44 42 32 54 72 75 6e 6b 20 7b 72 6f ftNTDB2Trunk {ro
9d50: 6f 74 7d 20 7b 0a 09 23 20 57 65 20 63 61 6e 20 ot} {..# We can
9d60: 6e 6f 77 20 67 72 61 66 74 20 74 68 65 20 6e 6f now graft the no
9d70: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 n-trunk default
9d80: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 branch revisions
9d90: 20 74 6f 0a 09 23 20 74 72 75 6e 6b 2e 20 54 68 to..# trunk. Th
9da0: 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64 ey should alread
9db0: 79 20 62 65 20 61 6c 6f 6e 65 20 6f 6e 20 61 20 y be alone on a
9dc0: 43 56 53 42 72 61 6e 63 68 2d 6c 65 73 73 0a 09 CVSBranch-less..
9dd0: 23 20 62 72 61 6e 63 68 2e 0a 0a 09 69 6e 74 65 # branch....inte
9de0: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 21 5b grity assert {![
9df0: 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 62 $root hasparentb
9e00: 72 61 6e 63 68 5d 7d 20 7b 4e 54 44 42 20 72 6f ranch]} {NTDB ro
9e10: 6f 74 20 73 74 69 6c 6c 20 68 61 73 20 69 74 73 ot still has its
9e20: 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 7d 0a branch symbol}.
9e30: 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 .integrity asser
9e40: 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73 62 72 t {![$root hasbr
9e50: 61 6e 63 68 65 73 5d 7d 20 20 20 20 20 7b 4e 54 anches]} {NT
9e60: 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 61 DB root still ha
9e70: 73 20 73 70 61 77 6e 65 64 20 62 72 61 6e 63 68 s spawned branch
9e80: 65 73 7d 0a 0a 09 73 65 74 20 6c 61 73 74 20 24 es}...set last $
9e90: 72 6f 6f 74 0a 09 77 68 69 6c 65 20 7b 5b 24 6c root..while {[$l
9ea0: 61 73 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b ast haschild]} {
9eb0: 73 65 74 20 6c 61 73 74 20 5b 24 6c 61 73 74 20 set last [$last
9ec0: 63 68 69 6c 64 5d 7d 0a 0a 09 69 66 20 7b 5b 24 child]}...if {[$
9ed0: 6c 61 73 74 20 68 61 73 64 65 66 61 75 6c 74 62 last hasdefaultb
9ee0: 72 61 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 0a ranchchild]} {..
9ef0: 09 20 20 20 20 73 65 74 20 72 65 76 31 32 20 5b . set rev12 [
9f00: 24 6c 61 73 74 20 64 65 66 61 75 6c 74 62 72 61 $last defaultbra
9f10: 6e 63 68 63 68 69 6c 64 5d 0a 09 20 20 20 20 24 nchchild].. $
9f20: 72 65 76 31 32 20 63 75 74 64 65 66 61 75 6c 74 rev12 cutdefault
9f30: 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 20 20 branchparent..
9f40: 20 20 24 6c 61 73 74 20 20 63 75 74 64 65 66 61 $last cutdefa
9f50: 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 0a 0a ultbranchchild..
9f60: 09 20 20 20 20 24 72 65 76 31 32 20 63 68 61 6e . $rev12 chan
9f70: 67 65 70 61 72 65 6e 74 20 24 6c 61 73 74 0a 09 geparent $last..
9f80: 20 20 20 20 24 6c 61 73 74 20 20 63 68 61 6e 67 $last chang
9f90: 65 63 68 69 6c 64 20 24 72 65 76 31 32 0a 0a 09 echild $rev12...
9fa0: 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f ldelete myro
9fb0: 6f 74 73 20 24 72 65 76 31 32 0a 0a 09 20 20 20 ots $rev12...
9fc0: 20 23 20 4e 6f 74 65 20 61 6e 64 20 72 65 6d 65 # Note and reme
9fd0: 6d 62 65 72 20 74 68 61 74 20 74 68 65 20 74 79 mber that the ty
9fe0: 70 65 20 6f 66 20 72 65 76 31 32 20 77 61 73 20 pe of rev12 was
9ff0: 61 6c 72 65 61 64 79 0a 09 20 20 20 20 23 20 61 already.. # a
a000: 64 6a 75 73 74 65 64 20 62 79 20 41 64 6a 75 73 djusted by Adjus
a010: 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 tNonTrunkDefault
a020: 42 72 61 6e 63 68 2c 20 73 6f 20 77 65 20 64 6f Branch, so we do
a030: 6e 27 74 0a 09 20 20 20 20 23 20 68 61 76 65 20 n't.. # have
a040: 74 6f 20 63 68 61 6e 67 65 20 69 74 73 20 74 79 to change its ty
a050: 70 65 20 68 65 72 65 2e 0a 09 7d 0a 0a 09 77 68 pe here...}...wh
a060: 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 ile {$root ne ""
a070: 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f 74 20 73 } {.. $root s
a080: 65 74 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 etondefaultbranc
a090: 68 20 30 0a 09 20 20 20 20 24 72 6f 6f 74 20 73 h 0.. $root s
a0a0: 65 74 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 etlod $mytrunk..
a0b0: 20 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 foreach tag
a0c0: 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09 [$root tags] {..
a0d0: 09 24 74 61 67 20 73 65 74 6c 6f 64 20 24 6d 79 .$tag setlod $my
a0e0: 74 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 09 20 20 trunk.. }..
a0f0: 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f set root [$roo
a100: 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 0a 20 20 20 t child]..}..
a110: 20 20 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 return.
a120: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 63 }.. method Ac
a130: 74 69 76 65 20 7b 7d 20 7b 0a 09 73 65 74 20 72 tive {} {..set r
a140: 65 76 69 73 69 6f 6e 73 20 7b 7d 0a 09 73 65 74 evisions {}..set
a150: 20 73 79 6d 62 6f 6c 73 20 20 20 7b 7d 0a 0a 09 symbols {}...
a160: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 foreach root [$s
a170: 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c elf LinesOfDevel
a180: 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 opment] {.. i
a190: 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 f {[$root haspar
a1a0: 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 20 6c 61 entbranch]} { la
a1b0: 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 5b 24 ppend symbols [$
a1c0: 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63 root parentbranc
a1d0: 68 5d 20 7d 0a 09 20 20 20 20 77 68 69 6c 65 20 h] }.. while
a1e0: 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a {$root ne ""} {.
a1f0: 09 09 6c 61 70 70 65 6e 64 20 72 65 76 69 73 69 ..lappend revisi
a200: 6f 6e 73 20 24 72 6f 6f 74 0a 09 09 66 6f 72 65 ons $root...fore
a210: 61 63 68 20 74 61 67 20 20 20 20 5b 24 72 6f 6f ach tag [$roo
a220: 74 20 74 61 67 73 5d 20 20 20 20 20 7b 20 6c 61 t tags] { la
a230: 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 74 ppend symbols $t
a240: 61 67 20 20 20 20 7d 0a 09 09 66 6f 72 65 61 63 ag }...foreac
a250: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 h branch [$root
a260: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 20 20 branches] {...
a270: 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 integrity asse
a280: 72 74 20 7b 0a 09 09 09 5b 24 62 72 61 6e 63 68 rt {....[$branch
a290: 20 70 61 72 65 6e 74 5d 20 65 71 20 24 72 6f 6f parent] eq $roo
a2a0: 74 0a 09 09 20 20 20 20 7d 20 7b 42 61 63 6b 72 t... } {Backr
a2b0: 65 66 65 72 65 6e 63 65 20 62 72 61 6e 63 68 20 eference branch
a2c0: 74 6f 20 69 74 73 20 72 6f 6f 74 20 69 73 20 6d to its root is m
a2d0: 69 73 73 69 6e 67 20 6f 72 20 77 72 6f 6e 67 7d issing or wrong}
a2e0: 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 73 ... lappend s
a2f0: 79 6d 62 6f 6c 73 20 24 62 72 61 6e 63 68 0a 09 ymbols $branch..
a300: 09 7d 0a 09 09 73 65 74 20 6c 6f 64 20 5b 24 72 .}...set lod [$r
a310: 6f 6f 74 20 6c 6f 64 5d 0a 09 09 69 66 20 7b 21 oot lod]...if {!
a320: 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 7d 20 [$lod istrunk]}
a330: 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 74 {... integrit
a340: 79 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b 24 y assert {....[$
a350: 6c 6f 64 20 68 61 73 63 68 69 6c 64 5d 0a 09 09 lod haschild]...
a360: 20 20 20 20 7d 20 7b 42 72 61 6e 63 68 20 69 73 } {Branch is
a370: 20 4c 4f 44 20 73 79 6d 62 6f 6c 20 77 69 74 68 LOD symbol with
a380: 6f 75 74 20 72 65 76 69 73 69 6f 6e 73 7d 0a 09 out revisions}..
a390: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 73 79 6d . lappend sym
a3a0: 62 6f 6c 73 20 24 6c 6f 64 0a 09 09 7d 0a 09 09 bols $lod...}...
a3b0: 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 set root [$root
a3c0: 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 09 7d child].. }..}
a3d0: 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 ...return [list
a3e0: 5b 6c 73 6f 72 74 20 2d 75 6e 69 71 75 65 20 2d [lsort -unique -
a3f0: 64 69 63 74 20 24 72 65 76 69 73 69 6f 6e 73 5d dict $revisions]
a400: 20 5b 6c 73 6f 72 74 20 2d 75 6e 69 71 75 65 20 [lsort -unique
a410: 2d 64 69 63 74 20 24 73 79 6d 62 6f 6c 73 5d 5d -dict $symbols]]
a420: 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20 6d 65 74 . }... met
a430: 68 6f 64 20 41 67 67 72 65 67 61 74 65 53 79 6d hod AggregateSym
a440: 62 6f 6c 44 61 74 61 20 7b 7d 20 7b 0a 09 23 20 bolData {} {..#
a450: 4e 6f 77 20 74 68 61 74 20 74 68 65 20 65 78 61 Now that the exa
a460: 63 74 20 73 65 74 20 6f 66 20 72 65 76 69 73 69 ct set of revisi
a470: 6f 6e 73 20 28 61 6e 64 20 74 68 72 6f 75 67 68 ons (and through
a480: 20 74 68 61 74 0a 09 23 20 62 72 61 6e 63 68 65 that..# branche
a490: 73 20 61 6e 64 20 74 61 67 73 29 20 69 73 20 6b s and tags) is k
a4a0: 6e 6f 77 6e 20 77 65 20 63 61 6e 20 75 70 64 61 nown we can upda
a4b0: 74 65 20 74 68 65 20 61 67 67 72 65 67 61 74 65 te the aggregate
a4c0: 0a 09 23 20 73 79 6d 62 6f 6c 20 73 74 61 74 69 ..# symbol stati
a4d0: 73 74 69 63 73 2e 0a 0a 09 66 6f 72 65 61 63 68 stics....foreach
a4e0: 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e root [$self Lin
a4f0: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d esOfDevelopment]
a500: 20 7b 0a 09 20 20 20 20 73 65 74 20 6c 6f 64 20 {.. set lod
a510: 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a 0a 09 20 20 [$root lod]...
a520: 20 20 23 20 4e 6f 74 65 3a 20 49 66 20 74 68 65 # Note: If the
a530: 20 4c 4f 44 20 69 73 20 74 68 65 20 74 72 75 6e LOD is the trun
a540: 6b 20 74 68 65 20 63 6f 75 6e 74 2a 2c 20 65 74 k the count*, et
a550: 63 2e 20 6d 65 74 68 6f 64 73 0a 09 20 20 20 20 c. methods..
a560: 23 20 77 69 6c 6c 20 64 6f 20 6e 6f 74 68 69 6e # will do nothin
a570: 67 2c 20 61 73 20 69 74 20 69 73 20 61 6c 77 61 g, as it is alwa
a580: 79 73 20 70 72 65 73 65 6e 74 20 28 63 61 6e 6e ys present (cann
a590: 6f 74 20 62 65 0a 09 20 20 20 20 23 20 65 78 63 ot be.. # exc
a5a0: 6c 75 64 65 64 29 2c 20 61 6e 64 20 69 73 20 61 luded), and is a
a5b0: 6c 77 61 79 73 20 61 20 62 72 61 6e 63 68 20 74 lways a branch t
a5c0: 6f 6f 2e 0a 0a 09 20 20 20 20 23 20 4c 69 6e 65 oo.... # Line
a5d0: 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 s of development
a5e0: 20 63 6f 75 6e 74 20 61 73 20 62 72 61 6e 63 68 count as branch
a5f0: 65 73 20 61 6e 64 20 68 61 76 65 20 61 20 63 6f es and have a co
a600: 6d 6d 69 74 0a 09 20 20 20 20 23 20 6f 6e 20 74 mmit.. # on t
a610: 68 65 6d 20 28 72 6f 6f 74 29 2e 20 49 66 20 74 hem (root). If t
a620: 68 65 79 20 61 72 65 20 73 74 69 6c 6c 20 61 74 hey are still at
a630: 74 61 63 68 65 64 20 74 6f 20 61 20 74 72 65 65 tached to a tree
a640: 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 65 20 we.. # have
a650: 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20 72 to compute and r
a660: 65 67 69 73 74 65 72 20 70 6f 73 73 69 62 6c 65 egister possible
a670: 20 70 61 72 65 6e 74 73 2e 0a 0a 09 20 20 20 20 parents....
a680: 24 6c 6f 64 20 63 6f 75 6e 74 61 73 62 72 61 6e $lod countasbran
a690: 63 68 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 ch.. $lod cou
a6a0: 6e 74 61 63 6f 6d 6d 69 74 0a 0a 09 20 20 20 20 ntacommit...
a6b0: 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61 if {[$root haspa
a6c0: 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 rentbranch]} {..
a6d0: 09 23 20 4e 6f 74 65 20 6c 6f 64 20 3d 3d 20 5b .# Note lod == [
a6e0: 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e $root parentbran
a6f0: 63 68 5d 0a 09 09 24 6c 6f 64 20 70 6f 73 73 69 ch]...$lod possi
a700: 62 6c 65 70 61 72 65 6e 74 73 0a 09 20 20 20 20 bleparents..
a710: 7d 20 65 6c 73 65 69 66 20 7b 21 5b 24 6c 6f 64 } elseif {![$lod
a720: 20 69 73 74 72 75 6e 6b 5d 20 26 26 20 5b 24 72 istrunk] && [$r
a730: 6f 6f 74 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 oot isondefaultb
a740: 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 23 20 54 68 ranch]} {...# Th
a750: 69 73 20 69 73 20 74 68 65 20 72 6f 6f 74 20 72 is is the root r
a760: 65 76 69 73 69 6f 6e 20 6f 66 20 61 20 64 65 74 evision of a det
a770: 61 63 68 65 64 20 4e 54 44 42 2e 20 57 65 0a 09 ached NTDB. We..
a780: 09 23 20 68 61 76 65 20 74 6f 20 6d 61 6e 75 61 .# have to manua
a790: 6c 6c 79 20 73 65 74 20 74 68 65 20 6f 6e 6c 79 lly set the only
a7a0: 20 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 possible parent
a7b0: 20 66 6f 72 0a 09 09 23 20 74 68 69 73 20 4c 4f for...# this LO
a7c0: 44 2c 20 74 68 65 20 74 72 75 6e 6b 20 69 74 73 D, the trunk its
a7d0: 65 6c 66 2e 0a 0a 09 09 5b 24 6c 6f 64 20 73 79 elf.....[$lod sy
a7e0: 6d 62 6f 6c 5d 20 70 6f 73 73 69 62 6c 65 70 61 mbol] possiblepa
a7f0: 72 65 6e 74 20 24 6d 79 74 72 75 6e 6b 0a 09 20 rent $mytrunk..
a800: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 46 6f 72 }... # For
a810: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 69 the revisions i
a820: 6e 20 74 68 65 20 6c 69 6e 65 20 77 65 20 72 65 n the line we re
a830: 67 69 73 74 65 72 20 74 68 65 69 72 20 62 72 61 gister their bra
a840: 6e 63 68 65 73 0a 09 20 20 20 20 23 20 61 6e 64 nches.. # and
a850: 20 74 61 67 73 20 61 73 20 62 6c 6f 63 6b 65 72 tags as blocker
a860: 73 20 66 6f 72 20 74 68 65 20 6c 6f 64 2c 20 61 s for the lod, a
a870: 6e 64 20 75 70 64 61 74 65 20 74 68 65 20 74 79 nd update the ty
a880: 70 65 0a 09 20 20 20 20 23 20 63 6f 75 6e 74 65 pe.. # counte
a890: 72 73 20 61 73 20 77 65 6c 6c 2e 20 41 73 20 62 rs as well. As b
a8a0: 72 61 6e 63 68 20 73 79 6d 62 6f 6c 73 20 77 69 ranch symbols wi
a8b0: 74 68 6f 75 74 20 63 6f 6d 6d 69 74 73 20 6f 6e thout commits on
a8c0: 0a 09 20 20 20 20 23 20 74 68 65 6d 20 61 72 65 .. # them are
a8d0: 20 6e 6f 74 20 6c 69 73 74 65 64 20 61 73 20 6c not listed as l
a8e0: 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d ines of developm
a8f0: 65 6e 74 2c 20 77 65 20 68 61 76 65 20 74 6f 0a ent, we have to.
a900: 09 20 20 20 20 23 20 63 6f 75 6e 74 20 74 68 65 . # count the
a910: 6d 20 68 65 72 65 20 61 73 20 77 65 6c 6c 2c 20 m here as well,
a920: 61 73 20 70 6c 61 69 6e 20 62 72 61 6e 63 68 65 as plain branche
a930: 73 2e 20 41 74 20 6c 61 73 74 20 77 65 0a 09 20 s. At last we..
a940: 20 20 20 23 20 68 61 76 65 20 74 6f 20 63 6f 6d # have to com
a950: 70 75 74 65 20 61 6e 64 20 72 65 67 69 73 74 65 pute and registe
a960: 72 20 74 68 65 20 70 6f 73 73 69 62 6c 65 20 70 r the possible p
a970: 61 72 65 6e 74 73 20 6f 66 20 74 68 65 0a 09 20 arents of the..
a980: 20 20 20 23 20 74 61 67 73 2c 20 69 6e 20 63 61 # tags, in ca
a990: 73 65 20 74 68 65 79 20 61 72 65 20 6c 61 74 65 se they are late
a9a0: 72 20 63 6f 6e 76 65 72 74 65 64 20 61 73 20 62 r converted as b
a9b0: 72 61 6e 63 68 65 73 2e 0a 0a 09 20 20 20 20 77 ranches.... w
a9c0: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 hile {$root ne "
a9d0: 22 7d 20 7b 0a 09 09 66 6f 72 65 61 63 68 20 62 "} {...foreach b
a9e0: 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 ranch [$root bra
a9f0: 6e 63 68 65 73 5d 20 7b 0a 09 09 20 20 20 20 24 nches] {... $
aa00: 6c 6f 64 20 62 6c 6f 63 6b 65 64 62 79 20 24 62 lod blockedby $b
aa10: 72 61 6e 63 68 0a 09 09 20 20 20 20 24 62 72 61 ranch... $bra
aa20: 6e 63 68 20 70 6f 73 73 69 62 6c 65 70 61 72 65 nch possiblepare
aa30: 6e 74 73 0a 09 09 20 20 20 20 69 66 20 7b 5b 24 nts... if {[$
aa40: 62 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d branch haschild]
aa50: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20 20 } continue...
aa60: 20 24 62 72 61 6e 63 68 20 63 6f 75 6e 74 61 73 $branch countas
aa70: 62 72 61 6e 63 68 0a 09 09 7d 0a 0a 09 09 66 6f branch...}....fo
aa80: 72 65 61 63 68 20 74 61 67 20 5b 24 72 6f 6f 74 reach tag [$root
aa90: 20 74 61 67 73 5d 20 7b 0a 09 09 20 20 20 20 24 tags] {... $
aaa0: 6c 6f 64 20 62 6c 6f 63 6b 65 64 62 79 20 24 74 lod blockedby $t
aab0: 61 67 0a 09 09 20 20 20 20 24 74 61 67 20 70 6f ag... $tag po
aac0: 73 73 69 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 ssibleparents...
aad0: 20 20 20 20 24 74 61 67 20 63 6f 75 6e 74 61 73 $tag countas
aae0: 74 61 67 0a 09 09 7d 0a 0a 09 09 73 65 74 20 72 tag...}....set r
aaf0: 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 oot [$root child
ab00: 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 ].. }..}...re
ab10: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
ab20: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
ab30: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
ab40: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 #######. ## C
ab50: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 onfiguration..
ab60: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 pragma -hastyp
ab70: 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 einfo no ; #
ab80: 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 no type introsp
ab90: 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d ection. pragm
aba0: 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 a -hasinfo
abb0: 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a no ; # no obj
abc0: 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f ect introspectio
abd0: 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 n. pragma -ha
abe0: 73 74 79 70 65 6d 65 74 68 6f 64 73 20 6e 6f 20 stypemethods no
abf0: 20 3b 20 23 20 74 79 70 65 20 69 73 20 6e 6f 74 ; # type is not
ac00: 20 72 65 6c 65 76 61 6e 74 2e 0a 0a 20 20 20 20 relevant...
ac10: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
ac20: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
ac30: 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 #######.}..names
ac40: 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a pace eval ::vc::
ac50: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
ac60: 63 76 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 cvs {. namesp
ac70: 61 63 65 20 65 78 70 6f 72 74 20 66 69 6c 65 0a ace export file.
ac80: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 namespace ev
ac90: 61 6c 20 66 69 6c 65 20 7b 0a 09 23 20 49 6d 70 al file {..# Imp
aca0: 6f 72 74 20 6e 6f 74 20 72 65 71 75 69 72 65 64 ort not required
acb0: 2c 20 61 6c 72 65 61 64 79 20 61 20 63 68 69 6c , already a chil
acc0: 64 20 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23 20 d namespace...#
acd0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
ace0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
acf0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 mport::cvs::file
ad00: 3a 3a 72 65 76 0a 09 23 20 6e 61 6d 65 73 70 61 ::rev..# 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 66 69 6c 65 3a 3a 73 79 6d 0a 09 cvs::file::sym..
ad40: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
ad50: 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 ::vc::tools::mi
ad60: 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 65 sc::*..namespace
ad70: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f import ::vc::to
ad80: 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 ols::trouble..na
ad90: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
ada0: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a :vc::tools::log.
adb0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 .namespace impor
adc0: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a t ::vc::fossil::
add0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 62 6c 6f import::cvs::blo
ade0: 62 73 74 6f 72 65 0a 09 6e 61 6d 65 73 70 61 63 bstore..namespac
adf0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
ae00: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
ae10: 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 vs::state..names
ae20: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 pace import ::vc
ae30: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 ::fossil::import
ae40: 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 ::cvs::integrity
ae50: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f ..namespace impo
ae60: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a rt ::vc::fossil:
ae70: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 67 74 :import::cvs::gt
ae80: 63 6f 72 65 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 core. }.}..#
ae90: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
aea0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
aeb0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
aec0: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 ###########.## R
aed0: 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 eady..package pr
aee0: 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c ovide vc::fossil
aef0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 ::import::cvs::f
af00: 69 6c 65 20 31 2e 30 0a 72 65 74 75 72 6e 0a ile 1.0.return.