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 73 information...s
27d0: 74 61 74 65 20 66 6f 72 65 61 63 68 72 6f 77 20 tate foreachrow
27e0: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e {.. SELECT B.
27f0: 72 69 64 20 20 20 20 41 53 20 78 72 69 64 2c 0a rid AS xrid,.
2800: 09 20 20 20 20 20 20 20 20 20 20 20 52 2e 72 65 . R.re
2810: 76 20 20 20 20 41 53 20 72 65 76 6e 72 2c 0a 09 v AS revnr,..
2820: 20 20 20 20 20 20 20 20 20 20 20 52 2e 63 68 69 R.chi
2830: 6c 64 20 20 41 53 20 78 63 68 69 6c 64 2c 0a 09 ld AS xchild,..
2840: 20 20 20 20 20 20 20 20 20 20 20 42 2e 63 6f 66 B.cof
2850: 66 20 20 20 41 53 20 78 63 6f 66 66 2c 0a 09 20 f AS xcoff,..
2860: 20 20 20 20 20 20 20 20 20 20 42 2e 63 6c 65 6e B.clen
2870: 20 20 20 41 53 20 78 63 6c 65 6e 2c 0a 09 20 20 AS xclen,..
2880: 20 20 20 20 20 20 20 20 20 42 2e 62 69 64 20 20 B.bid
2890: 20 20 41 53 20 63 69 64 2c 0a 09 20 20 20 20 20 AS cid,..
28a0: 20 20 20 20 20 20 42 2e 70 69 64 20 20 20 20 41 B.pid A
28b0: 53 20 63 70 61 72 65 6e 74 0a 09 20 20 20 20 46 S cparent.. F
28c0: 52 4f 4d 20 20 20 20 20 20 20 20 20 20 20 20 62 ROM b
28d0: 6c 6f 62 20 42 0a 09 20 20 20 20 4c 45 46 54 20 lob B.. LEFT
28e0: 4f 55 54 45 52 20 4a 4f 49 4e 20 72 65 76 69 73 OUTER JOIN revis
28f0: 69 6f 6e 20 52 0a 09 20 20 20 20 4f 4e 20 20 20 ion R.. ON
2900: 20 20 20 20 20 20 20 20 20 20 20 42 2e 72 69 64 B.rid
2910: 20 3d 20 52 2e 72 69 64 0a 09 20 20 20 20 57 48 = R.rid.. WH
2920: 45 52 45 20 20 42 2e 66 69 64 20 3d 20 24 6d 79 ERE B.fid = $my
2930: 69 64 0a 09 7d 20 7b 0a 09 20 20 20 20 23 20 4d id..} {.. # M
2940: 61 69 6e 20 64 61 74 61 20 61 72 65 20 62 6c 6f ain data are blo
2950: 62 73 2c 20 6d 6f 73 74 20 77 69 6c 6c 20 68 61 bs, most will ha
2960: 76 65 20 72 65 76 69 73 69 6f 6e 73 2c 20 62 75 ve revisions, bu
2970: 74 20 6e 6f 74 0a 09 20 20 20 20 23 20 61 6c 6c t not.. # all
2980: 2e 20 54 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 . The expansion
2990: 67 72 61 70 68 20 69 73 20 62 6c 6f 62 20 62 61 graph is blob ba
29a0: 73 65 64 2c 20 77 68 65 72 65 61 73 20 74 68 65 sed, whereas the
29b0: 0a 09 20 20 20 20 23 20 72 65 63 6f 6d 70 72 65 .. # recompre
29c0: 73 73 69 6f 6e 20 67 72 61 70 68 20 69 73 20 72 ssion graph is r
29d0: 65 76 69 73 69 6f 6e 20 62 61 73 65 64 2e 0a 0a evision based...
29e0: 09 20 20 20 20 69 66 20 7b 24 72 65 76 6e 72 20 . if {$revnr
29f0: 6e 65 20 22 22 7d 20 7b 0a 09 09 23 20 42 6c 6f ne ""} {...# Blo
2a00: 62 20 68 61 73 20 72 65 76 69 73 69 6f 6e 2c 20 b has revision,
2a10: 65 78 74 65 6e 64 20 72 65 63 6f 6d 70 72 65 73 extend recompres
2a20: 73 69 6f 6e 20 67 72 61 70 68 2e 0a 0a 09 09 6c sion graph.....l
2a30: 61 70 70 65 6e 64 20 72 65 76 6d 61 70 20 72 24 append revmap r$
2a40: 72 65 76 6e 72 20 24 78 72 69 64 0a 0a 09 09 24 revnr $xrid....$
2a50: 7a 70 20 6e 6f 64 65 20 69 6e 73 65 72 74 20 24 zp node insert $
2a60: 78 72 69 64 0a 09 09 24 7a 70 20 6e 6f 64 65 20 xrid...$zp node
2a70: 73 65 74 20 20 20 20 24 78 72 69 64 20 72 65 76 set $xrid rev
2a80: 6e 72 20 24 72 65 76 6e 72 0a 09 09 24 7a 70 20 nr $revnr...$zp
2a90: 6e 6f 64 65 20 73 65 74 20 20 20 20 24 78 72 69 node set $xri
2aa0: 64 20 6c 61 62 65 6c 20 3c 24 72 65 76 6e 72 3e d label <$revnr>
2ab0: 0a 0a 09 09 69 66 20 7b 24 78 63 68 69 6c 64 20 ....if {$xchild
2ac0: 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 6c ne ""} {... l
2ad0: 61 70 70 65 6e 64 20 7a 61 72 63 73 20 24 78 63 append zarcs $xc
2ae0: 68 69 6c 64 20 24 78 72 69 64 0a 09 09 7d 0a 09 hild $xrid...}..
2af0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23 } else {...#
2b00: 20 57 65 20 66 61 6b 65 20 61 20 72 65 76 6e 72 We fake a revnr
2b10: 20 66 6f 72 20 74 68 65 20 62 6c 6f 62 73 20 77 for the blobs w
2b20: 68 69 63 68 20 68 61 76 65 20 6e 6f 0a 09 09 23 hich have no...#
2b30: 20 72 65 76 69 73 69 6f 6e 2c 20 66 6f 72 20 75 revision, for u
2b40: 73 65 20 69 6e 20 74 68 65 20 65 78 70 61 6e 73 se in the expans
2b50: 69 6f 6e 20 67 72 61 70 68 2e 0a 09 09 73 65 74 ion graph....set
2b60: 20 72 65 76 6e 72 20 67 68 6f 73 74 24 63 69 64 revnr ghost$cid
2b70: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 .. }... #
2b80: 4e 6f 77 20 74 68 65 20 65 78 70 61 6e 73 69 6f Now the expansio
2b90: 6e 20 67 72 61 70 68 2e 0a 0a 09 20 20 20 20 24 n graph.... $
2ba0: 65 78 20 6e 6f 64 65 20 69 6e 73 65 72 74 20 24 ex node insert $
2bb0: 63 69 64 0a 09 20 20 20 20 24 65 78 20 6e 6f 64 cid.. $ex nod
2bc0: 65 20 73 65 74 20 20 20 20 24 63 69 64 20 74 65 e set $cid te
2bd0: 78 74 20 20 5b 6c 69 73 74 20 24 78 63 6f 66 66 xt [list $xcoff
2be0: 20 24 78 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65 $xclen].. $e
2bf0: 78 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 63 x node set $c
2c00: 69 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a id revnr $revnr.
2c10: 09 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 65 . $ex node se
2c20: 74 20 20 20 20 24 63 69 64 20 6c 61 62 65 6c 20 t $cid label
2c30: 3c 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69 <$revnr>... i
2c40: 66 20 7b 24 63 70 61 72 65 6e 74 20 6e 65 20 22 f {$cparent ne "
2c50: 22 7d 20 7b 0a 09 09 23 20 54 68 65 20 65 78 70 "} {...# The exp
2c60: 61 6e 73 69 6f 6e 20 61 72 63 73 20 67 6f 20 66 ansion arcs go f
2c70: 72 6f 6d 20 62 61 73 65 6c 69 6e 65 20 74 6f 20 rom baseline to
2c80: 64 65 6c 74 61 0a 09 09 23 20 64 65 73 63 65 6e delta...# descen
2c90: 64 61 6e 74 2c 20 62 61 73 65 64 20 6f 6e 20 74 dant, based on t
2ca0: 68 65 20 62 6c 6f 62 20 69 6e 66 6f 72 6d 61 74 he blob informat
2cb0: 69 6f 6e 2e 0a 09 09 6c 61 70 70 65 6e 64 20 65 ion....lappend e
2cc0: 61 72 63 73 20 24 63 70 61 72 65 6e 74 20 24 63 arcs $cparent $c
2cd0: 69 64 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 id.. }..}...#
2ce0: 20 50 68 61 73 65 20 49 49 3a 20 49 6e 73 65 72 Phase II: Inser
2cf0: 74 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 65 t the accumulate
2d00: 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 0a d dependencies..
2d10: 09 66 6f 72 65 61 63 68 20 7b 66 72 6f 6d 20 74 .foreach {from t
2d20: 6f 7d 20 24 65 61 72 63 73 20 7b 20 24 65 78 20 o} $earcs { $ex
2d30: 61 72 63 20 69 6e 73 65 72 74 20 24 66 72 6f 6d arc insert $from
2d40: 20 24 74 6f 20 7d 0a 09 66 6f 72 65 61 63 68 20 $to }..foreach
2d50: 7b 66 72 6f 6d 20 74 6f 7d 20 24 7a 61 72 63 73 {from to} $zarcs
2d60: 20 7b 20 24 7a 70 20 61 72 63 20 69 6e 73 65 72 { $zp arc inser
2d70: 74 20 24 66 72 6f 6d 20 24 74 6f 20 7d 0a 0a 09 t $from $to }...
2d80: 23 20 50 68 61 73 65 20 49 49 49 3a 20 54 72 61 # Phase III: Tra
2d90: 76 65 72 73 65 20 74 68 65 20 67 72 61 70 68 73 verse the graphs
2da0: 2c 20 65 78 70 61 6e 64 20 74 68 65 20 66 69 6c , expand the fil
2db0: 65 2c 20 61 6e 64 0a 09 23 20 20 20 20 20 20 20 e, and..#
2dc0: 20 20 20 20 20 67 65 6e 65 72 61 74 65 20 69 6d generate im
2dd0: 70 6f 72 74 20 69 6e 73 74 72 75 63 74 69 6f 6e port instruction
2de0: 73 2e 0a 0a 09 73 65 74 20 61 72 63 68 69 76 65 s....set archive
2df0: 20 5b 3a 3a 66 69 6c 65 20 6a 6f 69 6e 20 5b 24 [::file join [$
2e00: 6d 79 70 72 6f 6a 65 63 74 20 66 75 6c 6c 70 61 myproject fullpa
2e10: 74 68 5d 20 24 6d 79 70 61 74 68 5d 0a 09 73 65 th] $mypath]..se
2e20: 74 20 61 63 20 20 20 20 20 20 5b 6f 70 65 6e 20 t ac [open
2e30: 24 61 72 63 68 69 76 65 20 72 5d 0a 09 66 63 6f $archive r]..fco
2e40: 6e 66 69 67 75 72 65 20 24 61 63 20 2d 74 72 61 nfigure $ac -tra
2e50: 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a nslation binary.
2e60: 0a 09 23 20 46 69 72 73 74 20 74 72 61 76 65 72 ..# First traver
2e70: 73 65 20 74 68 65 20 65 78 70 61 6e 73 69 6f 6e se the expansion
2e80: 20 67 72 61 70 68 2c 20 74 68 69 73 20 67 69 76 graph, this giv
2e90: 65 73 20 75 73 20 74 68 65 0a 09 23 20 72 65 76 es us the..# rev
2ea0: 69 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6f 72 isions in the or
2eb0: 64 65 72 20 77 65 20 68 61 76 65 20 74 6f 20 65 der we have to e
2ec0: 78 70 61 6e 64 20 74 68 65 6d 2c 20 77 68 69 63 xpand them, whic
2ed0: 68 20 77 65 20 64 6f 2e 0a 0a 09 73 65 74 20 6d h we do....set m
2ee0: 61 78 20 5b 6c 6c 65 6e 67 74 68 20 5b 24 65 78 ax [llength [$ex
2ef0: 20 6e 6f 64 65 73 5d 5d 0a 09 73 65 74 20 6d 79 nodes]]..set my
2f00: 69 6d 70 6f 72 74 20 30 0a 0a 09 67 74 63 6f 72 import 0...gtcor
2f10: 65 20 64 61 74 61 63 6d 64 20 20 20 5b 6d 79 6d e datacmd [mym
2f20: 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74 61 ethod ExpandData
2f30: 5d 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d 61 74 ]..gtcore format
2f40: 63 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 cmd [mymethod Ex
2f50: 70 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67 74 63 pandFormat]..gtc
2f60: 6f 72 65 20 73 6f 72 74 63 6d 64 20 20 20 5b 6d ore sortcmd [m
2f70: 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53 6f ymethod ExpandSo
2f80: 72 74 5d 0a 09 67 74 63 6f 72 65 20 73 61 76 65 rt]..gtcore save
2f90: 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 cmd [mymethod
2fa0: 45 78 70 61 6e 64 31 20 24 61 63 20 24 64 69 72 Expand1 $ac $dir
2fb0: 20 24 6d 61 78 5d 0a 0a 09 67 74 63 6f 72 65 20 $max]...gtcore
2fc0: 74 72 61 76 65 72 73 65 20 24 65 78 20 7b 45 78 traverse $ex {Ex
2fd0: 70 61 6e 64 69 6e 67 20 72 65 76 69 73 69 6f 6e panding revision
2fe0: 73 2e 2e 2e 7d 0a 09 63 6c 6f 73 65 20 24 61 63 s...}..close $ac
2ff0: 0a 0a 09 23 20 4e 6f 77 20 74 72 61 76 65 72 73 ...# Now travers
3000: 65 20 74 68 65 20 69 6d 70 6f 72 74 20 67 72 61 e the import gra
3010: 70 68 2c 20 74 68 69 73 20 62 75 69 6c 64 73 20 ph, this builds
3020: 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a the instruction.
3030: 09 23 20 6d 61 70 20 66 6f 72 20 74 68 65 20 66 .# map for the f
3040: 6f 73 73 69 6c 20 64 65 6c 74 61 73 2e 0a 0a 09 ossil deltas....
3050: 67 74 63 6f 72 65 20 64 61 74 61 63 6d 64 20 20 gtcore datacmd
3060: 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e [mymethod Expan
3070: 64 44 61 74 61 5d 0a 09 67 74 63 6f 72 65 20 66 dData]..gtcore f
3080: 6f 72 6d 61 74 63 6d 64 20 5b 6d 79 6d 65 74 68 ormatcmd [mymeth
3090: 6f 64 20 45 78 70 61 6e 64 46 6f 72 6d 61 74 5d od ExpandFormat]
30a0: 0a 09 67 74 63 6f 72 65 20 73 6f 72 74 63 6d 64 ..gtcore sortcmd
30b0: 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 [mymethod Exp
30c0: 61 6e 64 53 6f 72 74 5d 0a 09 67 74 63 6f 72 65 andSort]..gtcore
30d0: 20 73 61 76 65 63 6d 64 20 20 20 5b 6d 79 6d 65 savecmd [myme
30e0: 74 68 6f 64 20 45 78 70 61 6e 64 32 5d 0a 0a 09 thod Expand2]...
30f0: 73 65 74 20 6d 79 69 6d 70 6f 72 74 20 7b 7d 0a set myimport {}.
3100: 09 67 74 63 6f 72 65 20 74 72 61 76 65 72 73 65 .gtcore traverse
3110: 20 24 7a 70 20 7b 47 65 6e 65 72 61 74 69 6e 67 $zp {Generating
3120: 20 72 65 76 69 73 69 6f 6e 20 6f 72 64 65 72 20 revision order
3130: 66 6f 72 20 69 6d 70 6f 72 74 2e 2e 2e 7d 0a 09 for import...}..
3140: 73 65 74 20 66 69 6c 65 6d 61 70 20 24 6d 79 69 set filemap $myi
3150: 6d 70 6f 72 74 0a 09 75 6e 73 65 74 20 6d 79 69 mport..unset myi
3160: 6d 70 6f 72 74 0a 0a 09 23 20 41 6e 64 20 62 61 mport...# And ba
3170: 63 6b 20 74 6f 20 69 6d 70 6f 72 74 20 63 6f 6e ck to import con
3180: 74 72 6f 6c 0a 0a 09 24 65 78 20 64 65 73 74 72 trol...$ex destr
3190: 6f 79 0a 09 24 7a 70 20 64 65 73 74 72 6f 79 0a oy..$zp destroy.
31a0: 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 ..return [list $
31b0: 66 69 6c 65 6d 61 70 20 24 72 65 76 6d 61 70 5d filemap $revmap]
31c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
31d0: 6f 64 20 45 78 70 61 6e 64 44 61 74 61 20 20 20 od ExpandData
31e0: 7b 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 20 72 {graph node} { r
31f0: 65 74 75 72 6e 20 5b 24 67 72 61 70 68 20 6e 6f eturn [$graph no
3200: 64 65 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76 de get $node rev
3210: 6e 72 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 nr] }. method
3220: 20 45 78 70 61 6e 64 46 6f 72 6d 61 74 20 7b 67 ExpandFormat {g
3230: 72 61 70 68 20 69 74 65 6d 7d 20 7b 20 72 65 74 raph item} { ret
3240: 75 72 6e 20 3c 5b 6c 69 6e 64 65 78 20 24 69 74 urn <[lindex $it
3250: 65 6d 20 31 5d 3e 20 7d 20 3b 20 23 20 72 65 76 em 1]> } ; # rev
3260: 6e 72 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 nr. method Ex
3270: 70 61 6e 64 53 6f 72 74 20 20 20 7b 67 72 61 70 pandSort {grap
3280: 68 20 63 61 6e 64 69 64 61 74 65 73 7d 20 7b 0a h candidates} {.
3290: 09 23 20 63 61 6e 64 69 64 61 74 65 73 20 3d 20 .# candidates =
32a0: 6c 69 73 74 28 69 74 65 6d 29 2c 20 69 74 65 6d list(item), item
32b0: 20 3d 20 6c 69 73 74 28 6e 6f 64 65 20 72 65 76 = list(node rev
32c0: 6e 72 29 0a 09 23 20 53 6f 72 74 20 62 79 20 6e nr)..# Sort by n
32d0: 6f 64 65 20 61 6e 64 20 72 65 76 6e 72 20 2d 3e ode and revnr ->
32e0: 20 54 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 Trunk revisions
32f0: 20 63 6f 6d 65 20 66 69 72 73 74 2e 0a 09 72 65 come first...re
3300: 74 75 72 6e 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 turn [lsort -ind
3310: 65 78 20 31 20 2d 64 69 63 74 20 5b 6c 73 6f 72 ex 1 -dict [lsor
3320: 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69 63 74 t -index 0 -dict
3330: 20 24 63 61 6e 64 69 64 61 74 65 73 5d 5d 0a 20 $candidates]].
3340: 20 20 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 }. method
3350: 45 78 70 61 6e 64 31 20 7b 63 68 61 6e 20 64 69 Expand1 {chan di
3360: 72 20 6d 61 78 20 67 72 61 70 68 20 6e 6f 64 65 r max graph node
3370: 7d 20 7b 0a 09 6c 6f 67 20 70 72 6f 67 72 65 73 } {..log progres
3380: 73 20 33 20 66 69 6c 65 20 24 6d 79 69 6d 70 6f s 3 file $myimpo
3390: 72 74 20 24 6d 61 78 20 3b 20 69 6e 63 72 20 6d rt $max ; incr m
33a0: 79 69 6d 70 6f 72 74 0a 0a 09 73 65 74 20 72 65 yimport...set re
33b0: 76 6e 72 20 20 20 20 20 20 20 20 20 20 20 5b 24 vnr [$
33c0: 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 graph node get $
33d0: 6e 6f 64 65 20 72 65 76 6e 72 5d 0a 09 73 65 74 node revnr]..set
33e0: 20 66 6e 61 6d 65 20 20 20 20 20 20 20 20 20 20 fname
33f0: 72 24 72 65 76 6e 72 0a 09 73 74 72 75 63 74 3a r$revnr..struct:
3400: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 24 67 :list assign [$g
3410: 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e raph node get $n
3420: 6f 64 65 20 74 65 78 74 5d 20 6f 66 66 73 65 74 ode text] offset
3430: 20 6c 65 6e 67 74 68 0a 0a 09 69 66 20 7b 24 6c length...if {$l
3440: 65 6e 67 74 68 20 3c 20 30 7d 20 7b 0a 09 20 20 ength < 0} {..
3450: 20 20 73 65 74 20 64 61 74 61 20 22 22 0a 09 7d set data ""..}
3460: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 65 else {.. see
3470: 6b 20 24 63 68 61 6e 20 24 6f 66 66 73 65 74 20 k $chan $offset
3480: 73 74 61 72 74 0a 09 20 20 20 20 73 65 74 20 64 start.. set d
3490: 61 74 61 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 ata [string map
34a0: 7b 40 40 20 40 7d 20 5b 72 65 61 64 20 24 63 68 {@@ @} [read $ch
34b0: 61 6e 20 24 6c 65 6e 67 74 68 5d 5d 0a 09 7d 0a an $length]]..}.
34c0: 0a 09 69 66 20 7b 21 5b 24 67 72 61 70 68 20 6e ..if {![$graph n
34d0: 6f 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6e ode keyexists $n
34e0: 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b ode __base__]} {
34f0: 0a 09 20 20 20 20 23 20 46 75 6c 6c 20 74 65 78 .. # Full tex
3500: 74 20 6e 6f 64 65 2e 20 47 65 74 20 74 68 65 20 t node. Get the
3510: 64 61 74 61 2c 20 64 65 63 6f 64 65 20 69 74 2c data, decode it,
3520: 20 61 6e 64 20 73 61 76 65 2e 0a 0a 09 20 20 20 and save....
3530: 20 6c 6f 67 20 77 72 69 74 65 20 38 20 66 69 6c log write 8 fil
3540: 65 20 7b 45 78 70 61 6e 64 69 6e 67 20 3c 24 72 e {Expanding <$r
3550: 65 76 6e 72 3e 2c 20 66 75 6c 6c 20 74 65 78 74 evnr>, full text
3560: 7d 0a 0a 09 20 20 20 20 66 69 6c 65 75 74 69 6c }... fileutil
3570: 3a 3a 77 72 69 74 65 46 69 6c 65 20 2d 74 72 61 ::writeFile -tra
3580: 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 20 nslation binary
3590: 24 64 69 72 2f 24 66 6e 61 6d 65 20 24 64 61 74 $dir/$fname $dat
35a0: 61 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 a..} else {..
35b0: 20 23 20 44 65 6c 74 61 20 6e 6f 64 65 2e 20 5f # Delta node. _
35c0: 5f 62 61 73 65 5f 5f 20 69 73 20 74 68 65 20 6e _base__ is the n
35d0: 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 ame of the file
35e0: 63 6f 6e 74 61 69 6e 69 6e 67 0a 09 20 20 20 20 containing..
35f0: 23 20 74 68 65 20 62 61 73 65 6c 69 6e 65 2e 20 # the baseline.
3600: 54 68 65 20 70 61 74 63 68 20 69 73 20 61 74 20 The patch is at
3610: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 6f the specified lo
3620: 63 61 74 69 6f 6e 20 6f 66 0a 09 20 20 20 20 23 cation of.. #
3630: 20 74 68 65 20 61 72 63 68 69 76 65 20 66 69 6c the archive fil
3640: 65 2e 0a 0a 09 20 20 20 20 73 65 74 20 66 62 61 e.... set fba
3650: 73 65 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 se [$graph node
3660: 67 65 74 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 get $node __base
3670: 5f 5f 5d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 __].. log wri
3680: 74 65 20 38 20 66 69 6c 65 20 7b 45 78 70 61 6e te 8 file {Expan
3690: 64 69 6e 67 20 3c 24 72 65 76 6e 72 3e 2c 20 69 ding <$revnr>, i
36a0: 73 20 64 65 6c 74 61 20 6f 66 20 3c 24 66 62 61 s delta of <$fba
36b0: 73 65 3e 7d 0a 0a 09 20 20 20 20 73 65 74 20 62 se>}... set b
36c0: 61 73 65 20 5b 66 69 6c 65 75 74 69 6c 3a 3a 63 ase [fileutil::c
36d0: 61 74 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 at -translation
36e0: 62 69 6e 61 72 79 20 24 64 69 72 2f 24 66 62 61 binary $dir/$fba
36f0: 73 65 5d 0a 0a 09 20 20 20 20 23 20 57 72 69 74 se]... # Writ
3700: 69 6e 67 20 74 68 65 20 70 61 74 63 68 20 74 6f ing the patch to
3710: 20 64 69 73 6b 20 69 73 20 6a 75 73 74 20 66 6f disk is just fo
3720: 72 20 62 65 74 74 65 72 0a 09 20 20 20 20 23 20 r better.. #
3730: 64 65 62 75 67 67 69 6e 67 2e 20 49 74 20 69 73 debugging. It is
3740: 20 6e 6f 74 20 75 73 65 64 20 6f 74 68 65 72 77 not used otherw
3750: 69 73 65 2e 0a 09 20 20 20 20 66 69 6c 65 75 74 ise... fileut
3760: 69 6c 3a 3a 77 72 69 74 65 46 69 6c 65 20 24 64 il::writeFile $d
3770: 69 72 2f 72 70 61 74 63 68 20 24 64 61 74 61 0a ir/rpatch $data.
3780: 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 . fileutil::w
3790: 72 69 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c riteFile -transl
37a0: 61 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 ation binary $di
37b0: 72 2f 24 66 6e 61 6d 65 20 5c 0a 09 09 5b 41 70 r/$fname \...[Ap
37c0: 70 6c 79 20 24 62 61 73 65 20 24 64 61 74 61 5d ply $base $data]
37d0: 0a 09 7d 0a 0a 09 23 20 50 6f 73 74 20 74 6f 20 ..}...# Post to
37e0: 61 6c 6c 20 73 75 63 63 65 73 73 6f 72 73 20 74 all successors t
37f0: 68 61 74 20 74 68 65 20 6a 75 73 74 20 67 65 6e hat the just gen
3800: 65 72 61 74 65 64 20 66 69 6c 65 20 69 73 20 74 erated file is t
3810: 68 65 69 72 0a 09 23 20 62 61 73 65 6c 69 6e 65 heir..# baseline
3820: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20 ....foreach out
3830: 5b 24 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f [$graph nodes -o
3840: 75 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 ut $node] {..
3850: 20 24 67 72 61 70 68 20 6e 6f 64 65 20 73 65 74 $graph node set
3860: 20 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 20 24 $out __base__ $
3870: 66 6e 61 6d 65 0a 09 7d 0a 09 72 65 74 75 72 6e fname..}..return
3880: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 . }.. proc
3890: 20 41 70 70 6c 79 20 7b 62 61 73 65 20 64 65 6c Apply {base del
38a0: 74 61 7d 20 7b 0a 09 23 20 62 61 73 65 20 20 3d ta} {..# base =
38b0: 20 62 61 73 65 20 74 65 78 74 2e 0a 09 23 20 64 base text...# d
38c0: 65 6c 74 61 20 3d 20 64 65 6c 74 61 20 69 6e 20 elta = delta in
38d0: 72 63 73 20 66 6f 72 6d 61 74 2e 0a 09 23 0a 09 rcs format...#..
38e0: 23 20 42 6f 74 68 20 73 74 72 69 6e 67 73 20 61 # Both strings a
38f0: 72 65 20 75 6e 65 6e 63 6f 64 65 64 2c 20 69 2e re unencoded, i.
3900: 65 2e 20 74 68 69 6e 67 73 20 6c 69 6b 65 20 40 e. things like @
3910: 40 2c 20 65 74 63 2e 20 68 61 76 65 0a 09 23 20 @, etc. have..#
3920: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 65 70 already been rep
3930: 6c 61 63 65 64 20 77 69 74 68 20 74 68 65 69 72 laced with their
3940: 20 70 72 6f 70 65 72 20 63 68 61 72 61 63 74 65 proper characte
3950: 72 73 2e 0a 09 23 0a 09 23 20 52 65 74 75 72 6e rs...#..# Return
3960: 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 70 61 value is the pa
3970: 74 63 68 65 64 20 74 65 78 74 2e 0a 0a 09 73 65 tched text....se
3980: 74 20 62 61 73 65 20 5b 73 70 6c 69 74 20 24 62 t base [split $b
3990: 61 73 65 20 5c 6e 5d 0a 09 73 65 74 20 62 6c 65 ase \n]..set ble
39a0: 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 62 61 73 65 n [llength $base
39b0: 5d 0a 09 73 65 74 20 6f 6f 66 66 20 30 0a 09 73 ]..set ooff 0..s
39c0: 65 74 20 72 65 73 20 22 22 0a 0a 09 73 65 74 20 et res ""...set
39d0: 6c 69 6e 65 73 20 20 5b 73 70 6c 69 74 20 24 64 lines [split $d
39e0: 65 6c 74 61 20 5c 6e 5d 0a 09 73 65 74 20 6e 6c elta \n]..set nl
39f0: 69 6e 65 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6c ines [llength $l
3a00: 69 6e 65 73 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 ines]...log writ
3a10: 65 20 31 31 20 66 69 6c 65 20 7b 42 61 73 65 20 e 11 file {Base
3a20: 20 6c 69 6e 65 73 20 3d 20 24 62 6c 65 6e 7d 0a lines = $blen}.
3a30: 09 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 .log write 11 fi
3a40: 6c 65 20 7b 44 65 6c 74 61 20 6c 69 6e 65 73 20 le {Delta lines
3a50: 3d 20 24 6e 6c 69 6e 65 73 7d 0a 0a 09 66 6f 72 = $nlines}...for
3a60: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c {set i 0} {$i <
3a70: 20 24 6e 6c 69 6e 65 73 7d 20 7b 7d 20 7b 0a 09 $nlines} {} {..
3a80: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 log write 11
3a90: 20 66 69 6c 65 20 7b 20 20 20 20 40 20 24 69 20 file { @ $i
3aa0: 3d 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 = [lindex $lines
3ab0: 20 24 69 5d 7d 0a 09 20 20 20 20 6c 6f 67 20 77 $i]}.. log w
3ac0: 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 6f rite 11 file { o
3ad0: 6f 66 66 20 24 6f 6f 66 66 7d 0a 0a 09 20 20 20 off $ooff}...
3ae0: 20 69 66 20 7b 21 5b 72 65 67 65 78 70 20 7b 5e if {![regexp {^
3af0: 28 5b 61 64 5d 29 28 5c 64 2b 29 5c 73 28 5c 64 ([ad])(\d+)\s(\d
3b00: 2b 29 24 7d 20 5b 6c 69 6e 64 65 78 20 24 6c 69 +)$} [lindex $li
3b10: 6e 65 73 20 24 69 5d 20 2d 3e 20 63 6d 64 20 73 nes $i] -> cmd s
3b20: 6c 20 63 6e 5d 7d 20 7b 0a 09 09 74 72 6f 75 62 l cn]} {...troub
3b30: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 42 61 64 le internal "Bad
3b40: 20 65 64 20 63 6f 6d 6d 61 6e 64 20 27 5b 6c 69 ed command '[li
3b50: 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69 5d 27 ndex $lines $i]'
3b60: 22 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 6c ".. }... l
3b70: 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 og write 11 file
3b80: 20 7b 20 20 63 6d 64 20 24 63 6d 64 7d 0a 09 20 { cmd $cmd}..
3b90: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 log write 11
3ba0: 66 69 6c 65 20 7b 20 20 20 73 6c 20 24 73 6c 7d file { sl $sl}
3bb0: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
3bc0: 31 31 20 66 69 6c 65 20 7b 20 20 20 63 6e 20 24 11 file { cn $
3bd0: 63 6e 7d 0a 0a 09 20 20 20 20 69 6e 63 72 20 69 cn}... incr i
3be0: 0a 09 20 20 20 20 73 65 74 20 65 6c 20 5b 65 78 .. set el [ex
3bf0: 70 72 20 7b 24 73 6c 20 2b 20 24 63 6e 7d 5d 0a pr {$sl + $cn}].
3c00: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
3c10: 31 31 20 66 69 6c 65 20 7b 20 20 20 65 6c 20 24 11 file { el $
3c20: 65 6c 7d 0a 0a 09 20 20 20 20 73 77 69 74 63 68 el}... switch
3c30: 20 2d 65 78 61 63 74 20 2d 2d 20 24 63 6d 64 20 -exact -- $cmd
3c40: 7b 0a 09 09 64 20 7b 0a 09 09 20 20 20 20 69 6e {...d {... in
3c50: 63 72 20 73 6c 20 2d 31 0a 09 09 20 20 20 20 69 cr sl -1... i
3c60: 6e 63 72 20 65 6c 20 2d 31 0a 09 09 20 20 20 20 ncr el -1...
3c70: 69 66 20 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 7d if {$sl < $ooff}
3c80: 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 { trouble inter
3c90: 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e 20 62 65 nal {Deletion be
3ca0: 66 6f 72 65 20 6c 61 73 74 20 65 64 69 74 7d 20 fore last edit}
3cb0: 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c 20 }... if {$sl
3cc0: 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 > $blen} { troub
3cd0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c le internal {Del
3ce0: 65 74 69 6f 6e 20 70 61 73 74 20 66 69 6c 65 20 etion past file
3cf0: 65 6e 64 7d 20 7d 0a 09 09 20 20 20 20 69 66 20 end} }... if
3d00: 7b 24 65 6c 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 {$el > $blen} {
3d10: 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c trouble internal
3d20: 20 7b 44 65 6c 65 74 69 6f 6e 20 62 65 79 6f 6e {Deletion beyon
3d30: 64 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 09 09 d file end} }...
3d40: 20 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c foreach x [l
3d50: 72 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 range $base $oof
3d60: 66 20 24 73 6c 5d 20 7b 20 6c 61 70 70 65 6e 64 f $sl] { lappend
3d70: 20 72 65 73 20 24 78 20 7d 0a 09 09 20 20 20 20 res $x }...
3d80: 73 65 74 20 20 6f 6f 66 66 20 24 65 6c 0a 09 09 set ooff $el...
3d90: 7d 0a 09 09 61 20 7b 0a 09 09 20 20 20 20 69 66 }...a {... if
3da0: 20 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b {$sl < $ooff} {
3db0: 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 trouble interna
3dc0: 6c 20 7b 49 6e 73 65 72 74 20 62 65 66 6f 72 65 l {Insert before
3dd0: 20 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 09 last edit} }...
3de0: 20 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 62 if {$sl > $b
3df0: 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 len} { trouble i
3e00: 6e 74 65 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20 nternal {Insert
3e10: 70 61 73 74 20 66 69 6c 65 20 65 6e 64 7d 20 7d past file end} }
3e20: 0a 0a 09 09 20 20 20 20 66 6f 72 65 61 63 68 20 .... foreach
3e30: 78 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65 20 x [lrange $base
3e40: 24 6f 6f 66 66 20 24 73 6c 5d 20 20 20 20 20 20 $ooff $sl]
3e50: 20 20 20 20 20 20 20 7b 20 6c 61 70 70 65 6e 64 { lappend
3e60: 20 72 65 73 20 24 78 20 7d 0a 09 09 20 20 20 20 res $x }...
3e70: 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 foreach x [lrang
3e80: 65 20 24 6c 69 6e 65 73 20 24 69 20 5b 65 78 70 e $lines $i [exp
3e90: 72 20 7b 24 69 20 2b 20 24 63 6e 7d 5d 5d 20 7b r {$i + $cn}]] {
3ea0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 78 20 lappend res $x
3eb0: 7d 0a 09 09 20 20 20 20 73 65 74 20 6f 6f 66 66 }... set ooff
3ec0: 20 24 73 6c 0a 09 09 20 20 20 20 69 6e 63 72 20 $sl... incr
3ed0: 69 20 24 63 6e 0a 09 09 7d 0a 09 20 20 20 20 7d i $cn...}.. }
3ee0: 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 78 20 5b ..}..foreach x [
3ef0: 6c 72 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f lrange $base $oo
3f00: 66 66 20 65 6e 64 5d 20 7b 20 6c 61 70 70 65 6e ff end] { lappen
3f10: 64 20 72 65 73 20 24 78 20 7d 0a 09 72 65 74 75 d res $x }..retu
3f20: 72 6e 20 5b 6a 6f 69 6e 20 24 72 65 73 20 5c 6e rn [join $res \n
3f30: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 ]. }.. met
3f40: 68 6f 64 20 45 78 70 61 6e 64 32 20 7b 67 72 61 hod Expand2 {gra
3f50: 70 68 20 6e 6f 64 65 7d 20 7b 0a 09 73 65 74 20 ph node} {..set
3f60: 72 65 76 6e 72 20 5b 24 67 72 61 70 68 20 6e 6f revnr [$graph no
3f70: 64 65 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76 de get $node rev
3f80: 6e 72 5d 0a 0a 09 23 20 46 69 72 73 74 20 69 6d nr]...# First im
3f90: 70 6f 72 74 20 74 68 65 20 66 69 6c 65 2e 0a 09 port the file...
3fa0: 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70 6f 72 74 lappend myimport
3fb0: 20 5b 6c 69 73 74 20 41 20 72 24 72 65 76 6e 72 [list A r$revnr
3fc0: 20 7b 7d 5d 0a 0a 09 69 66 20 7b 5b 24 67 72 61 {}]...if {[$gra
3fd0: 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 69 73 74 ph node keyexist
3fe0: 73 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f s $node __base__
3ff0: 5d 7d 20 7b 0a 09 20 20 20 20 23 20 44 65 6c 74 ]} {.. # Delt
4000: 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 73 65 5f 5f a node. __base__
4010: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 is the name of
4020: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e the file contain
4030: 69 6e 67 0a 09 20 20 20 20 23 20 74 68 65 20 62 ing.. # the b
4040: 61 73 65 6c 69 6e 65 2e 20 47 65 6e 65 72 61 74 aseline. Generat
4050: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f e instruction to
4060: 20 6d 61 6b 65 20 74 68 65 20 64 65 6c 74 61 20 make the delta
4070: 61 73 0a 09 20 20 20 20 23 20 77 65 6c 6c 2e 0a as.. # well..
4080: 0a 09 20 20 20 20 73 65 74 20 66 62 61 73 65 20 .. set fbase
4090: 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 [$graph node get
40a0: 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d $node __base__]
40b0: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 .. lappend my
40c0: 69 6d 70 6f 72 74 20 5b 6c 69 73 74 20 44 20 72 import [list D r
40d0: 24 72 65 76 6e 72 20 72 24 66 62 61 73 65 5d 0a $revnr r$fbase].
40e0: 09 7d 0a 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 .}...# Post to a
40f0: 6c 6c 20 73 75 63 63 65 73 73 6f 72 73 20 74 68 ll successors th
4100: 61 74 20 74 68 65 20 6a 75 73 74 20 67 65 6e 65 at the just gene
4110: 72 61 74 65 64 20 66 69 6c 65 20 69 73 20 74 68 rated file is th
4120: 65 69 72 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e eir..# baseline.
4130: 20 45 78 63 65 70 74 69 6f 6e 3a 20 54 68 6f 73 Exception: Thos
4140: 65 20 77 68 69 63 68 20 61 76 65 20 61 6c 72 65 e which ave alre
4150: 61 64 79 20 61 20 62 61 73 65 6c 69 6e 65 20 73 ady a baseline s
4160: 65 74 2e 0a 09 23 20 54 6f 67 65 74 68 65 72 20 et...# Together
4170: 77 69 74 68 20 74 68 65 20 73 6f 72 74 69 6e 67 with the sorting
4180: 20 6f 66 20 74 72 75 6e 6b 20 72 65 76 69 73 69 of trunk revisi
4190: 6f 6e 73 20 66 69 72 73 74 20 74 68 65 20 74 72 ons first the tr
41a0: 75 6e 6b 0a 09 23 20 73 68 6f 75 6c 64 20 6f 6e unk..# should on
41b0: 65 20 75 6e 69 6e 74 65 72 75 70 74 65 64 20 6c e uninterupted l
41c0: 69 6e 65 2c 20 77 69 74 68 20 62 72 61 6e 63 68 ine, with branch
41d0: 20 72 6f 6f 74 73 20 5f 6e 6f 74 5f 20 64 65 6c roots _not_ del
41e0: 74 61 0a 09 23 20 63 6f 6d 70 72 65 73 73 65 64 ta..# compressed
41f0: 20 70 65 72 20 74 68 65 69 72 20 62 72 61 6e 63 per their branc
4200: 68 65 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 6f hes....foreach o
4210: 75 74 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 73 ut [$graph nodes
4220: 20 2d 6f 75 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 -out $node] {..
4230: 20 20 20 20 69 66 20 7b 5b 24 67 72 61 70 68 20 if {[$graph
4240: 6e 6f 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 node keyexists $
4250: 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 63 out __base__]} c
4260: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 24 67 72 ontinue.. $gr
4270: 61 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f 75 aph node set $ou
4280: 74 20 5f 5f 62 61 73 65 5f 5f 20 24 72 65 76 6e t __base__ $revn
4290: 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 r..}..return.
42a0: 20 7d 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 }.. variable
42b0: 20 6d 79 69 6d 70 6f 72 74 0a 0a 20 20 20 20 23 myimport.. #
42c0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
42d0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
42e0: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 74 ######. ## St
42f0: 61 74 65 0a 0a 20 20 20 20 76 61 72 69 61 62 6c ate.. variabl
4300: 65 20 6d 79 69 64 20 20 20 20 20 20 20 20 20 20 e myid
4310: 20 20 20 20 7b 7d 20 3b 20 23 20 46 69 6c 65 20 {} ; # File
4320: 69 64 20 69 6e 20 74 68 65 20 70 65 72 73 69 73 id in the persis
4330: 74 65 6e 74 20 73 74 61 74 65 2e 0a 20 20 20 20 tent state..
4340: 76 61 72 69 61 62 6c 65 20 6d 79 70 61 74 68 20 variable mypath
4350: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 {} ;
4360: 23 20 50 61 74 68 20 6f 66 20 74 68 65 20 66 69 # Path of the fi
4370: 6c 65 27 73 20 72 63 73 20 61 72 63 68 69 76 65 le's rcs archive
4380: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
4390: 79 75 73 72 70 61 74 68 20 20 20 20 20 20 20 20 yusrpath
43a0: 20 7b 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20 {} ; # Path of
43b0: 74 68 65 20 66 69 6c 65 20 61 73 20 73 65 65 6e the file as seen
43c0: 20 62 79 20 75 73 65 72 73 2e 0a 20 20 20 20 76 by users.. v
43d0: 61 72 69 61 62 6c 65 20 6d 79 65 78 65 63 75 74 ariable myexecut
43e0: 61 62 6c 65 20 20 20 20 20 20 30 20 20 3b 20 23 able 0 ; #
43f0: 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 20 27 66 Boolean flag 'f
4400: 69 6c 65 20 65 78 65 63 75 74 61 62 6c 65 27 2e ile executable'.
4410: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
4420: 70 72 6f 6a 65 63 74 20 20 20 20 20 20 20 20 20 project
4430: 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 {} ; # Reference
4440: 20 74 6f 20 74 68 65 20 70 72 6f 6a 65 63 74 20 to the project
4450: 6f 62 6a 65 63 74 0a 09 09 09 09 20 20 20 20 23 object..... #
4460: 20 74 68 65 20 66 69 6c 65 20 62 65 6c 6f 6e 67 the file belong
4470: 73 20 74 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 s to.. variab
4480: 6c 65 20 6d 79 72 65 76 20 2d 61 72 72 61 79 20 le myrev -array
4490: 20 20 20 20 20 7b 7d 20 3b 20 23 20 4d 61 70 73 {} ; # Maps
44a0: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 revision number
44b0: 20 74 6f 20 74 68 65 0a 09 09 09 09 20 20 20 20 to the.....
44c0: 23 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 76 # associated rev
44d0: 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2e 0a 20 20 ision object..
44e0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65 76 variable myrev
44f0: 69 73 69 6f 6e 73 20 20 20 20 20 20 20 7b 7d 20 isions {}
4500: 3b 20 23 20 53 61 6d 65 20 61 73 20 6d 79 72 65 ; # Same as myre
4510: 76 2c 20 62 75 74 20 61 20 6c 69 73 74 2c 0a 09 v, but a list,..
4520: 09 09 09 20 20 20 20 23 20 67 69 76 69 6e 67 20 ... # giving
4530: 75 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 0a us the order of.
4540: 09 09 09 09 20 20 20 20 23 20 72 65 76 69 73 69 .... # revisi
4550: 6f 6e 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c ons.. variabl
4560: 65 20 6d 79 61 69 64 20 20 20 20 20 20 2d 61 72 e myaid -ar
4570: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 72 ray {} ; # Map r
4580: 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 evision numbers
4590: 74 6f 20 74 68 65 20 69 64 0a 09 09 09 09 20 20 to the id.....
45a0: 20 20 23 20 6f 66 20 74 68 65 20 61 75 74 68 6f # of the autho
45b0: 72 20 77 68 6f 20 63 6f 6d 6d 69 74 74 65 64 0a r who committed.
45c0: 09 09 09 09 20 20 20 20 23 20 69 74 2e 20 54 68 .... # it. Th
45d0: 69 73 20 69 73 20 6c 61 74 65 72 20 61 67 67 72 is is later aggr
45e0: 65 67 61 74 65 64 0a 09 09 09 09 20 20 20 20 23 egated..... #
45f0: 20 77 69 74 68 20 63 6f 6d 6d 69 74 20 6d 65 73 with commit mes
4600: 73 61 67 65 2c 20 62 72 61 6e 63 68 20 6e 61 6d sage, branch nam
4610: 65 0a 09 09 09 09 20 20 20 20 23 20 61 6e 64 20 e..... # and
4620: 70 72 6f 6a 65 63 74 20 69 64 20 66 6f 72 20 61 project id for a
4630: 20 6d 65 74 61 20 69 64 2e 0a 20 20 20 20 76 61 meta id.. va
4640: 72 69 61 62 6c 65 20 6d 79 68 65 61 64 72 65 76 riable myheadrev
4650: 6e 72 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 nr {} ; #
4660: 48 65 61 64 20 72 65 76 69 73 69 6f 6e 20 28 72 Head revision (r
4670: 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 29 0a evision number).
4680: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 variable myp
4690: 72 69 6e 63 69 70 61 6c 20 20 20 20 20 20 20 7b rincipal {
46a0: 7d 20 3b 20 23 20 50 72 69 6e 63 69 70 61 6c 20 } ; # Principal
46b0: 62 72 61 6e 63 68 20 28 62 72 61 6e 63 68 20 6e branch (branch n
46c0: 75 6d 62 65 72 29 2e 0a 09 09 09 09 20 20 20 20 umber)......
46d0: 23 20 43 6f 6e 74 72 61 72 79 20 74 6f 20 74 68 # Contrary to th
46e0: 65 20 6e 61 6d 65 20 74 68 69 73 20 69 73 20 74 e name this is t
46f0: 68 65 0a 09 09 09 09 20 20 20 20 23 20 64 65 66 he..... # def
4700: 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 20 20 20 ault branch..
4710: 20 76 61 72 69 61 62 6c 65 20 6d 79 64 65 70 65 variable mydepe
4720: 6e 64 65 6e 63 69 65 73 20 20 20 20 7b 7d 20 3b ndencies {} ;
4730: 20 23 20 44 69 63 74 69 6f 6e 61 72 79 20 70 61 # Dictionary pa
4740: 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 2c 0a 09 rent -> child,..
4750: 09 09 09 20 20 20 20 23 20 72 65 63 6f 72 64 73 ... # records
4760: 20 70 72 69 6d 61 72 79 20 64 65 70 65 6e 64 65 primary depende
4770: 6e 63 69 65 73 2e 0a 20 20 20 20 76 61 72 69 61 ncies.. varia
4780: 62 6c 65 20 6d 79 69 6d 70 6f 72 74 65 64 20 20 ble myimported
4790: 20 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 0 ; # Boo
47a0: 6c 65 61 6e 20 66 6c 61 67 2e 20 53 65 74 20 69 lean flag. Set i
47b0: 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 09 09 f and only if...
47c0: 09 09 20 20 20 20 23 20 72 65 76 20 31 2e 31 20 .. # rev 1.1
47d0: 6f 66 20 74 68 65 20 66 69 6c 65 20 73 65 65 6d of the file seem
47e0: 69 6e 67 6c 79 0a 09 09 09 09 20 20 20 20 23 20 ingly..... #
47f0: 77 61 73 20 69 6d 70 6f 72 74 65 64 20 69 6e 73 was imported ins
4800: 74 65 61 64 20 6f 66 20 61 64 64 65 64 0a 09 09 tead of added...
4810: 09 09 20 20 20 20 23 20 6e 6f 72 6d 61 6c 6c 79 .. # normally
4820: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
4830: 79 72 6f 6f 74 20 20 20 20 20 20 20 20 20 20 20 yroot
4840: 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 {} ; # Referenc
4850: 65 20 74 6f 20 74 68 65 20 72 65 76 69 73 69 6f e to the revisio
4860: 6e 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 20 20 n object.....
4870: 20 23 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 # holding the r
4880: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 20 20 49 oot revision. I
4890: 74 73 0a 09 09 09 09 20 20 20 20 23 20 6e 75 6d ts..... # num
48a0: 62 65 72 20 75 73 75 61 6c 6c 79 20 69 73 20 27 ber usually is '
48b0: 31 2e 31 27 2e 20 43 61 6e 20 62 65 0a 09 09 09 1.1'. Can be....
48c0: 09 20 20 20 20 23 20 61 20 64 69 66 66 65 72 65 . # a differe
48d0: 6e 74 20 6e 75 6d 62 65 72 2c 20 62 65 63 61 75 nt number, becau
48e0: 73 65 20 6f 66 0a 09 09 09 09 20 20 20 20 23 20 se of..... #
48f0: 67 61 70 73 20 63 72 65 61 74 65 64 20 76 69 61 gaps created via
4900: 20 27 63 76 73 61 64 6d 69 6e 20 2d 6f 27 2e 0a 'cvsadmin -o'..
4910: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 variable myb
4920: 72 61 6e 63 68 65 73 20 2d 61 72 72 61 79 20 7b ranches -array {
4930: 7d 20 3b 20 23 20 4d 61 70 73 20 62 72 61 6e 63 } ; # Maps branc
4940: 68 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 h number to the
4950: 73 79 6d 62 6f 6c 0a 09 09 09 09 20 20 20 20 23 symbol..... #
4960: 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 69 6e 67 object handling
4970: 20 74 68 65 20 62 72 61 6e 63 68 2e 0a 20 20 20 the branch..
4980: 20 76 61 72 69 61 62 6c 65 20 6d 79 74 61 67 73 variable mytags
4990: 20 20 20 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b -array {} ;
49a0: 20 23 20 4d 61 70 73 20 72 65 76 69 73 69 6f 6e # Maps revision
49b0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6c number to the l
49c0: 69 73 74 0a 09 09 09 09 20 20 20 20 23 20 6f 66 ist..... # of
49d0: 20 73 79 6d 62 6f 6c 20 6f 62 6a 65 63 74 73 20 symbol objects
49e0: 66 6f 72 20 74 68 65 20 74 61 67 73 0a 09 09 09 for the tags....
49f0: 09 20 20 20 20 23 20 61 73 73 6f 63 69 61 74 65 . # associate
4a00: 64 20 77 69 74 68 20 74 68 65 20 72 65 76 69 73 d with the revis
4a10: 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c ion.. variabl
4a20: 65 20 6d 79 73 79 6d 62 6f 6c 73 20 20 20 20 20 e mysymbols
4a30: 20 20 20 20 7b 7d 20 3b 20 23 20 53 65 74 20 6f {} ; # Set o
4a40: 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 6e 61 6d f the symbol nam
4a50: 65 73 20 66 6f 75 6e 64 20 69 6e 0a 09 09 09 09 es found in.....
4a60: 20 20 20 20 23 20 74 68 69 73 20 66 69 6c 65 2e # this file.
4a70: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
4a80: 79 62 72 61 6e 63 68 63 6e 74 20 30 20 3b 20 23 ybranchcnt 0 ; #
4a90: 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 62 72 61 Counter for bra
4aa0: 6e 63 68 65 73 2c 20 74 6f 20 72 65 63 6f 72 64 nches, to record
4ab0: 20 74 68 65 69 72 0a 09 09 09 20 20 20 20 20 23 their.... #
4ac0: 20 6f 72 64 65 72 20 6f 66 20 64 65 66 69 6e 69 order of defini
4ad0: 74 69 6f 6e 2e 20 54 68 69 73 20 61 6c 73 6f 20 tion. This also
4ae0: 64 65 66 69 6e 65 73 0a 09 09 09 20 20 20 20 20 defines....
4af0: 23 20 74 68 65 69 72 20 6f 72 64 65 72 20 6f 66 # their order of
4b00: 20 63 72 65 61 74 69 6f 6e 2c 20 77 68 69 63 68 creation, which
4b10: 20 69 73 20 74 68 65 0a 09 09 09 20 20 20 20 20 is the....
4b20: 23 20 72 65 76 65 72 73 65 20 6f 66 20 64 65 66 # reverse of def
4b30: 69 6e 69 74 69 6f 6e 2e 20 20 49 2e 65 2e 20 61 inition. I.e. a
4b40: 20 73 6d 61 6c 6c 65 72 0a 09 09 09 20 20 20 20 smaller....
4b50: 20 23 20 6e 75 6d 62 65 72 20 6d 65 61 6e 73 20 # number means
4b60: 27 44 65 66 69 6e 65 64 20 65 61 72 6c 69 65 72 'Defined earlier
4b70: 27 2c 20 6d 65 61 6e 73 0a 09 09 09 20 20 20 20 ', means....
4b80: 20 23 20 27 43 72 65 61 74 65 64 20 6c 61 74 65 # 'Created late
4b90: 72 27 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c r'... variabl
4ba0: 65 20 6d 79 74 72 75 6e 6b 20 7b 7d 20 3b 20 23 e mytrunk {} ; #
4bb0: 20 44 69 72 65 63 74 20 72 65 66 65 72 65 6e 63 Direct referenc
4bc0: 65 20 74 6f 20 6d 79 70 72 6f 6a 65 63 74 20 2d e to myproject -
4bd0: 3e 20 74 72 75 6e 6b 2e 0a 20 20 20 20 76 61 72 > trunk.. var
4be0: 69 61 62 6c 65 20 6d 79 72 6f 6f 74 73 20 7b 7d iable myroots {}
4bf0: 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 72 6f 6f ; # List of roo
4c00: 74 73 20 69 6e 20 74 68 65 20 66 6f 72 65 73 74 ts in the forest
4c10: 20 6f 66 0a 09 09 09 20 20 23 20 6c 6f 64 27 73 of.... # lod's
4c20: 2e 20 4f 62 6a 65 63 74 20 72 65 66 65 72 65 6e . Object referen
4c30: 63 65 73 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 ces to revisions
4c40: 20 61 6e 64 0a 09 09 09 20 20 23 20 62 72 61 6e and.... # bran
4c50: 63 68 65 73 2e 20 54 68 65 20 6c 61 74 74 65 72 ches. The latter
4c60: 20 63 61 6e 20 61 70 70 65 61 72 20 77 68 65 6e can appear when
4c70: 20 74 68 65 79 0a 09 09 09 20 20 23 20 61 72 65 they.... # are
4c80: 20 73 65 76 65 72 65 64 20 66 72 6f 6d 20 74 68 severed from th
4c90: 65 69 72 20 70 61 72 65 6e 74 2e 0a 0a 20 20 20 eir parent...
4ca0: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 6c 6f 62 variable myblob
4cb0: 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 {} ; # Referenc
4cc0: 65 20 74 6f 20 74 68 65 20 6f 62 6a 65 63 74 20 e to the object
4cd0: 6d 61 6e 61 67 69 6e 67 20 74 68 65 20 62 6c 6f managing the blo
4ce0: 62 0a 09 09 09 20 23 20 69 6e 66 6f 72 6d 61 74 b.... # informat
4cf0: 69 6f 6e 20 28 74 65 78 74 72 61 6e 67 65 20 6f ion (textrange o
4d00: 66 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 f revisions, and
4d10: 0a 09 09 09 20 23 20 64 65 6c 74 61 20 64 65 70 .... # delta dep
4d20: 65 6e 64 65 6e 63 69 65 73 29 20 6f 66 20 74 68 endencies) of th
4d30: 69 73 20 66 69 6c 65 2e 0a 0a 20 20 20 20 23 20 is file... #
4d40: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
4d50: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
4d60: 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 #####. ## Int
4d70: 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 ernal methods..
4d80: 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 method Record
4d90: 42 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 BranchCommits {b
4da0: 72 61 6e 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 ranches} {..fore
4db0: 61 63 68 20 62 72 61 6e 63 68 72 65 76 6e 72 20 ach branchrevnr
4dc0: 24 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 $branches {..
4dd0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 if {[catch {...
4de0: 73 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c set branch [$sel
4df0: 66 20 52 65 76 32 42 72 61 6e 63 68 20 24 62 72 f Rev2Branch $br
4e00: 61 6e 63 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 anchrevnr]..
4e10: 7d 5d 7d 20 7b 0a 09 09 73 65 74 20 62 72 61 6e }]} {...set bran
4e20: 63 68 20 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c ch [$self AddUnl
4e30: 61 62 65 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 abeledBranch [re
4e40: 76 20 32 62 72 61 6e 63 68 6e 72 20 24 62 72 61 v 2branchnr $bra
4e50: 6e 63 68 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 nchrevnr]]..
4e60: 7d 0a 0a 09 20 20 20 20 23 20 52 65 63 6f 72 64 }... # Record
4e70: 20 74 68 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 the commit, jus
4e80: 74 20 61 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 t as revision nu
4e90: 6d 62 65 72 20 66 6f 72 0a 09 20 20 20 20 23 20 mber for.. #
4ea0: 6e 6f 77 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 now. ProcesBranc
4eb0: 68 44 65 70 65 6e 64 65 6e 63 69 65 73 20 77 69 hDependencies wi
4ec0: 6c 6c 20 65 78 74 65 6e 64 20 74 68 61 74 20 69 ll extend that i
4ed0: 74 6f 20 61 0a 09 20 20 20 20 23 20 70 72 6f 70 to a.. # prop
4ee0: 65 72 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 er object refere
4ef0: 6e 63 65 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e nce.... $bran
4f00: 63 68 20 73 65 74 63 68 69 6c 64 72 65 76 6e 72 ch setchildrevnr
4f10: 20 24 62 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d $branchrevnr..}
4f20: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
4f30: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42 method Rev2B
4f40: 72 61 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a ranch {revnr} {.
4f50: 20 20 20 20 20 20 20 20 69 6e 74 65 67 72 69 74 integrit
4f60: 79 20 61 73 73 65 72 74 20 7b 21 5b 72 65 76 20 y assert {![rev
4f70: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 istrunkrevnr $re
4f80: 76 6e 72 5d 7d 20 7b 45 78 70 65 63 74 65 64 20 vnr]} {Expected
4f90: 61 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f a branch revisio
4fa0: 6e 20 6e 75 6d 62 65 72 7d 0a 09 72 65 74 75 72 n number}..retur
4fb0: 6e 20 24 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 n $mybranches([r
4fc0: 65 76 20 32 62 72 61 6e 63 68 6e 72 20 24 72 65 ev 2branchnr $re
4fd0: 76 6e 72 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 vnr]). }..
4fe0: 20 6d 65 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 method AddUnlab
4ff0: 65 6c 65 64 42 72 61 6e 63 68 20 7b 62 72 61 6e eledBranch {bran
5000: 63 68 6e 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 chnr} {..return
5010: 5b 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 [$self AddBranch
5020: 20 75 6e 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e unlabeled-$bran
5030: 63 68 6e 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a chnr $branchnr].
5040: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
5050: 64 20 41 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d d AddBranch {nam
5060: 65 20 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 e branchnr} {..i
5070: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists
5080: 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e mybranches($bran
5090: 63 68 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c chnr)]} {.. l
50a0: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 og write 1 file
50b0: 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 42 "In '$mypath': B
50c0: 72 61 6e 63 68 20 27 24 62 72 61 6e 63 68 6e 72 ranch '$branchnr
50d0: 27 20 6e 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 ' named '[$mybra
50e0: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 nches($branchnr)
50f0: 20 6e 61 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f name]'".. lo
5100: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 g write 1 file "
5110: 43 61 6e 6e 6f 74 20 68 61 76 65 20 73 65 63 6f Cannot have seco
5120: 6e 64 20 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c nd name '$name',
5130: 20 69 67 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 ignoring it"..
5140: 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 return..}..se
5150: 74 20 62 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 t branch [sym %A
5160: 55 54 4f 25 20 62 72 61 6e 63 68 20 24 62 72 61 UTO% branch $bra
5170: 6e 63 68 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 nchnr [$myprojec
5180: 74 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d t getsymbol $nam
5190: 65 5d 20 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e e] $self]..$bran
51a0: 63 68 20 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b ch setposition [
51b0: 69 6e 63 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 incr mybranchcnt
51c0: 5d 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 ]..set mybranche
51d0: 73 28 24 62 72 61 6e 63 68 6e 72 29 20 24 62 72 s($branchnr) $br
51e0: 61 6e 63 68 0a 09 72 65 74 75 72 6e 20 24 62 72 anch..return $br
51f0: 61 6e 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 anch. }..
5200: 6d 65 74 68 6f 64 20 41 64 64 54 61 67 20 7b 6e method AddTag {n
5210: 61 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 ame revnr} {..se
5220: 74 20 74 61 67 20 5b 73 79 6d 20 25 41 55 54 4f t tag [sym %AUTO
5230: 25 20 74 61 67 20 24 72 65 76 6e 72 20 5b 24 6d % tag $revnr [$m
5240: 79 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 yproject getsymb
5250: 6f 6c 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d ol $name] $self]
5260: 0a 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 ..lappend mytags
5270: 28 24 72 65 76 6e 72 29 20 24 74 61 67 0a 09 72 ($revnr) $tag..r
5280: 65 74 75 72 6e 20 24 74 61 67 0a 20 20 20 20 7d eturn $tag. }
5290: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 63 .. method Rec
52a0: 6f 72 64 42 61 73 69 63 44 65 70 65 6e 64 65 6e ordBasicDependen
52b0: 63 69 65 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 cies {revnr next
52c0: 7d 20 7b 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 } {..# Handle th
52d0: 65 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e e revision depen
52e0: 64 65 6e 63 69 65 73 2e 20 52 65 63 6f 72 64 20 dencies. Record
52f0: 74 68 65 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f them for now, do
5300: 0a 09 23 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 ..# nothing with
5310: 20 74 68 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f them yet....# O
5320: 6e 20 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20 n the trunk the
5330: 27 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 'next' field poi
5340: 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 nts to the previ
5350: 6f 75 73 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c ous..# revision,
5360: 20 69 2e 65 2e 20 74 68 65 20 5f 70 61 72 65 6e i.e. the _paren
5370: 74 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e t_ of the curren
5380: 74 20 6f 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a t one. Example:.
5390: 09 23 20 31 2e 36 27 73 20 6e 65 78 74 20 69 73 .# 1.6's next is
53a0: 20 31 2e 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 1.5 (modulo cvs
53b0: 20 61 64 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 admin -o)....#
53c0: 43 6f 6e 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 Contrarily on a
53d0: 62 72 61 6e 63 68 20 74 68 65 20 27 6e 65 78 74 branch the 'next
53e0: 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 ' field points t
53f0: 6f 20 74 68 65 0a 09 23 20 70 72 69 6d 61 72 79 o the..# primary
5400: 20 5f 63 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 _child_ of the
5410: 63 75 72 72 65 6e 74 20 72 65 76 69 73 69 6f 6e current revision
5420: 2e 20 41 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 . As example,..#
5430: 20 31 2e 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 1.1.3.2's 'next
5440: 27 20 77 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e ' will be 1.1.3.
5450: 33 2e 0a 0a 09 23 20 54 68 65 20 27 6e 65 78 74 3....# The 'next
5460: 27 20 66 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 ' field actually
5470: 20 61 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 always refers t
5480: 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 o the revision..
5490: 23 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 # containing the
54a0: 20 64 65 6c 74 61 20 6e 65 65 64 65 64 20 74 6f delta needed to
54b0: 20 72 65 74 72 69 65 76 65 20 74 68 61 74 20 72 retrieve that r
54c0: 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 evision....# The
54d0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 dependencies ne
54e0: 65 64 65 64 20 68 65 72 65 20 61 72 65 20 74 68 eded here are th
54f0: 65 20 6c 6f 67 69 63 61 6c 20 73 74 72 75 63 74 e logical struct
5500: 75 72 65 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 ure,..# parent/c
5510: 68 69 6c 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 hild, and not th
5520: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e e implementation
5530: 20 64 65 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 dependent delta
5540: 0a 09 23 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 ..# pointers....
5550: 69 66 20 7b 24 6e 65 78 74 20 65 71 20 22 22 7d if {$next eq ""}
5560: 20 72 65 74 75 72 6e 0a 09 23 20 20 20 20 20 20 return..#
5570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5580: 20 20 20 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 parent -> ch
5590: 69 6c 64 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 ild..if {[rev is
55a0: 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e trunkrevnr $revn
55b0: 72 5d 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 r]} {.. lappe
55c0: 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 nd mydependencie
55d0: 73 20 24 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 s $next $revnr..
55e0: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 } else {.. la
55f0: 70 70 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e ppend mydependen
5600: 63 69 65 73 20 24 72 65 76 6e 72 20 24 6e 65 78 cies $revnr $nex
5610: 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 t..}..return.
5620: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 }.. method P
5630: 72 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65 70 rocessPrimaryDep
5640: 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 endencies {} {..
5650: 66 6f 72 65 61 63 68 20 7b 70 61 72 65 6e 74 72 foreach {parentr
5660: 65 76 6e 72 20 63 68 69 6c 64 72 65 76 6e 72 7d evnr childrevnr}
5670: 20 24 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 $mydependencies
5680: 20 7b 0a 09 20 20 20 20 73 65 74 20 70 61 72 65 {.. set pare
5690: 6e 74 20 24 6d 79 72 65 76 28 24 70 61 72 65 6e nt $myrev($paren
56a0: 74 72 65 76 6e 72 29 0a 09 20 20 20 20 73 65 74 trevnr).. set
56b0: 20 63 68 69 6c 64 20 20 24 6d 79 72 65 76 28 24 child $myrev($
56c0: 63 68 69 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 childrevnr)..
56d0: 20 24 70 61 72 65 6e 74 20 73 65 74 63 68 69 6c $parent setchil
56e0: 64 20 24 63 68 69 6c 64 0a 09 20 20 20 20 24 63 d $child.. $c
56f0: 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74 20 24 hild setparent $
5700: 70 61 72 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 parent..}..retur
5710: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
5720: 68 6f 64 20 50 72 6f 63 65 73 73 42 72 61 6e 63 hod ProcessBranc
5730: 68 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d hDependencies {}
5740: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 62 72 61 {..foreach {bra
5750: 6e 63 68 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 nchnr branch} [a
5760: 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 rray get mybranc
5770: 68 65 73 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 hes] {.. set
5780: 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 revnr [$branch p
5790: 61 72 65 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 arentrevnr]...
57a0: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi
57b0: 73 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 sts myrev($revnr
57c0: 29 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 )]} {...log writ
57d0: 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d e 1 file "In '$m
57e0: 79 70 61 74 68 27 3a 20 54 68 65 20 62 72 61 6e ypath': The bran
57f0: 63 68 20 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d ch '[$branch nam
5800: 65 5d 27 20 72 65 66 65 72 65 6e 63 65 73 22 0a e]' references".
5810: 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 ..log write 1 fi
5820: 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 le "the bogus re
5830: 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 vision '$revnr'
5840: 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f and will be igno
5850: 72 65 64 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 red."...$branch
5860: 64 65 73 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 destroy...unset
5870: 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e mybranches($bran
5880: 63 68 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 chnr).. } els
5890: 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d e {...set rev $m
58a0: 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 24 yrev($revnr)...$
58b0: 72 65 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 rev addbranch $b
58c0: 72 61 6e 63 68 0a 09 09 24 62 72 61 6e 63 68 20 ranch...$branch
58d0: 73 65 74 70 61 72 65 6e 74 20 24 72 65 76 0a 0a setparent $rev..
58e0: 09 09 23 20 49 66 20 72 65 76 69 73 69 6f 6e 73 ..# If revisions
58f0: 20 77 65 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 were committed
5900: 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 65 on the branch we
5910: 20 73 74 6f 72 65 20 61 0a 09 09 23 20 72 65 66 store a...# ref
5920: 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 62 72 erence to the br
5930: 61 6e 63 68 20 74 68 65 72 65 2c 20 61 6e 64 20 anch there, and
5940: 66 75 72 74 68 65 72 20 64 65 63 6c 61 72 65 0a further declare.
5950: 09 09 23 20 74 68 65 20 66 69 72 73 74 20 63 68 ..# the first ch
5960: 69 6c 64 27 73 20 70 61 72 65 6e 74 20 74 6f 20 ild's parent to
5970: 62 65 20 62 72 61 6e 63 68 27 73 20 70 61 72 65 be branch's pare
5980: 6e 74 2c 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 nt, and...# list
5990: 20 74 68 69 73 20 63 68 69 6c 64 20 69 6e 20 74 this child in t
59a0: 68 65 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 he parent revisi
59b0: 6f 6e 2e 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 on.....if {[$bra
59c0: 6e 63 68 20 68 61 73 63 68 69 6c 64 72 65 76 5d nch haschildrev]
59d0: 7d 20 7b 0a 09 09 20 20 20 20 73 65 74 20 63 68 } {... set ch
59e0: 69 6c 64 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 ildrevnr [$branc
59f0: 68 20 63 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 h childrevnr]...
5a00: 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 24 6d set child $m
5a10: 79 72 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 yrev($childrevnr
5a20: 29 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 )... $branch
5a30: 73 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a setchild $child.
5a40: 0a 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 ... $child se
5a50: 74 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 tparentbranch $b
5a60: 72 61 6e 63 68 0a 09 09 20 20 20 20 24 63 68 69 ranch... $chi
5a70: 6c 64 20 73 65 74 70 61 72 65 6e 74 20 20 20 20 ld setparent
5a80: 20 20 20 24 72 65 76 0a 09 09 20 20 20 20 24 72 $rev... $r
5a90: 65 76 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 ev addchildonbra
5aa0: 6e 63 68 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 nch $child...}..
5ab0: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e }..}..return
5ac0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
5ad0: 6f 64 20 53 6f 72 74 42 72 61 6e 63 68 65 73 20 od SortBranches
5ae0: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 {} {..foreach {r
5af0: 65 76 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 evnr rev} [array
5b00: 20 67 65 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 get myrev] { $r
5b10: 65 76 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20 ev sortbranches
5b20: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
5b30: 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 . method Proc
5b40: 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69 essTagDependenci
5b50: 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 es {} {..foreach
5b60: 20 7b 72 65 76 6e 72 20 74 61 67 6c 69 73 74 7d {revnr taglist}
5b70: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 [array get myta
5b80: 67 73 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 gs] {.. if {!
5b90: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 [info exists myr
5ba0: 65 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 ev($revnr)]} {..
5bb0: 09 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 .set n [llength
5bc0: 24 74 61 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 $taglist]...log
5bd0: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e write 1 file "In
5be0: 20 27 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 '$mypath': The
5bf0: 66 6f 6c 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 following [nsp $
5c00: 6e 20 74 61 67 5d 20 72 65 66 65 72 65 6e 63 65 n tag] reference
5c10: 22 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 "...log write 1
5c20: 66 69 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 file "the bogus
5c30: 72 65 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 revision '$revnr
5c40: 27 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 ' and will be ig
5c50: 6e 6f 72 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 nored."...foreac
5c60: 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b h tag $taglist {
5c70: 0a 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 ... log write
5c80: 20 31 20 66 69 6c 65 20 22 20 20 20 20 5b 24 74 1 file " [$t
5c90: 61 67 20 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 ag name]"...
5ca0: 24 74 61 67 20 64 65 73 74 72 6f 79 0a 09 09 7d $tag destroy...}
5cb0: 0a 09 09 75 6e 73 65 74 20 6d 79 74 61 67 73 28 ...unset mytags(
5cc0: 24 72 65 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 $revnr).. } e
5cd0: 6c 73 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 lse {...set rev
5ce0: 24 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 $myrev($revnr)..
5cf0: 09 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 .foreach tag $ta
5d00: 67 6c 69 73 74 20 7b 0a 09 09 20 20 20 20 24 72 glist {... $r
5d10: 65 76 20 61 64 64 74 61 67 20 20 20 20 24 74 61 ev addtag $ta
5d20: 67 0a 09 09 20 20 20 20 24 74 61 67 20 73 65 74 g... $tag set
5d30: 74 61 67 72 65 76 20 24 72 65 76 0a 09 09 7d 0a tagrev $rev...}.
5d40: 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 . }..}..retur
5d50: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
5d60: 68 6f 64 20 44 65 74 65 72 6d 69 6e 65 54 68 65 hod DetermineThe
5d70: 52 6f 6f 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 RootRevision {}
5d80: 7b 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73 {..# The root is
5d90: 20 74 68 65 20 6f 6e 65 20 72 65 76 69 73 69 6f the one revisio
5da0: 6e 20 77 68 69 63 68 20 68 61 73 20 6e 6f 20 70 n which has no p
5db0: 61 72 65 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 arent. By..# che
5dc0: 63 6b 69 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 cking all revisi
5dd0: 6f 6e 73 20 77 65 20 65 6e 73 75 72 65 20 74 68 ons we ensure th
5de0: 61 74 20 77 65 20 63 61 6e 20 64 65 74 65 63 74 at we can detect
5df0: 20 61 6e 64 0a 09 23 20 72 65 70 6f 72 74 20 74 and..# report t
5e00: 68 65 20 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 he case of multi
5e10: 70 6c 65 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f ple roots. Witho
5e20: 75 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 ut that we could
5e30: 0a 09 23 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 ..# simply take
5e40: 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 one revision and
5e50: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 follow the pare
5e60: 6e 74 20 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 nt links to..# t
5e70: 68 65 69 72 20 72 6f 6f 74 20 28 73 69 63 21 29 heir root (sic!)
5e80: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 ....foreach {rev
5e90: 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 nr rev} [array g
5ea0: 65 74 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 et myrev] {..
5eb0: 20 69 66 20 7b 5b 24 72 65 76 20 68 61 73 70 61 if {[$rev haspa
5ec0: 72 65 6e 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a rent]} continue.
5ed0: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 . integrity a
5ee0: 73 73 65 72 74 20 7b 24 6d 79 72 6f 6f 74 20 65 ssert {$myroot e
5ef0: 71 20 22 22 7d 20 7b 4d 75 6c 74 69 70 6c 65 20 q ""} {Multiple
5f00: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66 root revisions f
5f10: 6f 75 6e 64 7d 0a 09 20 20 20 20 73 65 74 20 6d ound}.. set m
5f20: 79 72 6f 6f 74 20 24 72 65 76 0a 09 7d 0a 0a 09 yroot $rev..}...
5f30: 23 20 49 6e 20 74 68 65 20 66 75 74 75 72 65 20 # In the future
5f40: 77 65 20 61 6c 73 6f 20 6e 65 65 64 20 61 20 6c we also need a l
5f50: 69 73 74 2c 20 61 73 20 62 72 61 6e 63 68 65 73 ist, as branches
5f60: 20 63 61 6e 20 62 65 63 6f 6d 65 0a 09 23 20 73 can become..# s
5f70: 65 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 evered from thei
5f80: 72 20 70 61 72 65 6e 74 2c 20 6d 61 6b 69 6e 67 r parent, making
5f90: 20 74 68 65 6d 20 74 68 65 69 72 20 6f 77 6e 20 them their own
5fa0: 72 6f 6f 74 2e 0a 09 73 65 74 20 6d 79 72 6f 6f root...set myroo
5fb0: 74 73 20 5b 6c 69 73 74 20 24 6d 79 72 6f 6f 74 ts [list $myroot
5fc0: 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a ]..return. }.
5fd0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 . method Dete
5fe0: 72 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 rmineRevisionOpe
5ff0: 72 61 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f rations {} {..fo
6000: 72 65 61 63 68 20 72 65 76 20 24 6d 79 72 65 76 reach rev $myrev
6010: 69 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 isions { $rev de
6020: 74 65 72 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e termineoperation
6030: 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d }..return. }
6040: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 .. method Det
6050: 65 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 ermineLinesOfDev
6060: 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 elopment {} {..#
6070: 20 46 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 74 For revisions t
6080: 68 69 73 20 68 61 73 20 62 65 65 6e 20 64 6f 6e his has been don
6090: 65 20 61 6c 72 65 61 64 79 2c 20 69 6e 20 27 65 e already, in 'e
60a0: 78 74 65 6e 64 27 2e 20 4e 6f 77 0a 09 23 20 77 xtend'. Now..# w
60b0: 65 20 64 6f 20 74 68 69 73 20 66 6f 72 20 74 68 e do this for th
60c0: 65 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 e branches and t
60d0: 61 67 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b ags....foreach {
60e0: 5f 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 _ branch} [array
60f0: 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d get mybranches]
6100: 20 7b 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 {.. $branch
6110: 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 setlod [$self Ge
6120: 74 4c 4f 44 20 5b 24 62 72 61 6e 63 68 20 70 61 tLOD [$branch pa
6130: 72 65 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a rentrevnr]]..}..
6140: 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c .foreach {_ tagl
6150: 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 ist} [array get
6160: 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 mytags] {.. f
6170: 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c oreach tag $tagl
6180: 69 73 74 20 7b 0a 09 09 24 74 61 67 20 73 65 74 ist {...$tag set
6190: 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f lod [$self GetLO
61a0: 44 20 5b 24 74 61 67 20 74 61 67 72 65 76 6e 72 D [$tag tagrevnr
61b0: 5d 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 ]].. }..}..re
61c0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
61d0: 6d 65 74 68 6f 64 20 47 65 74 4c 4f 44 20 7b 72 method GetLOD {r
61e0: 65 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 evnr} {..if {[re
61f0: 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 v istrunkrevnr $
6200: 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 revnr]} {.. r
6210: 65 74 75 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 eturn $mytrunk..
6220: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 } else {.. re
6230: 74 75 72 6e 20 5b 24 73 65 6c 66 20 52 65 76 32 turn [$self Rev2
6240: 42 72 61 6e 63 68 20 24 72 65 76 6e 72 5d 0a 09 Branch $revnr]..
6250: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 }. }.. met
6260: 68 6f 64 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 hod HandleNonTru
6270: 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 nkDefaultBranch
6280: 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 69 73 {} {..set revlis
6290: 74 20 5b 24 73 65 6c 66 20 4e 6f 6e 54 72 75 6e t [$self NonTrun
62a0: 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e kDefaultRevision
62b0: 73 5d 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 s]..if {![llengt
62c0: 68 20 24 72 65 76 6c 69 73 74 5d 7d 20 72 65 74 h $revlist]} ret
62d0: 75 72 6e 0a 0a 09 24 73 65 6c 66 20 41 64 6a 75 urn...$self Adju
62e0: 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c stNonTrunkDefaul
62f0: 74 42 72 61 6e 63 68 20 24 72 65 76 6c 69 73 74 tBranch $revlist
6300: 0a 09 24 73 65 6c 66 20 43 68 65 63 6b 4c 4f 44 ..$self CheckLOD
6310: 73 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a s..return. }.
6320: 0a 20 20 20 20 6d 65 74 68 6f 64 20 4e 6f 6e 54 . method NonT
6330: 72 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73 runkDefaultRevis
6340: 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f ions {} {..# Fro
6350: 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f m cvs2svn the fo
6360: 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 llowing explanat
6370: 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69 ion (with modifi
6380: 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f cations..# for o
6390: 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a ur algorithm):..
63a0: 09 23 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 .# Determine whe
63b0: 74 68 65 72 20 74 68 65 72 65 20 61 72 65 20 61 ther there are a
63c0: 6e 79 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 ny non-trunk def
63d0: 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 ault branch..# r
63e0: 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 49 66 evisions....# If
63f0: 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 a non-trunk def
6400: 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 20 64 ault branch is d
6410: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 68 61 76 etermined to hav
6420: 65 20 65 78 69 73 74 65 64 2c 0a 09 23 20 72 65 e existed,..# re
6430: 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 6f turn a list of o
6440: 62 6a 65 63 74 73 20 66 6f 72 20 61 6c 6c 20 72 bjects for all r
6450: 65 76 69 73 69 6f 6e 73 20 74 68 61 74 20 77 65 evisions that we
6460: 72 65 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74 re once..# non-t
6470: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 72 65 76 runk default rev
6480: 69 73 69 6f 6e 73 2c 20 69 6e 20 64 65 70 65 6e isions, in depen
6490: 64 65 6e 63 79 20 6f 72 64 65 72 20 28 69 2e 65 dency order (i.e
64a0: 2e 20 72 6f 6f 74 0a 09 23 20 66 69 72 73 74 29 . root..# first)
64b0: 2e 0a 0a 09 23 20 54 68 65 72 65 20 61 72 65 20 ....# There are
64c0: 74 77 6f 20 63 61 73 65 73 20 74 6f 20 68 61 6e two cases to han
64d0: 64 6c 65 3a 0a 0a 09 23 20 4f 6e 65 20 63 61 73 dle:...# One cas
64e0: 65 20 69 73 20 73 69 6d 70 6c 65 2e 20 20 54 68 e is simple. Th
64f0: 65 20 52 43 53 20 66 69 6c 65 20 6c 69 73 74 73 e RCS file lists
6500: 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 a default branc
6510: 68 0a 09 23 20 65 78 70 6c 69 63 69 74 6c 79 20 h..# explicitly
6520: 69 6e 20 69 74 73 20 68 65 61 64 65 72 2c 20 73 in its header, s
6530: 75 63 68 20 61 73 20 27 31 2e 31 2e 31 27 2e 20 uch as '1.1.1'.
6540: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 In this case, w
6550: 65 0a 09 23 20 6b 6e 6f 77 20 74 68 61 74 20 65 e..# know that e
6560: 76 65 72 79 20 72 65 76 69 73 69 6f 6e 20 6f 6e very revision on
6570: 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e the vendor bran
6580: 63 68 20 69 73 20 74 6f 20 62 65 0a 09 23 20 74 ch is to be..# t
6590: 72 65 61 74 65 64 20 61 73 20 68 65 61 64 20 6f reated as head o
65a0: 66 20 74 72 75 6e 6b 20 61 74 20 74 68 61 74 20 f trunk at that
65b0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e 0a 0a point in time...
65c0: 09 23 20 42 75 74 20 74 68 65 72 65 27 73 20 61 .# But there's a
65d0: 6c 73 6f 20 61 20 64 65 67 65 6e 65 72 61 74 65 lso a degenerate
65e0: 20 63 61 73 65 2e 20 20 54 68 65 20 52 43 53 20 case. The RCS
65f0: 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 0a 09 23 file does not..#
6600: 20 63 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 currently have
6610: 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 a default branch
6620: 2c 20 79 65 74 20 77 65 20 63 61 6e 20 64 65 64 , yet we can ded
6630: 75 63 65 20 74 68 61 74 20 66 6f 72 0a 09 23 20 uce that for..#
6640: 73 6f 6d 65 20 70 65 72 69 6f 64 20 69 6e 20 74 some period in t
6650: 68 65 20 70 61 73 74 20 69 74 20 70 72 6f 62 61 he past it proba
6660: 62 6c 79 20 2a 64 69 64 2a 20 68 61 76 65 20 6f bly *did* have o
6670: 6e 65 2e 20 20 46 6f 72 0a 09 23 20 65 78 61 6d ne. For..# exam
6680: 70 6c 65 2c 20 74 68 65 20 66 69 6c 65 20 68 61 ple, the file ha
6690: 73 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f s vendor revisio
66a0: 6e 73 20 31 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e ns 1.1.1.1 -> 1.
66b0: 31 2e 31 2e 39 36 2c 0a 09 23 20 61 6c 6c 20 6f 1.1.96,..# all o
66c0: 66 20 77 68 69 63 68 20 61 72 65 20 64 61 74 65 f which are date
66d0: 64 20 62 65 66 6f 72 65 20 31 2e 32 2c 20 61 6e d before 1.2, an
66e0: 64 20 74 68 65 6e 20 69 74 20 68 61 73 20 31 2e d then it has 1.
66f0: 31 2e 31 2e 39 37 0a 09 23 20 2d 3e 20 31 2e 31 1.1.97..# -> 1.1
6700: 2e 31 2e 31 30 30 20 64 61 74 65 64 20 61 66 74 .1.100 dated aft
6710: 65 72 20 31 2e 32 2e 20 20 49 6e 20 74 68 69 73 er 1.2. In this
6720: 20 63 61 73 65 2c 20 77 65 20 73 68 6f 75 6c 64 case, we should
6730: 0a 09 23 20 72 65 63 6f 72 64 20 31 2e 31 2e 31 ..# record 1.1.1
6740: 2e 39 36 20 61 73 20 74 68 65 20 6c 61 73 74 20 .96 as the last
6750: 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 20 vendor revision
6760: 74 6f 20 68 61 76 65 20 62 65 65 6e 20 74 68 65 to have been the
6770: 0a 09 23 20 68 65 61 64 20 6f 66 20 74 68 65 20 ..# head of the
6780: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a default branch..
6790: 0a 09 69 66 20 7b 24 6d 79 70 72 69 6e 63 69 70 ..if {$myprincip
67a0: 61 6c 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 al ne ""} {..
67b0: 20 23 20 54 68 65 72 65 20 69 73 20 73 74 69 6c # There is stil
67c0: 6c 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e l a default bran
67d0: 63 68 3b 20 74 68 61 74 20 6d 65 61 6e 73 20 74 ch; that means t
67e0: 68 61 74 20 61 6c 6c 0a 09 20 20 20 20 23 20 72 hat all.. # r
67f0: 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 61 74 evisions on that
6800: 20 62 72 61 6e 63 68 20 67 65 74 20 6d 61 72 6b branch get mark
6810: 65 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 ed.... log wr
6820: 69 74 65 20 35 20 66 69 6c 65 20 22 46 6f 75 6e ite 5 file "Foun
6830: 64 20 65 78 70 6c 69 63 69 74 6c 79 20 6d 61 72 d explicitly mar
6840: 6b 65 64 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 ked NTDB"...
6850: 73 65 74 20 72 6e 65 78 74 20 5b 24 6d 79 72 6f set rnext [$myro
6860: 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 69 ot child].. i
6870: 66 20 7b 24 72 6e 65 78 74 20 6e 65 20 22 22 7d f {$rnext ne ""}
6880: 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 66 61 74 {...trouble fat
6890: 61 6c 20 22 46 69 6c 65 20 77 69 74 68 20 64 65 al "File with de
68a0: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 24 6d 79 fault branch $my
68b0: 70 72 69 6e 63 69 70 61 6c 20 61 6c 73 6f 20 68 principal also h
68c0: 61 73 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6e as revision [$rn
68d0: 65 78 74 20 72 65 76 6e 72 5d 22 0a 09 09 72 65 ext revnr]"...re
68e0: 74 75 72 6e 0a 09 20 20 20 20 7d 0a 0a 09 20 20 turn.. }...
68f0: 20 20 73 65 74 20 72 65 76 20 5b 24 6d 79 62 72 set rev [$mybr
6900: 61 6e 63 68 65 73 28 24 6d 79 70 72 69 6e 63 69 anches($myprinci
6910: 70 61 6c 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 pal) child]..
6920: 20 73 65 74 20 72 65 73 20 7b 7d 0a 0a 09 20 20 set res {}...
6930: 20 20 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 while {$rev ne
6940: 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 ""} {...lappend
6950: 20 72 65 73 20 24 72 65 76 0a 09 09 73 65 74 20 res $rev...set
6960: 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d rev [$rev child]
6970: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 .. }... re
6980: 74 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c turn $res...} el
6990: 73 65 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 seif {$myimporte
69a0: 64 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 20 64 d} {.. # No d
69b0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 62 efault branch, b
69c0: 75 74 20 74 68 65 20 66 69 6c 65 20 61 70 70 65 ut the file appe
69d0: 61 72 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e ars to have been
69e0: 0a 09 20 20 20 20 23 20 69 6d 70 6f 72 74 65 64 .. # imported
69f0: 2e 20 20 53 6f 20 6f 75 72 20 65 64 75 63 61 74 . So our educat
6a00: 65 64 20 67 75 65 73 73 20 69 73 20 74 68 61 74 ed guess is that
6a10: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 0a 09 all revisions..
6a20: 20 20 20 20 23 20 6f 6e 20 74 68 65 20 27 31 2e # on the '1.
6a30: 31 2e 31 27 20 62 72 61 6e 63 68 20 77 69 74 68 1.1' branch with
6a40: 20 74 69 6d 65 73 74 61 6d 70 73 20 70 72 69 6f timestamps prio
6a50: 72 20 74 6f 20 74 68 65 0a 09 20 20 20 20 23 20 r to the.. #
6a60: 74 69 6d 65 73 74 61 6d 70 20 6f 66 20 27 31 2e timestamp of '1.
6a70: 32 27 20 77 65 72 65 20 6e 6f 6e 2d 74 72 75 6e 2' were non-trun
6a80: 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 k default branch
6a90: 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e .. # revision
6aa0: 73 2e 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 s.... # This
6ab0: 72 65 61 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f 63 really only proc
6ac0: 65 73 73 65 73 20 73 74 61 6e 64 61 72 64 20 27 esses standard '
6ad0: 31 2e 31 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a 09 1.1.1.*'-style..
6ae0: 20 20 20 20 23 20 76 65 6e 64 6f 72 20 72 65 76 # vendor rev
6af0: 69 73 69 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f 75 isions. One cou
6b00: 6c 64 20 63 6f 6e 63 65 69 76 61 62 6c 79 20 68 ld conceivably h
6b10: 61 76 65 20 61 20 66 69 6c 65 0a 09 20 20 20 20 ave a file..
6b20: 23 20 77 68 6f 73 65 20 64 65 66 61 75 6c 74 20 # whose default
6b30: 62 72 61 6e 63 68 20 69 73 20 31 2e 31 2e 33 20 branch is 1.1.3
6b40: 6f 72 20 77 68 61 74 65 76 65 72 2c 20 6f 72 20 or whatever, or
6b50: 77 61 73 20 74 68 61 74 0a 09 20 20 20 20 23 20 was that.. #
6b60: 61 74 20 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e at some point in
6b70: 20 74 69 6d 65 2c 20 77 69 74 68 20 76 65 6e 64 time, with vend
6b80: 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 or revisions 1.1
6b90: 2e 33 2e 31 2c 0a 09 20 20 20 20 23 20 31 2e 31 .3.1,.. # 1.1
6ba0: 2e 33 2e 32 2c 20 65 74 63 2e 20 20 42 75 74 20 .3.2, etc. But
6bb0: 77 69 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 with the default
6bc0: 20 62 72 61 6e 63 68 20 67 6f 6e 65 20 6e 6f 77 branch gone now
6bd0: 2c 0a 09 20 20 20 20 23 20 77 65 27 64 20 68 61 ,.. # we'd ha
6be0: 76 65 20 6e 6f 20 62 61 73 69 73 20 66 6f 72 20 ve no basis for
6bf0: 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 assuming that th
6c00: 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 0a 09 e non-standard..
6c10: 20 20 20 20 23 20 76 65 6e 64 6f 72 20 62 72 61 # vendor bra
6c20: 6e 63 68 20 68 61 64 20 65 76 65 72 20 62 65 65 nch had ever bee
6c30: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 n the default br
6c40: 61 6e 63 68 20 61 6e 79 77 61 79 2e 0a 0a 09 20 anch anyway....
6c50: 20 20 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77 # Note that w
6c60: 65 20 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 e rely on compar
6c70: 69 73 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 isons between th
6c80: 65 20 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 e timestamps..
6c90: 20 20 23 20 6f 66 20 74 68 65 20 72 65 76 69 73 # of the revis
6ca0: 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 ions on the vend
6cb0: 6f 72 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68 or branch and th
6cc0: 61 74 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76 at of.. # rev
6cd0: 69 73 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 ision 1.2, even
6ce0: 74 68 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73 though the times
6cf0: 74 61 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09 tamps might be..
6d00: 20 20 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20 # incorrect
6d10: 64 75 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 due to clock ske
6d20: 77 2e 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 w. We could do
6d30: 61 20 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 a slightly..
6d40: 23 20 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20 # better job if
6d50: 77 65 20 75 73 65 64 20 74 68 65 20 63 68 61 6e we used the chan
6d60: 67 65 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73 geset timestamps
6d70: 2c 20 61 73 20 69 74 20 69 73 0a 09 20 20 20 20 , as it is..
6d80: 23 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 # possible that
6d90: 74 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 the dependencies
6da0: 20 74 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a that went into.
6db0: 09 20 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69 . # determini
6dc0: 6e 67 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61 ng those timesta
6dd0: 6d 70 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63 mps are more acc
6de0: 75 72 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20 urate. But..
6df0: 20 23 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65 # that would re
6e00: 71 75 69 72 65 20 61 6e 20 65 78 74 72 61 20 70 quire an extra p
6e10: 61 73 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 ass or two....
6e20: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi
6e30: 73 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31 sts mybranches(1
6e40: 2e 31 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e .1.1)]} { return
6e50: 20 7b 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 {} }... log
6e60: 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 44 65 write 5 file "De
6e70: 64 75 63 65 64 20 65 78 69 73 74 65 6e 63 65 20 duced existence
6e80: 6f 66 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 of NTDB"... s
6e90: 65 74 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e et rev [$mybran
6ea0: 63 68 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c ches(1.1.1) chil
6eb0: 64 5d 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 d].. set res
6ec0: 20 7b 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f {}.. set sto
6ed0: 70 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 p [$myroot child
6ee0: 5d 0a 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f ]... if {$sto
6ef0: 70 20 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 p eq ""} {...# G
6f00: 65 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e et everything on
6f10: 20 74 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68 the branch...wh
6f20: 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d ile {$rev ne ""}
6f30: 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 {... lappend
6f40: 20 72 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 res $rev...
6f50: 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 set rev [$rev ch
6f60: 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 ild]...}.. }
6f70: 65 6c 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 else {...# Colle
6f80: 63 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e ct everything on
6f90: 20 74 68 65 20 62 72 61 6e 63 68 20 77 68 69 63 the branch whic
6fa0: 68 20 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a h seems to have.
6fb0: 09 09 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 ..# been committ
6fc0: 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 ed before the fi
6fd0: 72 73 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c rst primary chil
6fe0: 64 20 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f d of the...# roo
6ff0: 74 20 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 t revision....se
7000: 74 20 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f t stopdate [$sto
7010: 70 20 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 p date]...while
7020: 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 {$rev ne ""} {..
7030: 09 20 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64 . if {[$rev d
7040: 61 74 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 ate] >= $stopdat
7050: 65 7d 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c e} break... l
7060: 61 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a append res $rev.
7070: 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 .. set rev [$
7080: 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 rev child]...}..
7090: 20 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 }... retu
70a0: 72 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 rn $res...} else
70b0: 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b {.. return {
70c0: 7d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 }..}. }..
70d0: 23 20 47 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 # General note:
70e0: 49 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 In the following
70f0: 20 6d 65 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 methods we only
7100: 20 6d 6f 64 69 66 79 20 74 68 65 20 6c 69 6e 6b modify the link
7110: 73 0a 20 20 20 20 23 20 62 65 74 77 65 65 6e 20 s. # between
7120: 72 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 revisions and sy
7130: 6d 62 6f 6c 73 20 74 6f 20 72 65 73 74 72 75 63 mbols to restruc
7140: 74 75 72 65 20 74 68 65 20 72 65 76 69 73 69 6f ture the revisio
7150: 6e 0a 20 20 20 20 23 20 74 72 65 65 2e 20 57 65 n. # tree. We
7160: 20 64 6f 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 do __not__ dest
7170: 72 6f 79 20 74 68 65 20 6f 62 6a 65 63 74 73 2e roy the objects.
7180: 20 47 69 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c Given the compl
7190: 65 78 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 ex links. # G
71a0: 43 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 61 C is difficult a
71b0: 74 20 74 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 t this level. It
71c0: 20 69 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 is much easier
71d0: 74 6f 20 64 72 6f 70 0a 20 20 20 20 23 20 65 76 to drop. # ev
71e0: 65 72 79 74 68 69 6e 67 20 77 68 65 6e 20 77 65 erything when we
71f0: 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 we are done. Th
7200: 69 73 20 68 61 70 70 65 6e 73 20 69 6e 20 27 64 is happens in 'd
7210: 72 6f 70 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 rop', using.
7220: 23 20 74 68 65 20 73 74 61 74 65 20 76 61 72 69 # the state vari
7230: 61 62 6c 65 20 27 6d 79 72 65 76 27 2c 20 27 6d able 'myrev', 'm
7240: 79 62 72 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 ybranches', and
7250: 27 6d 79 74 61 67 73 27 2e 20 57 68 61 74 20 77 'mytags'. What w
7260: 65 0a 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 e. # have to
7270: 70 65 72 73 69 73 74 2c 20 70 65 72 66 6f 72 6d persist, perform
7280: 65 64 20 62 79 20 27 70 65 72 73 69 73 74 27 2c ed by 'persist',
7290: 20 77 65 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 we know will be
72a0: 0a 20 20 20 20 23 20 72 65 61 63 68 61 62 6c 65 . # reachable
72b0: 20 74 68 72 6f 75 67 68 20 74 68 65 20 72 65 76 through the rev
72c0: 69 73 69 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e isions listed in
72d0: 20 27 6d 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 'myroots' and t
72e0: 68 65 69 72 0a 20 20 20 20 23 20 63 68 69 6c 64 heir. # child
72f0: 72 65 6e 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e ren and symbols.
7300: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 6a .. method Adj
7310: 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 ustNonTrunkDefau
7320: 6c 74 42 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 ltBranch {revlis
7330: 74 7d 20 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b t} {..set stop [
7340: 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b $myroot child] ;
7350: 23 20 72 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f # rev '1.2'...lo
7360: 67 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 g write 5 file "
7370: 41 64 6a 75 73 74 69 6e 67 20 4e 54 44 42 20 63 Adjusting NTDB c
7380: 6f 6e 74 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b ontaining [nsp [
7390: 6c 6c 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 llength $revlist
73a0: 5d 20 72 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 ] revision]"...#
73b0: 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 From cvs2svn th
73c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c e following expl
73d0: 61 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f anation (with mo
73e0: 64 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 difications..# f
73f0: 6f 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d or our algorithm
7400: 29 3a 0a 0a 09 23 20 41 64 6a 75 73 74 20 74 68 ):...# Adjust th
7410: 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 e non-trunk defa
7420: 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 ult branch revis
7430: 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 ions found in th
7440: 65 0a 09 23 20 27 72 65 76 6c 69 73 74 27 2e 0a e..# 'revlist'..
7450: 0a 09 23 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 ..# 'myimported'
7460: 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c is a boolean fl
7470: 61 67 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 ag indicating wh
7480: 65 74 68 65 72 20 74 68 69 73 20 66 69 6c 65 0a ether this file.
7490: 09 23 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 .# appears to ha
74a0: 76 65 20 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 ve been imported
74b0: 2c 20 77 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 , which also mea
74c0: 6e 73 20 74 68 61 74 0a 09 23 20 72 65 76 69 73 ns that..# revis
74d0: 69 6f 6e 20 31 2e 31 20 68 61 73 20 61 20 67 65 ion 1.1 has a ge
74e0: 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 nerated log mess
74f0: 61 67 65 20 74 68 61 74 20 6e 65 65 64 20 6e 6f age that need no
7500: 74 20 62 65 0a 09 23 20 70 72 65 73 65 72 76 65 t be..# preserve
7510: 64 2e 20 20 27 72 65 76 6c 69 73 74 27 20 69 73 d. 'revlist' is
7520: 20 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 a list of objec
7530: 74 20 72 65 66 65 72 65 6e 63 65 73 20 66 6f 72 t references for
7540: 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e the..# revision
7550: 73 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e s that have been
7560: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 determined to b
7570: 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 e non-trunk defa
7580: 75 6c 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 ult..# branch re
7590: 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 visions....# Not
75a0: 65 20 74 68 61 74 20 74 68 65 20 66 69 72 73 74 e that the first
75b0: 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 revision on the
75c0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 default branch
75d0: 69 73 0a 09 23 20 68 61 6e 64 6c 65 64 20 73 74 is..# handled st
75e0: 72 61 6e 67 65 6c 79 20 62 79 20 43 56 53 2e 20 rangely by CVS.
75f0: 20 49 66 20 61 20 66 69 6c 65 20 69 73 20 69 6d If a file is im
7600: 70 6f 72 74 65 64 20 28 61 73 20 6f 70 70 6f 73 ported (as oppos
7610: 65 64 0a 09 23 20 74 6f 20 62 65 69 6e 67 20 61 ed..# to being a
7620: 64 64 65 64 29 2c 20 43 56 53 20 63 72 65 61 74 dded), CVS creat
7630: 65 73 20 61 20 31 2e 31 20 72 65 76 69 73 69 6f es a 1.1 revisio
7640: 6e 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 n, then creates
7650: 61 0a 09 23 20 76 65 6e 64 6f 72 20 62 72 61 6e a..# vendor bran
7660: 63 68 20 31 2e 31 2e 31 20 62 61 73 65 64 20 6f ch 1.1.1 based o
7670: 6e 20 31 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 n 1.1, then crea
7680: 74 65 73 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 tes a 1.1.1.1..#
7690: 20 72 65 76 69 73 69 6f 6e 20 74 68 61 74 20 69 revision that i
76a0: 73 20 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 s identical to t
76b0: 68 65 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 he 1.1 revision
76c0: 28 69 2e 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 (i.e., its..# de
76d0: 6c 74 61 74 65 78 74 20 69 73 20 65 6d 70 74 79 ltatext is empty
76e0: 29 2e 20 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 ). The log mess
76f0: 61 67 65 20 74 68 61 74 20 74 68 65 20 75 73 65 age that the use
7700: 72 20 74 79 70 65 64 0a 09 23 20 77 68 65 6e 20 r typed..# when
7710: 69 6d 70 6f 72 74 69 6e 67 20 69 73 20 73 74 6f importing is sto
7720: 72 65 64 20 77 69 74 68 20 74 68 65 20 31 2e 31 red with the 1.1
7730: 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 .1.1 revision.
7740: 54 68 65 20 31 2e 31 0a 09 23 20 72 65 76 69 73 The 1.1..# revis
7750: 69 6f 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 ion always conta
7760: 69 6e 73 20 61 20 73 74 61 6e 64 61 72 64 2c 20 ins a standard,
7770: 67 65 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 generated log me
7780: 73 73 61 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 ssage,..# 'Initi
7790: 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a al revision\n'..
77a0: 0a 09 23 20 57 68 65 6e 20 77 65 20 64 65 74 65 ..# When we dete
77b0: 63 74 20 61 20 73 74 72 61 69 67 68 74 66 6f 72 ct a straightfor
77c0: 77 61 72 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 ward import like
77d0: 20 74 68 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 this, we want..
77e0: 23 20 74 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 # to handle it b
77f0: 79 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 31 y deleting the 1
7800: 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 77 68 69 .1 revision (whi
7810: 63 68 20 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f ch doesn't..# co
7820: 6e 74 61 69 6e 20 61 6e 79 20 75 73 65 66 75 6c ntain any useful
7830: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e information) an
7840: 64 20 6d 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 d making 1.1.1.1
7850: 20 69 6e 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 into an..# inde
7860: 70 65 6e 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 pendent root in
7870: 74 68 65 20 66 69 6c 65 27 73 20 64 65 70 65 6e the file's depen
7880: 64 65 6e 63 79 20 74 72 65 65 2e 20 20 49 6e 20 dency tree. In
7890: 53 56 4e 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 SVN,..# 1.1.1.1
78a0: 77 69 6c 6c 20 62 65 20 61 64 64 65 64 20 64 69 will be added di
78b0: 72 65 63 74 6c 79 20 74 6f 20 74 68 65 20 76 65 rectly to the ve
78c0: 6e 64 6f 72 20 62 72 61 6e 63 68 20 77 69 74 68 ndor branch with
78d0: 20 69 74 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 its..# initial
78e0: 63 6f 6e 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 content. Then i
78f0: 6e 20 61 20 73 70 65 63 69 61 6c 20 27 70 6f 73 n a special 'pos
7900: 74 2d 63 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 t-commit', the..
7910: 23 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 # 1.1.1.1 revisi
7920: 6f 6e 20 69 73 20 63 6f 70 69 65 64 20 62 61 63 on is copied bac
7930: 6b 20 74 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 k to trunk....#
7940: 49 66 20 74 68 65 20 75 73 65 72 20 69 6d 70 6f If the user impo
7950: 72 74 73 20 61 67 61 69 6e 20 74 6f 20 74 68 65 rts again to the
7960: 20 73 61 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 same vendor bra
7970: 6e 63 68 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 nch, then CVS..#
7980: 20 63 72 65 61 74 65 73 20 72 65 76 69 73 69 6f creates revisio
7990: 6e 73 20 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e ns 1.1.1.2, 1.1.
79a0: 31 2e 33 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 1.3, etc. on the
79b0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a vendor branch,.
79c0: 09 23 20 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 .# *without* cou
79d0: 6e 74 65 72 70 61 72 74 73 20 69 6e 20 74 72 75 nterparts in tru
79e0: 6e 6b 20 28 65 76 65 6e 20 74 68 6f 75 67 68 20 nk (even though
79f0: 74 68 65 73 65 20 72 65 76 69 73 69 6f 6e 73 0a these revisions.
7a00: 09 23 20 65 66 66 65 63 74 69 76 65 6c 79 20 70 .# effectively p
7a10: 6c 61 79 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 lay the role of
7a20: 74 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 trunk revisions)
7a30: 2e 20 20 53 6f 20 61 66 74 65 72 20 77 65 20 61 . So after we a
7a40: 64 64 0a 09 23 20 73 75 63 68 20 72 65 76 69 73 dd..# such revis
7a50: 69 6f 6e 73 20 74 6f 20 74 68 65 20 76 65 6e 64 ions to the vend
7a60: 6f 72 20 62 72 61 6e 63 68 2c 20 77 65 20 61 6c or branch, we al
7a70: 73 6f 20 63 6f 70 79 20 74 68 65 6d 20 62 61 63 so copy them bac
7a80: 6b 20 74 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e k to..# trunk in
7a90: 20 70 6f 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a post-commits...
7aa0: 09 23 20 57 65 20 6d 61 72 6b 20 74 68 65 20 72 .# We mark the r
7ab0: 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 evisions found i
7ac0: 6e 20 27 72 65 76 6c 69 73 74 27 20 61 73 20 64 n 'revlist' as d
7ad0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 efault branch..#
7ae0: 20 72 65 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 revisions. Als
7af0: 6f 2c 20 69 66 20 74 68 65 20 72 6f 6f 74 20 72 o, if the root r
7b00: 65 76 69 73 69 6f 6e 20 68 61 73 20 61 20 70 72 evision has a pr
7b10: 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 23 20 77 imary child..# w
7b20: 65 20 73 65 74 20 74 68 61 74 20 72 65 76 69 73 e set that revis
7b30: 69 6f 6e 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e ion to depend on
7b40: 20 74 68 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 the last non-tr
7b50: 75 6e 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 unk default..# b
7b60: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 61 ranch revision a
7b70: 6e 64 20 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 nd possibly adju
7b80: 73 74 20 69 74 73 20 74 79 70 65 20 61 63 63 6f st its type acco
7b90: 72 64 69 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 rdingly....set f
7ba0: 69 72 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 irst [lindex $re
7bb0: 76 6c 69 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 vlist 0]...log w
7bc0: 72 69 74 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 rite 6 file "<[$
7bd0: 66 69 72 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 first revnr]> [e
7be0: 78 70 72 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 xpr {$myimported
7bf0: 20 3f 20 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 ? "imported" :
7c00: 22 6e 6f 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d "not imported"}]
7c10: 2c 20 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 , [$first operat
7c20: 69 6f 6e 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 ion], [expr {[$f
7c30: 69 72 73 74 20 68 61 73 74 65 78 74 5d 20 3f 20 irst hastext] ?
7c40: 22 68 61 73 20 74 65 78 74 22 20 3a 20 22 6e 6f "has text" : "no
7c50: 20 74 65 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b text"}]"...if {
7c60: 24 6d 79 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 $myimported &&..
7c70: 20 20 20 20 5b 24 66 69 72 73 74 20 72 65 76 6e [$first revn
7c80: 72 5d 20 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 r] eq "1.1.1.1"
7c90: 26 26 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20 &&.. [$first
7ca0: 6f 70 65 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 operation] eq "c
7cb0: 68 61 6e 67 65 22 20 26 26 0a 09 20 20 20 20 21 hange" &&.. !
7cc0: 5b 24 66 69 72 73 74 20 68 61 73 74 65 78 74 5d [$first hastext]
7cd0: 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 } {... set re
7ce0: 76 31 31 20 5b 24 66 69 72 73 74 20 70 61 72 65 v11 [$first pare
7cf0: 6e 74 5d 20 3b 20 23 20 41 73 73 65 72 74 3a 20 nt] ; # Assert:
7d00: 53 68 6f 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 Should be myroot
7d10: 2e 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 ... log write
7d20: 20 33 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 3 file "Removin
7d30: 67 20 69 72 72 65 6c 65 76 61 6e 74 20 72 65 76 g irrelevant rev
7d40: 69 73 69 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 ision [$rev11 re
7d50: 76 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 vnr]"... # Cu
7d60: 74 20 6f 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 t out the old my
7d70: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a root revision...
7d80: 09 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 . ldelete myr
7d90: 6f 6f 74 73 20 24 72 65 76 31 31 20 3b 20 23 20 oots $rev11 ; #
7da0: 4e 6f 74 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c Not a root any l
7db0: 6f 6e 67 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 onger.... $fi
7dc0: 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e rst cutfromparen
7dd0: 74 20 3b 20 23 20 53 65 76 65 72 20 72 65 76 69 t ; # Sever revi
7de0: 73 69 6f 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 sion from parent
7df0: 20 72 65 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 revision...
7e00: 69 66 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d if {$stop ne ""}
7e10: 20 7b 0a 09 09 24 73 74 6f 70 20 63 75 74 66 72 {...$stop cutfr
7e20: 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 omparent...lappe
7e30: 6e 64 20 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 nd myroots $stop
7e40: 20 3b 20 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 ; # New root, a
7e50: 66 74 65 72 20 76 65 6e 64 6f 72 20 62 72 61 6e fter vendor bran
7e60: 63 68 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 ch.. }...
7e70: 23 20 43 75 74 20 6f 75 74 20 74 68 65 20 76 65 # Cut out the ve
7e80: 6e 64 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 ndor branch symb
7e90: 6f 6c 0a 0a 09 20 20 20 20 73 65 74 20 76 65 6e ol... set ven
7ea0: 64 6f 72 20 5b 24 66 69 72 73 74 20 70 61 72 65 dor [$first pare
7eb0: 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 ntbranch].. i
7ec0: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 ntegrity assert
7ed0: 7b 24 76 65 6e 64 6f 72 20 6e 65 20 22 22 7d 20 {$vendor ne ""}
7ee0: 7b 46 69 72 73 74 20 4e 54 44 42 20 72 65 76 69 {First NTDB revi
7ef0: 73 69 6f 6e 20 68 61 73 20 6e 6f 20 62 72 61 6e sion has no bran
7f00: 63 68 7d 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 ch}.. if {[$v
7f10: 65 6e 64 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 endor parent] eq
7f20: 20 24 72 65 76 31 31 7d 20 7b 0a 09 09 24 72 65 $rev11} {...$re
7f30: 76 31 31 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 v11 removebranch
7f40: 20 20 20 20 20 20 20 20 24 76 65 6e 64 6f 72 0a $vendor.
7f50: 09 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 63 ..$rev11 removec
7f60: 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 66 69 hildonbranch $fi
7f70: 72 73 74 0a 09 09 24 76 65 6e 64 6f 72 20 63 75 rst...$vendor cu
7f80: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 20 20 tbranchparent
7f90: 20 3b 23 20 62 70 20 3d 20 72 65 76 31 31 2c 20 ;# bp = rev11,
7fa0: 61 62 6f 75 74 20 74 6f 20 62 65 20 67 6f 6e 65 about to be gone
7fb0: 0a 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f ...$first cutfro
7fc0: 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 20 3b 23 mparentbranch ;#
7fd0: 20 70 62 20 3d 20 76 65 6e 64 6f 72 2c 20 74 6f pb = vendor, to
7fe0: 20 62 65 20 61 20 64 65 74 61 63 68 65 64 20 4c be a detached L
7ff0: 4f 44 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 OD...lappend myr
8000: 6f 6f 74 73 20 24 66 69 72 73 74 0a 09 20 20 20 oots $first..
8010: 20 7d 0a 0a 09 20 20 20 20 23 20 43 68 61 6e 67 }... # Chang
8020: 65 20 74 68 65 20 74 79 70 65 20 6f 66 20 66 69 e the type of fi
8030: 72 73 74 20 28 74 79 70 69 63 61 6c 6c 79 20 66 rst (typically f
8040: 72 6f 6d 20 43 68 61 6e 67 65 20 74 6f 20 41 64 rom Change to Ad
8050: 64 29 3a 0a 09 20 20 20 20 24 66 69 72 73 74 20 d):.. $first
8060: 72 65 74 79 70 65 20 61 64 64 0a 0a 09 20 20 20 retype add...
8070: 20 23 20 4d 6f 76 65 20 61 6e 79 20 74 61 67 73 # Move any tags
8080: 20 61 6e 64 20 62 72 61 6e 63 68 65 73 20 66 72 and branches fr
8090: 6f 6d 20 74 68 65 20 6f 6c 64 20 74 6f 20 74 68 om the old to th
80a0: 65 20 6e 65 77 20 72 6f 6f 74 2e 0a 09 20 20 20 e new root...
80b0: 20 24 72 65 76 31 31 20 6d 6f 76 65 73 79 6d 62 $rev11 movesymb
80c0: 6f 6c 73 74 6f 20 24 66 69 72 73 74 0a 09 7d 0a olsto $first..}.
80d0: 0a 09 23 20 4d 61 72 6b 20 61 6c 6c 20 74 68 65 ..# Mark all the
80e0: 20 73 70 65 63 69 61 6c 20 72 65 76 69 73 69 6f special revisio
80f0: 6e 73 20 61 73 20 73 75 63 68 0a 09 66 6f 72 65 ns as such..fore
8100: 61 63 68 20 72 65 76 20 24 72 65 76 6c 69 73 74 ach rev $revlist
8110: 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 {.. log writ
8120: 65 20 33 20 66 69 6c 65 20 22 52 65 76 69 73 69 e 3 file "Revisi
8130: 6f 6e 20 6f 6e 20 64 65 66 61 75 6c 74 20 62 72 on on default br
8140: 61 6e 63 68 3a 20 5b 24 72 65 76 20 72 65 76 6e anch: [$rev revn
8150: 72 5d 22 0a 09 20 20 20 20 24 72 65 76 20 73 65 r]".. $rev se
8160: 74 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 tondefaultbranch
8170: 20 31 0a 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f 1..}...if {$sto
8180: 70 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 p ne ""} {..
8190: 23 20 52 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c # Revision 1.2 l
81a0: 6f 67 69 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73 ogically follows
81b0: 20 74 68 65 20 69 6d 70 6f 72 74 65 64 20 72 65 the imported re
81c0: 76 69 73 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20 visions,.. #
81d0: 6e 6f 74 20 31 2e 31 2e 20 20 41 63 63 6f 72 64 not 1.1. Accord
81e0: 69 6e 67 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69 ingly, connect i
81f0: 74 20 74 6f 20 74 68 65 20 6c 61 73 74 20 4e 54 t to the last NT
8200: 44 42 52 20 61 6e 64 0a 09 20 20 20 20 23 20 70 DBR and.. # p
8210: 6f 73 73 69 62 6c 79 20 63 68 61 6e 67 65 20 69 ossibly change i
8220: 74 73 20 74 79 70 65 2e 0a 0a 09 20 20 20 20 73 ts type.... s
8230: 65 74 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20 et last [lindex
8240: 24 72 65 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20 $revlist end]..
8250: 20 20 20 24 73 74 6f 70 20 73 65 74 64 65 66 61 $stop setdefa
8260: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 ultbranchparent
8270: 24 6c 61 73 74 20 3b 20 23 20 52 65 74 79 70 65 $last ; # Retype
8280: 73 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 s the revision t
8290: 6f 6f 2e 0a 09 20 20 20 20 24 6c 61 73 74 20 73 oo... $last s
82a0: 65 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 etdefaultbranchc
82b0: 68 69 6c 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09 hild $stop..}..
82c0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
82d0: 20 20 6d 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f method CheckLO
82e0: 44 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 Ds {} {..foreach
82f0: 20 7b 5f 20 62 72 61 6e 63 68 7d 20 20 5b 61 72 {_ branch} [ar
8300: 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 ray get mybranch
8310: 65 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 63 68 es] { $branch ch
8320: 65 63 6b 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63 ecklod }..foreac
8330: 68 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 h {_ taglist} [a
8340: 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d rray get mytags]
8350: 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 {.. foreach
8360: 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24 tag $taglist { $
8370: 74 61 67 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 tag checklod }..
8380: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
8390: 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f . method Remo
83a0: 76 65 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 veIrrelevantDele
83b0: 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 tions {} {..# Fr
83c0: 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 61 om cvs2svn: If a
83d0: 20 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f file is added o
83e0: 6e 20 61 20 62 72 61 6e 63 68 2c 20 74 68 65 6e n a branch, then
83f0: 20 61 20 74 72 75 6e 6b 0a 09 23 20 72 65 76 69 a trunk..# revi
8400: 73 69 6f 6e 20 69 73 20 61 64 64 65 64 20 61 74 sion is added at
8410: 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 69 the same time i
8420: 6e 20 74 68 65 20 27 44 65 61 64 27 20 73 74 61 n the 'Dead' sta
8430: 74 65 2e 0a 09 23 20 54 68 69 73 20 72 65 76 69 te...# This revi
8440: 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 sion doesn't do
8450: 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 2c anything useful,
8460: 20 73 6f 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a so delete it...
8470: 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d .foreach root $m
8480: 79 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 69 66 yroots {.. if
8490: 20 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 {[$root isneede
84a0: 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 d]} continue..
84b0: 20 20 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69 log write 2 fi
84c0: 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e le "Removing unn
84d0: 65 63 65 73 73 61 72 79 20 64 65 61 64 20 72 65 ecessary dead re
84e0: 76 69 73 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65 vision [$root re
84f0: 76 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 52 65 vnr]"... # Re
8500: 6d 6f 76 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61 move as root, ma
8510: 6b 65 20 69 74 73 20 63 68 69 6c 64 20 6e 65 77 ke its child new
8520: 20 72 6f 6f 74 20 61 66 74 65 72 0a 09 20 20 20 root after..
8530: 20 23 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 # disconnecting
8540: 20 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 76 it from the rev
8550: 69 73 69 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67 ision just going
8560: 20 61 77 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65 away.... lde
8570: 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f lete myroots $ro
8580: 6f 74 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f ot.. if {[$ro
8590: 6f 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a ot haschild]} {.
85a0: 09 09 73 65 74 20 63 68 69 6c 64 20 5b 24 72 6f ..set child [$ro
85b0: 6f 74 20 63 68 69 6c 64 5d 0a 09 09 24 63 68 69 ot child]...$chi
85c0: 6c 64 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 ld cutfromparent
85d0: 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f ...lappend myroo
85e0: 74 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d ts $child.. }
85f0: 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 ... # Cut out
8600: 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 73 70 the branches sp
8610: 61 77 6e 65 64 20 62 79 20 74 68 65 20 72 65 76 awned by the rev
8620: 69 73 69 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20 ision to be..
8630: 20 23 20 64 65 6c 65 74 65 64 2e 20 49 66 20 74 # deleted. If t
8640: 68 65 20 62 72 61 6e 63 68 20 68 61 73 20 72 65 he branch has re
8650: 76 69 73 69 6f 6e 73 20 74 68 65 79 20 73 68 6f visions they sho
8660: 75 6c 64 20 61 6c 72 65 61 64 79 0a 09 20 20 20 uld already..
8670: 20 23 20 75 73 65 20 6f 70 65 72 61 74 69 6f 6e # use operation
8680: 20 27 61 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20 'add', no need
8690: 74 6f 20 63 68 61 6e 67 65 20 74 68 61 74 2e 20 to change that.
86a0: 54 68 65 20 66 69 72 73 74 0a 09 20 20 20 20 23 The first.. #
86b0: 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63 revision on eac
86c0: 68 20 62 72 61 6e 63 68 20 62 65 63 6f 6d 65 73 h branch becomes
86d0: 20 61 20 6e 65 77 20 61 6e 64 20 64 69 73 63 6f a new and disco
86e0: 6e 6e 65 63 74 65 64 0a 09 20 20 20 20 23 20 72 nnected.. # r
86f0: 6f 6f 74 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61 oot.... forea
8700: 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 ch branch [$root
8710: 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 24 branches] {...$
8720: 62 72 61 6e 63 68 20 63 75 74 62 72 61 6e 63 68 branch cutbranch
8730: 70 61 72 65 6e 74 0a 09 09 69 66 20 7b 21 5b 24 parent...if {![$
8740: 62 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d branch haschild]
8750: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 } continue...set
8760: 20 66 69 72 73 74 20 5b 24 62 72 61 6e 63 68 20 first [$branch
8770: 63 68 69 6c 64 5d 0a 09 09 24 66 69 72 73 74 20 child]...$first
8780: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 cutfromparent...
8790: 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 lappend myroots
87a0: 24 66 69 72 73 74 0a 09 20 20 20 20 7d 0a 09 20 $first.. }..
87b0: 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 $root removea
87c0: 6c 6c 62 72 61 6e 63 68 65 73 0a 0a 09 20 20 20 llbranches...
87d0: 20 23 20 54 61 67 67 69 6e 67 20 61 20 64 65 61 # Tagging a dea
87e0: 64 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e d revision doesn
87f0: 27 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20 't do anything,
8800: 73 6f 20 72 65 6d 6f 76 65 0a 09 20 20 20 20 23 so remove.. #
8810: 20 61 6e 79 20 74 61 67 73 20 74 68 61 74 20 77 any tags that w
8820: 65 72 65 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a ere set on it...
8830: 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 . $root remov
8840: 65 61 6c 6c 74 61 67 73 0a 0a 09 20 20 20 20 23 ealltags... #
8850: 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68 This can only h
8860: 61 70 70 65 6e 20 6f 6e 63 65 20 70 65 72 20 66 appen once per f
8870: 69 6c 65 2c 20 61 6e 64 20 77 65 20 6d 69 67 68 ile, and we migh
8880: 74 20 68 61 76 65 0a 09 20 20 20 20 23 20 6a 75 t have.. # ju
8890: 73 74 20 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f st changed myroo
88a0: 74 73 2c 20 73 6f 20 65 6e 64 20 74 68 65 20 6c ts, so end the l
88b0: 6f 6f 70 0a 09 20 20 20 20 62 72 65 61 6b 0a 09 oop.. break..
88c0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
88d0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f . method Remo
88e0: 76 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 veInitialBranchD
88f0: 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 eletions {} {..#
8900: 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 From cvs2svn: I
8910: 66 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69 f the first revi
8920: 73 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 sion on a branch
8930: 20 69 73 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65 is an..# unnece
8940: 73 73 61 72 79 20 64 65 6c 65 74 65 2c 20 72 65 ssary delete, re
8950: 6d 6f 76 65 20 69 74 2e 0a 09 23 0a 09 23 20 49 move it...#..# I
8960: 66 20 61 20 66 69 6c 65 20 69 73 20 61 64 64 65 f a file is adde
8970: 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 28 77 d on a branch (w
8980: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 hether or not it
8990: 20 61 6c 72 65 61 64 79 0a 09 23 20 65 78 69 73 already..# exis
89a0: 74 65 64 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 ted on trunk), t
89b0: 68 65 6e 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 hen new versions
89c0: 20 6f 66 20 43 56 53 20 61 64 64 20 61 20 66 69 of CVS add a fi
89d0: 72 73 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 rst..# branch re
89e0: 76 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 27 64 vision in the 'd
89f0: 65 61 64 27 20 73 74 61 74 65 20 28 74 6f 20 69 ead' state (to i
8a00: 6e 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 ndicate that the
8a10: 0a 09 23 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 ..# file did not
8a20: 20 65 78 69 73 74 20 6f 6e 20 74 68 65 20 62 72 exist on the br
8a30: 61 6e 63 68 20 77 68 65 6e 20 74 68 65 20 62 72 anch when the br
8a40: 61 6e 63 68 20 77 61 73 0a 09 23 20 63 72 65 61 anch was..# crea
8a50: 74 65 64 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 ted) followed by
8a60: 20 74 68 65 20 73 65 63 6f 6e 64 20 62 72 61 6e the second bran
8a70: 63 68 20 72 65 76 69 73 69 6f 6e 2c 20 77 68 69 ch revision, whi
8a80: 63 68 20 69 73 20 61 6e 0a 09 23 20 61 64 64 2e ch is an..# add.
8a90: 20 20 57 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e When we encoun
8aa0: 74 65 72 20 74 68 69 73 20 73 69 74 75 61 74 69 ter this situati
8ab0: 6f 6e 2c 20 77 65 20 73 65 76 65 72 20 74 68 65 on, we sever the
8ac0: 20 62 72 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20 branch..# from
8ad0: 74 72 75 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65 trunk and delete
8ae0: 20 74 68 65 20 66 69 72 73 74 20 62 72 61 6e 63 the first branc
8af0: 68 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 h revision....#
8b00: 41 74 20 74 68 69 73 20 70 6f 69 6e 74 20 77 65 At this point we
8b10: 20 6d 61 79 20 68 61 76 65 20 61 6c 72 65 61 64 may have alread
8b20: 79 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 y multiple roots
8b30: 20 69 6e 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 in myroots,..#
8b40: 77 65 20 68 61 76 65 20 74 6f 20 70 72 6f 63 65 we have to proce
8b50: 73 73 20 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 ss them all....f
8b60: 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 oreach root [$se
8b70: 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f lf LinesOfDevelo
8b80: 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 pment] {.. if
8b90: 20 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 {[$root isneede
8ba0: 64 62 72 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e dbranchdel]} con
8bb0: 74 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 tinue.. log w
8bc0: 72 69 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d rite 2 file "Rem
8bd0: 6f 76 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 oving unnecessar
8be0: 79 20 69 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 y initial branch
8bf0: 20 64 65 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72 delete [$root r
8c00: 65 76 6e 72 5d 22 0a 0a 09 20 20 20 20 73 65 74 evnr]"... set
8c10: 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 branch [$root p
8c20: 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 arentbranch]..
8c30: 20 20 73 65 74 20 70 61 72 65 6e 74 20 5b 24 72 set parent [$r
8c40: 6f 6f 74 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 oot parent]..
8c50: 20 73 65 74 20 63 68 69 6c 64 20 20 5b 24 72 6f set child [$ro
8c60: 6f 74 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 ot child]...
8c70: 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 ldelete myroots
8c80: 24 72 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 $root.. lappe
8c90: 6e 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c nd myroots $chil
8ca0: 64 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 d... $branch
8cb0: 63 75 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a cutbranchparent.
8cc0: 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 . $branch cut
8cd0: 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c child.. $chil
8ce0: 64 20 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 d cutfromparent
8cf0: 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 ... $branch s
8d00: 65 74 63 68 69 6c 64 20 20 20 20 20 20 20 20 24 etchild $
8d10: 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c child.. $chil
8d20: 64 20 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e d setparentbran
8d30: 63 68 20 24 62 72 61 6e 63 68 0a 0a 09 20 20 20 ch $branch...
8d40: 20 24 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 $parent removeb
8d50: 72 61 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 ranch $br
8d60: 61 6e 63 68 0a 09 20 20 20 20 24 70 61 72 65 6e anch.. $paren
8d70: 74 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 t removechildonb
8d80: 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09 ranch $root..}..
8d90: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
8da0: 20 20 6d 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66 method LinesOf
8db0: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b Development {} {
8dc0: 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 20 61 6c ..# Determine al
8dd0: 6c 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c l lines of devel
8de0: 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 66 opment for the f
8df0: 69 6c 65 2e 20 54 68 69 73 20 61 72 65 0a 09 23 ile. This are..#
8e00: 20 74 68 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73 the known roots
8e10: 2c 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f , and the root o
8e20: 66 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 66 f all branches f
8e30: 6f 75 6e 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c ound on the..# l
8e40: 69 6e 65 20 6f 66 20 70 72 69 6d 61 72 79 20 63 ine of primary c
8e50: 68 69 6c 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c hildren....set l
8e60: 6f 64 72 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65 odroots {}..fore
8e70: 61 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 ach root $myroot
8e80: 73 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41 s {.. $self A
8e90: 64 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f ddBranchedLinesO
8ea0: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 fDevelopment lod
8eb0: 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 roots $root..
8ec0: 20 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 lappend lodroot
8ed0: 73 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 s $root..}..retu
8ee0: 72 6e 20 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20 rn $lodroots.
8ef0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 }.. method A
8f00: 64 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f ddBranchedLinesO
8f10: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76 fDevelopment {lv
8f20: 20 72 6f 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20 root} {..upvar
8f30: 31 20 24 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09 1 $lv lodroots..
8f40: 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 while {$root ne
8f50: 22 22 7d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 ""} {.. forea
8f60: 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 ch branch [$root
8f70: 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 branches] {...i
8f80: 66 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 f {![$branch has
8f90: 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 child]} continue
8fa0: 0a 09 09 73 65 74 20 63 68 69 6c 64 20 5b 24 62 ...set child [$b
8fb0: 72 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 23 ranch child]...#
8fc0: 20 52 65 63 75 72 73 65 20 69 6e 74 6f 20 74 68 Recurse into th
8fd0: 65 20 62 72 61 6e 63 68 20 66 6f 72 20 64 65 65 e branch for dee
8fe0: 70 65 72 20 62 72 61 6e 63 68 65 73 2e 0a 09 09 per branches....
8ff0: 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 $self AddBranche
9000: 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d dLinesOfDevelopm
9010: 65 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 ent lodroots $ch
9020: 69 6c 64 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f ild...lappend lo
9030: 64 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 droots $child..
9040: 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f }.. set ro
9050: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d ot [$root child]
9060: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 ..}..return.
9070: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 }.. method Ex
9080: 63 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 cludeNonTrunkInf
9090: 6f 72 6d 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 ormation {} {..#
90a0: 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d Remove all non-
90b0: 74 72 75 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20 trunk branches,
90c0: 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74 revisions, and t
90d0: 61 67 73 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65 ags. We do..# ke
90e0: 65 70 20 74 68 65 20 74 61 67 73 20 77 68 69 63 ep the tags whic
90f0: 68 20 61 72 65 20 6f 6e 20 74 68 65 20 74 72 75 h are on the tru
9100: 6e 6b 2e 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f nk....set ntdbro
9110: 6f 74 20 22 22 0a 09 66 6f 72 65 61 63 68 20 72 ot ""..foreach r
9120: 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 oot [$self Lines
9130: 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b OfDevelopment] {
9140: 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 48 65 .. # Note: He
9150: 72 65 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 re the order of
9160: 74 68 65 20 72 6f 6f 74 73 20 69 73 20 69 6d 70 the roots is imp
9170: 6f 72 74 61 6e 74 2c 0a 09 20 20 20 20 23 20 69 ortant,.. # i
9180: 2e 65 2e 20 74 68 61 74 20 77 65 20 67 65 74 20 .e. that we get
9190: 74 68 65 6d 20 69 6e 20 64 65 70 74 68 20 66 69 them in depth fi
91a0: 72 73 74 20 6f 72 64 65 72 2e 20 54 68 69 73 20 rst order. This
91b0: 65 6e 73 75 72 65 73 0a 09 20 20 20 20 23 20 74 ensures.. # t
91c0: 68 61 74 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 hat the removal
91d0: 6f 66 20 61 20 62 72 61 6e 63 68 20 68 61 70 70 of a branch happ
91e0: 65 6e 73 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 ens only after t
91f0: 68 65 0a 09 20 20 20 20 23 20 62 72 61 6e 63 68 he.. # branch
9200: 65 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 es spawned from
9210: 69 74 20 77 65 72 65 20 72 65 6d 6f 76 65 64 2e it were removed.
9220: 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 0a 09 Otherwise the..
9230: 20 20 20 20 23 20 73 79 73 74 65 6d 20 6d 69 67 # system mig
9240: 68 74 20 74 72 79 20 74 6f 20 61 63 63 65 73 73 ht try to access
9250: 20 64 65 6c 65 74 65 64 20 6f 62 6a 65 63 74 73 deleted objects
9260: 2e 0a 0a 09 20 20 20 20 23 20 44 6f 20 6e 6f 74 .... # Do not
9270: 20 65 78 63 6c 75 64 65 20 74 68 65 20 74 72 75 exclude the tru
9280: 6e 6b 2e 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24 nk... if {[[$
9290: 72 6f 6f 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e root lod] istrun
92a0: 6b 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 k]} continue..
92b0: 20 20 24 73 65 6c 66 20 45 78 63 6c 75 64 65 42 $self ExcludeB
92c0: 72 61 6e 63 68 20 24 72 6f 6f 74 20 6e 74 64 62 ranch $root ntdb
92d0: 72 6f 6f 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e root..}...if {$n
92e0: 74 64 62 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b tdbroot ne ""} {
92f0: 0a 09 20 20 20 20 24 73 65 6c 66 20 47 72 61 66 .. $self Graf
9300: 74 4e 54 44 42 32 54 72 75 6e 6b 20 24 6e 74 64 tNTDB2Trunk $ntd
9310: 62 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e broot..}..return
9320: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
9330: 6f 64 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68 od ExcludeBranch
9340: 20 7b 72 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20 {root nv} {..#
9350: 45 78 63 6c 75 64 65 20 74 68 65 20 62 72 61 6e Exclude the bran
9360: 63 68 2f 6c 6f 64 20 73 74 61 72 74 69 6e 67 20 ch/lod starting
9370: 61 74 20 72 6f 6f 74 2c 20 61 20 72 65 76 69 73 at root, a revis
9380: 69 6f 6e 2e 0a 09 23 0a 09 23 20 49 66 20 74 68 ion...#..# If th
9390: 65 20 4c 4f 44 20 73 74 61 72 74 73 20 77 69 74 e LOD starts wit
93a0: 68 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 h non-trunk defa
93b0: 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 ult branch revis
93c0: 69 6f 6e 73 2c 0a 09 23 20 77 65 20 6c 65 61 76 ions,..# we leav
93d0: 65 20 74 68 65 6d 20 69 6e 20 70 6c 61 63 65 20 e them in place
93e0: 61 6e 64 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 and do not delet
93f0: 65 20 74 68 65 20 62 72 61 6e 63 68 2e 20 49 6e e the branch. In
9400: 20 74 68 61 74 0a 09 23 20 63 61 73 65 20 74 68 that..# case th
9410: 65 20 63 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 e command sets t
9420: 68 65 20 76 61 72 69 61 62 6c 65 20 69 6e 20 4e he variable in N
9430: 56 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e V so that we can
9440: 0a 09 23 20 6c 61 74 65 72 20 72 65 77 6f 72 6b ..# later rework
9450: 20 74 68 65 73 65 20 72 65 76 69 73 6f 6e 73 20 these revisons
9460: 74 6f 20 62 65 20 70 75 72 65 6c 79 20 74 72 75 to be purely tru
9470: 6e 6b 2e 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 nk....if {[$root
9480: 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e isondefaultbran
9490: 63 68 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 ch]} {.. # Ha
94a0: 6e 64 6c 69 6e 67 20 61 20 4e 54 44 42 2e 20 54 ndling a NTDB. T
94b0: 68 69 73 20 62 72 61 6e 63 68 20 6d 61 79 20 63 his branch may c
94c0: 6f 6e 73 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79 onsists not only
94d0: 20 6f 66 0a 09 20 20 20 20 23 20 4e 54 44 42 20 of.. # NTDB
94e0: 72 65 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 61 revisions, but a
94f0: 6c 73 6f 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 lso some non-NTD
9500: 42 2e 20 54 68 65 20 6c 61 74 74 65 72 20 61 72 B. The latter ar
9510: 65 0a 09 20 20 20 20 23 20 74 72 75 6c 79 20 6f e.. # truly o
9520: 6e 20 61 20 62 72 61 6e 63 68 20 61 6e 64 20 68 n a branch and h
9530: 61 76 65 20 74 6f 20 62 65 20 65 78 63 6c 75 64 ave to be exclud
9540: 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e ed. The followin
9550: 67 0a 09 20 20 20 20 23 20 6c 6f 6f 70 20 64 65 g.. # loop de
9560: 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 72 termines if ther
9570: 65 20 61 72 65 20 73 75 63 68 20 72 65 76 69 73 e are such revis
9580: 69 6f 6e 73 2e 0a 0a 09 20 20 20 20 75 70 76 61 ions.... upva
9590: 72 20 31 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74 r 1 $nv ntdbroot
95a0: 0a 09 20 20 20 20 73 65 74 20 6e 74 64 62 72 6f .. set ntdbro
95b0: 6f 74 20 24 72 6f 6f 74 0a 09 20 20 20 20 24 72 ot $root.. $r
95c0: 6f 6f 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e oot cutfromparen
95d0: 74 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 73 65 tbranch... se
95e0: 74 20 72 65 76 20 24 72 6f 6f 74 0a 09 20 20 20 t rev $root..
95f0: 20 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 while {$rev ne
9600: 22 22 7d 20 7b 0a 09 09 24 72 65 76 20 72 65 6d ""} {...$rev rem
9610: 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 oveallbranches..
9620: 09 23 20 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e .# See note [x].
9630: 0a 0a 09 09 69 66 20 7b 5b 24 72 65 76 20 69 73 ....if {[$rev is
9640: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d ondefaultbranch]
9650: 7d 20 7b 0a 09 09 20 20 20 20 73 65 74 20 72 65 } {... set re
9660: 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 v [$rev child]..
9670: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 .} else {...
9680: 62 72 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d break...}.. }
9690: 0a 0a 09 20 20 20 20 23 20 72 65 76 20 6e 6f 77 ... # rev now
96a0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 contains the fi
96b0: 72 73 74 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76 rst non-NTDB rev
96c0: 69 73 69 6f 6e 20 61 66 74 65 72 20 74 68 65 0a ision after the.
96d0: 09 20 20 20 20 23 20 4e 54 44 42 2c 20 6f 72 20 . # NTDB, or
96e0: 69 73 20 65 6d 70 74 79 20 69 66 20 74 68 65 72 is empty if ther
96f0: 65 20 69 73 20 6e 6f 20 73 75 63 68 2e 20 49 66 e is no such. If
9700: 20 77 65 20 68 61 76 65 20 73 6f 6d 65 0a 09 20 we have some..
9710: 20 20 20 23 20 74 68 65 79 20 68 61 76 65 20 74 # they have t
9720: 6f 20 72 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20 o removed....
9730: 20 69 66 20 7b 24 72 65 76 20 6e 65 20 22 22 7d if {$rev ne ""}
9740: 20 20 7b 0a 09 09 73 65 74 20 6c 61 73 74 6e 74 {...set lastnt
9750: 64 62 20 5b 24 72 65 76 20 70 61 72 65 6e 74 5d db [$rev parent]
9760: 0a 09 09 24 6c 61 73 74 6e 74 64 62 20 63 75 74 ...$lastntdb cut
9770: 66 72 6f 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c fromchild...whil
9780: 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b e {$rev ne ""} {
9790: 0a 09 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f ... $rev remo
97a0: 76 65 61 6c 6c 74 61 67 73 0a 09 09 20 20 20 20 vealltags...
97b0: 24 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 $rev removeallbr
97c0: 61 6e 63 68 65 73 0a 09 09 20 20 20 20 23 20 4e anches... # N
97d0: 6f 74 65 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20 ote [x]: We may
97e0: 73 74 69 6c 6c 20 68 61 76 65 20 68 61 64 20 62 still have had b
97f0: 72 61 6e 63 68 65 73 20 6f 6e 20 74 68 65 0a 09 ranches on the..
9800: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2e . # revision.
9810: 20 42 72 61 6e 63 68 65 73 20 77 69 74 68 6f 75 Branches withou
9820: 74 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d t revisions comm
9830: 69 74 74 65 64 0a 09 09 20 20 20 20 23 20 6f 6e itted... # on
9840: 20 74 68 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f them do not sho
9850: 77 20 75 70 20 69 6e 20 74 68 65 20 6c 69 73 74 w up in the list
9860: 20 6f 66 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09 of roots aka...
9870: 20 20 20 20 23 20 6c 69 6e 65 73 20 6f 66 20 64 # lines of d
9880: 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20 evelopment....
9890: 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 set rev [$rev
98a0: 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 child]...}..
98b0: 7d 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d }.. return..}
98c0: 0a 0a 09 23 20 4e 6f 20 4e 54 44 42 20 73 74 75 ...# No NTDB stu
98d0: 66 66 20 74 6f 20 64 65 61 6c 20 77 69 74 68 2e ff to deal with.
98e0: 20 46 69 72 73 74 20 64 65 6c 65 74 65 20 74 68 First delete th
98f0: 65 20 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a e branch object.
9900: 09 23 20 69 74 73 65 6c 66 2c 20 61 66 74 65 72 .# itself, after
9910: 20 63 75 74 74 69 6e 67 20 61 6c 6c 20 74 68 65 cutting all the
9920: 20 76 61 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74 various connect
9930: 69 6f 6e 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e ions....set bran
9940: 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 ch [$root parent
9950: 62 72 61 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72 branch]..if {$br
9960: 61 6e 63 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20 anch ne ""} {..
9970: 20 20 20 73 65 74 20 62 72 61 6e 63 68 70 61 72 set branchpar
9980: 65 6e 74 20 5b 24 62 72 61 6e 63 68 20 70 61 72 ent [$branch par
9990: 65 6e 74 5d 0a 09 20 20 20 20 24 62 72 61 6e 63 ent].. $branc
99a0: 68 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 hparent removebr
99b0: 61 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61 anch $bra
99c0: 6e 63 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68 nch.. $branch
99d0: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 parent removechi
99e0: 6c 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 ldonbranch $root
99f0: 0a 09 7d 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 ..}...# The root
9a00: 20 69 73 20 6e 6f 20 73 75 63 68 20 61 6e 79 20 is no such any
9a10: 6c 6f 6e 67 65 72 20 65 69 74 68 65 72 2e 0a 09 longer either...
9a20: 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 ldelete myroots
9a30: 24 72 6f 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f $root...# Now go
9a40: 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 69 6e through the lin
9a50: 65 20 61 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c e and remove all
9a60: 20 69 74 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a its revisions..
9a70: 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e ..while {$root n
9a80: 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f e ""} {.. $ro
9a90: 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 ot removealltags
9aa0: 0a 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f .. $root remo
9ab0: 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20 veallbranches..
9ac0: 20 20 20 23 20 4e 6f 74 65 3a 20 53 65 65 20 74 # Note: See t
9ad0: 68 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20 he note [x]....
9ae0: 20 20 20 23 20 46 72 6f 6d 20 63 76 73 32 73 76 # From cvs2sv
9af0: 6e 3a 20 49 66 20 74 68 69 73 20 69 73 20 74 68 n: If this is th
9b00: 65 20 6c 61 73 74 20 64 65 66 61 75 6c 74 20 72 e last default r
9b10: 65 76 69 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20 evision on a..
9b20: 20 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 # non-trunk de
9b30: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c fault branch fol
9b40: 6c 6f 77 65 64 20 62 79 20 61 20 31 2e 32 20 72 lowed by a 1.2 r
9b50: 65 76 69 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 evision,.. #
9b60: 74 68 65 6e 20 74 68 65 20 31 2e 32 20 72 65 76 then the 1.2 rev
9b70: 69 73 69 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e ision depends on
9b80: 20 74 68 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d this one. FIXM
9b90: 45 3a 20 49 74 20 69 73 0a 09 20 20 20 20 23 20 E: It is.. #
9ba0: 71 75 65 73 74 69 6f 6e 61 62 6c 65 20 77 68 65 questionable whe
9bb0: 74 68 65 72 20 74 68 69 73 20 68 61 6e 64 6c 69 ther this handli
9bc0: 6e 67 20 69 73 20 63 6f 72 72 65 63 74 2c 20 73 ng is correct, s
9bd0: 69 6e 63 65 20 74 68 65 0a 09 20 20 20 20 23 20 ince the.. #
9be0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c non-trunk defaul
9bf0: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f t branch revisio
9c00: 6e 73 20 61 66 66 65 63 74 20 74 72 75 6e 6b 20 ns affect trunk
9c10: 61 6e 64 0a 09 20 20 20 20 23 20 73 68 6f 75 6c and.. # shoul
9c20: 64 20 74 68 65 72 65 66 6f 72 65 20 6e 6f 74 20 d therefore not
9c30: 6a 75 73 74 20 62 65 20 64 69 73 63 61 72 64 65 just be discarde
9c40: 64 20 65 76 65 6e 20 69 66 0a 09 20 20 20 20 23 d even if.. #
9c50: 20 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a --trunk-only...
9c60: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 . if {[$root
9c70: 68 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68 hasdefaultbranch
9c80: 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 child]} {...set
9c90: 6e 74 64 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74 ntdbchild [$root
9ca0: 20 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 defaultbranchch
9cb0: 69 6c 64 5d 0a 09 09 69 6e 74 65 67 72 69 74 79 ild]...integrity
9cc0: 20 61 73 73 65 72 74 20 7b 0a 09 09 20 20 20 20 assert {...
9cd0: 5b 24 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61 [$ntdbchild defa
9ce0: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d ultbranchparent]
9cf0: 20 65 71 20 24 6e 74 64 62 63 68 69 6c 64 0a 09 eq $ntdbchild..
9d00: 09 7d 20 7b 6e 74 64 62 20 2d 20 74 72 75 6e 6b .} {ntdb - trunk
9d10: 20 6c 69 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 7d linkage broken}
9d20: 0a 09 09 24 6e 74 64 62 63 68 69 6c 64 20 63 75 ...$ntdbchild cu
9d30: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 tdefaultbranchpa
9d40: 72 65 6e 74 0a 09 09 69 66 20 7b 5b 24 6e 74 64 rent...if {[$ntd
9d50: 62 63 68 69 6c 64 20 68 61 73 70 61 72 65 6e 74 bchild hasparent
9d60: 5d 7d 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 ]} {... lappe
9d70: 6e 64 20 6d 79 72 6f 6f 74 73 20 5b 24 6e 74 64 nd myroots [$ntd
9d80: 62 63 68 69 6c 64 20 70 61 72 65 6e 74 5d 0a 09 bchild parent]..
9d90: 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 .}.. }...
9da0: 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 set root [$root
9db0: 63 68 69 6c 64 5d 0a 09 7d 0a 0a 09 72 65 74 75 child]..}...retu
9dc0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 rn. }.. me
9dd0: 74 68 6f 64 20 47 72 61 66 74 4e 54 44 42 32 54 thod GraftNTDB2T
9de0: 72 75 6e 6b 20 7b 72 6f 6f 74 7d 20 7b 0a 09 23 runk {root} {..#
9df0: 20 57 65 20 63 61 6e 20 6e 6f 77 20 67 72 61 66 We can now graf
9e00: 74 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 t the non-trunk
9e10: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 default branch r
9e20: 65 76 69 73 69 6f 6e 73 20 74 6f 0a 09 23 20 74 evisions to..# t
9e30: 72 75 6e 6b 2e 20 54 68 65 79 20 73 68 6f 75 6c runk. They shoul
9e40: 64 20 61 6c 72 65 61 64 79 20 62 65 20 61 6c 6f d already be alo
9e50: 6e 65 20 6f 6e 20 61 20 43 56 53 42 72 61 6e 63 ne on a CVSBranc
9e60: 68 2d 6c 65 73 73 0a 09 23 20 62 72 61 6e 63 68 h-less..# branch
9e70: 2e 0a 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 ....integrity as
9e80: 73 65 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 sert {![$root ha
9e90: 73 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 sparentbranch]}
9ea0: 7b 4e 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c {NTDB root still
9eb0: 20 68 61 73 20 69 74 73 20 62 72 61 6e 63 68 20 has its branch
9ec0: 73 79 6d 62 6f 6c 7d 0a 09 69 6e 74 65 67 72 69 symbol}..integri
9ed0: 74 79 20 61 73 73 65 72 74 20 7b 21 5b 24 72 6f ty assert {![$ro
9ee0: 6f 74 20 68 61 73 62 72 61 6e 63 68 65 73 5d 7d ot hasbranches]}
9ef0: 20 20 20 20 20 7b 4e 54 44 42 20 72 6f 6f 74 20 {NTDB root
9f00: 73 74 69 6c 6c 20 68 61 73 20 73 70 61 77 6e 65 still has spawne
9f10: 64 20 62 72 61 6e 63 68 65 73 7d 0a 0a 09 73 65 d branches}...se
9f20: 74 20 6c 61 73 74 20 24 72 6f 6f 74 0a 09 77 68 t last $root..wh
9f30: 69 6c 65 20 7b 5b 24 6c 61 73 74 20 68 61 73 63 ile {[$last hasc
9f40: 68 69 6c 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74 hild]} {set last
9f50: 20 5b 24 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a [$last child]}.
9f60: 0a 09 69 66 20 7b 5b 24 6c 61 73 74 20 68 61 73 ..if {[$last has
9f70: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 defaultbranchchi
9f80: 6c 64 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 ld]} {... set
9f90: 20 72 65 76 31 32 20 5b 24 6c 61 73 74 20 64 65 rev12 [$last de
9fa0: 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 faultbranchchild
9fb0: 5d 0a 09 20 20 20 20 24 72 65 76 31 32 20 63 75 ].. $rev12 cu
9fc0: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 tdefaultbranchpa
9fd0: 72 65 6e 74 0a 09 20 20 20 20 24 6c 61 73 74 20 rent.. $last
9fe0: 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e 63 cutdefaultbranc
9ff0: 68 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 72 65 hchild... $re
a000: 76 31 32 20 63 68 61 6e 67 65 70 61 72 65 6e 74 v12 changeparent
a010: 20 24 6c 61 73 74 0a 09 20 20 20 20 24 6c 61 73 $last.. $las
a020: 74 20 20 63 68 61 6e 67 65 63 68 69 6c 64 20 24 t changechild $
a030: 72 65 76 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c rev12... ldel
a040: 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 ete myroots $rev
a050: 31 32 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 12... # Note
a060: 61 6e 64 20 72 65 6d 65 6d 62 65 72 20 74 68 61 and remember tha
a070: 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 72 65 t the type of re
a080: 76 31 32 20 77 61 73 20 61 6c 72 65 61 64 79 0a v12 was already.
a090: 09 20 20 20 20 23 20 61 64 6a 75 73 74 65 64 20 . # adjusted
a0a0: 62 79 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e by AdjustNonTrun
a0b0: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 2c 20 kDefaultBranch,
a0c0: 73 6f 20 77 65 20 64 6f 6e 27 74 0a 09 20 20 20 so we don't..
a0d0: 20 23 20 68 61 76 65 20 74 6f 20 63 68 61 6e 67 # have to chang
a0e0: 65 20 69 74 73 20 74 79 70 65 20 68 65 72 65 2e e its type here.
a0f0: 0a 09 7d 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f ..}...while {$ro
a100: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 ot ne ""} {..
a110: 20 24 72 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61 $root setondefa
a120: 75 6c 74 62 72 61 6e 63 68 20 30 0a 09 20 20 20 ultbranch 0..
a130: 20 24 72 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d $root setlod $m
a140: 79 74 72 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65 ytrunk.. fore
a150: 61 63 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 ach tag [$root t
a160: 61 67 73 5d 20 7b 0a 09 09 24 74 61 67 20 73 65 ags] {...$tag se
a170: 74 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 tlod $mytrunk..
a180: 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f }.. set ro
a190: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d ot [$root child]
a1a0: 0a 09 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 ..}.. ret
a1b0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d urn. }.. m
a1c0: 65 74 68 6f 64 20 41 63 74 69 76 65 20 7b 7d 20 ethod Active {}
a1d0: 7b 0a 09 73 65 74 20 72 65 76 69 73 69 6f 6e 73 {..set revisions
a1e0: 20 7b 7d 0a 09 73 65 74 20 73 79 6d 62 6f 6c 73 {}..set symbols
a1f0: 20 20 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 {}...foreach
a200: 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 root [$self Line
a210: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 sOfDevelopment]
a220: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f {.. if {[$roo
a230: 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 t hasparentbranc
a240: 68 5d 7d 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 h]} { lappend sy
a250: 6d 62 6f 6c 73 20 5b 24 72 6f 6f 74 20 70 61 72 mbols [$root par
a260: 65 6e 74 62 72 61 6e 63 68 5d 20 7d 0a 09 20 20 entbranch] }..
a270: 20 20 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e while {$root n
a280: 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e e ""} {...lappen
a290: 64 20 72 65 76 69 73 69 6f 6e 73 20 24 72 6f 6f d revisions $roo
a2a0: 74 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 t...foreach tag
a2b0: 20 20 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 [$root tags]
a2c0: 20 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 { lappend sy
a2d0: 6d 62 6f 6c 73 20 24 74 61 67 20 20 20 20 7d 0a mbols $tag }.
a2e0: 09 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 ..foreach branch
a2f0: 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 [$root branches
a300: 5d 20 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 72 ] {... integr
a310: 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 09 ity assert {....
a320: 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 5d [$branch parent]
a330: 20 65 71 20 24 72 6f 6f 74 0a 09 09 20 20 20 20 eq $root...
a340: 7d 20 7b 42 61 63 6b 72 65 66 65 72 65 6e 63 65 } {Backreference
a350: 20 62 72 61 6e 63 68 20 74 6f 20 69 74 73 20 72 branch to its r
a360: 6f 6f 74 20 69 73 20 6d 69 73 73 69 6e 67 20 6f oot is missing o
a370: 72 20 77 72 6f 6e 67 7d 0a 09 09 20 20 20 20 6c r wrong}... l
a380: 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 append symbols $
a390: 62 72 61 6e 63 68 0a 09 09 7d 0a 09 09 73 65 74 branch...}...set
a3a0: 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d lod [$root lod]
a3b0: 0a 09 09 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 ...if {![$lod is
a3c0: 74 72 75 6e 6b 5d 7d 20 7b 0a 09 09 20 20 20 20 trunk]} {...
a3d0: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 integrity assert
a3e0: 20 7b 0a 09 09 09 5b 24 6c 6f 64 20 68 61 73 63 {....[$lod hasc
a3f0: 68 69 6c 64 5d 0a 09 09 20 20 20 20 7d 20 7b 42 hild]... } {B
a400: 72 61 6e 63 68 20 69 73 20 4c 4f 44 20 73 79 6d ranch is LOD sym
a410: 62 6f 6c 20 77 69 74 68 6f 75 74 20 72 65 76 69 bol without revi
a420: 73 69 6f 6e 73 7d 0a 09 09 20 20 20 20 6c 61 70 sions}... lap
a430: 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 6c 6f pend symbols $lo
a440: 64 0a 09 09 7d 0a 09 09 73 65 74 20 72 6f 6f 74 d...}...set root
a450: 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 [$root child]..
a460: 20 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 }..}...retur
a470: 6e 20 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 20 2d n [list [lsort -
a480: 75 6e 69 71 75 65 20 2d 64 69 63 74 20 24 72 65 unique -dict $re
a490: 76 69 73 69 6f 6e 73 5d 20 5b 6c 73 6f 72 74 20 visions] [lsort
a4a0: 2d 75 6e 69 71 75 65 20 2d 64 69 63 74 20 24 73 -unique -dict $s
a4b0: 79 6d 62 6f 6c 73 5d 5d 0a 20 20 20 20 7d 0a 0a ymbols]]. }..
a4c0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 67 67 72 . method Aggr
a4d0: 65 67 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 20 egateSymbolData
a4e0: 7b 7d 20 7b 0a 09 23 20 4e 6f 77 20 74 68 61 74 {} {..# Now that
a4f0: 20 74 68 65 20 65 78 61 63 74 20 73 65 74 20 6f the exact set o
a500: 66 20 72 65 76 69 73 69 6f 6e 73 20 28 61 6e 64 f revisions (and
a510: 20 74 68 72 6f 75 67 68 20 74 68 61 74 0a 09 23 through that..#
a520: 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 branches and ta
a530: 67 73 29 20 69 73 20 6b 6e 6f 77 6e 20 77 65 20 gs) is known we
a540: 63 61 6e 20 75 70 64 61 74 65 20 74 68 65 20 61 can update the a
a550: 67 67 72 65 67 61 74 65 0a 09 23 20 73 79 6d 62 ggregate..# symb
a560: 6f 6c 20 73 74 61 74 69 73 74 69 63 73 2e 0a 0a ol statistics...
a570: 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 .foreach root [$
a580: 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 self LinesOfDeve
a590: 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 lopment] {..
a5a0: 73 65 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c set lod [$root l
a5b0: 6f 64 5d 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 od]... # Note
a5c0: 3a 20 49 66 20 74 68 65 20 4c 4f 44 20 69 73 20 : If the LOD is
a5d0: 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20 63 6f the trunk the co
a5e0: 75 6e 74 2a 2c 20 65 74 63 2e 20 6d 65 74 68 6f unt*, etc. metho
a5f0: 64 73 0a 09 20 20 20 20 23 20 77 69 6c 6c 20 64 ds.. # will d
a600: 6f 20 6e 6f 74 68 69 6e 67 2c 20 61 73 20 69 74 o nothing, as it
a610: 20 69 73 20 61 6c 77 61 79 73 20 70 72 65 73 65 is always prese
a620: 6e 74 20 28 63 61 6e 6e 6f 74 20 62 65 0a 09 20 nt (cannot be..
a630: 20 20 20 23 20 65 78 63 6c 75 64 65 64 29 2c 20 # excluded),
a640: 61 6e 64 20 69 73 20 61 6c 77 61 79 73 20 61 20 and is always a
a650: 62 72 61 6e 63 68 20 74 6f 6f 2e 0a 0a 09 20 20 branch too....
a660: 20 20 23 20 4c 69 6e 65 73 20 6f 66 20 64 65 76 # Lines of dev
a670: 65 6c 6f 70 6d 65 6e 74 20 63 6f 75 6e 74 20 61 elopment count a
a680: 73 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 68 s branches and h
a690: 61 76 65 20 61 20 63 6f 6d 6d 69 74 0a 09 20 20 ave a commit..
a6a0: 20 20 23 20 6f 6e 20 74 68 65 6d 20 28 72 6f 6f # on them (roo
a6b0: 74 29 2e 20 49 66 20 74 68 65 79 20 61 72 65 20 t). If they are
a6c0: 73 74 69 6c 6c 20 61 74 74 61 63 68 65 64 20 74 still attached t
a6d0: 6f 20 61 20 74 72 65 65 20 77 65 0a 09 20 20 20 o a tree we..
a6e0: 20 23 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 # have to compu
a6f0: 74 65 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 te and register
a700: 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73 possible parents
a710: 2e 0a 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 .... $lod cou
a720: 6e 74 61 73 62 72 61 6e 63 68 0a 09 20 20 20 20 ntasbranch..
a730: 24 6c 6f 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69 $lod countacommi
a740: 74 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f t... if {[$ro
a750: 6f 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e ot hasparentbran
a760: 63 68 5d 7d 20 7b 0a 09 09 23 20 4e 6f 74 65 20 ch]} {...# Note
a770: 6c 6f 64 20 3d 3d 20 5b 24 72 6f 6f 74 20 70 61 lod == [$root pa
a780: 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 09 24 6c rentbranch]...$l
a790: 6f 64 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e od possibleparen
a7a0: 74 73 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 ts.. } elseif
a7b0: 20 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b {![$lod istrunk
a7c0: 5d 20 26 26 20 5b 24 72 6f 6f 74 20 69 73 6f 6e ] && [$root ison
a7d0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 defaultbranch]}
a7e0: 7b 0a 09 09 23 20 54 68 69 73 20 69 73 20 74 68 {...# This is th
a7f0: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 e root revision
a800: 6f 66 20 61 20 64 65 74 61 63 68 65 64 20 4e 54 of a detached NT
a810: 44 42 2e 20 57 65 0a 09 09 23 20 68 61 76 65 20 DB. We...# have
a820: 74 6f 20 6d 61 6e 75 61 6c 6c 79 20 73 65 74 20 to manually set
a830: 74 68 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c the only possibl
a840: 65 20 70 61 72 65 6e 74 20 66 6f 72 0a 09 09 23 e parent for...#
a850: 20 74 68 69 73 20 4c 4f 44 2c 20 74 68 65 20 74 this LOD, the t
a860: 72 75 6e 6b 20 69 74 73 65 6c 66 2e 0a 0a 09 09 runk itself.....
a870: 5b 24 6c 6f 64 20 73 79 6d 62 6f 6c 5d 20 70 6f [$lod symbol] po
a880: 73 73 69 62 6c 65 70 61 72 65 6e 74 20 24 6d 79 ssibleparent $my
a890: 74 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 trunk.. }...
a8a0: 20 20 20 23 20 46 6f 72 20 74 68 65 20 72 65 76 # For the rev
a8b0: 69 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 isions in the li
a8c0: 6e 65 20 77 65 20 72 65 67 69 73 74 65 72 20 74 ne we register t
a8d0: 68 65 69 72 20 62 72 61 6e 63 68 65 73 0a 09 20 heir branches..
a8e0: 20 20 20 23 20 61 6e 64 20 74 61 67 73 20 61 73 # and tags as
a8f0: 20 62 6c 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 blockers for th
a900: 65 20 6c 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 e lod, and updat
a910: 65 20 74 68 65 20 74 79 70 65 0a 09 20 20 20 20 e the type..
a920: 23 20 63 6f 75 6e 74 65 72 73 20 61 73 20 77 65 # counters as we
a930: 6c 6c 2e 20 41 73 20 62 72 61 6e 63 68 20 73 79 ll. As branch sy
a940: 6d 62 6f 6c 73 20 77 69 74 68 6f 75 74 20 63 6f mbols without co
a950: 6d 6d 69 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 mmits on.. #
a960: 74 68 65 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 them are not lis
a970: 74 65 64 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 ted as lines of
a980: 64 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 development, we
a990: 68 61 76 65 20 74 6f 0a 09 20 20 20 20 23 20 63 have to.. # c
a9a0: 6f 75 6e 74 20 74 68 65 6d 20 68 65 72 65 20 61 ount them here a
a9b0: 73 20 77 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e s well, as plain
a9c0: 20 62 72 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 branches. At la
a9d0: 73 74 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 st we.. # hav
a9e0: 65 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 e to compute and
a9f0: 20 72 65 67 69 73 74 65 72 20 74 68 65 20 70 6f register the po
aa00: 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73 20 6f ssible parents o
aa10: 66 20 74 68 65 0a 09 20 20 20 20 23 20 74 61 67 f the.. # tag
aa20: 73 2c 20 69 6e 20 63 61 73 65 20 74 68 65 79 20 s, in case they
aa30: 61 72 65 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 are later conver
aa40: 74 65 64 20 61 73 20 62 72 61 6e 63 68 65 73 2e ted as branches.
aa50: 0a 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 ... while {$r
aa60: 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 oot ne ""} {...f
aa70: 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 oreach branch [$
aa80: 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b root branches] {
aa90: 0a 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 ... $lod bloc
aaa0: 6b 65 64 62 79 20 24 62 72 61 6e 63 68 0a 09 09 kedby $branch...
aab0: 20 20 20 20 24 62 72 61 6e 63 68 20 70 6f 73 73 $branch poss
aac0: 69 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 ibleparents...
aad0: 20 20 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 if {[$branch h
aae0: 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e aschild]} contin
aaf0: 75 65 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 ue... $branch
ab00: 20 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 countasbranch..
ab10: 09 7d 0a 0a 09 09 66 6f 72 65 61 63 68 20 74 61 .}....foreach ta
ab20: 67 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b g [$root tags] {
ab30: 0a 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 ... $lod bloc
ab40: 6b 65 64 62 79 20 24 74 61 67 0a 09 09 20 20 20 kedby $tag...
ab50: 20 24 74 61 67 20 70 6f 73 73 69 62 6c 65 70 61 $tag possiblepa
ab60: 72 65 6e 74 73 0a 09 09 20 20 20 20 24 74 61 67 rents... $tag
ab70: 20 63 6f 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a countastag...}.
ab80: 0a 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f ...set root [$ro
ab90: 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d ot child].. }
aba0: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 ..}...return.
abb0: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 }.. # # ## #
abc0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
abd0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
abe0: 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 ## Configura
abf0: 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 tion.. pragma
ac00: 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 -hastypeinfo
ac10: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 no ; # no type
ac20: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 introspection.
ac30: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e pragma -hasin
ac40: 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 fo no ;
ac50: 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 # no object intr
ac60: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 ospection. pr
ac70: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 agma -hastypemet
ac80: 68 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 hods no ; # typ
ac90: 65 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e e is not relevan
aca0: 74 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 t... # # ## #
acb0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
acc0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
acd0: 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 }..namespace eva
ace0: 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a l ::vc::fossil::
acf0: 69 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 import::cvs {.
ad00: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f namespace expo
ad10: 72 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 rt file. name
ad20: 73 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 space eval file
ad30: 7b 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 {..# Import not
ad40: 72 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 required, alread
ad50: 79 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 y a child namesp
ad60: 61 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 ace...# namespac
ad70: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 e import ::vc::f
ad80: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
ad90: 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 vs::file::rev..#
ada0: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 namespace impor
adb0: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a t ::vc::fossil::
adc0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c import::cvs::fil
add0: 65 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 e::sym..namespac
ade0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 e import ::vc::t
adf0: 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e ools::misc::*..n
ae00: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
ae10: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f ::vc::tools::tro
ae20: 75 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 uble..namespace
ae30: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f import ::vc::too
ae40: 6c 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 ls::log..namespa
ae50: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
ae60: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
ae70: 63 76 73 3a 3a 62 6c 6f 62 73 74 6f 72 65 0a 09 cvs::blobstore..
ae80: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
ae90: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
aea0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 mport::cvs::stat
aeb0: 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 e..namespace imp
aec0: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c ort ::vc::fossil
aed0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 ::import::cvs::i
aee0: 6e 74 65 67 72 69 74 79 0a 09 6e 61 6d 65 73 70 ntegrity..namesp
aef0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
af00: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a :fossil::import:
af10: 3a 63 76 73 3a 3a 67 74 63 6f 72 65 0a 20 20 20 :cvs::gtcore.
af20: 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 }.}..# # ## ###
af30: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
af40: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 ############# ##
af50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
af60: 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 ###.## Ready..pa
af70: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 ckage provide vc
af80: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 ::fossil::import
af90: 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a ::cvs::file 1.0.
afa0: 72 65 74 75 72 6e 0a return.