Artifact ce592fc078fe6cdf3112774b84d31b7e830d7e32:
File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [7208c7ac4d] - Changes to cvs2fossil to import tcllib CVS into fossil on Win32* using ::file instead of file in snit methods to get the core file command * taking care of files that only differ in case in the Attic and the repo on case insensitive FS * passing platform specific
by mjanssen on 2008-01-28 23:57:27.
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 66 69 6c 65 3a 3a 72 65 76 20 20 3b 20 s::file::rev ; 0400: 23 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 72 # CVS per file r 0410: 65 76 69 73 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 evisions..packag 0420: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f e require vc::fo 0430: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv 0440: 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 3b 20 s::file::sym ; 0450: 23 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 73 # CVS per file s 0460: 79 6d 62 6f 6c 73 2e 0a 70 61 63 6b 61 67 65 20 ymbols..package 0470: 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 require vc::foss 0480: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs: 0490: 3a 73 74 61 74 65 20 20 20 20 20 20 3b 20 23 20 :state ; # 04a0: 53 74 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 State storage..p 04b0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 ackage require v 04c0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor 04d0: 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 t::cvs::integrit 04e0: 79 20 20 3b 20 23 20 53 74 61 74 65 20 69 6e 74 y ; # State int 04f0: 65 67 72 69 74 79 20 63 68 65 63 6b 73 2e 0a 70 egrity checks..p 0500: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 ackage require v 0510: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor 0520: 74 3a 3a 63 76 73 3a 3a 67 74 63 6f 72 65 20 20 t::cvs::gtcore 0530: 20 20 20 3b 20 23 20 47 72 61 70 68 20 74 72 61 ; # Graph tra 0540: 76 65 72 73 61 6c 20 63 6f 72 65 2e 0a 70 61 63 versal core..pac 0550: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a kage require vc: 0560: 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 20 :tools::trouble 0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0580: 20 3b 20 23 20 45 72 72 6f 72 20 72 65 70 6f 72 ; # Error repor 0590: 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72 65 ting..package re 05a0: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a quire vc::tools: 05b0: 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20 20 :log 05c0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 55 73 ; # Us 05d0: 65 72 20 66 65 65 64 62 61 63 6b 0a 70 61 63 6b er feedback.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 6d 69 73 63 20 20 20 20 20 tools::misc 0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 0610: 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61 74 74 ; # Text formatt 0620: 69 6e 67 0a 0a 23 20 23 20 23 23 20 23 23 23 20 ing..# # ## ### 0630: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## # 0640: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 ############ ### 0650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 0660: 23 23 0a 23 23 0a 0a 73 6e 69 74 3a 3a 74 79 70 ##.##..snit::typ 0670: 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a e ::vc::fossil:: 0680: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c import::cvs::fil 0690: 65 20 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23 e {. # # ## # 06a0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### ####### 06b0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############. 06c0: 20 20 20 20 23 23 20 50 75 62 6c 69 63 20 41 50 ## Public AP 06d0: 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72 75 63 74 I.. construct 06e0: 6f 72 20 7b 69 64 20 70 61 74 68 20 75 73 72 70 or {id path usrp 06f0: 61 74 68 20 65 78 65 63 75 74 61 62 6c 65 20 70 ath executable p 0700: 72 6f 6a 65 63 74 7d 20 7b 0a 09 73 65 74 20 6d roject} {..set m 0710: 79 69 64 20 20 20 20 20 20 20 20 20 24 69 64 0a yid $id. 0720: 09 73 65 74 20 6d 79 70 61 74 68 20 20 20 20 20 .set mypath 0730: 20 20 24 70 61 74 68 0a 09 73 65 74 20 6d 79 75 $path..set myu 0740: 73 72 70 61 74 68 20 20 20 20 24 75 73 72 70 61 srpath $usrpa 0750: 74 68 0a 09 73 65 74 20 6d 79 65 78 65 63 75 74 th..set myexecut 0760: 61 62 6c 65 20 24 65 78 65 63 75 74 61 62 6c 65 able $executable 0770: 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 63 74 20 ..set myproject 0780: 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73 65 74 $project..set 0790: 20 6d 79 74 72 75 6e 6b 20 20 20 20 20 20 5b 24 mytrunk [$ 07a0: 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e 6b 5d myproject trunk] 07b0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }.. 07c0: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 69 64 method setid 07d0: 20 7b 69 64 7d 20 7b 0a 09 69 6e 74 65 67 72 69 {id} {..integri 07e0: 74 79 20 61 73 73 65 72 74 20 7b 24 6d 79 69 64 ty assert {$myid 07f0: 20 65 71 20 22 22 7d 20 7b 46 69 6c 65 20 27 24 eq ""} {File '$ 0800: 6d 79 70 61 74 68 27 20 61 6c 72 65 61 64 79 20 mypath' already 0810: 68 61 73 20 61 6e 20 69 64 2c 20 27 24 6d 79 69 has an id, '$myi 0820: 64 27 7d 0a 09 73 65 74 20 6d 79 69 64 20 24 69 d'}..set myid $i 0830: 64 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a d..return. }. 0840: 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 64 20 20 . method id 0850: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 {} { return 0860: 24 6d 79 69 64 20 7d 0a 20 20 20 20 6d 65 74 68 $myid }. meth 0870: 6f 64 20 70 61 74 68 20 20 20 20 7b 7d 20 7b 20 od path {} { 0880: 72 65 74 75 72 6e 20 24 6d 79 70 61 74 68 20 7d return $mypath } 0890: 0a 20 20 20 20 6d 65 74 68 6f 64 20 75 73 72 70 . method usrp 08a0: 61 74 68 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 ath {} { return 08b0: 24 6d 79 75 73 72 70 61 74 68 20 7d 0a 20 20 20 $myusrpath }. 08c0: 20 6d 65 74 68 6f 64 20 70 72 6f 6a 65 63 74 20 method project 08d0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 {} { return $myp 08e0: 72 6f 6a 65 63 74 20 7d 0a 0a 20 20 20 20 64 65 roject }.. de 08f0: 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 63 6f legate method co 0900: 6d 6d 69 74 6d 65 73 73 61 67 65 6f 66 20 74 6f mmitmessageof to 0910: 20 6d 79 70 72 6f 6a 65 63 74 0a 0a 20 20 20 20 myproject.. 0920: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### ##### 0930: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ###### 0940: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 4d #######. ## M 0950: 65 74 68 6f 64 73 20 72 65 71 75 69 72 65 64 20 ethods required 0960: 66 6f 72 20 74 68 65 20 63 6c 61 73 73 20 74 6f for the class to 0970: 20 62 65 20 61 20 73 69 6e 6b 20 6f 66 20 74 68 be a sink of th 0980: 65 20 72 63 73 20 70 61 72 73 65 72 0a 0a 20 20 e rcs parser.. 0990: 20 20 23 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 #method begin 09a0: 7b 7d 20 7b 70 75 74 73 20 62 65 67 69 6e 7d 0a {} {puts begin}. 09b0: 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 68 #method seth 09c0: 65 61 64 20 7b 68 7d 20 7b 70 75 74 73 20 68 65 ead {h} {puts he 09d0: 61 64 3d 24 68 7d 0a 20 20 20 20 23 6d 65 74 68 ad=$h}. #meth 09e0: 6f 64 20 73 65 74 70 72 69 6e 63 69 70 61 6c 62 od setprincipalb 09f0: 72 61 6e 63 68 20 7b 62 7d 20 7b 70 75 74 73 20 ranch {b} {puts 0a00: 70 62 3d 24 62 7d 0a 20 20 20 20 23 6d 65 74 68 pb=$b}. #meth 0a10: 6f 64 20 64 65 66 74 61 67 20 7b 73 20 72 7d 20 od deftag {s r} 0a20: 7b 70 75 74 73 20 24 73 3d 24 72 7d 0a 20 20 20 {puts $s=$r}. 0a30: 20 23 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d #method setcomm 0a40: 65 6e 74 20 7b 63 7d 20 7b 70 75 74 73 20 63 6f ent {c} {puts co 0a50: 6d 6d 65 6e 74 3d 24 63 7d 0a 20 20 20 20 23 6d mment=$c}. #m 0a60: 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 20 ethod admindone 0a70: 7b 7d 20 7b 70 75 74 73 20 61 64 6d 69 6e 64 6f {} {puts admindo 0a80: 6e 65 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 ne}. #method 0a90: 64 65 66 20 7b 72 65 76 20 64 61 74 65 20 61 75 def {rev date au 0aa0: 74 68 6f 72 20 73 74 61 74 65 20 6e 65 78 74 20 thor state next 0ab0: 62 72 61 6e 63 68 65 73 7d 20 7b 70 75 74 73 20 branches} {puts 0ac0: 22 64 65 66 20 24 72 65 76 20 24 64 61 74 65 20 "def $rev $date 0ad0: 24 61 75 74 68 6f 72 20 24 73 74 61 74 65 20 24 $author $state $ 0ae0: 6e 65 78 74 20 24 62 72 61 6e 63 68 65 73 22 7d next $branches"} 0af0: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66 . #method def 0b00: 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 65 done {} {puts de 0b10: 66 2d 64 6f 6e 65 7d 0a 20 20 20 20 23 6d 65 74 f-done}. #met 0b20: 68 6f 64 20 73 65 74 64 65 73 63 20 7b 64 7d 20 hod setdesc {d} 0b30: 7b 70 75 74 73 20 64 65 73 63 3d 24 64 7d 0a 20 {puts desc=$d}. 0b40: 20 20 20 23 6d 65 74 68 6f 64 20 65 78 74 65 6e #method exten 0b50: 64 20 7b 72 65 76 20 63 6f 6d 6d 69 74 6d 73 67 d {rev commitmsg 0b60: 20 64 65 6c 74 61 72 61 6e 67 65 7d 20 7b 70 75 deltarange} {pu 0b70: 74 73 20 22 65 78 74 65 6e 64 20 24 63 6f 6d 6d ts "extend $comm 0b80: 69 74 6d 73 67 20 24 64 65 6c 74 61 72 61 6e 67 itmsg $deltarang 0b90: 65 22 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 e"}. #method 0ba0: 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 6f done {} {puts do 0bb0: 6e 65 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 ne}.. # # ## 0bc0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ###### 0bd0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## ############# 0be0: 0a 20 20 20 20 23 23 20 50 65 72 73 69 73 74 65 . ## Persiste 0bf0: 6e 63 65 20 28 70 61 73 73 20 49 49 29 0a 0a 20 nce (pass II).. 0c00: 20 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73 method persis 0c10: 74 20 7b 7d 20 7b 0a 09 23 20 46 69 72 73 74 20 t {} {..# First 0c20: 63 6f 6c 6c 65 63 74 20 74 68 65 20 72 65 61 63 collect the reac 0c30: 68 61 62 6c 65 20 72 65 76 69 73 69 6f 6e 73 20 hable revisions 0c40: 61 6e 64 20 73 79 6d 62 6f 6c 73 2c 20 74 68 65 and symbols, the 0c50: 6e 0a 09 23 20 61 73 73 69 67 6e 20 69 64 27 73 n..# assign id's 0c60: 20 74 6f 20 61 6c 6c 2e 20 54 68 65 79 20 61 72 to all. They ar 0c70: 65 20 73 6f 72 74 65 64 20 73 6f 20 74 68 61 74 e sorted so that 0c80: 20 77 65 20 77 69 6c 6c 20 68 61 76 65 20 69 64 we will have id 0c90: 73 0a 09 23 20 77 68 69 63 68 20 73 6f 72 74 20 s..# which sort 0ca0: 69 6e 20 6f 72 64 65 72 20 6f 66 20 63 72 65 61 in order of crea 0cb0: 74 69 6f 6e 2e 20 54 68 65 6e 20 77 65 20 63 61 tion. Then we ca 0cc0: 6e 20 73 61 76 65 20 74 68 65 6d 2e 20 54 68 69 n save them. Thi 0cd0: 73 0a 09 23 20 69 73 20 64 6f 6e 65 20 62 6f 74 s..# is done bot 0ce0: 74 6f 6d 20 75 70 2e 20 52 65 76 69 73 69 6f 6e tom up. Revision 0cf0: 73 2c 20 74 68 65 6e 20 73 79 6d 62 6f 6c 73 2e s, then symbols. 0d00: 20 5f 5f 4e 4f 54 45 5f 5f 20 54 68 69 73 0a 09 __NOTE__ This.. 0d10: 23 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 62 65 63 # works only bec 0d20: 61 75 73 65 20 73 71 6c 69 74 65 20 69 73 20 6e ause sqlite is n 0d30: 6f 74 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 ot checking fore 0d40: 69 67 6e 20 6b 65 79 0a 09 23 20 72 65 66 65 72 ign key..# refer 0d50: 65 6e 63 65 73 20 64 75 72 69 6e 67 20 69 6e 73 ences during ins 0d60: 65 72 74 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 ert. This allows 0d70: 20 74 6f 20 68 61 76 65 20 64 61 6e 67 6c 69 6e to have danglin 0d80: 67 0a 09 23 20 72 65 66 65 72 65 6e 63 65 73 20 g..# references 0d90: 77 68 69 63 68 20 61 72 65 20 66 69 78 65 64 20 which are fixed 0da0: 6c 61 74 65 72 2e 20 54 68 65 20 6c 6f 6e 67 65 later. The longe 0db0: 73 74 20 64 61 6e 67 6c 69 6e 67 0a 09 23 20 72 st dangling..# r 0dc0: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 66 6f eferences are fo 0dd0: 72 20 74 68 65 20 70 72 6f 6a 65 63 74 20 6c 65 r the project le 0de0: 76 65 6c 20 73 79 6d 62 6f 6c 73 2c 20 74 68 65 vel symbols, the 0df0: 73 65 20 77 65 20 64 6f 0a 09 23 20 6e 6f 74 20 se we do..# not 0e00: 73 61 76 65 20 68 65 72 65 2c 20 62 75 74 20 61 save here, but a 0e10: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 t the end of the 0e20: 20 70 61 73 73 2e 20 57 68 61 74 20 77 65 20 6e pass. What we n 0e30: 65 65 64 20 61 72 65 0a 09 23 20 74 68 65 20 69 eed are..# the i 0e40: 64 73 2c 20 68 65 6e 63 65 20 74 68 65 20 74 77 ds, hence the tw 0e50: 6f 20 70 68 61 73 65 73 2e 0a 0a 09 73 74 72 75 o phases....stru 0e60: 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 ct::list assign 0e70: 5b 24 73 65 6c 66 20 41 63 74 69 76 65 5d 20 72 [$self Active] r 0e80: 65 76 69 73 69 6f 6e 73 20 73 79 6d 62 6f 6c 73 evisions symbols 0e90: 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 72 ..foreach rev $r 0ea0: 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 evisions { $rev 0eb0: 64 65 66 69 64 20 7d 0a 09 66 6f 72 65 61 63 68 defid }..foreach 0ec0: 20 73 79 6d 20 24 73 79 6d 62 6f 6c 73 20 20 20 sym $symbols 0ed0: 7b 20 24 73 79 6d 20 64 65 66 69 64 20 7d 0a 0a { $sym defid }.. 0ee0: 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74 69 .state transacti 0ef0: 6f 6e 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 on {.. foreac 0f00: 68 20 72 65 76 20 24 72 65 76 69 73 69 6f 6e 73 h rev $revisions 0f10: 20 7b 20 24 72 65 76 20 70 65 72 73 69 73 74 20 { $rev persist 0f20: 7d 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 73 }.. foreach s 0f30: 79 6d 20 24 73 79 6d 62 6f 6c 73 20 20 20 7b 20 ym $symbols { 0f40: 24 73 79 6d 20 70 65 72 73 69 73 74 20 7d 0a 09 $sym persist }.. 0f50: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }. 0f60: 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 72 6f 70 . method drop 0f70: 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b {} {..foreach { 0f80: 5f 20 72 65 76 7d 20 20 20 20 5b 61 72 72 61 79 _ rev} [array 0f90: 20 67 65 74 20 6d 79 72 65 76 5d 20 20 20 20 20 get myrev] 0fa0: 20 7b 20 24 72 65 76 20 64 65 73 74 72 6f 79 20 { $rev destroy 0fb0: 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62 72 }..foreach {_ br 0fc0: 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74 anch} [array get 0fd0: 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 20 24 mybranches] { $ 0fe0: 62 72 61 6e 63 68 20 64 65 73 74 72 6f 79 20 7d branch destroy } 0ff0: 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 ..foreach {_ tag 1000: 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 list} [array get 1010: 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 mytags] {.. 1020: 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 foreach tag $tag 1030: 6c 69 73 74 20 7b 20 24 74 61 67 20 64 65 73 74 list { $tag dest 1040: 72 6f 79 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e roy }..}..return 1050: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 . }.. # # 1060: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ### 1070: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ########## 1080: 23 23 23 0a 20 20 20 20 23 23 20 49 6d 70 6c 65 ###. ## Imple 1090: 6d 65 6e 74 20 74 68 65 20 73 69 6e 6b 0a 0a 20 ment the sink.. 10a0: 20 20 20 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 method begin 10b0: 7b 7d 20 7b 23 69 67 6e 6f 72 65 7d 0a 0a 20 20 {} {#ignore}.. 10c0: 20 20 6d 65 74 68 6f 64 20 73 65 74 68 65 61 64 method sethead 10d0: 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 {revnr} {..set 10e0: 6d 79 68 65 61 64 72 65 76 6e 72 20 24 72 65 76 myheadrevnr $rev 10f0: 6e 72 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d nr..return. } 1100: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 .. method set 1110: 70 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20 principalbranch 1120: 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 73 65 {branchnr} {..se 1130: 74 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 24 62 t myprincipal $b 1140: 72 61 6e 63 68 6e 72 0a 09 72 65 74 75 72 6e 0a ranchnr..return. 1150: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho 1160: 64 20 64 65 66 74 61 67 20 7b 6e 61 6d 65 20 72 d deftag {name r 1170: 65 76 6e 72 7d 20 7b 0a 09 23 20 46 55 54 55 52 evnr} {..# FUTUR 1180: 45 3a 20 50 65 72 66 6f 72 6d 20 73 79 6d 62 6f E: Perform symbo 1190: 6c 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e l transformation 11a0: 20 68 65 72 65 2e 0a 0a 09 69 66 20 7b 5b 73 74 here....if {[st 11b0: 72 75 63 74 3a 3a 73 65 74 20 63 6f 6e 74 61 69 ruct::set contai 11c0: 6e 73 20 24 6d 79 73 79 6d 62 6f 6c 73 20 24 6e ns $mysymbols $n 11d0: 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f ame]} {.. tro 11e0: 75 62 6c 65 20 66 61 74 61 6c 20 22 4d 75 6c 74 uble fatal "Mult 11f0: 69 70 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 iple definitions 1200: 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 27 of the symbol ' 1210: 24 6e 61 6d 65 27 20 69 6e 20 27 24 6d 79 70 61 $name' in '$mypa 1220: 74 68 27 22 0a 09 20 20 20 20 72 65 74 75 72 6e th'".. return 1230: 0a 09 7d 0a 0a 09 73 74 72 75 63 74 3a 3a 73 65 ..}...struct::se 1240: 74 20 61 64 64 20 6d 79 73 79 6d 62 6f 6c 73 20 t add mysymbols 1250: 24 6e 61 6d 65 0a 0a 09 69 66 20 7b 5b 72 65 76 $name...if {[rev 1260: 20 69 73 62 72 61 6e 63 68 72 65 76 6e 72 20 24 isbranchrevnr $ 1270: 72 65 76 6e 72 20 2d 3e 20 62 72 61 6e 63 68 6e revnr -> branchn 1280: 72 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 r]} {.. $self 1290: 20 41 64 64 42 72 61 6e 63 68 20 24 6e 61 6d 65 AddBranch $name 12a0: 20 24 62 72 61 6e 63 68 6e 72 0a 09 7d 20 65 6c $branchnr..} el 12b0: 73 65 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 se {.. $self 12c0: 41 64 64 54 61 67 20 24 6e 61 6d 65 20 24 72 65 AddTag $name $re 12d0: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 vnr..}..return. 12e0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method 12f0: 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d 20 setcomment {c} 1300: 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20 20 20 {# ignore}.. 1310: 6d 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 method admindone 1320: 20 7b 7d 20 7b 0a 09 23 20 57 65 20 64 6f 20 6e {} {..# We do n 1330: 6f 74 68 69 6e 67 20 61 74 20 74 68 65 20 62 6f othing at the bo 1340: 75 6e 64 61 72 79 20 6f 66 20 61 64 6d 69 6e 20 undary of admin 1350: 61 6e 64 20 72 65 76 69 73 69 6f 6e 20 64 61 74 and revision dat 1360: 61 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 a. }.. met 1370: 68 6f 64 20 64 65 66 20 7b 72 65 76 6e 72 20 64 hod def {revnr d 1380: 61 74 65 20 61 75 74 68 6f 72 20 73 74 61 74 65 ate author state 1390: 20 6e 65 78 74 20 62 72 61 6e 63 68 65 73 7d 20 next branches} 13a0: 7b 0a 09 24 73 65 6c 66 20 52 65 63 6f 72 64 42 {..$self RecordB 13b0: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 24 62 72 ranchCommits $br 13c0: 61 6e 63 68 65 73 0a 0a 09 69 66 20 7b 5b 69 6e anches...if {[in 13d0: 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 fo exists myrev( 13e0: 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 $revnr)]} {.. 13f0: 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 trouble fatal " 1400: 46 69 6c 65 20 24 6d 79 70 61 74 68 20 63 6f 6e File $mypath con 1410: 74 61 69 6e 73 20 64 75 70 6c 69 63 61 74 65 20 tains duplicate 1420: 64 65 66 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 definitions for 1430: 72 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 2e revision $revnr. 1440: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d ".. return..} 1450: 0a 0a 09 73 65 74 20 6d 79 61 69 64 28 24 72 65 ...set myaid($re 1460: 76 6e 72 29 20 5b 24 6d 79 70 72 6f 6a 65 63 74 vnr) [$myproject 1470: 20 64 65 66 61 75 74 68 6f 72 20 24 61 75 74 68 defauthor $auth 1480: 6f 72 5d 0a 09 73 65 74 20 6d 79 72 65 76 28 24 or]..set myrev($ 1490: 72 65 76 6e 72 29 20 5b 72 65 76 20 25 41 55 54 revnr) [rev %AUT 14a0: 4f 25 20 24 72 65 76 6e 72 20 24 64 61 74 65 20 O% $revnr $date 14b0: 24 73 74 61 74 65 20 24 73 65 6c 66 5d 0a 0a 09 $state $self]... 14c0: 24 73 65 6c 66 20 52 65 63 6f 72 64 42 61 73 69 $self RecordBasi 14d0: 63 44 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72 cDependencies $r 14e0: 65 76 6e 72 20 24 6e 65 78 74 0a 09 72 65 74 75 evnr $next..retu 14f0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me 1500: 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d 20 thod defdone {} 1510: 7b 0a 09 23 20 54 68 69 73 20 69 73 20 61 6c 6c {..# This is all 1520: 20 64 6f 6e 65 20 61 66 74 65 72 20 74 68 65 20 done after the 1530: 72 65 76 69 73 69 6f 6e 20 74 72 65 65 20 68 61 revision tree ha 1540: 73 20 62 65 65 6e 20 65 78 74 72 61 63 74 65 64 s been extracted 1550: 0a 09 23 20 66 72 6f 6d 20 74 68 65 20 66 69 6c ..# from the fil 1560: 65 2c 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f e, before the co 1570: 6d 6d 69 74 20 6d 65 73 61 67 65 73 20 61 6e 64 mmit mesages and 1580: 20 64 65 6c 74 61 20 74 65 78 74 73 20 61 72 65 delta texts are 1590: 0a 09 23 20 70 72 6f 63 65 73 73 65 64 2e 0a 0a ..# processed... 15a0: 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 50 72 .$self ProcessPr 15b0: 69 6d 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65 imaryDependencie 15c0: 73 0a 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 s..$self Process 15d0: 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 BranchDependenci 15e0: 65 73 0a 09 24 73 65 6c 66 20 53 6f 72 74 42 72 es..$self SortBr 15f0: 61 6e 63 68 65 73 0a 09 24 73 65 6c 66 20 50 72 anches..$self Pr 1600: 6f 63 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e ocessTagDependen 1610: 63 69 65 73 0a 09 24 73 65 6c 66 20 44 65 74 65 cies..$self Dete 1620: 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 rmineTheRootRevi 1630: 73 69 6f 6e 0a 09 72 65 74 75 72 6e 0a 20 20 20 sion..return. 1640: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 }.. method s 1650: 65 74 64 65 73 63 20 7b 64 7d 20 7b 23 20 69 67 etdesc {d} {# ig 1660: 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f nore}.. metho 1670: 64 20 65 78 74 65 6e 64 20 7b 72 65 76 6e 72 20 d extend {revnr 1680: 63 6f 6d 6d 69 74 6d 73 67 20 74 65 78 74 72 61 commitmsg textra 1690: 6e 67 65 7d 20 7b 0a 09 73 65 74 20 63 6d 69 64 nge} {..set cmid 16a0: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 66 [$myproject def 16b0: 63 6d 65 73 73 61 67 65 20 5b 73 74 72 69 6e 67 cmessage [string 16c0: 20 74 72 69 6d 20 24 63 6f 6d 6d 69 74 6d 73 67 trim $commitmsg 16d0: 5d 5d 0a 0a 09 73 65 74 20 72 65 76 20 24 6d 79 ]]...set rev $my 16e0: 72 65 76 28 24 72 65 76 6e 72 29 0a 0a 09 69 66 rev($revnr)...if 16f0: 20 7b 5b 24 72 65 76 20 68 61 73 6d 65 74 61 5d {[$rev hasmeta] 1700: 7d 20 7b 0a 09 20 20 20 20 23 20 41 70 70 61 72 } {.. # Appar 1710: 65 6e 74 6c 79 20 72 65 70 6f 73 69 74 6f 72 69 ently repositori 1720: 65 73 20 65 78 69 73 74 20 69 6e 20 77 68 69 63 es exist in whic 1730: 68 20 74 68 65 20 64 65 6c 74 61 20 64 61 74 61 h the delta data 1740: 0a 09 20 20 20 20 23 20 66 6f 72 20 72 65 76 69 .. # for revi 1750: 73 69 6f 6e 20 31 2e 31 20 69 73 20 70 72 6f 76 sion 1.1 is prov 1760: 69 64 65 64 20 73 65 76 65 72 61 6c 20 74 69 6d ided several tim 1770: 65 73 2c 20 61 74 20 6c 65 61 73 74 0a 09 20 20 es, at least.. 1780: 20 20 23 20 74 77 69 63 65 2e 20 54 68 65 20 61 # twice. The a 1790: 63 74 75 61 6c 20 63 61 75 73 65 20 6f 66 20 74 ctual cause of t 17a0: 68 69 73 20 64 75 70 6c 69 63 61 74 69 6f 6e 20 his duplication 17b0: 69 73 20 6e 6f 74 0a 09 20 20 20 20 23 20 6b 6e is not.. # kn 17c0: 6f 77 6e 2e 20 53 70 65 63 75 6c 61 74 69 6f 6e own. Speculation 17d0: 20 63 65 6e 74 65 72 73 20 6f 6e 20 52 43 53 2f centers on RCS/ 17e0: 43 56 53 20 62 75 67 73 2c 20 6f 72 20 66 72 6f CVS bugs, or fro 17f0: 6d 0a 09 20 20 20 20 23 20 6d 61 6e 75 61 6c 20 m.. # manual 1800: 65 64 69 74 73 20 6f 66 20 74 68 65 20 72 65 70 edits of the rep 1810: 6f 73 69 74 6f 72 79 20 77 68 69 63 68 20 62 6f ository which bo 1820: 72 6b 65 64 20 74 68 65 0a 09 20 20 20 20 23 20 rked the.. # 1830: 69 6e 74 65 72 6e 61 6c 73 2e 20 57 68 61 74 65 internals. Whate 1840: 76 65 72 20 74 68 65 20 63 61 75 73 65 2c 20 74 ver the cause, t 1850: 65 73 74 69 6e 67 20 73 68 6f 77 65 64 20 74 68 esting showed th 1860: 61 74 20 62 6f 74 68 0a 09 20 20 20 20 23 20 63 at both.. # c 1870: 76 73 20 61 6e 64 20 72 63 73 20 75 73 65 20 74 vs and rcs use t 1880: 68 65 20 66 69 72 73 74 20 64 65 66 69 6e 69 74 he first definit 1890: 69 6f 6e 20 77 68 65 6e 20 70 65 72 66 6f 72 6d ion when perform 18a0: 69 6e 67 20 61 0a 09 20 20 20 20 23 20 63 68 65 ing a.. # che 18b0: 63 6b 6f 75 74 2c 20 61 6e 64 20 77 65 20 66 6f ckout, and we fo 18c0: 6c 6c 6f 77 20 74 68 65 69 72 20 6c 65 61 64 2e llow their lead. 18d0: 20 53 69 64 65 20 6e 6f 74 65 73 3a 20 27 63 76 Side notes: 'cv 18e0: 73 0a 09 20 20 20 20 23 20 6c 6f 67 27 20 66 61 s.. # log' fa 18f0: 69 6c 73 20 6f 6e 20 73 75 63 68 20 61 20 66 69 ils on such a fi 1900: 6c 65 2c 20 61 6e 64 20 27 63 76 73 20 72 6c 6f le, and 'cvs rlo 1910: 67 27 20 70 72 69 6e 74 73 20 74 68 65 20 6c 6f g' prints the lo 1920: 67 0a 09 20 20 20 20 23 20 6d 65 73 73 61 67 65 g.. # message 1930: 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20 from the first 1940: 64 65 6c 74 61 2c 20 69 67 6e 6f 72 69 6e 67 20 delta, ignoring 1950: 74 68 65 20 73 65 63 6f 6e 64 2e 0a 0a 09 20 20 the second.... 1960: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 log write 1 fi 1970: 6c 65 20 22 49 6e 20 66 69 6c 65 20 24 6d 79 70 le "In file $myp 1980: 61 74 68 20 3a 20 44 75 70 6c 69 63 61 74 65 20 ath : Duplicate 1990: 64 65 6c 74 61 20 64 61 74 61 20 66 6f 72 20 72 delta data for r 19a0: 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 22 0a evision $revnr". 19b0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 . log write 1 19c0: 20 66 69 6c 65 20 22 49 67 6e 6f 72 69 6e 67 20 file "Ignoring 19d0: 74 68 65 20 64 75 70 6c 69 63 61 74 65 22 0a 09 the duplicate".. 19e0: 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 return..}... 19f0: 23 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 # Determine the 1a00: 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d line of developm 1a10: 65 6e 74 20 66 6f 72 20 74 68 65 20 72 65 76 69 ent for the revi 1a20: 73 69 6f 6e 20 28 70 72 6f 6a 65 63 74 0a 09 23 sion (project..# 1a30: 20 6c 65 76 65 6c 29 2e 20 54 68 69 73 20 67 69 level). This gi 1a40: 76 65 73 20 75 73 20 74 68 65 20 62 72 61 6e 63 ves us the branc 1a50: 68 69 64 20 74 6f 6f 2c 20 72 65 71 75 69 72 65 hid too, require 1a60: 64 20 66 6f 72 20 74 68 65 0a 09 23 20 6d 65 74 d for the..# met 1a70: 61 20 64 61 74 61 20 67 72 6f 75 70 20 74 68 65 a data group the 1a80: 20 72 65 76 69 73 69 6f 6e 20 69 73 20 69 6e 2e revision is in. 1a90: 20 28 4e 6f 74 65 3a 20 42 79 20 70 75 74 74 69 (Note: By putti 1aa0: 6e 67 20 62 6f 74 68 0a 09 23 20 62 72 61 6e 63 ng both..# branc 1ab0: 68 2f 6c 6f 64 20 61 6e 64 20 70 72 6f 6a 65 63 h/lod and projec 1ac0: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e t information in 1ad0: 74 6f 20 74 68 65 20 67 72 6f 75 70 20 77 65 20 to the group we 1ae0: 65 6e 73 75 72 65 0a 09 23 20 74 68 61 74 20 61 ensure..# that a 1af0: 6e 79 20 63 72 6f 73 73 2d 70 72 6f 6a 65 63 74 ny cross-project 1b00: 20 61 6e 64 20 63 72 6f 73 73 2d 62 72 61 6e 63 and cross-branc 1b10: 68 20 63 6f 6d 6d 69 74 73 20 61 72 65 0a 09 23 h commits are..# 1b20: 20 73 65 70 61 72 61 74 65 64 20 69 6e 74 6f 20 separated into 1b30: 6d 75 6c 74 69 70 6c 65 20 63 6f 6d 6d 69 74 73 multiple commits 1b40: 2c 20 6f 6e 65 20 69 6e 20 65 61 63 68 20 6f 66 , one in each of 1b50: 20 74 68 65 20 70 72 6f 6a 65 63 74 73 0a 09 23 the projects..# 1b60: 20 61 6e 64 2f 6f 72 20 62 72 61 6e 63 68 65 73 and/or branches 1b70: 29 2e 0a 0a 09 73 65 74 20 6c 6f 64 20 5b 24 73 )....set lod [$s 1b80: 65 6c 66 20 47 65 74 4c 4f 44 20 24 72 65 76 6e elf GetLOD $revn 1b90: 72 5d 0a 0a 09 24 72 65 76 20 73 65 74 6d 65 74 r]...$rev setmet 1ba0: 61 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 a [$myproject de 1bb0: 66 6d 65 74 61 20 5b 24 6c 6f 64 20 69 64 5d 20 fmeta [$lod id] 1bc0: 24 6d 79 61 69 64 28 24 72 65 76 6e 72 29 20 24 $myaid($revnr) $ 1bd0: 63 6d 69 64 5d 0a 09 24 72 65 76 20 73 65 74 74 cmid]..$rev sett 1be0: 65 78 74 20 24 74 65 78 74 72 61 6e 67 65 0a 09 ext $textrange.. 1bf0: 24 72 65 76 20 73 65 74 6c 6f 64 20 20 24 6c 6f $rev setlod $lo 1c00: 64 0a 0a 09 23 20 49 66 20 74 68 69 73 20 69 73 d...# If this is 1c10: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 2c 20 77 revision 1.1, w 1c20: 65 20 68 61 76 65 20 74 6f 20 64 65 74 65 72 6d e have to determ 1c30: 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 0a ine whether the. 1c40: 09 23 20 66 69 6c 65 20 73 65 65 6d 73 20 74 6f .# file seems to 1c50: 20 68 61 76 65 20 62 65 65 6e 20 63 72 65 61 74 have been creat 1c60: 65 64 20 74 68 72 6f 75 67 68 20 27 63 76 73 20 ed through 'cvs 1c70: 61 64 64 27 20 69 6e 73 74 65 61 64 20 6f 66 0a add' instead of. 1c80: 09 23 20 27 63 76 73 20 69 6d 70 6f 72 74 27 2e .# 'cvs import'. 1c90: 20 54 68 69 73 20 63 61 6e 20 62 65 20 64 6f 6e This can be don 1ca0: 65 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 61 74 20 e by looking at 1cb0: 74 68 65 20 75 6e 2d 0a 09 23 20 61 64 75 6c 74 the un-..# adult 1cc0: 65 72 61 74 65 64 20 63 6f 6d 6d 69 74 20 6d 65 erated commit me 1cd0: 73 73 61 67 65 2c 20 61 73 20 43 56 53 20 75 73 ssage, as CVS us 1ce0: 65 73 20 61 20 68 61 72 64 77 69 72 65 64 20 6d es a hardwired m 1cf0: 61 67 69 63 0a 09 23 20 6d 65 73 73 61 67 65 20 agic..# message 1d00: 66 6f 72 20 74 68 65 20 6c 61 74 74 65 72 2c 20 for the latter, 1d10: 69 2e 65 2e 20 22 49 6e 69 74 69 61 6c 20 72 65 i.e. "Initial re 1d20: 76 69 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a 09 23 vision\n", no..# 1d30: 20 70 65 72 69 6f 64 2e 20 20 28 54 68 69 73 20 period. (This 1d40: 66 61 63 74 20 61 6c 73 6f 20 68 65 6c 70 73 20 fact also helps 1d50: 75 73 20 77 68 65 6e 20 74 68 65 20 74 69 6d 65 us when the time 1d60: 20 63 6f 6d 65 73 20 74 6f 0a 09 23 20 64 65 74 comes to..# det 1d70: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 ermine whether t 1d80: 68 69 73 20 66 69 6c 65 20 6d 69 67 68 74 20 68 his file might h 1d90: 61 76 65 20 68 61 64 20 61 20 64 65 66 61 75 6c ave had a defaul 1da0: 74 20 62 72 61 6e 63 68 0a 09 23 20 69 6e 20 74 t branch..# in t 1db0: 68 65 20 70 61 73 74 2e 29 0a 0a 09 69 66 20 7b he past.)...if { 1dc0: 24 72 65 76 6e 72 20 65 71 20 22 31 2e 31 22 7d $revnr eq "1.1"} 1dd0: 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 6d {.. set myim 1de0: 70 6f 72 74 65 64 20 5b 65 78 70 72 20 7b 24 63 ported [expr {$c 1df0: 6f 6d 6d 69 74 6d 73 67 20 65 71 20 22 49 6e 69 ommitmsg eq "Ini 1e00: 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22 tial revision\n" 1e10: 7d 5d 0a 09 7d 0a 0a 09 23 20 48 65 72 65 20 77 }]..}...# Here w 1e20: 65 20 61 6c 73 6f 20 6b 65 65 70 20 74 72 61 63 e also keep trac 1e30: 6b 20 6f 66 20 74 68 65 20 6f 72 64 65 72 20 69 k of the order i 1e40: 6e 20 77 68 69 63 68 20 74 68 65 20 72 65 76 69 n which the revi 1e50: 73 69 6f 6e 73 0a 09 23 20 77 65 72 65 20 61 64 sions..# were ad 1e60: 64 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65 2e ded to the file. 1e70: 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79 72 65 76 ...lappend myrev 1e80: 69 73 69 6f 6e 73 20 24 72 65 76 0a 09 72 65 74 isions $rev..ret 1e90: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m 1ea0: 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b 0a ethod done {} {. 1eb0: 09 23 20 43 6f 6d 70 6c 65 74 65 20 74 68 65 20 .# Complete the 1ec0: 72 65 76 69 73 69 6f 6e 73 2c 20 62 72 61 6e 63 revisions, branc 1ed0: 68 65 73 2c 20 61 6e 64 20 74 61 67 73 2e 20 54 hes, and tags. T 1ee0: 68 69 73 20 69 6e 63 6c 75 64 65 73 0a 09 23 20 his includes..# 1ef0: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6e 6f looking for a no 1f00: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 n-trunk default 1f10: 62 72 61 6e 63 68 2c 20 6d 61 72 6b 69 6e 67 20 branch, marking 1f20: 69 74 73 20 6d 65 6d 62 65 72 73 0a 09 23 20 61 its members..# a 1f30: 6e 64 20 6c 69 6e 6b 69 6e 67 20 74 68 65 6d 20 nd linking them 1f40: 69 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2c 20 into the trunk, 1f50: 70 6f 73 73 69 62 6c 79 20 65 78 63 6c 75 64 69 possibly excludi 1f60: 6e 67 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 ng..# non-trunk 1f70: 64 61 74 61 2c 20 61 6e 64 20 63 6f 6c 6c 65 63 data, and collec 1f80: 74 69 6e 67 20 61 67 67 72 65 67 61 74 65 20 73 ting aggregate s 1f90: 79 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 73 ymbol statistics 1fa0: 2e 0a 0a 09 24 73 65 6c 66 20 44 65 74 65 72 6d ....$self Determ 1fb0: 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 ineRevisionOpera 1fc0: 74 69 6f 6e 73 0a 09 24 73 65 6c 66 20 44 65 74 tions..$self Det 1fd0: 65 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 ermineLinesOfDev 1fe0: 65 6c 6f 70 6d 65 6e 74 0a 09 24 73 65 6c 66 20 elopment..$self 1ff0: 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65 HandleNonTrunkDe 2000: 66 61 75 6c 74 42 72 61 6e 63 68 0a 09 24 73 65 faultBranch..$se 2010: 6c 66 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 lf RemoveIrrelev 2020: 61 6e 74 44 65 6c 65 74 69 6f 6e 73 0a 09 24 73 antDeletions..$s 2030: 65 6c 66 20 52 65 6d 6f 76 65 49 6e 69 74 69 61 elf RemoveInitia 2040: 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e 73 lBranchDeletions 2050: 0a 0a 09 69 66 20 7b 5b 24 6d 79 70 72 6f 6a 65 ...if {[$myproje 2060: 63 74 20 74 72 75 6e 6b 6f 6e 6c 79 5d 7d 20 7b ct trunkonly]} { 2070: 0a 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 6c .. $self Excl 2080: 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 udeNonTrunkInfor 2090: 6d 61 74 69 6f 6e 0a 09 7d 0a 0a 09 24 73 65 6c mation..}...$sel 20a0: 66 20 41 67 67 72 65 67 61 74 65 53 79 6d 62 6f f AggregateSymbo 20b0: 6c 44 61 74 61 0a 09 72 65 74 75 72 6e 0a 20 20 lData..return. 20c0: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 }.. # # ## 20d0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ###### 20e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## ############# 20f0: 0a 20 20 20 20 23 23 20 50 61 73 73 20 58 49 49 . ## Pass XII 2100: 20 28 49 6d 70 6f 72 74 29 2e 0a 0a 20 20 20 20 (Import)... 2110: 6d 65 74 68 6f 64 20 70 75 73 68 74 6f 20 7b 72 method pushto {r 2120: 65 70 6f 73 69 74 6f 72 79 7d 20 7b 0a 09 73 65 epository} {..se 2130: 74 20 77 73 20 5b 24 72 65 70 6f 73 69 74 6f 72 t ws [$repositor 2140: 79 20 77 6f 72 6b 73 70 61 63 65 5d 0a 09 73 74 y workspace]..st 2150: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 ruct::list assig 2160: 6e 20 5b 24 73 65 6c 66 20 45 78 70 61 6e 64 20 n [$self Expand 2170: 24 77 73 5d 20 66 69 6c 65 6d 61 70 20 72 65 76 $ws] filemap rev 2180: 6d 61 70 0a 09 23 20 66 69 6c 65 6d 61 70 20 3d map..# filemap = 2190: 20 64 69 63 74 20 28 70 61 74 68 20 2d 3e 20 75 dict (path -> u 21a0: 75 69 64 29 0a 09 23 20 72 65 76 6d 61 70 20 20 uid)..# revmap 21b0: 3d 20 64 69 63 74 20 28 70 61 74 68 20 2d 3e 20 = dict (path -> 21c0: 72 69 64 29 0a 0a 09 61 72 72 61 79 20 73 65 74 rid)...array set 21d0: 20 69 64 6d 61 70 20 5b 24 72 65 70 6f 73 69 74 idmap [$reposit 21e0: 6f 72 79 20 69 6d 70 6f 72 74 66 69 6c 65 73 20 ory importfiles 21f0: 24 66 69 6c 65 6d 61 70 5d 0a 0a 09 23 20 57 69 $filemap]...# Wi 2200: 70 65 20 77 6f 72 6b 73 70 61 63 65 20 63 6c 65 pe workspace cle 2210: 61 6e 20 6f 66 20 74 68 65 20 69 6d 70 6f 72 74 an of the import 2220: 65 64 20 66 69 6c 65 73 2e 0a 09 66 6f 72 65 61 ed files...forea 2230: 63 68 20 78 20 5b 67 6c 6f 62 20 2d 64 69 72 65 ch x [glob -dire 2240: 63 74 6f 72 79 20 24 77 73 20 72 2a 5d 20 7b 20 ctory $ws r*] { 2250: 3a 3a 66 69 6c 65 20 64 65 6c 65 74 65 20 24 78 ::file delete $x 2260: 20 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 70 61 }...foreach {pa 2270: 74 68 20 72 69 64 7d 20 24 72 65 76 6d 61 70 20 th rid} $revmap 2280: 7b 0a 09 20 20 20 20 73 65 74 20 75 75 69 64 20 {.. set uuid 2290: 24 69 64 6d 61 70 28 24 70 61 74 68 29 0a 09 20 $idmap($path).. 22a0: 20 20 20 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 state run {.. 22b0: 09 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 65 76 .INSERT INTO rev 22c0: 75 75 69 64 20 28 72 69 64 2c 20 20 75 75 69 64 uuid (rid, uuid 22d0: 29 0a 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 )...VALUES 22e0: 20 20 20 20 20 20 20 20 28 24 72 69 64 2c 20 24 ($rid, $ 22f0: 75 75 69 64 29 0a 09 20 20 20 20 7d 0a 09 7d 0a uuid).. }..}. 2300: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }.. 2310: 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 method Expand 2320: 20 7b 64 69 72 7d 20 7b 0a 09 73 65 74 20 65 78 {dir} {..set ex 2330: 20 5b 73 74 72 75 63 74 3a 3a 67 72 61 70 68 20 [struct::graph 2340: 65 78 5d 20 3b 20 23 20 45 78 70 61 6e 73 69 6f ex] ; # Expansio 2350: 6e 20 67 72 61 70 68 2e 0a 09 73 65 74 20 7a 70 n graph...set zp 2360: 20 5b 73 74 72 75 63 74 3a 3a 67 72 61 70 68 20 [struct::graph 2370: 7a 70 5d 20 3b 20 23 20 5a 69 70 2f 49 6d 70 6f zp] ; # Zip/Impo 2380: 72 74 20 67 72 61 70 68 2e 0a 0a 09 63 6c 6f 73 rt graph....clos 2390: 65 20 5b 6f 70 65 6e 20 24 64 69 72 2f 72 5f 5f e [open $dir/r__ 23a0: 65 6d 70 74 79 5f 5f 20 77 5d 3b 23 20 42 61 73 empty__ w];# Bas 23b0: 65 20 66 6f 72 20 64 65 74 61 63 68 65 64 20 72 e for detached r 23c0: 6f 6f 74 73 20 6f 6e 20 62 72 61 6e 63 68 65 73 oots on branches 23d0: 2e 0a 0a 09 23 20 50 68 61 73 65 20 49 3a 20 50 ....# Phase I: P 23e0: 75 6c 6c 20 74 68 65 20 72 65 76 69 73 69 6f 6e ull the revision 23f0: 73 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 61 6e s from memory an 2400: 64 20 66 69 6c 6c 20 74 68 65 20 67 72 61 70 68 d fill the graph 2410: 73 0a 09 23 20 20 20 20 20 20 20 20 20 20 77 69 s..# wi 2420: 74 68 20 74 68 65 6d 2e 2e 2e 0a 0a 09 73 65 74 th them......set 2430: 20 65 61 72 63 73 20 20 20 7b 7d 20 3b 20 23 20 earcs {} ; # 2440: 41 72 63 73 20 66 6f 72 20 65 78 70 61 6e 73 69 Arcs for expansi 2450: 6f 6e 20 67 72 61 70 68 0a 09 73 65 74 20 7a 61 on graph..set za 2460: 72 63 73 20 20 20 7b 7d 20 3b 20 23 20 41 72 63 rcs {} ; # Arc 2470: 73 20 66 6f 72 20 7a 69 70 20 67 72 61 70 68 0a s for zip graph. 2480: 09 73 65 74 20 72 65 76 6d 61 70 20 20 7b 7d 20 .set revmap {} 2490: 3b 20 23 20 70 61 74 68 20 2d 3e 20 72 69 64 20 ; # path -> rid 24a0: 6d 61 70 20 74 6f 20 6c 61 74 65 72 20 6d 65 72 map to later mer 24b0: 67 65 20 75 75 69 64 20 69 6e 66 6f 72 6d 61 74 ge uuid informat 24c0: 69 6f 6e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 ion...foreach {r 24d0: 69 64 20 72 65 76 6e 72 20 70 61 72 65 6e 74 20 id revnr parent 24e0: 63 68 69 6c 64 20 63 6f 66 66 20 63 6c 65 6e 7d child coff clen} 24f0: 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 [state run {.. 2500: 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c SELECT R.rid, 2510: 20 52 2e 72 65 76 2c 20 52 2e 70 61 72 65 6e 74 R.rev, R.parent 2520: 2c 20 52 2e 63 68 69 6c 64 2c 20 52 2e 63 6f 66 , R.child, R.cof 2530: 66 2c 20 52 2e 63 6c 65 6e 0a 09 20 20 20 20 46 f, R.clen.. F 2540: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 ROM revision R 2550: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 66 .. WHERE R.f 2560: 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 7b id = $myid..}] { 2570: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 .. lappend re 2580: 76 6d 61 70 20 72 24 72 65 76 6e 72 20 24 72 69 vmap r$revnr $ri 2590: 64 0a 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64 65 d... $zp node 25a0: 20 69 6e 73 65 72 74 20 24 72 69 64 0a 09 20 20 insert $rid.. 25b0: 20 20 24 7a 70 20 6e 6f 64 65 20 73 65 74 20 20 $zp node set 25c0: 20 20 24 72 69 64 20 72 65 76 6e 72 20 24 72 65 $rid revnr $re 25d0: 76 6e 72 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64 vnr.. $zp nod 25e0: 65 20 73 65 74 20 20 20 20 24 72 69 64 20 6c 61 e set $rid la 25f0: 62 65 6c 20 3c 24 72 65 76 6e 72 3e 0a 0a 09 20 bel <$revnr>... 2600: 20 20 20 69 66 20 7b 24 63 68 69 6c 64 20 6e 65 if {$child ne 2610: 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 ""} {...lappend 2620: 20 7a 61 72 63 73 20 24 63 68 69 6c 64 20 24 72 zarcs $child $r 2630: 69 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 id.. }... 2640: 24 65 78 20 6e 6f 64 65 20 69 6e 73 65 72 74 20 $ex node insert 2650: 24 72 69 64 0a 09 20 20 20 20 24 65 78 20 6e 6f $rid.. $ex no 2660: 64 65 20 73 65 74 20 20 20 20 24 72 69 64 20 74 de set $rid t 2670: 65 78 74 20 20 5b 6c 69 73 74 20 24 63 6f 66 66 ext [list $coff 2680: 20 24 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65 78 $clen].. $ex 2690: 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 72 69 node set $ri 26a0: 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a 09 d revnr $revnr.. 26b0: 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 65 74 $ex node set 26c0: 20 20 20 20 24 72 69 64 20 6c 61 62 65 6c 20 3c $rid label < 26d0: 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69 66 $revnr>... if 26e0: 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 {[rev istrunkre 26f0: 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 vnr $revnr]} {.. 2700: 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b 2c .# On the trunk, 2710: 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69 this revision i 2720: 73 20 61 20 64 65 6c 74 61 20 62 61 73 65 64 20 s a delta based 2730: 6f 6e 20 74 68 65 0a 09 09 23 20 63 68 69 6c 64 on the...# child 2740: 2e 20 54 68 61 74 20 6d 61 6b 65 73 20 74 68 65 . That makes the 2750: 20 63 68 69 6c 64 20 6f 75 72 20 70 72 65 64 65 child our prede 2760: 63 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b 24 cessor.....if {$ 2770: 63 68 69 6c 64 20 65 71 20 22 22 7d 20 63 6f 6e child eq ""} con 2780: 74 69 6e 75 65 0a 09 09 6c 61 70 70 65 6e 64 20 tinue...lappend 2790: 65 61 72 63 73 20 24 63 68 69 6c 64 20 24 72 69 earcs $child $ri 27a0: 64 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a d.. } else {. 27b0: 09 09 23 20 4f 6e 20 61 20 62 72 61 6e 63 68 20 ..# On a branch 27c0: 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69 73 this revision is 27d0: 20 61 20 64 65 6c 74 61 20 62 61 73 65 64 20 6f a delta based o 27e0: 6e 20 74 68 65 0a 09 09 23 20 70 61 72 65 6e 74 n the...# parent 27f0: 2e 20 54 68 61 74 20 6d 61 6b 65 73 20 74 68 65 . That makes the 2800: 20 70 61 72 65 6e 74 20 6f 75 72 20 70 72 65 64 parent our pred 2810: 65 63 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b ecessor.....if { 2820: 24 70 61 72 65 6e 74 20 65 71 20 22 22 7d 20 7b $parent eq ""} { 2830: 0a 09 09 20 20 20 20 23 20 44 65 74 61 63 68 65 ... # Detache 2840: 64 20 62 72 61 6e 63 68 20 72 6f 6f 74 2c 20 74 d branch root, t 2850: 68 69 73 20 69 73 20 61 20 70 61 74 63 68 20 62 his is a patch b 2860: 61 73 65 64 20 6f 6e 0a 09 09 20 20 20 20 23 20 ased on... # 2870: 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e 67 the empty string 2880: 2e 0a 09 09 20 20 20 20 24 65 78 20 6e 6f 64 65 .... $ex node 2890: 20 73 65 74 20 24 72 69 64 20 5f 5f 62 61 73 65 set $rid __base 28a0: 5f 5f 20 72 5f 5f 65 6d 70 74 79 5f 5f 20 0a 09 __ r__empty__ .. 28b0: 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09 09 . continue... 28c0: 7d 0a 09 09 6c 61 70 70 65 6e 64 20 65 61 72 63 }...lappend earc 28d0: 73 20 24 70 61 72 65 6e 74 20 24 72 69 64 0a 09 s $parent $rid.. 28e0: 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 50 68 61 }..}...# Pha 28f0: 73 65 20 49 49 3a 20 49 6e 73 65 72 74 20 74 68 se II: Insert th 2900: 65 20 61 63 63 75 6d 75 6c 61 74 65 64 20 64 65 e accumulated de 2910: 70 65 6e 64 65 6e 63 69 65 73 0a 0a 09 66 6f 72 pendencies...for 2920: 65 61 63 68 20 7b 66 72 6f 6d 20 74 6f 7d 20 24 each {from to} $ 2930: 65 61 72 63 73 20 7b 20 24 65 78 20 61 72 63 20 earcs { $ex arc 2940: 69 6e 73 65 72 74 20 24 66 72 6f 6d 20 24 74 6f insert $from $to 2950: 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 66 72 6f }..foreach {fro 2960: 6d 20 74 6f 7d 20 24 7a 61 72 63 73 20 7b 20 24 m to} $zarcs { $ 2970: 7a 70 20 61 72 63 20 69 6e 73 65 72 74 20 24 66 zp arc insert $f 2980: 72 6f 6d 20 24 74 6f 20 7d 0a 0a 09 23 20 50 68 rom $to }...# Ph 2990: 61 73 65 20 49 49 49 3a 20 54 72 61 76 65 72 73 ase III: Travers 29a0: 65 20 74 68 65 20 67 72 61 70 68 73 2c 20 65 78 e the graphs, ex 29b0: 70 61 6e 64 20 74 68 65 20 66 69 6c 65 2c 20 61 pand the file, a 29c0: 6e 64 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 nd..# 29d0: 20 67 65 6e 65 72 61 74 65 20 69 6d 70 6f 72 74 generate import 29e0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a 0a instructions... 29f0: 09 73 65 74 20 61 72 63 68 69 76 65 20 5b 3a 3a .set archive [:: 2a00: 66 69 6c 65 20 6a 6f 69 6e 20 5b 24 6d 79 70 72 file join [$mypr 2a10: 6f 6a 65 63 74 20 66 75 6c 6c 70 61 74 68 5d 20 oject fullpath] 2a20: 24 6d 79 70 61 74 68 5d 0a 09 73 65 74 20 61 63 $mypath]..set ac 2a30: 20 20 20 20 20 20 5b 6f 70 65 6e 20 24 61 72 63 [open $arc 2a40: 68 69 76 65 20 72 5d 0a 09 66 63 6f 6e 66 69 67 hive r]..fconfig 2a50: 75 72 65 20 24 61 63 20 2d 74 72 61 6e 73 6c 61 ure $ac -transla 2a60: 74 69 6f 6e 20 62 69 6e 61 72 79 0a 0a 09 23 20 tion binary...# 2a70: 46 69 72 73 74 20 74 72 61 76 65 72 73 65 20 74 First traverse t 2a80: 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 61 he expansion gra 2a90: 70 68 2c 20 74 68 69 73 20 67 69 76 65 73 20 75 ph, this gives u 2aa0: 73 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f s the..# revisio 2ab0: 6e 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 ns in the order 2ac0: 77 65 20 68 61 76 65 20 74 6f 20 65 78 70 61 6e we have to expan 2ad0: 64 20 74 68 65 6d 2c 20 77 68 69 63 68 20 77 65 d them, which we 2ae0: 20 64 6f 2e 0a 0a 09 73 65 74 20 6d 61 78 20 5b do....set max [ 2af0: 6c 6c 65 6e 67 74 68 20 5b 24 65 78 20 6e 6f 64 llength [$ex nod 2b00: 65 73 5d 5d 0a 09 73 65 74 20 6d 79 69 6d 70 6f es]]..set myimpo 2b10: 72 74 20 30 0a 0a 09 67 74 63 6f 72 65 20 64 61 rt 0...gtcore da 2b20: 74 61 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f tacmd [mymetho 2b30: 64 20 45 78 70 61 6e 64 44 61 74 61 5d 0a 09 67 d ExpandData]..g 2b40: 74 63 6f 72 65 20 66 6f 72 6d 61 74 63 6d 64 20 tcore formatcmd 2b50: 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 [mymethod Expand 2b60: 46 6f 72 6d 61 74 5d 0a 09 67 74 63 6f 72 65 20 Format]..gtcore 2b70: 73 6f 72 74 63 6d 64 20 20 20 5b 6d 79 6d 65 74 sortcmd [mymet 2b80: 68 6f 64 20 45 78 70 61 6e 64 53 6f 72 74 5d 0a hod ExpandSort]. 2b90: 09 67 74 63 6f 72 65 20 73 61 76 65 63 6d 64 20 .gtcore savecmd 2ba0: 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 [mymethod Expa 2bb0: 6e 64 31 20 24 61 63 20 24 64 69 72 20 24 6d 61 nd1 $ac $dir $ma 2bc0: 78 5d 0a 0a 09 67 74 63 6f 72 65 20 74 72 61 76 x]...gtcore trav 2bd0: 65 72 73 65 20 24 65 78 20 7b 45 78 70 61 6e 64 erse $ex {Expand 2be0: 69 6e 67 20 72 65 76 69 73 69 6f 6e 73 2e 2e 2e ing revisions... 2bf0: 7d 0a 09 63 6c 6f 73 65 20 24 61 63 0a 0a 09 23 }..close $ac...# 2c00: 20 4e 6f 77 20 74 72 61 76 65 72 73 65 20 74 68 Now traverse th 2c10: 65 20 69 6d 70 6f 72 74 20 67 72 61 70 68 2c 20 e import graph, 2c20: 74 68 69 73 20 62 75 69 6c 64 73 20 74 68 65 20 this builds the 2c30: 69 6e 73 74 72 75 63 74 69 6f 6e 0a 09 23 20 6d instruction..# m 2c40: 61 70 20 66 6f 72 20 74 68 65 20 66 6f 73 73 69 ap for the fossi 2c50: 6c 20 64 65 6c 74 61 73 2e 0a 0a 09 67 74 63 6f l deltas....gtco 2c60: 72 65 20 64 61 74 61 63 6d 64 20 20 20 5b 6d 79 re datacmd [my 2c70: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74 method ExpandDat 2c80: 61 5d 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d 61 a]..gtcore forma 2c90: 74 63 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20 45 tcmd [mymethod E 2ca0: 78 70 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67 74 xpandFormat]..gt 2cb0: 63 6f 72 65 20 73 6f 72 74 63 6d 64 20 20 20 5b core sortcmd [ 2cc0: 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53 mymethod ExpandS 2cd0: 6f 72 74 5d 0a 09 67 74 63 6f 72 65 20 73 61 76 ort]..gtcore sav 2ce0: 65 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 ecmd [mymethod 2cf0: 20 45 78 70 61 6e 64 32 5d 0a 0a 09 73 65 74 20 Expand2]...set 2d00: 6d 79 69 6d 70 6f 72 74 20 7b 7d 0a 09 67 74 63 myimport {}..gtc 2d10: 6f 72 65 20 74 72 61 76 65 72 73 65 20 24 7a 70 ore traverse $zp 2d20: 20 7b 47 65 6e 65 72 61 74 69 6e 67 20 72 65 76 {Generating rev 2d30: 69 73 69 6f 6e 20 6f 72 64 65 72 20 66 6f 72 20 ision order for 2d40: 69 6d 70 6f 72 74 2e 2e 2e 7d 0a 09 73 65 74 20 import...}..set 2d50: 66 69 6c 65 6d 61 70 20 24 6d 79 69 6d 70 6f 72 filemap $myimpor 2d60: 74 0a 09 75 6e 73 65 74 20 6d 79 69 6d 70 6f 72 t..unset myimpor 2d70: 74 0a 0a 09 23 20 41 6e 64 20 62 61 63 6b 20 74 t...# And back t 2d80: 6f 20 69 6d 70 6f 72 74 20 63 6f 6e 74 72 6f 6c o import control 2d90: 0a 0a 09 24 65 78 20 64 65 73 74 72 6f 79 0a 09 ...$ex destroy.. 2da0: 24 7a 70 20 64 65 73 74 72 6f 79 0a 0a 09 72 65 $zp destroy...re 2db0: 74 75 72 6e 20 5b 6c 69 73 74 20 24 66 69 6c 65 turn [list $file 2dc0: 6d 61 70 20 24 72 65 76 6d 61 70 5d 0a 20 20 20 map $revmap]. 2dd0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 }.. method E 2de0: 78 70 61 6e 64 44 61 74 61 20 20 20 7b 67 72 61 xpandData {gra 2df0: 70 68 20 6e 6f 64 65 7d 20 7b 20 72 65 74 75 72 ph node} { retur 2e00: 6e 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 n [$graph node g 2e10: 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 20 et $node revnr] 2e20: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 }. method Exp 2e30: 61 6e 64 46 6f 72 6d 61 74 20 7b 67 72 61 70 68 andFormat {graph 2e40: 20 69 74 65 6d 7d 20 7b 20 72 65 74 75 72 6e 20 item} { return 2e50: 3c 5b 6c 69 6e 64 65 78 20 24 69 74 65 6d 20 31 <[lindex $item 1 2e60: 5d 3e 20 7d 20 3b 20 23 20 72 65 76 6e 72 0a 20 ]> } ; # revnr. 2e70: 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 method Expand 2e80: 53 6f 72 74 20 20 20 7b 67 72 61 70 68 20 63 61 Sort {graph ca 2e90: 6e 64 69 64 61 74 65 73 7d 20 7b 0a 09 23 20 63 ndidates} {..# c 2ea0: 61 6e 64 69 64 61 74 65 73 20 3d 20 6c 69 73 74 andidates = list 2eb0: 28 69 74 65 6d 29 2c 20 69 74 65 6d 20 3d 20 6c (item), item = l 2ec0: 69 73 74 28 6e 6f 64 65 20 72 65 76 6e 72 29 0a ist(node revnr). 2ed0: 09 23 20 53 6f 72 74 20 62 79 20 6e 6f 64 65 20 .# Sort by node 2ee0: 61 6e 64 20 72 65 76 6e 72 20 2d 3e 20 54 72 75 and revnr -> Tru 2ef0: 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d nk revisions com 2f00: 65 20 66 69 72 73 74 2e 0a 09 72 65 74 75 72 6e e first...return 2f10: 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 31 [lsort -index 1 2f20: 20 2d 64 69 63 74 20 5b 6c 73 6f 72 74 20 2d 69 -dict [lsort -i 2f30: 6e 64 65 78 20 30 20 2d 64 69 63 74 20 24 63 61 ndex 0 -dict $ca 2f40: 6e 64 69 64 61 74 65 73 5d 5d 0a 20 20 20 20 7d ndidates]]. } 2f50: 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 . method Expa 2f60: 6e 64 31 20 7b 63 68 61 6e 20 64 69 72 20 6d 61 nd1 {chan dir ma 2f70: 78 20 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a x graph node} {. 2f80: 09 6c 6f 67 20 70 72 6f 67 72 65 73 73 20 33 20 .log progress 3 2f90: 66 69 6c 65 20 24 6d 79 69 6d 70 6f 72 74 20 24 file $myimport $ 2fa0: 6d 61 78 20 3b 20 69 6e 63 72 20 6d 79 69 6d 70 max ; incr myimp 2fb0: 6f 72 74 0a 0a 09 73 65 74 20 72 65 76 6e 72 20 ort...set revnr 2fc0: 20 20 20 20 20 20 20 20 20 20 5b 24 67 72 61 70 [$grap 2fd0: 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 h node get $node 2fe0: 20 72 65 76 6e 72 5d 0a 09 73 65 74 20 66 6e 61 revnr]..set fna 2ff0: 6d 65 20 20 20 20 20 20 20 20 20 20 72 24 72 65 me r$re 3000: 76 6e 72 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 vnr..struct::lis 3010: 74 20 61 73 73 69 67 6e 20 5b 24 67 72 61 70 68 t assign [$graph 3020: 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20 node get $node 3030: 74 65 78 74 5d 20 6f 66 66 73 65 74 20 6c 65 6e text] offset len 3040: 67 74 68 0a 0a 09 69 66 20 7b 24 6c 65 6e 67 74 gth...if {$lengt 3050: 68 20 3c 20 30 7d 20 7b 0a 09 20 20 20 20 73 65 h < 0} {.. se 3060: 74 20 64 61 74 61 20 22 22 0a 09 7d 20 65 6c 73 t data ""..} els 3070: 65 20 7b 0a 09 20 20 20 20 73 65 65 6b 20 24 63 e {.. seek $c 3080: 68 61 6e 20 24 6f 66 66 73 65 74 20 73 74 61 72 han $offset star 3090: 74 0a 09 20 20 20 20 73 65 74 20 64 61 74 61 20 t.. set data 30a0: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 40 40 20 [string map {@@ 30b0: 40 7d 20 5b 72 65 61 64 20 24 63 68 61 6e 20 24 @} [read $chan $ 30c0: 6c 65 6e 67 74 68 5d 5d 0a 09 7d 0a 0a 09 69 66 length]]..}...if 30d0: 20 7b 21 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 {![$graph node 30e0: 6b 65 79 65 78 69 73 74 73 20 24 6e 6f 64 65 20 keyexists $node 30f0: 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a 09 20 20 __base__]} {.. 3100: 20 20 23 20 46 75 6c 6c 20 74 65 78 74 20 6e 6f # Full text no 3110: 64 65 2e 20 47 65 74 20 74 68 65 20 64 61 74 61 de. Get the data 3120: 2c 20 64 65 63 6f 64 65 20 69 74 2c 20 61 6e 64 , decode it, and 3130: 20 73 61 76 65 2e 0a 0a 09 20 20 20 20 6c 6f 67 save.... log 3140: 20 77 72 69 74 65 20 38 20 66 69 6c 65 20 7b 45 write 8 file {E 3150: 78 70 61 6e 64 69 6e 67 20 3c 24 72 65 76 6e 72 xpanding <$revnr 3160: 3e 2c 20 66 75 6c 6c 20 74 65 78 74 7d 0a 0a 09 >, full text}... 3170: 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 fileutil::wr 3180: 69 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61 iteFile -transla 3190: 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72 tion binary $dir 31a0: 2f 24 66 6e 61 6d 65 20 24 64 61 74 61 0a 09 7d /$fname $data..} 31b0: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 20 44 else {.. # D 31c0: 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 73 elta node. __bas 31d0: 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65 20 e__ is the name 31e0: 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 of the file cont 31f0: 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74 68 aining.. # th 3200: 65 20 62 61 73 65 6c 69 6e 65 2e 20 54 68 65 20 e baseline. The 3210: 70 61 74 63 68 20 69 73 20 61 74 20 74 68 65 20 patch is at the 3220: 73 70 65 63 69 66 69 65 64 20 6c 6f 63 61 74 69 specified locati 3230: 6f 6e 20 6f 66 0a 09 20 20 20 20 23 20 74 68 65 on of.. # the 3240: 20 61 72 63 68 69 76 65 20 66 69 6c 65 2e 0a 0a archive file... 3250: 09 20 20 20 20 73 65 74 20 66 62 61 73 65 20 5b . set fbase [ 3260: 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 $graph node get 3270: 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a $node __base__]. 3280: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 . log write 8 3290: 20 66 69 6c 65 20 7b 45 78 70 61 6e 64 69 6e 67 file {Expanding 32a0: 20 3c 24 72 65 76 6e 72 3e 2c 20 69 73 20 64 65 <$revnr>, is de 32b0: 6c 74 61 20 6f 66 20 3c 24 66 62 61 73 65 3e 7d lta of <$fbase>} 32c0: 0a 0a 09 20 20 20 20 73 65 74 20 62 61 73 65 20 ... set base 32d0: 5b 66 69 6c 65 75 74 69 6c 3a 3a 63 61 74 20 2d [fileutil::cat - 32e0: 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 translation bina 32f0: 72 79 20 24 64 69 72 2f 24 66 62 61 73 65 5d 0a ry $dir/$fbase]. 3300: 0a 09 20 20 20 20 23 20 57 72 69 74 69 6e 67 20 .. # Writing 3310: 74 68 65 20 70 61 74 63 68 20 74 6f 20 64 69 73 the patch to dis 3320: 6b 20 69 73 20 6a 75 73 74 20 66 6f 72 20 62 65 k is just for be 3330: 74 74 65 72 0a 09 20 20 20 20 23 20 64 65 62 75 tter.. # debu 3340: 67 67 69 6e 67 2e 20 49 74 20 69 73 20 6e 6f 74 gging. It is not 3350: 20 75 73 65 64 20 6f 74 68 65 72 77 69 73 65 2e used otherwise. 3360: 0a 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a .. fileutil:: 3370: 77 72 69 74 65 46 69 6c 65 20 24 64 69 72 2f 72 writeFile $dir/r 3380: 70 61 74 63 68 20 24 64 61 74 61 0a 09 20 20 20 patch $data.. 3390: 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74 65 fileutil::write 33a0: 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61 74 69 6f File -translatio 33b0: 6e 20 62 69 6e 61 72 79 20 24 64 69 72 2f 24 66 n binary $dir/$f 33c0: 6e 61 6d 65 20 5c 0a 09 09 5b 41 70 70 6c 79 20 name \...[Apply 33d0: 24 62 61 73 65 20 24 64 61 74 61 5d 0a 09 7d 0a $base $data]..}. 33e0: 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 ..# Post to all 33f0: 73 75 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 successors that 3400: 74 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 the just generat 3410: 65 64 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 ed file is their 3420: 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e 0a 0a 09 ..# baseline.... 3430: 66 6f 72 65 61 63 68 20 6f 75 74 20 5b 24 67 72 foreach out [$gr 3440: 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74 20 24 aph nodes -out $ 3450: 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 24 67 72 node] {.. $gr 3460: 61 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f 75 aph node set $ou 3470: 74 20 5f 5f 62 61 73 65 5f 5f 20 24 66 6e 61 6d t __base__ $fnam 3480: 65 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 e..}..return. 3490: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 41 70 70 }.. proc App 34a0: 6c 79 20 7b 62 61 73 65 20 64 65 6c 74 61 7d 20 ly {base delta} 34b0: 7b 0a 09 23 20 62 61 73 65 20 20 3d 20 62 61 73 {..# base = bas 34c0: 65 20 74 65 78 74 2e 0a 09 23 20 64 65 6c 74 61 e text...# delta 34d0: 20 3d 20 64 65 6c 74 61 20 69 6e 20 72 63 73 20 = delta in rcs 34e0: 66 6f 72 6d 61 74 2e 0a 09 23 0a 09 23 20 42 6f format...#..# Bo 34f0: 74 68 20 73 74 72 69 6e 67 73 20 61 72 65 20 75 th strings are u 3500: 6e 65 6e 63 6f 64 65 64 2c 20 69 2e 65 2e 20 74 nencoded, i.e. t 3510: 68 69 6e 67 73 20 6c 69 6b 65 20 40 40 2c 20 65 hings like @@, e 3520: 74 63 2e 20 68 61 76 65 0a 09 23 20 61 6c 72 65 tc. have..# alre 3530: 61 64 79 20 62 65 65 6e 20 72 65 70 6c 61 63 65 ady been replace 3540: 64 20 77 69 74 68 20 74 68 65 69 72 20 70 72 6f d with their pro 3550: 70 65 72 20 63 68 61 72 61 63 74 65 72 73 2e 0a per characters.. 3560: 09 23 0a 09 23 20 52 65 74 75 72 6e 20 76 61 6c .#..# Return val 3570: 75 65 20 69 73 20 74 68 65 20 70 61 74 63 68 65 ue is the patche 3580: 64 20 74 65 78 74 2e 0a 0a 09 73 65 74 20 62 61 d text....set ba 3590: 73 65 20 5b 73 70 6c 69 74 20 24 62 61 73 65 20 se [split $base 35a0: 5c 6e 5d 0a 09 73 65 74 20 62 6c 65 6e 20 5b 6c \n]..set blen [l 35b0: 6c 65 6e 67 74 68 20 24 62 61 73 65 5d 0a 09 73 length $base]..s 35c0: 65 74 20 6f 6f 66 66 20 30 0a 09 73 65 74 20 72 et ooff 0..set r 35d0: 65 73 20 22 22 0a 0a 09 73 65 74 20 6c 69 6e 65 es ""...set line 35e0: 73 20 20 5b 73 70 6c 69 74 20 24 64 65 6c 74 61 s [split $delta 35f0: 20 5c 6e 5d 0a 09 73 65 74 20 6e 6c 69 6e 65 73 \n]..set nlines 3600: 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 73 [llength $lines 3610: 5d 0a 0a 09 66 6f 72 20 7b 73 65 74 20 69 20 30 ]...for {set i 0 3620: 7d 20 7b 24 69 20 3c 20 24 6e 6c 69 6e 65 73 7d } {$i < $nlines} 3630: 20 7b 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 {} {.. if {! 3640: 5b 72 65 67 65 78 70 20 7b 5e 28 5b 61 64 5d 29 [regexp {^([ad]) 3650: 28 5c 64 2b 29 5c 73 28 5c 64 2b 29 24 7d 20 5b (\d+)\s(\d+)$} [ 3660: 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69 lindex $lines $i 3670: 5d 20 2d 3e 20 63 6d 64 20 73 6c 20 63 6e 5d 7d ] -> cmd sl cn]} 3680: 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 69 6e 74 {...trouble int 3690: 65 72 6e 61 6c 20 22 42 61 64 20 65 64 20 63 6f ernal "Bad ed co 36a0: 6d 6d 61 6e 64 20 27 5b 6c 69 6e 64 65 78 20 24 mmand '[lindex $ 36b0: 6c 69 6e 65 73 20 24 69 5d 27 22 0a 09 20 20 20 lines $i]'".. 36c0: 20 7d 0a 0a 09 20 20 20 20 69 6e 63 72 20 69 0a }... incr i. 36d0: 09 20 20 20 20 73 65 74 20 65 6c 20 5b 65 78 70 . set el [exp 36e0: 72 20 7b 24 73 6c 20 2b 20 24 63 6e 7d 5d 0a 0a r {$sl + $cn}].. 36f0: 09 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 . switch -exa 3700: 63 74 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 64 ct -- $cmd {...d 3710: 20 7b 0a 09 09 20 20 20 20 69 6e 63 72 20 73 6c {... incr sl 3720: 20 2d 31 0a 09 09 20 20 20 20 69 6e 63 72 20 65 -1... incr e 3730: 6c 20 2d 31 0a 09 09 20 20 20 20 69 66 20 7b 24 l -1... if {$ 3740: 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72 sl < $ooff} { tr 3750: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b ouble internal { 3760: 44 65 6c 65 74 69 6f 6e 20 62 65 66 6f 72 65 20 Deletion before 3770: 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 09 20 last edit} }... 3780: 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c if {$sl > $bl 3790: 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e en} { trouble in 37a0: 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e ternal {Deletion 37b0: 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64 7d 20 past file end} 37c0: 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 65 6c 20 }... if {$el 37d0: 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 > $blen} { troub 37e0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c le internal {Del 37f0: 65 74 69 6f 6e 20 62 65 79 6f 6e 64 20 66 69 6c etion beyond fil 3800: 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20 20 20 66 e end} }... f 3810: 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 65 oreach x [lrange 3820: 20 24 62 61 73 65 20 24 6f 6f 66 66 20 24 73 6c $base $ooff $sl 3830: 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20 ] { lappend res 3840: 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74 20 20 $x }... set 3850: 6f 6f 66 66 20 24 65 6c 0a 09 09 7d 0a 09 09 61 ooff $el...}...a 3860: 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c {... if {$sl 3870: 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72 6f 75 < $ooff} { trou 3880: 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49 6e ble internal {In 3890: 73 65 72 74 20 62 65 66 6f 72 65 20 6c 61 73 74 sert before last 38a0: 20 65 64 69 74 7d 20 7d 0a 09 09 20 20 20 20 69 edit} }... i 38b0: 66 20 7b 24 73 6c 20 3e 20 24 62 6c 65 6e 7d 20 f {$sl > $blen} 38c0: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e { trouble intern 38d0: 61 6c 20 7b 49 6e 73 65 72 74 20 70 61 73 74 20 al {Insert past 38e0: 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 0a 09 09 20 file end} }.... 38f0: 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 foreach x [lr 3900: 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66 ange $base $ooff 3910: 20 24 73 6c 5d 20 20 20 20 20 20 20 20 20 20 20 $sl] 3920: 20 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20 { lappend res 3930: 24 78 20 7d 0a 09 09 20 20 20 20 66 6f 72 65 61 $x }... forea 3940: 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 6c 69 ch x [lrange $li 3950: 6e 65 73 20 24 69 20 5b 65 78 70 72 20 7b 24 69 nes $i [expr {$i 3960: 20 2b 20 24 63 6e 7d 5d 5d 20 7b 20 6c 61 70 70 + $cn}]] { lapp 3970: 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 09 20 end res $x }... 3980: 20 20 20 73 65 74 20 6f 6f 66 66 20 24 73 6c 0a set ooff $sl. 3990: 09 09 20 20 20 20 69 6e 63 72 20 69 20 24 63 6e .. incr i $cn 39a0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 ...}.. }..}.. 39b0: 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 foreach x [lrang 39c0: 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 65 6e e $base $ooff en 39d0: 64 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 d] { lappend res 39e0: 20 24 78 20 7d 0a 09 72 65 74 75 72 6e 20 5b 6a $x }..return [j 39f0: 6f 69 6e 20 24 72 65 73 20 5c 6e 5d 0a 20 20 20 oin $res \n]. 3a00: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 }.. method E 3a10: 78 70 61 6e 64 32 20 7b 67 72 61 70 68 20 6e 6f xpand2 {graph no 3a20: 64 65 7d 20 7b 0a 09 73 65 74 20 72 65 76 6e 72 de} {..set revnr 3a30: 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 [$graph node ge 3a40: 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 0a 0a t $node revnr].. 3a50: 09 23 20 46 69 72 73 74 20 69 6d 70 6f 72 74 20 .# First import 3a60: 74 68 65 20 66 69 6c 65 2e 0a 09 6c 61 70 70 65 the file...lappe 3a70: 6e 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 73 nd myimport [lis 3a80: 74 20 41 20 72 24 72 65 76 6e 72 20 7b 7d 5d 0a t A r$revnr {}]. 3a90: 0a 09 69 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f ..if {[$graph no 3aa0: 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6e 6f de keyexists $no 3ab0: 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a de __base__]} {. 3ac0: 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e 6f 64 . # Delta nod 3ad0: 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73 20 74 e. __base__ is t 3ae0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 he name of the f 3af0: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 09 ile containing.. 3b00: 20 20 20 20 23 20 74 68 65 20 62 61 73 65 6c 69 # the baseli 3b10: 6e 65 2e 20 47 65 6e 65 72 61 74 65 20 69 6e 73 ne. Generate ins 3b20: 74 72 75 63 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 truction to make 3b30: 20 74 68 65 20 64 65 6c 74 61 20 61 73 0a 09 20 the delta as.. 3b40: 20 20 20 23 20 77 65 6c 6c 2e 0a 0a 09 20 20 20 # well.... 3b50: 20 73 65 74 20 66 62 61 73 65 20 5b 24 67 72 61 set fbase [$gra 3b60: 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 ph node get $nod 3b70: 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09 20 20 20 e __base__].. 3b80: 20 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70 6f 72 lappend myimpor 3b90: 74 20 5b 6c 69 73 74 20 44 20 72 24 72 65 76 6e t [list D r$revn 3ba0: 72 20 72 24 66 62 61 73 65 5d 0a 09 7d 0a 0a 09 r r$fbase]..}... 3bb0: 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 73 75 # Post to all su 3bc0: 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 74 68 ccessors that th 3bd0: 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 65 64 e just generated 3be0: 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 0a 09 file is their.. 3bf0: 23 20 62 61 73 65 6c 69 6e 65 2e 20 45 78 63 65 # baseline. Exce 3c00: 70 74 69 6f 6e 3a 20 54 68 6f 73 65 20 77 68 69 ption: Those whi 3c10: 63 68 20 61 76 65 20 61 6c 72 65 61 64 79 20 61 ch ave already a 3c20: 20 62 61 73 65 6c 69 6e 65 20 73 65 74 2e 0a 09 baseline set... 3c30: 23 20 54 6f 67 65 74 68 65 72 20 77 69 74 68 20 # Together with 3c40: 74 68 65 20 73 6f 72 74 69 6e 67 20 6f 66 20 74 the sorting of t 3c50: 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 66 runk revisions f 3c60: 69 72 73 74 20 74 68 65 20 74 72 75 6e 6b 0a 09 irst the trunk.. 3c70: 23 20 73 68 6f 75 6c 64 20 6f 6e 65 20 75 6e 69 # should one uni 3c80: 6e 74 65 72 75 70 74 65 64 20 6c 69 6e 65 2c 20 nterupted line, 3c90: 77 69 74 68 20 62 72 61 6e 63 68 20 72 6f 6f 74 with branch root 3ca0: 73 20 5f 6e 6f 74 5f 20 64 65 6c 74 61 0a 09 23 s _not_ delta..# 3cb0: 20 63 6f 6d 70 72 65 73 73 65 64 20 70 65 72 20 compressed per 3cc0: 74 68 65 69 72 20 62 72 61 6e 63 68 65 73 2e 0a their branches.. 3cd0: 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20 5b 24 ..foreach out [$ 3ce0: 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74 graph nodes -out 3cf0: 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 69 $node] {.. i 3d00: 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 f {[$graph node 3d10: 6b 65 79 65 78 69 73 74 73 20 24 6f 75 74 20 5f keyexists $out _ 3d20: 5f 62 61 73 65 5f 5f 5d 7d 20 63 6f 6e 74 69 6e _base__]} contin 3d30: 75 65 0a 09 20 20 20 20 24 67 72 61 70 68 20 6e ue.. $graph n 3d40: 6f 64 65 20 73 65 74 20 24 6f 75 74 20 5f 5f 62 ode set $out __b 3d50: 61 73 65 5f 5f 20 24 72 65 76 6e 72 0a 09 7d 0a ase__ $revnr..}. 3d60: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }.. 3d70: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 6d variable myim 3d80: 70 6f 72 74 0a 0a 20 20 20 20 23 20 23 20 23 23 port.. # # ## 3d90: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### ##### 3da0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############ 3db0: 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a #. ## State.. 3dc0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 variable myi 3dd0: 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b d { 3de0: 7d 20 3b 20 23 20 46 69 6c 65 20 69 64 20 69 6e } ; # File id in 3df0: 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20 the persistent 3e00: 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72 69 61 state.. varia 3e10: 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20 20 20 ble mypath 3e20: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 {} ; # Pat 3e30: 68 20 6f 66 20 74 68 65 20 66 69 6c 65 27 73 20 h of the file's 3e40: 72 63 73 20 61 72 63 68 69 76 65 2e 0a 20 20 20 rcs archive.. 3e50: 20 76 61 72 69 61 62 6c 65 20 6d 79 75 73 72 70 variable myusrp 3e60: 61 74 68 20 20 20 20 20 20 20 20 20 7b 7d 20 3b ath {} ; 3e70: 20 23 20 50 61 74 68 20 6f 66 20 74 68 65 20 66 # Path of the f 3e80: 69 6c 65 20 61 73 20 73 65 65 6e 20 62 79 20 75 ile as seen by u 3e90: 73 65 72 73 2e 0a 20 20 20 20 76 61 72 69 61 62 sers.. variab 3ea0: 6c 65 20 6d 79 65 78 65 63 75 74 61 62 6c 65 20 le myexecutable 3eb0: 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 0 ; # Bool 3ec0: 65 61 6e 20 66 6c 61 67 20 27 66 69 6c 65 20 65 ean flag 'file e 3ed0: 78 65 63 75 74 61 62 6c 65 27 2e 0a 20 20 20 20 xecutable'.. 3ee0: 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65 variable myproje 3ef0: 63 74 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 ct {} ; 3f00: 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 # Reference to t 3f10: 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63 he project objec 3f20: 74 0a 09 09 09 09 20 20 20 20 23 20 74 68 65 20 t..... # the 3f30: 66 69 6c 65 20 62 65 6c 6f 6e 67 73 20 74 6f 2e file belongs to. 3f40: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my 3f50: 72 65 76 20 2d 61 72 72 61 79 20 20 20 20 20 20 rev -array 3f60: 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 {} ; # Maps revi 3f70: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 sion number to t 3f80: 68 65 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 he..... # ass 3f90: 6f 63 69 61 74 65 64 20 72 65 76 69 73 69 6f 6e ociated revision 3fa0: 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 76 61 72 object.. var 3fb0: 69 61 62 6c 65 20 6d 79 72 65 76 69 73 69 6f 6e iable myrevision 3fc0: 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 s {} ; # S 3fd0: 61 6d 65 20 61 73 20 6d 79 72 65 76 2c 20 62 75 ame as myrev, bu 3fe0: 74 20 61 20 6c 69 73 74 2c 0a 09 09 09 09 20 20 t a list,..... 3ff0: 20 20 23 20 67 69 76 69 6e 67 20 75 73 20 74 68 # giving us th 4000: 65 20 6f 72 64 65 72 20 6f 66 0a 09 09 09 09 20 e order of..... 4010: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a # revisions.. 4020: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 61 variable mya 4030: 69 64 20 20 20 20 20 20 2d 61 72 72 61 79 20 7b id -array { 4040: 7d 20 3b 20 23 20 4d 61 70 20 72 65 76 69 73 69 } ; # Map revisi 4050: 6f 6e 20 6e 75 6d 62 65 72 73 20 74 6f 20 74 68 on numbers to th 4060: 65 20 69 64 0a 09 09 09 09 20 20 20 20 23 20 6f e id..... # o 4070: 66 20 74 68 65 20 61 75 74 68 6f 72 20 77 68 6f f the author who 4080: 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 09 09 20 committed..... 4090: 20 20 20 23 20 69 74 2e 20 54 68 69 73 20 69 73 # it. This is 40a0: 20 6c 61 74 65 72 20 61 67 67 72 65 67 61 74 65 later aggregate 40b0: 64 0a 09 09 09 09 20 20 20 20 23 20 77 69 74 68 d..... # with 40c0: 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 2c commit message, 40d0: 20 62 72 61 6e 63 68 20 6e 61 6d 65 0a 09 09 09 branch name.... 40e0: 09 20 20 20 20 23 20 61 6e 64 20 70 72 6f 6a 65 . # and proje 40f0: 63 74 20 69 64 20 66 6f 72 20 61 20 6d 65 74 61 ct id for a meta 4100: 20 69 64 2e 0a 20 20 20 20 76 61 72 69 61 62 6c id.. variabl 4110: 65 20 6d 79 68 65 61 64 72 65 76 6e 72 20 20 20 e myheadrevnr 4120: 20 20 20 20 7b 7d 20 3b 20 23 20 48 65 61 64 20 {} ; # Head 4130: 72 65 76 69 73 69 6f 6e 20 28 72 65 76 69 73 69 revision (revisi 4140: 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 20 20 20 76 on number). v 4150: 61 72 69 61 62 6c 65 20 6d 79 70 72 69 6e 63 69 ariable myprinci 4160: 70 61 6c 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 pal {} ; # 4170: 20 50 72 69 6e 63 69 70 61 6c 20 62 72 61 6e 63 Principal branc 4180: 68 20 28 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 h (branch number 4190: 29 2e 0a 09 09 09 09 20 20 20 20 23 20 43 6f 6e )...... # Con 41a0: 74 72 61 72 79 20 74 6f 20 74 68 65 20 6e 61 6d trary to the nam 41b0: 65 20 74 68 69 73 20 69 73 20 74 68 65 0a 09 09 e this is the... 41c0: 09 09 20 20 20 20 23 20 64 65 66 61 75 6c 74 20 .. # default 41d0: 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 branch.. vari 41e0: 61 62 6c 65 20 6d 79 64 65 70 65 6e 64 65 6e 63 able mydependenc 41f0: 69 65 73 20 20 20 20 7b 7d 20 3b 20 23 20 44 69 ies {} ; # Di 4200: 63 74 69 6f 6e 61 72 79 20 70 61 72 65 6e 74 20 ctionary parent 4210: 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 09 09 20 20 -> child,..... 4220: 20 20 23 20 72 65 63 6f 72 64 73 20 70 72 69 6d # records prim 4230: 61 72 79 20 64 65 70 65 6e 64 65 6e 63 69 65 73 ary dependencies 4240: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m 4250: 79 69 6d 70 6f 72 74 65 64 20 20 20 20 20 20 20 yimported 4260: 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 0 ; # Boolean 4270: 66 6c 61 67 2e 20 53 65 74 20 69 66 20 61 6e 64 flag. Set if and 4280: 20 6f 6e 6c 79 20 69 66 0a 09 09 09 09 20 20 20 only if..... 4290: 20 23 20 72 65 76 20 31 2e 31 20 6f 66 20 74 68 # rev 1.1 of th 42a0: 65 20 66 69 6c 65 20 73 65 65 6d 69 6e 67 6c 79 e file seemingly 42b0: 0a 09 09 09 09 20 20 20 20 23 20 77 61 73 20 69 ..... # was i 42c0: 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61 64 20 mported instead 42d0: 6f 66 20 61 64 64 65 64 0a 09 09 09 09 20 20 20 of added..... 42e0: 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 20 20 20 # normally.. 42f0: 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74 variable myroot 4300: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b {} ; 4310: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 # Reference to 4320: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a the revision obj 4330: 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 68 6f ect..... # ho 4340: 6c 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20 72 lding the root r 4350: 65 76 69 73 69 6f 6e 2e 20 20 49 74 73 0a 09 09 evision. Its... 4360: 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 20 75 .. # number u 4370: 73 75 61 6c 6c 79 20 69 73 20 27 31 2e 31 27 2e sually is '1.1'. 4380: 20 43 61 6e 20 62 65 0a 09 09 09 09 20 20 20 20 Can be..... 4390: 23 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 75 # a different nu 43a0: 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20 6f 66 mber, because of 43b0: 0a 09 09 09 09 20 20 20 20 23 20 67 61 70 73 20 ..... # gaps 43c0: 63 72 65 61 74 65 64 20 76 69 61 20 27 63 76 73 created via 'cvs 43d0: 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20 20 76 admin -o'.. v 43e0: 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 ariable mybranch 43f0: 65 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 es -array {} ; # 4400: 20 4d 61 70 73 20 62 72 61 6e 63 68 20 6e 75 6d Maps branch num 4410: 62 65 72 20 74 6f 20 74 68 65 20 73 79 6d 62 6f ber to the symbo 4420: 6c 0a 09 09 09 09 20 20 20 20 23 20 6f 62 6a 65 l..... # obje 4430: 63 74 20 68 61 6e 64 6c 69 6e 67 20 74 68 65 20 ct handling the 4440: 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 branch.. vari 4450: 61 62 6c 65 20 6d 79 74 61 67 73 20 20 20 20 20 able mytags 4460: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 -array {} ; # Ma 4470: 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 ps revision numb 4480: 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0a 09 er to the list.. 4490: 09 09 09 20 20 20 20 23 20 6f 66 20 73 79 6d 62 ... # of symb 44a0: 6f 6c 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 74 ol objects for t 44b0: 68 65 20 74 61 67 73 0a 09 09 09 09 20 20 20 20 he tags..... 44c0: 23 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 # associated wit 44d0: 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a h the revision.. 44e0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 73 variable mys 44f0: 79 6d 62 6f 6c 73 20 20 20 20 20 20 20 20 20 7b ymbols { 4500: 7d 20 3b 20 23 20 53 65 74 20 6f 66 20 74 68 65 } ; # Set of the 4510: 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20 66 6f symbol names fo 4520: 75 6e 64 20 69 6e 0a 09 09 09 09 20 20 20 20 23 und in..... # 4530: 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20 20 20 this file... 4540: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e variable mybran 4550: 63 68 63 6e 74 20 30 20 3b 20 23 20 43 6f 75 6e chcnt 0 ; # Coun 4560: 74 65 72 20 66 6f 72 20 62 72 61 6e 63 68 65 73 ter for branches 4570: 2c 20 74 6f 20 72 65 63 6f 72 64 20 74 68 65 69 , to record thei 4580: 72 0a 09 09 09 20 20 20 20 20 23 20 6f 72 64 65 r.... # orde 4590: 72 20 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e 2e r of definition. 45a0: 20 54 68 69 73 20 61 6c 73 6f 20 64 65 66 69 6e This also defin 45b0: 65 73 0a 09 09 09 20 20 20 20 20 23 20 74 68 65 es.... # the 45c0: 69 72 20 6f 72 64 65 72 20 6f 66 20 63 72 65 61 ir order of crea 45d0: 74 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20 74 tion, which is t 45e0: 68 65 0a 09 09 09 20 20 20 20 20 23 20 72 65 76 he.... # rev 45f0: 65 72 73 65 20 6f 66 20 64 65 66 69 6e 69 74 69 erse of definiti 4600: 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 73 6d 61 6c on. I.e. a smal 4610: 6c 65 72 0a 09 09 09 20 20 20 20 20 23 20 6e 75 ler.... # nu 4620: 6d 62 65 72 20 6d 65 61 6e 73 20 27 44 65 66 69 mber means 'Defi 4630: 6e 65 64 20 65 61 72 6c 69 65 72 27 2c 20 6d 65 ned earlier', me 4640: 61 6e 73 0a 09 09 09 20 20 20 20 20 23 20 27 43 ans.... # 'C 4650: 72 65 61 74 65 64 20 6c 61 74 65 72 27 2e 0a 0a reated later'... 4660: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 variable myt 4670: 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 44 69 72 65 runk {} ; # Dire 4680: 63 74 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 ct reference to 4690: 6d 79 70 72 6f 6a 65 63 74 20 2d 3e 20 74 72 75 myproject -> tru 46a0: 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 nk.. variable 46b0: 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 3b 20 23 20 myroots {} ; # 46c0: 4c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 69 6e List of roots in 46d0: 20 74 68 65 20 66 6f 72 65 73 74 20 6f 66 0a 09 the forest of.. 46e0: 09 09 20 20 23 20 6c 6f 64 27 73 2e 20 4f 62 6a .. # lod's. Obj 46f0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 20 74 ect references t 4700: 6f 20 72 65 76 69 73 69 6f 6e 73 20 61 6e 64 0a o revisions and. 4710: 09 09 09 20 20 23 20 62 72 61 6e 63 68 65 73 2e ... # branches. 4720: 20 54 68 65 20 6c 61 74 74 65 72 20 63 61 6e 20 The latter can 4730: 61 70 70 65 61 72 20 77 68 65 6e 20 74 68 65 79 appear when they 4740: 0a 09 09 09 20 20 23 20 61 72 65 20 73 65 76 65 .... # are seve 4750: 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20 70 red from their p 4760: 61 72 65 6e 74 2e 0a 0a 20 20 20 20 23 20 23 20 arent... # # 4770: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ### 4780: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ########## 4790: 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 ###. ## Inter 47a0: 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 nal methods.. 47b0: 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 72 method RecordBr 47c0: 61 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 72 61 anchCommits {bra 47d0: 6e 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 61 63 nches} {..foreac 47e0: 68 20 62 72 61 6e 63 68 72 65 76 6e 72 20 24 62 h branchrevnr $b 47f0: 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 69 ranches {.. i 4800: 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 73 65 f {[catch {...se 4810: 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 t branch [$self 4820: 52 65 76 32 42 72 61 6e 63 68 20 24 62 72 61 6e Rev2Branch $bran 4830: 63 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 7d 5d chrevnr].. }] 4840: 7d 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68 } {...set branch 4850: 20 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c 61 62 [$self AddUnlab 4860: 65 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 76 20 eledBranch [rev 4870: 32 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 2branchnr $branc 4880: 68 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a hrevnr]].. }. 4890: 0a 09 20 20 20 20 23 20 52 65 63 6f 72 64 20 74 .. # Record t 48a0: 68 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 74 20 he commit, just 48b0: 61 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 as revision numb 48c0: 65 72 20 66 6f 72 0a 09 20 20 20 20 23 20 6e 6f er for.. # no 48d0: 77 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 68 44 w. ProcesBranchD 48e0: 65 70 65 6e 64 65 6e 63 69 65 73 20 77 69 6c 6c ependencies will 48f0: 20 65 78 74 65 6e 64 20 74 68 61 74 20 69 74 6f extend that ito 4900: 20 61 0a 09 20 20 20 20 23 20 70 72 6f 70 65 72 a.. # proper 4910: 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 object referenc 4920: 65 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 e.... $branch 4930: 20 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20 24 setchildrevnr $ 4940: 62 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d 0a 09 branchrevnr..}.. 4950: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }.. 4960: 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72 61 method Rev2Bra 4970: 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 20 20 nch {revnr} {. 4980: 20 20 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 integrity 4990: 61 73 73 65 72 74 20 7b 21 5b 72 65 76 20 69 73 assert {![rev is 49a0: 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e trunkrevnr $revn 49b0: 72 5d 7d 20 7b 45 78 70 65 63 74 65 64 20 61 20 r]} {Expected a 49c0: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 branch revision 49d0: 6e 75 6d 62 65 72 7d 0a 09 72 65 74 75 72 6e 20 number}..return 49e0: 24 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65 76 $mybranches([rev 49f0: 20 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 2branchnr $revn 4a00: 72 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d r]). }.. m 4a10: 65 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c ethod AddUnlabel 4a20: 65 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 edBranch {branch 4a30: 6e 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 nr} {..return [$ 4a40: 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20 75 self AddBranch u 4a50: 6e 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 nlabeled-$branch 4a60: 6e 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 nr $branchnr]. 4a70: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method 4a80: 41 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 AddBranch {name 4a90: 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 branchnr} {..if 4aa0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 {[info exists my 4ab0: 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 branches($branch 4ac0: 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 nr)]} {.. log 4ad0: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 write 1 file "I 4ae0: 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72 61 n '$mypath': Bra 4af0: 6e 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27 20 nch '$branchnr' 4b00: 6e 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 named '[$mybranc 4b10: 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20 6e hes($branchnr) n 4b20: 61 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 ame]'".. log 4b30: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 43 61 write 1 file "Ca 4b40: 6e 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e 64 nnot have second 4b50: 20 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 name '$name', i 4b60: 67 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20 20 gnoring it".. 4b70: 20 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 return..}..set 4b80: 62 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 branch [sym %AUT 4b90: 4f 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e 63 O% branch $branc 4ba0: 68 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 hnr [$myproject 4bb0: 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d getsymbol $name] 4bc0: 20 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e 63 68 $self]..$branch 4bd0: 20 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e setposition [in 4be0: 63 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a cr mybranchcnt]. 4bf0: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 28 .set mybranches( 4c00: 24 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61 6e $branchnr) $bran 4c10: 63 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61 6e ch..return $bran 4c20: 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 ch. }.. me 4c30: 74 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61 6d thod AddTag {nam 4c40: 65 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 e revnr} {..set 4c50: 74 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 tag [sym %AUTO% 4c60: 74 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79 70 tag $revnr [$myp 4c70: 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c roject getsymbol 4c80: 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 $name] $self].. 4c90: 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28 24 lappend mytags($ 4ca0: 72 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65 74 revnr) $tag..ret 4cb0: 75 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a 0a urn $tag. }.. 4cc0: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 method Recor 4cd0: 64 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63 69 dBasicDependenci 4ce0: 65 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 es {revnr next} 4cf0: 7b 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65 20 {..# Handle the 4d00: 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 revision depende 4d10: 6e 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74 68 ncies. Record th 4d20: 65 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 em for now, do.. 4d30: 23 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20 74 # nothing with t 4d40: 68 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 hem yet....# On 4d50: 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27 6e the trunk the 'n 4d60: 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 ext' field point 4d70: 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 s to the previou 4d80: 73 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 s..# revision, i 4d90: 2e 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74 5f .e. the _parent_ 4da0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 of the current 4db0: 6f 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 one. Example:..# 4dc0: 20 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20 31 1.6's next is 1 4dd0: 2e 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 .5 (modulo cvs a 4de0: 64 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f dmin -o)....# Co 4df0: 6e 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 ntrarily on a br 4e00: 61 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27 20 anch the 'next' 4e10: 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 field points to 4e20: 74 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20 5f the..# primary _ 4e30: 63 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 child_ of the cu 4e40: 72 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 rrent revision. 4e50: 41 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 As example,..# 1 4e60: 2e 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27 20 .1.3.2's 'next' 4e70: 77 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e will be 1.1.3.3. 4e80: 0a 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27 20 ...# The 'next' 4e90: 66 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 field actually a 4ea0: 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 6f 20 lways refers to 4eb0: 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 the revision..# 4ec0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 containing the d 4ed0: 65 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20 72 elta needed to r 4ee0: 65 74 72 69 65 76 65 20 74 68 61 74 20 72 65 76 etrieve that rev 4ef0: 69 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 ision....# The d 4f00: 65 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 ependencies need 4f10: 65 64 20 68 65 72 65 20 61 72 65 20 74 68 65 20 ed here are the 4f20: 6c 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75 72 logical structur 4f30: 65 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68 69 e,..# parent/chi 4f40: 6c 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 ld, and not the 4f50: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 implementation d 4f60: 65 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 ependent delta.. 4f70: 23 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 # pointers....if 4f80: 20 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20 72 {$next eq ""} r 4f90: 65 74 75 72 6e 0a 09 23 20 20 20 20 20 20 20 20 eturn..# 4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4fb0: 20 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c parent -> chil 4fc0: 64 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72 d..if {[rev istr 4fd0: 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d unkrevnr $revnr] 4fe0: 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 } {.. lappend 4ff0: 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 mydependencies 5000: 24 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 $next $revnr..} 5010: 65 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 else {.. lapp 5020: 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 end mydependenci 5030: 65 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74 0a es $revnr $next. 5040: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. } 5050: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f .. method Pro 5060: 63 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 6e cessPrimaryDepen 5070: 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f dencies {} {..fo 5080: 72 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65 76 reach {parentrev 5090: 6e 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20 24 nr childrevnr} $ 50a0: 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 7b mydependencies { 50b0: 0a 09 20 20 20 20 73 65 74 20 70 61 72 65 6e 74 .. set parent 50c0: 20 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74 72 $myrev($parentr 50d0: 65 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20 63 evnr).. set c 50e0: 68 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63 68 hild $myrev($ch 50f0: 69 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20 24 ildrevnr).. $ 5100: 70 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64 20 parent setchild 5110: 24 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 $child.. $chi 5120: 6c 64 20 73 65 74 70 61 72 65 6e 74 20 24 70 61 ld setparent $pa 5130: 72 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a rent..}..return. 5140: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho 5150: 64 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44 d ProcessBranchD 5160: 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b ependencies {} { 5170: 0a 09 66 6f 72 65 61 63 68 20 7b 62 72 61 6e 63 ..foreach {branc 5180: 68 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 hnr branch} [arr 5190: 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 ay get mybranche 51a0: 73 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72 65 s] {.. set re 51b0: 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 61 72 vnr [$branch par 51c0: 65 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20 entrevnr]... 51d0: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 51e0: 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d s myrev($revnr)] 51f0: 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 } {...log write 5200: 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 1 file "In '$myp 5210: 61 74 68 27 3a 20 54 68 65 20 62 72 61 6e 63 68 ath': The branch 5220: 20 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d '[$branch name] 5230: 27 20 72 65 66 65 72 65 6e 63 65 73 22 0a 09 09 ' references"... 5240: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 log write 1 file 5250: 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 "the bogus revi 5260: 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e sion '$revnr' an 5270: 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 d will be ignore 5280: 64 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 64 65 d."...$branch de 5290: 73 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79 stroy...unset my 52a0: 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 branches($branch 52b0: 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 nr).. } else 52c0: 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 {...set rev $myr 52d0: 65 76 28 24 72 65 76 6e 72 29 0a 09 09 24 72 65 ev($revnr)...$re 52e0: 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 72 61 v addbranch $bra 52f0: 6e 63 68 0a 09 09 24 62 72 61 6e 63 68 20 73 65 nch...$branch se 5300: 74 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09 09 tparent $rev.... 5310: 23 20 49 66 20 72 65 76 69 73 69 6f 6e 73 20 77 # If revisions w 5320: 65 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e ere committed on 5330: 20 74 68 65 20 62 72 61 6e 63 68 20 77 65 20 73 the branch we s 5340: 74 6f 72 65 20 61 0a 09 09 23 20 72 65 66 65 72 tore a...# refer 5350: 65 6e 63 65 20 74 6f 20 74 68 65 20 62 72 61 6e ence to the bran 5360: 63 68 20 74 68 65 72 65 2c 20 61 6e 64 20 66 75 ch there, and fu 5370: 72 74 68 65 72 20 64 65 63 6c 61 72 65 0a 09 09 rther declare... 5380: 23 20 74 68 65 20 66 69 72 73 74 20 63 68 69 6c # the first chil 5390: 64 27 73 20 70 61 72 65 6e 74 20 74 6f 20 62 65 d's parent to be 53a0: 20 62 72 61 6e 63 68 27 73 20 70 61 72 65 6e 74 branch's parent 53b0: 2c 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 20 74 , and...# list t 53c0: 68 69 73 20 63 68 69 6c 64 20 69 6e 20 74 68 65 his child in the 53d0: 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e parent revision 53e0: 2e 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e 63 .....if {[$branc 53f0: 68 20 68 61 73 63 68 69 6c 64 72 65 76 5d 7d 20 h haschildrev]} 5400: 7b 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 6c {... set chil 5410: 64 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 drevnr [$branch 5420: 63 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20 childrevnr]... 5430: 20 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79 72 set child $myr 5440: 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a ev($childrevnr). 5450: 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 .. $branch se 5460: 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09 tchild $child... 5470: 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 . $child setp 5480: 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61 arentbranch $bra 5490: 6e 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c 64 nch... $child 54a0: 20 73 65 74 70 61 72 65 6e 74 20 20 20 20 20 20 setparent 54b0: 20 24 72 65 76 0a 09 09 20 20 20 20 24 72 65 76 $rev... $rev 54c0: 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 addchildonbranc 54d0: 68 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20 h $child...}.. 54e0: 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 }..}..return. 54f0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method 5500: 20 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b 7d SortBranches {} 5510: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 {..foreach {rev 5520: 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 nr rev} [array g 5530: 65 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65 76 et myrev] { $rev 5540: 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d 0a sortbranches }. 5550: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }.. 5560: 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 method Proces 5570: 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65 73 sTagDependencies 5580: 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b {} {..foreach { 5590: 72 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b revnr taglist} [ 55a0: 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 array get mytags 55b0: 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 ] {.. if {![i 55c0: 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 nfo exists myrev 55d0: 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73 ($revnr)]} {...s 55e0: 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74 et n [llength $t 55f0: 61 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72 aglist]...log wr 5600: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 ite 1 file "In ' 5610: 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66 6f $mypath': The fo 5620: 6c 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20 llowing [nsp $n 5630: 74 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22 0a tag] reference". 5640: 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 ..log write 1 fi 5650: 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 le "the bogus re 5660: 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 vision '$revnr' 5670: 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f and will be igno 5680: 72 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68 20 red."...foreach 5690: 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 tag $taglist {.. 56a0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 . log write 1 56b0: 20 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61 67 file " [$tag 56c0: 20 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24 74 name]"... $t 56d0: 61 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09 ag destroy...}.. 56e0: 09 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24 72 .unset mytags($r 56f0: 65 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 evnr).. } els 5700: 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d e {...set rev $m 5710: 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 66 yrev($revnr)...f 5720: 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c oreach tag $tagl 5730: 69 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65 76 ist {... $rev 5740: 20 61 64 64 74 61 67 20 20 20 20 24 74 61 67 0a addtag $tag. 5750: 09 09 20 20 20 20 24 74 61 67 20 73 65 74 74 61 .. $tag setta 5760: 67 72 65 76 20 24 72 65 76 0a 09 09 7d 0a 09 20 grev $rev...}.. 5770: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a }..}..return. 5780: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho 5790: 64 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52 6f d DetermineTheRo 57a0: 6f 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a otRevision {} {. 57b0: 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20 74 .# The root is t 57c0: 68 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 he one revision 57d0: 77 68 69 63 68 20 68 61 73 20 6e 6f 20 70 61 72 which has no par 57e0: 65 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 63 6b ent. By..# check 57f0: 69 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e ing all revision 5800: 73 20 77 65 20 65 6e 73 75 72 65 20 74 68 61 74 s we ensure that 5810: 20 77 65 20 63 61 6e 20 64 65 74 65 63 74 20 61 we can detect a 5820: 6e 64 0a 09 23 20 72 65 70 6f 72 74 20 74 68 65 nd..# report the 5830: 20 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c case of multipl 5840: 65 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74 e roots. Without 5850: 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 0a 09 that we could.. 5860: 23 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e # simply take on 5870: 65 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 66 e revision and f 5880: 6f 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 6e 74 ollow the parent 5890: 20 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65 links to..# the 58a0: 69 72 20 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a ir root (sic!).. 58b0: 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 ..foreach {revnr 58c0: 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74 rev} [array get 58d0: 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20 69 myrev] {.. i 58e0: 66 20 7b 5b 24 72 65 76 20 68 61 73 70 61 72 65 f {[$rev haspare 58f0: 6e 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 nt]} continue.. 5900: 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 integrity ass 5910: 65 72 74 20 7b 24 6d 79 72 6f 6f 74 20 65 71 20 ert {$myroot eq 5920: 22 22 7d 20 7b 4d 75 6c 74 69 70 6c 65 20 72 6f ""} {Multiple ro 5930: 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 ot revisions fou 5940: 6e 64 7d 0a 09 20 20 20 20 73 65 74 20 6d 79 72 nd}.. set myr 5950: 6f 6f 74 20 24 72 65 76 0a 09 7d 0a 0a 09 23 20 oot $rev..}...# 5960: 49 6e 20 74 68 65 20 66 75 74 75 72 65 20 77 65 In the future we 5970: 20 61 6c 73 6f 20 6e 65 65 64 20 61 20 6c 69 73 also need a lis 5980: 74 2c 20 61 73 20 62 72 61 6e 63 68 65 73 20 63 t, as branches c 5990: 61 6e 20 62 65 63 6f 6d 65 0a 09 23 20 73 65 76 an become..# sev 59a0: 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20 ered from their 59b0: 70 61 72 65 6e 74 2c 20 6d 61 6b 69 6e 67 20 74 parent, making t 59c0: 68 65 6d 20 74 68 65 69 72 20 6f 77 6e 20 72 6f hem their own ro 59d0: 6f 74 2e 0a 09 73 65 74 20 6d 79 72 6f 6f 74 73 ot...set myroots 59e0: 20 5b 6c 69 73 74 20 24 6d 79 72 6f 6f 74 5d 0a [list $myroot]. 59f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }.. 5a00: 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d method Determ 5a10: 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 ineRevisionOpera 5a20: 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 tions {} {..fore 5a30: 61 63 68 20 72 65 76 20 24 6d 79 72 65 76 69 73 ach rev $myrevis 5a40: 69 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 74 65 ions { $rev dete 5a50: 72 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20 7d rmineoperation } 5a60: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }.. 5a70: 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 method Deter 5a80: 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65 6c mineLinesOfDevel 5a90: 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 46 opment {} {..# F 5aa0: 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 74 68 69 or revisions thi 5ab0: 73 20 68 61 73 20 62 65 65 6e 20 64 6f 6e 65 20 s has been done 5ac0: 61 6c 72 65 61 64 79 2c 20 69 6e 20 27 65 78 74 already, in 'ext 5ad0: 65 6e 64 27 2e 20 4e 6f 77 0a 09 23 20 77 65 20 end'. Now..# we 5ae0: 64 6f 20 74 68 69 73 20 66 6f 72 20 74 68 65 20 do this for the 5af0: 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67 branches and tag 5b00: 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 s....foreach {_ 5b10: 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 branch} [array g 5b20: 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b et mybranches] { 5b30: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 .. $branch se 5b40: 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c tlod [$self GetL 5b50: 4f 44 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 OD [$branch pare 5b60: 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09 66 ntrevnr]]..}...f 5b70: 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 73 oreach {_ taglis 5b80: 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 t} [array get my 5b90: 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 tags] {.. for 5ba0: 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 each tag $taglis 5bb0: 74 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c 6f t {...$tag setlo 5bc0: 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 d [$self GetLOD 5bd0: 5b 24 74 61 67 20 74 61 67 72 65 76 6e 72 5d 5d [$tag tagrevnr]] 5be0: 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 .. }..}..retu 5bf0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me 5c00: 74 68 6f 64 20 47 65 74 4c 4f 44 20 7b 72 65 76 thod GetLOD {rev 5c10: 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20 nr} {..if {[rev 5c20: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 istrunkrevnr $re 5c30: 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 vnr]} {.. ret 5c40: 75 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 7d 20 urn $mytrunk..} 5c50: 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 74 75 else {.. retu 5c60: 72 6e 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 rn [$self Rev2Br 5c70: 61 6e 63 68 20 24 72 65 76 6e 72 5d 0a 09 7d 0a anch $revnr]..}. 5c80: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho 5c90: 64 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b d HandleNonTrunk 5ca0: 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b 7d DefaultBranch {} 5cb0: 20 7b 0a 09 73 65 74 20 72 65 76 6c 69 73 74 20 {..set revlist 5cc0: 5b 24 73 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b 44 [$self NonTrunkD 5cd0: 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73 5d efaultRevisions] 5ce0: 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 ..if {![llength 5cf0: 24 72 65 76 6c 69 73 74 5d 7d 20 72 65 74 75 72 $revlist]} retur 5d00: 6e 0a 0a 09 24 73 65 6c 66 20 41 64 6a 75 73 74 n...$self Adjust 5d10: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 NonTrunkDefaultB 5d20: 72 61 6e 63 68 20 24 72 65 76 6c 69 73 74 0a 09 ranch $revlist.. 5d30: 24 73 65 6c 66 20 43 68 65 63 6b 4c 4f 44 73 0a $self CheckLODs. 5d40: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }.. 5d50: 20 20 20 6d 65 74 68 6f 64 20 4e 6f 6e 54 72 75 method NonTru 5d60: 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f nkDefaultRevisio 5d70: 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 ns {} {..# From 5d80: 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f 6c 6c cvs2svn the foll 5d90: 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 69 6f owing explanatio 5da0: 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69 63 61 n (with modifica 5db0: 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75 72 tions..# for our 5dc0: 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 algorithm):...# 5dd0: 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 Determine wheth 5de0: 65 72 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 er there are any 5df0: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau 5e00: 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 76 lt branch..# rev 5e10: 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 49 66 20 61 isions....# If a 5e20: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau 5e30: 6c 74 20 62 72 61 6e 63 68 20 69 73 20 64 65 74 lt branch is det 5e40: 65 72 6d 69 6e 65 64 20 74 6f 20 68 61 76 65 20 ermined to have 5e50: 65 78 69 73 74 65 64 2c 0a 09 23 20 72 65 74 75 existed,..# retu 5e60: 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a rn a list of obj 5e70: 65 63 74 73 20 66 6f 72 20 61 6c 6c 20 72 65 76 ects for all rev 5e80: 69 73 69 6f 6e 73 20 74 68 61 74 20 77 65 72 65 isions that were 5e90: 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74 72 75 once..# non-tru 5ea0: 6e 6b 20 64 65 66 61 75 6c 74 20 72 65 76 69 73 nk default revis 5eb0: 69 6f 6e 73 2c 20 69 6e 20 64 65 70 65 6e 64 65 ions, in depende 5ec0: 6e 63 79 20 6f 72 64 65 72 20 28 69 2e 65 2e 20 ncy order (i.e. 5ed0: 72 6f 6f 74 0a 09 23 20 66 69 72 73 74 29 2e 0a root..# first).. 5ee0: 0a 09 23 20 54 68 65 72 65 20 61 72 65 20 74 77 ..# There are tw 5ef0: 6f 20 63 61 73 65 73 20 74 6f 20 68 61 6e 64 6c o cases to handl 5f00: 65 3a 0a 0a 09 23 20 4f 6e 65 20 63 61 73 65 20 e:...# One case 5f10: 69 73 20 73 69 6d 70 6c 65 2e 20 20 54 68 65 20 is simple. The 5f20: 52 43 53 20 66 69 6c 65 20 6c 69 73 74 73 20 61 RCS file lists a 5f30: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a default branch. 5f40: 09 23 20 65 78 70 6c 69 63 69 74 6c 79 20 69 6e .# explicitly in 5f50: 20 69 74 73 20 68 65 61 64 65 72 2c 20 73 75 63 its header, suc 5f60: 68 20 61 73 20 27 31 2e 31 2e 31 27 2e 20 20 49 h as '1.1.1'. I 5f70: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 65 0a n this case, we. 5f80: 09 23 20 6b 6e 6f 77 20 74 68 61 74 20 65 76 65 .# know that eve 5f90: 72 79 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 ry revision on t 5fa0: 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 he vendor branch 5fb0: 20 69 73 20 74 6f 20 62 65 0a 09 23 20 74 72 65 is to be..# tre 5fc0: 61 74 65 64 20 61 73 20 68 65 61 64 20 6f 66 20 ated as head of 5fd0: 74 72 75 6e 6b 20 61 74 20 74 68 61 74 20 70 6f trunk at that po 5fe0: 69 6e 74 20 69 6e 20 74 69 6d 65 2e 0a 0a 09 23 int in time....# 5ff0: 20 42 75 74 20 74 68 65 72 65 27 73 20 61 6c 73 But there's als 6000: 6f 20 61 20 64 65 67 65 6e 65 72 61 74 65 20 63 o a degenerate c 6010: 61 73 65 2e 20 20 54 68 65 20 52 43 53 20 66 69 ase. The RCS fi 6020: 6c 65 20 64 6f 65 73 20 6e 6f 74 0a 09 23 20 63 le does not..# c 6030: 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 20 urrently have a 6040: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 default branch, 6050: 79 65 74 20 77 65 20 63 61 6e 20 64 65 64 75 63 yet we can deduc 6060: 65 20 74 68 61 74 20 66 6f 72 0a 09 23 20 73 6f e that for..# so 6070: 6d 65 20 70 65 72 69 6f 64 20 69 6e 20 74 68 65 me period in the 6080: 20 70 61 73 74 20 69 74 20 70 72 6f 62 61 62 6c past it probabl 6090: 79 20 2a 64 69 64 2a 20 68 61 76 65 20 6f 6e 65 y *did* have one 60a0: 2e 20 20 46 6f 72 0a 09 23 20 65 78 61 6d 70 6c . For..# exampl 60b0: 65 2c 20 74 68 65 20 66 69 6c 65 20 68 61 73 20 e, the file has 60c0: 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 vendor revisions 60d0: 20 31 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e 31 2e 1.1.1.1 -> 1.1. 60e0: 31 2e 39 36 2c 0a 09 23 20 61 6c 6c 20 6f 66 20 1.96,..# all of 60f0: 77 68 69 63 68 20 61 72 65 20 64 61 74 65 64 20 which are dated 6100: 62 65 66 6f 72 65 20 31 2e 32 2c 20 61 6e 64 20 before 1.2, and 6110: 74 68 65 6e 20 69 74 20 68 61 73 20 31 2e 31 2e then it has 1.1. 6120: 31 2e 39 37 0a 09 23 20 2d 3e 20 31 2e 31 2e 31 1.97..# -> 1.1.1 6130: 2e 31 30 30 20 64 61 74 65 64 20 61 66 74 65 72 .100 dated after 6140: 20 31 2e 32 2e 20 20 49 6e 20 74 68 69 73 20 63 1.2. In this c 6150: 61 73 65 2c 20 77 65 20 73 68 6f 75 6c 64 0a 09 ase, we should.. 6160: 23 20 72 65 63 6f 72 64 20 31 2e 31 2e 31 2e 39 # record 1.1.1.9 6170: 36 20 61 73 20 74 68 65 20 6c 61 73 74 20 76 65 6 as the last ve 6180: 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 20 74 6f ndor revision to 6190: 20 68 61 76 65 20 62 65 65 6e 20 74 68 65 0a 09 have been the.. 61a0: 23 20 68 65 61 64 20 6f 66 20 74 68 65 20 64 65 # head of the de 61b0: 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 0a 09 fault branch.... 61c0: 69 66 20 7b 24 6d 79 70 72 69 6e 63 69 70 61 6c if {$myprincipal 61d0: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 ne ""} {.. # 61e0: 20 54 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 There is still 61f0: 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 a default branch 6200: 3b 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 ; that means tha 6210: 74 20 61 6c 6c 0a 09 20 20 20 20 23 20 72 65 76 t all.. # rev 6220: 69 73 69 6f 6e 73 20 6f 6e 20 74 68 61 74 20 62 isions on that b 6230: 72 61 6e 63 68 20 67 65 74 20 6d 61 72 6b 65 64 ranch get marked 6240: 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 .... log writ 6250: 65 20 35 20 66 69 6c 65 20 22 46 6f 75 6e 64 20 e 5 file "Found 6260: 65 78 70 6c 69 63 69 74 6c 79 20 6d 61 72 6b 65 explicitly marke 6270: 64 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 d NTDB"... se 6280: 74 20 72 6e 65 78 74 20 5b 24 6d 79 72 6f 6f 74 t rnext [$myroot 6290: 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 69 66 20 child].. if 62a0: 7b 24 72 6e 65 78 74 20 6e 65 20 22 22 7d 20 7b {$rnext ne ""} { 62b0: 0a 09 09 74 72 6f 75 62 6c 65 20 66 61 74 61 6c ...trouble fatal 62c0: 20 22 46 69 6c 65 20 77 69 74 68 20 64 65 66 61 "File with defa 62d0: 75 6c 74 20 62 72 61 6e 63 68 20 24 6d 79 70 72 ult branch $mypr 62e0: 69 6e 63 69 70 61 6c 20 61 6c 73 6f 20 68 61 73 incipal also has 62f0: 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6e 65 78 revision [$rnex 6300: 74 20 72 65 76 6e 72 5d 22 0a 09 09 72 65 74 75 t revnr]"...retu 6310: 72 6e 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 rn.. }... 6320: 73 65 74 20 72 65 76 20 5b 24 6d 79 62 72 61 6e set rev [$mybran 6330: 63 68 65 73 28 24 6d 79 70 72 69 6e 63 69 70 61 ches($myprincipa 6340: 6c 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 l) child].. s 6350: 65 74 20 72 65 73 20 7b 7d 0a 0a 09 20 20 20 20 et res {}... 6360: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 while {$rev ne " 6370: 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72 "} {...lappend r 6380: 65 73 20 24 72 65 76 0a 09 09 73 65 74 20 72 65 es $rev...set re 6390: 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 v [$rev child].. 63a0: 20 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 }... retu 63b0: 72 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 rn $res...} else 63c0: 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 7d if {$myimported} 63d0: 20 7b 0a 09 20 20 20 20 23 20 4e 6f 20 64 65 66 {.. # No def 63e0: 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 62 75 74 ault branch, but 63f0: 20 74 68 65 20 66 69 6c 65 20 61 70 70 65 61 72 the file appear 6400: 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 0a 09 s to have been.. 6410: 20 20 20 20 23 20 69 6d 70 6f 72 74 65 64 2e 20 # imported. 6420: 20 53 6f 20 6f 75 72 20 65 64 75 63 61 74 65 64 So our educated 6430: 20 67 75 65 73 73 20 69 73 20 74 68 61 74 20 61 guess is that a 6440: 6c 6c 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 ll revisions.. 6450: 20 20 23 20 6f 6e 20 74 68 65 20 27 31 2e 31 2e # on the '1.1. 6460: 31 27 20 62 72 61 6e 63 68 20 77 69 74 68 20 74 1' branch with t 6470: 69 6d 65 73 74 61 6d 70 73 20 70 72 69 6f 72 20 imestamps prior 6480: 74 6f 20 74 68 65 0a 09 20 20 20 20 23 20 74 69 to the.. # ti 6490: 6d 65 73 74 61 6d 70 20 6f 66 20 27 31 2e 32 27 mestamp of '1.2' 64a0: 20 77 65 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 were non-trunk 64b0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 default branch.. 64c0: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e # revisions. 64d0: 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 72 65 ... # This re 64e0: 61 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f 63 65 73 ally only proces 64f0: 73 65 73 20 73 74 61 6e 64 61 72 64 20 27 31 2e ses standard '1. 6500: 31 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a 09 20 20 1.1.*'-style.. 6510: 20 20 23 20 76 65 6e 64 6f 72 20 72 65 76 69 73 # vendor revis 6520: 69 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f 75 6c 64 ions. One could 6530: 20 63 6f 6e 63 65 69 76 61 62 6c 79 20 68 61 76 conceivably hav 6540: 65 20 61 20 66 69 6c 65 0a 09 20 20 20 20 23 20 e a file.. # 6550: 77 68 6f 73 65 20 64 65 66 61 75 6c 74 20 62 72 whose default br 6560: 61 6e 63 68 20 69 73 20 31 2e 31 2e 33 20 6f 72 anch is 1.1.3 or 6570: 20 77 68 61 74 65 76 65 72 2c 20 6f 72 20 77 61 whatever, or wa 6580: 73 20 74 68 61 74 0a 09 20 20 20 20 23 20 61 74 s that.. # at 6590: 20 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e 20 74 some point in t 65a0: 69 6d 65 2c 20 77 69 74 68 20 76 65 6e 64 6f 72 ime, with vendor 65b0: 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 33 revisions 1.1.3 65c0: 2e 31 2c 0a 09 20 20 20 20 23 20 31 2e 31 2e 33 .1,.. # 1.1.3 65d0: 2e 32 2c 20 65 74 63 2e 20 20 42 75 74 20 77 69 .2, etc. But wi 65e0: 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 th the default b 65f0: 72 61 6e 63 68 20 67 6f 6e 65 20 6e 6f 77 2c 0a ranch gone now,. 6600: 09 20 20 20 20 23 20 77 65 27 64 20 68 61 76 65 . # we'd have 6610: 20 6e 6f 20 62 61 73 69 73 20 66 6f 72 20 61 73 no basis for as 6620: 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20 suming that the 6630: 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 0a 09 20 20 non-standard.. 6640: 20 20 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 # vendor branc 6650: 68 20 68 61 64 20 65 76 65 72 20 62 65 65 6e 20 h had ever been 6660: 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e the default bran 6670: 63 68 20 61 6e 79 77 61 79 2e 0a 0a 09 20 20 20 ch anyway.... 6680: 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 # Note that we 6690: 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73 rely on comparis 66a0: 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 ons between the 66b0: 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 20 timestamps.. 66c0: 23 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f # of the revisio 66d0: 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 ns on the vendor 66e0: 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61 74 branch and that 66f0: 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69 73 of.. # revis 6700: 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 68 ion 1.2, even th 6710: 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73 74 61 ough the timesta 6720: 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20 20 mps might be.. 6730: 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64 75 # incorrect du 6740: 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e e to clock skew. 6750: 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 20 We could do a 6760: 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23 20 slightly.. # 6770: 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77 65 better job if we 6780: 20 75 73 65 64 20 74 68 65 20 63 68 61 6e 67 65 used the change 6790: 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c 20 set timestamps, 67a0: 61 73 20 69 74 20 69 73 0a 09 20 20 20 20 23 20 as it is.. # 67b0: 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74 68 possible that th 67c0: 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74 e dependencies t 67d0: 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20 hat went into.. 67e0: 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e 67 # determining 67f0: 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d 70 those timestamp 6800: 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75 72 s are more accur 6810: 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20 23 ate. But.. # 6820: 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71 75 that would requ 6830: 69 72 65 20 61 6e 20 65 78 74 72 61 20 70 61 73 ire an extra pas 6840: 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20 s or two.... 6850: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 6860: 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 s mybranches(1.1 6870: 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b .1)]} { return { 6880: 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 } }... log wr 6890: 69 74 65 20 35 20 66 69 6c 65 20 22 44 65 64 75 ite 5 file "Dedu 68a0: 63 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f 66 ced existence of 68b0: 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 NTDB"... set 68c0: 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 68 rev [$mybranch 68d0: 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d es(1.1.1) child] 68e0: 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 20 7b .. set res { 68f0: 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70 20 }.. set stop 6900: 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a [$myroot child]. 6910: 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20 .. if {$stop 6920: 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 74 eq ""} {...# Get 6930: 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 everything on t 6940: 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69 6c he branch...whil 6950: 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b e {$rev ne ""} { 6960: 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 ... lappend r 6970: 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 es $rev... se 6980: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c t rev [$rev chil 6990: 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c d]...}.. } el 69a0: 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74 se {...# Collect 69b0: 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 everything on t 69c0: 68 65 20 62 72 61 6e 63 68 20 77 68 69 63 68 20 he branch which 69d0: 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 09 seems to have... 69e0: 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64 # been committed 69f0: 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 before the firs 6a00: 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 t primary child 6a10: 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 20 of the...# root 6a20: 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20 revision....set 6a30: 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 20 stopdate [$stop 6a40: 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24 date]...while {$ 6a50: 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 rev ne ""} {... 6a60: 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61 74 if {[$rev dat 6a70: 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d e] >= $stopdate} 6a80: 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 70 break... lap 6a90: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 pend res $rev... 6aa0: 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 set rev [$re 6ab0: 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 v child]...}.. 6ac0: 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e }... return 6ad0: 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b $res...} else { 6ae0: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a .. return {}. 6af0: 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 .}. }.. # 6b00: 47 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49 6e General note: In 6b10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d the following m 6b20: 65 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20 6d ethods we only m 6b30: 6f 64 69 66 79 20 74 68 65 20 6c 69 6e 6b 73 0a odify the links. 6b40: 20 20 20 20 23 20 62 65 74 77 65 65 6e 20 72 65 # between re 6b50: 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d 62 visions and symb 6b60: 6f 6c 73 20 74 6f 20 72 65 73 74 72 75 63 74 75 ols to restructu 6b70: 72 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a re the revision. 6b80: 20 20 20 20 23 20 74 72 65 65 2e 20 57 65 20 64 # tree. We d 6b90: 6f 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 6f o __not__ destro 6ba0: 79 20 74 68 65 20 6f 62 6a 65 63 74 73 2e 20 47 y the objects. G 6bb0: 69 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65 78 iven the complex 6bc0: 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 43 20 links. # GC 6bd0: 69 73 20 64 69 66 66 69 63 75 6c 74 20 61 74 20 is difficult at 6be0: 74 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 20 69 this level. It i 6bf0: 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 74 6f s much easier to 6c00: 20 64 72 6f 70 0a 20 20 20 20 23 20 65 76 65 72 drop. # ever 6c10: 79 74 68 69 6e 67 20 77 68 65 6e 20 77 65 20 77 ything when we w 6c20: 65 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 69 73 e are done. This 6c30: 20 68 61 70 70 65 6e 73 20 69 6e 20 27 64 72 6f happens in 'dro 6c40: 70 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 23 20 p', using. # 6c50: 74 68 65 20 73 74 61 74 65 20 76 61 72 69 61 62 the state variab 6c60: 6c 65 20 27 6d 79 72 65 76 27 2c 20 27 6d 79 62 le 'myrev', 'myb 6c70: 72 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 27 6d ranches', and 'm 6c80: 79 74 61 67 73 27 2e 20 57 68 61 74 20 77 65 0a ytags'. What we. 6c90: 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 70 65 # have to pe 6ca0: 72 73 69 73 74 2c 20 70 65 72 66 6f 72 6d 65 64 rsist, performed 6cb0: 20 62 79 20 27 70 65 72 73 69 73 74 27 2c 20 77 by 'persist', w 6cc0: 65 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a 20 e know will be. 6cd0: 20 20 20 23 20 72 65 61 63 68 61 62 6c 65 20 74 # reachable t 6ce0: 68 72 6f 75 67 68 20 74 68 65 20 72 65 76 69 73 hrough the revis 6cf0: 69 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e 20 27 ions listed in ' 6d00: 6d 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 68 65 myroots' and the 6d10: 69 72 0a 20 20 20 20 23 20 63 68 69 6c 64 72 65 ir. # childre 6d20: 6e 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a 0a n and symbols... 6d30: 20 20 20 20 6d 65 74 68 6f 64 20 41 64 6a 75 73 method Adjus 6d40: 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 tNonTrunkDefault 6d50: 42 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 74 7d Branch {revlist} 6d60: 20 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b 24 6d {..set stop [$m 6d70: 79 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23 20 yroot child] ;# 6d80: 72 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 20 rev '1.2'...log 6d90: 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 41 64 write 5 file "Ad 6da0: 6a 75 73 74 69 6e 67 20 4e 54 44 42 20 63 6f 6e justing NTDB con 6db0: 74 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c taining [nsp [ll 6dc0: 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d 20 ength $revlist] 6dd0: 72 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 46 revision]"...# F 6de0: 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20 rom cvs2svn the 6df0: 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e following explan 6e00: 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 ation (with modi 6e10: 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 fications..# for 6e20: 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a our algorithm): 6e30: 0a 0a 09 23 20 41 64 6a 75 73 74 20 74 68 65 20 ...# Adjust the 6e40: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul 6e50: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f t branch revisio 6e60: 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a ns found in the. 6e70: 09 23 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a 09 .# 'revlist'.... 6e80: 23 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 20 69 # 'myimported' i 6e90: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 s a boolean flag 6ea0: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 indicating whet 6eb0: 68 65 72 20 74 68 69 73 20 66 69 6c 65 0a 09 23 her this file..# 6ec0: 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 appears to have 6ed0: 20 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c 20 been imported, 6ee0: 77 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e 73 which also means 6ef0: 20 74 68 61 74 0a 09 23 20 72 65 76 69 73 69 6f that..# revisio 6f00: 6e 20 31 2e 31 20 68 61 73 20 61 20 67 65 6e 65 n 1.1 has a gene 6f10: 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 rated log messag 6f20: 65 20 74 68 61 74 20 6e 65 65 64 20 6e 6f 74 20 e that need not 6f30: 62 65 0a 09 23 20 70 72 65 73 65 72 76 65 64 2e be..# preserved. 6f40: 20 20 27 72 65 76 6c 69 73 74 27 20 69 73 20 61 'revlist' is a 6f50: 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 20 list of object 6f60: 72 65 66 65 72 65 6e 63 65 73 20 66 6f 72 20 74 references for t 6f70: 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 he..# revisions 6f80: 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 64 that have been d 6f90: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 etermined to be 6fa0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul 6fb0: 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 t..# branch revi 6fc0: 73 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 sions....# Note 6fd0: 74 68 61 74 20 74 68 65 20 66 69 72 73 74 20 72 that the first r 6fe0: 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 64 evision on the d 6ff0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 efault branch is 7000: 0a 09 23 20 68 61 6e 64 6c 65 64 20 73 74 72 61 ..# handled stra 7010: 6e 67 65 6c 79 20 62 79 20 43 56 53 2e 20 20 49 ngely by CVS. I 7020: 66 20 61 20 66 69 6c 65 20 69 73 20 69 6d 70 6f f a file is impo 7030: 72 74 65 64 20 28 61 73 20 6f 70 70 6f 73 65 64 rted (as opposed 7040: 0a 09 23 20 74 6f 20 62 65 69 6e 67 20 61 64 64 ..# to being add 7050: 65 64 29 2c 20 43 56 53 20 63 72 65 61 74 65 73 ed), CVS creates 7060: 20 61 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 2c a 1.1 revision, 7070: 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 61 0a then creates a. 7080: 09 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 .# vendor branch 7090: 20 31 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e 20 1.1.1 based on 70a0: 31 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 74 65 1.1, then create 70b0: 73 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20 72 s a 1.1.1.1..# r 70c0: 65 76 69 73 69 6f 6e 20 74 68 61 74 20 69 73 20 evision that is 70d0: 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 68 65 identical to the 70e0: 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 69 1.1 revision (i 70f0: 2e 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c 74 .e., its..# delt 7100: 61 74 65 78 74 20 69 73 20 65 6d 70 74 79 29 2e atext is empty). 7110: 20 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 61 67 The log messag 7120: 65 20 74 68 61 74 20 74 68 65 20 75 73 65 72 20 e that the user 7130: 74 79 70 65 64 0a 09 23 20 77 68 65 6e 20 69 6d typed..# when im 7140: 70 6f 72 74 69 6e 67 20 69 73 20 73 74 6f 72 65 porting is store 7150: 64 20 77 69 74 68 20 74 68 65 20 31 2e 31 2e 31 d with the 1.1.1 7160: 2e 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 54 68 .1 revision. Th 7170: 65 20 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f e 1.1..# revisio 7180: 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e n always contain 7190: 73 20 61 20 73 74 61 6e 64 61 72 64 2c 20 67 65 s a standard, ge 71a0: 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 nerated log mess 71b0: 61 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 61 6c age,..# 'Initial 71c0: 20 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a 09 revision\n'.... 71d0: 23 20 57 68 65 6e 20 77 65 20 64 65 74 65 63 74 # When we detect 71e0: 20 61 20 73 74 72 61 69 67 68 74 66 6f 72 77 61 a straightforwa 71f0: 72 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20 74 rd import like t 7200: 68 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 23 20 his, we want..# 7210: 74 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 79 20 to handle it by 7220: 64 65 6c 65 74 69 6e 67 20 74 68 65 20 31 2e 31 deleting the 1.1 7230: 20 72 65 76 69 73 69 6f 6e 20 28 77 68 69 63 68 revision (which 7240: 20 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e 74 doesn't..# cont 7250: 61 69 6e 20 61 6e 79 20 75 73 65 66 75 6c 20 69 ain any useful i 7260: 6e 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20 nformation) and 7270: 6d 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20 69 making 1.1.1.1 i 7280: 6e 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70 65 nto an..# indepe 7290: 6e 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74 68 ndent root in th 72a0: 65 20 66 69 6c 65 27 73 20 64 65 70 65 6e 64 65 e file's depende 72b0: 6e 63 79 20 74 72 65 65 2e 20 20 49 6e 20 53 56 ncy tree. In SV 72c0: 4e 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77 69 N,..# 1.1.1.1 wi 72d0: 6c 6c 20 62 65 20 61 64 64 65 64 20 64 69 72 65 ll be added dire 72e0: 63 74 6c 79 20 74 6f 20 74 68 65 20 76 65 6e 64 ctly to the vend 72f0: 6f 72 20 62 72 61 6e 63 68 20 77 69 74 68 20 69 or branch with i 7300: 74 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 63 6f ts..# initial co 7310: 6e 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e 20 ntent. Then in 7320: 61 20 73 70 65 63 69 61 6c 20 27 70 6f 73 74 2d a special 'post- 7330: 63 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23 20 commit', the..# 7340: 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e 1.1.1.1 revision 7350: 20 69 73 20 63 6f 70 69 65 64 20 62 61 63 6b 20 is copied back 7360: 74 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 66 to trunk....# If 7370: 20 74 68 65 20 75 73 65 72 20 69 6d 70 6f 72 74 the user import 7380: 73 20 61 67 61 69 6e 20 74 6f 20 74 68 65 20 73 s again to the s 7390: 61 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 ame vendor branc 73a0: 68 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 20 63 h, then CVS..# c 73b0: 72 65 61 74 65 73 20 72 65 76 69 73 69 6f 6e 73 reates revisions 73c0: 20 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 2e 1.1.1.2, 1.1.1. 73d0: 33 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 20 76 3, etc. on the v 73e0: 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23 endor branch,..# 73f0: 20 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e 74 *without* count 7400: 65 72 70 61 72 74 73 20 69 6e 20 74 72 75 6e 6b erparts in trunk 7410: 20 28 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 (even though th 7420: 65 73 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 ese revisions..# 7430: 20 65 66 66 65 63 74 69 76 65 6c 79 20 70 6c 61 effectively pla 7440: 79 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 74 72 y the role of tr 7450: 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e 20 unk revisions). 7460: 20 53 6f 20 61 66 74 65 72 20 77 65 20 61 64 64 So after we add 7470: 0a 09 23 20 73 75 63 68 20 72 65 76 69 73 69 6f ..# such revisio 7480: 6e 73 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 ns to the vendor 7490: 20 62 72 61 6e 63 68 2c 20 77 65 20 61 6c 73 6f branch, we also 74a0: 20 63 6f 70 79 20 74 68 65 6d 20 62 61 63 6b 20 copy them back 74b0: 74 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20 70 to..# trunk in p 74c0: 6f 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 23 ost-commits....# 74d0: 20 57 65 20 6d 61 72 6b 20 74 68 65 20 72 65 76 We mark the rev 74e0: 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 isions found in 74f0: 27 72 65 76 6c 69 73 74 27 20 61 73 20 64 65 66 'revlist' as def 7500: 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 ault branch..# r 7510: 65 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f 2c evisions. Also, 7520: 20 69 66 20 74 68 65 20 72 6f 6f 74 20 72 65 76 if the root rev 7530: 69 73 69 6f 6e 20 68 61 73 20 61 20 70 72 69 6d ision has a prim 7540: 61 72 79 20 63 68 69 6c 64 0a 09 23 20 77 65 20 ary child..# we 7550: 73 65 74 20 74 68 61 74 20 72 65 76 69 73 69 6f set that revisio 7560: 6e 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20 74 n to depend on t 7570: 68 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 6e he last non-trun 7580: 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61 k default..# bra 7590: 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 nch revision and 75a0: 20 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 73 74 possibly adjust 75b0: 20 69 74 73 20 74 79 70 65 20 61 63 63 6f 72 64 its type accord 75c0: 69 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69 72 ingly....set fir 75d0: 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c st [lindex $revl 75e0: 69 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 69 ist 0]...log wri 75f0: 74 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 66 69 te 6 file "<[$fi 7600: 72 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78 70 rst revnr]> [exp 7610: 72 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 3f r {$myimported ? 7620: 20 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 22 6e "imported" : "n 7630: 6f 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c 20 ot imported"}], 7640: 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f [$first operatio 7650: 6e 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69 72 n], [expr {[$fir 7660: 73 74 20 68 61 73 74 65 78 74 5d 20 3f 20 22 68 st hastext] ? "h 7670: 61 73 20 74 65 78 74 22 20 3a 20 22 6e 6f 20 74 as text" : "no t 7680: 65 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 6d ext"}]"...if {$m 7690: 79 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 20 20 yimported &&.. 76a0: 20 20 5b 24 66 69 72 73 74 20 72 65 76 6e 72 5d [$first revnr] 76b0: 20 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 26 26 eq "1.1.1.1" && 76c0: 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20 6f 70 .. [$first op 76d0: 65 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 68 61 eration] eq "cha 76e0: 6e 67 65 22 20 26 26 0a 09 20 20 20 20 21 5b 24 nge" &&.. ![$ 76f0: 66 69 72 73 74 20 68 61 73 74 65 78 74 5d 7d 20 first hastext]} 7700: 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 31 {... set rev1 7710: 31 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 1 [$first parent 7720: 5d 20 3b 20 23 20 41 73 73 65 72 74 3a 20 53 68 ] ; # Assert: Sh 7730: 6f 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e 0a ould be myroot.. 7740: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 . log write 3 7750: 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 file "Removing 7760: 69 72 72 65 6c 65 76 61 6e 74 20 72 65 76 69 73 irrelevant revis 7770: 69 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 76 6e ion [$rev11 revn 7780: 72 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 74 20 r]"... # Cut 7790: 6f 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 72 6f out the old myro 77a0: 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 20 ot revision.... 77b0: 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f ldelete myroo 77c0: 74 73 20 24 72 65 76 31 31 20 3b 20 23 20 4e 6f ts $rev11 ; # No 77d0: 74 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f 6e t a root any lon 77e0: 67 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 72 73 ger.... $firs 77f0: 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 20 t cutfromparent 7800: 3b 20 23 20 53 65 76 65 72 20 72 65 76 69 73 69 ; # Sever revisi 7810: 6f 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 72 on from parent r 7820: 65 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69 66 evision... if 7830: 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b {$stop ne ""} { 7840: 0a 09 09 24 73 74 6f 70 20 63 75 74 66 72 6f 6d ...$stop cutfrom 7850: 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 parent...lappend 7860: 20 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 20 3b myroots $stop ; 7870: 20 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66 74 # New root, aft 7880: 65 72 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 er vendor branch 7890: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 .. }... # 78a0: 43 75 74 20 6f 75 74 20 74 68 65 20 76 65 6e 64 Cut out the vend 78b0: 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c or branch symbol 78c0: 0a 0a 09 20 20 20 20 73 65 74 20 76 65 6e 64 6f ... set vendo 78d0: 72 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 r [$first parent 78e0: 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 6e 74 branch].. int 78f0: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 egrity assert {$ 7900: 76 65 6e 64 6f 72 20 6e 65 20 22 22 7d 20 7b 46 vendor ne ""} {F 7910: 69 72 73 74 20 4e 54 44 42 20 72 65 76 69 73 69 irst NTDB revisi 7920: 6f 6e 20 68 61 73 20 6e 6f 20 62 72 61 6e 63 68 on has no branch 7930: 7d 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65 6e }.. if {[$ven 7940: 64 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20 24 dor parent] eq $ 7950: 72 65 76 31 31 7d 20 7b 0a 09 09 24 72 65 76 31 rev11} {...$rev1 7960: 31 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 1 removebranch 7970: 20 20 20 20 20 20 24 76 65 6e 64 6f 72 0a 09 09 $vendor... 7980: 24 72 65 76 31 31 20 72 65 6d 6f 76 65 63 68 69 $rev11 removechi 7990: 6c 64 6f 6e 62 72 61 6e 63 68 20 24 66 69 72 73 ldonbranch $firs 79a0: 74 0a 09 09 24 76 65 6e 64 6f 72 20 63 75 74 62 t...$vendor cutb 79b0: 72 61 6e 63 68 70 61 72 65 6e 74 20 20 20 20 3b ranchparent ; 79c0: 23 20 62 70 20 3d 20 72 65 76 31 31 2c 20 61 62 # bp = rev11, ab 79d0: 6f 75 74 20 74 6f 20 62 65 20 67 6f 6e 65 0a 09 out to be gone.. 79e0: 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 .$first cutfromp 79f0: 61 72 65 6e 74 62 72 61 6e 63 68 20 3b 23 20 70 arentbranch ;# p 7a00: 62 20 3d 20 76 65 6e 64 6f 72 2c 20 74 6f 20 62 b = vendor, to b 7a10: 65 20 61 20 64 65 74 61 63 68 65 64 20 4c 4f 44 e a detached LOD 7a20: 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f ...lappend myroo 7a30: 74 73 20 24 66 69 72 73 74 0a 09 20 20 20 20 7d ts $first.. } 7a40: 0a 0a 09 20 20 20 20 23 20 43 68 61 6e 67 65 20 ... # Change 7a50: 74 68 65 20 74 79 70 65 20 6f 66 20 66 69 72 73 the type of firs 7a60: 74 20 28 74 79 70 69 63 61 6c 6c 79 20 66 72 6f t (typically fro 7a70: 6d 20 43 68 61 6e 67 65 20 74 6f 20 41 64 64 29 m Change to Add) 7a80: 3a 0a 09 20 20 20 20 24 66 69 72 73 74 20 72 65 :.. $first re 7a90: 74 79 70 65 20 61 64 64 0a 0a 09 20 20 20 20 23 type add... # 7aa0: 20 4d 6f 76 65 20 61 6e 79 20 74 61 67 73 20 61 Move any tags a 7ab0: 6e 64 20 62 72 61 6e 63 68 65 73 20 66 72 6f 6d nd branches from 7ac0: 20 74 68 65 20 6f 6c 64 20 74 6f 20 74 68 65 20 the old to the 7ad0: 6e 65 77 20 72 6f 6f 74 2e 0a 09 20 20 20 20 24 new root... $ 7ae0: 72 65 76 31 31 20 6d 6f 76 65 73 79 6d 62 6f 6c rev11 movesymbol 7af0: 73 74 6f 20 24 66 69 72 73 74 0a 09 7d 0a 0a 09 sto $first..}... 7b00: 23 20 4d 61 72 6b 20 61 6c 6c 20 74 68 65 20 73 # Mark all the s 7b10: 70 65 63 69 61 6c 20 72 65 76 69 73 69 6f 6e 73 pecial revisions 7b20: 20 61 73 20 73 75 63 68 0a 09 66 6f 72 65 61 63 as such..foreac 7b30: 68 20 72 65 76 20 24 72 65 76 6c 69 73 74 20 7b h rev $revlist { 7b40: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write 7b50: 33 20 66 69 6c 65 20 22 52 65 76 69 73 69 6f 6e 3 file "Revision 7b60: 20 6f 6e 20 64 65 66 61 75 6c 74 20 62 72 61 6e on default bran 7b70: 63 68 3a 20 5b 24 72 65 76 20 72 65 76 6e 72 5d ch: [$rev revnr] 7b80: 22 0a 09 20 20 20 20 24 72 65 76 20 73 65 74 6f ".. $rev seto 7b90: 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 31 ndefaultbranch 1 7ba0: 0a 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f 70 20 ..}...if {$stop 7bb0: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 ne ""} {.. # 7bc0: 52 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c 6f 67 Revision 1.2 log 7bd0: 69 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 ically follows t 7be0: 68 65 20 69 6d 70 6f 72 74 65 64 20 72 65 76 69 he imported revi 7bf0: 73 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20 6e 6f sions,.. # no 7c00: 74 20 31 2e 31 2e 20 20 41 63 63 6f 72 64 69 6e t 1.1. Accordin 7c10: 67 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69 74 20 gly, connect it 7c20: 74 6f 20 74 68 65 20 6c 61 73 74 20 4e 54 44 42 to the last NTDB 7c30: 52 20 61 6e 64 0a 09 20 20 20 20 23 20 70 6f 73 R and.. # pos 7c40: 73 69 62 6c 79 20 63 68 61 6e 67 65 20 69 74 73 sibly change its 7c50: 20 74 79 70 65 2e 0a 0a 09 20 20 20 20 73 65 74 type.... set 7c60: 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 last [lindex $r 7c70: 65 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20 20 20 evlist end].. 7c80: 20 24 73 74 6f 70 20 73 65 74 64 65 66 61 75 6c $stop setdefaul 7c90: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 24 6c tbranchparent $l 7ca0: 61 73 74 20 3b 20 23 20 52 65 74 79 70 65 73 20 ast ; # Retypes 7cb0: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f 6f the revision too 7cc0: 2e 0a 09 20 20 20 20 24 6c 61 73 74 20 73 65 74 ... $last set 7cd0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 defaultbranchchi 7ce0: 6c 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09 72 65 ld $stop..}..re 7cf0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }.. 7d00: 6d 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f 44 73 method CheckLODs 7d10: 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b {} {..foreach { 7d20: 5f 20 62 72 61 6e 63 68 7d 20 20 5b 61 72 72 61 _ branch} [arra 7d30: 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 y get mybranches 7d40: 5d 20 7b 20 24 62 72 61 6e 63 68 20 63 68 65 63 ] { $branch chec 7d50: 6b 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63 68 20 klod }..foreach 7d60: 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 {_ taglist} [arr 7d70: 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b ay get mytags] { 7d80: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 61 .. foreach ta 7d90: 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74 61 g $taglist { $ta 7da0: 67 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d 0a g checklod }..}. 7db0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }.. 7dc0: 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 method Remove 7dd0: 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 74 69 IrrelevantDeleti 7de0: 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d ons {} {..# From 7df0: 20 63 76 73 32 73 76 6e 3a 20 49 66 20 61 20 66 cvs2svn: If a f 7e00: 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e 20 ile is added on 7e10: 61 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20 61 a branch, then a 7e20: 20 74 72 75 6e 6b 0a 09 23 20 72 65 76 69 73 69 trunk..# revisi 7e30: 6f 6e 20 69 73 20 61 64 64 65 64 20 61 74 20 74 on is added at t 7e40: 68 65 20 73 61 6d 65 20 74 69 6d 65 20 69 6e 20 he same time in 7e50: 74 68 65 20 27 44 65 61 64 27 20 73 74 61 74 65 the 'Dead' state 7e60: 2e 0a 09 23 20 54 68 69 73 20 72 65 76 69 73 69 ...# This revisi 7e70: 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61 6e on doesn't do an 7e80: 79 74 68 69 6e 67 20 75 73 65 66 75 6c 2c 20 73 ything useful, s 7e90: 6f 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a 09 66 o delete it....f 7ea0: 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79 72 oreach root $myr 7eb0: 6f 6f 74 73 20 7b 0a 09 20 20 20 20 69 66 20 7b oots {.. if { 7ec0: 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 5d [$root isneeded] 7ed0: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 } continue.. 7ee0: 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c 65 log write 2 file 7ef0: 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 63 "Removing unnec 7f00: 65 73 73 61 72 79 20 64 65 61 64 20 72 65 76 69 essary dead revi 7f10: 73 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65 76 6e sion [$root revn 7f20: 72 5d 22 0a 0a 09 20 20 20 20 23 20 52 65 6d 6f r]"... # Remo 7f30: 76 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61 6b 65 ve as root, make 7f40: 20 69 74 73 20 63 68 69 6c 64 20 6e 65 77 20 72 its child new r 7f50: 6f 6f 74 20 61 66 74 65 72 0a 09 20 20 20 20 23 oot after.. # 7f60: 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 69 disconnecting i 7f70: 74 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 73 t from the revis 7f80: 69 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67 20 61 ion just going a 7f90: 77 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65 way.... ldele 7fa0: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 te myroots $root 7fb0: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 .. if {[$root 7fc0: 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 haschild]} {... 7fd0: 73 65 74 20 63 68 69 6c 64 20 5b 24 72 6f 6f 74 set child [$root 7fe0: 20 63 68 69 6c 64 5d 0a 09 09 24 63 68 69 6c 64 child]...$child 7ff0: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 cutfromparent.. 8000: 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 .lappend myroots 8010: 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a 0a $child.. }.. 8020: 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 74 . # Cut out t 8030: 68 65 20 62 72 61 6e 63 68 65 73 20 73 70 61 77 he branches spaw 8040: 6e 65 64 20 62 79 20 74 68 65 20 72 65 76 69 73 ned by the revis 8050: 69 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20 20 23 ion to be.. # 8060: 20 64 65 6c 65 74 65 64 2e 20 49 66 20 74 68 65 deleted. If the 8070: 20 62 72 61 6e 63 68 20 68 61 73 20 72 65 76 69 branch has revi 8080: 73 69 6f 6e 73 20 74 68 65 79 20 73 68 6f 75 6c sions they shoul 8090: 64 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20 23 d already.. # 80a0: 20 75 73 65 20 6f 70 65 72 61 74 69 6f 6e 20 27 use operation ' 80b0: 61 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20 74 6f add', no need to 80c0: 20 63 68 61 6e 67 65 20 74 68 61 74 2e 20 54 68 change that. Th 80d0: 65 20 66 69 72 73 74 0a 09 20 20 20 20 23 20 72 e first.. # r 80e0: 65 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63 68 20 evision on each 80f0: 62 72 61 6e 63 68 20 62 65 63 6f 6d 65 73 20 61 branch becomes a 8100: 20 6e 65 77 20 61 6e 64 20 64 69 73 63 6f 6e 6e new and disconn 8110: 65 63 74 65 64 0a 09 20 20 20 20 23 20 72 6f 6f ected.. # roo 8120: 74 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61 63 68 t.... foreach 8130: 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 branch [$root b 8140: 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 24 62 72 ranches] {...$br 8150: 61 6e 63 68 20 63 75 74 62 72 61 6e 63 68 70 61 anch cutbranchpa 8160: 72 65 6e 74 0a 09 09 69 66 20 7b 21 5b 24 62 72 rent...if {![$br 8170: 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 anch haschild]} 8180: 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 66 continue...set f 8190: 69 72 73 74 20 5b 24 62 72 61 6e 63 68 20 63 68 irst [$branch ch 81a0: 69 6c 64 5d 0a 09 09 24 66 69 72 73 74 20 63 75 ild]...$first cu 81b0: 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 tfromparent...la 81c0: 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 ppend myroots $f 81d0: 69 72 73 74 0a 09 20 20 20 20 7d 0a 09 20 20 20 irst.. }.. 81e0: 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c $root removeall 81f0: 62 72 61 6e 63 68 65 73 0a 0a 09 20 20 20 20 23 branches... # 8200: 20 54 61 67 67 69 6e 67 20 61 20 64 65 61 64 20 Tagging a dead 8210: 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74 revision doesn't 8220: 20 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73 6f do anything, so 8230: 20 72 65 6d 6f 76 65 0a 09 20 20 20 20 23 20 61 remove.. # a 8240: 6e 79 20 74 61 67 73 20 74 68 61 74 20 77 65 72 ny tags that wer 8250: 65 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 20 e set on it.... 8260: 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 $root removea 8270: 6c 6c 74 61 67 73 0a 0a 09 20 20 20 20 23 20 54 lltags... # T 8280: 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61 70 his can only hap 8290: 70 65 6e 20 6f 6e 63 65 20 70 65 72 20 66 69 6c pen once per fil 82a0: 65 2c 20 61 6e 64 20 77 65 20 6d 69 67 68 74 20 e, and we might 82b0: 68 61 76 65 0a 09 20 20 20 20 23 20 6a 75 73 74 have.. # just 82c0: 20 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74 73 changed myroots 82d0: 2c 20 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f 6f , so end the loo 82e0: 70 0a 09 20 20 20 20 62 72 65 61 6b 0a 09 7d 0a p.. break..}. 82f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }.. 8300: 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 method Remove 8310: 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65 6c InitialBranchDel 8320: 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 etions {} {..# F 8330: 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 rom cvs2svn: If 8340: 74 68 65 20 66 69 72 73 74 20 72 65 76 69 73 69 the first revisi 8350: 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 69 on on a branch i 8360: 73 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73 73 s an..# unnecess 8370: 61 72 79 20 64 65 6c 65 74 65 2c 20 72 65 6d 6f ary delete, remo 8380: 76 65 20 69 74 2e 0a 09 23 0a 09 23 20 49 66 20 ve it...#..# If 8390: 61 20 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 a file is added 83a0: 6f 6e 20 61 20 62 72 61 6e 63 68 20 28 77 68 65 on a branch (whe 83b0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 61 ther or not it a 83c0: 6c 72 65 61 64 79 0a 09 23 20 65 78 69 73 74 65 lready..# existe 83d0: 64 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68 65 d on trunk), the 83e0: 6e 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 6f n new versions o 83f0: 66 20 43 56 53 20 61 64 64 20 61 20 66 69 72 73 f CVS add a firs 8400: 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 t..# branch revi 8410: 73 69 6f 6e 20 69 6e 20 74 68 65 20 27 64 65 61 sion in the 'dea 8420: 64 27 20 73 74 61 74 65 20 28 74 6f 20 69 6e 64 d' state (to ind 8430: 69 63 61 74 65 20 74 68 61 74 20 74 68 65 0a 09 icate that the.. 8440: 23 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20 65 # file did not e 8450: 78 69 73 74 20 6f 6e 20 74 68 65 20 62 72 61 6e xist on the bran 8460: 63 68 20 77 68 65 6e 20 74 68 65 20 62 72 61 6e ch when the bran 8470: 63 68 20 77 61 73 0a 09 23 20 63 72 65 61 74 65 ch was..# create 8480: 64 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 d) followed by t 8490: 68 65 20 73 65 63 6f 6e 64 20 62 72 61 6e 63 68 he second branch 84a0: 20 72 65 76 69 73 69 6f 6e 2c 20 77 68 69 63 68 revision, which 84b0: 20 69 73 20 61 6e 0a 09 23 20 61 64 64 2e 20 20 is an..# add. 84c0: 57 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74 65 When we encounte 84d0: 72 20 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e r this situation 84e0: 2c 20 77 65 20 73 65 76 65 72 20 74 68 65 20 62 , we sever the b 84f0: 72 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74 72 ranch..# from tr 8500: 75 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65 20 74 unk and delete t 8510: 68 65 20 66 69 72 73 74 20 62 72 61 6e 63 68 20 he first branch 8520: 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 74 revision....# At 8530: 20 74 68 69 73 20 70 6f 69 6e 74 20 77 65 20 6d this point we m 8540: 61 79 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 ay have already 8550: 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20 69 multiple roots i 8560: 6e 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77 65 n myroots,..# we 8570: 20 68 61 76 65 20 74 6f 20 70 72 6f 63 65 73 73 have to process 8580: 20 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72 them all....for 8590: 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 each root [$self 85a0: 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d LinesOfDevelopm 85b0: 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b ent] {.. if { 85c0: 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 62 [$root isneededb 85d0: 72 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 ranchdel]} conti 85e0: 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 nue.. log wri 85f0: 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 te 2 file "Remov 8600: 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20 ing unnecessary 8610: 69 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20 64 initial branch d 8620: 65 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72 65 76 elete [$root rev 8630: 6e 72 5d 22 0a 0a 09 20 20 20 20 73 65 74 20 62 nr]"... set b 8640: 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 ranch [$root par 8650: 65 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 entbranch].. 8660: 73 65 74 20 70 61 72 65 6e 74 20 5b 24 72 6f 6f set parent [$roo 8670: 74 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 73 t parent].. s 8680: 65 74 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f 74 et child [$root 8690: 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 child]... ld 86a0: 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 elete myroots $r 86b0: 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 oot.. lappend 86c0: 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a myroots $child. 86d0: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 .. $branch cu 86e0: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 20 tbranchparent.. 86f0: 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 63 68 $branch cutch 8700: 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20 ild.. $child 8710: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 0a cutfromparent.. 8720: 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 . $branch set 8730: 63 68 69 6c 64 20 20 20 20 20 20 20 20 24 63 68 child $ch 8740: 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20 ild.. $child 8750: 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63 68 setparentbranch 8760: 20 24 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 24 $branch... $ 8770: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 parent removebra 8780: 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e nch $bran 8790: 63 68 0a 09 20 20 20 20 24 70 61 72 65 6e 74 20 ch.. $parent 87a0: 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 removechildonbra 87b0: 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 nch $root..}..re 87c0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }.. 87d0: 6d 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66 44 65 method LinesOfDe 87e0: 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 velopment {} {.. 87f0: 23 20 44 65 74 65 72 6d 69 6e 65 20 61 6c 6c 20 # Determine all 8800: 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 lines of develop 8810: 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 66 69 6c ment for the fil 8820: 65 2e 20 54 68 69 73 20 61 72 65 0a 09 23 20 74 e. This are..# t 8830: 68 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c 20 he known roots, 8840: 61 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f 66 20 and the root of 8850: 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 66 6f 75 all branches fou 8860: 6e 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c 69 6e nd on the..# lin 8870: 65 20 6f 66 20 70 72 69 6d 61 72 79 20 63 68 69 e of primary chi 8880: 6c 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f 64 ldren....set lod 8890: 72 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65 61 63 roots {}..foreac 88a0: 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 h root $myroots 88b0: 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64 64 {.. $self Add 88c0: 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 BranchedLinesOfD 88d0: 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f evelopment lodro 88e0: 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 6c ots $root.. l 88f0: 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 append lodroots 8900: 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e $root..}..return 8910: 20 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20 20 7d $lodroots. } 8920: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 .. method Add 8930: 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 BranchedLinesOfD 8940: 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20 72 evelopment {lv r 8950: 6f 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 oot} {..upvar 1 8960: 24 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09 77 68 $lv lodroots..wh 8970: 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 ile {$root ne "" 8980: 7d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 } {.. foreach 8990: 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 branch [$root b 89a0: 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 66 20 ranches] {...if 89b0: 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63 68 {![$branch hasch 89c0: 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 ild]} continue.. 89d0: 09 73 65 74 20 63 68 69 6c 64 20 5b 24 62 72 61 .set child [$bra 89e0: 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 23 20 52 nch child]...# R 89f0: 65 63 75 72 73 65 20 69 6e 74 6f 20 74 68 65 20 ecurse into the 8a00: 62 72 61 6e 63 68 20 66 6f 72 20 64 65 65 70 65 branch for deepe 8a10: 72 20 62 72 61 6e 63 68 65 73 2e 0a 09 09 24 73 r branches....$s 8a20: 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64 4c elf AddBranchedL 8a30: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e inesOfDevelopmen 8a40: 74 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 6c t lodroots $chil 8a50: 64 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f 64 72 d...lappend lodr 8a60: 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 20 20 oots $child.. 8a70: 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74 }.. set root 8a80: 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 [$root child].. 8a90: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }. 8aa0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63 6c . method Excl 8ab0: 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 udeNonTrunkInfor 8ac0: 6d 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 52 mation {} {..# R 8ad0: 65 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74 72 emove all non-tr 8ae0: 75 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20 72 65 unk branches, re 8af0: 76 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74 61 67 visions, and tag 8b00: 73 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65 65 70 s. We do..# keep 8b10: 20 74 68 65 20 74 61 67 73 20 77 68 69 63 68 20 the tags which 8b20: 61 72 65 20 6f 6e 20 74 68 65 20 74 72 75 6e 6b are on the trunk 8b30: 2e 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f 6f 74 ....set ntdbroot 8b40: 20 22 22 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f ""..foreach roo 8b50: 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 t [$self LinesOf 8b60: 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 Development] {.. 8b70: 20 20 20 20 23 20 4e 6f 74 65 3a 20 48 65 72 65 # Note: Here 8b80: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 the order of th 8b90: 65 20 72 6f 6f 74 73 20 69 73 20 69 6d 70 6f 72 e roots is impor 8ba0: 74 61 6e 74 2c 0a 09 20 20 20 20 23 20 69 2e 65 tant,.. # i.e 8bb0: 2e 20 74 68 61 74 20 77 65 20 67 65 74 20 74 68 . that we get th 8bc0: 65 6d 20 69 6e 20 64 65 70 74 68 20 66 69 72 73 em in depth firs 8bd0: 74 20 6f 72 64 65 72 2e 20 54 68 69 73 20 65 6e t order. This en 8be0: 73 75 72 65 73 0a 09 20 20 20 20 23 20 74 68 61 sures.. # tha 8bf0: 74 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f 66 t the removal of 8c00: 20 61 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e a branch happen 8c10: 73 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65 s only after the 8c20: 0a 09 20 20 20 20 23 20 62 72 61 6e 63 68 65 73 .. # branches 8c30: 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69 74 spawned from it 8c40: 20 77 65 72 65 20 72 65 6d 6f 76 65 64 2e 20 4f were removed. O 8c50: 74 68 65 72 77 69 73 65 20 74 68 65 0a 09 20 20 therwise the.. 8c60: 20 20 23 20 73 79 73 74 65 6d 20 6d 69 67 68 74 # system might 8c70: 20 74 72 79 20 74 6f 20 61 63 63 65 73 73 20 64 try to access d 8c80: 65 6c 65 74 65 64 20 6f 62 6a 65 63 74 73 2e 0a eleted objects.. 8c90: 0a 09 20 20 20 20 23 20 44 6f 20 6e 6f 74 20 65 .. # Do not e 8ca0: 78 63 6c 75 64 65 20 74 68 65 20 74 72 75 6e 6b xclude the trunk 8cb0: 2e 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24 72 6f ... if {[[$ro 8cc0: 6f 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e 6b 5d ot lod] istrunk] 8cd0: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 } continue.. 8ce0: 24 73 65 6c 66 20 45 78 63 6c 75 64 65 42 72 61 $self ExcludeBra 8cf0: 6e 63 68 20 24 72 6f 6f 74 20 6e 74 64 62 72 6f nch $root ntdbro 8d00: 6f 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e 74 64 ot..}...if {$ntd 8d10: 62 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 broot ne ""} {.. 8d20: 20 20 20 20 24 73 65 6c 66 20 47 72 61 66 74 4e $self GraftN 8d30: 54 44 42 32 54 72 75 6e 6b 20 24 6e 74 64 62 72 TDB2Trunk $ntdbr 8d40: 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 oot..}..return. 8d50: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method 8d60: 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20 7b ExcludeBranch { 8d70: 72 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20 45 78 root nv} {..# Ex 8d80: 63 6c 75 64 65 20 74 68 65 20 62 72 61 6e 63 68 clude the branch 8d90: 2f 6c 6f 64 20 73 74 61 72 74 69 6e 67 20 61 74 /lod starting at 8da0: 20 72 6f 6f 74 2c 20 61 20 72 65 76 69 73 69 6f root, a revisio 8db0: 6e 2e 0a 09 23 0a 09 23 20 49 66 20 74 68 65 20 n...#..# If the 8dc0: 4c 4f 44 20 73 74 61 72 74 73 20 77 69 74 68 20 LOD starts with 8dd0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul 8de0: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f t branch revisio 8df0: 6e 73 2c 0a 09 23 20 77 65 20 6c 65 61 76 65 20 ns,..# we leave 8e00: 74 68 65 6d 20 69 6e 20 70 6c 61 63 65 20 61 6e them in place an 8e10: 64 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 65 20 d do not delete 8e20: 74 68 65 20 62 72 61 6e 63 68 2e 20 49 6e 20 74 the branch. In t 8e30: 68 61 74 0a 09 23 20 63 61 73 65 20 74 68 65 20 hat..# case the 8e40: 63 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 68 65 command sets the 8e50: 20 76 61 72 69 61 62 6c 65 20 69 6e 20 4e 56 20 variable in NV 8e60: 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 0a 09 so that we can.. 8e70: 23 20 6c 61 74 65 72 20 72 65 77 6f 72 6b 20 74 # later rework t 8e80: 68 65 73 65 20 72 65 76 69 73 6f 6e 73 20 74 6f hese revisons to 8e90: 20 62 65 20 70 75 72 65 6c 79 20 74 72 75 6e 6b be purely trunk 8ea0: 2e 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 20 69 ....if {[$root i 8eb0: 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 sondefaultbranch 8ec0: 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e 64 ]} {.. # Hand 8ed0: 6c 69 6e 67 20 61 20 4e 54 44 42 2e 20 54 68 69 ling a NTDB. Thi 8ee0: 73 20 62 72 61 6e 63 68 20 6d 61 79 20 63 6f 6e s branch may con 8ef0: 73 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79 20 6f sists not only o 8f00: 66 0a 09 20 20 20 20 23 20 4e 54 44 42 20 72 65 f.. # NTDB re 8f10: 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 61 6c 73 visions, but als 8f20: 6f 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42 2e o some non-NTDB. 8f30: 20 54 68 65 20 6c 61 74 74 65 72 20 61 72 65 0a The latter are. 8f40: 09 20 20 20 20 23 20 74 72 75 6c 79 20 6f 6e 20 . # truly on 8f50: 61 20 62 72 61 6e 63 68 20 61 6e 64 20 68 61 76 a branch and hav 8f60: 65 20 74 6f 20 62 65 20 65 78 63 6c 75 64 65 64 e to be excluded 8f70: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a . The following. 8f80: 09 20 20 20 20 23 20 6c 6f 6f 70 20 64 65 74 65 . # loop dete 8f90: 72 6d 69 6e 65 73 20 69 66 20 74 68 65 72 65 20 rmines if there 8fa0: 61 72 65 20 73 75 63 68 20 72 65 76 69 73 69 6f are such revisio 8fb0: 6e 73 2e 0a 0a 09 20 20 20 20 75 70 76 61 72 20 ns.... upvar 8fc0: 31 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74 0a 09 1 $nv ntdbroot.. 8fd0: 20 20 20 20 73 65 74 20 6e 74 64 62 72 6f 6f 74 set ntdbroot 8fe0: 20 24 72 6f 6f 74 0a 09 20 20 20 20 24 72 6f 6f $root.. $roo 8ff0: 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 62 t cutfromparentb 9000: 72 61 6e 63 68 0a 0a 09 20 20 20 20 73 65 74 20 ranch... set 9010: 72 65 76 20 24 72 6f 6f 74 0a 09 20 20 20 20 77 rev $root.. w 9020: 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 hile {$rev ne "" 9030: 7d 20 7b 0a 09 09 24 72 65 76 20 72 65 6d 6f 76 } {...$rev remov 9040: 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09 23 eallbranches...# 9050: 20 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a See note [x]... 9060: 09 09 69 66 20 7b 5b 24 72 65 76 20 69 73 6f 6e ..if {[$rev ison 9070: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 defaultbranch]} 9080: 7b 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 20 {... set rev 9090: 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d [$rev child]...} 90a0: 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 62 72 else {... br 90b0: 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a eak...}.. }.. 90c0: 09 20 20 20 20 23 20 72 65 76 20 6e 6f 77 20 63 . # rev now c 90d0: 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 ontains the firs 90e0: 74 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76 69 73 t non-NTDB revis 90f0: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 0a 09 20 ion after the.. 9100: 20 20 20 23 20 4e 54 44 42 2c 20 6f 72 20 69 73 # NTDB, or is 9110: 20 65 6d 70 74 79 20 69 66 20 74 68 65 72 65 20 empty if there 9120: 69 73 20 6e 6f 20 73 75 63 68 2e 20 49 66 20 77 is no such. If w 9130: 65 20 68 61 76 65 20 73 6f 6d 65 0a 09 20 20 20 e have some.. 9140: 20 23 20 74 68 65 79 20 68 61 76 65 20 74 6f 20 # they have to 9150: 72 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20 20 69 removed.... i 9160: 66 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 20 f {$rev ne ""} 9170: 7b 0a 09 09 73 65 74 20 6c 61 73 74 6e 74 64 62 {...set lastntdb 9180: 20 5b 24 72 65 76 20 70 61 72 65 6e 74 5d 0a 09 [$rev parent].. 9190: 09 24 6c 61 73 74 6e 74 64 62 20 63 75 74 66 72 .$lastntdb cutfr 91a0: 6f 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c 65 20 omchild...while 91b0: 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 {$rev ne ""} {.. 91c0: 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76 65 . $rev remove 91d0: 61 6c 6c 74 61 67 73 0a 09 09 20 20 20 20 24 72 alltags... $r 91e0: 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e ev removeallbran 91f0: 63 68 65 73 0a 09 09 20 20 20 20 23 20 4e 6f 74 ches... # Not 9200: 65 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20 73 74 e [x]: We may st 9210: 69 6c 6c 20 68 61 76 65 20 68 61 64 20 62 72 61 ill have had bra 9220: 6e 63 68 65 73 20 6f 6e 20 74 68 65 0a 09 09 20 nches on the... 9230: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2e 20 42 # revision. B 9240: 72 61 6e 63 68 65 73 20 77 69 74 68 6f 75 74 20 ranches without 9250: 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d 69 74 revisions commit 9260: 74 65 64 0a 09 09 20 20 20 20 23 20 6f 6e 20 74 ted... # on t 9270: 68 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f 77 20 hem do not show 9280: 75 70 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f up in the list o 9290: 66 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09 20 20 f roots aka... 92a0: 20 20 23 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 # lines of dev 92b0: 65 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20 20 20 elopment.... 92c0: 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 set rev [$rev ch 92d0: 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a ild]...}.. }. 92e0: 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a . return..}.. 92f0: 09 23 20 4e 6f 20 4e 54 44 42 20 73 74 75 66 66 .# No NTDB stuff 9300: 20 74 6f 20 64 65 61 6c 20 77 69 74 68 2e 20 46 to deal with. F 9310: 69 72 73 74 20 64 65 6c 65 74 65 20 74 68 65 20 irst delete the 9320: 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a 09 23 branch object..# 9330: 20 69 74 73 65 6c 66 2c 20 61 66 74 65 72 20 63 itself, after c 9340: 75 74 74 69 6e 67 20 61 6c 6c 20 74 68 65 20 76 utting all the v 9350: 61 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74 69 6f arious connectio 9360: 6e 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e 63 68 ns....set branch 9370: 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 [$root parentbr 9380: 61 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72 61 6e anch]..if {$bran 9390: 63 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 ch ne ""} {.. 93a0: 20 73 65 74 20 62 72 61 6e 63 68 70 61 72 65 6e set branchparen 93b0: 74 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e t [$branch paren 93c0: 74 5d 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70 t].. $branchp 93d0: 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 6e arent removebran 93e0: 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e 63 ch $branc 93f0: 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70 61 h.. $branchpa 9400: 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c 64 rent removechild 9410: 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09 onbranch $root.. 9420: 7d 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69 }...# The root i 9430: 73 20 6e 6f 20 73 75 63 68 20 61 6e 79 20 6c 6f s no such any lo 9440: 6e 67 65 72 20 65 69 74 68 65 72 2e 0a 09 6c 64 nger either...ld 9450: 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 elete myroots $r 9460: 6f 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f 20 74 oot...# Now go t 9470: 68 72 6f 75 67 68 20 74 68 65 20 6c 69 6e 65 20 hrough the line 9480: 61 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c 20 69 and remove all i 9490: 74 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 ts revisions.... 94a0: 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 while {$root ne 94b0: 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f 74 ""} {.. $root 94c0: 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09 removealltags.. 94d0: 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 $root remove 94e0: 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20 20 20 allbranches.. 94f0: 20 23 20 4e 6f 74 65 3a 20 53 65 65 20 74 68 65 # Note: See the 9500: 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20 20 20 note [x].... 9510: 20 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a # From cvs2svn: 9520: 20 49 66 20 74 68 69 73 20 69 73 20 74 68 65 20 If this is the 9530: 6c 61 73 74 20 64 65 66 61 75 6c 74 20 72 65 76 last default rev 9540: 69 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20 20 20 ision on a.. 9550: 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 # non-trunk defa 9560: 75 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c 6c 6f ult branch follo 9570: 77 65 64 20 62 79 20 61 20 31 2e 32 20 72 65 76 wed by a 1.2 rev 9580: 69 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 74 68 ision,.. # th 9590: 65 6e 20 74 68 65 20 31 2e 32 20 72 65 76 69 73 en the 1.2 revis 95a0: 69 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 ion depends on t 95b0: 68 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d 45 3a his one. FIXME: 95c0: 20 49 74 20 69 73 0a 09 20 20 20 20 23 20 71 75 It is.. # qu 95d0: 65 73 74 69 6f 6e 61 62 6c 65 20 77 68 65 74 68 estionable wheth 95e0: 65 72 20 74 68 69 73 20 68 61 6e 64 6c 69 6e 67 er this handling 95f0: 20 69 73 20 63 6f 72 72 65 63 74 2c 20 73 69 6e is correct, sin 9600: 63 65 20 74 68 65 0a 09 20 20 20 20 23 20 6e 6f ce the.. # no 9610: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 n-trunk default 9620: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 branch revisions 9630: 20 61 66 66 65 63 74 20 74 72 75 6e 6b 20 61 6e affect trunk an 9640: 64 0a 09 20 20 20 20 23 20 73 68 6f 75 6c 64 20 d.. # should 9650: 74 68 65 72 65 66 6f 72 65 20 6e 6f 74 20 6a 75 therefore not ju 9660: 73 74 20 62 65 20 64 69 73 63 61 72 64 65 64 20 st be discarded 9670: 65 76 65 6e 20 69 66 0a 09 20 20 20 20 23 20 2d even if.. # - 9680: 2d 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09 20 -trunk-only.... 9690: 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 if {[$root ha 96a0: 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 sdefaultbranchch 96b0: 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 74 ild]} {...set nt 96c0: 64 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20 64 dbchild [$root d 96d0: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c efaultbranchchil 96e0: 64 5d 0a 09 09 69 6e 74 65 67 72 69 74 79 20 61 d]...integrity a 96f0: 73 73 65 72 74 20 7b 0a 09 09 20 20 20 20 5b 24 ssert {... [$ 9700: 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61 75 6c ntdbchild defaul 9710: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d 20 65 tbranchparent] e 9720: 71 20 24 6e 74 64 62 63 68 69 6c 64 0a 09 09 7d q $ntdbchild...} 9730: 20 7b 6e 74 64 62 20 2d 20 74 72 75 6e 6b 20 6c {ntdb - trunk l 9740: 69 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 7d 0a 09 inkage broken}.. 9750: 09 24 6e 74 64 62 63 68 69 6c 64 20 63 75 74 64 .$ntdbchild cutd 9760: 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 efaultbranchpare 9770: 6e 74 0a 09 09 69 66 20 7b 5b 24 6e 74 64 62 63 nt...if {[$ntdbc 9780: 68 69 6c 64 20 68 61 73 70 61 72 65 6e 74 5d 7d hild hasparent]} 9790: 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 {... lappend 97a0: 20 6d 79 72 6f 6f 74 73 20 5b 24 6e 74 64 62 63 myroots [$ntdbc 97b0: 68 69 6c 64 20 70 61 72 65 6e 74 5d 0a 09 09 7d hild parent]...} 97c0: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73 65 .. }... se 97d0: 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 t root [$root ch 97e0: 69 6c 64 5d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e ild]..}...return 97f0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth 9800: 6f 64 20 47 72 61 66 74 4e 54 44 42 32 54 72 75 od GraftNTDB2Tru 9810: 6e 6b 20 7b 72 6f 6f 74 7d 20 7b 0a 09 23 20 57 nk {root} {..# W 9820: 65 20 63 61 6e 20 6e 6f 77 20 67 72 61 66 74 20 e can now graft 9830: 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 the non-trunk de 9840: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76 fault branch rev 9850: 69 73 69 6f 6e 73 20 74 6f 0a 09 23 20 74 72 75 isions to..# tru 9860: 6e 6b 2e 20 54 68 65 79 20 73 68 6f 75 6c 64 20 nk. They should 9870: 61 6c 72 65 61 64 79 20 62 65 20 61 6c 6f 6e 65 already be alone 9880: 20 6f 6e 20 61 20 43 56 53 42 72 61 6e 63 68 2d on a CVSBranch- 9890: 6c 65 73 73 0a 09 23 20 62 72 61 6e 63 68 2e 0a less..# branch.. 98a0: 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 ..integrity asse 98b0: 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73 70 rt {![$root hasp 98c0: 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 4e arentbranch]} {N 98d0: 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 TDB root still h 98e0: 61 73 20 69 74 73 20 62 72 61 6e 63 68 20 73 79 as its branch sy 98f0: 6d 62 6f 6c 7d 0a 09 69 6e 74 65 67 72 69 74 79 mbol}..integrity 9900: 20 61 73 73 65 72 74 20 7b 21 5b 24 72 6f 6f 74 assert {![$root 9910: 20 68 61 73 62 72 61 6e 63 68 65 73 5d 7d 20 20 hasbranches]} 9920: 20 20 20 7b 4e 54 44 42 20 72 6f 6f 74 20 73 74 {NTDB root st 9930: 69 6c 6c 20 68 61 73 20 73 70 61 77 6e 65 64 20 ill has spawned 9940: 62 72 61 6e 63 68 65 73 7d 0a 0a 09 73 65 74 20 branches}...set 9950: 6c 61 73 74 20 24 72 6f 6f 74 0a 09 77 68 69 6c last $root..whil 9960: 65 20 7b 5b 24 6c 61 73 74 20 68 61 73 63 68 69 e {[$last haschi 9970: 6c 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74 20 5b ld]} {set last [ 9980: 24 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a 0a 09 $last child]}... 9990: 69 66 20 7b 5b 24 6c 61 73 74 20 68 61 73 64 65 if {[$last hasde 99a0: 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 faultbranchchild 99b0: 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 ]} {... set r 99c0: 65 76 31 32 20 5b 24 6c 61 73 74 20 64 65 66 61 ev12 [$last defa 99d0: 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 0a ultbranchchild]. 99e0: 09 20 20 20 20 24 72 65 76 31 32 20 63 75 74 64 . $rev12 cutd 99f0: 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 efaultbranchpare 9a00: 6e 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20 63 nt.. $last c 9a10: 75 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 utdefaultbranchc 9a20: 68 69 6c 64 0a 0a 09 20 20 20 20 24 72 65 76 31 hild... $rev1 9a30: 32 20 63 68 61 6e 67 65 70 61 72 65 6e 74 20 24 2 changeparent $ 9a40: 6c 61 73 74 0a 09 20 20 20 20 24 6c 61 73 74 20 last.. $last 9a50: 20 63 68 61 6e 67 65 63 68 69 6c 64 20 24 72 65 changechild $re 9a60: 76 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 v12... ldelet 9a70: 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31 32 e myroots $rev12 9a80: 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 61 6e ... # Note an 9a90: 64 20 72 65 6d 65 6d 62 65 72 20 74 68 61 74 20 d remember that 9aa0: 74 68 65 20 74 79 70 65 20 6f 66 20 72 65 76 31 the type of rev1 9ab0: 32 20 77 61 73 20 61 6c 72 65 61 64 79 0a 09 20 2 was already.. 9ac0: 20 20 20 23 20 61 64 6a 75 73 74 65 64 20 62 79 # adjusted by 9ad0: 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 AdjustNonTrunkD 9ae0: 65 66 61 75 6c 74 42 72 61 6e 63 68 2c 20 73 6f efaultBranch, so 9af0: 20 77 65 20 64 6f 6e 27 74 0a 09 20 20 20 20 23 we don't.. # 9b00: 20 68 61 76 65 20 74 6f 20 63 68 61 6e 67 65 20 have to change 9b10: 69 74 73 20 74 79 70 65 20 68 65 72 65 2e 0a 09 its type here... 9b20: 7d 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 }...while {$root 9b30: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 ne ""} {.. $ 9b40: 72 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61 75 6c root setondefaul 9b50: 74 62 72 61 6e 63 68 20 30 0a 09 20 20 20 20 24 tbranch 0.. $ 9b60: 72 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d 79 74 root setlod $myt 9b70: 72 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65 61 63 runk.. foreac 9b80: 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 61 67 h tag [$root tag 9b90: 73 5d 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c s] {...$tag setl 9ba0: 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 od $mytrunk.. 9bb0: 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74 }.. set root 9bc0: 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 [$root child].. 9bd0: 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 }.. retur 9be0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met 9bf0: 68 6f 64 20 41 63 74 69 76 65 20 7b 7d 20 7b 0a hod Active {} {. 9c00: 09 73 65 74 20 72 65 76 69 73 69 6f 6e 73 20 7b .set revisions { 9c10: 7d 0a 09 73 65 74 20 73 79 6d 62 6f 6c 73 20 20 }..set symbols 9c20: 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f {}...foreach ro 9c30: 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f ot [$self LinesO 9c40: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a fDevelopment] {. 9c50: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 . if {[$root 9c60: 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68 5d hasparentbranch] 9c70: 7d 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 } { lappend symb 9c80: 6f 6c 73 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e ols [$root paren 9c90: 74 62 72 61 6e 63 68 5d 20 7d 0a 09 20 20 20 20 tbranch] }.. 9ca0: 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 while {$root ne 9cb0: 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 ""} {...lappend 9cc0: 72 65 76 69 73 69 6f 6e 73 20 24 72 6f 6f 74 0a revisions $root. 9cd0: 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 20 20 ..foreach tag 9ce0: 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 20 20 [$root tags] 9cf0: 20 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 { lappend symb 9d00: 6f 6c 73 20 24 74 61 67 20 20 20 20 7d 0a 09 09 ols $tag }... 9d10: 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b foreach branch [ 9d20: 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 $root branches] 9d30: 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 74 {... integrit 9d40: 79 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b 24 y assert {....[$ 9d50: 62 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 20 65 branch parent] e 9d60: 71 20 24 72 6f 6f 74 0a 09 09 20 20 20 20 7d 20 q $root... } 9d70: 7b 42 61 63 6b 72 65 66 65 72 65 6e 63 65 20 62 {Backreference b 9d80: 72 61 6e 63 68 20 74 6f 20 69 74 73 20 72 6f 6f ranch to its roo 9d90: 74 20 69 73 20 6d 69 73 73 69 6e 67 20 6f 72 20 t is missing or 9da0: 77 72 6f 6e 67 7d 0a 09 09 20 20 20 20 6c 61 70 wrong}... lap 9db0: 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 62 72 pend symbols $br 9dc0: 61 6e 63 68 0a 09 09 7d 0a 09 09 73 65 74 20 6c anch...}...set l 9dd0: 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a 09 od [$root lod].. 9de0: 09 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74 72 .if {![$lod istr 9df0: 75 6e 6b 5d 7d 20 7b 0a 09 09 20 20 20 20 69 6e unk]} {... in 9e00: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert { 9e10: 0a 09 09 09 5b 24 6c 6f 64 20 68 61 73 63 68 69 ....[$lod haschi 9e20: 6c 64 5d 0a 09 09 20 20 20 20 7d 20 7b 42 72 61 ld]... } {Bra 9e30: 6e 63 68 20 69 73 20 4c 4f 44 20 73 79 6d 62 6f nch is LOD symbo 9e40: 6c 20 77 69 74 68 6f 75 74 20 72 65 76 69 73 69 l without revisi 9e50: 6f 6e 73 7d 0a 09 09 20 20 20 20 6c 61 70 70 65 ons}... lappe 9e60: 6e 64 20 73 79 6d 62 6f 6c 73 20 24 6c 6f 64 0a nd symbols $lod. 9e70: 09 09 7d 0a 09 09 73 65 74 20 72 6f 6f 74 20 5b ..}...set root [ 9e80: 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 $root child].. 9e90: 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 20 }..}...return 9ea0: 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 20 2d 75 6e [list [lsort -un 9eb0: 69 71 75 65 20 2d 64 69 63 74 20 24 72 65 76 69 ique -dict $revi 9ec0: 73 69 6f 6e 73 5d 20 5b 6c 73 6f 72 74 20 2d 75 sions] [lsort -u 9ed0: 6e 69 71 75 65 20 2d 64 69 63 74 20 24 73 79 6d nique -dict $sym 9ee0: 62 6f 6c 73 5d 5d 0a 20 20 20 20 7d 0a 0a 0a 20 bols]]. }... 9ef0: 20 20 20 6d 65 74 68 6f 64 20 41 67 67 72 65 67 method Aggreg 9f00: 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 20 7b 7d ateSymbolData {} 9f10: 20 7b 0a 09 23 20 4e 6f 77 20 74 68 61 74 20 74 {..# Now that t 9f20: 68 65 20 65 78 61 63 74 20 73 65 74 20 6f 66 20 he exact set of 9f30: 72 65 76 69 73 69 6f 6e 73 20 28 61 6e 64 20 74 revisions (and t 9f40: 68 72 6f 75 67 68 20 74 68 61 74 0a 09 23 20 62 hrough that..# b 9f50: 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67 73 ranches and tags 9f60: 29 20 69 73 20 6b 6e 6f 77 6e 20 77 65 20 63 61 ) is known we ca 9f70: 6e 20 75 70 64 61 74 65 20 74 68 65 20 61 67 67 n update the agg 9f80: 72 65 67 61 74 65 0a 09 23 20 73 79 6d 62 6f 6c regate..# symbol 9f90: 20 73 74 61 74 69 73 74 69 63 73 2e 0a 0a 09 66 statistics....f 9fa0: 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 oreach root [$se 9fb0: 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f lf LinesOfDevelo 9fc0: 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 73 65 pment] {.. se 9fd0: 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 t lod [$root lod 9fe0: 5d 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 ]... # Note: 9ff0: 49 66 20 74 68 65 20 4c 4f 44 20 69 73 20 74 68 If the LOD is th a000: 65 20 74 72 75 6e 6b 20 74 68 65 20 63 6f 75 6e e trunk the coun a010: 74 2a 2c 20 65 74 63 2e 20 6d 65 74 68 6f 64 73 t*, etc. methods a020: 0a 09 20 20 20 20 23 20 77 69 6c 6c 20 64 6f 20 .. # will do a030: 6e 6f 74 68 69 6e 67 2c 20 61 73 20 69 74 20 69 nothing, as it i a040: 73 20 61 6c 77 61 79 73 20 70 72 65 73 65 6e 74 s always present a050: 20 28 63 61 6e 6e 6f 74 20 62 65 0a 09 20 20 20 (cannot be.. a060: 20 23 20 65 78 63 6c 75 64 65 64 29 2c 20 61 6e # excluded), an a070: 64 20 69 73 20 61 6c 77 61 79 73 20 61 20 62 72 d is always a br a080: 61 6e 63 68 20 74 6f 6f 2e 0a 0a 09 20 20 20 20 anch too.... a090: 23 20 4c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c # Lines of devel a0a0: 6f 70 6d 65 6e 74 20 63 6f 75 6e 74 20 61 73 20 opment count as a0b0: 62 72 61 6e 63 68 65 73 20 61 6e 64 20 68 61 76 branches and hav a0c0: 65 20 61 20 63 6f 6d 6d 69 74 0a 09 20 20 20 20 e a commit.. a0d0: 23 20 6f 6e 20 74 68 65 6d 20 28 72 6f 6f 74 29 # on them (root) a0e0: 2e 20 49 66 20 74 68 65 79 20 61 72 65 20 73 74 . If they are st a0f0: 69 6c 6c 20 61 74 74 61 63 68 65 64 20 74 6f 20 ill attached to a100: 61 20 74 72 65 65 20 77 65 0a 09 20 20 20 20 23 a tree we.. # a110: 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 74 65 have to compute a120: 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 70 6f and register po a130: 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73 2e 0a ssible parents.. a140: 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e 74 .. $lod count a150: 61 73 62 72 61 6e 63 68 0a 09 20 20 20 20 24 6c asbranch.. $l a160: 6f 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69 74 0a od countacommit. a170: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 .. if {[$root a180: 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68 hasparentbranch a190: 5d 7d 20 7b 0a 09 09 23 20 4e 6f 74 65 20 6c 6f ]} {...# Note lo a1a0: 64 20 3d 3d 20 5b 24 72 6f 6f 74 20 70 61 72 65 d == [$root pare a1b0: 6e 74 62 72 61 6e 63 68 5d 0a 09 09 24 6c 6f 64 ntbranch]...$lod a1c0: 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 73 possibleparents a1d0: 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b .. } elseif { a1e0: 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 20 ![$lod istrunk] a1f0: 26 26 20 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 65 && [$root isonde a200: 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a faultbranch]} {. a210: 09 09 23 20 54 68 69 73 20 69 73 20 74 68 65 20 ..# This is the a220: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 6f 66 root revision of a230: 20 61 20 64 65 74 61 63 68 65 64 20 4e 54 44 42 a detached NTDB a240: 2e 20 57 65 0a 09 09 23 20 68 61 76 65 20 74 6f . We...# have to a250: 20 6d 61 6e 75 61 6c 6c 79 20 73 65 74 20 74 68 manually set th a260: 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 e only possible a270: 70 61 72 65 6e 74 20 66 6f 72 0a 09 09 23 20 74 parent for...# t a280: 68 69 73 20 4c 4f 44 2c 20 74 68 65 20 74 72 75 his LOD, the tru a290: 6e 6b 20 69 74 73 65 6c 66 2e 0a 0a 09 09 5b 24 nk itself.....[$ a2a0: 6c 6f 64 20 73 79 6d 62 6f 6c 5d 20 70 6f 73 73 lod symbol] poss a2b0: 69 62 6c 65 70 61 72 65 6e 74 20 24 6d 79 74 72 ibleparent $mytr a2c0: 75 6e 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 unk.. }... a2d0: 20 23 20 46 6f 72 20 74 68 65 20 72 65 76 69 73 # For the revis a2e0: 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 6e 65 ions in the line a2f0: 20 77 65 20 72 65 67 69 73 74 65 72 20 74 68 65 we register the a300: 69 72 20 62 72 61 6e 63 68 65 73 0a 09 20 20 20 ir branches.. a310: 20 23 20 61 6e 64 20 74 61 67 73 20 61 73 20 62 # and tags as b a320: 6c 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 65 20 lockers for the a330: 6c 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 65 20 lod, and update a340: 74 68 65 20 74 79 70 65 0a 09 20 20 20 20 23 20 the type.. # a350: 63 6f 75 6e 74 65 72 73 20 61 73 20 77 65 6c 6c counters as well a360: 2e 20 41 73 20 62 72 61 6e 63 68 20 73 79 6d 62 . As branch symb a370: 6f 6c 73 20 77 69 74 68 6f 75 74 20 63 6f 6d 6d ols without comm a380: 69 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 74 68 its on.. # th a390: 65 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 74 65 em are not liste a3a0: 64 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 64 65 d as lines of de a3b0: 76 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 68 61 velopment, we ha a3c0: 76 65 20 74 6f 0a 09 20 20 20 20 23 20 63 6f 75 ve to.. # cou a3d0: 6e 74 20 74 68 65 6d 20 68 65 72 65 20 61 73 20 nt them here as a3e0: 77 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e 20 62 well, as plain b a3f0: 72 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 73 74 ranches. At last a400: 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 65 20 we.. # have a410: 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20 72 to compute and r a420: 65 67 69 73 74 65 72 20 74 68 65 20 70 6f 73 73 egister the poss a430: 69 62 6c 65 20 70 61 72 65 6e 74 73 20 6f 66 20 ible parents of a440: 74 68 65 0a 09 20 20 20 20 23 20 74 61 67 73 2c the.. # tags, a450: 20 69 6e 20 63 61 73 65 20 74 68 65 79 20 61 72 in case they ar a460: 65 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 74 65 e later converte a470: 64 20 61 73 20 62 72 61 6e 63 68 65 73 2e 0a 0a d as branches... a480: 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f 6f . while {$roo a490: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 6f 72 t ne ""} {...for a4a0: 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f each branch [$ro a4b0: 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 ot branches] {.. a4c0: 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65 . $lod blocke a4d0: 64 62 79 20 24 62 72 61 6e 63 68 0a 09 09 20 20 dby $branch... a4e0: 20 20 24 62 72 61 6e 63 68 20 70 6f 73 73 69 62 $branch possib a4f0: 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20 20 leparents... a500: 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 if {[$branch has a510: 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 child]} continue a520: 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 ... $branch c a530: 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 09 7d ountasbranch...} a540: 0a 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 ....foreach tag a550: 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09 [$root tags] {.. a560: 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65 . $lod blocke a570: 64 62 79 20 24 74 61 67 0a 09 09 20 20 20 20 24 dby $tag... $ a580: 74 61 67 20 70 6f 73 73 69 62 6c 65 70 61 72 65 tag possiblepare a590: 6e 74 73 0a 09 09 20 20 20 20 24 74 61 67 20 63 nts... $tag c a5a0: 6f 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a 0a 09 ountastag...}... a5b0: 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 .set root [$root a5c0: 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 09 child].. }.. a5d0: 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d }...return. } a5e0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 .. # # ## ### a5f0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ######## a600: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 #############. a610: 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 ## Configurati a620: 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d on.. pragma - a630: 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e hastypeinfo n a640: 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69 o ; # no type i a650: 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 ntrospection. a660: 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f pragma -hasinfo a670: 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20 no ; # a680: 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 no object intros a690: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 pection. prag a6a0: 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68 6f ma -hastypemetho a6b0: 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65 20 ds no ; # type a6c0: 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74 2e is not relevant. a6d0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 .. # # ## ### a6e0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ######## a6f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a #############.}. a700: 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 .namespace eval a710: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im a720: 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20 20 port::cvs {. a730: 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 namespace export a740: 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 73 70 file. namesp a750: 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 7b 0a ace eval file {. a760: 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 72 65 .# Import not re a770: 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 79 20 quired, already a780: 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 61 63 a child namespac a790: 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 65 20 e...# namespace a7a0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 import ::vc::fos a7b0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs a7c0: 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 20 6e ::file::rev..# n a7d0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import a7e0: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d ::vc::fossil::im a7f0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a port::cvs::file: a800: 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 65 20 :sym..namespace a810: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f import ::vc::too a820: 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d ls::misc::*..nam a830: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import :: a840: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 vc::tools::troub a850: 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d le..namespace im a860: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 port ::vc::tools a870: 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 63 65 ::log..namespace a880: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo a890: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv a8a0: 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 s::state..namesp a8b0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc: a8c0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import: a8d0: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a :cvs::integrity. a8e0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 .namespace impor a8f0: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a t ::vc::fossil:: a900: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 67 74 63 import::cvs::gtc a910: 6f 72 65 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 ore. }.}..# # a920: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 ## ### ##### ## a930: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 ###### ######### a940: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ########### a950: 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 ##########.## Re a960: 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f ady..package pro a970: 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a vide vc::fossil: a980: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 :import::cvs::fi a990: 6c 65 20 31 2e 30 0a 72 65 74 75 72 6e 0a le 1.0.return.