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 2d 32 30 30 38 20 41 6e 64 72 65 61 73 20 07-2008 Andreas
0070: 4b 75 70 72 69 65 73 2e 0a 23 0a 23 20 54 68 69 Kupries..#.# Thi
0080: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 6c 69 s software is li
0090: 63 65 6e 73 65 64 20 61 73 20 64 65 73 63 72 69 censed as descri
00a0: 62 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 20 bed in the file
00b0: 4c 49 43 45 4e 53 45 2c 20 77 68 69 63 68 0a 23 LICENSE, which.#
00c0: 20 79 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 you should have
00d0: 20 72 65 63 65 69 76 65 64 20 61 73 20 70 61 72 received as par
00e0: 74 20 6f 66 20 74 68 69 73 20 64 69 73 74 72 69 t of this distri
00f0: 62 75 74 69 6f 6e 2e 0a 23 0a 23 20 54 68 69 73 bution..#.# This
0100: 20 73 6f 66 74 77 61 72 65 20 63 6f 6e 73 69 73 software consis
0110: 74 73 20 6f 66 20 76 6f 6c 75 6e 74 61 72 79 20 ts of voluntary
0120: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 20 6d 61 contributions ma
0130: 64 65 20 62 79 20 6d 61 6e 79 0a 23 20 69 6e 64 de by many.# ind
0140: 69 76 69 64 75 61 6c 73 2e 20 20 46 6f 72 20 65 ividuals. For e
0150: 78 61 63 74 20 63 6f 6e 74 72 69 62 75 74 69 6f xact contributio
0160: 6e 20 68 69 73 74 6f 72 79 2c 20 73 65 65 20 74 n history, see t
0170: 68 65 20 72 65 76 69 73 69 6f 6e 0a 23 20 68 69 he revision.# hi
0180: 73 74 6f 72 79 20 61 6e 64 20 6c 6f 67 73 2c 20 story and logs,
0190: 61 76 61 69 6c 61 62 6c 65 20 61 74 20 68 74 74 available at htt
01a0: 70 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e 68 p://fossil-scm.h
01b0: 77 61 63 69 2e 63 6f 6d 2f 66 6f 73 73 69 6c 0a waci.com/fossil.
01c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
01d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
01e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 #############..#
0200: 23 20 46 69 6c 65 2c 20 70 61 72 74 20 6f 66 20 # File, part of
0210: 61 20 70 72 6f 6a 65 63 74 2c 20 70 61 72 74 20 a project, part
0220: 6f 66 20 61 20 43 56 53 20 72 65 70 6f 73 69 74 of a CVS reposit
0230: 6f 72 79 2e 20 4d 75 6c 74 69 70 6c 65 0a 23 23 ory. Multiple.##
0240: 20 69 6e 73 74 61 6e 63 65 73 20 61 72 65 20 70 instances are p
0250: 6f 73 73 69 62 6c 65 2e 0a 0a 23 20 23 20 23 23 ossible...# # ##
0260: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
0270: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
0280: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 # ##############
0290: 23 23 23 23 23 23 23 0a 23 23 20 52 65 71 75 69 #######.## Requi
02a0: 72 65 6d 65 6e 74 73 0a 0a 70 61 63 6b 61 67 65 rements..package
02b0: 20 72 65 71 75 69 72 65 20 54 63 6c 20 38 2e 34 require 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 20 20 20 20 20 3b 20 23 ; #
02e0: 20 52 65 71 75 69 72 65 64 20 72 75 6e 74 69 6d Required runtim
02f0: 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 e..package requi
0300: 72 65 20 73 6e 69 74 20 20 20 20 20 20 20 20 20 re snit
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0320: 20 20 20 20 20 20 20 3b 20 23 20 4f 4f 20 73 79 ; # OO sy
0330: 73 74 65 6d 2e 0a 70 61 63 6b 61 67 65 20 72 65 stem..package re
0340: 71 75 69 72 65 20 73 74 72 75 63 74 3a 3a 73 65 quire struct::se
0350: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 t
0360: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 53 65 ; # Se
0370: 74 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 70 61 t operations..pa
0380: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 74 ckage require st
0390: 72 75 63 74 3a 3a 6c 69 73 74 20 20 20 20 20 20 ruct::list
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03b0: 20 20 3b 20 23 20 48 69 67 68 65 72 20 6f 72 64 ; # Higher ord
03c0: 65 72 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 70 er operations..p
03d0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 ackage require v
03e0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
03f0: 74 3a 3a 63 76 73 3a 3a 62 6c 6f 62 73 74 6f 72 t::cvs::blobstor
0400: 65 20 20 3b 20 23 20 42 6c 6f 62 20 73 74 6f 72 e ; # Blob stor
0410: 61 67 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 age..package req
0420: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a uire vc::fossil:
0430: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 :import::cvs::fi
0440: 6c 65 3a 3a 72 65 76 20 20 3b 20 23 20 43 56 53 le::rev ; # CVS
0450: 20 70 65 72 20 66 69 6c 65 20 72 65 76 69 73 69 per file revisi
0460: 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 ons..package req
0470: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a uire vc::fossil:
0480: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 :import::cvs::fi
0490: 6c 65 3a 3a 73 79 6d 20 20 3b 20 23 20 43 56 53 le::sym ; # CVS
04a0: 20 70 65 72 20 66 69 6c 65 20 73 79 6d 62 6f 6c per file symbol
04b0: 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 s..package requi
04c0: 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 re vc::fossil::i
04d0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 mport::cvs::stat
04e0: 65 20 20 20 20 20 20 3b 20 23 20 53 74 61 74 65 e ; # State
04f0: 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 6b 61 67 storage..packag
0500: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f e require vc::fo
0510: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
0520: 73 3a 3a 69 6e 74 65 67 72 69 74 79 20 20 3b 20 s::integrity ;
0530: 23 20 53 74 61 74 65 20 69 6e 74 65 67 72 69 74 # State integrit
0540: 79 20 63 68 65 63 6b 73 2e 0a 70 61 63 6b 61 67 y checks..packag
0550: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f e require vc::fo
0560: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
0570: 73 3a 3a 67 74 63 6f 72 65 20 20 20 20 20 3b 20 s::gtcore ;
0580: 23 20 47 72 61 70 68 20 74 72 61 76 65 72 73 61 # Graph traversa
0590: 6c 20 63 6f 72 65 2e 0a 70 61 63 6b 61 67 65 20 l core..package
05a0: 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c require vc::tool
05b0: 73 3a 3a 74 72 6f 75 62 6c 65 20 20 20 20 20 20 s::trouble
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 ; #
05d0: 45 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e Error reporting.
05e0: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 .package require
05f0: 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 vc::tools::log
0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0610: 20 20 20 20 20 3b 20 23 20 55 73 65 72 20 66 65 ; # User fe
0620: 65 64 62 61 63 6b 0a 70 61 63 6b 61 67 65 20 72 edback.package r
0630: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 equire vc::tools
0640: 3a 3a 6d 69 73 63 20 20 20 20 20 20 20 20 20 20 ::misc
0650: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 54 ; # T
0660: 65 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a 0a ext formatting..
0670: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
0680: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
0690: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
06a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 #############.##
06b0: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 ..snit::type ::v
06c0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
06d0: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 7b 0a 20 t::cvs::file {.
06e0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ##
06f0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
0700: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 ##########. #
0710: 23 20 50 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 # Public API..
0720: 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b 69 constructor {i
0730: 64 20 70 61 74 68 20 75 73 72 70 61 74 68 20 65 d path usrpath e
0740: 78 65 63 75 74 61 62 6c 65 20 70 72 6f 6a 65 63 xecutable projec
0750: 74 7d 20 7b 0a 09 73 65 74 20 6d 79 69 64 20 20 t} {..set myid
0760: 20 20 20 20 20 20 20 24 69 64 0a 09 73 65 74 20 $id..set
0770: 6d 79 70 61 74 68 20 20 20 20 20 20 20 24 70 61 mypath $pa
0780: 74 68 0a 09 73 65 74 20 6d 79 75 73 72 70 61 74 th..set myusrpat
0790: 68 20 20 20 20 24 75 73 72 70 61 74 68 0a 09 73 h $usrpath..s
07a0: 65 74 20 6d 79 65 78 65 63 75 74 61 62 6c 65 20 et myexecutable
07b0: 24 65 78 65 63 75 74 61 62 6c 65 0a 09 73 65 74 $executable..set
07c0: 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20 24 70 myproject $p
07d0: 72 6f 6a 65 63 74 0a 09 73 65 74 20 6d 79 74 72 roject..set mytr
07e0: 75 6e 6b 20 20 20 20 20 20 5b 24 6d 79 70 72 6f unk [$mypro
07f0: 6a 65 63 74 20 74 72 75 6e 6b 5d 0a 09 73 65 74 ject trunk]..set
0800: 20 6d 79 62 6c 6f 62 20 20 20 20 20 20 20 5b 62 myblob [b
0810: 6c 6f 62 73 74 6f 72 65 20 24 7b 73 65 6c 66 6e lobstore ${selfn
0820: 73 7d 3a 3a 25 41 55 54 4f 25 20 24 69 64 5d 0a s}::%AUTO% $id].
0830: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
0840: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 69 64 20 method setid
0850: 7b 69 64 7d 20 7b 0a 09 69 6e 74 65 67 72 69 74 {id} {..integrit
0860: 79 20 61 73 73 65 72 74 20 7b 24 6d 79 69 64 20 y assert {$myid
0870: 65 71 20 22 22 7d 20 7b 46 69 6c 65 20 27 24 6d eq ""} {File '$m
0880: 79 70 61 74 68 27 20 61 6c 72 65 61 64 79 20 68 ypath' already h
0890: 61 73 20 61 6e 20 69 64 2c 20 27 24 6d 79 69 64 as an id, '$myid
08a0: 27 7d 0a 09 73 65 74 20 6d 79 69 64 20 24 69 64 '}..set myid $id
08b0: 0a 09 24 6d 79 62 6c 6f 62 20 73 65 74 69 64 20 ..$myblob setid
08c0: 24 69 64 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 $id..return.
08d0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 64 }.. method id
08e0: 20 20 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 {} { retur
08f0: 6e 20 24 6d 79 69 64 20 7d 0a 20 20 20 20 6d 65 n $myid }. me
0900: 74 68 6f 64 20 70 61 74 68 20 20 20 20 7b 7d 20 thod path {}
0910: 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 61 74 68 { return $mypath
0920: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 75 73 }. method us
0930: 72 70 61 74 68 20 7b 7d 20 7b 20 72 65 74 75 72 rpath {} { retur
0940: 6e 20 24 6d 79 75 73 72 70 61 74 68 20 7d 0a 20 n $myusrpath }.
0950: 20 20 20 6d 65 74 68 6f 64 20 70 72 6f 6a 65 63 method projec
0960: 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d t {} { return $m
0970: 79 70 72 6f 6a 65 63 74 20 7d 0a 0a 20 20 20 20 yproject }..
0980: 64 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 delegate method
0990: 63 6f 6d 6d 69 74 6d 65 73 73 61 67 65 6f 66 20 commitmessageof
09a0: 74 6f 20 6d 79 70 72 6f 6a 65 63 74 0a 0a 20 20 to myproject..
09b0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
09c0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
09d0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
09e0: 20 4d 65 74 68 6f 64 73 20 72 65 71 75 69 72 65 Methods require
09f0: 64 20 66 6f 72 20 74 68 65 20 63 6c 61 73 73 20 d for the class
0a00: 74 6f 20 62 65 20 61 20 73 69 6e 6b 20 6f 66 20 to be a sink of
0a10: 74 68 65 20 72 63 73 20 70 61 72 73 65 72 0a 0a the rcs parser..
0a20: 20 20 20 20 23 6d 65 74 68 6f 64 20 62 65 67 69 #method begi
0a30: 6e 20 7b 7d 20 7b 70 75 74 73 20 62 65 67 69 6e n {} {puts begin
0a40: 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 }. #method se
0a50: 74 68 65 61 64 20 7b 68 7d 20 7b 70 75 74 73 20 thead {h} {puts
0a60: 68 65 61 64 3d 24 68 7d 0a 20 20 20 20 23 6d 65 head=$h}. #me
0a70: 74 68 6f 64 20 73 65 74 70 72 69 6e 63 69 70 61 thod setprincipa
0a80: 6c 62 72 61 6e 63 68 20 7b 62 7d 20 7b 70 75 74 lbranch {b} {put
0a90: 73 20 70 62 3d 24 62 7d 0a 20 20 20 20 23 6d 65 s pb=$b}. #me
0aa0: 74 68 6f 64 20 64 65 66 74 61 67 20 7b 73 20 72 thod deftag {s r
0ab0: 7d 20 7b 70 75 74 73 20 24 73 3d 24 72 7d 0a 20 } {puts $s=$r}.
0ac0: 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 63 6f #method setco
0ad0: 6d 6d 65 6e 74 20 7b 63 7d 20 7b 70 75 74 73 20 mment {c} {puts
0ae0: 63 6f 6d 6d 65 6e 74 3d 24 63 7d 0a 20 20 20 20 comment=$c}.
0af0: 23 6d 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e #method admindon
0b00: 65 20 7b 7d 20 7b 70 75 74 73 20 61 64 6d 69 6e e {} {puts admin
0b10: 64 6f 6e 65 7d 0a 20 20 20 20 23 6d 65 74 68 6f done}. #metho
0b20: 64 20 64 65 66 20 7b 72 65 76 20 64 61 74 65 20 d def {rev date
0b30: 61 75 74 68 6f 72 20 73 74 61 74 65 20 6e 65 78 author state nex
0b40: 74 20 62 72 61 6e 63 68 65 73 7d 20 7b 70 75 74 t branches} {put
0b50: 73 20 22 64 65 66 20 24 72 65 76 20 24 64 61 74 s "def $rev $dat
0b60: 65 20 24 61 75 74 68 6f 72 20 24 73 74 61 74 65 e $author $state
0b70: 20 24 6e 65 78 74 20 24 62 72 61 6e 63 68 65 73 $next $branches
0b80: 22 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 "}. #method d
0b90: 65 66 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 efdone {} {puts
0ba0: 64 65 66 2d 64 6f 6e 65 7d 0a 20 20 20 20 23 6d def-done}. #m
0bb0: 65 74 68 6f 64 20 73 65 74 64 65 73 63 20 7b 64 ethod setdesc {d
0bc0: 7d 20 7b 70 75 74 73 20 64 65 73 63 3d 24 64 7d } {puts desc=$d}
0bd0: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 65 78 74 . #method ext
0be0: 65 6e 64 20 7b 72 65 76 20 63 6f 6d 6d 69 74 6d end {rev commitm
0bf0: 73 67 20 64 65 6c 74 61 72 61 6e 67 65 7d 20 7b sg deltarange} {
0c00: 70 75 74 73 20 22 65 78 74 65 6e 64 20 24 63 6f puts "extend $co
0c10: 6d 6d 69 74 6d 73 67 20 24 64 65 6c 74 61 72 61 mmitmsg $deltara
0c20: 6e 67 65 22 7d 0a 20 20 20 20 23 6d 65 74 68 6f nge"}. #metho
0c30: 64 20 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 d done {} {puts
0c40: 64 6f 6e 65 7d 0a 0a 20 20 20 20 23 20 23 20 23 done}.. # # #
0c50: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
0c60: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
0c70: 23 23 0a 20 20 20 20 23 23 20 50 65 72 73 69 73 ##. ## Persis
0c80: 74 65 6e 63 65 20 28 70 61 73 73 20 49 49 29 0a tence (pass II).
0c90: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 65 72 73 . method pers
0ca0: 69 73 74 20 7b 7d 20 7b 0a 09 23 20 46 69 72 73 ist {} {..# Firs
0cb0: 74 20 63 6f 6c 6c 65 63 74 20 74 68 65 20 72 65 t collect the re
0cc0: 61 63 68 61 62 6c 65 20 72 65 76 69 73 69 6f 6e achable revision
0cd0: 73 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2c 20 74 s and symbols, t
0ce0: 68 65 6e 0a 09 23 20 61 73 73 69 67 6e 20 69 64 hen..# assign id
0cf0: 27 73 20 74 6f 20 61 6c 6c 2e 20 54 68 65 79 20 's to all. They
0d00: 61 72 65 20 73 6f 72 74 65 64 20 73 6f 20 74 68 are sorted so th
0d10: 61 74 20 77 65 20 77 69 6c 6c 20 68 61 76 65 20 at we will have
0d20: 69 64 73 0a 09 23 20 77 68 69 63 68 20 73 6f 72 ids..# which sor
0d30: 74 20 69 6e 20 6f 72 64 65 72 20 6f 66 20 63 72 t in order of cr
0d40: 65 61 74 69 6f 6e 2e 20 54 68 65 6e 20 77 65 20 eation. Then we
0d50: 63 61 6e 20 73 61 76 65 20 74 68 65 6d 2e 20 54 can save them. T
0d60: 68 69 73 0a 09 23 20 69 73 20 64 6f 6e 65 20 62 his..# is done b
0d70: 6f 74 74 6f 6d 20 75 70 2e 20 52 65 76 69 73 69 ottom up. Revisi
0d80: 6f 6e 73 2c 20 74 68 65 6e 20 73 79 6d 62 6f 6c ons, then symbol
0d90: 73 2e 20 5f 5f 4e 4f 54 45 5f 5f 20 54 68 69 73 s. __NOTE__ This
0da0: 0a 09 23 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 62 ..# works only b
0db0: 65 63 61 75 73 65 20 73 71 6c 69 74 65 20 69 73 ecause sqlite is
0dc0: 20 6e 6f 74 20 63 68 65 63 6b 69 6e 67 20 66 6f not checking fo
0dd0: 72 65 69 67 6e 20 6b 65 79 0a 09 23 20 72 65 66 reign key..# ref
0de0: 65 72 65 6e 63 65 73 20 64 75 72 69 6e 67 20 69 erences during i
0df0: 6e 73 65 72 74 2e 20 54 68 69 73 20 61 6c 6c 6f nsert. This allo
0e00: 77 73 20 74 6f 20 68 61 76 65 20 64 61 6e 67 6c ws to have dangl
0e10: 69 6e 67 0a 09 23 20 72 65 66 65 72 65 6e 63 65 ing..# reference
0e20: 73 20 77 68 69 63 68 20 61 72 65 20 66 69 78 65 s which are fixe
0e30: 64 20 6c 61 74 65 72 2e 20 54 68 65 20 6c 6f 6e d later. The lon
0e40: 67 65 73 74 20 64 61 6e 67 6c 69 6e 67 0a 09 23 gest dangling..#
0e50: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 references are
0e60: 66 6f 72 20 74 68 65 20 70 72 6f 6a 65 63 74 20 for the project
0e70: 6c 65 76 65 6c 20 73 79 6d 62 6f 6c 73 2c 20 74 level symbols, t
0e80: 68 65 73 65 20 77 65 20 64 6f 0a 09 23 20 6e 6f hese we do..# no
0e90: 74 20 73 61 76 65 20 68 65 72 65 2c 20 62 75 74 t save here, but
0ea0: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 at the end of t
0eb0: 68 65 20 70 61 73 73 2e 20 57 68 61 74 20 77 65 he pass. What we
0ec0: 20 6e 65 65 64 20 61 72 65 0a 09 23 20 74 68 65 need are..# the
0ed0: 20 69 64 73 2c 20 68 65 6e 63 65 20 74 68 65 20 ids, hence the
0ee0: 74 77 6f 20 70 68 61 73 65 73 2e 0a 0a 09 73 74 two phases....st
0ef0: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 ruct::list assig
0f00: 6e 20 5b 24 73 65 6c 66 20 41 63 74 69 76 65 5d n [$self Active]
0f10: 20 72 65 76 69 73 69 6f 6e 73 20 73 79 6d 62 6f revisions symbo
0f20: 6c 73 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 ls..foreach rev
0f30: 24 72 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 $revisions { $re
0f40: 76 20 64 65 66 69 64 20 7d 0a 09 66 6f 72 65 61 v defid }..forea
0f50: 63 68 20 73 79 6d 20 24 73 79 6d 62 6f 6c 73 20 ch sym $symbols
0f60: 20 20 7b 20 24 73 79 6d 20 64 65 66 69 64 20 7d { $sym defid }
0f70: 0a 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 ...state transac
0f80: 74 69 6f 6e 20 7b 0a 09 20 20 20 20 66 6f 72 65 tion {.. fore
0f90: 61 63 68 20 72 65 76 20 24 72 65 76 69 73 69 6f ach rev $revisio
0fa0: 6e 73 20 7b 20 24 72 65 76 20 70 65 72 73 69 73 ns { $rev persis
0fb0: 74 20 7d 0a 09 20 20 20 20 66 6f 72 65 61 63 68 t }.. foreach
0fc0: 20 73 79 6d 20 24 73 79 6d 62 6f 6c 73 20 20 20 sym $symbols
0fd0: 7b 20 24 73 79 6d 20 70 65 72 73 69 73 74 20 7d { $sym persist }
0fe0: 0a 09 20 20 20 20 24 6d 79 62 6c 6f 62 20 70 65 .. $myblob pe
0ff0: 72 73 69 73 74 0a 09 7d 0a 09 72 65 74 75 72 6e rsist..}..return
1000: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
1010: 6f 64 20 64 72 6f 70 20 7b 7d 20 7b 0a 09 66 6f od drop {} {..fo
1020: 72 65 61 63 68 20 7b 5f 20 72 65 76 7d 20 20 20 reach {_ rev}
1030: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 72 65 [array get myre
1040: 76 5d 20 20 20 20 20 20 7b 20 24 72 65 76 20 64 v] { $rev d
1050: 65 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65 61 63 estroy }..foreac
1060: 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b 61 72 h {_ branch} [ar
1070: 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 ray get mybranch
1080: 65 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 64 65 es] { $branch de
1090: 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65 61 63 68 stroy }..foreach
10a0: 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 {_ taglist} [ar
10b0: 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 ray get mytags]
10c0: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 {.. foreach t
10d0: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74 ag $taglist { $t
10e0: 61 67 20 64 65 73 74 72 6f 79 20 7d 0a 09 7d 0a ag destroy }..}.
10f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
1100: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ##
1110: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
1120: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 ##########. #
1130: 23 20 49 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 # Implement the
1140: 73 69 6e 6b 0a 0a 20 20 20 20 6d 65 74 68 6f 64 sink.. method
1150: 20 62 65 67 69 6e 20 7b 7d 20 7b 23 69 67 6e 6f begin {} {#igno
1160: 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 re}.. method
1170: 73 65 74 68 65 61 64 20 7b 72 65 76 6e 72 7d 20 sethead {revnr}
1180: 7b 0a 09 73 65 74 20 6d 79 68 65 61 64 72 65 76 {..set myheadrev
1190: 6e 72 20 24 72 65 76 6e 72 0a 09 72 65 74 75 72 nr $revnr..retur
11a0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
11b0: 68 6f 64 20 73 65 74 70 72 69 6e 63 69 70 61 6c hod setprincipal
11c0: 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e 72 branch {branchnr
11d0: 7d 20 7b 0a 09 73 65 74 20 6d 79 70 72 69 6e 63 } {..set myprinc
11e0: 69 70 61 6c 20 24 62 72 61 6e 63 68 6e 72 0a 09 ipal $branchnr..
11f0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
1200: 20 20 6d 65 74 68 6f 64 20 64 65 66 74 61 67 20 method deftag
1210: 7b 6e 61 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09 {name revnr} {..
1220: 23 20 46 55 54 55 52 45 3a 20 50 65 72 66 6f 72 # FUTURE: Perfor
1230: 6d 20 73 79 6d 62 6f 6c 20 74 72 61 6e 73 66 6f m symbol transfo
1240: 72 6d 61 74 69 6f 6e 20 68 65 72 65 2e 0a 0a 09 rmation here....
1250: 69 66 20 7b 5b 73 74 72 75 63 74 3a 3a 73 65 74 if {[struct::set
1260: 20 63 6f 6e 74 61 69 6e 73 20 24 6d 79 73 79 6d contains $mysym
1270: 62 6f 6c 73 20 24 6e 61 6d 65 5d 7d 20 7b 0a 09 bols $name]} {..
1280: 20 20 20 20 74 72 6f 75 62 6c 65 20 66 61 74 61 trouble fata
1290: 6c 20 22 4d 75 6c 74 69 70 6c 65 20 64 65 66 69 l "Multiple defi
12a0: 6e 69 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73 nitions of the s
12b0: 79 6d 62 6f 6c 20 27 24 6e 61 6d 65 27 20 69 6e ymbol '$name' in
12c0: 20 27 24 6d 79 70 61 74 68 27 22 0a 09 20 20 20 '$mypath'"..
12d0: 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 74 72 return..}...str
12e0: 75 63 74 3a 3a 73 65 74 20 61 64 64 20 6d 79 73 uct::set add mys
12f0: 79 6d 62 6f 6c 73 20 24 6e 61 6d 65 0a 0a 09 69 ymbols $name...i
1300: 66 20 7b 5b 72 65 76 20 69 73 62 72 61 6e 63 68 f {[rev isbranch
1310: 72 65 76 6e 72 20 24 72 65 76 6e 72 20 2d 3e 20 revnr $revnr ->
1320: 62 72 61 6e 63 68 6e 72 5d 7d 20 7b 0a 09 20 20 branchnr]} {..
1330: 20 20 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 $self AddBranc
1340: 68 20 24 6e 61 6d 65 20 24 62 72 61 6e 63 68 6e h $name $branchn
1350: 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 r..} else {..
1360: 20 24 73 65 6c 66 20 41 64 64 54 61 67 20 24 6e $self AddTag $n
1370: 61 6d 65 20 24 72 65 76 6e 72 0a 09 7d 0a 09 72 ame $revnr..}..r
1380: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
1390: 20 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d 65 method setcomme
13a0: 6e 74 20 7b 63 7d 20 7b 23 20 69 67 6e 6f 72 65 nt {c} {# ignore
13b0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 61 64 }.. method ad
13c0: 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 mindone {} {..#
13d0: 57 65 20 64 6f 20 6e 6f 74 68 69 6e 67 20 61 74 We do nothing at
13e0: 20 74 68 65 20 62 6f 75 6e 64 61 72 79 20 6f 66 the boundary of
13f0: 20 61 64 6d 69 6e 20 61 6e 64 20 72 65 76 69 73 admin and revis
1400: 69 6f 6e 20 64 61 74 61 0a 20 20 20 20 7d 0a 0a ion data. }..
1410: 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 20 7b method def {
1420: 72 65 76 6e 72 20 64 61 74 65 20 61 75 74 68 6f revnr date autho
1430: 72 20 73 74 61 74 65 20 6e 65 78 74 20 62 72 61 r state next bra
1440: 6e 63 68 65 73 7d 20 7b 0a 09 24 73 65 6c 66 20 nches} {..$self
1450: 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d RecordBranchComm
1460: 69 74 73 20 24 62 72 61 6e 63 68 65 73 0a 0a 09 its $branches...
1470: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists
1480: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d myrev($revnr)]}
1490: 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 {.. trouble
14a0: 66 61 74 61 6c 20 22 46 69 6c 65 20 24 6d 79 70 fatal "File $myp
14b0: 61 74 68 20 63 6f 6e 74 61 69 6e 73 20 64 75 70 ath contains dup
14c0: 6c 69 63 61 74 65 20 64 65 66 69 6e 69 74 69 6f licate definitio
14d0: 6e 73 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 ns for revision
14e0: 24 72 65 76 6e 72 2e 22 0a 09 20 20 20 20 72 65 $revnr.".. re
14f0: 74 75 72 6e 0a 09 7d 0a 0a 09 73 65 74 20 6d 79 turn..}...set my
1500: 61 69 64 28 24 72 65 76 6e 72 29 20 5b 24 6d 79 aid($revnr) [$my
1510: 70 72 6f 6a 65 63 74 20 64 65 66 61 75 74 68 6f project defautho
1520: 72 20 24 61 75 74 68 6f 72 5d 0a 09 73 65 74 20 r $author]..set
1530: 6d 79 72 65 76 28 24 72 65 76 6e 72 29 20 5b 72 myrev($revnr) [r
1540: 65 76 20 25 41 55 54 4f 25 20 24 72 65 76 6e 72 ev %AUTO% $revnr
1550: 20 24 64 61 74 65 20 24 73 74 61 74 65 20 24 73 $date $state $s
1560: 65 6c 66 5d 0a 0a 09 24 6d 79 62 6c 6f 62 20 61 elf]...$myblob a
1570: 64 64 20 24 72 65 76 6e 72 20 24 6d 79 72 65 76 dd $revnr $myrev
1580: 28 24 72 65 76 6e 72 29 0a 0a 09 69 66 20 7b 24 ($revnr)...if {$
1590: 6e 65 78 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 next ne ""} {..
15a0: 20 20 20 23 20 70 61 72 65 6e 74 20 72 65 76 69 # parent revi
15b0: 73 69 6f 6e 20 4e 45 58 54 20 69 73 20 61 20 64 sion NEXT is a d
15c0: 65 6c 74 61 20 6f 66 20 63 75 72 72 65 6e 74 2e elta of current.
15d0: 0a 09 20 20 20 20 24 6d 79 62 6c 6f 62 20 64 65 .. $myblob de
15e0: 6c 74 61 20 24 6e 65 78 74 20 24 72 65 76 6e 72 lta $next $revnr
15f0: 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 62 20 24 ..}..foreach b $
1600: 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 branches {..
1610: 23 20 62 72 61 6e 63 68 20 63 68 69 6c 64 20 72 # branch child r
1620: 65 76 69 73 69 6f 6e 20 42 20 69 73 20 61 20 64 evision B is a d
1630: 65 6c 74 61 20 6f 66 20 63 75 72 72 65 6e 74 2e elta of current.
1640: 0a 09 20 20 20 20 24 6d 79 62 6c 6f 62 20 64 65 .. $myblob de
1650: 6c 74 61 20 24 62 20 24 72 65 76 6e 72 0a 09 7d lta $b $revnr..}
1660: 0a 0a 09 24 73 65 6c 66 20 52 65 63 6f 72 64 42 ...$self RecordB
1670: 61 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65 73 asicDependencies
1680: 20 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09 72 $revnr $next..r
1690: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
16a0: 20 6d 65 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 method defdone
16b0: 7b 7d 20 7b 0a 09 23 20 54 68 69 73 20 69 73 20 {} {..# This is
16c0: 61 6c 6c 20 64 6f 6e 65 20 61 66 74 65 72 20 74 all done after t
16d0: 68 65 20 72 65 76 69 73 69 6f 6e 20 74 72 65 65 he revision tree
16e0: 20 68 61 73 20 62 65 65 6e 20 65 78 74 72 61 63 has been extrac
16f0: 74 65 64 0a 09 23 20 66 72 6f 6d 20 74 68 65 20 ted..# from the
1700: 66 69 6c 65 2c 20 62 65 66 6f 72 65 20 74 68 65 file, before the
1710: 20 63 6f 6d 6d 69 74 20 6d 65 73 61 67 65 73 20 commit mesages
1720: 61 6e 64 20 64 65 6c 74 61 20 74 65 78 74 73 20 and delta texts
1730: 61 72 65 0a 09 23 20 70 72 6f 63 65 73 73 65 64 are..# processed
1740: 2e 0a 0a 09 24 73 65 6c 66 20 50 72 6f 63 65 73 ....$self Proces
1750: 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 65 6e sPrimaryDependen
1760: 63 69 65 73 0a 09 24 73 65 6c 66 20 50 72 6f 63 cies..$self Proc
1770: 65 73 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 essBranchDepende
1780: 6e 63 69 65 73 0a 09 24 73 65 6c 66 20 53 6f 72 ncies..$self Sor
1790: 74 42 72 61 6e 63 68 65 73 0a 09 24 73 65 6c 66 tBranches..$self
17a0: 20 50 72 6f 63 65 73 73 54 61 67 44 65 70 65 6e ProcessTagDepen
17b0: 64 65 6e 63 69 65 73 0a 09 24 73 65 6c 66 20 44 dencies..$self D
17c0: 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52 etermineTheRootR
17d0: 65 76 69 73 69 6f 6e 0a 09 72 65 74 75 72 6e 0a evision..return.
17e0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
17f0: 64 20 73 65 74 64 65 73 63 20 7b 64 7d 20 7b 23 d setdesc {d} {#
1800: 20 69 67 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d 65 ignore}.. me
1810: 74 68 6f 64 20 65 78 74 65 6e 64 20 7b 72 65 76 thod extend {rev
1820: 6e 72 20 63 6f 6d 6d 69 74 6d 73 67 20 74 65 78 nr commitmsg tex
1830: 74 72 61 6e 67 65 7d 20 7b 0a 09 73 65 74 20 63 trange} {..set c
1840: 6d 69 64 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 mid [$myproject
1850: 64 65 66 63 6d 65 73 73 61 67 65 20 5b 73 74 72 defcmessage [str
1860: 69 6e 67 20 74 72 69 6d 20 24 63 6f 6d 6d 69 74 ing trim $commit
1870: 6d 73 67 5d 5d 0a 0a 09 73 65 74 20 72 65 76 20 msg]]...set rev
1880: 24 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 0a $myrev($revnr)..
1890: 09 69 66 20 7b 5b 24 72 65 76 20 68 61 73 6d 65 .if {[$rev hasme
18a0: 74 61 5d 7d 20 7b 0a 09 20 20 20 20 23 20 41 70 ta]} {.. # Ap
18b0: 70 61 72 65 6e 74 6c 79 20 72 65 70 6f 73 69 74 parently reposit
18c0: 6f 72 69 65 73 20 65 78 69 73 74 20 69 6e 20 77 ories exist in w
18d0: 68 69 63 68 20 74 68 65 20 64 65 6c 74 61 20 64 hich the delta d
18e0: 61 74 61 0a 09 20 20 20 20 23 20 66 6f 72 20 72 ata.. # for r
18f0: 65 76 69 73 69 6f 6e 20 31 2e 31 20 69 73 20 70 evision 1.1 is p
1900: 72 6f 76 69 64 65 64 20 73 65 76 65 72 61 6c 20 rovided several
1910: 74 69 6d 65 73 2c 20 61 74 20 6c 65 61 73 74 0a times, at least.
1920: 09 20 20 20 20 23 20 74 77 69 63 65 2e 20 54 68 . # twice. Th
1930: 65 20 61 63 74 75 61 6c 20 63 61 75 73 65 20 6f e actual cause o
1940: 66 20 74 68 69 73 20 64 75 70 6c 69 63 61 74 69 f this duplicati
1950: 6f 6e 20 69 73 20 6e 6f 74 0a 09 20 20 20 20 23 on is not.. #
1960: 20 6b 6e 6f 77 6e 2e 20 53 70 65 63 75 6c 61 74 known. Speculat
1970: 69 6f 6e 20 63 65 6e 74 65 72 73 20 6f 6e 20 52 ion centers on R
1980: 43 53 2f 43 56 53 20 62 75 67 73 2c 20 6f 72 20 CS/CVS bugs, or
1990: 66 72 6f 6d 0a 09 20 20 20 20 23 20 6d 61 6e 75 from.. # manu
19a0: 61 6c 20 65 64 69 74 73 20 6f 66 20 74 68 65 20 al edits of the
19b0: 72 65 70 6f 73 69 74 6f 72 79 20 77 68 69 63 68 repository which
19c0: 20 62 6f 72 6b 65 64 20 74 68 65 0a 09 20 20 20 borked the..
19d0: 20 23 20 69 6e 74 65 72 6e 61 6c 73 2e 20 57 68 # internals. Wh
19e0: 61 74 65 76 65 72 20 74 68 65 20 63 61 75 73 65 atever the cause
19f0: 2c 20 74 65 73 74 69 6e 67 20 73 68 6f 77 65 64 , testing showed
1a00: 20 74 68 61 74 20 62 6f 74 68 0a 09 20 20 20 20 that both..
1a10: 23 20 63 76 73 20 61 6e 64 20 72 63 73 20 75 73 # cvs and rcs us
1a20: 65 20 74 68 65 20 66 69 72 73 74 20 64 65 66 69 e the first defi
1a30: 6e 69 74 69 6f 6e 20 77 68 65 6e 20 70 65 72 66 nition when perf
1a40: 6f 72 6d 69 6e 67 20 61 0a 09 20 20 20 20 23 20 orming a.. #
1a50: 63 68 65 63 6b 6f 75 74 2c 20 61 6e 64 20 77 65 checkout, and we
1a60: 20 66 6f 6c 6c 6f 77 20 74 68 65 69 72 20 6c 65 follow their le
1a70: 61 64 2e 20 53 69 64 65 20 6e 6f 74 65 73 3a 20 ad. Side notes:
1a80: 27 63 76 73 0a 09 20 20 20 20 23 20 6c 6f 67 27 'cvs.. # log'
1a90: 20 66 61 69 6c 73 20 6f 6e 20 73 75 63 68 20 61 fails on such a
1aa0: 20 66 69 6c 65 2c 20 61 6e 64 20 27 63 76 73 20 file, and 'cvs
1ab0: 72 6c 6f 67 27 20 70 72 69 6e 74 73 20 74 68 65 rlog' prints the
1ac0: 20 6c 6f 67 0a 09 20 20 20 20 23 20 6d 65 73 73 log.. # mess
1ad0: 61 67 65 20 66 72 6f 6d 20 74 68 65 20 66 69 72 age from the fir
1ae0: 73 74 20 64 65 6c 74 61 2c 20 69 67 6e 6f 72 69 st delta, ignori
1af0: 6e 67 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a 0a ng the second...
1b00: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 . log write 1
1b10: 20 66 69 6c 65 20 22 49 6e 20 66 69 6c 65 20 24 file "In file $
1b20: 6d 79 70 61 74 68 20 3a 20 44 75 70 6c 69 63 61 mypath : Duplica
1b30: 74 65 20 64 65 6c 74 61 20 64 61 74 61 20 66 6f te delta data fo
1b40: 72 20 72 65 76 69 73 69 6f 6e 20 24 72 65 76 6e r revision $revn
1b50: 72 22 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 r".. log writ
1b60: 65 20 31 20 66 69 6c 65 20 22 49 67 6e 6f 72 69 e 1 file "Ignori
1b70: 6e 67 20 74 68 65 20 64 75 70 6c 69 63 61 74 65 ng the duplicate
1b80: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d ".. return..}
1b90: 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 20 74 ...# Determine t
1ba0: 68 65 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c he line of devel
1bb0: 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 72 opment for the r
1bc0: 65 76 69 73 69 6f 6e 20 28 70 72 6f 6a 65 63 74 evision (project
1bd0: 0a 09 23 20 6c 65 76 65 6c 29 2e 20 54 68 69 73 ..# level). This
1be0: 20 67 69 76 65 73 20 75 73 20 74 68 65 20 62 72 gives us the br
1bf0: 61 6e 63 68 69 64 20 74 6f 6f 2c 20 72 65 71 75 anchid too, requ
1c00: 69 72 65 64 20 66 6f 72 20 74 68 65 0a 09 23 20 ired for the..#
1c10: 6d 65 74 61 20 64 61 74 61 20 67 72 6f 75 70 20 meta data group
1c20: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 69 73 20 the revision is
1c30: 69 6e 2e 20 28 4e 6f 74 65 3a 20 42 79 20 70 75 in. (Note: By pu
1c40: 74 74 69 6e 67 20 62 6f 74 68 0a 09 23 20 62 72 tting both..# br
1c50: 61 6e 63 68 2f 6c 6f 64 20 61 6e 64 20 70 72 6f anch/lod and pro
1c60: 6a 65 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e ject information
1c70: 20 69 6e 74 6f 20 74 68 65 20 67 72 6f 75 70 20 into the group
1c80: 77 65 20 65 6e 73 75 72 65 0a 09 23 20 74 68 61 we ensure..# tha
1c90: 74 20 61 6e 79 20 63 72 6f 73 73 2d 70 72 6f 6a t any cross-proj
1ca0: 65 63 74 20 61 6e 64 20 63 72 6f 73 73 2d 62 72 ect and cross-br
1cb0: 61 6e 63 68 20 63 6f 6d 6d 69 74 73 20 61 72 65 anch commits are
1cc0: 0a 09 23 20 73 65 70 61 72 61 74 65 64 20 69 6e ..# separated in
1cd0: 74 6f 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6d 6d to multiple comm
1ce0: 69 74 73 2c 20 6f 6e 65 20 69 6e 20 65 61 63 68 its, one in each
1cf0: 20 6f 66 20 74 68 65 20 70 72 6f 6a 65 63 74 73 of the projects
1d00: 0a 09 23 20 61 6e 64 2f 6f 72 20 62 72 61 6e 63 ..# and/or branc
1d10: 68 65 73 29 2e 0a 0a 09 73 65 74 20 6c 6f 64 20 hes)....set lod
1d20: 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 24 72 [$self GetLOD $r
1d30: 65 76 6e 72 5d 0a 0a 09 24 72 65 76 20 73 65 74 evnr]...$rev set
1d40: 6d 65 74 61 20 5b 24 6d 79 70 72 6f 6a 65 63 74 meta [$myproject
1d50: 20 64 65 66 6d 65 74 61 20 5b 24 6c 6f 64 20 69 defmeta [$lod i
1d60: 64 5d 20 24 6d 79 61 69 64 28 24 72 65 76 6e 72 d] $myaid($revnr
1d70: 29 20 24 63 6d 69 64 5d 0a 09 23 20 4e 6f 74 65 ) $cmid]..# Note
1d80: 3a 20 57 65 20 6b 65 65 70 20 73 65 74 74 65 78 : We keep settex
1d90: 74 20 6f 6e 20 66 69 6c 65 3a 3a 72 65 76 20 66 t on file::rev f
1da0: 6f 72 20 74 68 65 20 68 61 73 74 65 78 74 20 71 or the hastext q
1db0: 75 65 72 69 65 73 0a 09 23 20 75 73 65 64 20 62 ueries..# used b
1dc0: 79 20 73 65 76 65 72 61 6c 20 63 68 65 63 6b 73 y several checks
1dd0: 2e 0a 09 24 72 65 76 20 73 65 74 74 65 78 74 20 ...$rev settext
1de0: 24 74 65 78 74 72 61 6e 67 65 0a 09 24 72 65 76 $textrange..$rev
1df0: 20 73 65 74 6c 6f 64 20 20 24 6c 6f 64 0a 0a 09 setlod $lod...
1e00: 24 6d 79 62 6c 6f 62 20 65 78 74 65 6e 64 20 24 $myblob extend $
1e10: 72 65 76 6e 72 20 24 74 65 78 74 72 61 6e 67 65 revnr $textrange
1e20: 0a 0a 09 23 20 49 66 20 74 68 69 73 20 69 73 20 ...# If this is
1e30: 72 65 76 69 73 69 6f 6e 20 31 2e 31 2c 20 77 65 revision 1.1, we
1e40: 20 68 61 76 65 20 74 6f 20 64 65 74 65 72 6d 69 have to determi
1e50: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 0a 09 ne whether the..
1e60: 23 20 66 69 6c 65 20 73 65 65 6d 73 20 74 6f 20 # file seems to
1e70: 68 61 76 65 20 62 65 65 6e 20 63 72 65 61 74 65 have been create
1e80: 64 20 74 68 72 6f 75 67 68 20 27 63 76 73 20 61 d through 'cvs a
1e90: 64 64 27 20 69 6e 73 74 65 61 64 20 6f 66 0a 09 dd' instead of..
1ea0: 23 20 27 63 76 73 20 69 6d 70 6f 72 74 27 2e 20 # 'cvs import'.
1eb0: 54 68 69 73 20 63 61 6e 20 62 65 20 64 6f 6e 65 This can be done
1ec0: 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 61 74 20 74 by looking at t
1ed0: 68 65 20 75 6e 2d 0a 09 23 20 61 64 75 6c 74 65 he un-..# adulte
1ee0: 72 61 74 65 64 20 63 6f 6d 6d 69 74 20 6d 65 73 rated commit mes
1ef0: 73 61 67 65 2c 20 61 73 20 43 56 53 20 75 73 65 sage, as CVS use
1f00: 73 20 61 20 68 61 72 64 77 69 72 65 64 20 6d 61 s a hardwired ma
1f10: 67 69 63 0a 09 23 20 6d 65 73 73 61 67 65 20 66 gic..# message f
1f20: 6f 72 20 74 68 65 20 6c 61 74 74 65 72 2c 20 69 or the latter, i
1f30: 2e 65 2e 20 22 49 6e 69 74 69 61 6c 20 72 65 76 .e. "Initial rev
1f40: 69 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a 09 23 20 ision\n", no..#
1f50: 70 65 72 69 6f 64 2e 20 20 28 54 68 69 73 20 66 period. (This f
1f60: 61 63 74 20 61 6c 73 6f 20 68 65 6c 70 73 20 75 act also helps u
1f70: 73 20 77 68 65 6e 20 74 68 65 20 74 69 6d 65 20 s when the time
1f80: 63 6f 6d 65 73 20 74 6f 0a 09 23 20 64 65 74 65 comes to..# dete
1f90: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 rmine whether th
1fa0: 69 73 20 66 69 6c 65 20 6d 69 67 68 74 20 68 61 is file might ha
1fb0: 76 65 20 68 61 64 20 61 20 64 65 66 61 75 6c 74 ve had a default
1fc0: 20 62 72 61 6e 63 68 0a 09 23 20 69 6e 20 74 68 branch..# in th
1fd0: 65 20 70 61 73 74 2e 29 0a 0a 09 69 66 20 7b 24 e past.)...if {$
1fe0: 72 65 76 6e 72 20 65 71 20 22 31 2e 31 22 7d 20 revnr eq "1.1"}
1ff0: 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 6d 70 {.. set myimp
2000: 6f 72 74 65 64 20 5b 65 78 70 72 20 7b 24 63 6f orted [expr {$co
2010: 6d 6d 69 74 6d 73 67 20 65 71 20 22 49 6e 69 74 mmitmsg eq "Init
2020: 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22 7d ial revision\n"}
2030: 5d 0a 09 7d 0a 0a 09 23 20 48 65 72 65 20 77 65 ]..}...# Here we
2040: 20 61 6c 73 6f 20 6b 65 65 70 20 74 72 61 63 6b also keep track
2050: 20 6f 66 20 74 68 65 20 6f 72 64 65 72 20 69 6e of the order in
2060: 20 77 68 69 63 68 20 74 68 65 20 72 65 76 69 73 which the revis
2070: 69 6f 6e 73 0a 09 23 20 77 65 72 65 20 61 64 64 ions..# were add
2080: 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65 2e 0a ed to the file..
2090: 0a 09 6c 61 70 70 65 6e 64 20 6d 79 72 65 76 69 ..lappend myrevi
20a0: 73 69 6f 6e 73 20 24 72 65 76 0a 09 72 65 74 75 sions $rev..retu
20b0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
20c0: 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b 0a 09 thod done {} {..
20d0: 23 20 43 6f 6d 70 6c 65 74 65 20 74 68 65 20 72 # Complete the r
20e0: 65 76 69 73 69 6f 6e 73 2c 20 62 72 61 6e 63 68 evisions, branch
20f0: 65 73 2c 20 61 6e 64 20 74 61 67 73 2e 20 54 68 es, and tags. Th
2100: 69 73 20 69 6e 63 6c 75 64 65 73 0a 09 23 20 6c is includes..# l
2110: 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6e 6f 6e ooking for a non
2120: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 -trunk default b
2130: 72 61 6e 63 68 2c 20 6d 61 72 6b 69 6e 67 20 69 ranch, marking i
2140: 74 73 20 6d 65 6d 62 65 72 73 0a 09 23 20 61 6e ts members..# an
2150: 64 20 6c 69 6e 6b 69 6e 67 20 74 68 65 6d 20 69 d linking them i
2160: 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2c 20 70 nto the trunk, p
2170: 6f 73 73 69 62 6c 79 20 65 78 63 6c 75 64 69 6e ossibly excludin
2180: 67 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 g..# non-trunk d
2190: 61 74 61 2c 20 61 6e 64 20 63 6f 6c 6c 65 63 74 ata, and collect
21a0: 69 6e 67 20 61 67 67 72 65 67 61 74 65 20 73 79 ing aggregate sy
21b0: 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 73 2e mbol statistics.
21c0: 0a 0a 09 24 73 65 6c 66 20 44 65 74 65 72 6d 69 ...$self Determi
21d0: 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 74 neRevisionOperat
21e0: 69 6f 6e 73 0a 09 24 73 65 6c 66 20 44 65 74 65 ions..$self Dete
21f0: 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65 rmineLinesOfDeve
2200: 6c 6f 70 6d 65 6e 74 0a 09 24 73 65 6c 66 20 48 lopment..$self H
2210: 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65 66 andleNonTrunkDef
2220: 61 75 6c 74 42 72 61 6e 63 68 0a 09 24 73 65 6c aultBranch..$sel
2230: 66 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 61 f RemoveIrreleva
2240: 6e 74 44 65 6c 65 74 69 6f 6e 73 0a 09 24 73 65 ntDeletions..$se
2250: 6c 66 20 52 65 6d 6f 76 65 49 6e 69 74 69 61 6c lf RemoveInitial
2260: 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e 73 0a BranchDeletions.
2270: 0a 09 69 66 20 7b 5b 24 6d 79 70 72 6f 6a 65 63 ..if {[$myprojec
2280: 74 20 74 72 75 6e 6b 6f 6e 6c 79 5d 7d 20 7b 0a t trunkonly]} {.
2290: 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 6c 75 . $self Exclu
22a0: 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 6d deNonTrunkInform
22b0: 61 74 69 6f 6e 0a 09 7d 0a 0a 09 24 73 65 6c 66 ation..}...$self
22c0: 20 41 67 67 72 65 67 61 74 65 53 79 6d 62 6f 6c AggregateSymbol
22d0: 44 61 74 61 0a 09 72 65 74 75 72 6e 0a 20 20 20 Data..return.
22e0: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 }.. # # ## #
22f0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
2300: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
2310: 20 20 20 20 23 23 20 50 61 73 73 20 58 49 49 20 ## Pass XII
2320: 28 49 6d 70 6f 72 74 29 2e 0a 0a 20 20 20 20 6d (Import)... m
2330: 65 74 68 6f 64 20 70 75 73 68 74 6f 20 7b 72 65 ethod pushto {re
2340: 70 6f 73 69 74 6f 72 79 7d 20 7b 0a 09 6c 6f 67 pository} {..log
2350: 20 77 72 69 74 65 20 32 20 66 69 6c 65 20 7b 49 write 2 file {I
2360: 6d 70 6f 72 74 69 6e 67 20 66 69 6c 65 20 22 24 mporting file "$
2370: 6d 79 70 61 74 68 22 7d 0a 0a 09 73 65 74 20 77 mypath"}...set w
2380: 73 20 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 77 s [$repository w
2390: 6f 72 6b 73 70 61 63 65 5d 0a 09 73 74 72 75 63 orkspace]..struc
23a0: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b t::list assign [
23b0: 24 73 65 6c 66 20 45 78 70 61 6e 64 20 24 77 73 $self Expand $ws
23c0: 5d 20 66 69 6c 65 6d 61 70 20 72 65 76 6d 61 70 ] filemap revmap
23d0: 0a 09 23 20 66 69 6c 65 6d 61 70 20 3d 20 64 69 ..# filemap = di
23e0: 63 74 20 28 70 61 74 68 20 2d 3e 20 75 75 69 64 ct (path -> uuid
23f0: 29 0a 09 23 20 72 65 76 6d 61 70 20 20 3d 20 64 )..# revmap = d
2400: 69 63 74 20 28 70 61 74 68 20 2d 3e 20 72 69 64 ict (path -> rid
2410: 29 0a 0a 09 61 72 72 61 79 20 73 65 74 20 69 64 )...array set id
2420: 6d 61 70 20 5b 24 72 65 70 6f 73 69 74 6f 72 79 map [$repository
2430: 20 69 6d 70 6f 72 74 66 69 6c 65 73 20 24 66 69 importfiles $fi
2440: 6c 65 6d 61 70 5d 0a 0a 09 23 20 57 69 70 65 20 lemap]...# Wipe
2450: 77 6f 72 6b 73 70 61 63 65 20 63 6c 65 61 6e 20 workspace clean
2460: 6f 66 20 74 68 65 20 69 6d 70 6f 72 74 65 64 20 of the imported
2470: 66 69 6c 65 73 2e 0a 09 66 6f 72 65 61 63 68 20 files...foreach
2480: 78 20 5b 67 6c 6f 62 20 2d 64 69 72 65 63 74 6f x [glob -directo
2490: 72 79 20 24 77 73 20 72 2a 5d 20 7b 20 3a 3a 66 ry $ws r*] { ::f
24a0: 69 6c 65 20 64 65 6c 65 74 65 20 24 78 20 7d 0a ile delete $x }.
24b0: 0a 09 66 6f 72 65 61 63 68 20 7b 70 61 74 68 20 ..foreach {path
24c0: 72 69 64 7d 20 24 72 65 76 6d 61 70 20 7b 0a 09 rid} $revmap {..
24d0: 20 20 20 20 73 65 74 20 75 75 69 64 20 24 69 64 set uuid $id
24e0: 6d 61 70 28 24 70 61 74 68 29 0a 09 20 20 20 20 map($path)..
24f0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e state run {...IN
2500: 53 45 52 54 20 49 4e 54 4f 20 72 65 76 75 75 69 SERT INTO revuui
2510: 64 20 28 72 69 64 2c 20 20 75 75 69 64 29 0a 09 d (rid, uuid)..
2520: 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 .VALUES
2530: 20 20 20 20 20 28 24 72 69 64 2c 20 24 75 75 69 ($rid, $uui
2540: 64 29 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 d).. }..}..re
2550: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
2560: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 20 7b 64 method Expand {d
2570: 69 72 7d 20 7b 0a 09 73 65 74 20 65 78 20 5b 73 ir} {..set ex [s
2580: 74 72 75 63 74 3a 3a 67 72 61 70 68 20 65 78 5d truct::graph ex]
2590: 20 3b 20 23 20 45 78 70 61 6e 73 69 6f 6e 20 67 ; # Expansion g
25a0: 72 61 70 68 2e 0a 09 73 65 74 20 7a 70 20 5b 73 raph...set zp [s
25b0: 74 72 75 63 74 3a 3a 67 72 61 70 68 20 7a 70 5d truct::graph zp]
25c0: 20 3b 20 23 20 5a 69 70 2f 49 6d 70 6f 72 74 20 ; # Zip/Import
25d0: 67 72 61 70 68 2e 0a 0a 09 63 6c 6f 73 65 20 5b graph....close [
25e0: 6f 70 65 6e 20 24 64 69 72 2f 72 5f 5f 65 6d 70 open $dir/r__emp
25f0: 74 79 5f 5f 20 77 5d 3b 23 20 42 61 73 65 20 66 ty__ w];# Base f
2600: 6f 72 20 64 65 74 61 63 68 65 64 20 72 6f 6f 74 or detached root
2610: 73 20 6f 6e 20 62 72 61 6e 63 68 65 73 2e 0a 0a s on branches...
2620: 09 23 20 50 68 61 73 65 20 49 3a 20 50 75 6c 6c .# Phase I: Pull
2630: 20 62 6c 6f 62 73 20 61 6e 64 20 72 65 66 65 72 blobs and refer
2640: 65 6e 63 65 64 20 72 65 76 69 73 69 6f 6e 73 20 enced revisions
2650: 66 72 6f 6d 20 74 68 65 20 73 74 61 74 65 0a 09 from the state..
2660: 23 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 66 # and f
2670: 69 6c 6c 20 74 68 65 20 67 72 61 70 68 73 20 77 ill the graphs w
2680: 69 74 68 20 74 68 65 6d 2e 2e 2e 0a 0a 09 23 20 ith them......#
2690: 4e 6f 74 65 3a 20 57 65 20 75 73 65 20 74 68 65 Note: We use the
26a0: 20 62 6c 6f 62 73 20 66 6f 72 20 65 78 70 61 6e blobs for expan
26b0: 73 69 6f 6e 20 62 65 63 61 75 73 65 20 77 65 20 sion because we
26c0: 6e 65 65 64 20 74 68 65 6d 0a 09 23 20 20 20 20 need them..#
26d0: 20 20 20 61 6c 6c 2c 20 65 76 65 6e 20 74 68 6f all, even tho
26e0: 73 65 20 77 69 74 68 6f 75 74 20 72 65 76 69 73 se without revis
26f0: 69 6f 6e 2c 20 66 6f 72 20 62 6f 74 68 20 70 72 ion, for both pr
2700: 6f 70 65 72 0a 09 23 20 20 20 20 20 20 20 6f 72 oper..# or
2710: 64 65 72 69 6e 67 20 61 6e 64 20 65 78 61 63 74 dering and exact
2720: 20 70 61 74 63 68 20 61 70 70 6c 69 63 61 74 69 patch applicati
2730: 6f 6e 2e 0a 0a 09 73 65 74 20 65 61 72 63 73 20 on....set earcs
2740: 20 20 7b 7d 20 3b 20 23 20 41 72 63 73 20 66 6f {} ; # Arcs fo
2750: 72 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 61 70 r expansion grap
2760: 68 0a 09 73 65 74 20 7a 61 72 63 73 20 20 20 7b h..set zarcs {
2770: 7d 20 3b 20 23 20 41 72 63 73 20 66 6f 72 20 7a } ; # Arcs for z
2780: 69 70 20 67 72 61 70 68 0a 09 73 65 74 20 72 65 ip graph..set re
2790: 76 6d 61 70 20 20 7b 7d 20 3b 20 23 20 70 61 74 vmap {} ; # pat
27a0: 68 20 2d 3e 20 72 69 64 20 6d 61 70 20 74 6f 20 h -> rid map to
27b0: 6c 61 74 65 72 20 6d 65 72 67 65 20 75 75 69 64 later merge uuid
27c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 0a 09 66 information...f
27d0: 6f 72 65 61 63 68 20 7b 72 69 64 20 72 65 76 6e oreach {rid revn
27e0: 72 20 70 61 72 65 6e 74 20 63 68 69 6c 64 20 63 r parent child c
27f0: 6f 66 66 20 63 6c 65 6e 20 63 69 64 20 63 70 61 off clen cid cpa
2800: 72 65 6e 74 7d 20 5b 73 74 61 74 65 20 72 75 6e rent} [state run
2810: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 {.. SELECT B
2820: 2e 72 69 64 2c 20 52 2e 72 65 76 2c 20 52 2e 70 .rid, R.rev, R.p
2830: 61 72 65 6e 74 2c 20 52 2e 63 68 69 6c 64 2c 20 arent, R.child,
2840: 42 2e 63 6f 66 66 2c 20 42 2e 63 6c 65 6e 2c 20 B.coff, B.clen,
2850: 42 2e 62 69 64 2c 20 42 2e 70 69 64 0a 09 20 20 B.bid, B.pid..
2860: 20 20 46 52 4f 4d 20 20 20 20 20 20 20 20 20 20 FROM
2870: 20 20 62 6c 6f 62 20 42 0a 09 20 20 20 20 4c 45 blob B.. LE
2880: 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 20 72 65 FT OUTER JOIN re
2890: 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 4f 4e vision R.. ON
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 2e B.
28b0: 72 69 64 20 3d 20 52 2e 72 69 64 0a 09 20 20 20 rid = R.rid..
28c0: 20 57 48 45 52 45 20 20 42 2e 66 69 64 20 3d 20 WHERE B.fid =
28d0: 24 6d 79 69 64 0a 09 7d 5d 20 7b 0a 09 20 20 20 $myid..}] {..
28e0: 20 23 20 4d 61 69 6e 20 64 61 74 61 20 61 72 65 # Main data are
28f0: 20 62 6c 6f 62 73 2c 20 6d 6f 73 74 20 77 69 6c blobs, most wil
2900: 6c 20 68 61 76 65 20 72 65 76 69 73 69 6f 6e 73 l have revisions
2910: 2c 20 62 75 74 20 6e 6f 74 0a 09 20 20 20 20 23 , but not.. #
2920: 20 61 6c 6c 2e 20 54 68 65 20 65 78 70 61 6e 73 all. The expans
2930: 69 6f 6e 20 67 72 61 70 68 20 69 73 20 62 6c 6f ion graph is blo
2940: 62 20 62 61 73 65 64 2c 20 77 68 65 72 65 61 73 b based, whereas
2950: 20 74 68 65 0a 09 20 20 20 20 23 20 72 65 63 6f the.. # reco
2960: 6d 70 72 65 73 73 69 6f 6e 20 67 72 61 70 68 20 mpression graph
2970: 69 73 20 72 65 76 69 73 69 6f 6e 20 62 61 73 65 is revision base
2980: 64 2e 0a 0a 09 20 20 20 20 69 66 20 7b 24 72 65 d.... if {$re
2990: 76 6e 72 20 6e 65 20 22 22 7d 20 7b 0a 09 09 23 vnr ne ""} {...#
29a0: 20 42 6c 6f 62 20 68 61 73 20 72 65 76 69 73 69 Blob has revisi
29b0: 6f 6e 2c 20 65 78 74 65 6e 64 20 72 65 63 6f 6d on, extend recom
29c0: 70 72 65 73 73 69 6f 6e 20 67 72 61 70 68 2e 0a pression graph..
29d0: 0a 09 09 6c 61 70 70 65 6e 64 20 72 65 76 6d 61 ...lappend revma
29e0: 70 20 72 24 72 65 76 6e 72 20 24 72 69 64 0a 0a p r$revnr $rid..
29f0: 09 09 24 7a 70 20 6e 6f 64 65 20 69 6e 73 65 72 ..$zp node inser
2a00: 74 20 24 72 69 64 0a 09 09 24 7a 70 20 6e 6f 64 t $rid...$zp nod
2a10: 65 20 73 65 74 20 20 20 20 24 72 69 64 20 72 65 e set $rid re
2a20: 76 6e 72 20 24 72 65 76 6e 72 0a 09 09 24 7a 70 vnr $revnr...$zp
2a30: 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 72 69 node set $ri
2a40: 64 20 6c 61 62 65 6c 20 3c 24 72 65 76 6e 72 3e d label <$revnr>
2a50: 0a 0a 09 09 69 66 20 7b 24 63 68 69 6c 64 20 6e ....if {$child n
2a60: 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 6c 61 e ""} {... la
2a70: 70 70 65 6e 64 20 7a 61 72 63 73 20 24 63 68 69 ppend zarcs $chi
2a80: 6c 64 20 24 72 69 64 0a 09 09 7d 0a 09 20 20 20 ld $rid...}..
2a90: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20 57 65 } else {...# We
2aa0: 20 66 61 6b 65 20 61 20 72 65 76 6e 72 20 66 6f fake a revnr fo
2ab0: 72 20 74 68 65 20 62 6c 6f 62 73 20 77 68 69 63 r the blobs whic
2ac0: 68 20 68 61 76 65 20 6e 6f 0a 09 09 23 20 72 65 h have no...# re
2ad0: 76 69 73 69 6f 6e 2c 20 66 6f 72 20 75 73 65 20 vision, for use
2ae0: 69 6e 20 74 68 65 20 65 78 70 61 6e 73 69 6f 6e in the expansion
2af0: 20 67 72 61 70 68 2e 0a 09 09 73 65 74 20 72 65 graph....set re
2b00: 76 6e 72 20 67 68 6f 73 74 24 63 69 64 0a 09 20 vnr ghost$cid..
2b10: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 4e 6f 77 }... # Now
2b20: 20 74 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 the expansion g
2b30: 72 61 70 68 2e 0a 0a 09 20 20 20 20 24 65 78 20 raph.... $ex
2b40: 6e 6f 64 65 20 69 6e 73 65 72 74 20 24 63 69 64 node insert $cid
2b50: 0a 09 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 .. $ex node s
2b60: 65 74 20 20 20 20 24 63 69 64 20 74 65 78 74 20 et $cid text
2b70: 20 5b 6c 69 73 74 20 24 63 6f 66 66 20 24 63 6c [list $coff $cl
2b80: 65 6e 5d 0a 09 20 20 20 20 24 65 78 20 6e 6f 64 en].. $ex nod
2b90: 65 20 73 65 74 20 20 20 20 24 63 69 64 20 72 65 e set $cid re
2ba0: 76 6e 72 20 24 72 65 76 6e 72 0a 09 20 20 20 20 vnr $revnr..
2bb0: 24 65 78 20 6e 6f 64 65 20 73 65 74 20 20 20 20 $ex node set
2bc0: 24 63 69 64 20 6c 61 62 65 6c 20 3c 24 72 65 76 $cid label <$rev
2bd0: 6e 72 3e 0a 0a 09 20 20 20 20 69 66 20 7b 24 63 nr>... if {$c
2be0: 70 61 72 65 6e 74 20 6e 65 20 22 22 7d 20 7b 0a parent ne ""} {.
2bf0: 09 09 23 20 54 68 65 20 65 78 70 61 6e 73 69 6f ..# The expansio
2c00: 6e 20 61 72 63 73 20 67 6f 20 66 72 6f 6d 20 62 n arcs go from b
2c10: 61 73 65 6c 69 6e 65 20 74 6f 20 64 65 6c 74 61 aseline to delta
2c20: 0a 09 09 23 20 64 65 73 63 65 6e 64 61 6e 74 2c ...# descendant,
2c30: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 62 6c based on the bl
2c40: 6f 62 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a ob information..
2c50: 09 09 6c 61 70 70 65 6e 64 20 65 61 72 63 73 20 ..lappend earcs
2c60: 24 63 70 61 72 65 6e 74 20 24 63 69 64 0a 09 20 $cparent $cid..
2c70: 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 50 68 61 73 }..}...# Phas
2c80: 65 20 49 49 3a 20 49 6e 73 65 72 74 20 74 68 65 e II: Insert the
2c90: 20 61 63 63 75 6d 75 6c 61 74 65 64 20 64 65 70 accumulated dep
2ca0: 65 6e 64 65 6e 63 69 65 73 0a 0a 09 66 6f 72 65 endencies...fore
2cb0: 61 63 68 20 7b 66 72 6f 6d 20 74 6f 7d 20 24 65 ach {from to} $e
2cc0: 61 72 63 73 20 7b 20 24 65 78 20 61 72 63 20 69 arcs { $ex arc i
2cd0: 6e 73 65 72 74 20 24 66 72 6f 6d 20 24 74 6f 20 nsert $from $to
2ce0: 7d 0a 09 66 6f 72 65 61 63 68 20 7b 66 72 6f 6d }..foreach {from
2cf0: 20 74 6f 7d 20 24 7a 61 72 63 73 20 7b 20 24 7a to} $zarcs { $z
2d00: 70 20 61 72 63 20 69 6e 73 65 72 74 20 24 66 72 p arc insert $fr
2d10: 6f 6d 20 24 74 6f 20 7d 0a 0a 09 23 20 50 68 61 om $to }...# Pha
2d20: 73 65 20 49 49 49 3a 20 54 72 61 76 65 72 73 65 se III: Traverse
2d30: 20 74 68 65 20 67 72 61 70 68 73 2c 20 65 78 70 the graphs, exp
2d40: 61 6e 64 20 74 68 65 20 66 69 6c 65 2c 20 61 6e and the file, an
2d50: 64 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 20 d..#
2d60: 67 65 6e 65 72 61 74 65 20 69 6d 70 6f 72 74 20 generate import
2d70: 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a 0a 09 instructions....
2d80: 73 65 74 20 61 72 63 68 69 76 65 20 5b 3a 3a 66 set archive [::f
2d90: 69 6c 65 20 6a 6f 69 6e 20 5b 24 6d 79 70 72 6f ile join [$mypro
2da0: 6a 65 63 74 20 66 75 6c 6c 70 61 74 68 5d 20 24 ject fullpath] $
2db0: 6d 79 70 61 74 68 5d 0a 09 73 65 74 20 61 63 20 mypath]..set ac
2dc0: 20 20 20 20 20 5b 6f 70 65 6e 20 24 61 72 63 68 [open $arch
2dd0: 69 76 65 20 72 5d 0a 09 66 63 6f 6e 66 69 67 75 ive r]..fconfigu
2de0: 72 65 20 24 61 63 20 2d 74 72 61 6e 73 6c 61 74 re $ac -translat
2df0: 69 6f 6e 20 62 69 6e 61 72 79 0a 0a 09 23 20 46 ion binary...# F
2e00: 69 72 73 74 20 74 72 61 76 65 72 73 65 20 74 68 irst traverse th
2e10: 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 61 70 e expansion grap
2e20: 68 2c 20 74 68 69 73 20 67 69 76 65 73 20 75 73 h, this gives us
2e30: 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e the..# revision
2e40: 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 77 s in the order w
2e50: 65 20 68 61 76 65 20 74 6f 20 65 78 70 61 6e 64 e have to expand
2e60: 20 74 68 65 6d 2c 20 77 68 69 63 68 20 77 65 20 them, which we
2e70: 64 6f 2e 0a 0a 09 73 65 74 20 6d 61 78 20 5b 6c do....set max [l
2e80: 6c 65 6e 67 74 68 20 5b 24 65 78 20 6e 6f 64 65 length [$ex node
2e90: 73 5d 5d 0a 09 73 65 74 20 6d 79 69 6d 70 6f 72 s]]..set myimpor
2ea0: 74 20 30 0a 0a 09 67 74 63 6f 72 65 20 64 61 74 t 0...gtcore dat
2eb0: 61 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 acmd [mymethod
2ec0: 20 45 78 70 61 6e 64 44 61 74 61 5d 0a 09 67 74 ExpandData]..gt
2ed0: 63 6f 72 65 20 66 6f 72 6d 61 74 63 6d 64 20 5b core formatcmd [
2ee0: 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 46 mymethod ExpandF
2ef0: 6f 72 6d 61 74 5d 0a 09 67 74 63 6f 72 65 20 73 ormat]..gtcore s
2f00: 6f 72 74 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 ortcmd [mymeth
2f10: 6f 64 20 45 78 70 61 6e 64 53 6f 72 74 5d 0a 09 od ExpandSort]..
2f20: 67 74 63 6f 72 65 20 73 61 76 65 63 6d 64 20 20 gtcore savecmd
2f30: 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e [mymethod Expan
2f40: 64 31 20 24 61 63 20 24 64 69 72 20 24 6d 61 78 d1 $ac $dir $max
2f50: 5d 0a 0a 09 67 74 63 6f 72 65 20 74 72 61 76 65 ]...gtcore trave
2f60: 72 73 65 20 24 65 78 20 7b 45 78 70 61 6e 64 69 rse $ex {Expandi
2f70: 6e 67 20 72 65 76 69 73 69 6f 6e 73 2e 2e 2e 7d ng revisions...}
2f80: 0a 09 63 6c 6f 73 65 20 24 61 63 0a 0a 09 23 20 ..close $ac...#
2f90: 4e 6f 77 20 74 72 61 76 65 72 73 65 20 74 68 65 Now traverse the
2fa0: 20 69 6d 70 6f 72 74 20 67 72 61 70 68 2c 20 74 import graph, t
2fb0: 68 69 73 20 62 75 69 6c 64 73 20 74 68 65 20 69 his builds the i
2fc0: 6e 73 74 72 75 63 74 69 6f 6e 0a 09 23 20 6d 61 nstruction..# ma
2fd0: 70 20 66 6f 72 20 74 68 65 20 66 6f 73 73 69 6c p for the fossil
2fe0: 20 64 65 6c 74 61 73 2e 0a 0a 09 67 74 63 6f 72 deltas....gtcor
2ff0: 65 20 64 61 74 61 63 6d 64 20 20 20 5b 6d 79 6d e datacmd [mym
3000: 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74 61 ethod ExpandData
3010: 5d 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d 61 74 ]..gtcore format
3020: 63 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 cmd [mymethod Ex
3030: 70 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67 74 63 pandFormat]..gtc
3040: 6f 72 65 20 73 6f 72 74 63 6d 64 20 20 20 5b 6d ore sortcmd [m
3050: 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53 6f ymethod ExpandSo
3060: 72 74 5d 0a 09 67 74 63 6f 72 65 20 73 61 76 65 rt]..gtcore save
3070: 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 cmd [mymethod
3080: 45 78 70 61 6e 64 32 5d 0a 0a 09 73 65 74 20 6d Expand2]...set m
3090: 79 69 6d 70 6f 72 74 20 7b 7d 0a 09 67 74 63 6f yimport {}..gtco
30a0: 72 65 20 74 72 61 76 65 72 73 65 20 24 7a 70 20 re traverse $zp
30b0: 7b 47 65 6e 65 72 61 74 69 6e 67 20 72 65 76 69 {Generating revi
30c0: 73 69 6f 6e 20 6f 72 64 65 72 20 66 6f 72 20 69 sion order for i
30d0: 6d 70 6f 72 74 2e 2e 2e 7d 0a 09 73 65 74 20 66 mport...}..set f
30e0: 69 6c 65 6d 61 70 20 24 6d 79 69 6d 70 6f 72 74 ilemap $myimport
30f0: 0a 09 75 6e 73 65 74 20 6d 79 69 6d 70 6f 72 74 ..unset myimport
3100: 0a 0a 09 23 20 41 6e 64 20 62 61 63 6b 20 74 6f ...# And back to
3110: 20 69 6d 70 6f 72 74 20 63 6f 6e 74 72 6f 6c 0a import control.
3120: 0a 09 24 65 78 20 64 65 73 74 72 6f 79 0a 09 24 ..$ex destroy..$
3130: 7a 70 20 64 65 73 74 72 6f 79 0a 0a 09 72 65 74 zp destroy...ret
3140: 75 72 6e 20 5b 6c 69 73 74 20 24 66 69 6c 65 6d urn [list $filem
3150: 61 70 20 24 72 65 76 6d 61 70 5d 0a 20 20 20 20 ap $revmap].
3160: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 }.. method Ex
3170: 70 61 6e 64 44 61 74 61 20 20 20 7b 67 72 61 70 pandData {grap
3180: 68 20 6e 6f 64 65 7d 20 7b 20 72 65 74 75 72 6e h node} { return
3190: 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 [$graph node ge
31a0: 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 20 7d t $node revnr] }
31b0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 . method Expa
31c0: 6e 64 46 6f 72 6d 61 74 20 7b 67 72 61 70 68 20 ndFormat {graph
31d0: 69 74 65 6d 7d 20 7b 20 72 65 74 75 72 6e 20 3c item} { return <
31e0: 5b 6c 69 6e 64 65 78 20 24 69 74 65 6d 20 31 5d [lindex $item 1]
31f0: 3e 20 7d 20 3b 20 23 20 72 65 76 6e 72 0a 20 20 > } ; # revnr.
3200: 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53 method ExpandS
3210: 6f 72 74 20 20 20 7b 67 72 61 70 68 20 63 61 6e ort {graph can
3220: 64 69 64 61 74 65 73 7d 20 7b 0a 09 23 20 63 61 didates} {..# ca
3230: 6e 64 69 64 61 74 65 73 20 3d 20 6c 69 73 74 28 ndidates = list(
3240: 69 74 65 6d 29 2c 20 69 74 65 6d 20 3d 20 6c 69 item), item = li
3250: 73 74 28 6e 6f 64 65 20 72 65 76 6e 72 29 0a 09 st(node revnr)..
3260: 23 20 53 6f 72 74 20 62 79 20 6e 6f 64 65 20 61 # Sort by node a
3270: 6e 64 20 72 65 76 6e 72 20 2d 3e 20 54 72 75 6e nd revnr -> Trun
3280: 6b 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 65 k revisions come
3290: 20 66 69 72 73 74 2e 0a 09 72 65 74 75 72 6e 20 first...return
32a0: 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 31 20 [lsort -index 1
32b0: 2d 64 69 63 74 20 5b 6c 73 6f 72 74 20 2d 69 6e -dict [lsort -in
32c0: 64 65 78 20 30 20 2d 64 69 63 74 20 24 63 61 6e dex 0 -dict $can
32d0: 64 69 64 61 74 65 73 5d 5d 0a 20 20 20 20 7d 0a didates]]. }.
32e0: 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e method Expan
32f0: 64 31 20 7b 63 68 61 6e 20 64 69 72 20 6d 61 78 d1 {chan dir max
3300: 20 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a 09 graph node} {..
3310: 6c 6f 67 20 70 72 6f 67 72 65 73 73 20 33 20 66 log progress 3 f
3320: 69 6c 65 20 24 6d 79 69 6d 70 6f 72 74 20 24 6d ile $myimport $m
3330: 61 78 20 3b 20 69 6e 63 72 20 6d 79 69 6d 70 6f ax ; incr myimpo
3340: 72 74 0a 0a 09 73 65 74 20 72 65 76 6e 72 20 20 rt...set revnr
3350: 20 20 20 20 20 20 20 20 20 5b 24 67 72 61 70 68 [$graph
3360: 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20 node get $node
3370: 72 65 76 6e 72 5d 0a 09 73 65 74 20 66 6e 61 6d revnr]..set fnam
3380: 65 20 20 20 20 20 20 20 20 20 20 72 24 72 65 76 e r$rev
3390: 6e 72 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74 nr..struct::list
33a0: 20 61 73 73 69 67 6e 20 5b 24 67 72 61 70 68 20 assign [$graph
33b0: 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20 74 node get $node t
33c0: 65 78 74 5d 20 6f 66 66 73 65 74 20 6c 65 6e 67 ext] offset leng
33d0: 74 68 0a 0a 09 69 66 20 7b 24 6c 65 6e 67 74 68 th...if {$length
33e0: 20 3c 20 30 7d 20 7b 0a 09 20 20 20 20 73 65 74 < 0} {.. set
33f0: 20 64 61 74 61 20 22 22 0a 09 7d 20 65 6c 73 65 data ""..} else
3400: 20 7b 0a 09 20 20 20 20 73 65 65 6b 20 24 63 68 {.. seek $ch
3410: 61 6e 20 24 6f 66 66 73 65 74 20 73 74 61 72 74 an $offset start
3420: 0a 09 20 20 20 20 73 65 74 20 64 61 74 61 20 5b .. set data [
3430: 73 74 72 69 6e 67 20 6d 61 70 20 7b 40 40 20 40 string map {@@ @
3440: 7d 20 5b 72 65 61 64 20 24 63 68 61 6e 20 24 6c } [read $chan $l
3450: 65 6e 67 74 68 5d 5d 0a 09 7d 0a 0a 09 69 66 20 ength]]..}...if
3460: 7b 21 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 6b {![$graph node k
3470: 65 79 65 78 69 73 74 73 20 24 6e 6f 64 65 20 5f eyexists $node _
3480: 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a 09 20 20 20 _base__]} {..
3490: 20 23 20 46 75 6c 6c 20 74 65 78 74 20 6e 6f 64 # Full text nod
34a0: 65 2e 20 47 65 74 20 74 68 65 20 64 61 74 61 2c e. Get the data,
34b0: 20 64 65 63 6f 64 65 20 69 74 2c 20 61 6e 64 20 decode it, and
34c0: 73 61 76 65 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 save.... log
34d0: 77 72 69 74 65 20 38 20 66 69 6c 65 20 7b 45 78 write 8 file {Ex
34e0: 70 61 6e 64 69 6e 67 20 3c 24 72 65 76 6e 72 3e panding <$revnr>
34f0: 2c 20 66 75 6c 6c 20 74 65 78 74 7d 0a 0a 09 20 , full text}...
3500: 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 fileutil::wri
3510: 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61 74 teFile -translat
3520: 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72 2f ion binary $dir/
3530: 24 66 6e 61 6d 65 20 24 64 61 74 61 0a 09 7d 20 $fname $data..}
3540: 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 20 44 65 else {.. # De
3550: 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 73 65 lta node. __base
3560: 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f __ is the name o
3570: 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 f the file conta
3580: 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74 68 65 ining.. # the
3590: 20 62 61 73 65 6c 69 6e 65 2e 20 54 68 65 20 70 baseline. The p
35a0: 61 74 63 68 20 69 73 20 61 74 20 74 68 65 20 73 atch is at the s
35b0: 70 65 63 69 66 69 65 64 20 6c 6f 63 61 74 69 6f pecified locatio
35c0: 6e 20 6f 66 0a 09 20 20 20 20 23 20 74 68 65 20 n of.. # the
35d0: 61 72 63 68 69 76 65 20 66 69 6c 65 2e 0a 0a 09 archive file....
35e0: 20 20 20 20 73 65 74 20 66 62 61 73 65 20 5b 24 set fbase [$
35f0: 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 graph node get $
3600: 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09 node __base__]..
3610: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20 log write 8
3620: 66 69 6c 65 20 7b 45 78 70 61 6e 64 69 6e 67 20 file {Expanding
3630: 3c 24 72 65 76 6e 72 3e 2c 20 69 73 20 64 65 6c <$revnr>, is del
3640: 74 61 20 6f 66 20 3c 24 66 62 61 73 65 3e 7d 0a ta of <$fbase>}.
3650: 0a 09 20 20 20 20 73 65 74 20 62 61 73 65 20 5b .. set base [
3660: 66 69 6c 65 75 74 69 6c 3a 3a 63 61 74 20 2d 74 fileutil::cat -t
3670: 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 ranslation binar
3680: 79 20 24 64 69 72 2f 24 66 62 61 73 65 5d 0a 0a y $dir/$fbase]..
3690: 09 20 20 20 20 23 20 57 72 69 74 69 6e 67 20 74 . # Writing t
36a0: 68 65 20 70 61 74 63 68 20 74 6f 20 64 69 73 6b he patch to disk
36b0: 20 69 73 20 6a 75 73 74 20 66 6f 72 20 62 65 74 is just for bet
36c0: 74 65 72 0a 09 20 20 20 20 23 20 64 65 62 75 67 ter.. # debug
36d0: 67 69 6e 67 2e 20 49 74 20 69 73 20 6e 6f 74 20 ging. It is not
36e0: 75 73 65 64 20 6f 74 68 65 72 77 69 73 65 2e 0a used otherwise..
36f0: 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 . fileutil::w
3700: 72 69 74 65 46 69 6c 65 20 24 64 69 72 2f 72 70 riteFile $dir/rp
3710: 61 74 63 68 20 24 64 61 74 61 0a 09 20 20 20 20 atch $data..
3720: 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74 65 46 fileutil::writeF
3730: 69 6c 65 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e ile -translation
3740: 20 62 69 6e 61 72 79 20 24 64 69 72 2f 24 66 6e binary $dir/$fn
3750: 61 6d 65 20 5c 0a 09 09 5b 41 70 70 6c 79 20 24 ame \...[Apply $
3760: 62 61 73 65 20 24 64 61 74 61 5d 0a 09 7d 0a 0a base $data]..}..
3770: 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 73 .# Post to all s
3780: 75 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 74 uccessors that t
3790: 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 65 he just generate
37a0: 64 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 0a d file is their.
37b0: 09 23 20 62 61 73 65 6c 69 6e 65 2e 0a 0a 09 66 .# baseline....f
37c0: 6f 72 65 61 63 68 20 6f 75 74 20 5b 24 67 72 61 oreach out [$gra
37d0: 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74 20 24 6e ph nodes -out $n
37e0: 6f 64 65 5d 20 7b 0a 09 20 20 20 20 24 67 72 61 ode] {.. $gra
37f0: 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f 75 74 ph node set $out
3800: 20 5f 5f 62 61 73 65 5f 5f 20 24 66 6e 61 6d 65 __base__ $fname
3810: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
3820: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 41 70 70 6c }.. proc Appl
3830: 79 20 7b 62 61 73 65 20 64 65 6c 74 61 7d 20 7b y {base delta} {
3840: 0a 09 23 20 62 61 73 65 20 20 3d 20 62 61 73 65 ..# base = base
3850: 20 74 65 78 74 2e 0a 09 23 20 64 65 6c 74 61 20 text...# delta
3860: 3d 20 64 65 6c 74 61 20 69 6e 20 72 63 73 20 66 = delta in rcs f
3870: 6f 72 6d 61 74 2e 0a 09 23 0a 09 23 20 42 6f 74 ormat...#..# Bot
3880: 68 20 73 74 72 69 6e 67 73 20 61 72 65 20 75 6e h strings are un
3890: 65 6e 63 6f 64 65 64 2c 20 69 2e 65 2e 20 74 68 encoded, i.e. th
38a0: 69 6e 67 73 20 6c 69 6b 65 20 40 40 2c 20 65 74 ings like @@, et
38b0: 63 2e 20 68 61 76 65 0a 09 23 20 61 6c 72 65 61 c. have..# alrea
38c0: 64 79 20 62 65 65 6e 20 72 65 70 6c 61 63 65 64 dy been replaced
38d0: 20 77 69 74 68 20 74 68 65 69 72 20 70 72 6f 70 with their prop
38e0: 65 72 20 63 68 61 72 61 63 74 65 72 73 2e 0a 09 er characters...
38f0: 23 0a 09 23 20 52 65 74 75 72 6e 20 76 61 6c 75 #..# Return valu
3900: 65 20 69 73 20 74 68 65 20 70 61 74 63 68 65 64 e is the patched
3910: 20 74 65 78 74 2e 0a 0a 09 73 65 74 20 62 61 73 text....set bas
3920: 65 20 5b 73 70 6c 69 74 20 24 62 61 73 65 20 5c e [split $base \
3930: 6e 5d 0a 09 73 65 74 20 62 6c 65 6e 20 5b 6c 6c n]..set blen [ll
3940: 65 6e 67 74 68 20 24 62 61 73 65 5d 0a 09 73 65 ength $base]..se
3950: 74 20 6f 6f 66 66 20 30 0a 09 73 65 74 20 72 65 t ooff 0..set re
3960: 73 20 22 22 0a 0a 09 73 65 74 20 6c 69 6e 65 73 s ""...set lines
3970: 20 20 5b 73 70 6c 69 74 20 24 64 65 6c 74 61 20 [split $delta
3980: 5c 6e 5d 0a 09 73 65 74 20 6e 6c 69 6e 65 73 20 \n]..set nlines
3990: 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 73 5d [llength $lines]
39a0: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 31 20 ...log write 11
39b0: 66 69 6c 65 20 7b 42 61 73 65 20 20 6c 69 6e 65 file {Base line
39c0: 73 20 3d 20 24 62 6c 65 6e 7d 0a 09 6c 6f 67 20 s = $blen}..log
39d0: 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b 44 write 11 file {D
39e0: 65 6c 74 61 20 6c 69 6e 65 73 20 3d 20 24 6e 6c elta lines = $nl
39f0: 69 6e 65 73 7d 0a 0a 09 66 6f 72 20 7b 73 65 74 ines}...for {set
3a00: 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e 6c 69 i 0} {$i < $nli
3a10: 6e 65 73 7d 20 7b 7d 20 7b 0a 09 20 20 20 20 6c nes} {} {.. l
3a20: 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 og write 11 file
3a30: 20 7b 20 20 20 20 40 20 24 69 20 3d 20 5b 6c 69 { @ $i = [li
3a40: 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69 5d 7d ndex $lines $i]}
3a50: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
3a60: 31 31 20 66 69 6c 65 20 7b 20 6f 6f 66 66 20 24 11 file { ooff $
3a70: 6f 6f 66 66 7d 0a 0a 09 20 20 20 20 69 66 20 7b ooff}... if {
3a80: 21 5b 72 65 67 65 78 70 20 7b 5e 28 5b 61 64 5d ![regexp {^([ad]
3a90: 29 28 5c 64 2b 29 5c 73 28 5c 64 2b 29 24 7d 20 )(\d+)\s(\d+)$}
3aa0: 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 [lindex $lines $
3ab0: 69 5d 20 2d 3e 20 63 6d 64 20 73 6c 20 63 6e 5d i] -> cmd sl cn]
3ac0: 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 69 6e } {...trouble in
3ad0: 74 65 72 6e 61 6c 20 22 42 61 64 20 65 64 20 63 ternal "Bad ed c
3ae0: 6f 6d 6d 61 6e 64 20 27 5b 6c 69 6e 64 65 78 20 ommand '[lindex
3af0: 24 6c 69 6e 65 73 20 24 69 5d 27 22 0a 09 20 20 $lines $i]'"..
3b00: 20 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 }... log wr
3b10: 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 20 63 ite 11 file { c
3b20: 6d 64 20 24 63 6d 64 7d 0a 09 20 20 20 20 6c 6f md $cmd}.. lo
3b30: 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 g write 11 file
3b40: 7b 20 20 20 73 6c 20 24 73 6c 7d 0a 09 20 20 20 { sl $sl}..
3b50: 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 log write 11 fi
3b60: 6c 65 20 7b 20 20 20 63 6e 20 24 63 6e 7d 0a 0a le { cn $cn}..
3b70: 09 20 20 20 20 69 6e 63 72 20 69 0a 09 20 20 20 . incr i..
3b80: 20 73 65 74 20 65 6c 20 5b 65 78 70 72 20 7b 24 set el [expr {$
3b90: 73 6c 20 2b 20 24 63 6e 7d 5d 0a 0a 09 20 20 20 sl + $cn}]...
3ba0: 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 log write 11 fi
3bb0: 6c 65 20 7b 20 20 20 65 6c 20 24 65 6c 7d 0a 0a le { el $el}..
3bc0: 09 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 . switch -exa
3bd0: 63 74 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 64 ct -- $cmd {...d
3be0: 20 7b 0a 09 09 20 20 20 20 69 6e 63 72 20 73 6c {... incr sl
3bf0: 20 2d 31 0a 09 09 20 20 20 20 69 6e 63 72 20 65 -1... incr e
3c00: 6c 20 2d 31 0a 09 09 20 20 20 20 69 66 20 7b 24 l -1... if {$
3c10: 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72 sl < $ooff} { tr
3c20: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b ouble internal {
3c30: 44 65 6c 65 74 69 6f 6e 20 62 65 66 6f 72 65 20 Deletion before
3c40: 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 09 20 last edit} }...
3c50: 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c if {$sl > $bl
3c60: 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e en} { trouble in
3c70: 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e ternal {Deletion
3c80: 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64 7d 20 past file end}
3c90: 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 65 6c 20 }... if {$el
3ca0: 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 > $blen} { troub
3cb0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c le internal {Del
3cc0: 65 74 69 6f 6e 20 62 65 79 6f 6e 64 20 66 69 6c etion beyond fil
3cd0: 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20 20 20 66 e end} }... f
3ce0: 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 65 oreach x [lrange
3cf0: 20 24 62 61 73 65 20 24 6f 6f 66 66 20 24 73 6c $base $ooff $sl
3d00: 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20 ] { lappend res
3d10: 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74 20 20 $x }... set
3d20: 6f 6f 66 66 20 24 65 6c 0a 09 09 7d 0a 09 09 61 ooff $el...}...a
3d30: 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c {... if {$sl
3d40: 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72 6f 75 < $ooff} { trou
3d50: 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49 6e ble internal {In
3d60: 73 65 72 74 20 62 65 66 6f 72 65 20 6c 61 73 74 sert before last
3d70: 20 65 64 69 74 7d 20 7d 0a 09 09 20 20 20 20 69 edit} }... i
3d80: 66 20 7b 24 73 6c 20 3e 20 24 62 6c 65 6e 7d 20 f {$sl > $blen}
3d90: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e { trouble intern
3da0: 61 6c 20 7b 49 6e 73 65 72 74 20 70 61 73 74 20 al {Insert past
3db0: 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 0a 09 09 20 file end} }....
3dc0: 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 foreach x [lr
3dd0: 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66 ange $base $ooff
3de0: 20 24 73 6c 5d 20 20 20 20 20 20 20 20 20 20 20 $sl]
3df0: 20 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20 { lappend res
3e00: 24 78 20 7d 0a 09 09 20 20 20 20 66 6f 72 65 61 $x }... forea
3e10: 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 6c 69 ch x [lrange $li
3e20: 6e 65 73 20 24 69 20 5b 65 78 70 72 20 7b 24 69 nes $i [expr {$i
3e30: 20 2b 20 24 63 6e 7d 5d 5d 20 7b 20 6c 61 70 70 + $cn}]] { lapp
3e40: 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 09 20 end res $x }...
3e50: 20 20 20 73 65 74 20 6f 6f 66 66 20 24 73 6c 0a set ooff $sl.
3e60: 09 09 20 20 20 20 69 6e 63 72 20 69 20 24 63 6e .. incr i $cn
3e70: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 ...}.. }..}..
3e80: 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 foreach x [lrang
3e90: 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 65 6e e $base $ooff en
3ea0: 64 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 d] { lappend res
3eb0: 20 24 78 20 7d 0a 09 72 65 74 75 72 6e 20 5b 6a $x }..return [j
3ec0: 6f 69 6e 20 24 72 65 73 20 5c 6e 5d 0a 20 20 20 oin $res \n].
3ed0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 }.. method E
3ee0: 78 70 61 6e 64 32 20 7b 67 72 61 70 68 20 6e 6f xpand2 {graph no
3ef0: 64 65 7d 20 7b 0a 09 73 65 74 20 72 65 76 6e 72 de} {..set revnr
3f00: 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 [$graph node ge
3f10: 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 0a 0a t $node revnr]..
3f20: 09 23 20 46 69 72 73 74 20 69 6d 70 6f 72 74 20 .# First import
3f30: 74 68 65 20 66 69 6c 65 2e 0a 09 6c 61 70 70 65 the file...lappe
3f40: 6e 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 73 nd myimport [lis
3f50: 74 20 41 20 72 24 72 65 76 6e 72 20 7b 7d 5d 0a t A r$revnr {}].
3f60: 0a 09 69 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f ..if {[$graph no
3f70: 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6e 6f de keyexists $no
3f80: 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a de __base__]} {.
3f90: 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e 6f 64 . # Delta nod
3fa0: 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73 20 74 e. __base__ is t
3fb0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 he name of the f
3fc0: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 09 ile containing..
3fd0: 20 20 20 20 23 20 74 68 65 20 62 61 73 65 6c 69 # the baseli
3fe0: 6e 65 2e 20 47 65 6e 65 72 61 74 65 20 69 6e 73 ne. Generate ins
3ff0: 74 72 75 63 74 69 6f 6e 20 74 6f 20 6d 61 6b 65 truction to make
4000: 20 74 68 65 20 64 65 6c 74 61 20 61 73 0a 09 20 the delta as..
4010: 20 20 20 23 20 77 65 6c 6c 2e 0a 0a 09 20 20 20 # well....
4020: 20 73 65 74 20 66 62 61 73 65 20 5b 24 67 72 61 set fbase [$gra
4030: 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 ph node get $nod
4040: 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09 20 20 20 e __base__]..
4050: 20 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70 6f 72 lappend myimpor
4060: 74 20 5b 6c 69 73 74 20 44 20 72 24 72 65 76 6e t [list D r$revn
4070: 72 20 72 24 66 62 61 73 65 5d 0a 09 7d 0a 0a 09 r r$fbase]..}...
4080: 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 73 75 # Post to all su
4090: 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 74 68 ccessors that th
40a0: 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 65 64 e just generated
40b0: 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 0a 09 file is their..
40c0: 23 20 62 61 73 65 6c 69 6e 65 2e 20 45 78 63 65 # baseline. Exce
40d0: 70 74 69 6f 6e 3a 20 54 68 6f 73 65 20 77 68 69 ption: Those whi
40e0: 63 68 20 61 76 65 20 61 6c 72 65 61 64 79 20 61 ch ave already a
40f0: 20 62 61 73 65 6c 69 6e 65 20 73 65 74 2e 0a 09 baseline set...
4100: 23 20 54 6f 67 65 74 68 65 72 20 77 69 74 68 20 # Together with
4110: 74 68 65 20 73 6f 72 74 69 6e 67 20 6f 66 20 74 the sorting of t
4120: 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 66 runk revisions f
4130: 69 72 73 74 20 74 68 65 20 74 72 75 6e 6b 0a 09 irst the trunk..
4140: 23 20 73 68 6f 75 6c 64 20 6f 6e 65 20 75 6e 69 # should one uni
4150: 6e 74 65 72 75 70 74 65 64 20 6c 69 6e 65 2c 20 nterupted line,
4160: 77 69 74 68 20 62 72 61 6e 63 68 20 72 6f 6f 74 with branch root
4170: 73 20 5f 6e 6f 74 5f 20 64 65 6c 74 61 0a 09 23 s _not_ delta..#
4180: 20 63 6f 6d 70 72 65 73 73 65 64 20 70 65 72 20 compressed per
4190: 74 68 65 69 72 20 62 72 61 6e 63 68 65 73 2e 0a their branches..
41a0: 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20 5b 24 ..foreach out [$
41b0: 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74 graph nodes -out
41c0: 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 69 $node] {.. i
41d0: 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 f {[$graph node
41e0: 6b 65 79 65 78 69 73 74 73 20 24 6f 75 74 20 5f keyexists $out _
41f0: 5f 62 61 73 65 5f 5f 5d 7d 20 63 6f 6e 74 69 6e _base__]} contin
4200: 75 65 0a 09 20 20 20 20 24 67 72 61 70 68 20 6e ue.. $graph n
4210: 6f 64 65 20 73 65 74 20 24 6f 75 74 20 5f 5f 62 ode set $out __b
4220: 61 73 65 5f 5f 20 24 72 65 76 6e 72 0a 09 7d 0a ase__ $revnr..}.
4230: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
4240: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 6d variable myim
4250: 70 6f 72 74 0a 0a 20 20 20 20 23 20 23 20 23 23 port.. # # ##
4260: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
4270: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
4280: 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a #. ## State..
4290: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 variable myi
42a0: 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b d {
42b0: 7d 20 3b 20 23 20 46 69 6c 65 20 69 64 20 69 6e } ; # File id in
42c0: 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20 the persistent
42d0: 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72 69 61 state.. varia
42e0: 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20 20 20 ble mypath
42f0: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 {} ; # Pat
4300: 68 20 6f 66 20 74 68 65 20 66 69 6c 65 27 73 20 h of the file's
4310: 72 63 73 20 61 72 63 68 69 76 65 2e 0a 20 20 20 rcs archive..
4320: 20 76 61 72 69 61 62 6c 65 20 6d 79 75 73 72 70 variable myusrp
4330: 61 74 68 20 20 20 20 20 20 20 20 20 7b 7d 20 3b ath {} ;
4340: 20 23 20 50 61 74 68 20 6f 66 20 74 68 65 20 66 # Path of the f
4350: 69 6c 65 20 61 73 20 73 65 65 6e 20 62 79 20 75 ile as seen by u
4360: 73 65 72 73 2e 0a 20 20 20 20 76 61 72 69 61 62 sers.. variab
4370: 6c 65 20 6d 79 65 78 65 63 75 74 61 62 6c 65 20 le myexecutable
4380: 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 0 ; # Bool
4390: 65 61 6e 20 66 6c 61 67 20 27 66 69 6c 65 20 65 ean flag 'file e
43a0: 78 65 63 75 74 61 62 6c 65 27 2e 0a 20 20 20 20 xecutable'..
43b0: 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65 variable myproje
43c0: 63 74 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 ct {} ;
43d0: 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 # Reference to t
43e0: 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63 he project objec
43f0: 74 0a 09 09 09 09 20 20 20 20 23 20 74 68 65 20 t..... # the
4400: 66 69 6c 65 20 62 65 6c 6f 6e 67 73 20 74 6f 2e file belongs to.
4410: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
4420: 72 65 76 20 2d 61 72 72 61 79 20 20 20 20 20 20 rev -array
4430: 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 {} ; # Maps revi
4440: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 sion number to t
4450: 68 65 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 he..... # ass
4460: 6f 63 69 61 74 65 64 20 72 65 76 69 73 69 6f 6e ociated revision
4470: 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 76 61 72 object.. var
4480: 69 61 62 6c 65 20 6d 79 72 65 76 69 73 69 6f 6e iable myrevision
4490: 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 s {} ; # S
44a0: 61 6d 65 20 61 73 20 6d 79 72 65 76 2c 20 62 75 ame as myrev, bu
44b0: 74 20 61 20 6c 69 73 74 2c 0a 09 09 09 09 20 20 t a list,.....
44c0: 20 20 23 20 67 69 76 69 6e 67 20 75 73 20 74 68 # giving us th
44d0: 65 20 6f 72 64 65 72 20 6f 66 0a 09 09 09 09 20 e order of.....
44e0: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a # revisions..
44f0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 61 variable mya
4500: 69 64 20 20 20 20 20 20 2d 61 72 72 61 79 20 7b id -array {
4510: 7d 20 3b 20 23 20 4d 61 70 20 72 65 76 69 73 69 } ; # Map revisi
4520: 6f 6e 20 6e 75 6d 62 65 72 73 20 74 6f 20 74 68 on numbers to th
4530: 65 20 69 64 0a 09 09 09 09 20 20 20 20 23 20 6f e id..... # o
4540: 66 20 74 68 65 20 61 75 74 68 6f 72 20 77 68 6f f the author who
4550: 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 09 09 20 committed.....
4560: 20 20 20 23 20 69 74 2e 20 54 68 69 73 20 69 73 # it. This is
4570: 20 6c 61 74 65 72 20 61 67 67 72 65 67 61 74 65 later aggregate
4580: 64 0a 09 09 09 09 20 20 20 20 23 20 77 69 74 68 d..... # with
4590: 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 2c commit message,
45a0: 20 62 72 61 6e 63 68 20 6e 61 6d 65 0a 09 09 09 branch name....
45b0: 09 20 20 20 20 23 20 61 6e 64 20 70 72 6f 6a 65 . # and proje
45c0: 63 74 20 69 64 20 66 6f 72 20 61 20 6d 65 74 61 ct id for a meta
45d0: 20 69 64 2e 0a 20 20 20 20 76 61 72 69 61 62 6c id.. variabl
45e0: 65 20 6d 79 68 65 61 64 72 65 76 6e 72 20 20 20 e myheadrevnr
45f0: 20 20 20 20 7b 7d 20 3b 20 23 20 48 65 61 64 20 {} ; # Head
4600: 72 65 76 69 73 69 6f 6e 20 28 72 65 76 69 73 69 revision (revisi
4610: 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 20 20 20 76 on number). v
4620: 61 72 69 61 62 6c 65 20 6d 79 70 72 69 6e 63 69 ariable myprinci
4630: 70 61 6c 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 pal {} ; #
4640: 20 50 72 69 6e 63 69 70 61 6c 20 62 72 61 6e 63 Principal branc
4650: 68 20 28 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 h (branch number
4660: 29 2e 0a 09 09 09 09 20 20 20 20 23 20 43 6f 6e )...... # Con
4670: 74 72 61 72 79 20 74 6f 20 74 68 65 20 6e 61 6d trary to the nam
4680: 65 20 74 68 69 73 20 69 73 20 74 68 65 0a 09 09 e this is the...
4690: 09 09 20 20 20 20 23 20 64 65 66 61 75 6c 74 20 .. # default
46a0: 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 branch.. vari
46b0: 61 62 6c 65 20 6d 79 64 65 70 65 6e 64 65 6e 63 able mydependenc
46c0: 69 65 73 20 20 20 20 7b 7d 20 3b 20 23 20 44 69 ies {} ; # Di
46d0: 63 74 69 6f 6e 61 72 79 20 70 61 72 65 6e 74 20 ctionary parent
46e0: 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 09 09 20 20 -> child,.....
46f0: 20 20 23 20 72 65 63 6f 72 64 73 20 70 72 69 6d # records prim
4700: 61 72 79 20 64 65 70 65 6e 64 65 6e 63 69 65 73 ary dependencies
4710: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
4720: 79 69 6d 70 6f 72 74 65 64 20 20 20 20 20 20 20 yimported
4730: 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 0 ; # Boolean
4740: 66 6c 61 67 2e 20 53 65 74 20 69 66 20 61 6e 64 flag. Set if and
4750: 20 6f 6e 6c 79 20 69 66 0a 09 09 09 09 20 20 20 only if.....
4760: 20 23 20 72 65 76 20 31 2e 31 20 6f 66 20 74 68 # rev 1.1 of th
4770: 65 20 66 69 6c 65 20 73 65 65 6d 69 6e 67 6c 79 e file seemingly
4780: 0a 09 09 09 09 20 20 20 20 23 20 77 61 73 20 69 ..... # was i
4790: 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61 64 20 mported instead
47a0: 6f 66 20 61 64 64 65 64 0a 09 09 09 09 20 20 20 of added.....
47b0: 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 20 20 20 # normally..
47c0: 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74 variable myroot
47d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b {} ;
47e0: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 # Reference to
47f0: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a the revision obj
4800: 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 68 6f ect..... # ho
4810: 6c 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20 72 lding the root r
4820: 65 76 69 73 69 6f 6e 2e 20 20 49 74 73 0a 09 09 evision. Its...
4830: 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 20 75 .. # number u
4840: 73 75 61 6c 6c 79 20 69 73 20 27 31 2e 31 27 2e sually is '1.1'.
4850: 20 43 61 6e 20 62 65 0a 09 09 09 09 20 20 20 20 Can be.....
4860: 23 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 75 # a different nu
4870: 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20 6f 66 mber, because of
4880: 0a 09 09 09 09 20 20 20 20 23 20 67 61 70 73 20 ..... # gaps
4890: 63 72 65 61 74 65 64 20 76 69 61 20 27 63 76 73 created via 'cvs
48a0: 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20 20 76 admin -o'.. v
48b0: 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 ariable mybranch
48c0: 65 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 es -array {} ; #
48d0: 20 4d 61 70 73 20 62 72 61 6e 63 68 20 6e 75 6d Maps branch num
48e0: 62 65 72 20 74 6f 20 74 68 65 20 73 79 6d 62 6f ber to the symbo
48f0: 6c 0a 09 09 09 09 20 20 20 20 23 20 6f 62 6a 65 l..... # obje
4900: 63 74 20 68 61 6e 64 6c 69 6e 67 20 74 68 65 20 ct handling the
4910: 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 branch.. vari
4920: 61 62 6c 65 20 6d 79 74 61 67 73 20 20 20 20 20 able mytags
4930: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 -array {} ; # Ma
4940: 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 ps revision numb
4950: 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0a 09 er to the list..
4960: 09 09 09 20 20 20 20 23 20 6f 66 20 73 79 6d 62 ... # of symb
4970: 6f 6c 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 74 ol objects for t
4980: 68 65 20 74 61 67 73 0a 09 09 09 09 20 20 20 20 he tags.....
4990: 23 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 # associated wit
49a0: 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a h the revision..
49b0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 73 variable mys
49c0: 79 6d 62 6f 6c 73 20 20 20 20 20 20 20 20 20 7b ymbols {
49d0: 7d 20 3b 20 23 20 53 65 74 20 6f 66 20 74 68 65 } ; # Set of the
49e0: 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20 66 6f symbol names fo
49f0: 75 6e 64 20 69 6e 0a 09 09 09 09 20 20 20 20 23 und in..... #
4a00: 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20 20 20 this file...
4a10: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e variable mybran
4a20: 63 68 63 6e 74 20 30 20 3b 20 23 20 43 6f 75 6e chcnt 0 ; # Coun
4a30: 74 65 72 20 66 6f 72 20 62 72 61 6e 63 68 65 73 ter for branches
4a40: 2c 20 74 6f 20 72 65 63 6f 72 64 20 74 68 65 69 , to record thei
4a50: 72 0a 09 09 09 20 20 20 20 20 23 20 6f 72 64 65 r.... # orde
4a60: 72 20 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e 2e r of definition.
4a70: 20 54 68 69 73 20 61 6c 73 6f 20 64 65 66 69 6e This also defin
4a80: 65 73 0a 09 09 09 20 20 20 20 20 23 20 74 68 65 es.... # the
4a90: 69 72 20 6f 72 64 65 72 20 6f 66 20 63 72 65 61 ir order of crea
4aa0: 74 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20 74 tion, which is t
4ab0: 68 65 0a 09 09 09 20 20 20 20 20 23 20 72 65 76 he.... # rev
4ac0: 65 72 73 65 20 6f 66 20 64 65 66 69 6e 69 74 69 erse of definiti
4ad0: 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 73 6d 61 6c on. I.e. a smal
4ae0: 6c 65 72 0a 09 09 09 20 20 20 20 20 23 20 6e 75 ler.... # nu
4af0: 6d 62 65 72 20 6d 65 61 6e 73 20 27 44 65 66 69 mber means 'Defi
4b00: 6e 65 64 20 65 61 72 6c 69 65 72 27 2c 20 6d 65 ned earlier', me
4b10: 61 6e 73 0a 09 09 09 20 20 20 20 20 23 20 27 43 ans.... # 'C
4b20: 72 65 61 74 65 64 20 6c 61 74 65 72 27 2e 0a 0a reated later'...
4b30: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 variable myt
4b40: 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 44 69 72 65 runk {} ; # Dire
4b50: 63 74 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 ct reference to
4b60: 6d 79 70 72 6f 6a 65 63 74 20 2d 3e 20 74 72 75 myproject -> tru
4b70: 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 nk.. variable
4b80: 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 3b 20 23 20 myroots {} ; #
4b90: 4c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 69 6e List of roots in
4ba0: 20 74 68 65 20 66 6f 72 65 73 74 20 6f 66 0a 09 the forest of..
4bb0: 09 09 20 20 23 20 6c 6f 64 27 73 2e 20 4f 62 6a .. # lod's. Obj
4bc0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 20 74 ect references t
4bd0: 6f 20 72 65 76 69 73 69 6f 6e 73 20 61 6e 64 0a o revisions and.
4be0: 09 09 09 20 20 23 20 62 72 61 6e 63 68 65 73 2e ... # branches.
4bf0: 20 54 68 65 20 6c 61 74 74 65 72 20 63 61 6e 20 The latter can
4c00: 61 70 70 65 61 72 20 77 68 65 6e 20 74 68 65 79 appear when they
4c10: 0a 09 09 09 20 20 23 20 61 72 65 20 73 65 76 65 .... # are seve
4c20: 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20 70 red from their p
4c30: 61 72 65 6e 74 2e 0a 0a 20 20 20 20 76 61 72 69 arent... vari
4c40: 61 62 6c 65 20 6d 79 62 6c 6f 62 20 7b 7d 20 3b able myblob {} ;
4c50: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 # Reference to
4c60: 74 68 65 20 6f 62 6a 65 63 74 20 6d 61 6e 61 67 the object manag
4c70: 69 6e 67 20 74 68 65 20 62 6c 6f 62 0a 09 09 09 ing the blob....
4c80: 20 23 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 28 # information (
4c90: 74 65 78 74 72 61 6e 67 65 20 6f 66 20 72 65 76 textrange of rev
4ca0: 69 73 69 6f 6e 73 2c 20 61 6e 64 0a 09 09 09 20 isions, and....
4cb0: 23 20 64 65 6c 74 61 20 64 65 70 65 6e 64 65 6e # delta dependen
4cc0: 63 69 65 73 29 20 6f 66 20 74 68 69 73 20 66 69 cies) of this fi
4cd0: 6c 65 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 le... # # ##
4ce0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
4cf0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
4d00: 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61 6c . ## Internal
4d10: 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65 methods.. me
4d20: 74 68 6f 64 20 52 65 63 6f 72 64 42 72 61 6e 63 thod RecordBranc
4d30: 68 43 6f 6d 6d 69 74 73 20 7b 62 72 61 6e 63 68 hCommits {branch
4d40: 65 73 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 62 es} {..foreach b
4d50: 72 61 6e 63 68 72 65 76 6e 72 20 24 62 72 61 6e ranchrevnr $bran
4d60: 63 68 65 73 20 7b 0a 09 20 20 20 20 69 66 20 7b ches {.. if {
4d70: 5b 63 61 74 63 68 20 7b 0a 09 09 73 65 74 20 62 [catch {...set b
4d80: 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 52 65 76 ranch [$self Rev
4d90: 32 42 72 61 6e 63 68 20 24 62 72 61 6e 63 68 72 2Branch $branchr
4da0: 65 76 6e 72 5d 0a 09 20 20 20 20 7d 5d 7d 20 7b evnr].. }]} {
4db0: 0a 09 09 73 65 74 20 62 72 61 6e 63 68 20 5b 24 ...set branch [$
4dc0: 73 65 6c 66 20 41 64 64 55 6e 6c 61 62 65 6c 65 self AddUnlabele
4dd0: 64 42 72 61 6e 63 68 20 5b 72 65 76 20 32 62 72 dBranch [rev 2br
4de0: 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 68 72 65 anchnr $branchre
4df0: 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 vnr]].. }...
4e00: 20 20 20 23 20 52 65 63 6f 72 64 20 74 68 65 20 # Record the
4e10: 63 6f 6d 6d 69 74 2c 20 6a 75 73 74 20 61 73 20 commit, just as
4e20: 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 revision number
4e30: 66 6f 72 0a 09 20 20 20 20 23 20 6e 6f 77 2e 20 for.. # now.
4e40: 50 72 6f 63 65 73 42 72 61 6e 63 68 44 65 70 65 ProcesBranchDepe
4e50: 6e 64 65 6e 63 69 65 73 20 77 69 6c 6c 20 65 78 ndencies will ex
4e60: 74 65 6e 64 20 74 68 61 74 20 69 74 6f 20 61 0a tend that ito a.
4e70: 09 20 20 20 20 23 20 70 72 6f 70 65 72 20 6f 62 . # proper ob
4e80: 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2e 0a ject reference..
4e90: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 .. $branch se
4ea0: 74 63 68 69 6c 64 72 65 76 6e 72 20 24 62 72 61 tchildrevnr $bra
4eb0: 6e 63 68 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 nchrevnr..}..ret
4ec0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
4ed0: 65 74 68 6f 64 20 52 65 76 32 42 72 61 6e 63 68 ethod Rev2Branch
4ee0: 20 7b 72 65 76 6e 72 7d 20 7b 0a 20 20 20 20 20 {revnr} {.
4ef0: 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 integrity ass
4f00: 65 72 74 20 7b 21 5b 72 65 76 20 69 73 74 72 75 ert {![rev istru
4f10: 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d nkrevnr $revnr]}
4f20: 20 7b 45 78 70 65 63 74 65 64 20 61 20 62 72 61 {Expected a bra
4f30: 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d nch revision num
4f40: 62 65 72 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 ber}..return $my
4f50: 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20 32 62 branches([rev 2b
4f60: 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72 5d 29 ranchnr $revnr])
4f70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
4f80: 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 od AddUnlabeledB
4f90: 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e 72 7d ranch {branchnr}
4fa0: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73 65 6c {..return [$sel
4fb0: 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e 6c 61 f AddBranch unla
4fc0: 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e 72 20 beled-$branchnr
4fd0: 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20 20 7d $branchnr]. }
4fe0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 .. method Add
4ff0: 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62 72 61 Branch {name bra
5000: 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 69 nchnr} {..if {[i
5010: 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72 61 nfo exists mybra
5020: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 nches($branchnr)
5030: 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 ]} {.. log wr
5040: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 ite 1 file "In '
5050: 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e 63 68 $mypath': Branch
5060: 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e 61 6d '$branchnr' nam
5070: 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68 65 73 ed '[$mybranches
5080: 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61 6d 65 ($branchnr) name
5090: 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 ]'".. log wri
50a0: 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e 6e 6f te 1 file "Canno
50b0: 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20 6e 61 t have second na
50c0: 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67 6e 6f me '$name', igno
50d0: 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20 72 65 ring it".. re
50e0: 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62 72 61 turn..}..set bra
50f0: 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 nch [sym %AUTO%
5100: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 6e 72 branch $branchnr
5110: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 65 74 [$myproject get
5120: 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20 24 73 symbol $name] $s
5130: 65 6c 66 5d 0a 09 24 62 72 61 6e 63 68 20 73 65 elf]..$branch se
5140: 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e 63 72 20 tposition [incr
5150: 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a 09 73 65 mybranchcnt]..se
5160: 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 t mybranches($br
5170: 61 6e 63 68 6e 72 29 20 24 62 72 61 6e 63 68 0a anchnr) $branch.
5180: 09 72 65 74 75 72 6e 20 24 62 72 61 6e 63 68 0a .return $branch.
5190: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
51a0: 64 20 41 64 64 54 61 67 20 7b 6e 61 6d 65 20 72 d AddTag {name r
51b0: 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 74 61 67 evnr} {..set tag
51c0: 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 74 61 67 [sym %AUTO% tag
51d0: 20 24 72 65 76 6e 72 20 5b 24 6d 79 70 72 6f 6a $revnr [$myproj
51e0: 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e ect getsymbol $n
51f0: 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 6c 61 70 ame] $self]..lap
5200: 70 65 6e 64 20 6d 79 74 61 67 73 28 24 72 65 76 pend mytags($rev
5210: 6e 72 29 20 24 74 61 67 0a 09 72 65 74 75 72 6e nr) $tag..return
5220: 20 24 74 61 67 0a 20 20 20 20 7d 0a 0a 20 20 20 $tag. }..
5230: 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 61 method RecordBa
5240: 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65 73 20 sicDependencies
5250: 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 7b 0a 09 {revnr next} {..
5260: 23 20 48 61 6e 64 6c 65 20 74 68 65 20 72 65 76 # Handle the rev
5270: 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 6e 63 69 ision dependenci
5280: 65 73 2e 20 52 65 63 6f 72 64 20 74 68 65 6d 20 es. Record them
5290: 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 23 20 6e for now, do..# n
52a0: 6f 74 68 69 6e 67 20 77 69 74 68 20 74 68 65 6d othing with them
52b0: 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 74 68 65 yet....# On the
52c0: 20 74 72 75 6e 6b 20 74 68 65 20 27 6e 65 78 74 trunk the 'next
52d0: 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 ' field points t
52e0: 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 09 o the previous..
52f0: 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 2e 65 2e # revision, i.e.
5300: 20 74 68 65 20 5f 70 61 72 65 6e 74 5f 20 6f 66 the _parent_ of
5310: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f 6e 65 the current one
5320: 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 20 31 2e . Example:..# 1.
5330: 36 27 73 20 6e 65 78 74 20 69 73 20 31 2e 35 20 6's next is 1.5
5340: 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 64 6d 69 (modulo cvs admi
5350: 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f 6e 74 72 n -o)....# Contr
5360: 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63 arily on a branc
5370: 68 20 74 68 65 20 27 6e 65 78 74 27 20 66 69 65 h the 'next' fie
5380: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 ld points to the
5390: 0a 09 23 20 70 72 69 6d 61 72 79 20 5f 63 68 69 ..# primary _chi
53a0: 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65 ld_ of the curre
53b0: 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 41 73 20 nt revision. As
53c0: 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 2e 31 2e example,..# 1.1.
53d0: 33 2e 32 27 73 20 27 6e 65 78 74 27 20 77 69 6c 3.2's 'next' wil
53e0: 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e 0a 0a 09 l be 1.1.3.3....
53f0: 23 20 54 68 65 20 27 6e 65 78 74 27 20 66 69 65 # The 'next' fie
5400: 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 6c 77 61 ld actually alwa
5410: 79 73 20 72 65 66 65 72 73 20 74 6f 20 74 68 65 ys refers to the
5420: 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 63 6f 6e revision..# con
5430: 74 61 69 6e 69 6e 67 20 74 68 65 20 64 65 6c 74 taining the delt
5440: 61 20 6e 65 65 64 65 64 20 74 6f 20 72 65 74 72 a needed to retr
5450: 69 65 76 65 20 74 68 61 74 20 72 65 76 69 73 69 ieve that revisi
5460: 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 65 70 65 on....# The depe
5470: 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 65 64 20 ndencies needed
5480: 68 65 72 65 20 61 72 65 20 74 68 65 20 6c 6f 67 here are the log
5490: 69 63 61 6c 20 73 74 72 75 63 74 75 72 65 2c 0a ical structure,.
54a0: 09 23 20 70 61 72 65 6e 74 2f 63 68 69 6c 64 2c .# parent/child,
54b0: 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 69 6d 70 and not the imp
54c0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 lementation depe
54d0: 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 23 20 70 ndent delta..# p
54e0: 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 20 7b 24 ointers....if {$
54f0: 6e 65 78 74 20 65 71 20 22 22 7d 20 72 65 74 75 next eq ""} retu
5500: 72 6e 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 rn..#
5510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 p
5520: 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 0a 09 arent -> child..
5530: 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b if {[rev istrunk
5540: 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b revnr $revnr]} {
5550: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 .. lappend my
5560: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 6e 65 dependencies $ne
5570: 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 65 6c 73 xt $revnr..} els
5580: 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 e {.. lappend
5590: 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 mydependencies
55a0: 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09 7d 0a $revnr $next..}.
55b0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
55c0: 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 method Proces
55d0: 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 65 6e sPrimaryDependen
55e0: 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 cies {} {..forea
55f0: 63 68 20 7b 70 61 72 65 6e 74 72 65 76 6e 72 20 ch {parentrevnr
5600: 63 68 69 6c 64 72 65 76 6e 72 7d 20 24 6d 79 64 childrevnr} $myd
5610: 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 0a 09 20 ependencies {..
5620: 20 20 20 73 65 74 20 70 61 72 65 6e 74 20 24 6d set parent $m
5630: 79 72 65 76 28 24 70 61 72 65 6e 74 72 65 76 6e yrev($parentrevn
5640: 72 29 0a 09 20 20 20 20 73 65 74 20 63 68 69 6c r).. set chil
5650: 64 20 20 24 6d 79 72 65 76 28 24 63 68 69 6c 64 d $myrev($child
5660: 72 65 76 6e 72 29 0a 09 20 20 20 20 24 70 61 72 revnr).. $par
5670: 65 6e 74 20 73 65 74 63 68 69 6c 64 20 24 63 68 ent setchild $ch
5680: 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20 ild.. $child
5690: 73 65 74 70 61 72 65 6e 74 20 24 70 61 72 65 6e setparent $paren
56a0: 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 t..}..return.
56b0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 }.. method P
56c0: 72 6f 63 65 73 73 42 72 61 6e 63 68 44 65 70 65 rocessBranchDepe
56d0: 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 ndencies {} {..f
56e0: 6f 72 65 61 63 68 20 7b 62 72 61 6e 63 68 6e 72 oreach {branchnr
56f0: 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 branch} [array
5700: 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 get mybranches]
5710: 7b 0a 09 20 20 20 20 73 65 74 20 72 65 76 6e 72 {.. set revnr
5720: 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 [$branch parent
5730: 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20 69 66 20 revnr]... if
5740: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d {![info exists m
5750: 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b yrev($revnr)]} {
5760: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 ...log write 1 f
5770: 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68 ile "In '$mypath
5780: 27 3a 20 54 68 65 20 62 72 61 6e 63 68 20 27 5b ': The branch '[
5790: 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d 27 20 72 $branch name]' r
57a0: 65 66 65 72 65 6e 63 65 73 22 0a 09 09 6c 6f 67 eferences"...log
57b0: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 74 write 1 file "t
57c0: 68 65 20 62 6f 67 75 73 20 72 65 76 69 73 69 6f he bogus revisio
57d0: 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64 20 77 n '$revnr' and w
57e0: 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e 22 ill be ignored."
57f0: 0a 09 09 24 62 72 61 6e 63 68 20 64 65 73 74 72 ...$branch destr
5800: 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79 62 72 61 oy...unset mybra
5810: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 nches($branchnr)
5820: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 .. } else {..
5830: 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 76 28 .set rev $myrev(
5840: 24 72 65 76 6e 72 29 0a 09 09 24 72 65 76 20 61 $revnr)...$rev a
5850: 64 64 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 ddbranch $branch
5860: 0a 09 09 24 62 72 61 6e 63 68 20 73 65 74 70 61 ...$branch setpa
5870: 72 65 6e 74 20 24 72 65 76 0a 0a 09 09 23 20 49 rent $rev....# I
5880: 66 20 72 65 76 69 73 69 6f 6e 73 20 77 65 72 65 f revisions were
5890: 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 committed on th
58a0: 65 20 62 72 61 6e 63 68 20 77 65 20 73 74 6f 72 e branch we stor
58b0: 65 20 61 0a 09 09 23 20 72 65 66 65 72 65 6e 63 e a...# referenc
58c0: 65 20 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20 e to the branch
58d0: 74 68 65 72 65 2c 20 61 6e 64 20 66 75 72 74 68 there, and furth
58e0: 65 72 20 64 65 63 6c 61 72 65 0a 09 09 23 20 74 er declare...# t
58f0: 68 65 20 66 69 72 73 74 20 63 68 69 6c 64 27 73 he first child's
5900: 20 70 61 72 65 6e 74 20 74 6f 20 62 65 20 62 72 parent to be br
5910: 61 6e 63 68 27 73 20 70 61 72 65 6e 74 2c 20 61 anch's parent, a
5920: 6e 64 0a 09 09 23 20 6c 69 73 74 20 74 68 69 73 nd...# list this
5930: 20 63 68 69 6c 64 20 69 6e 20 74 68 65 20 70 61 child in the pa
5940: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a rent revision...
5950: 09 09 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 ..if {[$branch h
5960: 61 73 63 68 69 6c 64 72 65 76 5d 7d 20 7b 0a 09 aschildrev]} {..
5970: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 72 65 . set childre
5980: 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 63 68 69 vnr [$branch chi
5990: 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20 20 20 73 ldrevnr]... s
59a0: 65 74 20 63 68 69 6c 64 20 24 6d 79 72 65 76 28 et child $myrev(
59b0: 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 09 09 20 $childrevnr)...
59c0: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 $branch setch
59d0: 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09 09 20 20 ild $child....
59e0: 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 72 65 $child setpare
59f0: 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 ntbranch $branch
5a00: 0a 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 ... $child se
5a10: 74 70 61 72 65 6e 74 20 20 20 20 20 20 20 24 72 tparent $r
5a20: 65 76 0a 09 09 20 20 20 20 24 72 65 76 20 61 64 ev... $rev ad
5a30: 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 dchildonbranch $
5a40: 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20 20 20 7d child...}.. }
5a50: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
5a60: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 53 6f }.. method So
5a70: 72 74 42 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a rtBranches {} {.
5a80: 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 .foreach {revnr
5a90: 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20 rev} [array get
5aa0: 6d 79 72 65 76 5d 20 7b 20 24 72 65 76 20 73 6f myrev] { $rev so
5ab0: 72 74 62 72 61 6e 63 68 65 73 20 7d 0a 09 72 65 rtbranches }..re
5ac0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
5ad0: 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 54 61 method ProcessTa
5ae0: 67 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d gDependencies {}
5af0: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 {..foreach {rev
5b00: 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 nr taglist} [arr
5b10: 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b ay get mytags] {
5b20: 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f .. if {![info
5b30: 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 24 72 exists myrev($r
5b40: 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73 65 74 20 evnr)]} {...set
5b50: 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74 61 67 6c n [llength $tagl
5b60: 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72 69 74 65 ist]...log write
5b70: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 1 file "In '$my
5b80: 70 61 74 68 27 3a 20 54 68 65 20 66 6f 6c 6c 6f path': The follo
5b90: 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20 74 61 67 wing [nsp $n tag
5ba0: 5d 20 72 65 66 65 72 65 6e 63 65 22 0a 09 09 6c ] reference"...l
5bb0: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 og write 1 file
5bc0: 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 73 "the bogus revis
5bd0: 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64 ion '$revnr' and
5be0: 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 will be ignored
5bf0: 2e 22 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 ."...foreach tag
5c00: 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 20 20 $taglist {...
5c10: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 log write 1 fi
5c20: 6c 65 20 22 20 20 20 20 5b 24 74 61 67 20 6e 61 le " [$tag na
5c30: 6d 65 5d 22 0a 09 09 20 20 20 20 24 74 61 67 20 me]"... $tag
5c40: 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09 09 75 6e destroy...}...un
5c50: 73 65 74 20 6d 79 74 61 67 73 28 24 72 65 76 6e set mytags($revn
5c60: 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b r).. } else {
5c70: 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 ...set rev $myre
5c80: 76 28 24 72 65 76 6e 72 29 0a 09 09 66 6f 72 65 v($revnr)...fore
5c90: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 ach tag $taglist
5ca0: 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20 61 64 {... $rev ad
5cb0: 64 74 61 67 20 20 20 20 24 74 61 67 0a 09 09 20 dtag $tag...
5cc0: 20 20 20 24 74 61 67 20 73 65 74 74 61 67 72 65 $tag settagre
5cd0: 76 20 24 72 65 76 0a 09 09 7d 0a 09 20 20 20 20 v $rev...}..
5ce0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 }..}..return.
5cf0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 }.. method D
5d00: 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52 etermineTheRootR
5d10: 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 evision {} {..#
5d20: 54 68 65 20 72 6f 6f 74 20 69 73 20 74 68 65 20 The root is the
5d30: 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 77 68 69 one revision whi
5d40: 63 68 20 68 61 73 20 6e 6f 20 70 61 72 65 6e 74 ch has no parent
5d50: 2e 20 42 79 0a 09 23 20 63 68 65 63 6b 69 6e 67 . By..# checking
5d60: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 77 all revisions w
5d70: 65 20 65 6e 73 75 72 65 20 74 68 61 74 20 77 65 e ensure that we
5d80: 20 63 61 6e 20 64 65 74 65 63 74 20 61 6e 64 0a can detect and.
5d90: 09 23 20 72 65 70 6f 72 74 20 74 68 65 20 63 61 .# report the ca
5da0: 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 72 se of multiple r
5db0: 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74 20 74 68 oots. Without th
5dc0: 61 74 20 77 65 20 63 6f 75 6c 64 0a 09 23 20 73 at we could..# s
5dd0: 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e 65 20 72 imply take one r
5de0: 65 76 69 73 69 6f 6e 20 61 6e 64 20 66 6f 6c 6c evision and foll
5df0: 6f 77 20 74 68 65 20 70 61 72 65 6e 74 20 6c 69 ow the parent li
5e00: 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65 69 72 20 nks to..# their
5e10: 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a 0a 09 66 root (sic!)....f
5e20: 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 72 65 oreach {revnr re
5e30: 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 v} [array get my
5e40: 72 65 76 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b rev] {.. if {
5e50: 5b 24 72 65 76 20 68 61 73 70 61 72 65 6e 74 5d [$rev hasparent]
5e60: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 } continue..
5e70: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 integrity assert
5e80: 20 7b 24 6d 79 72 6f 6f 74 20 65 71 20 22 22 7d {$myroot eq ""}
5e90: 20 7b 4d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 20 {Multiple root
5ea0: 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 7d revisions found}
5eb0: 0a 09 20 20 20 20 73 65 74 20 6d 79 72 6f 6f 74 .. set myroot
5ec0: 20 24 72 65 76 0a 09 7d 0a 0a 09 23 20 49 6e 20 $rev..}...# In
5ed0: 74 68 65 20 66 75 74 75 72 65 20 77 65 20 61 6c the future we al
5ee0: 73 6f 20 6e 65 65 64 20 61 20 6c 69 73 74 2c 20 so need a list,
5ef0: 61 73 20 62 72 61 6e 63 68 65 73 20 63 61 6e 20 as branches can
5f00: 62 65 63 6f 6d 65 0a 09 23 20 73 65 76 65 72 65 become..# severe
5f10: 64 20 66 72 6f 6d 20 74 68 65 69 72 20 70 61 72 d from their par
5f20: 65 6e 74 2c 20 6d 61 6b 69 6e 67 20 74 68 65 6d ent, making them
5f30: 20 74 68 65 69 72 20 6f 77 6e 20 72 6f 6f 74 2e their own root.
5f40: 0a 09 73 65 74 20 6d 79 72 6f 6f 74 73 20 5b 6c ..set myroots [l
5f50: 69 73 74 20 24 6d 79 72 6f 6f 74 5d 0a 09 72 65 ist $myroot]..re
5f60: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
5f70: 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69 6e 65 method Determine
5f80: 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 74 69 6f RevisionOperatio
5f90: 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 ns {} {..foreach
5fa0: 20 72 65 76 20 24 6d 79 72 65 76 69 73 69 6f 6e rev $myrevision
5fb0: 73 20 7b 20 24 72 65 76 20 64 65 74 65 72 6d 69 s { $rev determi
5fc0: 6e 65 6f 70 65 72 61 74 69 6f 6e 20 7d 0a 09 72 neoperation }..r
5fd0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
5fe0: 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69 6e method Determin
5ff0: 65 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d eLinesOfDevelopm
6000: 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 46 6f 72 20 ent {} {..# For
6010: 72 65 76 69 73 69 6f 6e 73 20 74 68 69 73 20 68 revisions this h
6020: 61 73 20 62 65 65 6e 20 64 6f 6e 65 20 61 6c 72 as been done alr
6030: 65 61 64 79 2c 20 69 6e 20 27 65 78 74 65 6e 64 eady, in 'extend
6040: 27 2e 20 4e 6f 77 0a 09 23 20 77 65 20 64 6f 20 '. Now..# we do
6050: 74 68 69 73 20 66 6f 72 20 74 68 65 20 62 72 61 this for the bra
6060: 6e 63 68 65 73 20 61 6e 64 20 74 61 67 73 2e 0a nches and tags..
6070: 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62 72 61 ..foreach {_ bra
6080: 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74 20 nch} [array get
6090: 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 20 mybranches] {..
60a0: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 6c 6f $branch setlo
60b0: 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 d [$self GetLOD
60c0: 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 72 [$branch parentr
60d0: 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09 66 6f 72 65 evnr]]..}...fore
60e0: 61 63 68 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 ach {_ taglist}
60f0: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 [array get mytag
6100: 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 s] {.. foreac
6110: 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b h tag $taglist {
6120: 0a 09 09 24 74 61 67 20 73 65 74 6c 6f 64 20 5b ...$tag setlod [
6130: 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 5b 24 74 $self GetLOD [$t
6140: 61 67 20 74 61 67 72 65 76 6e 72 5d 5d 0a 09 20 ag tagrevnr]]..
6150: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a }..}..return.
6160: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
6170: 64 20 47 65 74 4c 4f 44 20 7b 72 65 76 6e 72 7d d GetLOD {revnr}
6180: 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 {..if {[rev ist
6190: 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 runkrevnr $revnr
61a0: 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e ]} {.. return
61b0: 20 24 6d 79 74 72 75 6e 6b 0a 09 7d 20 65 6c 73 $mytrunk..} els
61c0: 65 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 e {.. return
61d0: 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e 63 [$self Rev2Branc
61e0: 68 20 24 72 65 76 6e 72 5d 0a 09 7d 0a 20 20 20 h $revnr]..}.
61f0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 48 }.. method H
6200: 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65 66 andleNonTrunkDef
6210: 61 75 6c 74 42 72 61 6e 63 68 20 7b 7d 20 7b 0a aultBranch {} {.
6220: 09 73 65 74 20 72 65 76 6c 69 73 74 20 5b 24 73 .set revlist [$s
6230: 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 elf NonTrunkDefa
6240: 75 6c 74 52 65 76 69 73 69 6f 6e 73 5d 0a 09 69 ultRevisions]..i
6250: 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 72 65 f {![llength $re
6260: 76 6c 69 73 74 5d 7d 20 72 65 74 75 72 6e 0a 0a vlist]} return..
6270: 09 24 73 65 6c 66 20 41 64 6a 75 73 74 4e 6f 6e .$self AdjustNon
6280: 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e TrunkDefaultBran
6290: 63 68 20 24 72 65 76 6c 69 73 74 0a 09 24 73 65 ch $revlist..$se
62a0: 6c 66 20 43 68 65 63 6b 4c 4f 44 73 0a 09 72 65 lf CheckLODs..re
62b0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
62c0: 6d 65 74 68 6f 64 20 4e 6f 6e 54 72 75 6e 6b 44 method NonTrunkD
62d0: 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73 20 efaultRevisions
62e0: 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 {} {..# From cvs
62f0: 32 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 2svn the followi
6300: 6e 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 ng explanation (
6310: 77 69 74 68 20 6d 6f 64 69 66 69 63 61 74 69 6f with modificatio
6320: 6e 73 0a 09 23 20 66 6f 72 20 6f 75 72 20 61 6c ns..# for our al
6330: 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20 44 65 gorithm):...# De
6340: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 termine whether
6350: 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 6e 6f there are any no
6360: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 n-trunk default
6370: 62 72 61 6e 63 68 0a 09 23 20 72 65 76 69 73 69 branch..# revisi
6380: 6f 6e 73 2e 0a 0a 09 23 20 49 66 20 61 20 6e 6f ons....# If a no
6390: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 n-trunk default
63a0: 62 72 61 6e 63 68 20 69 73 20 64 65 74 65 72 6d branch is determ
63b0: 69 6e 65 64 20 74 6f 20 68 61 76 65 20 65 78 69 ined to have exi
63c0: 73 74 65 64 2c 0a 09 23 20 72 65 74 75 72 6e 20 sted,..# return
63d0: 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 a list of object
63e0: 73 20 66 6f 72 20 61 6c 6c 20 72 65 76 69 73 69 s for all revisi
63f0: 6f 6e 73 20 74 68 61 74 20 77 65 72 65 20 6f 6e ons that were on
6400: 63 65 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 ce..# non-trunk
6410: 64 65 66 61 75 6c 74 20 72 65 76 69 73 69 6f 6e default revision
6420: 73 2c 20 69 6e 20 64 65 70 65 6e 64 65 6e 63 79 s, in dependency
6430: 20 6f 72 64 65 72 20 28 69 2e 65 2e 20 72 6f 6f order (i.e. roo
6440: 74 0a 09 23 20 66 69 72 73 74 29 2e 0a 0a 09 23 t..# first)....#
6450: 20 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 63 There are two c
6460: 61 73 65 73 20 74 6f 20 68 61 6e 64 6c 65 3a 0a ases to handle:.
6470: 0a 09 23 20 4f 6e 65 20 63 61 73 65 20 69 73 20 ..# One case is
6480: 73 69 6d 70 6c 65 2e 20 20 54 68 65 20 52 43 53 simple. The RCS
6490: 20 66 69 6c 65 20 6c 69 73 74 73 20 61 20 64 65 file lists a de
64a0: 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 fault branch..#
64b0: 65 78 70 6c 69 63 69 74 6c 79 20 69 6e 20 69 74 explicitly in it
64c0: 73 20 68 65 61 64 65 72 2c 20 73 75 63 68 20 61 s header, such a
64d0: 73 20 27 31 2e 31 2e 31 27 2e 20 20 49 6e 20 74 s '1.1.1'. In t
64e0: 68 69 73 20 63 61 73 65 2c 20 77 65 0a 09 23 20 his case, we..#
64f0: 6b 6e 6f 77 20 74 68 61 74 20 65 76 65 72 79 20 know that every
6500: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 revision on the
6510: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 69 73 vendor branch is
6520: 20 74 6f 20 62 65 0a 09 23 20 74 72 65 61 74 65 to be..# treate
6530: 64 20 61 73 20 68 65 61 64 20 6f 66 20 74 72 75 d as head of tru
6540: 6e 6b 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74 nk at that point
6550: 20 69 6e 20 74 69 6d 65 2e 0a 0a 09 23 20 42 75 in time....# Bu
6560: 74 20 74 68 65 72 65 27 73 20 61 6c 73 6f 20 61 t there's also a
6570: 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 degenerate case
6580: 2e 20 20 54 68 65 20 52 43 53 20 66 69 6c 65 20 . The RCS file
6590: 64 6f 65 73 20 6e 6f 74 0a 09 23 20 63 75 72 72 does not..# curr
65a0: 65 6e 74 6c 79 20 68 61 76 65 20 61 20 64 65 66 ently have a def
65b0: 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 79 65 74 ault branch, yet
65c0: 20 77 65 20 63 61 6e 20 64 65 64 75 63 65 20 74 we can deduce t
65d0: 68 61 74 20 66 6f 72 0a 09 23 20 73 6f 6d 65 20 hat for..# some
65e0: 70 65 72 69 6f 64 20 69 6e 20 74 68 65 20 70 61 period in the pa
65f0: 73 74 20 69 74 20 70 72 6f 62 61 62 6c 79 20 2a st it probably *
6600: 64 69 64 2a 20 68 61 76 65 20 6f 6e 65 2e 20 20 did* have one.
6610: 46 6f 72 0a 09 23 20 65 78 61 6d 70 6c 65 2c 20 For..# example,
6620: 74 68 65 20 66 69 6c 65 20 68 61 73 20 76 65 6e the file has ven
6630: 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 31 2e dor revisions 1.
6640: 31 2e 31 2e 31 20 2d 3e 20 31 2e 31 2e 31 2e 39 1.1.1 -> 1.1.1.9
6650: 36 2c 0a 09 23 20 61 6c 6c 20 6f 66 20 77 68 69 6,..# all of whi
6660: 63 68 20 61 72 65 20 64 61 74 65 64 20 62 65 66 ch are dated bef
6670: 6f 72 65 20 31 2e 32 2c 20 61 6e 64 20 74 68 65 ore 1.2, and the
6680: 6e 20 69 74 20 68 61 73 20 31 2e 31 2e 31 2e 39 n it has 1.1.1.9
6690: 37 0a 09 23 20 2d 3e 20 31 2e 31 2e 31 2e 31 30 7..# -> 1.1.1.10
66a0: 30 20 64 61 74 65 64 20 61 66 74 65 72 20 31 2e 0 dated after 1.
66b0: 32 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2. In this case
66c0: 2c 20 77 65 20 73 68 6f 75 6c 64 0a 09 23 20 72 , we should..# r
66d0: 65 63 6f 72 64 20 31 2e 31 2e 31 2e 39 36 20 61 ecord 1.1.1.96 a
66e0: 73 20 74 68 65 20 6c 61 73 74 20 76 65 6e 64 6f s the last vendo
66f0: 72 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 68 61 r revision to ha
6700: 76 65 20 62 65 65 6e 20 74 68 65 0a 09 23 20 68 ve been the..# h
6710: 65 61 64 20 6f 66 20 74 68 65 20 64 65 66 61 75 ead of the defau
6720: 6c 74 20 62 72 61 6e 63 68 2e 0a 0a 09 69 66 20 lt branch....if
6730: 7b 24 6d 79 70 72 69 6e 63 69 70 61 6c 20 6e 65 {$myprincipal ne
6740: 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 54 68 ""} {.. # Th
6750: 65 72 65 20 69 73 20 73 74 69 6c 6c 20 61 20 64 ere is still a d
6760: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 3b 20 74 efault branch; t
6770: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 61 hat means that a
6780: 6c 6c 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 ll.. # revisi
6790: 6f 6e 73 20 6f 6e 20 74 68 61 74 20 62 72 61 6e ons on that bran
67a0: 63 68 20 67 65 74 20 6d 61 72 6b 65 64 2e 0a 0a ch get marked...
67b0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 35 . log write 5
67c0: 20 66 69 6c 65 20 22 46 6f 75 6e 64 20 65 78 70 file "Found exp
67d0: 6c 69 63 69 74 6c 79 20 6d 61 72 6b 65 64 20 4e licitly marked N
67e0: 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 20 72 TDB"... set r
67f0: 6e 65 78 74 20 5b 24 6d 79 72 6f 6f 74 20 63 68 next [$myroot ch
6800: 69 6c 64 5d 0a 09 20 20 20 20 69 66 20 7b 24 72 ild].. if {$r
6810: 6e 65 78 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 next ne ""} {...
6820: 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 46 trouble fatal "F
6830: 69 6c 65 20 77 69 74 68 20 64 65 66 61 75 6c 74 ile with default
6840: 20 62 72 61 6e 63 68 20 24 6d 79 70 72 69 6e 63 branch $myprinc
6850: 69 70 61 6c 20 61 6c 73 6f 20 68 61 73 20 72 65 ipal also has re
6860: 76 69 73 69 6f 6e 20 5b 24 72 6e 65 78 74 20 72 vision [$rnext r
6870: 65 76 6e 72 5d 22 0a 09 09 72 65 74 75 72 6e 0a evnr]"...return.
6880: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73 65 74 . }... set
6890: 20 72 65 76 20 5b 24 6d 79 62 72 61 6e 63 68 65 rev [$mybranche
68a0: 73 28 24 6d 79 70 72 69 6e 63 69 70 61 6c 29 20 s($myprincipal)
68b0: 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 65 74 20 child].. set
68c0: 72 65 73 20 7b 7d 0a 0a 09 20 20 20 20 77 68 69 res {}... whi
68d0: 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 le {$rev ne ""}
68e0: 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72 65 73 20 {...lappend res
68f0: 24 72 65 76 0a 09 09 73 65 74 20 72 65 76 20 5b $rev...set rev [
6900: 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 20 20 20 $rev child]..
6910: 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20 }... return
6920: 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 69 66 20 $res...} elseif
6930: 7b 24 6d 79 69 6d 70 6f 72 74 65 64 7d 20 7b 0a {$myimported} {.
6940: 09 20 20 20 20 23 20 4e 6f 20 64 65 66 61 75 6c . # No defaul
6950: 74 20 62 72 61 6e 63 68 2c 20 62 75 74 20 74 68 t branch, but th
6960: 65 20 66 69 6c 65 20 61 70 70 65 61 72 73 20 74 e file appears t
6970: 6f 20 68 61 76 65 20 62 65 65 6e 0a 09 20 20 20 o have been..
6980: 20 23 20 69 6d 70 6f 72 74 65 64 2e 20 20 53 6f # imported. So
6990: 20 6f 75 72 20 65 64 75 63 61 74 65 64 20 67 75 our educated gu
69a0: 65 73 73 20 69 73 20 74 68 61 74 20 61 6c 6c 20 ess is that all
69b0: 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 20 23 revisions.. #
69c0: 20 6f 6e 20 74 68 65 20 27 31 2e 31 2e 31 27 20 on the '1.1.1'
69d0: 62 72 61 6e 63 68 20 77 69 74 68 20 74 69 6d 65 branch with time
69e0: 73 74 61 6d 70 73 20 70 72 69 6f 72 20 74 6f 20 stamps prior to
69f0: 74 68 65 0a 09 20 20 20 20 23 20 74 69 6d 65 73 the.. # times
6a00: 74 61 6d 70 20 6f 66 20 27 31 2e 32 27 20 77 65 tamp of '1.2' we
6a10: 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 re non-trunk def
6a20: 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 20 20 20 ault branch..
6a30: 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 # revisions....
6a40: 20 20 20 20 23 20 54 68 69 73 20 72 65 61 6c 6c # This reall
6a50: 79 20 6f 6e 6c 79 20 70 72 6f 63 65 73 73 65 73 y only processes
6a60: 20 73 74 61 6e 64 61 72 64 20 27 31 2e 31 2e 31 standard '1.1.1
6a70: 2e 2a 27 2d 73 74 79 6c 65 0a 09 20 20 20 20 23 .*'-style.. #
6a80: 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e vendor revision
6a90: 73 2e 20 20 4f 6e 65 20 63 6f 75 6c 64 20 63 6f s. One could co
6aa0: 6e 63 65 69 76 61 62 6c 79 20 68 61 76 65 20 61 nceivably have a
6ab0: 20 66 69 6c 65 0a 09 20 20 20 20 23 20 77 68 6f file.. # who
6ac0: 73 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 se default branc
6ad0: 68 20 69 73 20 31 2e 31 2e 33 20 6f 72 20 77 68 h is 1.1.3 or wh
6ae0: 61 74 65 76 65 72 2c 20 6f 72 20 77 61 73 20 74 atever, or was t
6af0: 68 61 74 0a 09 20 20 20 20 23 20 61 74 20 73 6f hat.. # at so
6b00: 6d 65 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 me point in time
6b10: 2c 20 77 69 74 68 20 76 65 6e 64 6f 72 20 72 65 , with vendor re
6b20: 76 69 73 69 6f 6e 73 20 31 2e 31 2e 33 2e 31 2c visions 1.1.3.1,
6b30: 0a 09 20 20 20 20 23 20 31 2e 31 2e 33 2e 32 2c .. # 1.1.3.2,
6b40: 20 65 74 63 2e 20 20 42 75 74 20 77 69 74 68 20 etc. But with
6b50: 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e the default bran
6b60: 63 68 20 67 6f 6e 65 20 6e 6f 77 2c 0a 09 20 20 ch gone now,..
6b70: 20 20 23 20 77 65 27 64 20 68 61 76 65 20 6e 6f # we'd have no
6b80: 20 62 61 73 69 73 20 66 6f 72 20 61 73 73 75 6d basis for assum
6b90: 69 6e 67 20 74 68 61 74 20 74 68 65 20 6e 6f 6e ing that the non
6ba0: 2d 73 74 61 6e 64 61 72 64 0a 09 20 20 20 20 23 -standard.. #
6bb0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 68 vendor branch h
6bc0: 61 64 20 65 76 65 72 20 62 65 65 6e 20 74 68 65 ad ever been the
6bd0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 default branch
6be0: 61 6e 79 77 61 79 2e 0a 0a 09 20 20 20 20 23 20 anyway.... #
6bf0: 4e 6f 74 65 20 74 68 61 74 20 77 65 20 72 65 6c Note that we rel
6c00: 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73 y on comparisons
6c10: 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 69 6d between the tim
6c20: 65 73 74 61 6d 70 73 0a 09 20 20 20 20 23 20 6f estamps.. # o
6c30: 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 f the revisions
6c40: 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 on the vendor br
6c50: 61 6e 63 68 20 61 6e 64 20 74 68 61 74 20 6f 66 anch and that of
6c60: 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e .. # revision
6c70: 20 31 2e 32 2c 20 65 76 65 6e 20 74 68 6f 75 67 1.2, even thoug
6c80: 68 20 74 68 65 20 74 69 6d 65 73 74 61 6d 70 73 h the timestamps
6c90: 20 6d 69 67 68 74 20 62 65 0a 09 20 20 20 20 23 might be.. #
6ca0: 20 69 6e 63 6f 72 72 65 63 74 20 64 75 65 20 74 incorrect due t
6cb0: 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e 20 20 57 o clock skew. W
6cc0: 65 20 63 6f 75 6c 64 20 64 6f 20 61 20 73 6c 69 e could do a sli
6cd0: 67 68 74 6c 79 0a 09 20 20 20 20 23 20 62 65 74 ghtly.. # bet
6ce0: 74 65 72 20 6a 6f 62 20 69 66 20 77 65 20 75 73 ter job if we us
6cf0: 65 64 20 74 68 65 20 63 68 61 6e 67 65 73 65 74 ed the changeset
6d00: 20 74 69 6d 65 73 74 61 6d 70 73 2c 20 61 73 20 timestamps, as
6d10: 69 74 20 69 73 0a 09 20 20 20 20 23 20 70 6f 73 it is.. # pos
6d20: 73 69 62 6c 65 20 74 68 61 74 20 74 68 65 20 64 sible that the d
6d30: 65 70 65 6e 64 65 6e 63 69 65 73 20 74 68 61 74 ependencies that
6d40: 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20 20 20 20 went into..
6d50: 23 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 74 68 # determining th
6d60: 6f 73 65 20 74 69 6d 65 73 74 61 6d 70 73 20 61 ose timestamps a
6d70: 72 65 20 6d 6f 72 65 20 61 63 63 75 72 61 74 65 re more accurate
6d80: 2e 20 20 42 75 74 0a 09 20 20 20 20 23 20 74 68 . But.. # th
6d90: 61 74 20 77 6f 75 6c 64 20 72 65 71 75 69 72 65 at would require
6da0: 20 61 6e 20 65 78 74 72 61 20 70 61 73 73 20 6f an extra pass o
6db0: 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20 69 66 20 r two.... if
6dc0: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d {![info exists m
6dd0: 79 62 72 61 6e 63 68 65 73 28 31 2e 31 2e 31 29 ybranches(1.1.1)
6de0: 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b 7d 20 7d ]} { return {} }
6df0: 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 ... log write
6e00: 20 35 20 66 69 6c 65 20 22 44 65 64 75 63 65 64 5 file "Deduced
6e10: 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 4e 54 existence of NT
6e20: 44 42 22 0a 0a 09 20 20 20 20 73 65 74 20 72 65 DB"... set re
6e30: 76 20 20 5b 24 6d 79 62 72 61 6e 63 68 65 73 28 v [$mybranches(
6e40: 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d 0a 09 20 1.1.1) child]..
6e50: 20 20 20 73 65 74 20 72 65 73 20 20 7b 7d 0a 09 set res {}..
6e60: 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 24 6d set stop [$m
6e70: 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 0a 09 20 yroot child]...
6e80: 20 20 20 69 66 20 7b 24 73 74 6f 70 20 65 71 20 if {$stop eq
6e90: 22 22 7d 20 7b 0a 09 09 23 20 47 65 74 20 65 76 ""} {...# Get ev
6ea0: 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 65 20 erything on the
6eb0: 62 72 61 6e 63 68 0a 09 09 77 68 69 6c 65 20 7b branch...while {
6ec0: 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 $rev ne ""} {...
6ed0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 lappend res
6ee0: 24 72 65 76 0a 09 09 20 20 20 20 73 65 74 20 72 $rev... set r
6ef0: 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a ev [$rev child].
6f00: 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 ..}.. } else
6f10: 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74 20 65 76 {...# Collect ev
6f20: 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 65 20 erything on the
6f30: 62 72 61 6e 63 68 20 77 68 69 63 68 20 73 65 65 branch which see
6f40: 6d 73 20 74 6f 20 68 61 76 65 0a 09 09 23 20 62 ms to have...# b
6f50: 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64 20 62 65 een committed be
6f60: 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 70 fore the first p
6f70: 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 20 rimary child of
6f80: 74 68 65 0a 09 09 23 20 72 6f 6f 74 20 72 65 76 the...# root rev
6f90: 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20 73 74 6f ision....set sto
6fa0: 70 64 61 74 65 20 5b 24 73 74 6f 70 20 64 61 74 pdate [$stop dat
6fb0: 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 76 e]...while {$rev
6fc0: 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 ne ""} {...
6fd0: 69 66 20 7b 5b 24 72 65 76 20 64 61 74 65 5d 20 if {[$rev date]
6fe0: 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d 20 62 72 >= $stopdate} br
6ff0: 65 61 6b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e eak... lappen
7000: 64 20 72 65 73 20 24 72 65 76 0a 09 09 20 20 20 d res $rev...
7010: 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 set rev [$rev c
7020: 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d hild]...}.. }
7030: 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20 24 72 ... return $r
7040: 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 es...} else {..
7050: 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a 09 7d 0a return {}..}.
7060: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 47 65 6e }.. # Gen
7070: 65 72 61 6c 20 6e 6f 74 65 3a 20 49 6e 20 74 68 eral note: In th
7080: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 65 74 68 e following meth
7090: 6f 64 73 20 77 65 20 6f 6e 6c 79 20 6d 6f 64 69 ods we only modi
70a0: 66 79 20 74 68 65 20 6c 69 6e 6b 73 0a 20 20 20 fy the links.
70b0: 20 23 20 62 65 74 77 65 65 6e 20 72 65 76 69 73 # between revis
70c0: 69 6f 6e 73 20 61 6e 64 20 73 79 6d 62 6f 6c 73 ions and symbols
70d0: 20 74 6f 20 72 65 73 74 72 75 63 74 75 72 65 20 to restructure
70e0: 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 20 20 20 the revision.
70f0: 20 23 20 74 72 65 65 2e 20 57 65 20 64 6f 20 5f # tree. We do _
7100: 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 6f 79 20 74 _not__ destroy t
7110: 68 65 20 6f 62 6a 65 63 74 73 2e 20 47 69 76 65 he objects. Give
7120: 6e 20 74 68 65 20 63 6f 6d 70 6c 65 78 20 6c 69 n the complex li
7130: 6e 6b 73 0a 20 20 20 20 23 20 47 43 20 69 73 20 nks. # GC is
7140: 64 69 66 66 69 63 75 6c 74 20 61 74 20 74 68 69 difficult at thi
7150: 73 20 6c 65 76 65 6c 2e 20 49 74 20 69 73 20 6d s level. It is m
7160: 75 63 68 20 65 61 73 69 65 72 20 74 6f 20 64 72 uch easier to dr
7170: 6f 70 0a 20 20 20 20 23 20 65 76 65 72 79 74 68 op. # everyth
7180: 69 6e 67 20 77 68 65 6e 20 77 65 20 77 65 20 61 ing when we we a
7190: 72 65 20 64 6f 6e 65 2e 20 54 68 69 73 20 68 61 re done. This ha
71a0: 70 70 65 6e 73 20 69 6e 20 27 64 72 6f 70 27 2c ppens in 'drop',
71b0: 20 75 73 69 6e 67 0a 20 20 20 20 23 20 74 68 65 using. # the
71c0: 20 73 74 61 74 65 20 76 61 72 69 61 62 6c 65 20 state variable
71d0: 27 6d 79 72 65 76 27 2c 20 27 6d 79 62 72 61 6e 'myrev', 'mybran
71e0: 63 68 65 73 27 2c 20 61 6e 64 20 27 6d 79 74 61 ches', and 'myta
71f0: 67 73 27 2e 20 57 68 61 74 20 77 65 0a 20 20 20 gs'. What we.
7200: 20 23 20 68 61 76 65 20 74 6f 20 70 65 72 73 69 # have to persi
7210: 73 74 2c 20 70 65 72 66 6f 72 6d 65 64 20 62 79 st, performed by
7220: 20 27 70 65 72 73 69 73 74 27 2c 20 77 65 20 6b 'persist', we k
7230: 6e 6f 77 20 77 69 6c 6c 20 62 65 0a 20 20 20 20 now will be.
7240: 23 20 72 65 61 63 68 61 62 6c 65 20 74 68 72 6f # reachable thro
7250: 75 67 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e ugh the revision
7260: 73 20 6c 69 73 74 65 64 20 69 6e 20 27 6d 79 72 s listed in 'myr
7270: 6f 6f 74 73 27 20 61 6e 64 20 74 68 65 69 72 0a oots' and their.
7280: 20 20 20 20 23 20 63 68 69 6c 64 72 65 6e 20 61 # children a
7290: 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a 0a 20 20 20 nd symbols...
72a0: 20 6d 65 74 68 6f 64 20 41 64 6a 75 73 74 4e 6f method AdjustNo
72b0: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 nTrunkDefaultBra
72c0: 6e 63 68 20 7b 72 65 76 6c 69 73 74 7d 20 7b 0a nch {revlist} {.
72d0: 09 73 65 74 20 73 74 6f 70 20 5b 24 6d 79 72 6f .set stop [$myro
72e0: 6f 74 20 63 68 69 6c 64 5d 20 3b 23 20 72 65 76 ot child] ;# rev
72f0: 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 20 77 72 69 '1.2'...log wri
7300: 74 65 20 35 20 66 69 6c 65 20 22 41 64 6a 75 73 te 5 file "Adjus
7310: 74 69 6e 67 20 4e 54 44 42 20 63 6f 6e 74 61 69 ting NTDB contai
7320: 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c 65 6e 67 ning [nsp [lleng
7330: 74 68 20 24 72 65 76 6c 69 73 74 5d 20 72 65 76 th $revlist] rev
7340: 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 46 72 6f 6d ision]"...# From
7350: 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f 6c cvs2svn the fol
7360: 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 69 lowing explanati
7370: 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69 63 on (with modific
7380: 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75 ations..# for ou
7390: 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 r algorithm):...
73a0: 23 20 41 64 6a 75 73 74 20 74 68 65 20 6e 6f 6e # Adjust the non
73b0: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 -trunk default b
73c0: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 20 ranch revisions
73d0: 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 09 23 20 found in the..#
73e0: 27 72 65 76 6c 69 73 74 27 2e 0a 0a 09 23 20 27 'revlist'....# '
73f0: 6d 79 69 6d 70 6f 72 74 65 64 27 20 69 73 20 61 myimported' is a
7400: 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 20 69 6e boolean flag in
7410: 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72 dicating whether
7420: 20 74 68 69 73 20 66 69 6c 65 0a 09 23 20 61 70 this file..# ap
7430: 70 65 61 72 73 20 74 6f 20 68 61 76 65 20 62 65 pears to have be
7440: 65 6e 20 69 6d 70 6f 72 74 65 64 2c 20 77 68 69 en imported, whi
7450: 63 68 20 61 6c 73 6f 20 6d 65 61 6e 73 20 74 68 ch also means th
7460: 61 74 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 31 at..# revision 1
7470: 2e 31 20 68 61 73 20 61 20 67 65 6e 65 72 61 74 .1 has a generat
7480: 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 74 ed log message t
7490: 68 61 74 20 6e 65 65 64 20 6e 6f 74 20 62 65 0a hat need not be.
74a0: 09 23 20 70 72 65 73 65 72 76 65 64 2e 20 20 27 .# preserved. '
74b0: 72 65 76 6c 69 73 74 27 20 69 73 20 61 20 6c 69 revlist' is a li
74c0: 73 74 20 6f 66 20 6f 62 6a 65 63 74 20 72 65 66 st of object ref
74d0: 65 72 65 6e 63 65 73 20 66 6f 72 20 74 68 65 0a erences for the.
74e0: 09 23 20 72 65 76 69 73 69 6f 6e 73 20 74 68 61 .# revisions tha
74f0: 74 20 68 61 76 65 20 62 65 65 6e 20 64 65 74 65 t have been dete
7500: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 6e 6f 6e rmined to be non
7510: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 0a 09 -trunk default..
7520: 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f # branch revisio
7530: 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 74 68 61 ns....# Note tha
7540: 74 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69 t the first revi
7550: 73 69 6f 6e 20 6f 6e 20 74 68 65 20 64 65 66 61 sion on the defa
7560: 75 6c 74 20 62 72 61 6e 63 68 20 69 73 0a 09 23 ult branch is..#
7570: 20 68 61 6e 64 6c 65 64 20 73 74 72 61 6e 67 65 handled strange
7580: 6c 79 20 62 79 20 43 56 53 2e 20 20 49 66 20 61 ly by CVS. If a
7590: 20 66 69 6c 65 20 69 73 20 69 6d 70 6f 72 74 65 file is importe
75a0: 64 20 28 61 73 20 6f 70 70 6f 73 65 64 0a 09 23 d (as opposed..#
75b0: 20 74 6f 20 62 65 69 6e 67 20 61 64 64 65 64 29 to being added)
75c0: 2c 20 43 56 53 20 63 72 65 61 74 65 73 20 61 20 , CVS creates a
75d0: 31 2e 31 20 72 65 76 69 73 69 6f 6e 2c 20 74 68 1.1 revision, th
75e0: 65 6e 20 63 72 65 61 74 65 73 20 61 0a 09 23 20 en creates a..#
75f0: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 31 2e vendor branch 1.
7600: 31 2e 31 20 62 61 73 65 64 20 6f 6e 20 31 2e 31 1.1 based on 1.1
7610: 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 61 , then creates a
7620: 20 31 2e 31 2e 31 2e 31 0a 09 23 20 72 65 76 69 1.1.1.1..# revi
7630: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 69 64 65 sion that is ide
7640: 6e 74 69 63 61 6c 20 74 6f 20 74 68 65 20 31 2e ntical to the 1.
7650: 31 20 72 65 76 69 73 69 6f 6e 20 28 69 2e 65 2e 1 revision (i.e.
7660: 2c 20 69 74 73 0a 09 23 20 64 65 6c 74 61 74 65 , its..# deltate
7670: 78 74 20 69 73 20 65 6d 70 74 79 29 2e 20 20 54 xt is empty). T
7680: 68 65 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 74 he log message t
7690: 68 61 74 20 74 68 65 20 75 73 65 72 20 74 79 70 hat the user typ
76a0: 65 64 0a 09 23 20 77 68 65 6e 20 69 6d 70 6f 72 ed..# when impor
76b0: 74 69 6e 67 20 69 73 20 73 74 6f 72 65 64 20 77 ting is stored w
76c0: 69 74 68 20 74 68 65 20 31 2e 31 2e 31 2e 31 20 ith the 1.1.1.1
76d0: 72 65 76 69 73 69 6f 6e 2e 20 20 54 68 65 20 31 revision. The 1
76e0: 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 61 .1..# revision a
76f0: 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 73 20 61 lways contains a
7700: 20 73 74 61 6e 64 61 72 64 2c 20 67 65 6e 65 72 standard, gener
7710: 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 65 ated log message
7720: 2c 0a 09 23 20 27 49 6e 69 74 69 61 6c 20 72 65 ,..# 'Initial re
7730: 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a 09 23 20 57 vision\n'....# W
7740: 68 65 6e 20 77 65 20 64 65 74 65 63 74 20 61 20 hen we detect a
7750: 73 74 72 61 69 67 68 74 66 6f 72 77 61 72 64 20 straightforward
7760: 69 6d 70 6f 72 74 20 6c 69 6b 65 20 74 68 69 73 import like this
7770: 2c 20 77 65 20 77 61 6e 74 0a 09 23 20 74 6f 20 , we want..# to
7780: 68 61 6e 64 6c 65 20 69 74 20 62 79 20 64 65 6c handle it by del
7790: 65 74 69 6e 67 20 74 68 65 20 31 2e 31 20 72 65 eting the 1.1 re
77a0: 76 69 73 69 6f 6e 20 28 77 68 69 63 68 20 64 6f vision (which do
77b0: 65 73 6e 27 74 0a 09 23 20 63 6f 6e 74 61 69 6e esn't..# contain
77c0: 20 61 6e 79 20 75 73 65 66 75 6c 20 69 6e 66 6f any useful info
77d0: 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20 6d 61 6b rmation) and mak
77e0: 69 6e 67 20 31 2e 31 2e 31 2e 31 20 69 6e 74 6f ing 1.1.1.1 into
77f0: 20 61 6e 0a 09 23 20 69 6e 64 65 70 65 6e 64 65 an..# independe
7800: 6e 74 20 72 6f 6f 74 20 69 6e 20 74 68 65 20 66 nt root in the f
7810: 69 6c 65 27 73 20 64 65 70 65 6e 64 65 6e 63 79 ile's dependency
7820: 20 74 72 65 65 2e 20 20 49 6e 20 53 56 4e 2c 0a tree. In SVN,.
7830: 09 23 20 31 2e 31 2e 31 2e 31 20 77 69 6c 6c 20 .# 1.1.1.1 will
7840: 62 65 20 61 64 64 65 64 20 64 69 72 65 63 74 6c be added directl
7850: 79 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 20 y to the vendor
7860: 62 72 61 6e 63 68 20 77 69 74 68 20 69 74 73 0a branch with its.
7870: 09 23 20 69 6e 69 74 69 61 6c 20 63 6f 6e 74 65 .# initial conte
7880: 6e 74 2e 20 20 54 68 65 6e 20 69 6e 20 61 20 73 nt. Then in a s
7890: 70 65 63 69 61 6c 20 27 70 6f 73 74 2d 63 6f 6d pecial 'post-com
78a0: 6d 69 74 27 2c 20 74 68 65 0a 09 23 20 31 2e 31 mit', the..# 1.1
78b0: 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 69 73 .1.1 revision is
78c0: 20 63 6f 70 69 65 64 20 62 61 63 6b 20 74 6f 20 copied back to
78d0: 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 66 20 74 68 trunk....# If th
78e0: 65 20 75 73 65 72 20 69 6d 70 6f 72 74 73 20 61 e user imports a
78f0: 67 61 69 6e 20 74 6f 20 74 68 65 20 73 61 6d 65 gain to the same
7900: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20 vendor branch,
7910: 74 68 65 6e 20 43 56 53 0a 09 23 20 63 72 65 61 then CVS..# crea
7920: 74 65 73 20 72 65 76 69 73 69 6f 6e 73 20 31 2e tes revisions 1.
7930: 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 2e 33 2c 20 1.1.2, 1.1.1.3,
7940: 65 74 63 2e 20 6f 6e 20 74 68 65 20 76 65 6e 64 etc. on the vend
7950: 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23 20 2a 77 or branch,..# *w
7960: 69 74 68 6f 75 74 2a 20 63 6f 75 6e 74 65 72 70 ithout* counterp
7970: 61 72 74 73 20 69 6e 20 74 72 75 6e 6b 20 28 65 arts in trunk (e
7980: 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73 65 ven though these
7990: 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20 65 66 revisions..# ef
79a0: 66 65 63 74 69 76 65 6c 79 20 70 6c 61 79 20 74 fectively play t
79b0: 68 65 20 72 6f 6c 65 20 6f 66 20 74 72 75 6e 6b he role of trunk
79c0: 20 72 65 76 69 73 69 6f 6e 73 29 2e 20 20 53 6f revisions). So
79d0: 20 61 66 74 65 72 20 77 65 20 61 64 64 0a 09 23 after we add..#
79e0: 20 73 75 63 68 20 72 65 76 69 73 69 6f 6e 73 20 such revisions
79f0: 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 to the vendor br
7a00: 61 6e 63 68 2c 20 77 65 20 61 6c 73 6f 20 63 6f anch, we also co
7a10: 70 79 20 74 68 65 6d 20 62 61 63 6b 20 74 6f 0a py them back to.
7a20: 09 23 20 74 72 75 6e 6b 20 69 6e 20 70 6f 73 74 .# trunk in post
7a30: 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 23 20 57 65 -commits....# We
7a40: 20 6d 61 72 6b 20 74 68 65 20 72 65 76 69 73 69 mark the revisi
7a50: 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 27 72 65 ons found in 're
7a60: 76 6c 69 73 74 27 20 61 73 20 64 65 66 61 75 6c vlist' as defaul
7a70: 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 76 69 t branch..# revi
7a80: 73 69 6f 6e 73 2e 20 20 41 6c 73 6f 2c 20 69 66 sions. Also, if
7a90: 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69 the root revisi
7aa0: 6f 6e 20 68 61 73 20 61 20 70 72 69 6d 61 72 79 on has a primary
7ab0: 20 63 68 69 6c 64 0a 09 23 20 77 65 20 73 65 74 child..# we set
7ac0: 20 74 68 61 74 20 72 65 76 69 73 69 6f 6e 20 74 that revision t
7ad0: 6f 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65 20 o depend on the
7ae0: 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 last non-trunk d
7af0: 65 66 61 75 6c 74 0a 09 23 20 62 72 61 6e 63 68 efault..# branch
7b00: 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 70 6f revision and po
7b10: 73 73 69 62 6c 79 20 61 64 6a 75 73 74 20 69 74 ssibly adjust it
7b20: 73 20 74 79 70 65 20 61 63 63 6f 72 64 69 6e 67 s type according
7b30: 6c 79 2e 0a 0a 09 73 65 74 20 66 69 72 73 74 20 ly....set first
7b40: 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c 69 73 74 [lindex $revlist
7b50: 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 0]...log write
7b60: 36 20 66 69 6c 65 20 22 3c 5b 24 66 69 72 73 74 6 file "<[$first
7b70: 20 72 65 76 6e 72 5d 3e 20 5b 65 78 70 72 20 7b revnr]> [expr {
7b80: 24 6d 79 69 6d 70 6f 72 74 65 64 20 3f 20 22 69 $myimported ? "i
7b90: 6d 70 6f 72 74 65 64 22 20 3a 20 22 6e 6f 74 20 mported" : "not
7ba0: 69 6d 70 6f 72 74 65 64 22 7d 5d 2c 20 5b 24 66 imported"}], [$f
7bb0: 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d 2c irst operation],
7bc0: 20 5b 65 78 70 72 20 7b 5b 24 66 69 72 73 74 20 [expr {[$first
7bd0: 68 61 73 74 65 78 74 5d 20 3f 20 22 68 61 73 20 hastext] ? "has
7be0: 74 65 78 74 22 20 3a 20 22 6e 6f 20 74 65 78 74 text" : "no text
7bf0: 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 6d 79 69 6d "}]"...if {$myim
7c00: 70 6f 72 74 65 64 20 26 26 0a 09 20 20 20 20 5b ported &&.. [
7c10: 24 66 69 72 73 74 20 72 65 76 6e 72 5d 20 65 71 $first revnr] eq
7c20: 20 22 31 2e 31 2e 31 2e 31 22 20 26 26 0a 09 20 "1.1.1.1" &&..
7c30: 20 20 20 5b 24 66 69 72 73 74 20 6f 70 65 72 61 [$first opera
7c40: 74 69 6f 6e 5d 20 65 71 20 22 63 68 61 6e 67 65 tion] eq "change
7c50: 22 20 26 26 0a 09 20 20 20 20 21 5b 24 66 69 72 " &&.. ![$fir
7c60: 73 74 20 68 61 73 74 65 78 74 5d 7d 20 7b 0a 0a st hastext]} {..
7c70: 09 20 20 20 20 73 65 74 20 72 65 76 31 31 20 5b . set rev11 [
7c80: 24 66 69 72 73 74 20 70 61 72 65 6e 74 5d 20 3b $first parent] ;
7c90: 20 23 20 41 73 73 65 72 74 3a 20 53 68 6f 75 6c # Assert: Shoul
7ca0: 64 20 62 65 20 6d 79 72 6f 6f 74 2e 0a 09 20 20 d be myroot...
7cb0: 20 20 6c 6f 67 20 77 72 69 74 65 20 33 20 66 69 log write 3 fi
7cc0: 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 69 72 72 le "Removing irr
7cd0: 65 6c 65 76 61 6e 74 20 72 65 76 69 73 69 6f 6e elevant revision
7ce0: 20 5b 24 72 65 76 31 31 20 72 65 76 6e 72 5d 22 [$rev11 revnr]"
7cf0: 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 ... # Cut out
7d00: 20 74 68 65 20 6f 6c 64 20 6d 79 72 6f 6f 74 20 the old myroot
7d10: 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 20 20 20 20 revision....
7d20: 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 ldelete myroots
7d30: 24 72 65 76 31 31 20 3b 20 23 20 4e 6f 74 20 61 $rev11 ; # Not a
7d40: 20 72 6f 6f 74 20 61 6e 79 20 6c 6f 6e 67 65 72 root any longer
7d50: 2e 0a 0a 09 20 20 20 20 24 66 69 72 73 74 20 63 .... $first c
7d60: 75 74 66 72 6f 6d 70 61 72 65 6e 74 20 3b 20 23 utfromparent ; #
7d70: 20 53 65 76 65 72 20 72 65 76 69 73 69 6f 6e 20 Sever revision
7d80: 66 72 6f 6d 20 70 61 72 65 6e 74 20 72 65 76 69 from parent revi
7d90: 73 69 6f 6e 2e 0a 09 20 20 20 20 69 66 20 7b 24 sion... if {$
7da0: 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b 0a 09 09 stop ne ""} {...
7db0: 24 73 74 6f 70 20 63 75 74 66 72 6f 6d 70 61 72 $stop cutfrompar
7dc0: 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 ent...lappend my
7dd0: 72 6f 6f 74 73 20 24 73 74 6f 70 20 3b 20 23 20 roots $stop ; #
7de0: 4e 65 77 20 72 6f 6f 74 2c 20 61 66 74 65 72 20 New root, after
7df0: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 0a 09 20 vendor branch..
7e00: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 75 74 }... # Cut
7e10: 20 6f 75 74 20 74 68 65 20 76 65 6e 64 6f 72 20 out the vendor
7e20: 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 0a 0a 09 branch symbol...
7e30: 20 20 20 20 73 65 74 20 76 65 6e 64 6f 72 20 5b set vendor [
7e40: 24 66 69 72 73 74 20 70 61 72 65 6e 74 62 72 61 $first parentbra
7e50: 6e 63 68 5d 0a 09 20 20 20 20 69 6e 74 65 67 72 nch].. integr
7e60: 69 74 79 20 61 73 73 65 72 74 20 7b 24 76 65 6e ity assert {$ven
7e70: 64 6f 72 20 6e 65 20 22 22 7d 20 7b 46 69 72 73 dor ne ""} {Firs
7e80: 74 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 20 t NTDB revision
7e90: 68 61 73 20 6e 6f 20 62 72 61 6e 63 68 7d 0a 09 has no branch}..
7ea0: 20 20 20 20 69 66 20 7b 5b 24 76 65 6e 64 6f 72 if {[$vendor
7eb0: 20 70 61 72 65 6e 74 5d 20 65 71 20 24 72 65 76 parent] eq $rev
7ec0: 31 31 7d 20 7b 0a 09 09 24 72 65 76 31 31 20 72 11} {...$rev11 r
7ed0: 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 20 20 emovebranch
7ee0: 20 20 20 24 76 65 6e 64 6f 72 0a 09 09 24 72 65 $vendor...$re
7ef0: 76 31 31 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f v11 removechildo
7f00: 6e 62 72 61 6e 63 68 20 24 66 69 72 73 74 0a 09 nbranch $first..
7f10: 09 24 76 65 6e 64 6f 72 20 63 75 74 62 72 61 6e .$vendor cutbran
7f20: 63 68 70 61 72 65 6e 74 20 20 20 20 3b 23 20 62 chparent ;# b
7f30: 70 20 3d 20 72 65 76 31 31 2c 20 61 62 6f 75 74 p = rev11, about
7f40: 20 74 6f 20 62 65 20 67 6f 6e 65 0a 09 09 24 66 to be gone...$f
7f50: 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 irst cutfrompare
7f60: 6e 74 62 72 61 6e 63 68 20 3b 23 20 70 62 20 3d ntbranch ;# pb =
7f70: 20 76 65 6e 64 6f 72 2c 20 74 6f 20 62 65 20 61 vendor, to be a
7f80: 20 64 65 74 61 63 68 65 64 20 4c 4f 44 0a 09 09 detached LOD...
7f90: 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 lappend myroots
7fa0: 24 66 69 72 73 74 0a 09 20 20 20 20 7d 0a 0a 09 $first.. }...
7fb0: 20 20 20 20 23 20 43 68 61 6e 67 65 20 74 68 65 # Change the
7fc0: 20 74 79 70 65 20 6f 66 20 66 69 72 73 74 20 28 type of first (
7fd0: 74 79 70 69 63 61 6c 6c 79 20 66 72 6f 6d 20 43 typically from C
7fe0: 68 61 6e 67 65 20 74 6f 20 41 64 64 29 3a 0a 09 hange to Add):..
7ff0: 20 20 20 20 24 66 69 72 73 74 20 72 65 74 79 70 $first retyp
8000: 65 20 61 64 64 0a 0a 09 20 20 20 20 23 20 4d 6f e add... # Mo
8010: 76 65 20 61 6e 79 20 74 61 67 73 20 61 6e 64 20 ve any tags and
8020: 62 72 61 6e 63 68 65 73 20 66 72 6f 6d 20 74 68 branches from th
8030: 65 20 6f 6c 64 20 74 6f 20 74 68 65 20 6e 65 77 e old to the new
8040: 20 72 6f 6f 74 2e 0a 09 20 20 20 20 24 72 65 76 root... $rev
8050: 31 31 20 6d 6f 76 65 73 79 6d 62 6f 6c 73 74 6f 11 movesymbolsto
8060: 20 24 66 69 72 73 74 0a 09 7d 0a 0a 09 23 20 4d $first..}...# M
8070: 61 72 6b 20 61 6c 6c 20 74 68 65 20 73 70 65 63 ark all the spec
8080: 69 61 6c 20 72 65 76 69 73 69 6f 6e 73 20 61 73 ial revisions as
8090: 20 73 75 63 68 0a 09 66 6f 72 65 61 63 68 20 72 such..foreach r
80a0: 65 76 20 24 72 65 76 6c 69 73 74 20 7b 0a 09 20 ev $revlist {..
80b0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 20 66 log write 3 f
80c0: 69 6c 65 20 22 52 65 76 69 73 69 6f 6e 20 6f 6e ile "Revision on
80d0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 3a default branch:
80e0: 20 5b 24 72 65 76 20 72 65 76 6e 72 5d 22 0a 09 [$rev revnr]"..
80f0: 20 20 20 20 24 72 65 76 20 73 65 74 6f 6e 64 65 $rev setonde
8100: 66 61 75 6c 74 62 72 61 6e 63 68 20 31 0a 09 7d faultbranch 1..}
8110: 0a 0a 09 69 66 20 7b 24 73 74 6f 70 20 6e 65 20 ...if {$stop ne
8120: 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 52 65 76 ""} {.. # Rev
8130: 69 73 69 6f 6e 20 31 2e 32 20 6c 6f 67 69 63 61 ision 1.2 logica
8140: 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 lly follows the
8150: 69 6d 70 6f 72 74 65 64 20 72 65 76 69 73 69 6f imported revisio
8160: 6e 73 2c 0a 09 20 20 20 20 23 20 6e 6f 74 20 31 ns,.. # not 1
8170: 2e 31 2e 20 20 41 63 63 6f 72 64 69 6e 67 6c 79 .1. Accordingly
8180: 2c 20 63 6f 6e 6e 65 63 74 20 69 74 20 74 6f 20 , connect it to
8190: 74 68 65 20 6c 61 73 74 20 4e 54 44 42 52 20 61 the last NTDBR a
81a0: 6e 64 0a 09 20 20 20 20 23 20 70 6f 73 73 69 62 nd.. # possib
81b0: 6c 79 20 63 68 61 6e 67 65 20 69 74 73 20 74 79 ly change its ty
81c0: 70 65 2e 0a 0a 09 20 20 20 20 73 65 74 20 6c 61 pe.... set la
81d0: 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c st [lindex $revl
81e0: 69 73 74 20 65 6e 64 5d 0a 09 20 20 20 20 24 73 ist end].. $s
81f0: 74 6f 70 20 73 65 74 64 65 66 61 75 6c 74 62 72 top setdefaultbr
8200: 61 6e 63 68 70 61 72 65 6e 74 20 24 6c 61 73 74 anchparent $last
8210: 20 3b 20 23 20 52 65 74 79 70 65 73 20 74 68 65 ; # Retypes the
8220: 20 72 65 76 69 73 69 6f 6e 20 74 6f 6f 2e 0a 09 revision too...
8230: 20 20 20 20 24 6c 61 73 74 20 73 65 74 64 65 66 $last setdef
8240: 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 20 aultbranchchild
8250: 20 24 73 74 6f 70 0a 09 7d 0a 09 72 65 74 75 72 $stop..}..retur
8260: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
8270: 68 6f 64 20 43 68 65 63 6b 4c 4f 44 73 20 7b 7d hod CheckLODs {}
8280: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62 {..foreach {_ b
8290: 72 61 6e 63 68 7d 20 20 5b 61 72 72 61 79 20 67 ranch} [array g
82a0: 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b et mybranches] {
82b0: 20 24 62 72 61 6e 63 68 20 63 68 65 63 6b 6c 6f $branch checklo
82c0: 64 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 d }..foreach {_
82d0: 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 taglist} [array
82e0: 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 get mytags] {..
82f0: 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 24 foreach tag $
8300: 74 61 67 6c 69 73 74 20 7b 20 24 74 61 67 20 63 taglist { $tag c
8310: 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d 0a 09 72 65 hecklod }..}..re
8320: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
8330: 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 72 72 method RemoveIrr
8340: 65 6c 65 76 61 6e 74 44 65 6c 65 74 69 6f 6e 73 elevantDeletions
8350: 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76 {} {..# From cv
8360: 73 32 73 76 6e 3a 20 49 66 20 61 20 66 69 6c 65 s2svn: If a file
8370: 20 69 73 20 61 64 64 65 64 20 6f 6e 20 61 20 62 is added on a b
8380: 72 61 6e 63 68 2c 20 74 68 65 6e 20 61 20 74 72 ranch, then a tr
8390: 75 6e 6b 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 unk..# revision
83a0: 69 73 20 61 64 64 65 64 20 61 74 20 74 68 65 20 is added at the
83b0: 73 61 6d 65 20 74 69 6d 65 20 69 6e 20 74 68 65 same time in the
83c0: 20 27 44 65 61 64 27 20 73 74 61 74 65 2e 0a 09 'Dead' state...
83d0: 23 20 54 68 69 73 20 72 65 76 69 73 69 6f 6e 20 # This revision
83e0: 64 6f 65 73 6e 27 74 20 64 6f 20 61 6e 79 74 68 doesn't do anyth
83f0: 69 6e 67 20 75 73 65 66 75 6c 2c 20 73 6f 20 64 ing useful, so d
8400: 65 6c 65 74 65 20 69 74 2e 0a 0a 09 66 6f 72 65 elete it....fore
8410: 61 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 ach root $myroot
8420: 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 s {.. if {[$r
8430: 6f 6f 74 20 69 73 6e 65 65 64 65 64 5d 7d 20 63 oot isneeded]} c
8440: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67 ontinue.. log
8450: 20 77 72 69 74 65 20 32 20 66 69 6c 65 20 22 52 write 2 file "R
8460: 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 63 65 73 73 emoving unnecess
8470: 61 72 79 20 64 65 61 64 20 72 65 76 69 73 69 6f ary dead revisio
8480: 6e 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22 n [$root revnr]"
8490: 0a 0a 09 20 20 20 20 23 20 52 65 6d 6f 76 65 20 ... # Remove
84a0: 61 73 20 72 6f 6f 74 2c 20 6d 61 6b 65 20 69 74 as root, make it
84b0: 73 20 63 68 69 6c 64 20 6e 65 77 20 72 6f 6f 74 s child new root
84c0: 20 61 66 74 65 72 0a 09 20 20 20 20 23 20 64 69 after.. # di
84d0: 73 63 6f 6e 6e 65 63 74 69 6e 67 20 69 74 20 66 sconnecting it f
84e0: 72 6f 6d 20 74 68 65 20 72 65 76 69 73 69 6f 6e rom the revision
84f0: 20 6a 75 73 74 20 67 6f 69 6e 67 20 61 77 61 79 just going away
8500: 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 20 .... ldelete
8510: 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 myroots $root..
8520: 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 if {[$root ha
8530: 73 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 schild]} {...set
8540: 20 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20 63 68 child [$root ch
8550: 69 6c 64 5d 0a 09 09 24 63 68 69 6c 64 20 63 75 ild]...$child cu
8560: 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 tfromparent...la
8570: 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 63 ppend myroots $c
8580: 68 69 6c 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20 hild.. }...
8590: 20 20 23 20 43 75 74 20 6f 75 74 20 74 68 65 20 # Cut out the
85a0: 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 branches spawned
85b0: 20 62 79 20 74 68 65 20 72 65 76 69 73 69 6f 6e by the revision
85c0: 20 74 6f 20 62 65 0a 09 20 20 20 20 23 20 64 65 to be.. # de
85d0: 6c 65 74 65 64 2e 20 49 66 20 74 68 65 20 62 72 leted. If the br
85e0: 61 6e 63 68 20 68 61 73 20 72 65 76 69 73 69 6f anch has revisio
85f0: 6e 73 20 74 68 65 79 20 73 68 6f 75 6c 64 20 61 ns they should a
8600: 6c 72 65 61 64 79 0a 09 20 20 20 20 23 20 75 73 lready.. # us
8610: 65 20 6f 70 65 72 61 74 69 6f 6e 20 27 61 64 64 e operation 'add
8620: 27 2c 20 6e 6f 20 6e 65 65 64 20 74 6f 20 63 68 ', no need to ch
8630: 61 6e 67 65 20 74 68 61 74 2e 20 54 68 65 20 66 ange that. The f
8640: 69 72 73 74 0a 09 20 20 20 20 23 20 72 65 76 69 irst.. # revi
8650: 73 69 6f 6e 20 6f 6e 20 65 61 63 68 20 62 72 61 sion on each bra
8660: 6e 63 68 20 62 65 63 6f 6d 65 73 20 61 20 6e 65 nch becomes a ne
8670: 77 20 61 6e 64 20 64 69 73 63 6f 6e 6e 65 63 74 w and disconnect
8680: 65 64 0a 09 20 20 20 20 23 20 72 6f 6f 74 2e 0a ed.. # root..
8690: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 62 72 .. foreach br
86a0: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e anch [$root bran
86b0: 63 68 65 73 5d 20 7b 0a 09 09 24 62 72 61 6e 63 ches] {...$branc
86c0: 68 20 63 75 74 62 72 61 6e 63 68 70 61 72 65 6e h cutbranchparen
86d0: 74 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63 t...if {![$branc
86e0: 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e h haschild]} con
86f0: 74 69 6e 75 65 0a 09 09 73 65 74 20 66 69 72 73 tinue...set firs
8700: 74 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 t [$branch child
8710: 5d 0a 09 09 24 66 69 72 73 74 20 63 75 74 66 72 ]...$first cutfr
8720: 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 omparent...lappe
8730: 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 nd myroots $firs
8740: 74 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 24 72 t.. }.. $r
8750: 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 oot removeallbra
8760: 6e 63 68 65 73 0a 0a 09 20 20 20 20 23 20 54 61 nches... # Ta
8770: 67 67 69 6e 67 20 61 20 64 65 61 64 20 72 65 76 gging a dead rev
8780: 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f ision doesn't do
8790: 20 61 6e 79 74 68 69 6e 67 2c 20 73 6f 20 72 65 anything, so re
87a0: 6d 6f 76 65 0a 09 20 20 20 20 23 20 61 6e 79 20 move.. # any
87b0: 74 61 67 73 20 74 68 61 74 20 77 65 72 65 20 73 tags that were s
87c0: 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 20 20 20 20 et on it....
87d0: 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74 $root removeallt
87e0: 61 67 73 0a 0a 09 20 20 20 20 23 20 54 68 69 73 ags... # This
87f0: 20 63 61 6e 20 6f 6e 6c 79 20 68 61 70 70 65 6e can only happen
8800: 20 6f 6e 63 65 20 70 65 72 20 66 69 6c 65 2c 20 once per file,
8810: 61 6e 64 20 77 65 20 6d 69 67 68 74 20 68 61 76 and we might hav
8820: 65 0a 09 20 20 20 20 23 20 6a 75 73 74 20 63 68 e.. # just ch
8830: 61 6e 67 65 64 20 6d 79 72 6f 6f 74 73 2c 20 73 anged myroots, s
8840: 6f 20 65 6e 64 20 74 68 65 20 6c 6f 6f 70 0a 09 o end the loop..
8850: 20 20 20 20 62 72 65 61 6b 0a 09 7d 0a 09 72 65 break..}..re
8860: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
8870: 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 6e 69 method RemoveIni
8880: 74 69 61 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 tialBranchDeleti
8890: 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d ons {} {..# From
88a0: 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74 68 65 cvs2svn: If the
88b0: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 first revision
88c0: 6f 6e 20 61 20 62 72 61 6e 63 68 20 69 73 20 61 on a branch is a
88d0: 6e 0a 09 23 20 75 6e 6e 65 63 65 73 73 61 72 79 n..# unnecessary
88e0: 20 64 65 6c 65 74 65 2c 20 72 65 6d 6f 76 65 20 delete, remove
88f0: 69 74 2e 0a 09 23 0a 09 23 20 49 66 20 61 20 66 it...#..# If a f
8900: 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e 20 ile is added on
8910: 61 20 62 72 61 6e 63 68 20 28 77 68 65 74 68 65 a branch (whethe
8920: 72 20 6f 72 20 6e 6f 74 20 69 74 20 61 6c 72 65 r or not it alre
8930: 61 64 79 0a 09 23 20 65 78 69 73 74 65 64 20 6f ady..# existed o
8940: 6e 20 74 72 75 6e 6b 29 2c 20 74 68 65 6e 20 6e n trunk), then n
8950: 65 77 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 43 ew versions of C
8960: 56 53 20 61 64 64 20 61 20 66 69 72 73 74 0a 09 VS add a first..
8970: 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f # branch revisio
8980: 6e 20 69 6e 20 74 68 65 20 27 64 65 61 64 27 20 n in the 'dead'
8990: 73 74 61 74 65 20 28 74 6f 20 69 6e 64 69 63 61 state (to indica
89a0: 74 65 20 74 68 61 74 20 74 68 65 0a 09 23 20 66 te that the..# f
89b0: 69 6c 65 20 64 69 64 20 6e 6f 74 20 65 78 69 73 ile did not exis
89c0: 74 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20 t on the branch
89d0: 77 68 65 6e 20 74 68 65 20 62 72 61 6e 63 68 20 when the branch
89e0: 77 61 73 0a 09 23 20 63 72 65 61 74 65 64 29 20 was..# created)
89f0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 followed by the
8a00: 73 65 63 6f 6e 64 20 62 72 61 6e 63 68 20 72 65 second branch re
8a10: 76 69 73 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 vision, which is
8a20: 20 61 6e 0a 09 23 20 61 64 64 2e 20 20 57 68 65 an..# add. Whe
8a30: 6e 20 77 65 20 65 6e 63 6f 75 6e 74 65 72 20 74 n we encounter t
8a40: 68 69 73 20 73 69 74 75 61 74 69 6f 6e 2c 20 77 his situation, w
8a50: 65 20 73 65 76 65 72 20 74 68 65 20 62 72 61 6e e sever the bran
8a60: 63 68 0a 09 23 20 66 72 6f 6d 20 74 72 75 6e 6b ch..# from trunk
8a70: 20 61 6e 64 20 64 65 6c 65 74 65 20 74 68 65 20 and delete the
8a80: 66 69 72 73 74 20 62 72 61 6e 63 68 20 72 65 76 first branch rev
8a90: 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 74 20 74 68 ision....# At th
8aa0: 69 73 20 70 6f 69 6e 74 20 77 65 20 6d 61 79 20 is point we may
8ab0: 68 61 76 65 20 61 6c 72 65 61 64 79 20 6d 75 6c have already mul
8ac0: 74 69 70 6c 65 20 72 6f 6f 74 73 20 69 6e 20 6d tiple roots in m
8ad0: 79 72 6f 6f 74 73 2c 0a 09 23 20 77 65 20 68 61 yroots,..# we ha
8ae0: 76 65 20 74 6f 20 70 72 6f 63 65 73 73 20 74 68 ve to process th
8af0: 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72 65 61 63 em all....foreac
8b00: 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 h root [$self Li
8b10: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 nesOfDevelopment
8b20: 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 ] {.. if {[$r
8b30: 6f 6f 74 20 69 73 6e 65 65 64 65 64 62 72 61 6e oot isneededbran
8b40: 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e 75 65 chdel]} continue
8b50: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
8b60: 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 2 file "Removing
8b70: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 6e 69 unnecessary ini
8b80: 74 69 61 6c 20 62 72 61 6e 63 68 20 64 65 6c 65 tial branch dele
8b90: 74 65 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d te [$root revnr]
8ba0: 22 0a 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e "... set bran
8bb0: 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 ch [$root parent
8bc0: 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 73 65 74 branch].. set
8bd0: 20 70 61 72 65 6e 74 20 5b 24 72 6f 6f 74 20 70 parent [$root p
8be0: 61 72 65 6e 74 5d 0a 09 20 20 20 20 73 65 74 20 arent].. set
8bf0: 63 68 69 6c 64 20 20 5b 24 72 6f 6f 74 20 63 68 child [$root ch
8c00: 69 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 65 6c 65 ild]... ldele
8c10: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 te myroots $root
8c20: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 .. lappend my
8c30: 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 0a 09 20 roots $child...
8c40: 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 62 72 $branch cutbr
8c50: 61 6e 63 68 70 61 72 65 6e 74 0a 09 20 20 20 20 anchparent..
8c60: 24 62 72 61 6e 63 68 20 63 75 74 63 68 69 6c 64 $branch cutchild
8c70: 0a 09 20 20 20 20 24 63 68 69 6c 64 20 20 63 75 .. $child cu
8c80: 74 66 72 6f 6d 70 61 72 65 6e 74 0a 0a 09 20 20 tfromparent...
8c90: 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 $branch setchi
8ca0: 6c 64 20 20 20 20 20 20 20 20 24 63 68 69 6c 64 ld $child
8cb0: 0a 09 20 20 20 20 24 63 68 69 6c 64 20 20 73 65 .. $child se
8cc0: 74 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 tparentbranch $b
8cd0: 72 61 6e 63 68 0a 0a 09 20 20 20 20 24 70 61 72 ranch... $par
8ce0: 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 ent removebranch
8cf0: 20 20 20 20 20 20 20 20 24 62 72 61 6e 63 68 0a $branch.
8d00: 09 20 20 20 20 24 70 61 72 65 6e 74 20 72 65 6d . $parent rem
8d10: 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 ovechildonbranch
8d20: 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 $root..}..retur
8d30: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
8d40: 68 6f 64 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c hod LinesOfDevel
8d50: 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 44 opment {} {..# D
8d60: 65 74 65 72 6d 69 6e 65 20 61 6c 6c 20 6c 69 6e etermine all lin
8d70: 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e es of developmen
8d80: 74 20 66 6f 72 20 74 68 65 20 66 69 6c 65 2e 20 t for the file.
8d90: 54 68 69 73 20 61 72 65 0a 09 23 20 74 68 65 20 This are..# the
8da0: 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c 20 61 6e 64 known roots, and
8db0: 20 74 68 65 20 72 6f 6f 74 20 6f 66 20 61 6c 6c the root of all
8dc0: 20 62 72 61 6e 63 68 65 73 20 66 6f 75 6e 64 20 branches found
8dd0: 6f 6e 20 74 68 65 0a 09 23 20 6c 69 6e 65 20 6f on the..# line o
8de0: 66 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 72 f primary childr
8df0: 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f 64 72 6f 6f en....set lodroo
8e00: 74 73 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 72 ts {}..foreach r
8e10: 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a 09 oot $myroots {..
8e20: 20 20 20 20 24 73 65 6c 66 20 41 64 64 42 72 61 $self AddBra
8e30: 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 65 nchedLinesOfDeve
8e40: 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f 74 73 lopment lodroots
8e50: 20 24 72 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 $root.. lapp
8e60: 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f end lodroots $ro
8e70: 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6c ot..}..return $l
8e80: 6f 64 72 6f 6f 74 73 0a 20 20 20 20 7d 0a 0a 20 odroots. }..
8e90: 20 20 20 6d 65 74 68 6f 64 20 41 64 64 42 72 61 method AddBra
8ea0: 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 65 nchedLinesOfDeve
8eb0: 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20 72 6f 6f 74 lopment {lv root
8ec0: 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 24 6c 76 } {..upvar 1 $lv
8ed0: 20 6c 6f 64 72 6f 6f 74 73 0a 09 77 68 69 6c 65 lodroots..while
8ee0: 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b {$root ne ""} {
8ef0: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 62 72 .. foreach br
8f00: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e anch [$root bran
8f10: 63 68 65 73 5d 20 7b 0a 09 09 69 66 20 7b 21 5b ches] {...if {![
8f20: 24 62 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 $branch haschild
8f30: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 ]} continue...se
8f40: 74 20 63 68 69 6c 64 20 5b 24 62 72 61 6e 63 68 t child [$branch
8f50: 20 63 68 69 6c 64 5d 0a 09 09 23 20 52 65 63 75 child]...# Recu
8f60: 72 73 65 20 69 6e 74 6f 20 74 68 65 20 62 72 61 rse into the bra
8f70: 6e 63 68 20 66 6f 72 20 64 65 65 70 65 72 20 62 nch for deeper b
8f80: 72 61 6e 63 68 65 73 2e 0a 09 09 24 73 65 6c 66 ranches....$self
8f90: 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 AddBranchedLine
8fa0: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c sOfDevelopment l
8fb0: 6f 64 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 odroots $child..
8fc0: 09 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 .lappend lodroot
8fd0: 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a s $child.. }.
8fe0: 09 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 . set root [$
8ff0: 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 09 root child]..}..
9000: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
9010: 20 20 6d 65 74 68 6f 64 20 45 78 63 6c 75 64 65 method Exclude
9020: 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 6d 61 74 NonTrunkInformat
9030: 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 52 65 6d 6f ion {} {..# Remo
9040: 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74 72 75 6e 6b ve all non-trunk
9050: 20 62 72 61 6e 63 68 65 73 2c 20 72 65 76 69 73 branches, revis
9060: 69 6f 6e 73 2c 20 61 6e 64 20 74 61 67 73 2e 20 ions, and tags.
9070: 57 65 20 64 6f 0a 09 23 20 6b 65 65 70 20 74 68 We do..# keep th
9080: 65 20 74 61 67 73 20 77 68 69 63 68 20 61 72 65 e tags which are
9090: 20 6f 6e 20 74 68 65 20 74 72 75 6e 6b 2e 0a 0a on the trunk...
90a0: 09 73 65 74 20 6e 74 64 62 72 6f 6f 74 20 22 22 .set ntdbroot ""
90b0: 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b ..foreach root [
90c0: 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 $self LinesOfDev
90d0: 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 elopment] {..
90e0: 20 23 20 4e 6f 74 65 3a 20 48 65 72 65 20 74 68 # Note: Here th
90f0: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 72 e order of the r
9100: 6f 6f 74 73 20 69 73 20 69 6d 70 6f 72 74 61 6e oots is importan
9110: 74 2c 0a 09 20 20 20 20 23 20 69 2e 65 2e 20 74 t,.. # i.e. t
9120: 68 61 74 20 77 65 20 67 65 74 20 74 68 65 6d 20 hat we get them
9130: 69 6e 20 64 65 70 74 68 20 66 69 72 73 74 20 6f in depth first o
9140: 72 64 65 72 2e 20 54 68 69 73 20 65 6e 73 75 72 rder. This ensur
9150: 65 73 0a 09 20 20 20 20 23 20 74 68 61 74 20 74 es.. # that t
9160: 68 65 20 72 65 6d 6f 76 61 6c 20 6f 66 20 61 20 he removal of a
9170: 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f branch happens o
9180: 6e 6c 79 20 61 66 74 65 72 20 74 68 65 0a 09 20 nly after the..
9190: 20 20 20 23 20 62 72 61 6e 63 68 65 73 20 73 70 # branches sp
91a0: 61 77 6e 65 64 20 66 72 6f 6d 20 69 74 20 77 65 awned from it we
91b0: 72 65 20 72 65 6d 6f 76 65 64 2e 20 4f 74 68 65 re removed. Othe
91c0: 72 77 69 73 65 20 74 68 65 0a 09 20 20 20 20 23 rwise the.. #
91d0: 20 73 79 73 74 65 6d 20 6d 69 67 68 74 20 74 72 system might tr
91e0: 79 20 74 6f 20 61 63 63 65 73 73 20 64 65 6c 65 y to access dele
91f0: 74 65 64 20 6f 62 6a 65 63 74 73 2e 0a 0a 09 20 ted objects....
9200: 20 20 20 23 20 44 6f 20 6e 6f 74 20 65 78 63 6c # Do not excl
9210: 75 64 65 20 74 68 65 20 74 72 75 6e 6b 2e 0a 09 ude the trunk...
9220: 20 20 20 20 69 66 20 7b 5b 5b 24 72 6f 6f 74 20 if {[[$root
9230: 6c 6f 64 5d 20 69 73 74 72 75 6e 6b 5d 7d 20 63 lod] istrunk]} c
9240: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 24 73 65 ontinue.. $se
9250: 6c 66 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68 lf ExcludeBranch
9260: 20 24 72 6f 6f 74 20 6e 74 64 62 72 6f 6f 74 0a $root ntdbroot.
9270: 09 7d 0a 0a 09 69 66 20 7b 24 6e 74 64 62 72 6f .}...if {$ntdbro
9280: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 ot ne ""} {..
9290: 20 24 73 65 6c 66 20 47 72 61 66 74 4e 54 44 42 $self GraftNTDB
92a0: 32 54 72 75 6e 6b 20 24 6e 74 64 62 72 6f 6f 74 2Trunk $ntdbroot
92b0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
92c0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 }.. method Ex
92d0: 63 6c 75 64 65 42 72 61 6e 63 68 20 7b 72 6f 6f cludeBranch {roo
92e0: 74 20 6e 76 7d 20 7b 0a 09 23 20 45 78 63 6c 75 t nv} {..# Exclu
92f0: 64 65 20 74 68 65 20 62 72 61 6e 63 68 2f 6c 6f de the branch/lo
9300: 64 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 6f d starting at ro
9310: 6f 74 2c 20 61 20 72 65 76 69 73 69 6f 6e 2e 0a ot, a revision..
9320: 09 23 0a 09 23 20 49 66 20 74 68 65 20 4c 4f 44 .#..# If the LOD
9330: 20 73 74 61 72 74 73 20 77 69 74 68 20 6e 6f 6e starts with non
9340: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 -trunk default b
9350: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 2c ranch revisions,
9360: 0a 09 23 20 77 65 20 6c 65 61 76 65 20 74 68 65 ..# we leave the
9370: 6d 20 69 6e 20 70 6c 61 63 65 20 61 6e 64 20 64 m in place and d
9380: 6f 20 6e 6f 74 20 64 65 6c 65 74 65 20 74 68 65 o not delete the
9390: 20 62 72 61 6e 63 68 2e 20 49 6e 20 74 68 61 74 branch. In that
93a0: 0a 09 23 20 63 61 73 65 20 74 68 65 20 63 6f 6d ..# case the com
93b0: 6d 61 6e 64 20 73 65 74 73 20 74 68 65 20 76 61 mand sets the va
93c0: 72 69 61 62 6c 65 20 69 6e 20 4e 56 20 73 6f 20 riable in NV so
93d0: 74 68 61 74 20 77 65 20 63 61 6e 0a 09 23 20 6c that we can..# l
93e0: 61 74 65 72 20 72 65 77 6f 72 6b 20 74 68 65 73 ater rework thes
93f0: 65 20 72 65 76 69 73 6f 6e 73 20 74 6f 20 62 65 e revisons to be
9400: 20 70 75 72 65 6c 79 20 74 72 75 6e 6b 2e 0a 0a purely trunk...
9410: 09 69 66 20 7b 5b 24 72 6f 6f 74 20 69 73 6f 6e .if {[$root ison
9420: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 defaultbranch]}
9430: 7b 0a 09 20 20 20 20 23 20 48 61 6e 64 6c 69 6e {.. # Handlin
9440: 67 20 61 20 4e 54 44 42 2e 20 54 68 69 73 20 62 g a NTDB. This b
9450: 72 61 6e 63 68 20 6d 61 79 20 63 6f 6e 73 69 73 ranch may consis
9460: 74 73 20 6e 6f 74 20 6f 6e 6c 79 20 6f 66 0a 09 ts not only of..
9470: 20 20 20 20 23 20 4e 54 44 42 20 72 65 76 69 73 # NTDB revis
9480: 69 6f 6e 73 2c 20 62 75 74 20 61 6c 73 6f 20 73 ions, but also s
9490: 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42 2e 20 54 68 ome non-NTDB. Th
94a0: 65 20 6c 61 74 74 65 72 20 61 72 65 0a 09 20 20 e latter are..
94b0: 20 20 23 20 74 72 75 6c 79 20 6f 6e 20 61 20 62 # truly on a b
94c0: 72 61 6e 63 68 20 61 6e 64 20 68 61 76 65 20 74 ranch and have t
94d0: 6f 20 62 65 20 65 78 63 6c 75 64 65 64 2e 20 54 o be excluded. T
94e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 09 20 20 he following..
94f0: 20 20 23 20 6c 6f 6f 70 20 64 65 74 65 72 6d 69 # loop determi
9500: 6e 65 73 20 69 66 20 74 68 65 72 65 20 61 72 65 nes if there are
9510: 20 73 75 63 68 20 72 65 76 69 73 69 6f 6e 73 2e such revisions.
9520: 0a 0a 09 20 20 20 20 75 70 76 61 72 20 31 20 24 ... upvar 1 $
9530: 6e 76 20 6e 74 64 62 72 6f 6f 74 0a 09 20 20 20 nv ntdbroot..
9540: 20 73 65 74 20 6e 74 64 62 72 6f 6f 74 20 24 72 set ntdbroot $r
9550: 6f 6f 74 0a 09 20 20 20 20 24 72 6f 6f 74 20 63 oot.. $root c
9560: 75 74 66 72 6f 6d 70 61 72 65 6e 74 62 72 61 6e utfromparentbran
9570: 63 68 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 ch... set rev
9580: 20 24 72 6f 6f 74 0a 09 20 20 20 20 77 68 69 6c $root.. whil
9590: 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b e {$rev ne ""} {
95a0: 0a 09 09 24 72 65 76 20 72 65 6d 6f 76 65 61 6c ...$rev removeal
95b0: 6c 62 72 61 6e 63 68 65 73 0a 09 09 23 20 53 65 lbranches...# Se
95c0: 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 09 69 e note [x].....i
95d0: 66 20 7b 5b 24 72 65 76 20 69 73 6f 6e 64 65 66 f {[$rev isondef
95e0: 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 aultbranch]} {..
95f0: 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 . set rev [$r
9600: 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 20 65 6c ev child]...} el
9610: 73 65 20 7b 0a 09 09 20 20 20 20 62 72 65 61 6b se {... break
9620: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 ...}.. }...
9630: 20 20 23 20 72 65 76 20 6e 6f 77 20 63 6f 6e 74 # rev now cont
9640: 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6e ains the first n
9650: 6f 6e 2d 4e 54 44 42 20 72 65 76 69 73 69 6f 6e on-NTDB revision
9660: 20 61 66 74 65 72 20 74 68 65 0a 09 20 20 20 20 after the..
9670: 23 20 4e 54 44 42 2c 20 6f 72 20 69 73 20 65 6d # NTDB, or is em
9680: 70 74 79 20 69 66 20 74 68 65 72 65 20 69 73 20 pty if there is
9690: 6e 6f 20 73 75 63 68 2e 20 49 66 20 77 65 20 68 no such. If we h
96a0: 61 76 65 20 73 6f 6d 65 0a 09 20 20 20 20 23 20 ave some.. #
96b0: 74 68 65 79 20 68 61 76 65 20 74 6f 20 72 65 6d they have to rem
96c0: 6f 76 65 64 2e 0a 0a 09 20 20 20 20 69 66 20 7b oved.... if {
96d0: 24 72 65 76 20 6e 65 20 22 22 7d 20 20 7b 0a 09 $rev ne ""} {..
96e0: 09 73 65 74 20 6c 61 73 74 6e 74 64 62 20 5b 24 .set lastntdb [$
96f0: 72 65 76 20 70 61 72 65 6e 74 5d 0a 09 09 24 6c rev parent]...$l
9700: 61 73 74 6e 74 64 62 20 63 75 74 66 72 6f 6d 63 astntdb cutfromc
9710: 68 69 6c 64 0a 09 09 77 68 69 6c 65 20 7b 24 72 hild...while {$r
9720: 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 ev ne ""} {...
9730: 20 20 24 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c $rev removeall
9740: 74 61 67 73 0a 09 09 20 20 20 20 24 72 65 76 20 tags... $rev
9750: 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 removeallbranche
9760: 73 0a 09 09 20 20 20 20 23 20 4e 6f 74 65 20 5b s... # Note [
9770: 78 5d 3a 20 57 65 20 6d 61 79 20 73 74 69 6c 6c x]: We may still
9780: 20 68 61 76 65 20 68 61 64 20 62 72 61 6e 63 68 have had branch
9790: 65 73 20 6f 6e 20 74 68 65 0a 09 09 20 20 20 20 es on the...
97a0: 23 20 72 65 76 69 73 69 6f 6e 2e 20 42 72 61 6e # revision. Bran
97b0: 63 68 65 73 20 77 69 74 68 6f 75 74 20 72 65 76 ches without rev
97c0: 69 73 69 6f 6e 73 20 63 6f 6d 6d 69 74 74 65 64 isions committed
97d0: 0a 09 09 20 20 20 20 23 20 6f 6e 20 74 68 65 6d ... # on them
97e0: 20 64 6f 20 6e 6f 74 20 73 68 6f 77 20 75 70 20 do not show up
97f0: 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 72 in the list of r
9800: 6f 6f 74 73 20 61 6b 61 0a 09 09 20 20 20 20 23 oots aka... #
9810: 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f lines of develo
9820: 70 6d 65 6e 74 2e 0a 09 09 20 20 20 20 73 65 74 pment.... set
9830: 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 rev [$rev child
9840: 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 20 ]...}.. }..
9850: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 23 20 return..}...#
9860: 4e 6f 20 4e 54 44 42 20 73 74 75 66 66 20 74 6f No NTDB stuff to
9870: 20 64 65 61 6c 20 77 69 74 68 2e 20 46 69 72 73 deal with. Firs
9880: 74 20 64 65 6c 65 74 65 20 74 68 65 20 62 72 61 t delete the bra
9890: 6e 63 68 20 6f 62 6a 65 63 74 0a 09 23 20 69 74 nch object..# it
98a0: 73 65 6c 66 2c 20 61 66 74 65 72 20 63 75 74 74 self, after cutt
98b0: 69 6e 67 20 61 6c 6c 20 74 68 65 20 76 61 72 69 ing all the vari
98c0: 6f 75 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e ous connections.
98d0: 0a 0a 09 73 65 74 20 62 72 61 6e 63 68 20 5b 24 ...set branch [$
98e0: 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63 root parentbranc
98f0: 68 5d 0a 09 69 66 20 7b 24 62 72 61 6e 63 68 20 h]..if {$branch
9900: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 73 65 ne ""} {.. se
9910: 74 20 62 72 61 6e 63 68 70 61 72 65 6e 74 20 5b t branchparent [
9920: 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 0a $branch parent].
9930: 09 20 20 20 20 24 62 72 61 6e 63 68 70 61 72 65 . $branchpare
9940: 6e 74 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 nt removebranch
9950: 20 20 20 20 20 20 20 24 62 72 61 6e 63 68 0a 09 $branch..
9960: 20 20 20 20 24 62 72 61 6e 63 68 70 61 72 65 6e $branchparen
9970: 74 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 t removechildonb
9980: 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 0a ranch $root..}..
9990: 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20 6e .# The root is n
99a0: 6f 20 73 75 63 68 20 61 6e 79 20 6c 6f 6e 67 65 o such any longe
99b0: 72 20 65 69 74 68 65 72 2e 0a 09 6c 64 65 6c 65 r either...ldele
99c0: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 te myroots $root
99d0: 0a 0a 09 23 20 4e 6f 77 20 67 6f 20 74 68 72 6f ...# Now go thro
99e0: 75 67 68 20 74 68 65 20 6c 69 6e 65 20 61 6e 64 ugh the line and
99f0: 20 72 65 6d 6f 76 65 20 61 6c 6c 20 69 74 73 20 remove all its
9a00: 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 77 68 69 revisions....whi
9a10: 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d le {$root ne ""}
9a20: 20 7b 0a 09 20 20 20 20 24 72 6f 6f 74 20 72 65 {.. $root re
9a30: 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09 20 20 20 movealltags..
9a40: 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c $root removeall
9a50: 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20 23 20 branches.. #
9a60: 4e 6f 74 65 3a 20 53 65 65 20 74 68 65 20 6e 6f Note: See the no
9a70: 74 65 20 5b 78 5d 2e 0a 0a 09 20 20 20 20 23 20 te [x].... #
9a80: 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 From cvs2svn: If
9a90: 20 74 68 69 73 20 69 73 20 74 68 65 20 6c 61 73 this is the las
9aa0: 74 20 64 65 66 61 75 6c 74 20 72 65 76 69 73 69 t default revisi
9ab0: 6f 6e 20 6f 6e 20 61 0a 09 20 20 20 20 23 20 6e on on a.. # n
9ac0: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 on-trunk default
9ad0: 20 62 72 61 6e 63 68 20 66 6f 6c 6c 6f 77 65 64 branch followed
9ae0: 20 62 79 20 61 20 31 2e 32 20 72 65 76 69 73 69 by a 1.2 revisi
9af0: 6f 6e 2c 0a 09 20 20 20 20 23 20 74 68 65 6e 20 on,.. # then
9b00: 74 68 65 20 31 2e 32 20 72 65 76 69 73 69 6f 6e the 1.2 revision
9b10: 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 69 73 depends on this
9b20: 20 6f 6e 65 2e 20 20 46 49 58 4d 45 3a 20 49 74 one. FIXME: It
9b30: 20 69 73 0a 09 20 20 20 20 23 20 71 75 65 73 74 is.. # quest
9b40: 69 6f 6e 61 62 6c 65 20 77 68 65 74 68 65 72 20 ionable whether
9b50: 74 68 69 73 20 68 61 6e 64 6c 69 6e 67 20 69 73 this handling is
9b60: 20 63 6f 72 72 65 63 74 2c 20 73 69 6e 63 65 20 correct, since
9b70: 74 68 65 0a 09 20 20 20 20 23 20 6e 6f 6e 2d 74 the.. # non-t
9b80: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 runk default bra
9b90: 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 20 61 66 nch revisions af
9ba0: 66 65 63 74 20 74 72 75 6e 6b 20 61 6e 64 0a 09 fect trunk and..
9bb0: 20 20 20 20 23 20 73 68 6f 75 6c 64 20 74 68 65 # should the
9bc0: 72 65 66 6f 72 65 20 6e 6f 74 20 6a 75 73 74 20 refore not just
9bd0: 62 65 20 64 69 73 63 61 72 64 65 64 20 65 76 65 be discarded eve
9be0: 6e 20 69 66 0a 09 20 20 20 20 23 20 2d 2d 74 72 n if.. # --tr
9bf0: 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09 20 20 20 20 unk-only....
9c00: 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 64 65 if {[$root hasde
9c10: 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 faultbranchchild
9c20: 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 74 64 62 63 ]} {...set ntdbc
9c30: 68 69 6c 64 20 5b 24 72 6f 6f 74 20 64 65 66 61 hild [$root defa
9c40: 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 0a ultbranchchild].
9c50: 09 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 ..integrity asse
9c60: 72 74 20 7b 0a 09 09 20 20 20 20 5b 24 6e 74 64 rt {... [$ntd
9c70: 62 63 68 69 6c 64 20 64 65 66 61 75 6c 74 62 72 bchild defaultbr
9c80: 61 6e 63 68 70 61 72 65 6e 74 5d 20 65 71 20 24 anchparent] eq $
9c90: 6e 74 64 62 63 68 69 6c 64 0a 09 09 7d 20 7b 6e ntdbchild...} {n
9ca0: 74 64 62 20 2d 20 74 72 75 6e 6b 20 6c 69 6e 6b tdb - trunk link
9cb0: 61 67 65 20 62 72 6f 6b 65 6e 7d 0a 09 09 24 6e age broken}...$n
9cc0: 74 64 62 63 68 69 6c 64 20 63 75 74 64 65 66 61 tdbchild cutdefa
9cd0: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a ultbranchparent.
9ce0: 09 09 69 66 20 7b 5b 24 6e 74 64 62 63 68 69 6c ..if {[$ntdbchil
9cf0: 64 20 68 61 73 70 61 72 65 6e 74 5d 7d 20 7b 0a d hasparent]} {.
9d00: 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 .. lappend my
9d10: 72 6f 6f 74 73 20 5b 24 6e 74 64 62 63 68 69 6c roots [$ntdbchil
9d20: 64 20 70 61 72 65 6e 74 5d 0a 09 09 7d 0a 09 20 d parent]...}..
9d30: 20 20 20 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 }... set r
9d40: 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 oot [$root child
9d50: 5d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 ]..}...return.
9d60: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
9d70: 47 72 61 66 74 4e 54 44 42 32 54 72 75 6e 6b 20 GraftNTDB2Trunk
9d80: 7b 72 6f 6f 74 7d 20 7b 0a 09 23 20 57 65 20 63 {root} {..# We c
9d90: 61 6e 20 6e 6f 77 20 67 72 61 66 74 20 74 68 65 an now graft the
9da0: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 non-trunk defau
9db0: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 lt branch revisi
9dc0: 6f 6e 73 20 74 6f 0a 09 23 20 74 72 75 6e 6b 2e ons to..# trunk.
9dd0: 20 54 68 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 They should alr
9de0: 65 61 64 79 20 62 65 20 61 6c 6f 6e 65 20 6f 6e eady be alone on
9df0: 20 61 20 43 56 53 42 72 61 6e 63 68 2d 6c 65 73 a CVSBranch-les
9e00: 73 0a 09 23 20 62 72 61 6e 63 68 2e 0a 0a 09 69 s..# branch....i
9e10: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
9e20: 7b 21 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65 {![$root haspare
9e30: 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 4e 54 44 42 ntbranch]} {NTDB
9e40: 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73 20 root still has
9e50: 69 74 73 20 62 72 61 6e 63 68 20 73 79 6d 62 6f its branch symbo
9e60: 6c 7d 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 l}..integrity as
9e70: 73 65 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 sert {![$root ha
9e80: 73 62 72 61 6e 63 68 65 73 5d 7d 20 20 20 20 20 sbranches]}
9e90: 7b 4e 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c {NTDB root still
9ea0: 20 68 61 73 20 73 70 61 77 6e 65 64 20 62 72 61 has spawned bra
9eb0: 6e 63 68 65 73 7d 0a 0a 09 73 65 74 20 6c 61 73 nches}...set las
9ec0: 74 20 24 72 6f 6f 74 0a 09 77 68 69 6c 65 20 7b t $root..while {
9ed0: 5b 24 6c 61 73 74 20 68 61 73 63 68 69 6c 64 5d [$last haschild]
9ee0: 7d 20 7b 73 65 74 20 6c 61 73 74 20 5b 24 6c 61 } {set last [$la
9ef0: 73 74 20 63 68 69 6c 64 5d 7d 0a 0a 09 69 66 20 st child]}...if
9f00: 7b 5b 24 6c 61 73 74 20 68 61 73 64 65 66 61 75 {[$last hasdefau
9f10: 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 7d 20 ltbranchchild]}
9f20: 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 31 {... set rev1
9f30: 32 20 5b 24 6c 61 73 74 20 64 65 66 61 75 6c 74 2 [$last default
9f40: 62 72 61 6e 63 68 63 68 69 6c 64 5d 0a 09 20 20 branchchild]..
9f50: 20 20 24 72 65 76 31 32 20 63 75 74 64 65 66 61 $rev12 cutdefa
9f60: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a ultbranchparent.
9f70: 09 20 20 20 20 24 6c 61 73 74 20 20 63 75 74 64 . $last cutd
9f80: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c efaultbranchchil
9f90: 64 0a 0a 09 20 20 20 20 24 72 65 76 31 32 20 63 d... $rev12 c
9fa0: 68 61 6e 67 65 70 61 72 65 6e 74 20 24 6c 61 73 hangeparent $las
9fb0: 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20 63 68 t.. $last ch
9fc0: 61 6e 67 65 63 68 69 6c 64 20 24 72 65 76 31 32 angechild $rev12
9fd0: 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 20 6d ... ldelete m
9fe0: 79 72 6f 6f 74 73 20 24 72 65 76 31 32 0a 0a 09 yroots $rev12...
9ff0: 20 20 20 20 23 20 4e 6f 74 65 20 61 6e 64 20 72 # Note and r
a000: 65 6d 65 6d 62 65 72 20 74 68 61 74 20 74 68 65 emember that the
a010: 20 74 79 70 65 20 6f 66 20 72 65 76 31 32 20 77 type of rev12 w
a020: 61 73 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20 as already..
a030: 23 20 61 64 6a 75 73 74 65 64 20 62 79 20 41 64 # adjusted by Ad
a040: 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 justNonTrunkDefa
a050: 75 6c 74 42 72 61 6e 63 68 2c 20 73 6f 20 77 65 ultBranch, so we
a060: 20 64 6f 6e 27 74 0a 09 20 20 20 20 23 20 68 61 don't.. # ha
a070: 76 65 20 74 6f 20 63 68 61 6e 67 65 20 69 74 73 ve to change its
a080: 20 74 79 70 65 20 68 65 72 65 2e 0a 09 7d 0a 0a type here...}..
a090: 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 .while {$root ne
a0a0: 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f ""} {.. $roo
a0b0: 74 20 73 65 74 6f 6e 64 65 66 61 75 6c 74 62 72 t setondefaultbr
a0c0: 61 6e 63 68 20 30 0a 09 20 20 20 20 24 72 6f 6f anch 0.. $roo
a0d0: 74 20 73 65 74 6c 6f 64 20 24 6d 79 74 72 75 6e t setlod $mytrun
a0e0: 6b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 k.. foreach t
a0f0: 61 67 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 ag [$root tags]
a100: 7b 0a 09 09 24 74 61 67 20 73 65 74 6c 6f 64 20 {...$tag setlod
a110: 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20 7d 0a $mytrunk.. }.
a120: 09 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 . set root [$
a130: 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 0a root child]..}..
a140: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0a 20 return.
a150: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
a160: 20 41 63 74 69 76 65 20 7b 7d 20 7b 0a 09 73 65 Active {} {..se
a170: 74 20 72 65 76 69 73 69 6f 6e 73 20 7b 7d 0a 09 t revisions {}..
a180: 73 65 74 20 73 79 6d 62 6f 6c 73 20 20 20 7b 7d set symbols {}
a190: 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 ...foreach root
a1a0: 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 [$self LinesOfDe
a1b0: 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 velopment] {..
a1c0: 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 if {[$root has
a1d0: 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b parentbranch]} {
a1e0: 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 lappend symbols
a1f0: 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 [$root parentbr
a200: 61 6e 63 68 5d 20 7d 0a 09 20 20 20 20 77 68 69 anch] }.. whi
a210: 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d le {$root ne ""}
a220: 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72 65 76 {...lappend rev
a230: 69 73 69 6f 6e 73 20 24 72 6f 6f 74 0a 09 09 66 isions $root...f
a240: 6f 72 65 61 63 68 20 74 61 67 20 20 20 20 5b 24 oreach tag [$
a250: 72 6f 6f 74 20 74 61 67 73 5d 20 20 20 20 20 7b root tags] {
a260: 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 lappend symbols
a270: 20 24 74 61 67 20 20 20 20 7d 0a 09 09 66 6f 72 $tag }...for
a280: 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f each branch [$ro
a290: 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 ot branches] {..
a2a0: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 . integrity a
a2b0: 73 73 65 72 74 20 7b 0a 09 09 09 5b 24 62 72 61 ssert {....[$bra
a2c0: 6e 63 68 20 70 61 72 65 6e 74 5d 20 65 71 20 24 nch parent] eq $
a2d0: 72 6f 6f 74 0a 09 09 20 20 20 20 7d 20 7b 42 61 root... } {Ba
a2e0: 63 6b 72 65 66 65 72 65 6e 63 65 20 62 72 61 6e ckreference bran
a2f0: 63 68 20 74 6f 20 69 74 73 20 72 6f 6f 74 20 69 ch to its root i
a300: 73 20 6d 69 73 73 69 6e 67 20 6f 72 20 77 72 6f s missing or wro
a310: 6e 67 7d 0a 09 09 20 20 20 20 6c 61 70 70 65 6e ng}... lappen
a320: 64 20 73 79 6d 62 6f 6c 73 20 24 62 72 61 6e 63 d symbols $branc
a330: 68 0a 09 09 7d 0a 09 09 73 65 74 20 6c 6f 64 20 h...}...set lod
a340: 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a 09 09 69 66 [$root lod]...if
a350: 20 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b {![$lod istrunk
a360: 5d 7d 20 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 ]} {... integ
a370: 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 rity assert {...
a380: 09 5b 24 6c 6f 64 20 68 61 73 63 68 69 6c 64 5d .[$lod haschild]
a390: 0a 09 09 20 20 20 20 7d 20 7b 42 72 61 6e 63 68 ... } {Branch
a3a0: 20 69 73 20 4c 4f 44 20 73 79 6d 62 6f 6c 20 77 is LOD symbol w
a3b0: 69 74 68 6f 75 74 20 72 65 76 69 73 69 6f 6e 73 ithout revisions
a3c0: 7d 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 }... lappend
a3d0: 73 79 6d 62 6f 6c 73 20 24 6c 6f 64 0a 09 09 7d symbols $lod...}
a3e0: 0a 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f ...set root [$ro
a3f0: 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d ot child].. }
a400: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69 ..}...return [li
a410: 73 74 20 5b 6c 73 6f 72 74 20 2d 75 6e 69 71 75 st [lsort -uniqu
a420: 65 20 2d 64 69 63 74 20 24 72 65 76 69 73 69 6f e -dict $revisio
a430: 6e 73 5d 20 5b 6c 73 6f 72 74 20 2d 75 6e 69 71 ns] [lsort -uniq
a440: 75 65 20 2d 64 69 63 74 20 24 73 79 6d 62 6f 6c ue -dict $symbol
a450: 73 5d 5d 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20 s]]. }...
a460: 6d 65 74 68 6f 64 20 41 67 67 72 65 67 61 74 65 method Aggregate
a470: 53 79 6d 62 6f 6c 44 61 74 61 20 7b 7d 20 7b 0a SymbolData {} {.
a480: 09 23 20 4e 6f 77 20 74 68 61 74 20 74 68 65 20 .# Now that the
a490: 65 78 61 63 74 20 73 65 74 20 6f 66 20 72 65 76 exact set of rev
a4a0: 69 73 69 6f 6e 73 20 28 61 6e 64 20 74 68 72 6f isions (and thro
a4b0: 75 67 68 20 74 68 61 74 0a 09 23 20 62 72 61 6e ugh that..# bran
a4c0: 63 68 65 73 20 61 6e 64 20 74 61 67 73 29 20 69 ches and tags) i
a4d0: 73 20 6b 6e 6f 77 6e 20 77 65 20 63 61 6e 20 75 s known we can u
a4e0: 70 64 61 74 65 20 74 68 65 20 61 67 67 72 65 67 pdate the aggreg
a4f0: 61 74 65 0a 09 23 20 73 79 6d 62 6f 6c 20 73 74 ate..# symbol st
a500: 61 74 69 73 74 69 63 73 2e 0a 0a 09 66 6f 72 65 atistics....fore
a510: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 ach root [$self
a520: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 LinesOfDevelopme
a530: 6e 74 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 6c nt] {.. set l
a540: 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a 0a od [$root lod]..
a550: 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 49 66 20 . # Note: If
a560: 74 68 65 20 4c 4f 44 20 69 73 20 74 68 65 20 74 the LOD is the t
a570: 72 75 6e 6b 20 74 68 65 20 63 6f 75 6e 74 2a 2c runk the count*,
a580: 20 65 74 63 2e 20 6d 65 74 68 6f 64 73 0a 09 20 etc. methods..
a590: 20 20 20 23 20 77 69 6c 6c 20 64 6f 20 6e 6f 74 # will do not
a5a0: 68 69 6e 67 2c 20 61 73 20 69 74 20 69 73 20 61 hing, as it is a
a5b0: 6c 77 61 79 73 20 70 72 65 73 65 6e 74 20 28 63 lways present (c
a5c0: 61 6e 6e 6f 74 20 62 65 0a 09 20 20 20 20 23 20 annot be.. #
a5d0: 65 78 63 6c 75 64 65 64 29 2c 20 61 6e 64 20 69 excluded), and i
a5e0: 73 20 61 6c 77 61 79 73 20 61 20 62 72 61 6e 63 s always a branc
a5f0: 68 20 74 6f 6f 2e 0a 0a 09 20 20 20 20 23 20 4c h too.... # L
a600: 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d ines of developm
a610: 65 6e 74 20 63 6f 75 6e 74 20 61 73 20 62 72 61 ent count as bra
a620: 6e 63 68 65 73 20 61 6e 64 20 68 61 76 65 20 61 nches and have a
a630: 20 63 6f 6d 6d 69 74 0a 09 20 20 20 20 23 20 6f commit.. # o
a640: 6e 20 74 68 65 6d 20 28 72 6f 6f 74 29 2e 20 49 n them (root). I
a650: 66 20 74 68 65 79 20 61 72 65 20 73 74 69 6c 6c f they are still
a660: 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 74 attached to a t
a670: 72 65 65 20 77 65 0a 09 20 20 20 20 23 20 68 61 ree we.. # ha
a680: 76 65 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e ve to compute an
a690: 64 20 72 65 67 69 73 74 65 72 20 70 6f 73 73 69 d register possi
a6a0: 62 6c 65 20 70 61 72 65 6e 74 73 2e 0a 0a 09 20 ble parents....
a6b0: 20 20 20 24 6c 6f 64 20 63 6f 75 6e 74 61 73 62 $lod countasb
a6c0: 72 61 6e 63 68 0a 09 20 20 20 20 24 6c 6f 64 20 ranch.. $lod
a6d0: 63 6f 75 6e 74 61 63 6f 6d 6d 69 74 0a 0a 09 20 countacommit...
a6e0: 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 if {[$root ha
a6f0: 73 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 sparentbranch]}
a700: 7b 0a 09 09 23 20 4e 6f 74 65 20 6c 6f 64 20 3d {...# Note lod =
a710: 3d 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 = [$root parentb
a720: 72 61 6e 63 68 5d 0a 09 09 24 6c 6f 64 20 70 6f ranch]...$lod po
a730: 73 73 69 62 6c 65 70 61 72 65 6e 74 73 0a 09 20 ssibleparents..
a740: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 5b 24 } elseif {![$
a750: 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 20 26 26 20 lod istrunk] &&
a760: 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 65 66 61 75 [$root isondefau
a770: 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 23 ltbranch]} {...#
a780: 20 54 68 69 73 20 69 73 20 74 68 65 20 72 6f 6f This is the roo
a790: 74 20 72 65 76 69 73 69 6f 6e 20 6f 66 20 61 20 t revision of a
a7a0: 64 65 74 61 63 68 65 64 20 4e 54 44 42 2e 20 57 detached NTDB. W
a7b0: 65 0a 09 09 23 20 68 61 76 65 20 74 6f 20 6d 61 e...# have to ma
a7c0: 6e 75 61 6c 6c 79 20 73 65 74 20 74 68 65 20 6f nually set the o
a7d0: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 70 61 72 nly possible par
a7e0: 65 6e 74 20 66 6f 72 0a 09 09 23 20 74 68 69 73 ent for...# this
a7f0: 20 4c 4f 44 2c 20 74 68 65 20 74 72 75 6e 6b 20 LOD, the trunk
a800: 69 74 73 65 6c 66 2e 0a 0a 09 09 5b 24 6c 6f 64 itself.....[$lod
a810: 20 73 79 6d 62 6f 6c 5d 20 70 6f 73 73 69 62 6c symbol] possibl
a820: 65 70 61 72 65 6e 74 20 24 6d 79 74 72 75 6e 6b eparent $mytrunk
a830: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 .. }... #
a840: 46 6f 72 20 74 68 65 20 72 65 76 69 73 69 6f 6e For the revision
a850: 73 20 69 6e 20 74 68 65 20 6c 69 6e 65 20 77 65 s in the line we
a860: 20 72 65 67 69 73 74 65 72 20 74 68 65 69 72 20 register their
a870: 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20 23 20 branches.. #
a880: 61 6e 64 20 74 61 67 73 20 61 73 20 62 6c 6f 63 and tags as bloc
a890: 6b 65 72 73 20 66 6f 72 20 74 68 65 20 6c 6f 64 kers for the lod
a8a0: 2c 20 61 6e 64 20 75 70 64 61 74 65 20 74 68 65 , and update the
a8b0: 20 74 79 70 65 0a 09 20 20 20 20 23 20 63 6f 75 type.. # cou
a8c0: 6e 74 65 72 73 20 61 73 20 77 65 6c 6c 2e 20 41 nters as well. A
a8d0: 73 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 73 s branch symbols
a8e0: 20 77 69 74 68 6f 75 74 20 63 6f 6d 6d 69 74 73 without commits
a8f0: 20 6f 6e 0a 09 20 20 20 20 23 20 74 68 65 6d 20 on.. # them
a900: 61 72 65 20 6e 6f 74 20 6c 69 73 74 65 64 20 61 are not listed a
a910: 73 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c s lines of devel
a920: 6f 70 6d 65 6e 74 2c 20 77 65 20 68 61 76 65 20 opment, we have
a930: 74 6f 0a 09 20 20 20 20 23 20 63 6f 75 6e 74 20 to.. # count
a940: 74 68 65 6d 20 68 65 72 65 20 61 73 20 77 65 6c them here as wel
a950: 6c 2c 20 61 73 20 70 6c 61 69 6e 20 62 72 61 6e l, as plain bran
a960: 63 68 65 73 2e 20 41 74 20 6c 61 73 74 20 77 65 ches. At last we
a970: 0a 09 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 .. # have to
a980: 63 6f 6d 70 75 74 65 20 61 6e 64 20 72 65 67 69 compute and regi
a990: 73 74 65 72 20 74 68 65 20 70 6f 73 73 69 62 6c ster the possibl
a9a0: 65 20 70 61 72 65 6e 74 73 20 6f 66 20 74 68 65 e parents of the
a9b0: 0a 09 20 20 20 20 23 20 74 61 67 73 2c 20 69 6e .. # tags, in
a9c0: 20 63 61 73 65 20 74 68 65 79 20 61 72 65 20 6c case they are l
a9d0: 61 74 65 72 20 63 6f 6e 76 65 72 74 65 64 20 61 ater converted a
a9e0: 73 20 62 72 61 6e 63 68 65 73 2e 0a 0a 09 20 20 s branches....
a9f0: 20 20 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e while {$root n
aa00: 65 20 22 22 7d 20 7b 0a 09 09 66 6f 72 65 61 63 e ""} {...foreac
aa10: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 h branch [$root
aa20: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 20 20 branches] {...
aa30: 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65 64 62 79 $lod blockedby
aa40: 20 24 62 72 61 6e 63 68 0a 09 09 20 20 20 20 24 $branch... $
aa50: 62 72 61 6e 63 68 20 70 6f 73 73 69 62 6c 65 70 branch possiblep
aa60: 61 72 65 6e 74 73 0a 09 09 20 20 20 20 69 66 20 arents... if
aa70: 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 63 68 69 {[$branch haschi
aa80: 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 ld]} continue...
aa90: 20 20 20 20 24 62 72 61 6e 63 68 20 63 6f 75 6e $branch coun
aaa0: 74 61 73 62 72 61 6e 63 68 0a 09 09 7d 0a 0a 09 tasbranch...}...
aab0: 09 66 6f 72 65 61 63 68 20 74 61 67 20 5b 24 72 .foreach tag [$r
aac0: 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09 20 20 oot tags] {...
aad0: 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65 64 62 79 $lod blockedby
aae0: 20 24 74 61 67 0a 09 09 20 20 20 20 24 74 61 67 $tag... $tag
aaf0: 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 73 possibleparents
ab00: 0a 09 09 20 20 20 20 24 74 61 67 20 63 6f 75 6e ... $tag coun
ab10: 74 61 73 74 61 67 0a 09 09 7d 0a 0a 09 09 73 65 tastag...}....se
ab20: 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 t root [$root ch
ab30: 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a ild].. }..}..
ab40: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
ab50: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ##
ab60: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
ab70: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 ##########. #
ab80: 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a # Configuration.
ab90: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 . pragma -has
aba0: 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 typeinfo no
abb0: 3b 20 23 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 ; # no type intr
abc0: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 ospection. pr
abd0: 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 agma -hasinfo
abe0: 20 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 no ; # no
abf0: 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63 object introspec
ac00: 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 tion. pragma
ac10: 2d 68 61 73 74 79 70 65 6d 65 74 68 6f 64 73 20 -hastypemethods
ac20: 6e 6f 20 20 3b 20 23 20 74 79 70 65 20 69 73 20 no ; # type is
ac30: 6e 6f 74 20 72 65 6c 65 76 61 6e 74 2e 0a 0a 20 not relevant...
ac40: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ##
ac50: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
ac60: 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 ##########.}..na
ac70: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 mespace eval ::v
ac80: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
ac90: 74 3a 3a 63 76 73 20 7b 0a 20 20 20 20 6e 61 6d t::cvs {. nam
aca0: 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 66 69 espace export fi
acb0: 6c 65 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 le. namespace
acc0: 20 65 76 61 6c 20 66 69 6c 65 20 7b 0a 09 23 20 eval file {..#
acd0: 49 6d 70 6f 72 74 20 6e 6f 74 20 72 65 71 75 69 Import not requi
ace0: 72 65 64 2c 20 61 6c 72 65 61 64 79 20 61 20 63 red, already a c
acf0: 68 69 6c 64 20 6e 61 6d 65 73 70 61 63 65 2e 0a hild namespace..
ad00: 09 23 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 .# namespace imp
ad10: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c ort ::vc::fossil
ad20: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 ::import::cvs::f
ad30: 69 6c 65 3a 3a 72 65 76 0a 09 23 20 6e 61 6d 65 ile::rev..# name
ad40: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
ad50: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
ad60: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 73 79 t::cvs::file::sy
ad70: 6d 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 m..namespace imp
ad80: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ort ::vc::tools:
ad90: 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 :misc::*..namesp
ada0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
adb0: 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a :tools::trouble.
adc0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 .namespace impor
add0: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c t ::vc::tools::l
ade0: 6f 67 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d og..namespace im
adf0: 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 port ::vc::fossi
ae00: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a l::import::cvs::
ae10: 62 6c 6f 62 73 74 6f 72 65 0a 09 6e 61 6d 65 73 blobstore..names
ae20: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 pace import ::vc
ae30: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 ::fossil::import
ae40: 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 ::cvs::state..na
ae50: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
ae60: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
ae70: 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 ort::cvs::integr
ae80: 69 74 79 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 ity..namespace i
ae90: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 mport ::vc::foss
aea0: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
aeb0: 3a 67 74 63 6f 72 65 0a 20 20 20 20 7d 0a 7d 0a :gtcore. }.}.
aec0: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 .# # ## ### ####
aed0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
aee0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
aef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 ##############.#
af00: 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 # Ready..package
af10: 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 provide vc::fos
af20: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
af30: 3a 3a 66 69 6c 65 20 31 2e 30 0a 72 65 74 75 72 ::file 1.0.retur
af40: 6e 0a n.