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 5b 65 78 70 72 20 7b 24 73 6c 20 2d 20 31 f [expr {$sl - 1
3d70: 7d 5d 5d 20 7b 0a 09 09 09 6c 6f 67 20 77 72 69 }]] {....log wri
3d80: 74 65 20 31 35 20 66 69 6c 65 20 7b 2e 7c 24 78 te 15 file {.|$x
3d90: 7c 7d 0a 09 09 09 6c 61 70 70 65 6e 64 20 72 65 |}....lappend re
3da0: 73 20 24 78 0a 09 09 20 20 20 20 7d 0a 09 09 20 s $x... }...
3db0: 20 20 20 73 65 74 20 20 6f 6f 66 66 20 24 65 6c set ooff $el
3dc0: 0a 09 09 7d 0a 09 09 61 20 7b 0a 09 09 20 20 20 ...}...a {...
3dd0: 20 69 66 20 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 if {$sl < $ooff
3de0: 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 } { trouble inte
3df0: 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20 62 65 66 rnal {Insert bef
3e00: 6f 72 65 20 6c 61 73 74 20 65 64 69 74 7d 20 7d ore last edit} }
3e10: 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c 20 3e ... if {$sl >
3e20: 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c $blen} { troubl
3e30: 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49 6e 73 65 e internal {Inse
3e40: 72 74 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64 rt past file end
3e50: 7d 20 7d 0a 0a 09 09 20 20 20 20 66 6f 72 65 61 } }.... forea
3e60: 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 62 61 ch x [lrange $ba
3e70: 73 65 20 24 6f 6f 66 66 20 5b 65 78 70 72 20 7b se $ooff [expr {
3e80: 24 73 6c 20 2d 20 31 7d 5d 5d 20 7b 0a 09 09 09 $sl - 1}]] {....
3e90: 6c 6f 67 20 77 72 69 74 65 20 31 35 20 66 69 6c log write 15 fil
3ea0: 65 20 7b 2e 7c 24 78 7c 7d 0a 09 09 09 6c 61 70 e {.|$x|}....lap
3eb0: 70 65 6e 64 20 72 65 73 20 24 78 0a 09 09 20 20 pend res $x...
3ec0: 20 20 7d 0a 09 09 20 20 20 20 66 6f 72 65 61 63 }... foreac
3ed0: 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 6c 69 6e h x [lrange $lin
3ee0: 65 73 20 24 69 20 5b 65 78 70 72 20 7b 24 69 20 es $i [expr {$i
3ef0: 2b 20 24 63 6e 20 2d 20 31 7d 5d 5d 20 7b 0a 09 + $cn - 1}]] {..
3f00: 09 09 6c 6f 67 20 77 72 69 74 65 20 31 35 20 66 ..log write 15 f
3f10: 69 6c 65 20 7b 2b 7c 24 78 7c 7d 0a 09 09 09 6c ile {+|$x|}....l
3f20: 61 70 70 65 6e 64 20 72 65 73 20 24 78 0a 09 09 append res $x...
3f30: 20 20 20 20 7d 0a 09 09 20 20 20 20 73 65 74 20 }... set
3f40: 6f 6f 66 66 20 24 73 6c 0a 09 09 20 20 20 20 69 ooff $sl... i
3f50: 6e 63 72 20 69 20 24 63 6e 0a 09 09 7d 0a 09 20 ncr i $cn...}..
3f60: 20 20 20 7d 0a 09 7d 0a 09 66 6f 72 65 61 63 68 }..}..foreach
3f70: 20 78 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65 x [lrange $base
3f80: 20 24 6f 6f 66 66 20 65 6e 64 5d 20 7b 20 6c 61 $ooff end] { la
3f90: 70 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 ppend res $x }..
3fa0: 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 24 72 65 return [join $re
3fb0: 73 20 5c 6e 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 s \n]. }..
3fc0: 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 32 20 method Expand2
3fd0: 7b 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a 09 {graph node} {..
3fe0: 73 65 74 20 72 65 76 6e 72 20 5b 24 67 72 61 70 set revnr [$grap
3ff0: 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 h node get $node
4000: 20 72 65 76 6e 72 5d 0a 0a 09 23 20 46 69 72 73 revnr]...# Firs
4010: 74 20 69 6d 70 6f 72 74 20 74 68 65 20 66 69 6c t import the fil
4020: 65 2e 0a 09 6c 61 70 70 65 6e 64 20 6d 79 69 6d e...lappend myim
4030: 70 6f 72 74 20 5b 6c 69 73 74 20 41 20 72 24 72 port [list A r$r
4040: 65 76 6e 72 20 7b 7d 5d 0a 0a 09 69 66 20 7b 5b evnr {}]...if {[
4050: 24 67 72 61 70 68 20 6e 6f 64 65 20 6b 65 79 65 $graph node keye
4060: 78 69 73 74 73 20 24 6e 6f 64 65 20 5f 5f 62 61 xists $node __ba
4070: 73 65 5f 5f 5d 7d 20 7b 0a 09 20 20 20 20 23 20 se__]} {.. #
4080: 44 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 Delta node. __ba
4090: 73 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65 se__ is the name
40a0: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e of the file con
40b0: 74 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74 taining.. # t
40c0: 68 65 20 62 61 73 65 6c 69 6e 65 2e 20 47 65 6e he baseline. Gen
40d0: 65 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f erate instructio
40e0: 6e 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 64 65 n to make the de
40f0: 6c 74 61 20 61 73 0a 09 20 20 20 20 23 20 77 65 lta as.. # we
4100: 6c 6c 2e 0a 0a 09 20 20 20 20 73 65 74 20 66 62 ll.... set fb
4110: 61 73 65 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 ase [$graph node
4120: 20 67 65 74 20 24 6e 6f 64 65 20 5f 5f 62 61 73 get $node __bas
4130: 65 5f 5f 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e e__].. lappen
4140: 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 73 74 d myimport [list
4150: 20 44 20 72 24 72 65 76 6e 72 20 72 24 66 62 61 D r$revnr r$fba
4160: 73 65 5d 0a 09 7d 0a 0a 09 23 20 50 6f 73 74 20 se]..}...# Post
4170: 74 6f 20 61 6c 6c 20 73 75 63 63 65 73 73 6f 72 to all successor
4180: 73 20 74 68 61 74 20 74 68 65 20 6a 75 73 74 20 s that the just
4190: 67 65 6e 65 72 61 74 65 64 20 66 69 6c 65 20 69 generated file i
41a0: 73 20 74 68 65 69 72 0a 09 23 20 62 61 73 65 6c s their..# basel
41b0: 69 6e 65 2e 20 45 78 63 65 70 74 69 6f 6e 3a 20 ine. Exception:
41c0: 54 68 6f 73 65 20 77 68 69 63 68 20 61 76 65 20 Those which ave
41d0: 61 6c 72 65 61 64 79 20 61 20 62 61 73 65 6c 69 already a baseli
41e0: 6e 65 20 73 65 74 2e 0a 09 23 20 54 6f 67 65 74 ne set...# Toget
41f0: 68 65 72 20 77 69 74 68 20 74 68 65 20 73 6f 72 her with the sor
4200: 74 69 6e 67 20 6f 66 20 74 72 75 6e 6b 20 72 65 ting of trunk re
4210: 76 69 73 69 6f 6e 73 20 66 69 72 73 74 20 74 68 visions first th
4220: 65 20 74 72 75 6e 6b 0a 09 23 20 73 68 6f 75 6c e trunk..# shoul
4230: 64 20 6f 6e 65 20 75 6e 69 6e 74 65 72 75 70 74 d one uninterupt
4240: 65 64 20 6c 69 6e 65 2c 20 77 69 74 68 20 62 72 ed line, with br
4250: 61 6e 63 68 20 72 6f 6f 74 73 20 5f 6e 6f 74 5f anch roots _not_
4260: 20 64 65 6c 74 61 0a 09 23 20 63 6f 6d 70 72 65 delta..# compre
4270: 73 73 65 64 20 70 65 72 20 74 68 65 69 72 20 62 ssed per their b
4280: 72 61 6e 63 68 65 73 2e 0a 0a 09 66 6f 72 65 61 ranches....forea
4290: 63 68 20 6f 75 74 20 5b 24 67 72 61 70 68 20 6e ch out [$graph n
42a0: 6f 64 65 73 20 2d 6f 75 74 20 24 6e 6f 64 65 5d odes -out $node]
42b0: 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 67 72 {.. if {[$gr
42c0: 61 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 69 73 aph node keyexis
42d0: 74 73 20 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f ts $out __base__
42e0: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 ]} continue..
42f0: 20 24 67 72 61 70 68 20 6e 6f 64 65 20 73 65 74 $graph node set
4300: 20 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 20 24 $out __base__ $
4310: 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e revnr..}..return
4320: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 76 61 72 69 . }.. vari
4330: 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74 0a 0a 20 able myimport..
4340: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ##
4350: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
4360: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 ##########. #
4370: 23 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72 # State.. var
4380: 69 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20 20 iable myid
4390: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 46 {} ; # F
43a0: 69 6c 65 20 69 64 20 69 6e 20 74 68 65 20 70 65 ile id in the pe
43b0: 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a rsistent state..
43c0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 variable myp
43d0: 61 74 68 20 20 20 20 20 20 20 20 20 20 20 20 7b ath {
43e0: 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68 } ; # Path of th
43f0: 65 20 66 69 6c 65 27 73 20 72 63 73 20 61 72 63 e file's rcs arc
4400: 68 69 76 65 2e 0a 20 20 20 20 76 61 72 69 61 62 hive.. variab
4410: 6c 65 20 6d 79 75 73 72 70 61 74 68 20 20 20 20 le myusrpath
4420: 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 68 {} ; # Path
4430: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 61 73 20 of the file as
4440: 73 65 65 6e 20 62 79 20 75 73 65 72 73 2e 0a 20 seen by users..
4450: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 65 78 variable myex
4460: 65 63 75 74 61 62 6c 65 20 20 20 20 20 20 30 20 ecutable 0
4470: 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 ; # Boolean fla
4480: 67 20 27 66 69 6c 65 20 65 78 65 63 75 74 61 62 g 'file executab
4490: 6c 65 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c le'.. variabl
44a0: 65 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20 20 e myproject
44b0: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 {} ; # Refer
44c0: 65 6e 63 65 20 74 6f 20 74 68 65 20 70 72 6f 6a ence to the proj
44d0: 65 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 ect object.....
44e0: 20 20 20 23 20 74 68 65 20 66 69 6c 65 20 62 65 # the file be
44f0: 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76 61 longs to.. va
4500: 72 69 61 62 6c 65 20 6d 79 72 65 76 20 2d 61 72 riable myrev -ar
4510: 72 61 79 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 ray {} ; #
4520: 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 Maps revision nu
4530: 6d 62 65 72 20 74 6f 20 74 68 65 0a 09 09 09 09 mber to the.....
4540: 20 20 20 20 23 20 61 73 73 6f 63 69 61 74 65 64 # associated
4550: 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 revision object
4560: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
4570: 79 72 65 76 69 73 69 6f 6e 73 20 20 20 20 20 20 yrevisions
4580: 20 7b 7d 20 3b 20 23 20 53 61 6d 65 20 61 73 20 {} ; # Same as
4590: 6d 79 72 65 76 2c 20 62 75 74 20 61 20 6c 69 73 myrev, but a lis
45a0: 74 2c 0a 09 09 09 09 20 20 20 20 23 20 67 69 76 t,..... # giv
45b0: 69 6e 67 20 75 73 20 74 68 65 20 6f 72 64 65 72 ing us the order
45c0: 20 6f 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 of..... # re
45d0: 76 69 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61 72 visions.. var
45e0: 69 61 62 6c 65 20 6d 79 61 69 64 20 20 20 20 20 iable myaid
45f0: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d -array {} ; # M
4600: 61 70 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 ap revision numb
4610: 65 72 73 20 74 6f 20 74 68 65 20 69 64 0a 09 09 ers to the id...
4620: 09 09 20 20 20 20 23 20 6f 66 20 74 68 65 20 61 .. # of the a
4630: 75 74 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69 74 uthor who commit
4640: 74 65 64 0a 09 09 09 09 20 20 20 20 23 20 69 74 ted..... # it
4650: 2e 20 54 68 69 73 20 69 73 20 6c 61 74 65 72 20 . This is later
4660: 61 67 67 72 65 67 61 74 65 64 0a 09 09 09 09 20 aggregated.....
4670: 20 20 20 23 20 77 69 74 68 20 63 6f 6d 6d 69 74 # with commit
4680: 20 6d 65 73 73 61 67 65 2c 20 62 72 61 6e 63 68 message, branch
4690: 20 6e 61 6d 65 0a 09 09 09 09 20 20 20 20 23 20 name..... #
46a0: 61 6e 64 20 70 72 6f 6a 65 63 74 20 69 64 20 66 and project id f
46b0: 6f 72 20 61 20 6d 65 74 61 20 69 64 2e 0a 20 20 or a meta id..
46c0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65 61 variable myhea
46d0: 64 72 65 76 6e 72 20 20 20 20 20 20 20 7b 7d 20 drevnr {}
46e0: 3b 20 23 20 48 65 61 64 20 72 65 76 69 73 69 6f ; # Head revisio
46f0: 6e 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 n (revision numb
4700: 65 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c 65 er). variable
4710: 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20 20 myprincipal
4720: 20 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63 69 {} ; # Princi
4730: 70 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61 6e pal branch (bran
4740: 63 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09 09 ch number)......
4750: 20 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20 74 # Contrary t
4760: 6f 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73 20 o the name this
4770: 69 73 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 is the..... #
4780: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e default branch.
4790: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
47a0: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20 20 dependencies
47b0: 7b 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61 72 {} ; # Dictionar
47c0: 79 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c y parent -> chil
47d0: 64 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65 63 d,..... # rec
47e0: 6f 72 64 73 20 70 72 69 6d 61 72 79 20 64 65 70 ords primary dep
47f0: 65 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20 76 endencies.. v
4800: 61 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74 ariable myimport
4810: 65 64 20 20 20 20 20 20 20 20 30 20 20 3b 20 23 ed 0 ; #
4820: 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 53 Boolean flag. S
4830: 65 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 et if and only i
4840: 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 20 f..... # rev
4850: 31 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65 20 1.1 of the file
4860: 73 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20 20 seemingly.....
4870: 20 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65 64 # was imported
4880: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64 65 instead of adde
4890: 64 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72 6d d..... # norm
48a0: 61 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61 62 ally.. variab
48b0: 6c 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20 20 le myroot
48c0: 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 {} ; # Refe
48d0: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65 76 rence to the rev
48e0: 69 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09 09 ision object....
48f0: 09 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20 74 . # holding t
4900: 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e he root revision
4910: 2e 20 20 49 74 73 0a 09 09 09 09 20 20 20 20 23 . Its..... #
4920: 20 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79 20 number usually
4930: 69 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62 65 is '1.1'. Can be
4940: 0a 09 09 09 09 20 20 20 20 23 20 61 20 64 69 66 ..... # a dif
4950: 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 62 ferent number, b
4960: 65 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20 20 ecause of.....
4970: 20 20 23 20 67 61 70 73 20 63 72 65 61 74 65 64 # gaps created
4980: 20 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20 2d via 'cvsadmin -
4990: 6f 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 o'.. variable
49a0: 20 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72 72 mybranches -arr
49b0: 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 62 ay {} ; # Maps b
49c0: 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f 20 ranch number to
49d0: 74 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09 20 the symbol.....
49e0: 20 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e 64 # object hand
49f0: 6c 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 2e ling the branch.
4a00: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
4a10: 74 61 67 73 20 20 20 20 20 2d 61 72 72 61 79 20 tags -array
4a20: 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 {} ; # Maps revi
4a30: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 sion number to t
4a40: 68 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20 20 he list.....
4a50: 23 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a 65 # of symbol obje
4a60: 63 74 73 20 66 6f 72 20 74 68 65 20 74 61 67 73 cts for the tags
4a70: 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63 ..... # assoc
4a80: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 72 iated with the r
4a90: 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72 evision.. var
4aa0: 69 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73 20 iable mysymbols
4ab0: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 {} ; # S
4ac0: 65 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c et of the symbol
4ad0: 20 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e 0a names found in.
4ae0: 09 09 09 09 20 20 20 20 23 20 74 68 69 73 20 66 .... # this f
4af0: 69 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 ile... variab
4b00: 6c 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20 30 le mybranchcnt 0
4b10: 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f 72 ; # Counter for
4b20: 20 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72 65 branches, to re
4b30: 63 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20 20 cord their....
4b40: 20 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64 65 # order of de
4b50: 66 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20 61 finition. This a
4b60: 6c 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09 20 lso defines....
4b70: 20 20 20 20 23 20 74 68 65 69 72 20 6f 72 64 65 # their orde
4b80: 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20 77 r of creation, w
4b90: 68 69 63 68 20 69 73 20 74 68 65 0a 09 09 09 20 hich is the....
4ba0: 20 20 20 20 23 20 72 65 76 65 72 73 65 20 6f 66 # reverse of
4bb0: 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 2e definition. I.
4bc0: 65 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09 09 e. a smaller....
4bd0: 20 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d 65 # number me
4be0: 61 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61 72 ans 'Defined ear
4bf0: 6c 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09 09 lier', means....
4c00: 20 20 20 20 20 23 20 27 43 72 65 61 74 65 64 20 # 'Created
4c10: 6c 61 74 65 72 27 2e 0a 0a 20 20 20 20 76 61 72 later'... var
4c20: 69 61 62 6c 65 20 6d 79 74 72 75 6e 6b 20 7b 7d iable mytrunk {}
4c30: 20 3b 20 23 20 44 69 72 65 63 74 20 72 65 66 65 ; # Direct refe
4c40: 72 65 6e 63 65 20 74 6f 20 6d 79 70 72 6f 6a 65 rence to myproje
4c50: 63 74 20 2d 3e 20 74 72 75 6e 6b 2e 0a 20 20 20 ct -> trunk..
4c60: 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74 variable myroot
4c70: 73 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 s {} ; # List of
4c80: 20 72 6f 6f 74 73 20 69 6e 20 74 68 65 20 66 6f roots in the fo
4c90: 72 65 73 74 20 6f 66 0a 09 09 09 20 20 23 20 6c rest of.... # l
4ca0: 6f 64 27 73 2e 20 4f 62 6a 65 63 74 20 72 65 66 od's. Object ref
4cb0: 65 72 65 6e 63 65 73 20 74 6f 20 72 65 76 69 73 erences to revis
4cc0: 69 6f 6e 73 20 61 6e 64 0a 09 09 09 20 20 23 20 ions and.... #
4cd0: 62 72 61 6e 63 68 65 73 2e 20 54 68 65 20 6c 61 branches. The la
4ce0: 74 74 65 72 20 63 61 6e 20 61 70 70 65 61 72 20 tter can appear
4cf0: 77 68 65 6e 20 74 68 65 79 0a 09 09 09 20 20 23 when they.... #
4d00: 20 61 72 65 20 73 65 76 65 72 65 64 20 66 72 6f are severed fro
4d10: 6d 20 74 68 65 69 72 20 70 61 72 65 6e 74 2e 0a m their parent..
4d20: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
4d30: 62 6c 6f 62 20 7b 7d 20 3b 20 23 20 52 65 66 65 blob {} ; # Refe
4d40: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 6f 62 6a rence to the obj
4d50: 65 63 74 20 6d 61 6e 61 67 69 6e 67 20 74 68 65 ect managing the
4d60: 20 62 6c 6f 62 0a 09 09 09 20 23 20 69 6e 66 6f blob.... # info
4d70: 72 6d 61 74 69 6f 6e 20 28 74 65 78 74 72 61 6e rmation (textran
4d80: 67 65 20 6f 66 20 72 65 76 69 73 69 6f 6e 73 2c ge of revisions,
4d90: 20 61 6e 64 0a 09 09 09 20 23 20 64 65 6c 74 61 and.... # delta
4da0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 29 20 6f dependencies) o
4db0: 66 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20 20 f this file...
4dc0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
4dd0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
4de0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
4df0: 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 Internal method
4e00: 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 s.. method Re
4e10: 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d 69 74 cordBranchCommit
4e20: 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b 0a 09 s {branches} {..
4e30: 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 72 65 foreach branchre
4e40: 76 6e 72 20 24 62 72 61 6e 63 68 65 73 20 7b 0a vnr $branches {.
4e50: 09 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 . if {[catch
4e60: 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68 20 5b {...set branch [
4e70: 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e 63 68 $self Rev2Branch
4e80: 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 0a 09 $branchrevnr]..
4e90: 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 73 65 74 20 }]} {...set
4ea0: 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 41 64 branch [$self Ad
4eb0: 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63 68 dUnlabeledBranch
4ec0: 20 5b 72 65 76 20 32 62 72 61 6e 63 68 6e 72 20 [rev 2branchnr
4ed0: 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 5d 0a 09 $branchrevnr]]..
4ee0: 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 52 65 }... # Re
4ef0: 63 6f 72 64 20 74 68 65 20 63 6f 6d 6d 69 74 2c cord the commit,
4f00: 20 6a 75 73 74 20 61 73 20 72 65 76 69 73 69 6f just as revisio
4f10: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 0a 09 20 20 n number for..
4f20: 20 20 23 20 6e 6f 77 2e 20 50 72 6f 63 65 73 42 # now. ProcesB
4f30: 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 65 ranchDependencie
4f40: 73 20 77 69 6c 6c 20 65 78 74 65 6e 64 20 74 68 s will extend th
4f50: 61 74 20 69 74 6f 20 61 0a 09 20 20 20 20 23 20 at ito a.. #
4f60: 70 72 6f 70 65 72 20 6f 62 6a 65 63 74 20 72 65 proper object re
4f70: 66 65 72 65 6e 63 65 2e 0a 0a 09 20 20 20 20 24 ference.... $
4f80: 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c 64 72 branch setchildr
4f90: 65 76 6e 72 20 24 62 72 61 6e 63 68 72 65 76 6e evnr $branchrevn
4fa0: 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 r..}..return.
4fb0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 }.. method R
4fc0: 65 76 32 42 72 61 6e 63 68 20 7b 72 65 76 6e 72 ev2Branch {revnr
4fd0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 65 } {. inte
4fe0: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 21 5b grity assert {![
4ff0: 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 rev istrunkrevnr
5000: 20 24 72 65 76 6e 72 5d 7d 20 7b 45 78 70 65 63 $revnr]} {Expec
5010: 74 65 64 20 61 20 62 72 61 6e 63 68 20 72 65 76 ted a branch rev
5020: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 7d 0a 09 72 ision number}..r
5030: 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 65 eturn $mybranche
5040: 73 28 5b 72 65 76 20 32 62 72 61 6e 63 68 6e 72 s([rev 2branchnr
5050: 20 24 72 65 76 6e 72 5d 29 0a 20 20 20 20 7d 0a $revnr]). }.
5060: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 55 . method AddU
5070: 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63 68 20 7b nlabeledBranch {
5080: 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 72 65 74 branchnr} {..ret
5090: 75 72 6e 20 5b 24 73 65 6c 66 20 41 64 64 42 72 urn [$self AddBr
50a0: 61 6e 63 68 20 75 6e 6c 61 62 65 6c 65 64 2d 24 anch unlabeled-$
50b0: 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 68 branchnr $branch
50c0: 6e 72 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d nr]. }.. m
50d0: 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63 68 20 ethod AddBranch
50e0: 7b 6e 61 6d 65 20 62 72 61 6e 63 68 6e 72 7d 20 {name branchnr}
50f0: 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 {..if {[info exi
5100: 73 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28 24 sts mybranches($
5110: 62 72 61 6e 63 68 6e 72 29 5d 7d 20 7b 0a 09 20 branchnr)]} {..
5120: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 log write 1 f
5130: 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68 ile "In '$mypath
5140: 27 3a 20 42 72 61 6e 63 68 20 27 24 62 72 61 6e ': Branch '$bran
5150: 63 68 6e 72 27 20 6e 61 6d 65 64 20 27 5b 24 6d chnr' named '[$m
5160: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 ybranches($branc
5170: 68 6e 72 29 20 6e 61 6d 65 5d 27 22 0a 09 20 20 hnr) name]'"..
5180: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 log write 1 fi
5190: 6c 65 20 22 43 61 6e 6e 6f 74 20 68 61 76 65 20 le "Cannot have
51a0: 73 65 63 6f 6e 64 20 6e 61 6d 65 20 27 24 6e 61 second name '$na
51b0: 6d 65 27 2c 20 69 67 6e 6f 72 69 6e 67 20 69 74 me', ignoring it
51c0: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d ".. return..}
51d0: 0a 09 73 65 74 20 62 72 61 6e 63 68 20 5b 73 79 ..set branch [sy
51e0: 6d 20 25 41 55 54 4f 25 20 62 72 61 6e 63 68 20 m %AUTO% branch
51f0: 24 62 72 61 6e 63 68 6e 72 20 5b 24 6d 79 70 72 $branchnr [$mypr
5200: 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 oject getsymbol
5210: 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 24 $name] $self]..$
5220: 62 72 61 6e 63 68 20 73 65 74 70 6f 73 69 74 69 branch setpositi
5230: 6f 6e 20 5b 69 6e 63 72 20 6d 79 62 72 61 6e 63 on [incr mybranc
5240: 68 63 6e 74 5d 0a 09 73 65 74 20 6d 79 62 72 61 hcnt]..set mybra
5250: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 nches($branchnr)
5260: 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75 72 6e $branch..return
5270: 20 24 62 72 61 6e 63 68 0a 20 20 20 20 7d 0a 0a $branch. }..
5280: 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 54 61 method AddTa
5290: 67 20 7b 6e 61 6d 65 20 72 65 76 6e 72 7d 20 7b g {name revnr} {
52a0: 0a 09 73 65 74 20 74 61 67 20 5b 73 79 6d 20 25 ..set tag [sym %
52b0: 41 55 54 4f 25 20 74 61 67 20 24 72 65 76 6e 72 AUTO% tag $revnr
52c0: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 65 74 [$myproject get
52d0: 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20 24 73 symbol $name] $s
52e0: 65 6c 66 5d 0a 09 6c 61 70 70 65 6e 64 20 6d 79 elf]..lappend my
52f0: 74 61 67 73 28 24 72 65 76 6e 72 29 20 24 74 61 tags($revnr) $ta
5300: 67 0a 09 72 65 74 75 72 6e 20 24 74 61 67 0a 20 g..return $tag.
5310: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
5320: 20 52 65 63 6f 72 64 42 61 73 69 63 44 65 70 65 RecordBasicDepe
5330: 6e 64 65 6e 63 69 65 73 20 7b 72 65 76 6e 72 20 ndencies {revnr
5340: 6e 65 78 74 7d 20 7b 0a 09 23 20 48 61 6e 64 6c next} {..# Handl
5350: 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 64 e the revision d
5360: 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 52 65 63 ependencies. Rec
5370: 6f 72 64 20 74 68 65 6d 20 66 6f 72 20 6e 6f 77 ord them for now
5380: 2c 20 64 6f 0a 09 23 20 6e 6f 74 68 69 6e 67 20 , do..# nothing
5390: 77 69 74 68 20 74 68 65 6d 20 79 65 74 2e 0a 0a with them yet...
53a0: 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b 20 .# On the trunk
53b0: 74 68 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64 the 'next' field
53c0: 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 points to the p
53d0: 72 65 76 69 6f 75 73 0a 09 23 20 72 65 76 69 73 revious..# revis
53e0: 69 6f 6e 2c 20 69 2e 65 2e 20 74 68 65 20 5f 70 ion, i.e. the _p
53f0: 61 72 65 6e 74 5f 20 6f 66 20 74 68 65 20 63 75 arent_ of the cu
5400: 72 72 65 6e 74 20 6f 6e 65 2e 20 45 78 61 6d 70 rrent one. Examp
5410: 6c 65 3a 0a 09 23 20 31 2e 36 27 73 20 6e 65 78 le:..# 1.6's nex
5420: 74 20 69 73 20 31 2e 35 20 28 6d 6f 64 75 6c 6f t is 1.5 (modulo
5430: 20 63 76 73 20 61 64 6d 69 6e 20 2d 6f 29 2e 0a cvs admin -o)..
5440: 0a 09 23 20 43 6f 6e 74 72 61 72 69 6c 79 20 6f ..# Contrarily o
5450: 6e 20 61 20 62 72 61 6e 63 68 20 74 68 65 20 27 n a branch the '
5460: 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e next' field poin
5470: 74 73 20 74 6f 20 74 68 65 0a 09 23 20 70 72 69 ts to the..# pri
5480: 6d 61 72 79 20 5f 63 68 69 6c 64 5f 20 6f 66 20 mary _child_ of
5490: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 76 69 the current revi
54a0: 73 69 6f 6e 2e 20 41 73 20 65 78 61 6d 70 6c 65 sion. As example
54b0: 2c 0a 09 23 20 31 2e 31 2e 33 2e 32 27 73 20 27 ,..# 1.1.3.2's '
54c0: 6e 65 78 74 27 20 77 69 6c 6c 20 62 65 20 31 2e next' will be 1.
54d0: 31 2e 33 2e 33 2e 0a 0a 09 23 20 54 68 65 20 27 1.3.3....# The '
54e0: 6e 65 78 74 27 20 66 69 65 6c 64 20 61 63 74 75 next' field actu
54f0: 61 6c 6c 79 20 61 6c 77 61 79 73 20 72 65 66 65 ally always refe
5500: 72 73 20 74 6f 20 74 68 65 20 72 65 76 69 73 69 rs to the revisi
5510: 6f 6e 0a 09 23 20 63 6f 6e 74 61 69 6e 69 6e 67 on..# containing
5520: 20 74 68 65 20 64 65 6c 74 61 20 6e 65 65 64 65 the delta neede
5530: 64 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 d to retrieve th
5540: 61 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 at revision....#
5550: 20 54 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65 The dependencie
5560: 73 20 6e 65 65 64 65 64 20 68 65 72 65 20 61 72 s needed here ar
5570: 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 73 74 e the logical st
5580: 72 75 63 74 75 72 65 2c 0a 09 23 20 70 61 72 65 ructure,..# pare
5590: 6e 74 2f 63 68 69 6c 64 2c 20 61 6e 64 20 6e 6f nt/child, and no
55a0: 74 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 t the implementa
55b0: 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 20 64 tion dependent d
55c0: 65 6c 74 61 0a 09 23 20 70 6f 69 6e 74 65 72 73 elta..# pointers
55d0: 2e 0a 0a 09 69 66 20 7b 24 6e 65 78 74 20 65 71 ....if {$next eq
55e0: 20 22 22 7d 20 72 65 74 75 72 6e 0a 09 23 20 20 ""} return..#
55f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5600: 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 20 2d parent -
5610: 3e 20 63 68 69 6c 64 0a 09 69 66 20 7b 5b 72 65 > child..if {[re
5620: 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 v istrunkrevnr $
5630: 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 6c revnr]} {.. l
5640: 61 70 70 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 append mydepende
5650: 6e 63 69 65 73 20 24 6e 65 78 74 20 24 72 65 76 ncies $next $rev
5660: 6e 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 nr..} else {..
5670: 20 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 70 65 lappend mydepe
5680: 6e 64 65 6e 63 69 65 73 20 24 72 65 76 6e 72 20 ndencies $revnr
5690: 24 6e 65 78 74 0a 09 7d 0a 09 72 65 74 75 72 6e $next..}..return
56a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
56b0: 6f 64 20 50 72 6f 63 65 73 73 50 72 69 6d 61 72 od ProcessPrimar
56c0: 79 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d yDependencies {}
56d0: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 70 61 72 {..foreach {par
56e0: 65 6e 74 72 65 76 6e 72 20 63 68 69 6c 64 72 65 entrevnr childre
56f0: 76 6e 72 7d 20 24 6d 79 64 65 70 65 6e 64 65 6e vnr} $mydependen
5700: 63 69 65 73 20 7b 0a 09 20 20 20 20 73 65 74 20 cies {.. set
5710: 70 61 72 65 6e 74 20 24 6d 79 72 65 76 28 24 70 parent $myrev($p
5720: 61 72 65 6e 74 72 65 76 6e 72 29 0a 09 20 20 20 arentrevnr)..
5730: 20 73 65 74 20 63 68 69 6c 64 20 20 24 6d 79 72 set child $myr
5740: 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a ev($childrevnr).
5750: 09 20 20 20 20 24 70 61 72 65 6e 74 20 73 65 74 . $parent set
5760: 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 09 20 20 child $child..
5770: 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 72 65 $child setpare
5780: 6e 74 20 24 70 61 72 65 6e 74 0a 09 7d 0a 09 72 nt $parent..}..r
5790: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
57a0: 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 42 method ProcessB
57b0: 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 65 ranchDependencie
57c0: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 s {} {..foreach
57d0: 7b 62 72 61 6e 63 68 6e 72 20 62 72 61 6e 63 68 {branchnr branch
57e0: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62 } [array get myb
57f0: 72 61 6e 63 68 65 73 5d 20 7b 0a 09 20 20 20 20 ranches] {..
5800: 73 65 74 20 72 65 76 6e 72 20 5b 24 62 72 61 6e set revnr [$bran
5810: 63 68 20 70 61 72 65 6e 74 72 65 76 6e 72 5d 0a ch parentrevnr].
5820: 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f .. if {![info
5830: 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 24 72 exists myrev($r
5840: 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 6c 6f 67 20 evnr)]} {...log
5850: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e write 1 file "In
5860: 20 27 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 '$mypath': The
5870: 62 72 61 6e 63 68 20 27 5b 24 62 72 61 6e 63 68 branch '[$branch
5880: 20 6e 61 6d 65 5d 27 20 72 65 66 65 72 65 6e 63 name]' referenc
5890: 65 73 22 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 es"...log write
58a0: 31 20 66 69 6c 65 20 22 74 68 65 20 62 6f 67 75 1 file "the bogu
58b0: 73 20 72 65 76 69 73 69 6f 6e 20 27 24 72 65 76 s revision '$rev
58c0: 6e 72 27 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 nr' and will be
58d0: 69 67 6e 6f 72 65 64 2e 22 0a 09 09 24 62 72 61 ignored."...$bra
58e0: 6e 63 68 20 64 65 73 74 72 6f 79 0a 09 09 75 6e nch destroy...un
58f0: 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24 set mybranches($
5900: 62 72 61 6e 63 68 6e 72 29 0a 09 20 20 20 20 7d branchnr).. }
5910: 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 72 65 else {...set re
5920: 76 20 24 6d 79 72 65 76 28 24 72 65 76 6e 72 29 v $myrev($revnr)
5930: 0a 09 09 24 72 65 76 20 61 64 64 62 72 61 6e 63 ...$rev addbranc
5940: 68 20 24 62 72 61 6e 63 68 0a 09 09 24 62 72 61 h $branch...$bra
5950: 6e 63 68 20 73 65 74 70 61 72 65 6e 74 20 24 72 nch setparent $r
5960: 65 76 0a 0a 09 09 23 20 49 66 20 72 65 76 69 73 ev....# If revis
5970: 69 6f 6e 73 20 77 65 72 65 20 63 6f 6d 6d 69 74 ions were commit
5980: 74 65 64 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 ted on the branc
5990: 68 20 77 65 20 73 74 6f 72 65 20 61 0a 09 09 23 h we store a...#
59a0: 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 reference to th
59b0: 65 20 62 72 61 6e 63 68 20 74 68 65 72 65 2c 20 e branch there,
59c0: 61 6e 64 20 66 75 72 74 68 65 72 20 64 65 63 6c and further decl
59d0: 61 72 65 0a 09 09 23 20 74 68 65 20 66 69 72 73 are...# the firs
59e0: 74 20 63 68 69 6c 64 27 73 20 70 61 72 65 6e 74 t child's parent
59f0: 20 74 6f 20 62 65 20 62 72 61 6e 63 68 27 73 20 to be branch's
5a00: 70 61 72 65 6e 74 2c 20 61 6e 64 0a 09 09 23 20 parent, and...#
5a10: 6c 69 73 74 20 74 68 69 73 20 63 68 69 6c 64 20 list this child
5a20: 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 72 65 in the parent re
5a30: 76 69 73 69 6f 6e 2e 0a 0a 09 09 69 66 20 7b 5b vision.....if {[
5a40: 24 62 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 $branch haschild
5a50: 72 65 76 5d 7d 20 7b 0a 09 09 20 20 20 20 73 65 rev]} {... se
5a60: 74 20 63 68 69 6c 64 72 65 76 6e 72 20 5b 24 62 t childrevnr [$b
5a70: 72 61 6e 63 68 20 63 68 69 6c 64 72 65 76 6e 72 ranch childrevnr
5a80: 5d 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 6c ]... set chil
5a90: 64 20 24 6d 79 72 65 76 28 24 63 68 69 6c 64 72 d $myrev($childr
5aa0: 65 76 6e 72 29 0a 09 09 20 20 20 20 24 62 72 61 evnr)... $bra
5ab0: 6e 63 68 20 73 65 74 63 68 69 6c 64 20 24 63 68 nch setchild $ch
5ac0: 69 6c 64 0a 0a 09 09 20 20 20 20 24 63 68 69 6c ild.... $chil
5ad0: 64 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63 d setparentbranc
5ae0: 68 20 24 62 72 61 6e 63 68 0a 09 09 20 20 20 20 h $branch...
5af0: 24 63 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74 $child setparent
5b00: 20 20 20 20 20 20 20 24 72 65 76 0a 09 09 20 20 $rev...
5b10: 20 20 24 72 65 76 20 61 64 64 63 68 69 6c 64 6f $rev addchildo
5b20: 6e 62 72 61 6e 63 68 20 24 63 68 69 6c 64 0a 09 nbranch $child..
5b30: 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 .}.. }..}..re
5b40: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
5b50: 6d 65 74 68 6f 64 20 53 6f 72 74 42 72 61 6e 63 method SortBranc
5b60: 68 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 hes {} {..foreac
5b70: 68 20 7b 72 65 76 6e 72 20 72 65 76 7d 20 5b 61 h {revnr rev} [a
5b80: 72 72 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20 rray get myrev]
5b90: 7b 20 24 72 65 76 20 73 6f 72 74 62 72 61 6e 63 { $rev sortbranc
5ba0: 68 65 73 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20 hes }..return.
5bb0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
5bc0: 50 72 6f 63 65 73 73 54 61 67 44 65 70 65 6e 64 ProcessTagDepend
5bd0: 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 encies {} {..for
5be0: 65 61 63 68 20 7b 72 65 76 6e 72 20 74 61 67 6c each {revnr tagl
5bf0: 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 ist} [array get
5c00: 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 69 mytags] {.. i
5c10: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists
5c20: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d myrev($revnr)]}
5c30: 20 7b 0a 09 09 73 65 74 20 6e 20 5b 6c 6c 65 6e {...set n [llen
5c40: 67 74 68 20 24 74 61 67 6c 69 73 74 5d 0a 09 09 gth $taglist]...
5c50: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 log write 1 file
5c60: 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 "In '$mypath':
5c70: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 5b 6e The following [n
5c80: 73 70 20 24 6e 20 74 61 67 5d 20 72 65 66 65 72 sp $n tag] refer
5c90: 65 6e 63 65 22 0a 09 09 6c 6f 67 20 77 72 69 74 ence"...log writ
5ca0: 65 20 31 20 66 69 6c 65 20 22 74 68 65 20 62 6f e 1 file "the bo
5cb0: 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27 24 72 gus revision '$r
5cc0: 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c 20 62 evnr' and will b
5cd0: 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09 66 6f e ignored."...fo
5ce0: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 reach tag $tagli
5cf0: 73 74 20 7b 0a 09 09 20 20 20 20 6c 6f 67 20 77 st {... log w
5d00: 72 69 74 65 20 31 20 66 69 6c 65 20 22 20 20 20 rite 1 file "
5d10: 20 5b 24 74 61 67 20 6e 61 6d 65 5d 22 0a 09 09 [$tag name]"...
5d20: 20 20 20 20 24 74 61 67 20 64 65 73 74 72 6f 79 $tag destroy
5d30: 0a 09 09 7d 0a 09 09 75 6e 73 65 74 20 6d 79 74 ...}...unset myt
5d40: 61 67 73 28 24 72 65 76 6e 72 29 0a 09 20 20 20 ags($revnr)..
5d50: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 } else {...set
5d60: 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 76 6e rev $myrev($revn
5d70: 72 29 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 r)...foreach tag
5d80: 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 20 20 $taglist {...
5d90: 20 20 24 72 65 76 20 61 64 64 74 61 67 20 20 20 $rev addtag
5da0: 20 24 74 61 67 0a 09 09 20 20 20 20 24 74 61 67 $tag... $tag
5db0: 20 73 65 74 74 61 67 72 65 76 20 24 72 65 76 0a settagrev $rev.
5dc0: 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 ..}.. }..}..r
5dd0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
5de0: 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69 6e method Determin
5df0: 65 54 68 65 52 6f 6f 74 52 65 76 69 73 69 6f 6e eTheRootRevision
5e00: 20 7b 7d 20 7b 0a 09 23 20 54 68 65 20 72 6f 6f {} {..# The roo
5e10: 74 20 69 73 20 74 68 65 20 6f 6e 65 20 72 65 76 t is the one rev
5e20: 69 73 69 6f 6e 20 77 68 69 63 68 20 68 61 73 20 ision which has
5e30: 6e 6f 20 70 61 72 65 6e 74 2e 20 42 79 0a 09 23 no parent. By..#
5e40: 20 63 68 65 63 6b 69 6e 67 20 61 6c 6c 20 72 65 checking all re
5e50: 76 69 73 69 6f 6e 73 20 77 65 20 65 6e 73 75 72 visions we ensur
5e60: 65 20 74 68 61 74 20 77 65 20 63 61 6e 20 64 65 e that we can de
5e70: 74 65 63 74 20 61 6e 64 0a 09 23 20 72 65 70 6f tect and..# repo
5e80: 72 74 20 74 68 65 20 63 61 73 65 20 6f 66 20 6d rt the case of m
5e90: 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 2e 20 57 ultiple roots. W
5ea0: 69 74 68 6f 75 74 20 74 68 61 74 20 77 65 20 63 ithout that we c
5eb0: 6f 75 6c 64 0a 09 23 20 73 69 6d 70 6c 79 20 74 ould..# simply t
5ec0: 61 6b 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e ake one revision
5ed0: 20 61 6e 64 20 66 6f 6c 6c 6f 77 20 74 68 65 20 and follow the
5ee0: 70 61 72 65 6e 74 20 6c 69 6e 6b 73 20 74 6f 0a parent links to.
5ef0: 09 23 20 74 68 65 69 72 20 72 6f 6f 74 20 28 73 .# their root (s
5f00: 69 63 21 29 2e 0a 0a 09 66 6f 72 65 61 63 68 20 ic!)....foreach
5f10: 7b 72 65 76 6e 72 20 72 65 76 7d 20 5b 61 72 72 {revnr rev} [arr
5f20: 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20 7b 0a ay get myrev] {.
5f30: 09 20 20 20 20 69 66 20 7b 5b 24 72 65 76 20 68 . if {[$rev h
5f40: 61 73 70 61 72 65 6e 74 5d 7d 20 63 6f 6e 74 69 asparent]} conti
5f50: 6e 75 65 0a 09 20 20 20 20 69 6e 74 65 67 72 69 nue.. integri
5f60: 74 79 20 61 73 73 65 72 74 20 7b 24 6d 79 72 6f ty assert {$myro
5f70: 6f 74 20 65 71 20 22 22 7d 20 7b 4d 75 6c 74 69 ot eq ""} {Multi
5f80: 70 6c 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f ple root revisio
5f90: 6e 73 20 66 6f 75 6e 64 7d 0a 09 20 20 20 20 73 ns found}.. s
5fa0: 65 74 20 6d 79 72 6f 6f 74 20 24 72 65 76 0a 09 et myroot $rev..
5fb0: 7d 0a 0a 09 23 20 49 6e 20 74 68 65 20 66 75 74 }...# In the fut
5fc0: 75 72 65 20 77 65 20 61 6c 73 6f 20 6e 65 65 64 ure we also need
5fd0: 20 61 20 6c 69 73 74 2c 20 61 73 20 62 72 61 6e a list, as bran
5fe0: 63 68 65 73 20 63 61 6e 20 62 65 63 6f 6d 65 0a ches can become.
5ff0: 09 23 20 73 65 76 65 72 65 64 20 66 72 6f 6d 20 .# severed from
6000: 74 68 65 69 72 20 70 61 72 65 6e 74 2c 20 6d 61 their parent, ma
6010: 6b 69 6e 67 20 74 68 65 6d 20 74 68 65 69 72 20 king them their
6020: 6f 77 6e 20 72 6f 6f 74 2e 0a 09 73 65 74 20 6d own root...set m
6030: 79 72 6f 6f 74 73 20 5b 6c 69 73 74 20 24 6d 79 yroots [list $my
6040: 72 6f 6f 74 5d 0a 09 72 65 74 75 72 6e 0a 20 20 root]..return.
6050: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
6060: 44 65 74 65 72 6d 69 6e 65 52 65 76 69 73 69 6f DetermineRevisio
6070: 6e 4f 70 65 72 61 74 69 6f 6e 73 20 7b 7d 20 7b nOperations {} {
6080: 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 6d ..foreach rev $m
6090: 79 72 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 yrevisions { $re
60a0: 76 20 64 65 74 65 72 6d 69 6e 65 6f 70 65 72 61 v determineopera
60b0: 74 69 6f 6e 20 7d 0a 09 72 65 74 75 72 6e 0a 20 tion }..return.
60c0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
60d0: 20 44 65 74 65 72 6d 69 6e 65 4c 69 6e 65 73 4f DetermineLinesO
60e0: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 fDevelopment {}
60f0: 7b 0a 09 23 20 46 6f 72 20 72 65 76 69 73 69 6f {..# For revisio
6100: 6e 73 20 74 68 69 73 20 68 61 73 20 62 65 65 6e ns this has been
6110: 20 64 6f 6e 65 20 61 6c 72 65 61 64 79 2c 20 69 done already, i
6120: 6e 20 27 65 78 74 65 6e 64 27 2e 20 4e 6f 77 0a n 'extend'. Now.
6130: 09 23 20 77 65 20 64 6f 20 74 68 69 73 20 66 6f .# we do this fo
6140: 72 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 61 r the branches a
6150: 6e 64 20 74 61 67 73 2e 0a 0a 09 66 6f 72 65 61 nd tags....forea
6160: 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b 61 ch {_ branch} [a
6170: 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 rray get mybranc
6180: 68 65 73 5d 20 7b 0a 09 20 20 20 20 24 62 72 61 hes] {.. $bra
6190: 6e 63 68 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c nch setlod [$sel
61a0: 66 20 47 65 74 4c 4f 44 20 5b 24 62 72 61 6e 63 f GetLOD [$branc
61b0: 68 20 70 61 72 65 6e 74 72 65 76 6e 72 5d 5d 0a h parentrevnr]].
61c0: 09 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 .}...foreach {_
61d0: 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 taglist} [array
61e0: 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 get mytags] {..
61f0: 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 24 foreach tag $
6200: 74 61 67 6c 69 73 74 20 7b 0a 09 09 24 74 61 67 taglist {...$tag
6210: 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 setlod [$self G
6220: 65 74 4c 4f 44 20 5b 24 74 61 67 20 74 61 67 72 etLOD [$tag tagr
6230: 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 09 7d evnr]].. }..}
6240: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
6250: 20 20 20 20 6d 65 74 68 6f 64 20 47 65 74 4c 4f method GetLO
6260: 44 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 69 66 20 D {revnr} {..if
6270: 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 {[rev istrunkrev
6280: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 nr $revnr]} {..
6290: 20 20 20 72 65 74 75 72 6e 20 24 6d 79 74 72 75 return $mytru
62a0: 6e 6b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 nk..} else {..
62b0: 20 20 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 return [$self
62c0: 52 65 76 32 42 72 61 6e 63 68 20 24 72 65 76 6e Rev2Branch $revn
62d0: 72 5d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 r]..}. }..
62e0: 20 6d 65 74 68 6f 64 20 48 61 6e 64 6c 65 4e 6f method HandleNo
62f0: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 nTrunkDefaultBra
6300: 6e 63 68 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 nch {} {..set re
6310: 76 6c 69 73 74 20 5b 24 73 65 6c 66 20 4e 6f 6e vlist [$self Non
6320: 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 TrunkDefaultRevi
6330: 73 69 6f 6e 73 5d 0a 09 69 66 20 7b 21 5b 6c 6c sions]..if {![ll
6340: 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d 7d ength $revlist]}
6350: 20 72 65 74 75 72 6e 0a 0a 09 24 73 65 6c 66 20 return...$self
6360: 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 AdjustNonTrunkDe
6370: 66 61 75 6c 74 42 72 61 6e 63 68 20 24 72 65 76 faultBranch $rev
6380: 6c 69 73 74 0a 09 24 73 65 6c 66 20 43 68 65 63 list..$self Chec
6390: 6b 4c 4f 44 73 0a 09 72 65 74 75 72 6e 0a 20 20 kLODs..return.
63a0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
63b0: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 NonTrunkDefaultR
63c0: 65 76 69 73 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 evisions {} {..#
63d0: 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 From cvs2svn th
63e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c e following expl
63f0: 61 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f anation (with mo
6400: 64 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 difications..# f
6410: 6f 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d or our algorithm
6420: 29 3a 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 ):...# Determine
6430: 20 77 68 65 74 68 65 72 20 74 68 65 72 65 20 61 whether there a
6440: 72 65 20 61 6e 79 20 6e 6f 6e 2d 74 72 75 6e 6b re any non-trunk
6450: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a default branch.
6460: 09 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 .# revisions....
6470: 23 20 49 66 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b # If a non-trunk
6480: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 default branch
6490: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f is determined to
64a0: 20 68 61 76 65 20 65 78 69 73 74 65 64 2c 0a 09 have existed,..
64b0: 23 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 # return a list
64c0: 6f 66 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 61 of objects for a
64d0: 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 74 68 61 ll revisions tha
64e0: 74 20 77 65 72 65 20 6f 6e 63 65 0a 09 23 20 6e t were once..# n
64f0: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 on-trunk default
6500: 20 72 65 76 69 73 69 6f 6e 73 2c 20 69 6e 20 64 revisions, in d
6510: 65 70 65 6e 64 65 6e 63 79 20 6f 72 64 65 72 20 ependency order
6520: 28 69 2e 65 2e 20 72 6f 6f 74 0a 09 23 20 66 69 (i.e. root..# fi
6530: 72 73 74 29 2e 0a 0a 09 23 20 54 68 65 72 65 20 rst)....# There
6540: 61 72 65 20 74 77 6f 20 63 61 73 65 73 20 74 6f are two cases to
6550: 20 68 61 6e 64 6c 65 3a 0a 0a 09 23 20 4f 6e 65 handle:...# One
6560: 20 63 61 73 65 20 69 73 20 73 69 6d 70 6c 65 2e case is simple.
6570: 20 20 54 68 65 20 52 43 53 20 66 69 6c 65 20 6c The RCS file l
6580: 69 73 74 73 20 61 20 64 65 66 61 75 6c 74 20 62 ists a default b
6590: 72 61 6e 63 68 0a 09 23 20 65 78 70 6c 69 63 69 ranch..# explici
65a0: 74 6c 79 20 69 6e 20 69 74 73 20 68 65 61 64 65 tly in its heade
65b0: 72 2c 20 73 75 63 68 20 61 73 20 27 31 2e 31 2e r, such as '1.1.
65c0: 31 27 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 1'. In this cas
65d0: 65 2c 20 77 65 0a 09 23 20 6b 6e 6f 77 20 74 68 e, we..# know th
65e0: 61 74 20 65 76 65 72 79 20 72 65 76 69 73 69 6f at every revisio
65f0: 6e 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 n on the vendor
6600: 62 72 61 6e 63 68 20 69 73 20 74 6f 20 62 65 0a branch is to be.
6610: 09 23 20 74 72 65 61 74 65 64 20 61 73 20 68 65 .# treated as he
6620: 61 64 20 6f 66 20 74 72 75 6e 6b 20 61 74 20 74 ad of trunk at t
6630: 68 61 74 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d hat point in tim
6640: 65 2e 0a 0a 09 23 20 42 75 74 20 74 68 65 72 65 e....# But there
6650: 27 73 20 61 6c 73 6f 20 61 20 64 65 67 65 6e 65 's also a degene
6660: 72 61 74 65 20 63 61 73 65 2e 20 20 54 68 65 20 rate case. The
6670: 52 43 53 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f RCS file does no
6680: 74 0a 09 23 20 63 75 72 72 65 6e 74 6c 79 20 68 t..# currently h
6690: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 62 72 ave a default br
66a0: 61 6e 63 68 2c 20 79 65 74 20 77 65 20 63 61 6e anch, yet we can
66b0: 20 64 65 64 75 63 65 20 74 68 61 74 20 66 6f 72 deduce that for
66c0: 0a 09 23 20 73 6f 6d 65 20 70 65 72 69 6f 64 20 ..# some period
66d0: 69 6e 20 74 68 65 20 70 61 73 74 20 69 74 20 70 in the past it p
66e0: 72 6f 62 61 62 6c 79 20 2a 64 69 64 2a 20 68 61 robably *did* ha
66f0: 76 65 20 6f 6e 65 2e 20 20 46 6f 72 0a 09 23 20 ve one. For..#
6700: 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 69 6c example, the fil
6710: 65 20 68 61 73 20 76 65 6e 64 6f 72 20 72 65 76 e has vendor rev
6720: 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 31 20 2d isions 1.1.1.1 -
6730: 3e 20 31 2e 31 2e 31 2e 39 36 2c 0a 09 23 20 61 > 1.1.1.96,..# a
6740: 6c 6c 20 6f 66 20 77 68 69 63 68 20 61 72 65 20 ll of which are
6750: 64 61 74 65 64 20 62 65 66 6f 72 65 20 31 2e 32 dated before 1.2
6760: 2c 20 61 6e 64 20 74 68 65 6e 20 69 74 20 68 61 , and then it ha
6770: 73 20 31 2e 31 2e 31 2e 39 37 0a 09 23 20 2d 3e s 1.1.1.97..# ->
6780: 20 31 2e 31 2e 31 2e 31 30 30 20 64 61 74 65 64 1.1.1.100 dated
6790: 20 61 66 74 65 72 20 31 2e 32 2e 20 20 49 6e 20 after 1.2. In
67a0: 74 68 69 73 20 63 61 73 65 2c 20 77 65 20 73 68 this case, we sh
67b0: 6f 75 6c 64 0a 09 23 20 72 65 63 6f 72 64 20 31 ould..# record 1
67c0: 2e 31 2e 31 2e 39 36 20 61 73 20 74 68 65 20 6c .1.1.96 as the l
67d0: 61 73 74 20 76 65 6e 64 6f 72 20 72 65 76 69 73 ast vendor revis
67e0: 69 6f 6e 20 74 6f 20 68 61 76 65 20 62 65 65 6e ion to have been
67f0: 20 74 68 65 0a 09 23 20 68 65 61 64 20 6f 66 20 the..# head of
6800: 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e the default bran
6810: 63 68 2e 0a 0a 09 69 66 20 7b 24 6d 79 70 72 69 ch....if {$mypri
6820: 6e 63 69 70 61 6c 20 6e 65 20 22 22 7d 20 7b 0a ncipal ne ""} {.
6830: 09 20 20 20 20 23 20 54 68 65 72 65 20 69 73 20 . # There is
6840: 73 74 69 6c 6c 20 61 20 64 65 66 61 75 6c 74 20 still a default
6850: 62 72 61 6e 63 68 3b 20 74 68 61 74 20 6d 65 61 branch; that mea
6860: 6e 73 20 74 68 61 74 20 61 6c 6c 0a 09 20 20 20 ns that all..
6870: 20 23 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 # revisions on
6880: 74 68 61 74 20 62 72 61 6e 63 68 20 67 65 74 20 that branch get
6890: 6d 61 72 6b 65 64 2e 0a 0a 09 20 20 20 20 6c 6f marked.... lo
68a0: 67 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 g write 5 file "
68b0: 46 6f 75 6e 64 20 65 78 70 6c 69 63 69 74 6c 79 Found explicitly
68c0: 20 6d 61 72 6b 65 64 20 4e 54 44 42 22 0a 0a 09 marked NTDB"...
68d0: 20 20 20 20 73 65 74 20 72 6e 65 78 74 20 5b 24 set rnext [$
68e0: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 myroot child]..
68f0: 20 20 20 69 66 20 7b 24 72 6e 65 78 74 20 6e 65 if {$rnext ne
6900: 20 22 22 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 ""} {...trouble
6910: 20 66 61 74 61 6c 20 22 46 69 6c 65 20 77 69 74 fatal "File wit
6920: 68 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 h default branch
6930: 20 24 6d 79 70 72 69 6e 63 69 70 61 6c 20 61 6c $myprincipal al
6940: 73 6f 20 68 61 73 20 72 65 76 69 73 69 6f 6e 20 so has revision
6950: 5b 24 72 6e 65 78 74 20 72 65 76 6e 72 5d 22 0a [$rnext revnr]".
6960: 09 09 72 65 74 75 72 6e 0a 09 20 20 20 20 7d 0a ..return.. }.
6970: 0a 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 .. set rev [$
6980: 6d 79 62 72 61 6e 63 68 65 73 28 24 6d 79 70 72 mybranches($mypr
6990: 69 6e 63 69 70 61 6c 29 20 63 68 69 6c 64 5d 0a incipal) child].
69a0: 09 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a . set res {}.
69b0: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65 .. while {$re
69c0: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70 v ne ""} {...lap
69d0: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 pend res $rev...
69e0: 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 set rev [$rev ch
69f0: 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 ild].. }...
6a00: 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09 return $res...
6a10: 7d 20 65 6c 73 65 69 66 20 7b 24 6d 79 69 6d 70 } elseif {$myimp
6a20: 6f 72 74 65 64 7d 20 7b 0a 09 20 20 20 20 23 20 orted} {.. #
6a30: 4e 6f 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 No default branc
6a40: 68 2c 20 62 75 74 20 74 68 65 20 66 69 6c 65 20 h, but the file
6a50: 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 20 appears to have
6a60: 62 65 65 6e 0a 09 20 20 20 20 23 20 69 6d 70 6f been.. # impo
6a70: 72 74 65 64 2e 20 20 53 6f 20 6f 75 72 20 65 64 rted. So our ed
6a80: 75 63 61 74 65 64 20 67 75 65 73 73 20 69 73 20 ucated guess is
6a90: 74 68 61 74 20 61 6c 6c 20 72 65 76 69 73 69 6f that all revisio
6aa0: 6e 73 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 65 ns.. # on the
6ab0: 20 27 31 2e 31 2e 31 27 20 62 72 61 6e 63 68 20 '1.1.1' branch
6ac0: 77 69 74 68 20 74 69 6d 65 73 74 61 6d 70 73 20 with timestamps
6ad0: 70 72 69 6f 72 20 74 6f 20 74 68 65 0a 09 20 20 prior to the..
6ae0: 20 20 23 20 74 69 6d 65 73 74 61 6d 70 20 6f 66 # timestamp of
6af0: 20 27 31 2e 32 27 20 77 65 72 65 20 6e 6f 6e 2d '1.2' were non-
6b00: 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 trunk default br
6b10: 61 6e 63 68 0a 09 20 20 20 20 23 20 72 65 76 69 anch.. # revi
6b20: 73 69 6f 6e 73 2e 0a 0a 09 20 20 20 20 23 20 54 sions.... # T
6b30: 68 69 73 20 72 65 61 6c 6c 79 20 6f 6e 6c 79 20 his really only
6b40: 70 72 6f 63 65 73 73 65 73 20 73 74 61 6e 64 61 processes standa
6b50: 72 64 20 27 31 2e 31 2e 31 2e 2a 27 2d 73 74 79 rd '1.1.1.*'-sty
6b60: 6c 65 0a 09 20 20 20 20 23 20 76 65 6e 64 6f 72 le.. # vendor
6b70: 20 72 65 76 69 73 69 6f 6e 73 2e 20 20 4f 6e 65 revisions. One
6b80: 20 63 6f 75 6c 64 20 63 6f 6e 63 65 69 76 61 62 could conceivab
6b90: 6c 79 20 68 61 76 65 20 61 20 66 69 6c 65 0a 09 ly have a file..
6ba0: 20 20 20 20 23 20 77 68 6f 73 65 20 64 65 66 61 # whose defa
6bb0: 75 6c 74 20 62 72 61 6e 63 68 20 69 73 20 31 2e ult branch is 1.
6bc0: 31 2e 33 20 6f 72 20 77 68 61 74 65 76 65 72 2c 1.3 or whatever,
6bd0: 20 6f 72 20 77 61 73 20 74 68 61 74 0a 09 20 20 or was that..
6be0: 20 20 23 20 61 74 20 73 6f 6d 65 20 70 6f 69 6e # at some poin
6bf0: 74 20 69 6e 20 74 69 6d 65 2c 20 77 69 74 68 20 t in time, with
6c00: 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 vendor revisions
6c10: 20 31 2e 31 2e 33 2e 31 2c 0a 09 20 20 20 20 23 1.1.3.1,.. #
6c20: 20 31 2e 31 2e 33 2e 32 2c 20 65 74 63 2e 20 20 1.1.3.2, etc.
6c30: 42 75 74 20 77 69 74 68 20 74 68 65 20 64 65 66 But with the def
6c40: 61 75 6c 74 20 62 72 61 6e 63 68 20 67 6f 6e 65 ault branch gone
6c50: 20 6e 6f 77 2c 0a 09 20 20 20 20 23 20 77 65 27 now,.. # we'
6c60: 64 20 68 61 76 65 20 6e 6f 20 62 61 73 69 73 20 d have no basis
6c70: 66 6f 72 20 61 73 73 75 6d 69 6e 67 20 74 68 61 for assuming tha
6c80: 74 20 74 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 t the non-standa
6c90: 72 64 0a 09 20 20 20 20 23 20 76 65 6e 64 6f 72 rd.. # vendor
6ca0: 20 62 72 61 6e 63 68 20 68 61 64 20 65 76 65 72 branch had ever
6cb0: 20 62 65 65 6e 20 74 68 65 20 64 65 66 61 75 6c been the defaul
6cc0: 74 20 62 72 61 6e 63 68 20 61 6e 79 77 61 79 2e t branch anyway.
6cd0: 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 74 68 ... # Note th
6ce0: 61 74 20 77 65 20 72 65 6c 79 20 6f 6e 20 63 6f at we rely on co
6cf0: 6d 70 61 72 69 73 6f 6e 73 20 62 65 74 77 65 65 mparisons betwee
6d00: 6e 20 74 68 65 20 74 69 6d 65 73 74 61 6d 70 73 n the timestamps
6d10: 0a 09 20 20 20 20 23 20 6f 66 20 74 68 65 20 72 .. # of the r
6d20: 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 evisions on the
6d30: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 61 6e vendor branch an
6d40: 64 20 74 68 61 74 20 6f 66 0a 09 20 20 20 20 23 d that of.. #
6d50: 20 72 65 76 69 73 69 6f 6e 20 31 2e 32 2c 20 65 revision 1.2, e
6d60: 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 20 74 ven though the t
6d70: 69 6d 65 73 74 61 6d 70 73 20 6d 69 67 68 74 20 imestamps might
6d80: 62 65 0a 09 20 20 20 20 23 20 69 6e 63 6f 72 72 be.. # incorr
6d90: 65 63 74 20 64 75 65 20 74 6f 20 63 6c 6f 63 6b ect due to clock
6da0: 20 73 6b 65 77 2e 20 20 57 65 20 63 6f 75 6c 64 skew. We could
6db0: 20 64 6f 20 61 20 73 6c 69 67 68 74 6c 79 0a 09 do a slightly..
6dc0: 20 20 20 20 23 20 62 65 74 74 65 72 20 6a 6f 62 # better job
6dd0: 20 69 66 20 77 65 20 75 73 65 64 20 74 68 65 20 if we used the
6de0: 63 68 61 6e 67 65 73 65 74 20 74 69 6d 65 73 74 changeset timest
6df0: 61 6d 70 73 2c 20 61 73 20 69 74 20 69 73 0a 09 amps, as it is..
6e00: 20 20 20 20 23 20 70 6f 73 73 69 62 6c 65 20 74 # possible t
6e10: 68 61 74 20 74 68 65 20 64 65 70 65 6e 64 65 6e hat the dependen
6e20: 63 69 65 73 20 74 68 61 74 20 77 65 6e 74 20 69 cies that went i
6e30: 6e 74 6f 0a 09 20 20 20 20 23 20 64 65 74 65 72 nto.. # deter
6e40: 6d 69 6e 69 6e 67 20 74 68 6f 73 65 20 74 69 6d mining those tim
6e50: 65 73 74 61 6d 70 73 20 61 72 65 20 6d 6f 72 65 estamps are more
6e60: 20 61 63 63 75 72 61 74 65 2e 20 20 42 75 74 0a accurate. But.
6e70: 09 20 20 20 20 23 20 74 68 61 74 20 77 6f 75 6c . # that woul
6e80: 64 20 72 65 71 75 69 72 65 20 61 6e 20 65 78 74 d require an ext
6e90: 72 61 20 70 61 73 73 20 6f 72 20 74 77 6f 2e 0a ra pass or two..
6ea0: 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f .. if {![info
6eb0: 20 65 78 69 73 74 73 20 6d 79 62 72 61 6e 63 68 exists mybranch
6ec0: 65 73 28 31 2e 31 2e 31 29 5d 7d 20 7b 20 72 65 es(1.1.1)]} { re
6ed0: 74 75 72 6e 20 7b 7d 20 7d 0a 0a 09 20 20 20 20 turn {} }...
6ee0: 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69 6c 65 log write 5 file
6ef0: 20 22 44 65 64 75 63 65 64 20 65 78 69 73 74 65 "Deduced existe
6f00: 6e 63 65 20 6f 66 20 4e 54 44 42 22 0a 0a 09 20 nce of NTDB"...
6f10: 20 20 20 73 65 74 20 72 65 76 20 20 5b 24 6d 79 set rev [$my
6f20: 62 72 61 6e 63 68 65 73 28 31 2e 31 2e 31 29 20 branches(1.1.1)
6f30: 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 65 74 20 child].. set
6f40: 72 65 73 20 20 7b 7d 0a 09 20 20 20 20 73 65 74 res {}.. set
6f50: 20 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74 20 63 stop [$myroot c
6f60: 68 69 6c 64 5d 0a 0a 09 20 20 20 20 69 66 20 7b hild]... if {
6f70: 24 73 74 6f 70 20 65 71 20 22 22 7d 20 7b 0a 09 $stop eq ""} {..
6f80: 09 23 20 47 65 74 20 65 76 65 72 79 74 68 69 6e .# Get everythin
6f90: 67 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a g on the branch.
6fa0: 09 09 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 ..while {$rev ne
6fb0: 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 6c 61 70 ""} {... lap
6fc0: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 pend res $rev...
6fd0: 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 set rev [$re
6fe0: 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 v child]...}..
6ff0: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20 43 } else {...# C
7000: 6f 6c 6c 65 63 74 20 65 76 65 72 79 74 68 69 6e ollect everythin
7010: 67 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20 g on the branch
7020: 77 68 69 63 68 20 73 65 65 6d 73 20 74 6f 20 68 which seems to h
7030: 61 76 65 0a 09 09 23 20 62 65 65 6e 20 63 6f 6d ave...# been com
7040: 6d 69 74 74 65 64 20 62 65 66 6f 72 65 20 74 68 mitted before th
7050: 65 20 66 69 72 73 74 20 70 72 69 6d 61 72 79 20 e first primary
7060: 63 68 69 6c 64 20 6f 66 20 74 68 65 0a 09 09 23 child of the...#
7070: 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a root revision..
7080: 09 09 73 65 74 20 73 74 6f 70 64 61 74 65 20 5b ..set stopdate [
7090: 24 73 74 6f 70 20 64 61 74 65 5d 0a 09 09 77 68 $stop date]...wh
70a0: 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d ile {$rev ne ""}
70b0: 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 5b 24 72 {... if {[$r
70c0: 65 76 20 64 61 74 65 5d 20 3e 3d 20 24 73 74 6f ev date] >= $sto
70d0: 70 64 61 74 65 7d 20 62 72 65 61 6b 0a 09 09 20 pdate} break...
70e0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 lappend res $
70f0: 72 65 76 0a 09 09 20 20 20 20 73 65 74 20 72 65 rev... set re
7100: 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 v [$rev child]..
7110: 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 .}.. }...
7120: 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20 return $res...}
7130: 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 74 75 else {.. retu
7140: 72 6e 20 7b 7d 0a 09 7d 0a 20 20 20 20 7d 0a 0a rn {}..}. }..
7150: 20 20 20 20 23 20 47 65 6e 65 72 61 6c 20 6e 6f # General no
7160: 74 65 3a 20 49 6e 20 74 68 65 20 66 6f 6c 6c 6f te: In the follo
7170: 77 69 6e 67 20 6d 65 74 68 6f 64 73 20 77 65 20 wing methods we
7180: 6f 6e 6c 79 20 6d 6f 64 69 66 79 20 74 68 65 20 only modify the
7190: 6c 69 6e 6b 73 0a 20 20 20 20 23 20 62 65 74 77 links. # betw
71a0: 65 65 6e 20 72 65 76 69 73 69 6f 6e 73 20 61 6e een revisions an
71b0: 64 20 73 79 6d 62 6f 6c 73 20 74 6f 20 72 65 73 d symbols to res
71c0: 74 72 75 63 74 75 72 65 20 74 68 65 20 72 65 76 tructure the rev
71d0: 69 73 69 6f 6e 0a 20 20 20 20 23 20 74 72 65 65 ision. # tree
71e0: 2e 20 57 65 20 64 6f 20 5f 5f 6e 6f 74 5f 5f 20 . We do __not__
71f0: 64 65 73 74 72 6f 79 20 74 68 65 20 6f 62 6a 65 destroy the obje
7200: 63 74 73 2e 20 47 69 76 65 6e 20 74 68 65 20 63 cts. Given the c
7210: 6f 6d 70 6c 65 78 20 6c 69 6e 6b 73 0a 20 20 20 omplex links.
7220: 20 23 20 47 43 20 69 73 20 64 69 66 66 69 63 75 # GC is difficu
7230: 6c 74 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c lt at this level
7240: 2e 20 49 74 20 69 73 20 6d 75 63 68 20 65 61 73 . It is much eas
7250: 69 65 72 20 74 6f 20 64 72 6f 70 0a 20 20 20 20 ier to drop.
7260: 23 20 65 76 65 72 79 74 68 69 6e 67 20 77 68 65 # everything whe
7270: 6e 20 77 65 20 77 65 20 61 72 65 20 64 6f 6e 65 n we we are done
7280: 2e 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 . This happens i
7290: 6e 20 27 64 72 6f 70 27 2c 20 75 73 69 6e 67 0a n 'drop', using.
72a0: 20 20 20 20 23 20 74 68 65 20 73 74 61 74 65 20 # the state
72b0: 76 61 72 69 61 62 6c 65 20 27 6d 79 72 65 76 27 variable 'myrev'
72c0: 2c 20 27 6d 79 62 72 61 6e 63 68 65 73 27 2c 20 , 'mybranches',
72d0: 61 6e 64 20 27 6d 79 74 61 67 73 27 2e 20 57 68 and 'mytags'. Wh
72e0: 61 74 20 77 65 0a 20 20 20 20 23 20 68 61 76 65 at we. # have
72f0: 20 74 6f 20 70 65 72 73 69 73 74 2c 20 70 65 72 to persist, per
7300: 66 6f 72 6d 65 64 20 62 79 20 27 70 65 72 73 69 formed by 'persi
7310: 73 74 27 2c 20 77 65 20 6b 6e 6f 77 20 77 69 6c st', we know wil
7320: 6c 20 62 65 0a 20 20 20 20 23 20 72 65 61 63 68 l be. # reach
7330: 61 62 6c 65 20 74 68 72 6f 75 67 68 20 74 68 65 able through the
7340: 20 72 65 76 69 73 69 6f 6e 73 20 6c 69 73 74 65 revisions liste
7350: 64 20 69 6e 20 27 6d 79 72 6f 6f 74 73 27 20 61 d in 'myroots' a
7360: 6e 64 20 74 68 65 69 72 0a 20 20 20 20 23 20 63 nd their. # c
7370: 68 69 6c 64 72 65 6e 20 61 6e 64 20 73 79 6d 62 hildren and symb
7380: 6f 6c 73 2e 0a 0a 20 20 20 20 6d 65 74 68 6f 64 ols... method
7390: 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 AdjustNonTrunkD
73a0: 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b 72 65 efaultBranch {re
73b0: 76 6c 69 73 74 7d 20 7b 0a 09 73 65 74 20 73 74 vlist} {..set st
73c0: 6f 70 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c op [$myroot chil
73d0: 64 5d 20 3b 23 20 72 65 76 20 27 31 2e 32 27 0a d] ;# rev '1.2'.
73e0: 0a 09 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69 ..log write 5 fi
73f0: 6c 65 20 22 41 64 6a 75 73 74 69 6e 67 20 4e 54 le "Adjusting NT
7400: 44 42 20 63 6f 6e 74 61 69 6e 69 6e 67 20 5b 6e DB containing [n
7410: 73 70 20 5b 6c 6c 65 6e 67 74 68 20 24 72 65 76 sp [llength $rev
7420: 6c 69 73 74 5d 20 72 65 76 69 73 69 6f 6e 5d 22 list] revision]"
7430: 0a 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76 ...# From cvs2sv
7440: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 n the following
7450: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 77 69 74 explanation (wit
7460: 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 0a h modifications.
7470: 09 23 20 66 6f 72 20 6f 75 72 20 61 6c 67 6f 72 .# for our algor
7480: 69 74 68 6d 29 3a 0a 0a 09 23 20 41 64 6a 75 73 ithm):...# Adjus
7490: 74 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 t the non-trunk
74a0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 default branch r
74b0: 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 evisions found i
74c0: 6e 20 74 68 65 0a 09 23 20 27 72 65 76 6c 69 73 n the..# 'revlis
74d0: 74 27 2e 0a 0a 09 23 20 27 6d 79 69 6d 70 6f 72 t'....# 'myimpor
74e0: 74 65 64 27 20 69 73 20 61 20 62 6f 6f 6c 65 61 ted' is a boolea
74f0: 6e 20 66 6c 61 67 20 69 6e 64 69 63 61 74 69 6e n flag indicatin
7500: 67 20 77 68 65 74 68 65 72 20 74 68 69 73 20 66 g whether this f
7510: 69 6c 65 0a 09 23 20 61 70 70 65 61 72 73 20 74 ile..# appears t
7520: 6f 20 68 61 76 65 20 62 65 65 6e 20 69 6d 70 6f o have been impo
7530: 72 74 65 64 2c 20 77 68 69 63 68 20 61 6c 73 6f rted, which also
7540: 20 6d 65 61 6e 73 20 74 68 61 74 0a 09 23 20 72 means that..# r
7550: 65 76 69 73 69 6f 6e 20 31 2e 31 20 68 61 73 20 evision 1.1 has
7560: 61 20 67 65 6e 65 72 61 74 65 64 20 6c 6f 67 20 a generated log
7570: 6d 65 73 73 61 67 65 20 74 68 61 74 20 6e 65 65 message that nee
7580: 64 20 6e 6f 74 20 62 65 0a 09 23 20 70 72 65 73 d not be..# pres
7590: 65 72 76 65 64 2e 20 20 27 72 65 76 6c 69 73 74 erved. 'revlist
75a0: 27 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 6f ' is a list of o
75b0: 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 bject references
75c0: 20 66 6f 72 20 74 68 65 0a 09 23 20 72 65 76 69 for the..# revi
75d0: 73 69 6f 6e 73 20 74 68 61 74 20 68 61 76 65 20 sions that have
75e0: 62 65 65 6e 20 64 65 74 65 72 6d 69 6e 65 64 20 been determined
75f0: 74 6f 20 62 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 to be non-trunk
7600: 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61 6e 63 default..# branc
7610: 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 h revisions....#
7620: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 66 Note that the f
7630: 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e irst revision on
7640: 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 the default bra
7650: 6e 63 68 20 69 73 0a 09 23 20 68 61 6e 64 6c 65 nch is..# handle
7660: 64 20 73 74 72 61 6e 67 65 6c 79 20 62 79 20 43 d strangely by C
7670: 56 53 2e 20 20 49 66 20 61 20 66 69 6c 65 20 69 VS. If a file i
7680: 73 20 69 6d 70 6f 72 74 65 64 20 28 61 73 20 6f s imported (as o
7690: 70 70 6f 73 65 64 0a 09 23 20 74 6f 20 62 65 69 pposed..# to bei
76a0: 6e 67 20 61 64 64 65 64 29 2c 20 43 56 53 20 63 ng added), CVS c
76b0: 72 65 61 74 65 73 20 61 20 31 2e 31 20 72 65 76 reates a 1.1 rev
76c0: 69 73 69 6f 6e 2c 20 74 68 65 6e 20 63 72 65 61 ision, then crea
76d0: 74 65 73 20 61 0a 09 23 20 76 65 6e 64 6f 72 20 tes a..# vendor
76e0: 62 72 61 6e 63 68 20 31 2e 31 2e 31 20 62 61 73 branch 1.1.1 bas
76f0: 65 64 20 6f 6e 20 31 2e 31 2c 20 74 68 65 6e 20 ed on 1.1, then
7700: 63 72 65 61 74 65 73 20 61 20 31 2e 31 2e 31 2e creates a 1.1.1.
7710: 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 74 68 1..# revision th
7720: 61 74 20 69 73 20 69 64 65 6e 74 69 63 61 6c 20 at is identical
7730: 74 6f 20 74 68 65 20 31 2e 31 20 72 65 76 69 73 to the 1.1 revis
7740: 69 6f 6e 20 28 69 2e 65 2e 2c 20 69 74 73 0a 09 ion (i.e., its..
7750: 23 20 64 65 6c 74 61 74 65 78 74 20 69 73 20 65 # deltatext is e
7760: 6d 70 74 79 29 2e 20 20 54 68 65 20 6c 6f 67 20 mpty). The log
7770: 6d 65 73 73 61 67 65 20 74 68 61 74 20 74 68 65 message that the
7780: 20 75 73 65 72 20 74 79 70 65 64 0a 09 23 20 77 user typed..# w
7790: 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67 20 69 73 hen importing is
77a0: 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 stored with the
77b0: 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 1.1.1.1 revisio
77c0: 6e 2e 20 20 54 68 65 20 31 2e 31 0a 09 23 20 72 n. The 1.1..# r
77d0: 65 76 69 73 69 6f 6e 20 61 6c 77 61 79 73 20 63 evision always c
77e0: 6f 6e 74 61 69 6e 73 20 61 20 73 74 61 6e 64 61 ontains a standa
77f0: 72 64 2c 20 67 65 6e 65 72 61 74 65 64 20 6c 6f rd, generated lo
7800: 67 20 6d 65 73 73 61 67 65 2c 0a 09 23 20 27 49 g message,..# 'I
7810: 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c nitial revision\
7820: 6e 27 2e 0a 0a 09 23 20 57 68 65 6e 20 77 65 20 n'....# When we
7830: 64 65 74 65 63 74 20 61 20 73 74 72 61 69 67 68 detect a straigh
7840: 74 66 6f 72 77 61 72 64 20 69 6d 70 6f 72 74 20 tforward import
7850: 6c 69 6b 65 20 74 68 69 73 2c 20 77 65 20 77 61 like this, we wa
7860: 6e 74 0a 09 23 20 74 6f 20 68 61 6e 64 6c 65 20 nt..# to handle
7870: 69 74 20 62 79 20 64 65 6c 65 74 69 6e 67 20 74 it by deleting t
7880: 68 65 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 he 1.1 revision
7890: 28 77 68 69 63 68 20 64 6f 65 73 6e 27 74 0a 09 (which doesn't..
78a0: 23 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 75 73 # contain any us
78b0: 65 66 75 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e eful information
78c0: 29 20 61 6e 64 20 6d 61 6b 69 6e 67 20 31 2e 31 ) and making 1.1
78d0: 2e 31 2e 31 20 69 6e 74 6f 20 61 6e 0a 09 23 20 .1.1 into an..#
78e0: 69 6e 64 65 70 65 6e 64 65 6e 74 20 72 6f 6f 74 independent root
78f0: 20 69 6e 20 74 68 65 20 66 69 6c 65 27 73 20 64 in the file's d
7900: 65 70 65 6e 64 65 6e 63 79 20 74 72 65 65 2e 20 ependency tree.
7910: 20 49 6e 20 53 56 4e 2c 0a 09 23 20 31 2e 31 2e In SVN,..# 1.1.
7920: 31 2e 31 20 77 69 6c 6c 20 62 65 20 61 64 64 65 1.1 will be adde
7930: 64 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74 68 d directly to th
7940: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 e vendor branch
7950: 77 69 74 68 20 69 74 73 0a 09 23 20 69 6e 69 74 with its..# init
7960: 69 61 6c 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 ial content. Th
7970: 65 6e 20 69 6e 20 61 20 73 70 65 63 69 61 6c 20 en in a special
7980: 27 70 6f 73 74 2d 63 6f 6d 6d 69 74 27 2c 20 74 'post-commit', t
7990: 68 65 0a 09 23 20 31 2e 31 2e 31 2e 31 20 72 65 he..# 1.1.1.1 re
79a0: 76 69 73 69 6f 6e 20 69 73 20 63 6f 70 69 65 64 vision is copied
79b0: 20 62 61 63 6b 20 74 6f 20 74 72 75 6e 6b 2e 0a back to trunk..
79c0: 0a 09 23 20 49 66 20 74 68 65 20 75 73 65 72 20 ..# If the user
79d0: 69 6d 70 6f 72 74 73 20 61 67 61 69 6e 20 74 6f imports again to
79e0: 20 74 68 65 20 73 61 6d 65 20 76 65 6e 64 6f 72 the same vendor
79f0: 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20 43 56 branch, then CV
7a00: 53 0a 09 23 20 63 72 65 61 74 65 73 20 72 65 76 S..# creates rev
7a10: 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 32 2c 20 isions 1.1.1.2,
7a20: 31 2e 31 2e 31 2e 33 2c 20 65 74 63 2e 20 6f 6e 1.1.1.3, etc. on
7a30: 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e the vendor bran
7a40: 63 68 2c 0a 09 23 20 2a 77 69 74 68 6f 75 74 2a ch,..# *without*
7a50: 20 63 6f 75 6e 74 65 72 70 61 72 74 73 20 69 6e counterparts in
7a60: 20 74 72 75 6e 6b 20 28 65 76 65 6e 20 74 68 6f trunk (even tho
7a70: 75 67 68 20 74 68 65 73 65 20 72 65 76 69 73 69 ugh these revisi
7a80: 6f 6e 73 0a 09 23 20 65 66 66 65 63 74 69 76 65 ons..# effective
7a90: 6c 79 20 70 6c 61 79 20 74 68 65 20 72 6f 6c 65 ly play the role
7aa0: 20 6f 66 20 74 72 75 6e 6b 20 72 65 76 69 73 69 of trunk revisi
7ab0: 6f 6e 73 29 2e 20 20 53 6f 20 61 66 74 65 72 20 ons). So after
7ac0: 77 65 20 61 64 64 0a 09 23 20 73 75 63 68 20 72 we add..# such r
7ad0: 65 76 69 73 69 6f 6e 73 20 74 6f 20 74 68 65 20 evisions to the
7ae0: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20 77 vendor branch, w
7af0: 65 20 61 6c 73 6f 20 63 6f 70 79 20 74 68 65 6d e also copy them
7b00: 20 62 61 63 6b 20 74 6f 0a 09 23 20 74 72 75 6e back to..# trun
7b10: 6b 20 69 6e 20 70 6f 73 74 2d 63 6f 6d 6d 69 74 k in post-commit
7b20: 73 2e 0a 0a 09 23 20 57 65 20 6d 61 72 6b 20 74 s....# We mark t
7b30: 68 65 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 he revisions fou
7b40: 6e 64 20 69 6e 20 27 72 65 76 6c 69 73 74 27 20 nd in 'revlist'
7b50: 61 73 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 as default branc
7b60: 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 2e 20 h..# revisions.
7b70: 20 41 6c 73 6f 2c 20 69 66 20 74 68 65 20 72 6f Also, if the ro
7b80: 6f 74 20 72 65 76 69 73 69 6f 6e 20 68 61 73 20 ot revision has
7b90: 61 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 0a a primary child.
7ba0: 09 23 20 77 65 20 73 65 74 20 74 68 61 74 20 72 .# we set that r
7bb0: 65 76 69 73 69 6f 6e 20 74 6f 20 64 65 70 65 6e evision to depen
7bc0: 64 20 6f 6e 20 74 68 65 20 6c 61 73 74 20 6e 6f d on the last no
7bd0: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 0a n-trunk default.
7be0: 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 .# branch revisi
7bf0: 6f 6e 20 61 6e 64 20 70 6f 73 73 69 62 6c 79 20 on and possibly
7c00: 61 64 6a 75 73 74 20 69 74 73 20 74 79 70 65 20 adjust its type
7c10: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 09 73 accordingly....s
7c20: 65 74 20 66 69 72 73 74 20 5b 6c 69 6e 64 65 78 et first [lindex
7c30: 20 24 72 65 76 6c 69 73 74 20 30 5d 0a 0a 09 6c $revlist 0]...l
7c40: 6f 67 20 77 72 69 74 65 20 36 20 66 69 6c 65 20 og write 6 file
7c50: 22 3c 5b 24 66 69 72 73 74 20 72 65 76 6e 72 5d "<[$first revnr]
7c60: 3e 20 5b 65 78 70 72 20 7b 24 6d 79 69 6d 70 6f > [expr {$myimpo
7c70: 72 74 65 64 20 3f 20 22 69 6d 70 6f 72 74 65 64 rted ? "imported
7c80: 22 20 3a 20 22 6e 6f 74 20 69 6d 70 6f 72 74 65 " : "not importe
7c90: 64 22 7d 5d 2c 20 5b 24 66 69 72 73 74 20 6f 70 d"}], [$first op
7ca0: 65 72 61 74 69 6f 6e 5d 2c 20 5b 65 78 70 72 20 eration], [expr
7cb0: 7b 5b 24 66 69 72 73 74 20 68 61 73 74 65 78 74 {[$first hastext
7cc0: 5d 20 3f 20 22 68 61 73 20 74 65 78 74 22 20 3a ] ? "has text" :
7cd0: 20 22 6e 6f 20 74 65 78 74 22 7d 5d 22 0a 0a 09 "no text"}]"...
7ce0: 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 if {$myimported
7cf0: 26 26 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20 &&.. [$first
7d00: 72 65 76 6e 72 5d 20 65 71 20 22 31 2e 31 2e 31 revnr] eq "1.1.1
7d10: 2e 31 22 20 26 26 0a 09 20 20 20 20 5b 24 66 69 .1" &&.. [$fi
7d20: 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d 20 65 rst operation] e
7d30: 71 20 22 63 68 61 6e 67 65 22 20 26 26 0a 09 20 q "change" &&..
7d40: 20 20 20 21 5b 24 66 69 72 73 74 20 68 61 73 74 ![$first hast
7d50: 65 78 74 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 ext]} {... se
7d60: 74 20 72 65 76 31 31 20 5b 24 66 69 72 73 74 20 t rev11 [$first
7d70: 70 61 72 65 6e 74 5d 20 3b 20 23 20 41 73 73 65 parent] ; # Asse
7d80: 72 74 3a 20 53 68 6f 75 6c 64 20 62 65 20 6d 79 rt: Should be my
7d90: 72 6f 6f 74 2e 0a 09 20 20 20 20 6c 6f 67 20 77 root... log w
7da0: 72 69 74 65 20 33 20 66 69 6c 65 20 22 52 65 6d rite 3 file "Rem
7db0: 6f 76 69 6e 67 20 69 72 72 65 6c 65 76 61 6e 74 oving irrelevant
7dc0: 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 65 76 31 revision [$rev1
7dd0: 31 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 20 20 1 revnr]"...
7de0: 23 20 43 75 74 20 6f 75 74 20 74 68 65 20 6f 6c # Cut out the ol
7df0: 64 20 6d 79 72 6f 6f 74 20 72 65 76 69 73 69 6f d myroot revisio
7e00: 6e 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 n.... ldelete
7e10: 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31 31 20 myroots $rev11
7e20: 3b 20 23 20 4e 6f 74 20 61 20 72 6f 6f 74 20 61 ; # Not a root a
7e30: 6e 79 20 6c 6f 6e 67 65 72 2e 0a 0a 09 20 20 20 ny longer....
7e40: 20 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 $first cutfromp
7e50: 61 72 65 6e 74 20 3b 20 23 20 53 65 76 65 72 20 arent ; # Sever
7e60: 72 65 76 69 73 69 6f 6e 20 66 72 6f 6d 20 70 61 revision from pa
7e70: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 0a 09 rent revision...
7e80: 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20 6e 65 if {$stop ne
7e90: 20 22 22 7d 20 7b 0a 09 09 24 73 74 6f 70 20 63 ""} {...$stop c
7ea0: 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c utfromparent...l
7eb0: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 append myroots $
7ec0: 73 74 6f 70 20 3b 20 23 20 4e 65 77 20 72 6f 6f stop ; # New roo
7ed0: 74 2c 20 61 66 74 65 72 20 76 65 6e 64 6f 72 20 t, after vendor
7ee0: 62 72 61 6e 63 68 0a 09 20 20 20 20 7d 0a 0a 09 branch.. }...
7ef0: 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 74 68 # Cut out th
7f00: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 e vendor branch
7f10: 73 79 6d 62 6f 6c 0a 0a 09 20 20 20 20 73 65 74 symbol... set
7f20: 20 76 65 6e 64 6f 72 20 5b 24 66 69 72 73 74 20 vendor [$first
7f30: 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 20 parentbranch]..
7f40: 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 integrity ass
7f50: 65 72 74 20 7b 24 76 65 6e 64 6f 72 20 6e 65 20 ert {$vendor ne
7f60: 22 22 7d 20 7b 46 69 72 73 74 20 4e 54 44 42 20 ""} {First NTDB
7f70: 72 65 76 69 73 69 6f 6e 20 68 61 73 20 6e 6f 20 revision has no
7f80: 62 72 61 6e 63 68 7d 0a 09 20 20 20 20 69 66 20 branch}.. if
7f90: 7b 5b 24 76 65 6e 64 6f 72 20 70 61 72 65 6e 74 {[$vendor parent
7fa0: 5d 20 65 71 20 24 72 65 76 31 31 7d 20 7b 0a 09 ] eq $rev11} {..
7fb0: 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 62 72 .$rev11 removebr
7fc0: 61 6e 63 68 20 20 20 20 20 20 20 20 24 76 65 6e anch $ven
7fd0: 64 6f 72 0a 09 09 24 72 65 76 31 31 20 72 65 6d dor...$rev11 rem
7fe0: 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 ovechildonbranch
7ff0: 20 24 66 69 72 73 74 0a 09 09 24 76 65 6e 64 6f $first...$vendo
8000: 72 20 63 75 74 62 72 61 6e 63 68 70 61 72 65 6e r cutbranchparen
8010: 74 20 20 20 20 3b 23 20 62 70 20 3d 20 72 65 76 t ;# bp = rev
8020: 31 31 2c 20 61 62 6f 75 74 20 74 6f 20 62 65 20 11, about to be
8030: 67 6f 6e 65 0a 09 09 24 66 69 72 73 74 20 63 75 gone...$first cu
8040: 74 66 72 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63 tfromparentbranc
8050: 68 20 3b 23 20 70 62 20 3d 20 76 65 6e 64 6f 72 h ;# pb = vendor
8060: 2c 20 74 6f 20 62 65 20 61 20 64 65 74 61 63 68 , to be a detach
8070: 65 64 20 4c 4f 44 0a 09 09 6c 61 70 70 65 6e 64 ed LOD...lappend
8080: 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a myroots $first.
8090: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 . }... # C
80a0: 68 61 6e 67 65 20 74 68 65 20 74 79 70 65 20 6f hange the type o
80b0: 66 20 66 69 72 73 74 20 28 74 79 70 69 63 61 6c f first (typical
80c0: 6c 79 20 66 72 6f 6d 20 43 68 61 6e 67 65 20 74 ly from Change t
80d0: 6f 20 41 64 64 29 3a 0a 09 20 20 20 20 24 66 69 o Add):.. $fi
80e0: 72 73 74 20 72 65 74 79 70 65 20 61 64 64 0a 0a rst retype add..
80f0: 09 20 20 20 20 23 20 4d 6f 76 65 20 61 6e 79 20 . # Move any
8100: 74 61 67 73 20 61 6e 64 20 62 72 61 6e 63 68 65 tags and branche
8110: 73 20 66 72 6f 6d 20 74 68 65 20 6f 6c 64 20 74 s from the old t
8120: 6f 20 74 68 65 20 6e 65 77 20 72 6f 6f 74 2e 0a o the new root..
8130: 09 20 20 20 20 24 72 65 76 31 31 20 6d 6f 76 65 . $rev11 move
8140: 73 79 6d 62 6f 6c 73 74 6f 20 24 66 69 72 73 74 symbolsto $first
8150: 0a 09 7d 0a 0a 09 23 20 4d 61 72 6b 20 61 6c 6c ..}...# Mark all
8160: 20 74 68 65 20 73 70 65 63 69 61 6c 20 72 65 76 the special rev
8170: 69 73 69 6f 6e 73 20 61 73 20 73 75 63 68 0a 09 isions as such..
8180: 66 6f 72 65 61 63 68 20 72 65 76 20 24 72 65 76 foreach rev $rev
8190: 6c 69 73 74 20 7b 0a 09 20 20 20 20 6c 6f 67 20 list {.. log
81a0: 77 72 69 74 65 20 33 20 66 69 6c 65 20 22 52 65 write 3 file "Re
81b0: 76 69 73 69 6f 6e 20 6f 6e 20 64 65 66 61 75 6c vision on defaul
81c0: 74 20 62 72 61 6e 63 68 3a 20 5b 24 72 65 76 20 t branch: [$rev
81d0: 72 65 76 6e 72 5d 22 0a 09 20 20 20 20 24 72 65 revnr]".. $re
81e0: 76 20 73 65 74 6f 6e 64 65 66 61 75 6c 74 62 72 v setondefaultbr
81f0: 61 6e 63 68 20 31 0a 09 7d 0a 0a 09 69 66 20 7b anch 1..}...if {
8200: 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b 0a 09 $stop ne ""} {..
8210: 20 20 20 20 23 20 52 65 76 69 73 69 6f 6e 20 31 # Revision 1
8220: 2e 32 20 6c 6f 67 69 63 61 6c 6c 79 20 66 6f 6c .2 logically fol
8230: 6c 6f 77 73 20 74 68 65 20 69 6d 70 6f 72 74 65 lows the importe
8240: 64 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 20 20 d revisions,..
8250: 20 20 23 20 6e 6f 74 20 31 2e 31 2e 20 20 41 63 # not 1.1. Ac
8260: 63 6f 72 64 69 6e 67 6c 79 2c 20 63 6f 6e 6e 65 cordingly, conne
8270: 63 74 20 69 74 20 74 6f 20 74 68 65 20 6c 61 73 ct it to the las
8280: 74 20 4e 54 44 42 52 20 61 6e 64 0a 09 20 20 20 t NTDBR and..
8290: 20 23 20 70 6f 73 73 69 62 6c 79 20 63 68 61 6e # possibly chan
82a0: 67 65 20 69 74 73 20 74 79 70 65 2e 0a 0a 09 20 ge its type....
82b0: 20 20 20 73 65 74 20 6c 61 73 74 20 5b 6c 69 6e set last [lin
82c0: 64 65 78 20 24 72 65 76 6c 69 73 74 20 65 6e 64 dex $revlist end
82d0: 5d 0a 09 20 20 20 20 24 73 74 6f 70 20 73 65 74 ].. $stop set
82e0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 defaultbranchpar
82f0: 65 6e 74 20 24 6c 61 73 74 20 3b 20 23 20 52 65 ent $last ; # Re
8300: 74 79 70 65 73 20 74 68 65 20 72 65 76 69 73 69 types the revisi
8310: 6f 6e 20 74 6f 6f 2e 0a 09 20 20 20 20 24 6c 61 on too... $la
8320: 73 74 20 73 65 74 64 65 66 61 75 6c 74 62 72 61 st setdefaultbra
8330: 6e 63 68 63 68 69 6c 64 20 20 24 73 74 6f 70 0a nchchild $stop.
8340: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. }
8350: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 43 68 65 .. method Che
8360: 63 6b 4c 4f 44 73 20 7b 7d 20 7b 0a 09 66 6f 72 ckLODs {} {..for
8370: 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 each {_ branch}
8380: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62 72 [array get mybr
8390: 61 6e 63 68 65 73 5d 20 7b 20 24 62 72 61 6e 63 anches] { $branc
83a0: 68 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 66 6f h checklod }..fo
83b0: 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 73 74 reach {_ taglist
83c0: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 } [array get myt
83d0: 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 ags] {.. fore
83e0: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 ach tag $taglist
83f0: 20 7b 20 24 74 61 67 20 63 68 65 63 6b 6c 6f 64 { $tag checklod
8400: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 }..}..return.
8410: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
8420: 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 61 6e 74 RemoveIrrelevant
8430: 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 Deletions {} {..
8440: 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 # From cvs2svn:
8450: 49 66 20 61 20 66 69 6c 65 20 69 73 20 61 64 64 If a file is add
8460: 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 2c 20 ed on a branch,
8470: 74 68 65 6e 20 61 20 74 72 75 6e 6b 0a 09 23 20 then a trunk..#
8480: 72 65 76 69 73 69 6f 6e 20 69 73 20 61 64 64 65 revision is adde
8490: 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 d at the same ti
84a0: 6d 65 20 69 6e 20 74 68 65 20 27 44 65 61 64 27 me in the 'Dead'
84b0: 20 73 74 61 74 65 2e 0a 09 23 20 54 68 69 73 20 state...# This
84c0: 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74 revision doesn't
84d0: 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73 65 do anything use
84e0: 66 75 6c 2c 20 73 6f 20 64 65 6c 65 74 65 20 69 ful, so delete i
84f0: 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f t....foreach roo
8500: 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a 09 20 20 t $myroots {..
8510: 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 69 73 6e if {[$root isn
8520: 65 65 64 65 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 eeded]} continue
8530: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 .. log write
8540: 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 2 file "Removing
8550: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 64 65 61 unnecessary dea
8560: 64 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6f 6f d revision [$roo
8570: 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 20 20 t revnr]"...
8580: 23 20 52 65 6d 6f 76 65 20 61 73 20 72 6f 6f 74 # Remove as root
8590: 2c 20 6d 61 6b 65 20 69 74 73 20 63 68 69 6c 64 , make its child
85a0: 20 6e 65 77 20 72 6f 6f 74 20 61 66 74 65 72 0a new root after.
85b0: 09 20 20 20 20 23 20 64 69 73 63 6f 6e 6e 65 63 . # disconnec
85c0: 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 74 68 65 ting it from the
85d0: 20 72 65 76 69 73 69 6f 6e 20 6a 75 73 74 20 67 revision just g
85e0: 6f 69 6e 67 20 61 77 61 79 2e 0a 0a 09 20 20 20 oing away....
85f0: 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 ldelete myroots
8600: 20 24 72 6f 6f 74 0a 09 20 20 20 20 69 66 20 7b $root.. if {
8610: 5b 24 72 6f 6f 74 20 68 61 73 63 68 69 6c 64 5d [$root haschild]
8620: 7d 20 7b 0a 09 09 73 65 74 20 63 68 69 6c 64 20 } {...set child
8630: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 09 [$root child]...
8640: 24 63 68 69 6c 64 20 63 75 74 66 72 6f 6d 70 61 $child cutfrompa
8650: 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d rent...lappend m
8660: 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 yroots $child..
8670: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 75 74 }... # Cut
8680: 20 6f 75 74 20 74 68 65 20 62 72 61 6e 63 68 65 out the branche
8690: 73 20 73 70 61 77 6e 65 64 20 62 79 20 74 68 65 s spawned by the
86a0: 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 62 65 0a revision to be.
86b0: 09 20 20 20 20 23 20 64 65 6c 65 74 65 64 2e 20 . # deleted.
86c0: 49 66 20 74 68 65 20 62 72 61 6e 63 68 20 68 61 If the branch ha
86d0: 73 20 72 65 76 69 73 69 6f 6e 73 20 74 68 65 79 s revisions they
86e0: 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64 79 0a should already.
86f0: 09 20 20 20 20 23 20 75 73 65 20 6f 70 65 72 61 . # use opera
8700: 74 69 6f 6e 20 27 61 64 64 27 2c 20 6e 6f 20 6e tion 'add', no n
8710: 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68 eed to change th
8720: 61 74 2e 20 54 68 65 20 66 69 72 73 74 0a 09 20 at. The first..
8730: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 6f 6e # revision on
8740: 20 65 61 63 68 20 62 72 61 6e 63 68 20 62 65 63 each branch bec
8750: 6f 6d 65 73 20 61 20 6e 65 77 20 61 6e 64 20 64 omes a new and d
8760: 69 73 63 6f 6e 6e 65 63 74 65 64 0a 09 20 20 20 isconnected..
8770: 20 23 20 72 6f 6f 74 2e 0a 0a 09 20 20 20 20 66 # root.... f
8780: 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 oreach branch [$
8790: 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b root branches] {
87a0: 0a 09 09 24 62 72 61 6e 63 68 20 63 75 74 62 72 ...$branch cutbr
87b0: 61 6e 63 68 70 61 72 65 6e 74 0a 09 09 69 66 20 anchparent...if
87c0: 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63 68 {![$branch hasch
87d0: 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 ild]} continue..
87e0: 09 73 65 74 20 66 69 72 73 74 20 5b 24 62 72 61 .set first [$bra
87f0: 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 24 66 69 nch child]...$fi
8800: 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e rst cutfromparen
8810: 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f t...lappend myro
8820: 6f 74 73 20 24 66 69 72 73 74 0a 09 20 20 20 20 ots $first..
8830: 7d 0a 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d }.. $root rem
8840: 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 0a oveallbranches..
8850: 09 20 20 20 20 23 20 54 61 67 67 69 6e 67 20 61 . # Tagging a
8860: 20 64 65 61 64 20 72 65 76 69 73 69 6f 6e 20 64 dead revision d
8870: 6f 65 73 6e 27 74 20 64 6f 20 61 6e 79 74 68 69 oesn't do anythi
8880: 6e 67 2c 20 73 6f 20 72 65 6d 6f 76 65 0a 09 20 ng, so remove..
8890: 20 20 20 23 20 61 6e 79 20 74 61 67 73 20 74 68 # any tags th
88a0: 61 74 20 77 65 72 65 20 73 65 74 20 6f 6e 20 69 at were set on i
88b0: 74 2e 0a 0a 09 20 20 20 20 24 72 6f 6f 74 20 72 t.... $root r
88c0: 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 0a 09 20 emovealltags...
88d0: 20 20 20 23 20 54 68 69 73 20 63 61 6e 20 6f 6e # This can on
88e0: 6c 79 20 68 61 70 70 65 6e 20 6f 6e 63 65 20 70 ly happen once p
88f0: 65 72 20 66 69 6c 65 2c 20 61 6e 64 20 77 65 20 er file, and we
8900: 6d 69 67 68 74 20 68 61 76 65 0a 09 20 20 20 20 might have..
8910: 23 20 6a 75 73 74 20 63 68 61 6e 67 65 64 20 6d # just changed m
8920: 79 72 6f 6f 74 73 2c 20 73 6f 20 65 6e 64 20 74 yroots, so end t
8930: 68 65 20 6c 6f 6f 70 0a 09 20 20 20 20 62 72 65 he loop.. bre
8940: 61 6b 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 ak..}..return.
8950: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }.. method
8960: 52 65 6d 6f 76 65 49 6e 69 74 69 61 6c 42 72 61 RemoveInitialBra
8970: 6e 63 68 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 nchDeletions {}
8980: 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76 {..# From cvs2sv
8990: 6e 3a 20 49 66 20 74 68 65 20 66 69 72 73 74 20 n: If the first
89a0: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61 20 62 72 revision on a br
89b0: 61 6e 63 68 20 69 73 20 61 6e 0a 09 23 20 75 6e anch is an..# un
89c0: 6e 65 63 65 73 73 61 72 79 20 64 65 6c 65 74 65 necessary delete
89d0: 2c 20 72 65 6d 6f 76 65 20 69 74 2e 0a 09 23 0a , remove it...#.
89e0: 09 23 20 49 66 20 61 20 66 69 6c 65 20 69 73 20 .# If a file is
89f0: 61 64 64 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 added on a branc
8a00: 68 20 28 77 68 65 74 68 65 72 20 6f 72 20 6e 6f h (whether or no
8a10: 74 20 69 74 20 61 6c 72 65 61 64 79 0a 09 23 20 t it already..#
8a20: 65 78 69 73 74 65 64 20 6f 6e 20 74 72 75 6e 6b existed on trunk
8a30: 29 2c 20 74 68 65 6e 20 6e 65 77 20 76 65 72 73 ), then new vers
8a40: 69 6f 6e 73 20 6f 66 20 43 56 53 20 61 64 64 20 ions of CVS add
8a50: 61 20 66 69 72 73 74 0a 09 23 20 62 72 61 6e 63 a first..# branc
8a60: 68 20 72 65 76 69 73 69 6f 6e 20 69 6e 20 74 68 h revision in th
8a70: 65 20 27 64 65 61 64 27 20 73 74 61 74 65 20 28 e 'dead' state (
8a80: 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 to indicate that
8a90: 20 74 68 65 0a 09 23 20 66 69 6c 65 20 64 69 64 the..# file did
8aa0: 20 6e 6f 74 20 65 78 69 73 74 20 6f 6e 20 74 68 not exist on th
8ab0: 65 20 62 72 61 6e 63 68 20 77 68 65 6e 20 74 68 e branch when th
8ac0: 65 20 62 72 61 6e 63 68 20 77 61 73 0a 09 23 20 e branch was..#
8ad0: 63 72 65 61 74 65 64 29 20 66 6f 6c 6c 6f 77 65 created) followe
8ae0: 64 20 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20 d by the second
8af0: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 2c branch revision,
8b00: 20 77 68 69 63 68 20 69 73 20 61 6e 0a 09 23 20 which is an..#
8b10: 61 64 64 2e 20 20 57 68 65 6e 20 77 65 20 65 6e add. When we en
8b20: 63 6f 75 6e 74 65 72 20 74 68 69 73 20 73 69 74 counter this sit
8b30: 75 61 74 69 6f 6e 2c 20 77 65 20 73 65 76 65 72 uation, we sever
8b40: 20 74 68 65 20 62 72 61 6e 63 68 0a 09 23 20 66 the branch..# f
8b50: 72 6f 6d 20 74 72 75 6e 6b 20 61 6e 64 20 64 65 rom trunk and de
8b60: 6c 65 74 65 20 74 68 65 20 66 69 72 73 74 20 62 lete the first b
8b70: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 2e 0a ranch revision..
8b80: 0a 09 23 20 41 74 20 74 68 69 73 20 70 6f 69 6e ..# At this poin
8b90: 74 20 77 65 20 6d 61 79 20 68 61 76 65 20 61 6c t we may have al
8ba0: 72 65 61 64 79 20 6d 75 6c 74 69 70 6c 65 20 72 ready multiple r
8bb0: 6f 6f 74 73 20 69 6e 20 6d 79 72 6f 6f 74 73 2c oots in myroots,
8bc0: 0a 09 23 20 77 65 20 68 61 76 65 20 74 6f 20 70 ..# we have to p
8bd0: 72 6f 63 65 73 73 20 74 68 65 6d 20 61 6c 6c 2e rocess them all.
8be0: 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 ...foreach root
8bf0: 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 [$self LinesOfDe
8c00: 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 velopment] {..
8c10: 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 69 73 6e if {[$root isn
8c20: 65 65 64 65 64 62 72 61 6e 63 68 64 65 6c 5d 7d eededbranchdel]}
8c30: 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 6c continue.. l
8c40: 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c 65 20 og write 2 file
8c50: 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 63 65 "Removing unnece
8c60: 73 73 61 72 79 20 69 6e 69 74 69 61 6c 20 62 72 ssary initial br
8c70: 61 6e 63 68 20 64 65 6c 65 74 65 20 5b 24 72 6f anch delete [$ro
8c80: 6f 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 20 ot revnr]"...
8c90: 20 73 65 74 20 62 72 61 6e 63 68 20 5b 24 72 6f set branch [$ro
8ca0: 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d ot parentbranch]
8cb0: 0a 09 20 20 20 20 73 65 74 20 70 61 72 65 6e 74 .. set parent
8cc0: 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 5d 0a [$root parent].
8cd0: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 20 . set child
8ce0: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 0a 09 [$root child]...
8cf0: 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f ldelete myro
8d00: 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 6c ots $root.. l
8d10: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 append myroots $
8d20: 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 62 72 61 child... $bra
8d30: 6e 63 68 20 63 75 74 62 72 61 6e 63 68 70 61 72 nch cutbranchpar
8d40: 65 6e 74 0a 09 20 20 20 20 24 62 72 61 6e 63 68 ent.. $branch
8d50: 20 63 75 74 63 68 69 6c 64 0a 09 20 20 20 20 24 cutchild.. $
8d60: 63 68 69 6c 64 20 20 63 75 74 66 72 6f 6d 70 61 child cutfrompa
8d70: 72 65 6e 74 0a 0a 09 20 20 20 20 24 62 72 61 6e rent... $bran
8d80: 63 68 20 73 65 74 63 68 69 6c 64 20 20 20 20 20 ch setchild
8d90: 20 20 20 24 63 68 69 6c 64 0a 09 20 20 20 20 24 $child.. $
8da0: 63 68 69 6c 64 20 20 73 65 74 70 61 72 65 6e 74 child setparent
8db0: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 0a branch $branch..
8dc0: 09 20 20 20 20 24 70 61 72 65 6e 74 20 72 65 6d . $parent rem
8dd0: 6f 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 ovebranch
8de0: 20 24 62 72 61 6e 63 68 0a 09 20 20 20 20 24 70 $branch.. $p
8df0: 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c arent removechil
8e00: 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a donbranch $root.
8e10: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. }
8e20: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 4c 69 6e .. method Lin
8e30: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 esOfDevelopment
8e40: 7b 7d 20 7b 0a 09 23 20 44 65 74 65 72 6d 69 6e {} {..# Determin
8e50: 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 64 e all lines of d
8e60: 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 evelopment for t
8e70: 68 65 20 66 69 6c 65 2e 20 54 68 69 73 20 61 72 he file. This ar
8e80: 65 0a 09 23 20 74 68 65 20 6b 6e 6f 77 6e 20 72 e..# the known r
8e90: 6f 6f 74 73 2c 20 61 6e 64 20 74 68 65 20 72 6f oots, and the ro
8ea0: 6f 74 20 6f 66 20 61 6c 6c 20 62 72 61 6e 63 68 ot of all branch
8eb0: 65 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 0a es found on the.
8ec0: 09 23 20 6c 69 6e 65 20 6f 66 20 70 72 69 6d 61 .# line of prima
8ed0: 72 79 20 63 68 69 6c 64 72 65 6e 2e 0a 0a 09 73 ry children....s
8ee0: 65 74 20 6c 6f 64 72 6f 6f 74 73 20 7b 7d 0a 09 et lodroots {}..
8ef0: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79 foreach root $my
8f00: 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 24 73 65 roots {.. $se
8f10: 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69 lf AddBranchedLi
8f20: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 nesOfDevelopment
8f30: 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74 0a lodroots $root.
8f40: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 6f 64 . lappend lod
8f50: 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 7d 0a 09 roots $root..}..
8f60: 72 65 74 75 72 6e 20 24 6c 6f 64 72 6f 6f 74 73 return $lodroots
8f70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
8f80: 6f 64 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69 od AddBranchedLi
8f90: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 nesOfDevelopment
8fa0: 20 7b 6c 76 20 72 6f 6f 74 7d 20 7b 0a 09 75 70 {lv root} {..up
8fb0: 76 61 72 20 31 20 24 6c 76 20 6c 6f 64 72 6f 6f var 1 $lv lodroo
8fc0: 74 73 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 ts..while {$root
8fd0: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 66 ne ""} {.. f
8fe0: 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 oreach branch [$
8ff0: 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b root branches] {
9000: 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63 68 ...if {![$branch
9010: 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 haschild]} cont
9020: 69 6e 75 65 0a 09 09 73 65 74 20 63 68 69 6c 64 inue...set child
9030: 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 5d [$branch child]
9040: 0a 09 09 23 20 52 65 63 75 72 73 65 20 69 6e 74 ...# Recurse int
9050: 6f 20 74 68 65 20 62 72 61 6e 63 68 20 66 6f 72 o the branch for
9060: 20 64 65 65 70 65 72 20 62 72 61 6e 63 68 65 73 deeper branches
9070: 2e 0a 09 09 24 73 65 6c 66 20 41 64 64 42 72 61 ....$self AddBra
9080: 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 65 nchedLinesOfDeve
9090: 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f 74 73 lopment lodroots
90a0: 20 24 63 68 69 6c 64 0a 09 09 6c 61 70 70 65 6e $child...lappen
90b0: 64 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 6c d lodroots $chil
90c0: 64 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65 d.. }.. se
90d0: 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 t root [$root ch
90e0: 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a ild]..}..return.
90f0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
9100: 64 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72 75 6e d ExcludeNonTrun
9110: 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 7b 7d 20 kInformation {}
9120: 7b 0a 09 23 20 52 65 6d 6f 76 65 20 61 6c 6c 20 {..# Remove all
9130: 6e 6f 6e 2d 74 72 75 6e 6b 20 62 72 61 6e 63 68 non-trunk branch
9140: 65 73 2c 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 es, revisions, a
9150: 6e 64 20 74 61 67 73 2e 20 57 65 20 64 6f 0a 09 nd tags. We do..
9160: 23 20 6b 65 65 70 20 74 68 65 20 74 61 67 73 20 # keep the tags
9170: 77 68 69 63 68 20 61 72 65 20 6f 6e 20 74 68 65 which are on the
9180: 20 74 72 75 6e 6b 2e 0a 0a 09 73 65 74 20 6e 74 trunk....set nt
9190: 64 62 72 6f 6f 74 20 22 22 0a 09 66 6f 72 65 61 dbroot ""..forea
91a0: 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c ch root [$self L
91b0: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e inesOfDevelopmen
91c0: 74 5d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 74 65 t] {.. # Note
91d0: 3a 20 48 65 72 65 20 74 68 65 20 6f 72 64 65 72 : Here the order
91e0: 20 6f 66 20 74 68 65 20 72 6f 6f 74 73 20 69 73 of the roots is
91f0: 20 69 6d 70 6f 72 74 61 6e 74 2c 0a 09 20 20 20 important,..
9200: 20 23 20 69 2e 65 2e 20 74 68 61 74 20 77 65 20 # i.e. that we
9210: 67 65 74 20 74 68 65 6d 20 69 6e 20 64 65 70 74 get them in dept
9220: 68 20 66 69 72 73 74 20 6f 72 64 65 72 2e 20 54 h first order. T
9230: 68 69 73 20 65 6e 73 75 72 65 73 0a 09 20 20 20 his ensures..
9240: 20 23 20 74 68 61 74 20 74 68 65 20 72 65 6d 6f # that the remo
9250: 76 61 6c 20 6f 66 20 61 20 62 72 61 6e 63 68 20 val of a branch
9260: 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 61 66 74 happens only aft
9270: 65 72 20 74 68 65 0a 09 20 20 20 20 23 20 62 72 er the.. # br
9280: 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 66 anches spawned f
9290: 72 6f 6d 20 69 74 20 77 65 72 65 20 72 65 6d 6f rom it were remo
92a0: 76 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 74 ved. Otherwise t
92b0: 68 65 0a 09 20 20 20 20 23 20 73 79 73 74 65 6d he.. # system
92c0: 20 6d 69 67 68 74 20 74 72 79 20 74 6f 20 61 63 might try to ac
92d0: 63 65 73 73 20 64 65 6c 65 74 65 64 20 6f 62 6a cess deleted obj
92e0: 65 63 74 73 2e 0a 0a 09 20 20 20 20 23 20 44 6f ects.... # Do
92f0: 20 6e 6f 74 20 65 78 63 6c 75 64 65 20 74 68 65 not exclude the
9300: 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 69 66 20 trunk... if
9310: 7b 5b 5b 24 72 6f 6f 74 20 6c 6f 64 5d 20 69 73 {[[$root lod] is
9320: 74 72 75 6e 6b 5d 7d 20 63 6f 6e 74 69 6e 75 65 trunk]} continue
9330: 0a 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 6c .. $self Excl
9340: 75 64 65 42 72 61 6e 63 68 20 24 72 6f 6f 74 20 udeBranch $root
9350: 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 0a 09 69 66 ntdbroot..}...if
9360: 20 7b 24 6e 74 64 62 72 6f 6f 74 20 6e 65 20 22 {$ntdbroot ne "
9370: 22 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 "} {.. $self
9380: 47 72 61 66 74 4e 54 44 42 32 54 72 75 6e 6b 20 GraftNTDB2Trunk
9390: 24 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 09 72 65 $ntdbroot..}..re
93a0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 turn. }..
93b0: 6d 65 74 68 6f 64 20 45 78 63 6c 75 64 65 42 72 method ExcludeBr
93c0: 61 6e 63 68 20 7b 72 6f 6f 74 20 6e 76 7d 20 7b anch {root nv} {
93d0: 0a 09 23 20 45 78 63 6c 75 64 65 20 74 68 65 20 ..# Exclude the
93e0: 62 72 61 6e 63 68 2f 6c 6f 64 20 73 74 61 72 74 branch/lod start
93f0: 69 6e 67 20 61 74 20 72 6f 6f 74 2c 20 61 20 72 ing at root, a r
9400: 65 76 69 73 69 6f 6e 2e 0a 09 23 0a 09 23 20 49 evision...#..# I
9410: 66 20 74 68 65 20 4c 4f 44 20 73 74 61 72 74 73 f the LOD starts
9420: 20 77 69 74 68 20 6e 6f 6e 2d 74 72 75 6e 6b 20 with non-trunk
9430: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 default branch r
9440: 65 76 69 73 69 6f 6e 73 2c 0a 09 23 20 77 65 20 evisions,..# we
9450: 6c 65 61 76 65 20 74 68 65 6d 20 69 6e 20 70 6c leave them in pl
9460: 61 63 65 20 61 6e 64 20 64 6f 20 6e 6f 74 20 64 ace and do not d
9470: 65 6c 65 74 65 20 74 68 65 20 62 72 61 6e 63 68 elete the branch
9480: 2e 20 49 6e 20 74 68 61 74 0a 09 23 20 63 61 73 . In that..# cas
9490: 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 73 65 e the command se
94a0: 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 ts the variable
94b0: 69 6e 20 4e 56 20 73 6f 20 74 68 61 74 20 77 65 in NV so that we
94c0: 20 63 61 6e 0a 09 23 20 6c 61 74 65 72 20 72 65 can..# later re
94d0: 77 6f 72 6b 20 74 68 65 73 65 20 72 65 76 69 73 work these revis
94e0: 6f 6e 73 20 74 6f 20 62 65 20 70 75 72 65 6c 79 ons to be purely
94f0: 20 74 72 75 6e 6b 2e 0a 0a 09 69 66 20 7b 5b 24 trunk....if {[$
9500: 72 6f 6f 74 20 69 73 6f 6e 64 65 66 61 75 6c 74 root isondefault
9510: 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 20 20 20 20 branch]} {..
9520: 23 20 48 61 6e 64 6c 69 6e 67 20 61 20 4e 54 44 # Handling a NTD
9530: 42 2e 20 54 68 69 73 20 62 72 61 6e 63 68 20 6d B. This branch m
9540: 61 79 20 63 6f 6e 73 69 73 74 73 20 6e 6f 74 20 ay consists not
9550: 6f 6e 6c 79 20 6f 66 0a 09 20 20 20 20 23 20 4e only of.. # N
9560: 54 44 42 20 72 65 76 69 73 69 6f 6e 73 2c 20 62 TDB revisions, b
9570: 75 74 20 61 6c 73 6f 20 73 6f 6d 65 20 6e 6f 6e ut also some non
9580: 2d 4e 54 44 42 2e 20 54 68 65 20 6c 61 74 74 65 -NTDB. The latte
9590: 72 20 61 72 65 0a 09 20 20 20 20 23 20 74 72 75 r are.. # tru
95a0: 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 61 ly on a branch a
95b0: 6e 64 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 nd have to be ex
95c0: 63 6c 75 64 65 64 2e 20 54 68 65 20 66 6f 6c 6c cluded. The foll
95d0: 6f 77 69 6e 67 0a 09 20 20 20 20 23 20 6c 6f 6f owing.. # loo
95e0: 70 20 64 65 74 65 72 6d 69 6e 65 73 20 69 66 20 p determines if
95f0: 74 68 65 72 65 20 61 72 65 20 73 75 63 68 20 72 there are such r
9600: 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 20 20 20 evisions....
9610: 75 70 76 61 72 20 31 20 24 6e 76 20 6e 74 64 62 upvar 1 $nv ntdb
9620: 72 6f 6f 74 0a 09 20 20 20 20 73 65 74 20 6e 74 root.. set nt
9630: 64 62 72 6f 6f 74 20 24 72 6f 6f 74 0a 09 20 20 dbroot $root..
9640: 20 20 24 72 6f 6f 74 20 63 75 74 66 72 6f 6d 70 $root cutfromp
9650: 61 72 65 6e 74 62 72 61 6e 63 68 0a 0a 09 20 20 arentbranch...
9660: 20 20 73 65 74 20 72 65 76 20 24 72 6f 6f 74 0a set rev $root.
9670: 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65 76 . while {$rev
9680: 20 6e 65 20 22 22 7d 20 7b 0a 09 09 24 72 65 76 ne ""} {...$rev
9690: 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 removeallbranch
96a0: 65 73 0a 09 09 23 20 53 65 65 20 6e 6f 74 65 20 es...# See note
96b0: 5b 78 5d 2e 0a 0a 09 09 69 66 20 7b 5b 24 72 65 [x].....if {[$re
96c0: 76 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 v isondefaultbra
96d0: 6e 63 68 5d 7d 20 7b 0a 09 09 20 20 20 20 73 65 nch]} {... se
96e0: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c t rev [$rev chil
96f0: 64 5d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 d]...} else {...
9700: 20 20 20 20 62 72 65 61 6b 0a 09 09 7d 0a 09 20 break...}..
9710: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 72 65 76 }... # rev
9720: 20 6e 6f 77 20 63 6f 6e 74 61 69 6e 73 20 74 68 now contains th
9730: 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 54 44 42 e first non-NTDB
9740: 20 72 65 76 69 73 69 6f 6e 20 61 66 74 65 72 20 revision after
9750: 74 68 65 0a 09 20 20 20 20 23 20 4e 54 44 42 2c the.. # NTDB,
9760: 20 6f 72 20 69 73 20 65 6d 70 74 79 20 69 66 20 or is empty if
9770: 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 there is no such
9780: 2e 20 49 66 20 77 65 20 68 61 76 65 20 73 6f 6d . If we have som
9790: 65 0a 09 20 20 20 20 23 20 74 68 65 79 20 68 61 e.. # they ha
97a0: 76 65 20 74 6f 20 72 65 6d 6f 76 65 64 2e 0a 0a ve to removed...
97b0: 09 20 20 20 20 69 66 20 7b 24 72 65 76 20 6e 65 . if {$rev ne
97c0: 20 22 22 7d 20 20 7b 0a 09 09 73 65 74 20 6c 61 ""} {...set la
97d0: 73 74 6e 74 64 62 20 5b 24 72 65 76 20 70 61 72 stntdb [$rev par
97e0: 65 6e 74 5d 0a 09 09 24 6c 61 73 74 6e 74 64 62 ent]...$lastntdb
97f0: 20 63 75 74 66 72 6f 6d 63 68 69 6c 64 0a 09 09 cutfromchild...
9800: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 while {$rev ne "
9810: 22 7d 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20 "} {... $rev
9820: 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09 09 removealltags...
9830: 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76 65 61 $rev removea
9840: 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09 20 20 20 llbranches...
9850: 20 23 20 4e 6f 74 65 20 5b 78 5d 3a 20 57 65 20 # Note [x]: We
9860: 6d 61 79 20 73 74 69 6c 6c 20 68 61 76 65 20 68 may still have h
9870: 61 64 20 62 72 61 6e 63 68 65 73 20 6f 6e 20 74 ad branches on t
9880: 68 65 0a 09 09 20 20 20 20 23 20 72 65 76 69 73 he... # revis
9890: 69 6f 6e 2e 20 42 72 61 6e 63 68 65 73 20 77 69 ion. Branches wi
98a0: 74 68 6f 75 74 20 72 65 76 69 73 69 6f 6e 73 20 thout revisions
98b0: 63 6f 6d 6d 69 74 74 65 64 0a 09 09 20 20 20 20 committed...
98c0: 23 20 6f 6e 20 74 68 65 6d 20 64 6f 20 6e 6f 74 # on them do not
98d0: 20 73 68 6f 77 20 75 70 20 69 6e 20 74 68 65 20 show up in the
98e0: 6c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 61 6b list of roots ak
98f0: 61 0a 09 09 20 20 20 20 23 20 6c 69 6e 65 73 20 a... # lines
9900: 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a of development..
9910: 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 .. set rev [$
9920: 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 rev child]...}..
9930: 20 20 20 20 7d 0a 09 20 20 20 20 72 65 74 75 72 }.. retur
9940: 6e 0a 09 7d 0a 0a 09 23 20 4e 6f 20 4e 54 44 42 n..}...# No NTDB
9950: 20 73 74 75 66 66 20 74 6f 20 64 65 61 6c 20 77 stuff to deal w
9960: 69 74 68 2e 20 46 69 72 73 74 20 64 65 6c 65 74 ith. First delet
9970: 65 20 74 68 65 20 62 72 61 6e 63 68 20 6f 62 6a e the branch obj
9980: 65 63 74 0a 09 23 20 69 74 73 65 6c 66 2c 20 61 ect..# itself, a
9990: 66 74 65 72 20 63 75 74 74 69 6e 67 20 61 6c 6c fter cutting all
99a0: 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6e the various con
99b0: 6e 65 63 74 69 6f 6e 73 2e 0a 0a 09 73 65 74 20 nections....set
99c0: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 branch [$root pa
99d0: 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 69 66 20 rentbranch]..if
99e0: 7b 24 62 72 61 6e 63 68 20 6e 65 20 22 22 7d 20 {$branch ne ""}
99f0: 7b 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e 63 {.. set branc
9a00: 68 70 61 72 65 6e 74 20 5b 24 62 72 61 6e 63 68 hparent [$branch
9a10: 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 24 62 parent].. $b
9a20: 72 61 6e 63 68 70 61 72 65 6e 74 20 72 65 6d 6f ranchparent remo
9a30: 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 20 vebranch
9a40: 24 62 72 61 6e 63 68 0a 09 20 20 20 20 24 62 72 $branch.. $br
9a50: 61 6e 63 68 70 61 72 65 6e 74 20 72 65 6d 6f 76 anchparent remov
9a60: 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 echildonbranch $
9a70: 72 6f 6f 74 0a 09 7d 0a 0a 09 23 20 54 68 65 20 root..}...# The
9a80: 72 6f 6f 74 20 69 73 20 6e 6f 20 73 75 63 68 20 root is no such
9a90: 61 6e 79 20 6c 6f 6e 67 65 72 20 65 69 74 68 65 any longer eithe
9aa0: 72 2e 0a 09 6c 64 65 6c 65 74 65 20 6d 79 72 6f r...ldelete myro
9ab0: 6f 74 73 20 24 72 6f 6f 74 0a 0a 09 23 20 4e 6f ots $root...# No
9ac0: 77 20 67 6f 20 74 68 72 6f 75 67 68 20 74 68 65 w go through the
9ad0: 20 6c 69 6e 65 20 61 6e 64 20 72 65 6d 6f 76 65 line and remove
9ae0: 20 61 6c 6c 20 69 74 73 20 72 65 76 69 73 69 6f all its revisio
9af0: 6e 73 2e 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f ns....while {$ro
9b00: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 ot ne ""} {..
9b10: 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c $root removeall
9b20: 74 61 67 73 0a 09 20 20 20 20 24 72 6f 6f 74 20 tags.. $root
9b30: 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 removeallbranche
9b40: 73 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 53 s.. # Note: S
9b50: 65 65 20 74 68 65 20 6e 6f 74 65 20 5b 78 5d 2e ee the note [x].
9b60: 0a 0a 09 20 20 20 20 23 20 46 72 6f 6d 20 63 76 ... # From cv
9b70: 73 32 73 76 6e 3a 20 49 66 20 74 68 69 73 20 69 s2svn: If this i
9b80: 73 20 74 68 65 20 6c 61 73 74 20 64 65 66 61 75 s the last defau
9b90: 6c 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61 lt revision on a
9ba0: 0a 09 20 20 20 20 23 20 6e 6f 6e 2d 74 72 75 6e .. # non-trun
9bb0: 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 k default branch
9bc0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 31 followed by a 1
9bd0: 2e 32 20 72 65 76 69 73 69 6f 6e 2c 0a 09 20 20 .2 revision,..
9be0: 20 20 23 20 74 68 65 6e 20 74 68 65 20 31 2e 32 # then the 1.2
9bf0: 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 revision depend
9c00: 73 20 6f 6e 20 74 68 69 73 20 6f 6e 65 2e 20 20 s on this one.
9c10: 46 49 58 4d 45 3a 20 49 74 20 69 73 0a 09 20 20 FIXME: It is..
9c20: 20 20 23 20 71 75 65 73 74 69 6f 6e 61 62 6c 65 # questionable
9c30: 20 77 68 65 74 68 65 72 20 74 68 69 73 20 68 61 whether this ha
9c40: 6e 64 6c 69 6e 67 20 69 73 20 63 6f 72 72 65 63 ndling is correc
9c50: 74 2c 20 73 69 6e 63 65 20 74 68 65 0a 09 20 20 t, since the..
9c60: 20 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 # non-trunk de
9c70: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76 fault branch rev
9c80: 69 73 69 6f 6e 73 20 61 66 66 65 63 74 20 74 72 isions affect tr
9c90: 75 6e 6b 20 61 6e 64 0a 09 20 20 20 20 23 20 73 unk and.. # s
9ca0: 68 6f 75 6c 64 20 74 68 65 72 65 66 6f 72 65 20 hould therefore
9cb0: 6e 6f 74 20 6a 75 73 74 20 62 65 20 64 69 73 63 not just be disc
9cc0: 61 72 64 65 64 20 65 76 65 6e 20 69 66 0a 09 20 arded even if..
9cd0: 20 20 20 23 20 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c # --trunk-onl
9ce0: 79 2e 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 y.... if {[$r
9cf0: 6f 6f 74 20 68 61 73 64 65 66 61 75 6c 74 62 72 oot hasdefaultbr
9d00: 61 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 anchchild]} {...
9d10: 73 65 74 20 6e 74 64 62 63 68 69 6c 64 20 5b 24 set ntdbchild [$
9d20: 72 6f 6f 74 20 64 65 66 61 75 6c 74 62 72 61 6e root defaultbran
9d30: 63 68 63 68 69 6c 64 5d 0a 09 09 69 6e 74 65 67 chchild]...integ
9d40: 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 rity assert {...
9d50: 20 20 20 20 5b 24 6e 74 64 62 63 68 69 6c 64 20 [$ntdbchild
9d60: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 defaultbranchpar
9d70: 65 6e 74 5d 20 65 71 20 24 6e 74 64 62 63 68 69 ent] eq $ntdbchi
9d80: 6c 64 0a 09 09 7d 20 7b 6e 74 64 62 20 2d 20 74 ld...} {ntdb - t
9d90: 72 75 6e 6b 20 6c 69 6e 6b 61 67 65 20 62 72 6f runk linkage bro
9da0: 6b 65 6e 7d 0a 09 09 24 6e 74 64 62 63 68 69 6c ken}...$ntdbchil
9db0: 64 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e d cutdefaultbran
9dc0: 63 68 70 61 72 65 6e 74 0a 09 09 69 66 20 7b 5b chparent...if {[
9dd0: 24 6e 74 64 62 63 68 69 6c 64 20 68 61 73 70 61 $ntdbchild haspa
9de0: 72 65 6e 74 5d 7d 20 7b 0a 09 09 20 20 20 20 6c rent]} {... l
9df0: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 5b append myroots [
9e00: 24 6e 74 64 62 63 68 69 6c 64 20 70 61 72 65 6e $ntdbchild paren
9e10: 74 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 t]...}.. }...
9e20: 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 72 set root [$r
9e30: 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 0a 09 oot child]..}...
9e40: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
9e50: 20 20 6d 65 74 68 6f 64 20 47 72 61 66 74 4e 54 method GraftNT
9e60: 44 42 32 54 72 75 6e 6b 20 7b 72 6f 6f 74 7d 20 DB2Trunk {root}
9e70: 7b 0a 09 23 20 57 65 20 63 61 6e 20 6e 6f 77 20 {..# We can now
9e80: 67 72 61 66 74 20 74 68 65 20 6e 6f 6e 2d 74 72 graft the non-tr
9e90: 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e unk default bran
9ea0: 63 68 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 0a ch revisions to.
9eb0: 09 23 20 74 72 75 6e 6b 2e 20 54 68 65 79 20 73 .# trunk. They s
9ec0: 68 6f 75 6c 64 20 61 6c 72 65 61 64 79 20 62 65 hould already be
9ed0: 20 61 6c 6f 6e 65 20 6f 6e 20 61 20 43 56 53 42 alone on a CVSB
9ee0: 72 61 6e 63 68 2d 6c 65 73 73 0a 09 23 20 62 72 ranch-less..# br
9ef0: 61 6e 63 68 2e 0a 0a 09 69 6e 74 65 67 72 69 74 anch....integrit
9f00: 79 20 61 73 73 65 72 74 20 7b 21 5b 24 72 6f 6f y assert {![$roo
9f10: 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 t hasparentbranc
9f20: 68 5d 7d 20 7b 4e 54 44 42 20 72 6f 6f 74 20 73 h]} {NTDB root s
9f30: 74 69 6c 6c 20 68 61 73 20 69 74 73 20 62 72 61 till has its bra
9f40: 6e 63 68 20 73 79 6d 62 6f 6c 7d 0a 09 69 6e 74 nch symbol}..int
9f50: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 21 egrity assert {!
9f60: 5b 24 72 6f 6f 74 20 68 61 73 62 72 61 6e 63 68 [$root hasbranch
9f70: 65 73 5d 7d 20 20 20 20 20 7b 4e 54 44 42 20 72 es]} {NTDB r
9f80: 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73 20 73 70 oot still has sp
9f90: 61 77 6e 65 64 20 62 72 61 6e 63 68 65 73 7d 0a awned branches}.
9fa0: 0a 09 73 65 74 20 6c 61 73 74 20 24 72 6f 6f 74 ..set last $root
9fb0: 0a 09 77 68 69 6c 65 20 7b 5b 24 6c 61 73 74 20 ..while {[$last
9fc0: 68 61 73 63 68 69 6c 64 5d 7d 20 7b 73 65 74 20 haschild]} {set
9fd0: 6c 61 73 74 20 5b 24 6c 61 73 74 20 63 68 69 6c last [$last chil
9fe0: 64 5d 7d 0a 0a 09 69 66 20 7b 5b 24 6c 61 73 74 d]}...if {[$last
9ff0: 20 68 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63 hasdefaultbranc
a000: 68 63 68 69 6c 64 5d 7d 20 7b 0a 0a 09 20 20 20 hchild]} {...
a010: 20 73 65 74 20 72 65 76 31 32 20 5b 24 6c 61 73 set rev12 [$las
a020: 74 20 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 t defaultbranchc
a030: 68 69 6c 64 5d 0a 09 20 20 20 20 24 72 65 76 31 hild].. $rev1
a040: 32 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e 2 cutdefaultbran
a050: 63 68 70 61 72 65 6e 74 0a 09 20 20 20 20 24 6c chparent.. $l
a060: 61 73 74 20 20 63 75 74 64 65 66 61 75 6c 74 62 ast cutdefaultb
a070: 72 61 6e 63 68 63 68 69 6c 64 0a 0a 09 20 20 20 ranchchild...
a080: 20 24 72 65 76 31 32 20 63 68 61 6e 67 65 70 61 $rev12 changepa
a090: 72 65 6e 74 20 24 6c 61 73 74 0a 09 20 20 20 20 rent $last..
a0a0: 24 6c 61 73 74 20 20 63 68 61 6e 67 65 63 68 69 $last changechi
a0b0: 6c 64 20 24 72 65 76 31 32 0a 0a 09 20 20 20 20 ld $rev12...
a0c0: 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 ldelete myroots
a0d0: 24 72 65 76 31 32 0a 0a 09 20 20 20 20 23 20 4e $rev12... # N
a0e0: 6f 74 65 20 61 6e 64 20 72 65 6d 65 6d 62 65 72 ote and remember
a0f0: 20 74 68 61 74 20 74 68 65 20 74 79 70 65 20 6f that the type o
a100: 66 20 72 65 76 31 32 20 77 61 73 20 61 6c 72 65 f rev12 was alre
a110: 61 64 79 0a 09 20 20 20 20 23 20 61 64 6a 75 73 ady.. # adjus
a120: 74 65 64 20 62 79 20 41 64 6a 75 73 74 4e 6f 6e ted by AdjustNon
a130: 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e TrunkDefaultBran
a140: 63 68 2c 20 73 6f 20 77 65 20 64 6f 6e 27 74 0a ch, so we don't.
a150: 09 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 63 . # have to c
a160: 68 61 6e 67 65 20 69 74 73 20 74 79 70 65 20 68 hange its type h
a170: 65 72 65 2e 0a 09 7d 0a 0a 09 77 68 69 6c 65 20 ere...}...while
a180: 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a {$root ne ""} {.
a190: 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74 6f 6e . $root seton
a1a0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 30 0a defaultbranch 0.
a1b0: 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74 6c 6f . $root setlo
a1c0: 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20 d $mytrunk..
a1d0: 66 6f 72 65 61 63 68 20 74 61 67 20 5b 24 72 6f foreach tag [$ro
a1e0: 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09 24 74 61 ot tags] {...$ta
a1f0: 67 20 73 65 74 6c 6f 64 20 24 6d 79 74 72 75 6e g setlod $mytrun
a200: 6b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65 k.. }.. se
a210: 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 t root [$root ch
a220: 69 6c 64 5d 0a 09 7d 0a 0a 20 20 20 20 20 20 20 ild]..}..
a230: 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 return. }..
a240: 20 20 20 6d 65 74 68 6f 64 20 41 63 74 69 76 65 method Active
a250: 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76 69 73 {} {..set revis
a260: 69 6f 6e 73 20 7b 7d 0a 09 73 65 74 20 73 79 6d ions {}..set sym
a270: 62 6f 6c 73 20 20 20 7b 7d 0a 0a 09 66 6f 72 65 bols {}...fore
a280: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 ach root [$self
a290: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 LinesOfDevelopme
a2a0: 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b nt] {.. if {[
a2b0: 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 62 $root hasparentb
a2c0: 72 61 6e 63 68 5d 7d 20 7b 20 6c 61 70 70 65 6e ranch]} { lappen
a2d0: 64 20 73 79 6d 62 6f 6c 73 20 5b 24 72 6f 6f 74 d symbols [$root
a2e0: 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 20 7d parentbranch] }
a2f0: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f .. while {$ro
a300: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61 ot ne ""} {...la
a310: 70 70 65 6e 64 20 72 65 76 69 73 69 6f 6e 73 20 ppend revisions
a320: 24 72 6f 6f 74 0a 09 09 66 6f 72 65 61 63 68 20 $root...foreach
a330: 74 61 67 20 20 20 20 5b 24 72 6f 6f 74 20 74 61 tag [$root ta
a340: 67 73 5d 20 20 20 20 20 7b 20 6c 61 70 70 65 6e gs] { lappen
a350: 64 20 73 79 6d 62 6f 6c 73 20 24 74 61 67 20 20 d symbols $tag
a360: 20 20 7d 0a 09 09 66 6f 72 65 61 63 68 20 62 72 }...foreach br
a370: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e anch [$root bran
a380: 63 68 65 73 5d 20 7b 0a 09 09 20 20 20 20 69 6e ches] {... in
a390: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b tegrity assert {
a3a0: 0a 09 09 09 5b 24 62 72 61 6e 63 68 20 70 61 72 ....[$branch par
a3b0: 65 6e 74 5d 20 65 71 20 24 72 6f 6f 74 0a 09 09 ent] eq $root...
a3c0: 20 20 20 20 7d 20 7b 42 61 63 6b 72 65 66 65 72 } {Backrefer
a3d0: 65 6e 63 65 20 62 72 61 6e 63 68 20 74 6f 20 69 ence branch to i
a3e0: 74 73 20 72 6f 6f 74 20 69 73 20 6d 69 73 73 69 ts root is missi
a3f0: 6e 67 20 6f 72 20 77 72 6f 6e 67 7d 0a 09 09 20 ng or wrong}...
a400: 20 20 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f lappend symbo
a410: 6c 73 20 24 62 72 61 6e 63 68 0a 09 09 7d 0a 09 ls $branch...}..
a420: 09 73 65 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 .set lod [$root
a430: 6c 6f 64 5d 0a 09 09 69 66 20 7b 21 5b 24 6c 6f lod]...if {![$lo
a440: 64 20 69 73 74 72 75 6e 6b 5d 7d 20 7b 0a 09 09 d istrunk]} {...
a450: 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 integrity as
a460: 73 65 72 74 20 7b 0a 09 09 09 5b 24 6c 6f 64 20 sert {....[$lod
a470: 68 61 73 63 68 69 6c 64 5d 0a 09 09 20 20 20 20 haschild]...
a480: 7d 20 7b 42 72 61 6e 63 68 20 69 73 20 4c 4f 44 } {Branch is LOD
a490: 20 73 79 6d 62 6f 6c 20 77 69 74 68 6f 75 74 20 symbol without
a4a0: 72 65 76 69 73 69 6f 6e 73 7d 0a 09 09 20 20 20 revisions}...
a4b0: 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 lappend symbols
a4c0: 20 24 6c 6f 64 0a 09 09 7d 0a 09 09 73 65 74 20 $lod...}...set
a4d0: 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c root [$root chil
a4e0: 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72 d].. }..}...r
a4f0: 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b 6c 73 6f eturn [list [lso
a500: 72 74 20 2d 75 6e 69 71 75 65 20 2d 64 69 63 74 rt -unique -dict
a510: 20 24 72 65 76 69 73 69 6f 6e 73 5d 20 5b 6c 73 $revisions] [ls
a520: 6f 72 74 20 2d 75 6e 69 71 75 65 20 2d 64 69 63 ort -unique -dic
a530: 74 20 24 73 79 6d 62 6f 6c 73 5d 5d 0a 20 20 20 t $symbols]].
a540: 20 7d 0a 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 }... method
a550: 41 67 67 72 65 67 61 74 65 53 79 6d 62 6f 6c 44 AggregateSymbolD
a560: 61 74 61 20 7b 7d 20 7b 0a 09 23 20 4e 6f 77 20 ata {} {..# Now
a570: 74 68 61 74 20 74 68 65 20 65 78 61 63 74 20 73 that the exact s
a580: 65 74 20 6f 66 20 72 65 76 69 73 69 6f 6e 73 20 et of revisions
a590: 28 61 6e 64 20 74 68 72 6f 75 67 68 20 74 68 61 (and through tha
a5a0: 74 0a 09 23 20 62 72 61 6e 63 68 65 73 20 61 6e t..# branches an
a5b0: 64 20 74 61 67 73 29 20 69 73 20 6b 6e 6f 77 6e d tags) is known
a5c0: 20 77 65 20 63 61 6e 20 75 70 64 61 74 65 20 74 we can update t
a5d0: 68 65 20 61 67 67 72 65 67 61 74 65 0a 09 23 20 he aggregate..#
a5e0: 73 79 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 symbol statistic
a5f0: 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f s....foreach roo
a600: 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 t [$self LinesOf
a610: 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 Development] {..
a620: 20 20 20 20 73 65 74 20 6c 6f 64 20 5b 24 72 6f set lod [$ro
a630: 6f 74 20 6c 6f 64 5d 0a 0a 09 20 20 20 20 23 20 ot lod]... #
a640: 4e 6f 74 65 3a 20 49 66 20 74 68 65 20 4c 4f 44 Note: If the LOD
a650: 20 69 73 20 74 68 65 20 74 72 75 6e 6b 20 74 68 is the trunk th
a660: 65 20 63 6f 75 6e 74 2a 2c 20 65 74 63 2e 20 6d e count*, etc. m
a670: 65 74 68 6f 64 73 0a 09 20 20 20 20 23 20 77 69 ethods.. # wi
a680: 6c 6c 20 64 6f 20 6e 6f 74 68 69 6e 67 2c 20 61 ll do nothing, a
a690: 73 20 69 74 20 69 73 20 61 6c 77 61 79 73 20 70 s it is always p
a6a0: 72 65 73 65 6e 74 20 28 63 61 6e 6e 6f 74 20 62 resent (cannot b
a6b0: 65 0a 09 20 20 20 20 23 20 65 78 63 6c 75 64 65 e.. # exclude
a6c0: 64 29 2c 20 61 6e 64 20 69 73 20 61 6c 77 61 79 d), and is alway
a6d0: 73 20 61 20 62 72 61 6e 63 68 20 74 6f 6f 2e 0a s a branch too..
a6e0: 0a 09 20 20 20 20 23 20 4c 69 6e 65 73 20 6f 66 .. # Lines of
a6f0: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 63 6f 75 development cou
a700: 6e 74 20 61 73 20 62 72 61 6e 63 68 65 73 20 61 nt as branches a
a710: 6e 64 20 68 61 76 65 20 61 20 63 6f 6d 6d 69 74 nd have a commit
a720: 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 65 6d 20 .. # on them
a730: 28 72 6f 6f 74 29 2e 20 49 66 20 74 68 65 79 20 (root). If they
a740: 61 72 65 20 73 74 69 6c 6c 20 61 74 74 61 63 68 are still attach
a750: 65 64 20 74 6f 20 61 20 74 72 65 65 20 77 65 0a ed to a tree we.
a760: 09 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 63 . # have to c
a770: 6f 6d 70 75 74 65 20 61 6e 64 20 72 65 67 69 73 ompute and regis
a780: 74 65 72 20 70 6f 73 73 69 62 6c 65 20 70 61 72 ter possible par
a790: 65 6e 74 73 2e 0a 0a 09 20 20 20 20 24 6c 6f 64 ents.... $lod
a7a0: 20 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 countasbranch..
a7b0: 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e 74 61 63 $lod countac
a7c0: 6f 6d 6d 69 74 0a 0a 09 20 20 20 20 69 66 20 7b ommit... if {
a7d0: 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 [$root hasparent
a7e0: 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 23 20 4e branch]} {...# N
a7f0: 6f 74 65 20 6c 6f 64 20 3d 3d 20 5b 24 72 6f 6f ote lod == [$roo
a800: 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a t parentbranch].
a810: 09 09 24 6c 6f 64 20 70 6f 73 73 69 62 6c 65 70 ..$lod possiblep
a820: 61 72 65 6e 74 73 0a 09 20 20 20 20 7d 20 65 6c arents.. } el
a830: 73 65 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74 seif {![$lod ist
a840: 72 75 6e 6b 5d 20 26 26 20 5b 24 72 6f 6f 74 20 runk] && [$root
a850: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 isondefaultbranc
a860: 68 5d 7d 20 7b 0a 09 09 23 20 54 68 69 73 20 69 h]} {...# This i
a870: 73 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73 s the root revis
a880: 69 6f 6e 20 6f 66 20 61 20 64 65 74 61 63 68 65 ion of a detache
a890: 64 20 4e 54 44 42 2e 20 57 65 0a 09 09 23 20 68 d NTDB. We...# h
a8a0: 61 76 65 20 74 6f 20 6d 61 6e 75 61 6c 6c 79 20 ave to manually
a8b0: 73 65 74 20 74 68 65 20 6f 6e 6c 79 20 70 6f 73 set the only pos
a8c0: 73 69 62 6c 65 20 70 61 72 65 6e 74 20 66 6f 72 sible parent for
a8d0: 0a 09 09 23 20 74 68 69 73 20 4c 4f 44 2c 20 74 ...# this LOD, t
a8e0: 68 65 20 74 72 75 6e 6b 20 69 74 73 65 6c 66 2e he trunk itself.
a8f0: 0a 0a 09 09 5b 24 6c 6f 64 20 73 79 6d 62 6f 6c ....[$lod symbol
a900: 5d 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 ] possibleparent
a910: 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20 7d $mytrunk.. }
a920: 0a 0a 09 20 20 20 20 23 20 46 6f 72 20 74 68 65 ... # For the
a930: 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 74 68 revisions in th
a940: 65 20 6c 69 6e 65 20 77 65 20 72 65 67 69 73 74 e line we regist
a950: 65 72 20 74 68 65 69 72 20 62 72 61 6e 63 68 65 er their branche
a960: 73 0a 09 20 20 20 20 23 20 61 6e 64 20 74 61 67 s.. # and tag
a970: 73 20 61 73 20 62 6c 6f 63 6b 65 72 73 20 66 6f s as blockers fo
a980: 72 20 74 68 65 20 6c 6f 64 2c 20 61 6e 64 20 75 r the lod, and u
a990: 70 64 61 74 65 20 74 68 65 20 74 79 70 65 0a 09 pdate the type..
a9a0: 20 20 20 20 23 20 63 6f 75 6e 74 65 72 73 20 61 # counters a
a9b0: 73 20 77 65 6c 6c 2e 20 41 73 20 62 72 61 6e 63 s well. As branc
a9c0: 68 20 73 79 6d 62 6f 6c 73 20 77 69 74 68 6f 75 h symbols withou
a9d0: 74 20 63 6f 6d 6d 69 74 73 20 6f 6e 0a 09 20 20 t commits on..
a9e0: 20 20 23 20 74 68 65 6d 20 61 72 65 20 6e 6f 74 # them are not
a9f0: 20 6c 69 73 74 65 64 20 61 73 20 6c 69 6e 65 73 listed as lines
aa00: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2c of development,
aa10: 20 77 65 20 68 61 76 65 20 74 6f 0a 09 20 20 20 we have to..
aa20: 20 23 20 63 6f 75 6e 74 20 74 68 65 6d 20 68 65 # count them he
aa30: 72 65 20 61 73 20 77 65 6c 6c 2c 20 61 73 20 70 re as well, as p
aa40: 6c 61 69 6e 20 62 72 61 6e 63 68 65 73 2e 20 41 lain branches. A
aa50: 74 20 6c 61 73 74 20 77 65 0a 09 20 20 20 20 23 t last we.. #
aa60: 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 74 65 have to compute
aa70: 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 74 68 and register th
aa80: 65 20 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e e possible paren
aa90: 74 73 20 6f 66 20 74 68 65 0a 09 20 20 20 20 23 ts of the.. #
aaa0: 20 74 61 67 73 2c 20 69 6e 20 63 61 73 65 20 74 tags, in case t
aab0: 68 65 79 20 61 72 65 20 6c 61 74 65 72 20 63 6f hey are later co
aac0: 6e 76 65 72 74 65 64 20 61 73 20 62 72 61 6e 63 nverted as branc
aad0: 68 65 73 2e 0a 0a 09 20 20 20 20 77 68 69 6c 65 hes.... while
aae0: 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b {$root ne ""} {
aaf0: 0a 09 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 ...foreach branc
ab00: 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 h [$root branche
ab10: 73 5d 20 7b 0a 09 09 20 20 20 20 24 6c 6f 64 20 s] {... $lod
ab20: 62 6c 6f 63 6b 65 64 62 79 20 24 62 72 61 6e 63 blockedby $branc
ab30: 68 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 h... $branch
ab40: 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 73 0a possibleparents.
ab50: 09 09 20 20 20 20 69 66 20 7b 5b 24 62 72 61 6e .. if {[$bran
ab60: 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f ch haschild]} co
ab70: 6e 74 69 6e 75 65 0a 09 09 20 20 20 20 24 62 72 ntinue... $br
ab80: 61 6e 63 68 20 63 6f 75 6e 74 61 73 62 72 61 6e anch countasbran
ab90: 63 68 0a 09 09 7d 0a 0a 09 09 66 6f 72 65 61 63 ch...}....foreac
aba0: 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 61 67 h tag [$root tag
abb0: 73 5d 20 7b 0a 09 09 20 20 20 20 24 6c 6f 64 20 s] {... $lod
abc0: 62 6c 6f 63 6b 65 64 62 79 20 24 74 61 67 0a 09 blockedby $tag..
abd0: 09 20 20 20 20 24 74 61 67 20 70 6f 73 73 69 62 . $tag possib
abe0: 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20 20 leparents...
abf0: 24 74 61 67 20 63 6f 75 6e 74 61 73 74 61 67 0a $tag countastag.
ac00: 09 09 7d 0a 0a 09 09 73 65 74 20 72 6f 6f 74 20 ..}....set root
ac10: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 [$root child]..
ac20: 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e }..}...return
ac30: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 . }.. # #
ac40: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
ac50: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
ac60: 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e 66 69 ###. ## Confi
ac70: 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72 guration.. pr
ac80: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69 6e 66 agma -hastypeinf
ac90: 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 o no ; # no
aca0: 74 79 70 65 20 69 6e 74 72 6f 73 70 65 63 74 69 type introspecti
acb0: 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 on. pragma -h
acc0: 61 73 69 6e 66 6f 20 20 20 20 20 20 20 20 6e 6f asinfo no
acd0: 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 63 74 20 ; # no object
ace0: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 introspection.
acf0: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 pragma -hastyp
ad00: 65 6d 65 74 68 6f 64 73 20 6e 6f 20 20 3b 20 23 emethods no ; #
ad10: 20 74 79 70 65 20 69 73 20 6e 6f 74 20 72 65 6c type is not rel
ad20: 65 76 61 6e 74 2e 0a 0a 20 20 20 20 23 20 23 20 evant... # #
ad30: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
ad40: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
ad50: 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 ###.}..namespace
ad60: 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 eval ::vc::foss
ad70: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 20 il::import::cvs
ad80: 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 {. namespace
ad90: 65 78 70 6f 72 74 20 66 69 6c 65 0a 20 20 20 20 export file.
ada0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 66 namespace eval f
adb0: 69 6c 65 20 7b 0a 09 23 20 49 6d 70 6f 72 74 20 ile {..# Import
adc0: 6e 6f 74 20 72 65 71 75 69 72 65 64 2c 20 61 6c not required, al
add0: 72 65 61 64 79 20 61 20 63 68 69 6c 64 20 6e 61 ready a child na
ade0: 6d 65 73 70 61 63 65 2e 0a 09 23 20 6e 61 6d 65 mespace...# name
adf0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
ae00: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 c::fossil::impor
ae10: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 t::cvs::file::re
ae20: 76 0a 09 23 20 6e 61 6d 65 73 70 61 63 65 20 69 v..# namespace i
ae30: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 mport ::vc::foss
ae40: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
ae50: 3a 66 69 6c 65 3a 3a 73 79 6d 0a 09 6e 61 6d 65 :file::sym..name
ae60: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
ae70: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a c::tools::misc::
ae80: 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 *..namespace imp
ae90: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ort ::vc::tools:
aea0: 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 6d 65 73 70 :trouble..namesp
aeb0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
aec0: 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6e 61 6d :tools::log..nam
aed0: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a espace import ::
aee0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f vc::fossil::impo
aef0: 72 74 3a 3a 63 76 73 3a 3a 62 6c 6f 62 73 74 6f rt::cvs::blobsto
af00: 72 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d re..namespace im
af10: 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 port ::vc::fossi
af20: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a l::import::cvs::
af30: 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 65 state..namespace
af40: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f import ::vc::fo
af50: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
af60: 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 6e 61 s::integrity..na
af70: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
af80: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
af90: 6f 72 74 3a 3a 63 76 73 3a 3a 67 74 63 6f 72 65 ort::cvs::gtcore
afa0: 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 . }.}..# # ##
afb0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
afc0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
afd0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 # ##############
afe0: 23 23 23 23 23 23 23 0a 23 23 20 52 65 61 64 79 #######.## Ready
aff0: 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 ..package provid
b000: 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d e vc::fossil::im
b010: 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 port::cvs::file
b020: 31 2e 30 0a 72 65 74 75 72 6e 0a 1.0.return.