Hex Artifact Content
Not logged in

Artifact f06eb21d1d41bbaa268bd8ff39e8842dfd809174:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [e94b52b6f2] - Restructured the code handling NTBD in ExcludeBranch a bit to prevent the asserts in GraftNTDB2Trunk to bail out. by aku on 2007-10-23 04:36:31.

0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23  ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69  07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66  es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65  tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69  d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e  n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20  SE, which.# you 
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65  should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ived as part of 
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f  this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74  n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72   voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79  ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75   many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20  als.  For exact 
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73  contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65  tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79  vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c   and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66  able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e  ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23  com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 46 69 6c  ########..## Fil
0200: 65 2c 20 70 61 72 74 20 6f 66 20 61 20 70 72 6f  e, part of a pro
0210: 6a 65 63 74 2c 20 70 61 72 74 20 6f 66 20 61 20  ject, part of a 
0220: 43 56 53 20 72 65 70 6f 73 69 74 6f 72 79 2e 20  CVS repository. 
0230: 4d 75 6c 74 69 70 6c 65 0a 23 23 20 69 6e 73 74  Multiple.## inst
0240: 61 6e 63 65 73 20 61 72 65 20 70 6f 73 73 69 62  ances are possib
0250: 6c 65 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20  le...# # ## ### 
0260: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
0270: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
0280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0290: 23 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e  ##.## Requiremen
02a0: 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ts..package requ
02b0: 69 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20  ire Tcl 8.4     
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 20 20 20 20 20 20 20 20 3b 20 23 20 52 65 71 75          ; # Requ
02e0: 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61  ired runtime..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 6e  ckage require sn
0300: 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  it              
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0320: 20 20 3b 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e    ; # OO system.
0330: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
0340: 20 73 74 72 75 63 74 3a 3a 73 65 74 20 20 20 20   struct::set    
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0360: 20 20 20 20 20 3b 20 23 20 53 65 74 20 6f 70 65       ; # Set ope
0370: 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65  rations..package
0380: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
0390: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
03a0: 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 20 3b 20 23  ::file::rev  ; #
03b0: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 72 65   CVS per file re
03c0: 76 69 73 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65  visions..package
03d0: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
03e0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
03f0: 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 3b 20 23  ::file::sym  ; #
0400: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 73 79   CVS per file sy
0410: 6d 62 6f 6c 73 2e 0a 70 61 63 6b 61 67 65 20 72  mbols..package r
0420: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73  equire vc::tools
0430: 3a 3a 74 72 6f 75 62 6c 65 20 20 20 20 20 20 20  ::trouble       
0440: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 45             ; # E
0450: 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e 0a  rror reporting..
0460: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0470: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 20  vc::tools::log  
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0490: 20 20 20 20 3b 20 23 20 55 73 65 72 20 66 65 65      ; # User fee
04a0: 64 62 61 63 6b 0a 70 61 63 6b 61 67 65 20 72 65  dback.package re
04b0: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a  quire vc::tools:
04c0: 3a 6d 69 73 63 20 20 20 20 20 20 20 20 20 20 20  :misc           
04d0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 54 65            ; # Te
04e0: 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a 0a 23  xt formatting..#
04f0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0500: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0510: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0520: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0530: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76  ..snit::type ::v
0540: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0550: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 7b 0a 20  t::cvs::file {. 
0560: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
0570: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0580: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
0590: 23 20 50 75 62 6c 69 63 20 41 50 49 0a 0a 20 20  # Public API..  
05a0: 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b 70    constructor {p
05b0: 61 74 68 20 75 73 72 70 61 74 68 20 65 78 65 63  ath usrpath exec
05c0: 75 74 61 62 6c 65 20 70 72 6f 6a 65 63 74 7d 20  utable project} 
05d0: 7b 0a 09 73 65 74 20 6d 79 70 61 74 68 20 20 20  {..set mypath   
05e0: 20 20 20 20 24 70 61 74 68 0a 09 73 65 74 20 6d      $path..set m
05f0: 79 75 73 72 70 61 74 68 20 20 20 20 24 75 73 72  yusrpath    $usr
0600: 70 61 74 68 0a 09 73 65 74 20 6d 79 65 78 65 63  path..set myexec
0610: 75 74 61 62 6c 65 20 24 65 78 65 63 75 74 61 62  utable $executab
0620: 6c 65 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 63  le..set myprojec
0630: 74 20 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73  t    $project..s
0640: 65 74 20 6d 79 74 72 75 6e 6b 20 20 20 20 20 20  et mytrunk      
0650: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e  [$myproject trun
0660: 6b 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  k]..return.    }
0670: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 61 74  ..    method pat
0680: 68 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e  h    {} { return
0690: 20 24 6d 79 70 61 74 68 20 7d 0a 20 20 20 20 6d   $mypath }.    m
06a0: 65 74 68 6f 64 20 75 73 72 70 61 74 68 20 7b 7d  ethod usrpath {}
06b0: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 75 73 72   { return $myusr
06c0: 70 61 74 68 20 7d 0a 20 20 20 20 6d 65 74 68 6f  path }.    metho
06d0: 64 20 70 72 6f 6a 65 63 74 20 7b 7d 20 7b 20 72  d project {} { r
06e0: 65 74 75 72 6e 20 24 6d 79 70 72 6f 6a 65 63 74  eturn $myproject
06f0: 20 7d 0a 0a 20 20 20 20 64 65 6c 65 67 61 74 65   }..    delegate
0700: 20 6d 65 74 68 6f 64 20 63 6f 6d 6d 69 74 6d 65   method commitme
0710: 73 73 61 67 65 6f 66 20 74 6f 20 6d 79 70 72 6f  ssageof to mypro
0720: 6a 65 63 74 0a 0a 20 20 20 20 23 20 23 20 23 23  ject..    # # ##
0730: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
0740: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
0750: 23 0a 20 20 20 20 23 23 20 4d 65 74 68 6f 64 73  #.    ## Methods
0760: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
0770: 65 20 63 6c 61 73 73 20 74 6f 20 62 65 20 61 20  e class to be a 
0780: 73 69 6e 6b 20 6f 66 20 74 68 65 20 72 63 73 20  sink of the rcs 
0790: 70 61 72 73 65 72 0a 0a 20 20 20 20 23 6d 65 74  parser..    #met
07a0: 68 6f 64 20 62 65 67 69 6e 20 7b 7d 20 7b 70 75  hod begin {} {pu
07b0: 74 73 20 62 65 67 69 6e 7d 0a 20 20 20 20 23 6d  ts begin}.    #m
07c0: 65 74 68 6f 64 20 73 65 74 68 65 61 64 20 7b 68  ethod sethead {h
07d0: 7d 20 7b 70 75 74 73 20 68 65 61 64 3d 24 68 7d  } {puts head=$h}
07e0: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74  .    #method set
07f0: 70 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20  principalbranch 
0800: 7b 62 7d 20 7b 70 75 74 73 20 70 62 3d 24 62 7d  {b} {puts pb=$b}
0810: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66  .    #method def
0820: 74 61 67 20 7b 73 20 72 7d 20 7b 70 75 74 73 20  tag {s r} {puts 
0830: 24 73 3d 24 72 7d 0a 20 20 20 20 23 6d 65 74 68  $s=$r}.    #meth
0840: 6f 64 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63  od setcomment {c
0850: 7d 20 7b 70 75 74 73 20 63 6f 6d 6d 65 6e 74 3d  } {puts comment=
0860: 24 63 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20  $c}.    #method 
0870: 61 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 70 75  admindone {} {pu
0880: 74 73 20 61 64 6d 69 6e 64 6f 6e 65 7d 0a 20 20  ts admindone}.  
0890: 20 20 23 6d 65 74 68 6f 64 20 64 65 66 20 7b 72    #method def {r
08a0: 65 76 20 64 61 74 65 20 61 75 74 68 6f 72 20 73  ev date author s
08b0: 74 61 74 65 20 6e 65 78 74 20 62 72 61 6e 63 68  tate next branch
08c0: 65 73 7d 20 7b 70 75 74 73 20 22 64 65 66 20 24  es} {puts "def $
08d0: 72 65 76 20 24 64 61 74 65 20 24 61 75 74 68 6f  rev $date $autho
08e0: 72 20 24 73 74 61 74 65 20 24 6e 65 78 74 20 24  r $state $next $
08f0: 62 72 61 6e 63 68 65 73 22 7d 0a 20 20 20 20 23  branches"}.    #
0900: 6d 65 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 7b  method defdone {
0910: 7d 20 7b 70 75 74 73 20 64 65 66 2d 64 6f 6e 65  } {puts def-done
0920: 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65  }.    #method se
0930: 74 64 65 73 63 20 7b 64 7d 20 7b 70 75 74 73 20  tdesc {d} {puts 
0940: 64 65 73 63 3d 24 64 7d 0a 20 20 20 20 23 6d 65  desc=$d}.    #me
0950: 74 68 6f 64 20 65 78 74 65 6e 64 20 7b 72 65 76  thod extend {rev
0960: 20 63 6f 6d 6d 69 74 6d 73 67 20 64 65 6c 74 61   commitmsg delta
0970: 72 61 6e 67 65 7d 20 7b 70 75 74 73 20 22 65 78  range} {puts "ex
0980: 74 65 6e 64 20 24 63 6f 6d 6d 69 74 6d 73 67 20  tend $commitmsg 
0990: 24 64 65 6c 74 61 72 61 6e 67 65 22 7d 0a 20 20  $deltarange"}.  
09a0: 20 20 23 6d 65 74 68 6f 64 20 64 6f 6e 65 20 7b    #method done {
09b0: 7d 20 7b 70 75 74 73 20 64 6f 6e 65 7d 0a 0a 20  } {puts done}.. 
09c0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
09d0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
09e0: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
09f0: 23 20 50 65 72 73 69 73 74 65 6e 63 65 20 28 70  # Persistence (p
0a00: 61 73 73 20 49 49 29 0a 0a 20 20 20 20 6d 65 74  ass II)..    met
0a10: 68 6f 64 20 70 65 72 73 69 73 74 20 7b 7d 20 7b  hod persist {} {
0a20: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
0a30: 6f 64 20 64 72 6f 70 20 7b 7d 20 7b 0a 09 66 6f  od drop {} {..fo
0a40: 72 65 61 63 68 20 7b 5f 20 72 65 76 7d 20 20 20  reach {_ rev}   
0a50: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 72 65   [array get myre
0a60: 76 5d 20 20 20 20 20 20 7b 20 24 72 65 76 20 64  v]      { $rev d
0a70: 65 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65 61 63  estroy }..foreac
0a80: 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b 61 72  h {_ branch} [ar
0a90: 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68  ray get mybranch
0aa0: 65 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 64 65  es] { $branch de
0ab0: 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65 61 63 68  stroy }..foreach
0ac0: 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72   {_ taglist} [ar
0ad0: 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20  ray get mytags] 
0ae0: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74  {..    foreach t
0af0: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74  ag $taglist { $t
0b00: 61 67 20 64 65 73 74 72 6f 79 20 7d 0a 09 7d 0a  ag destroy }..}.
0b10: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
0b20: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
0b30: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0b40: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
0b50: 23 20 49 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  # Implement the 
0b60: 73 69 6e 6b 0a 0a 20 20 20 20 6d 65 74 68 6f 64  sink..    method
0b70: 20 62 65 67 69 6e 20 7b 7d 20 7b 23 69 67 6e 6f   begin {} {#igno
0b80: 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  re}..    method 
0b90: 73 65 74 68 65 61 64 20 7b 72 65 76 6e 72 7d 20  sethead {revnr} 
0ba0: 7b 0a 09 73 65 74 20 6d 79 68 65 61 64 72 65 76  {..set myheadrev
0bb0: 6e 72 20 24 72 65 76 6e 72 0a 09 72 65 74 75 72  nr $revnr..retur
0bc0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
0bd0: 68 6f 64 20 73 65 74 70 72 69 6e 63 69 70 61 6c  hod setprincipal
0be0: 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e 72  branch {branchnr
0bf0: 7d 20 7b 0a 09 73 65 74 20 6d 79 70 72 69 6e 63  } {..set myprinc
0c00: 69 70 61 6c 20 24 62 72 61 6e 63 68 6e 72 0a 09  ipal $branchnr..
0c10: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
0c20: 20 20 6d 65 74 68 6f 64 20 64 65 66 74 61 67 20    method deftag 
0c30: 7b 6e 61 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09  {name revnr} {..
0c40: 23 20 46 55 54 55 52 45 3a 20 50 65 72 66 6f 72  # FUTURE: Perfor
0c50: 6d 20 73 79 6d 62 6f 6c 20 74 72 61 6e 73 66 6f  m symbol transfo
0c60: 72 6d 61 74 69 6f 6e 20 68 65 72 65 2e 0a 0a 09  rmation here....
0c70: 69 66 20 7b 5b 73 74 72 75 63 74 3a 3a 73 65 74  if {[struct::set
0c80: 20 63 6f 6e 74 61 69 6e 73 20 24 6d 79 73 79 6d   contains $mysym
0c90: 62 6f 6c 73 20 24 6e 61 6d 65 5d 7d 20 7b 0a 09  bols $name]} {..
0ca0: 20 20 20 20 74 72 6f 75 62 6c 65 20 66 61 74 61      trouble fata
0cb0: 6c 20 22 4d 75 6c 74 69 70 6c 65 20 64 65 66 69  l "Multiple defi
0cc0: 6e 69 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73  nitions of the s
0cd0: 79 6d 62 6f 6c 20 27 24 6e 61 6d 65 27 20 69 6e  ymbol '$name' in
0ce0: 20 27 24 6d 79 70 61 74 68 27 22 0a 09 20 20 20   '$mypath'"..   
0cf0: 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 74 72   return..}...str
0d00: 75 63 74 3a 3a 73 65 74 20 61 64 64 20 6d 79 73  uct::set add mys
0d10: 79 6d 62 6f 6c 73 20 24 6e 61 6d 65 0a 0a 09 69  ymbols $name...i
0d20: 66 20 7b 5b 72 65 76 20 69 73 62 72 61 6e 63 68  f {[rev isbranch
0d30: 72 65 76 6e 72 20 24 72 65 76 6e 72 20 2d 3e 20  revnr $revnr -> 
0d40: 62 72 61 6e 63 68 6e 72 5d 7d 20 7b 0a 09 20 20  branchnr]} {..  
0d50: 20 20 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63    $self AddBranc
0d60: 68 20 24 6e 61 6d 65 20 24 62 72 61 6e 63 68 6e  h $name $branchn
0d70: 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20  r..} else {..   
0d80: 20 24 73 65 6c 66 20 41 64 64 54 61 67 20 24 6e   $self AddTag $n
0d90: 61 6d 65 20 24 72 65 76 6e 72 0a 09 7d 0a 09 72  ame $revnr..}..r
0da0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
0db0: 20 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d 65   method setcomme
0dc0: 6e 74 20 7b 63 7d 20 7b 23 20 69 67 6e 6f 72 65  nt {c} {# ignore
0dd0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 61 64  }..    method ad
0de0: 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20  mindone {} {..# 
0df0: 57 65 20 64 6f 20 6e 6f 74 68 69 6e 67 20 61 74  We do nothing at
0e00: 20 74 68 65 20 62 6f 75 6e 64 61 72 79 20 6f 66   the boundary of
0e10: 20 61 64 6d 69 6e 20 61 6e 64 20 72 65 76 69 73   admin and revis
0e20: 69 6f 6e 20 64 61 74 61 0a 20 20 20 20 7d 0a 0a  ion data.    }..
0e30: 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 20 7b      method def {
0e40: 72 65 76 6e 72 20 64 61 74 65 20 61 75 74 68 6f  revnr date autho
0e50: 72 20 73 74 61 74 65 20 6e 65 78 74 20 62 72 61  r state next bra
0e60: 6e 63 68 65 73 7d 20 7b 0a 09 24 73 65 6c 66 20  nches} {..$self 
0e70: 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d  RecordBranchComm
0e80: 69 74 73 20 24 62 72 61 6e 63 68 65 73 0a 0a 09  its $branches...
0e90: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
0ea0: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d   myrev($revnr)]}
0eb0: 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20   {..    trouble 
0ec0: 66 61 74 61 6c 20 22 46 69 6c 65 20 24 6d 79 70  fatal "File $myp
0ed0: 61 74 68 20 63 6f 6e 74 61 69 6e 73 20 64 75 70  ath contains dup
0ee0: 6c 69 63 61 74 65 20 64 65 66 69 6e 69 74 69 6f  licate definitio
0ef0: 6e 73 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20  ns for revision 
0f00: 24 72 65 76 6e 72 2e 22 0a 09 20 20 20 20 72 65  $revnr."..    re
0f10: 74 75 72 6e 0a 09 7d 0a 0a 09 73 65 74 20 6d 79  turn..}...set my
0f20: 61 69 64 28 24 72 65 76 6e 72 29 20 5b 24 6d 79  aid($revnr) [$my
0f30: 70 72 6f 6a 65 63 74 20 64 65 66 61 75 74 68 6f  project defautho
0f40: 72 20 24 61 75 74 68 6f 72 5d 0a 09 73 65 74 20  r $author]..set 
0f50: 6d 79 72 65 76 28 24 72 65 76 6e 72 29 20 5b 72  myrev($revnr) [r
0f60: 65 76 20 25 41 55 54 4f 25 20 24 72 65 76 6e 72  ev %AUTO% $revnr
0f70: 20 24 64 61 74 65 20 24 73 74 61 74 65 20 24 73   $date $state $s
0f80: 65 6c 66 5d 0a 0a 09 24 73 65 6c 66 20 52 65 63  elf]...$self Rec
0f90: 6f 72 64 42 61 73 69 63 44 65 70 65 6e 64 65 6e  ordBasicDependen
0fa0: 63 69 65 73 20 24 72 65 76 6e 72 20 24 6e 65 78  cies $revnr $nex
0fb0: 74 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  t..return.    }.
0fc0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 64  .    method defd
0fd0: 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 54 68 69 73  one {} {..# This
0fe0: 20 69 73 20 61 6c 6c 20 64 6f 6e 65 20 61 66 74   is all done aft
0ff0: 65 72 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20  er the revision 
1000: 74 72 65 65 20 68 61 73 20 62 65 65 6e 20 65 78  tree has been ex
1010: 74 72 61 63 74 65 64 0a 09 23 20 66 72 6f 6d 20  tracted..# from 
1020: 74 68 65 20 66 69 6c 65 2c 20 62 65 66 6f 72 65  the file, before
1030: 20 74 68 65 20 63 6f 6d 6d 69 74 20 6d 65 73 61   the commit mesa
1040: 67 65 73 20 61 6e 64 20 64 65 6c 74 61 20 74 65  ges and delta te
1050: 78 74 73 20 61 72 65 0a 09 23 20 70 72 6f 63 65  xts are..# proce
1060: 73 73 65 64 2e 0a 0a 09 24 73 65 6c 66 20 50 72  ssed....$self Pr
1070: 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65 70 65  ocessPrimaryDepe
1080: 6e 64 65 6e 63 69 65 73 0a 09 24 73 65 6c 66 20  ndencies..$self 
1090: 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44 65 70  ProcessBranchDep
10a0: 65 6e 64 65 6e 63 69 65 73 0a 09 24 73 65 6c 66  endencies..$self
10b0: 20 53 6f 72 74 42 72 61 6e 63 68 65 73 0a 09 24   SortBranches..$
10c0: 73 65 6c 66 20 50 72 6f 63 65 73 73 54 61 67 44  self ProcessTagD
10d0: 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 24 73 65  ependencies..$se
10e0: 6c 66 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52  lf DetermineTheR
10f0: 6f 6f 74 52 65 76 69 73 69 6f 6e 0a 09 72 65 74  ootRevision..ret
1100: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
1110: 65 74 68 6f 64 20 73 65 74 64 65 73 63 20 7b 64  ethod setdesc {d
1120: 7d 20 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20  } {# ignore}..  
1130: 20 20 6d 65 74 68 6f 64 20 65 78 74 65 6e 64 20    method extend 
1140: 7b 72 65 76 6e 72 20 63 6f 6d 6d 69 74 6d 73 67  {revnr commitmsg
1150: 20 74 65 78 74 72 61 6e 67 65 7d 20 7b 0a 09 73   textrange} {..s
1160: 65 74 20 63 6d 69 64 20 5b 24 6d 79 70 72 6f 6a  et cmid [$myproj
1170: 65 63 74 20 64 65 66 63 6d 65 73 73 61 67 65 20  ect defcmessage 
1180: 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 63 6f  [string trim $co
1190: 6d 6d 69 74 6d 73 67 5d 5d 0a 0a 09 73 65 74 20  mmitmsg]]...set 
11a0: 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 76 6e  rev $myrev($revn
11b0: 72 29 0a 0a 09 69 66 20 7b 5b 24 72 65 76 20 68  r)...if {[$rev h
11c0: 61 73 6d 65 74 61 5d 7d 20 7b 0a 09 20 20 20 20  asmeta]} {..    
11d0: 23 20 41 70 70 61 72 65 6e 74 6c 79 20 72 65 70  # Apparently rep
11e0: 6f 73 69 74 6f 72 69 65 73 20 65 78 69 73 74 20  ositories exist 
11f0: 69 6e 20 77 68 69 63 68 20 74 68 65 20 64 65 6c  in which the del
1200: 74 61 20 64 61 74 61 0a 09 20 20 20 20 23 20 66  ta data..    # f
1210: 6f 72 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 20  or revision 1.1 
1220: 69 73 20 70 72 6f 76 69 64 65 64 20 73 65 76 65  is provided seve
1230: 72 61 6c 20 74 69 6d 65 73 2c 20 61 74 20 6c 65  ral times, at le
1240: 61 73 74 0a 09 20 20 20 20 23 20 74 77 69 63 65  ast..    # twice
1250: 2e 20 54 68 65 20 61 63 74 75 61 6c 20 63 61 75  . The actual cau
1260: 73 65 20 6f 66 20 74 68 69 73 20 64 75 70 6c 69  se of this dupli
1270: 63 61 74 69 6f 6e 20 69 73 20 6e 6f 74 0a 09 20  cation is not.. 
1280: 20 20 20 23 20 6b 6e 6f 77 6e 2e 20 53 70 65 63     # known. Spec
1290: 75 6c 61 74 69 6f 6e 20 63 65 6e 74 65 72 73 20  ulation centers 
12a0: 6f 6e 20 52 43 53 2f 43 56 53 20 62 75 67 73 2c  on RCS/CVS bugs,
12b0: 20 6f 72 20 66 72 6f 6d 0a 09 20 20 20 20 23 20   or from..    # 
12c0: 6d 61 6e 75 61 6c 20 65 64 69 74 73 20 6f 66 20  manual edits of 
12d0: 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79 20 77  the repository w
12e0: 68 69 63 68 20 62 6f 72 6b 65 64 20 74 68 65 0a  hich borked the.
12f0: 09 20 20 20 20 23 20 69 6e 74 65 72 6e 61 6c 73  .    # internals
1300: 2e 20 57 68 61 74 65 76 65 72 20 74 68 65 20 63  . Whatever the c
1310: 61 75 73 65 2c 20 74 65 73 74 69 6e 67 20 73 68  ause, testing sh
1320: 6f 77 65 64 20 74 68 61 74 20 62 6f 74 68 0a 09  owed that both..
1330: 20 20 20 20 23 20 63 76 73 20 61 6e 64 20 72 63      # cvs and rc
1340: 73 20 75 73 65 20 74 68 65 20 66 69 72 73 74 20  s use the first 
1350: 64 65 66 69 6e 69 74 69 6f 6e 20 77 68 65 6e 20  definition when 
1360: 70 65 72 66 6f 72 6d 69 6e 67 20 61 0a 09 20 20  performing a..  
1370: 20 20 23 20 63 68 65 63 6b 6f 75 74 2c 20 61 6e    # checkout, an
1380: 64 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 69  d we follow thei
1390: 72 20 6c 65 61 64 2e 20 53 69 64 65 20 6e 6f 74  r lead. Side not
13a0: 65 73 3a 20 27 63 76 73 0a 09 20 20 20 20 23 20  es: 'cvs..    # 
13b0: 6c 6f 67 27 20 66 61 69 6c 73 20 6f 6e 20 73 75  log' fails on su
13c0: 63 68 20 61 20 66 69 6c 65 2c 20 61 6e 64 20 27  ch a file, and '
13d0: 63 76 73 20 72 6c 6f 67 27 20 70 72 69 6e 74 73  cvs rlog' prints
13e0: 20 74 68 65 20 6c 6f 67 0a 09 20 20 20 20 23 20   the log..    # 
13f0: 6d 65 73 73 61 67 65 20 66 72 6f 6d 20 74 68 65  message from the
1400: 20 66 69 72 73 74 20 64 65 6c 74 61 2c 20 69 67   first delta, ig
1410: 6e 6f 72 69 6e 67 20 74 68 65 20 73 65 63 6f 6e  noring the secon
1420: 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  d....    log wri
1430: 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 66 69  te 1 file "In fi
1440: 6c 65 20 24 6d 79 70 61 74 68 20 3a 20 44 75 70  le $mypath : Dup
1450: 6c 69 63 61 74 65 20 64 65 6c 74 61 20 64 61 74  licate delta dat
1460: 61 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 24  a for revision $
1470: 72 65 76 6e 72 22 0a 09 20 20 20 20 6c 6f 67 20  revnr"..    log 
1480: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 67  write 1 file "Ig
1490: 6e 6f 72 69 6e 67 20 74 68 65 20 64 75 70 6c 69  noring the dupli
14a0: 63 61 74 65 22 0a 09 20 20 20 20 72 65 74 75 72  cate"..    retur
14b0: 6e 0a 09 7d 0a 0a 09 23 20 44 65 74 65 72 6d 69  n..}...# Determi
14c0: 6e 65 20 74 68 65 20 6c 69 6e 65 20 6f 66 20 64  ne the line of d
14d0: 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74  evelopment for t
14e0: 68 65 20 72 65 76 69 73 69 6f 6e 20 28 70 72 6f  he revision (pro
14f0: 6a 65 63 74 0a 09 23 20 6c 65 76 65 6c 29 2e 20  ject..# level). 
1500: 54 68 69 73 20 67 69 76 65 73 20 75 73 20 74 68  This gives us th
1510: 65 20 62 72 61 6e 63 68 69 64 20 74 6f 6f 2c 20  e branchid too, 
1520: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
1530: 0a 09 23 20 6d 65 74 61 20 64 61 74 61 20 67 72  ..# meta data gr
1540: 6f 75 70 20 74 68 65 20 72 65 76 69 73 69 6f 6e  oup the revision
1550: 20 69 73 20 69 6e 2e 20 28 4e 6f 74 65 3a 20 42   is in. (Note: B
1560: 79 20 70 75 74 74 69 6e 67 20 62 6f 74 68 0a 09  y putting both..
1570: 23 20 62 72 61 6e 63 68 2f 6c 6f 64 20 61 6e 64  # branch/lod and
1580: 20 70 72 6f 6a 65 63 74 20 69 6e 66 6f 72 6d 61   project informa
1590: 74 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20 67 72  tion into the gr
15a0: 6f 75 70 20 77 65 20 65 6e 73 75 72 65 0a 09 23  oup we ensure..#
15b0: 20 74 68 61 74 20 61 6e 79 20 63 72 6f 73 73 2d   that any cross-
15c0: 70 72 6f 6a 65 63 74 20 61 6e 64 20 63 72 6f 73  project and cros
15d0: 73 2d 62 72 61 6e 63 68 20 63 6f 6d 6d 69 74 73  s-branch commits
15e0: 20 61 72 65 0a 09 23 20 73 65 70 61 72 61 74 65   are..# separate
15f0: 64 20 69 6e 74 6f 20 6d 75 6c 74 69 70 6c 65 20  d into multiple 
1600: 63 6f 6d 6d 69 74 73 2c 20 6f 6e 65 20 69 6e 20  commits, one in 
1610: 65 61 63 68 20 6f 66 20 74 68 65 20 70 72 6f 6a  each of the proj
1620: 65 63 74 73 0a 09 23 20 61 6e 64 2f 6f 72 20 62  ects..# and/or b
1630: 72 61 6e 63 68 65 73 29 2e 0a 0a 09 73 65 74 20  ranches)....set 
1640: 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f  lod [$self GetLO
1650: 44 20 24 72 65 76 6e 72 5d 0a 0a 09 24 72 65 76  D $revnr]...$rev
1660: 20 73 65 74 6d 65 74 61 20 5b 24 6d 79 70 72 6f   setmeta [$mypro
1670: 6a 65 63 74 20 64 65 66 6d 65 74 61 20 5b 24 6c  ject defmeta [$l
1680: 6f 64 20 69 64 5d 20 24 6d 79 61 69 64 28 24 72  od id] $myaid($r
1690: 65 76 6e 72 29 20 24 63 6d 69 64 5d 0a 09 24 72  evnr) $cmid]..$r
16a0: 65 76 20 73 65 74 74 65 78 74 20 24 74 65 78 74  ev settext $text
16b0: 72 61 6e 67 65 0a 09 24 72 65 76 20 73 65 74 6c  range..$rev setl
16c0: 6f 64 20 20 24 6c 6f 64 0a 0a 09 23 20 49 66 20  od  $lod...# If 
16d0: 74 68 69 73 20 69 73 20 72 65 76 69 73 69 6f 6e  this is revision
16e0: 20 31 2e 31 2c 20 77 65 20 68 61 76 65 20 74 6f   1.1, we have to
16f0: 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   determine wheth
1700: 65 72 20 74 68 65 0a 09 23 20 66 69 6c 65 20 73  er the..# file s
1710: 65 65 6d 73 20 74 6f 20 68 61 76 65 20 62 65 65  eems to have bee
1720: 6e 20 63 72 65 61 74 65 64 20 74 68 72 6f 75 67  n created throug
1730: 68 20 27 63 76 73 20 61 64 64 27 20 69 6e 73 74  h 'cvs add' inst
1740: 65 61 64 20 6f 66 0a 09 23 20 27 63 76 73 20 69  ead of..# 'cvs i
1750: 6d 70 6f 72 74 27 2e 20 54 68 69 73 20 63 61 6e  mport'. This can
1760: 20 62 65 20 64 6f 6e 65 20 62 79 20 6c 6f 6f 6b   be done by look
1770: 69 6e 67 20 61 74 20 74 68 65 20 75 6e 2d 0a 09  ing at the un-..
1780: 23 20 61 64 75 6c 74 65 72 61 74 65 64 20 63 6f  # adulterated co
1790: 6d 6d 69 74 20 6d 65 73 73 61 67 65 2c 20 61 73  mmit message, as
17a0: 20 43 56 53 20 75 73 65 73 20 61 20 68 61 72 64   CVS uses a hard
17b0: 77 69 72 65 64 20 6d 61 67 69 63 0a 09 23 20 6d  wired magic..# m
17c0: 65 73 73 61 67 65 20 66 6f 72 20 74 68 65 20 6c  essage for the l
17d0: 61 74 74 65 72 2c 20 69 2e 65 2e 20 22 49 6e 69  atter, i.e. "Ini
17e0: 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22  tial revision\n"
17f0: 2c 20 6e 6f 0a 09 23 20 70 65 72 69 6f 64 2e 20  , no..# period. 
1800: 20 28 54 68 69 73 20 66 61 63 74 20 61 6c 73 6f   (This fact also
1810: 20 68 65 6c 70 73 20 75 73 20 77 68 65 6e 20 74   helps us when t
1820: 68 65 20 74 69 6d 65 20 63 6f 6d 65 73 20 74 6f  he time comes to
1830: 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 20 77 68  ..# determine wh
1840: 65 74 68 65 72 20 74 68 69 73 20 66 69 6c 65 20  ether this file 
1850: 6d 69 67 68 74 20 68 61 76 65 20 68 61 64 20 61  might have had a
1860: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a   default branch.
1870: 09 23 20 69 6e 20 74 68 65 20 70 61 73 74 2e 29  .# in the past.)
1880: 0a 0a 09 69 66 20 7b 24 72 65 76 6e 72 20 65 71  ...if {$revnr eq
1890: 20 22 31 2e 31 22 7d 20 7b 0a 09 20 20 20 20 73   "1.1"} {..    s
18a0: 65 74 20 6d 79 69 6d 70 6f 72 74 65 64 20 5b 65  et myimported [e
18b0: 78 70 72 20 7b 24 63 6f 6d 6d 69 74 6d 73 67 20  xpr {$commitmsg 
18c0: 65 71 20 22 49 6e 69 74 69 61 6c 20 72 65 76 69  eq "Initial revi
18d0: 73 69 6f 6e 5c 6e 22 7d 5d 0a 09 7d 0a 0a 09 23  sion\n"}]..}...#
18e0: 20 48 65 72 65 20 77 65 20 61 6c 73 6f 20 6b 65   Here we also ke
18f0: 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20  ep track of the 
1900: 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68 20 74  order in which t
1910: 68 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20  he revisions..# 
1920: 77 65 72 65 20 61 64 64 65 64 20 74 6f 20 74 68  were added to th
1930: 65 20 66 69 6c 65 2e 0a 0a 09 6c 61 70 70 65 6e  e file....lappen
1940: 64 20 6d 79 72 65 76 69 73 69 6f 6e 73 20 24 72  d myrevisions $r
1950: 65 76 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  ev..return.    }
1960: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 6f 6e  ..    method don
1970: 65 20 7b 7d 20 7b 0a 09 23 20 43 6f 6d 70 6c 65  e {} {..# Comple
1980: 74 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73  te the revisions
1990: 2c 20 62 72 61 6e 63 68 65 73 2c 20 61 6e 64 20  , branches, and 
19a0: 74 61 67 73 2e 20 54 68 69 73 20 69 6e 63 6c 75  tags. This inclu
19b0: 64 65 73 0a 09 23 20 6c 6f 6f 6b 69 6e 67 20 66  des..# looking f
19c0: 6f 72 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64  or a non-trunk d
19d0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 6d  efault branch, m
19e0: 61 72 6b 69 6e 67 20 69 74 73 20 6d 65 6d 62 65  arking its membe
19f0: 72 73 0a 09 23 20 61 6e 64 20 6c 69 6e 6b 69 6e  rs..# and linkin
1a00: 67 20 74 68 65 6d 20 69 6e 74 6f 20 74 68 65 20  g them into the 
1a10: 74 72 75 6e 6b 2e 0a 0a 09 24 73 65 6c 66 20 44  trunk....$self D
1a20: 65 74 65 72 6d 69 6e 65 52 65 76 69 73 69 6f 6e  etermineRevision
1a30: 4f 70 65 72 61 74 69 6f 6e 73 0a 09 24 73 65 6c  Operations..$sel
1a40: 66 20 44 65 74 65 72 6d 69 6e 65 4c 69 6e 65 73  f DetermineLines
1a50: 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 0a 09 24  OfDevelopment..$
1a60: 73 65 6c 66 20 48 61 6e 64 6c 65 4e 6f 6e 54 72  self HandleNonTr
1a70: 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68  unkDefaultBranch
1a80: 0a 09 24 73 65 6c 66 20 52 65 6d 6f 76 65 49 72  ..$self RemoveIr
1a90: 72 65 6c 65 76 61 6e 74 44 65 6c 65 74 69 6f 6e  relevantDeletion
1aa0: 73 0a 09 24 73 65 6c 66 20 52 65 6d 6f 76 65 49  s..$self RemoveI
1ab0: 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65 6c 65  nitialBranchDele
1ac0: 74 69 6f 6e 73 0a 0a 09 69 66 20 7b 5b 24 6d 79  tions...if {[$my
1ad0: 70 72 6f 6a 65 63 74 20 74 72 75 6e 6b 6f 6e 6c  project trunkonl
1ae0: 79 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66  y]} {..    $self
1af0: 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b   ExcludeNonTrunk
1b00: 49 6e 66 6f 72 6d 61 74 69 6f 6e 0a 09 7d 0a 09  Information..}..
1b10: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
1b20: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
1b30: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
1b40: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
1b50: 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69   State..    vari
1b60: 61 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20 20  able mypath     
1b70: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61         {} ; # Pa
1b80: 74 68 20 6f 66 20 74 68 65 20 66 69 6c 65 27 73  th of the file's
1b90: 20 72 63 73 20 61 72 63 68 69 76 65 2e 0a 20 20   rcs archive..  
1ba0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 75 73 72    variable myusr
1bb0: 70 61 74 68 20 20 20 20 20 20 20 20 20 7b 7d 20  path         {} 
1bc0: 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68 65 20  ; # Path of the 
1bd0: 66 69 6c 65 20 61 73 20 73 65 65 6e 20 62 79 20  file as seen by 
1be0: 75 73 65 72 73 2e 0a 20 20 20 20 76 61 72 69 61  users..    varia
1bf0: 62 6c 65 20 6d 79 65 78 65 63 75 74 61 62 6c 65  ble myexecutable
1c00: 20 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f        0  ; # Boo
1c10: 6c 65 61 6e 20 66 6c 61 67 20 27 66 69 6c 65 20  lean flag 'file 
1c20: 65 78 65 63 75 74 61 62 6c 65 27 2e 0a 20 20 20  executable'..   
1c30: 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a   variable myproj
1c40: 65 63 74 20 20 20 20 20 20 20 20 20 7b 7d 20 3b  ect         {} ;
1c50: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20   # Reference to 
1c60: 74 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65  the project obje
1c70: 63 74 0a 09 09 09 09 20 20 20 20 23 20 74 68 65  ct.....    # the
1c80: 20 66 69 6c 65 20 62 65 6c 6f 6e 67 73 20 74 6f   file belongs to
1c90: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
1ca0: 79 72 65 76 20 2d 61 72 72 61 79 20 20 20 20 20  yrev -array     
1cb0: 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76   {} ; # Maps rev
1cc0: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20  ision number to 
1cd0: 74 68 65 0a 09 09 09 09 20 20 20 20 23 20 61 73  the.....    # as
1ce0: 73 6f 63 69 61 74 65 64 20 72 65 76 69 73 69 6f  sociated revisio
1cf0: 6e 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 76 61  n object..    va
1d00: 72 69 61 62 6c 65 20 6d 79 72 65 76 69 73 69 6f  riable myrevisio
1d10: 6e 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  ns       {} ; # 
1d20: 53 61 6d 65 20 61 73 20 6d 79 72 65 76 2c 20 62  Same as myrev, b
1d30: 75 74 20 61 20 6c 69 73 74 2c 0a 09 09 09 09 20  ut a list,..... 
1d40: 20 20 20 23 20 67 69 76 69 6e 67 20 75 73 20 74     # giving us t
1d50: 68 65 20 6f 72 64 65 72 20 6f 66 0a 09 09 09 09  he order of.....
1d60: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e      # revisions.
1d70: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
1d80: 61 69 64 20 20 20 20 20 20 2d 61 72 72 61 79 20  aid      -array 
1d90: 7b 7d 20 3b 20 23 20 4d 61 70 20 72 65 76 69 73  {} ; # Map revis
1da0: 69 6f 6e 20 6e 75 6d 62 65 72 73 20 74 6f 20 74  ion numbers to t
1db0: 68 65 20 69 64 0a 09 09 09 09 20 20 20 20 23 20  he id.....    # 
1dc0: 6f 66 20 74 68 65 20 61 75 74 68 6f 72 20 77 68  of the author wh
1dd0: 6f 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 09 09  o committed.....
1de0: 20 20 20 20 23 20 69 74 2e 20 54 68 69 73 20 69      # it. This i
1df0: 73 20 6c 61 74 65 72 20 61 67 67 72 65 67 61 74  s later aggregat
1e00: 65 64 0a 09 09 09 09 20 20 20 20 23 20 77 69 74  ed.....    # wit
1e10: 68 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65  h commit message
1e20: 2c 20 62 72 61 6e 63 68 20 6e 61 6d 65 0a 09 09  , branch name...
1e30: 09 09 20 20 20 20 23 20 61 6e 64 20 70 72 6f 6a  ..    # and proj
1e40: 65 63 74 20 69 64 20 66 6f 72 20 61 20 6d 65 74  ect id for a met
1e50: 61 20 69 64 2e 0a 20 20 20 20 76 61 72 69 61 62  a id..    variab
1e60: 6c 65 20 6d 79 68 65 61 64 72 65 76 6e 72 20 20  le myheadrevnr  
1e70: 20 20 20 20 20 7b 7d 20 3b 20 23 20 48 65 61 64       {} ; # Head
1e80: 20 72 65 76 69 73 69 6f 6e 20 28 72 65 76 69 73   revision (revis
1e90: 69 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 20 20 20  ion number).    
1ea0: 76 61 72 69 61 62 6c 65 20 6d 79 70 72 69 6e 63  variable myprinc
1eb0: 69 70 61 6c 20 20 20 20 20 20 20 7b 7d 20 3b 20  ipal       {} ; 
1ec0: 23 20 50 72 69 6e 63 69 70 61 6c 20 62 72 61 6e  # Principal bran
1ed0: 63 68 20 28 62 72 61 6e 63 68 20 6e 75 6d 62 65  ch (branch numbe
1ee0: 72 29 2e 0a 09 09 09 09 20 20 20 20 23 20 43 6f  r)......    # Co
1ef0: 6e 74 72 61 72 79 20 74 6f 20 74 68 65 20 6e 61  ntrary to the na
1f00: 6d 65 20 74 68 69 73 20 69 73 20 74 68 65 0a 09  me this is the..
1f10: 09 09 09 20 20 20 20 23 20 64 65 66 61 75 6c 74  ...    # default
1f20: 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72   branch..    var
1f30: 69 61 62 6c 65 20 6d 79 64 65 70 65 6e 64 65 6e  iable mydependen
1f40: 63 69 65 73 20 20 20 20 7b 7d 20 3b 20 23 20 44  cies    {} ; # D
1f50: 69 63 74 69 6f 6e 61 72 79 20 70 61 72 65 6e 74  ictionary parent
1f60: 20 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 09 09 20   -> child,..... 
1f70: 20 20 20 23 20 72 65 63 6f 72 64 73 20 70 72 69     # records pri
1f80: 6d 61 72 79 20 64 65 70 65 6e 64 65 6e 63 69 65  mary dependencie
1f90: 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  s..    variable 
1fa0: 6d 79 69 6d 70 6f 72 74 65 64 20 20 20 20 20 20  myimported      
1fb0: 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e    0  ; # Boolean
1fc0: 20 66 6c 61 67 2e 20 53 65 74 20 69 66 20 61 6e   flag. Set if an
1fd0: 64 20 6f 6e 6c 79 20 69 66 0a 09 09 09 09 20 20  d only if.....  
1fe0: 20 20 23 20 72 65 76 20 31 2e 31 20 6f 66 20 74    # rev 1.1 of t
1ff0: 68 65 20 66 69 6c 65 20 73 65 65 6d 69 6e 67 6c  he file seemingl
2000: 79 0a 09 09 09 09 20 20 20 20 23 20 77 61 73 20  y.....    # was 
2010: 69 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61 64  imported instead
2020: 20 6f 66 20 61 64 64 65 64 0a 09 09 09 09 20 20   of added.....  
2030: 20 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 20 20    # normally..  
2040: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f    variable myroo
2050: 74 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20  t            {} 
2060: 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f  ; # Reference to
2070: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62   the revision ob
2080: 6a 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 68  ject.....    # h
2090: 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20  olding the root 
20a0: 72 65 76 69 73 69 6f 6e 2e 20 20 49 74 73 0a 09  revision.  Its..
20b0: 09 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 20  ...    # number 
20c0: 75 73 75 61 6c 6c 79 20 69 73 20 27 31 2e 31 27  usually is '1.1'
20d0: 2e 20 43 61 6e 20 62 65 0a 09 09 09 09 20 20 20  . Can be.....   
20e0: 20 23 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e   # a different n
20f0: 75 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20 6f  umber, because o
2100: 66 0a 09 09 09 09 20 20 20 20 23 20 67 61 70 73  f.....    # gaps
2110: 20 63 72 65 61 74 65 64 20 76 69 61 20 27 63 76   created via 'cv
2120: 73 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20 20  sadmin -o'..    
2130: 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63  variable mybranc
2140: 68 65 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20  hes -array {} ; 
2150: 23 20 4d 61 70 73 20 62 72 61 6e 63 68 20 6e 75  # Maps branch nu
2160: 6d 62 65 72 20 74 6f 20 74 68 65 20 73 79 6d 62  mber to the symb
2170: 6f 6c 0a 09 09 09 09 20 20 20 20 23 20 6f 62 6a  ol.....    # obj
2180: 65 63 74 20 68 61 6e 64 6c 69 6e 67 20 74 68 65  ect handling the
2190: 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72   branch..    var
21a0: 69 61 62 6c 65 20 6d 79 74 61 67 73 20 20 20 20  iable mytags    
21b0: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d   -array {} ; # M
21c0: 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d  aps revision num
21d0: 62 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0a  ber to the list.
21e0: 09 09 09 09 20 20 20 20 23 20 6f 66 20 73 79 6d  ....    # of sym
21f0: 62 6f 6c 20 6f 62 6a 65 63 74 73 20 66 6f 72 20  bol objects for 
2200: 74 68 65 20 74 61 67 73 0a 09 09 09 09 20 20 20  the tags.....   
2210: 20 23 20 61 73 73 6f 63 69 61 74 65 64 20 77 69   # associated wi
2220: 74 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e  th the revision.
2230: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
2240: 73 79 6d 62 6f 6c 73 20 20 20 20 20 20 20 20 20  symbols         
2250: 7b 7d 20 3b 20 23 20 53 65 74 20 6f 66 20 74 68  {} ; # Set of th
2260: 65 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20 66  e symbol names f
2270: 6f 75 6e 64 20 69 6e 0a 09 09 09 09 20 20 20 20  ound in.....    
2280: 23 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20 20  # this file...  
2290: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61    variable mybra
22a0: 6e 63 68 63 6e 74 20 30 20 3b 20 23 20 43 6f 75  nchcnt 0 ; # Cou
22b0: 6e 74 65 72 20 66 6f 72 20 62 72 61 6e 63 68 65  nter for branche
22c0: 73 2c 20 74 6f 20 72 65 63 6f 72 64 20 74 68 65  s, to record the
22d0: 69 72 0a 09 09 09 20 20 20 20 20 23 20 6f 72 64  ir....     # ord
22e0: 65 72 20 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e  er of definition
22f0: 2e 20 54 68 69 73 20 61 6c 73 6f 20 64 65 66 69  . This also defi
2300: 6e 65 73 0a 09 09 09 20 20 20 20 20 23 20 74 68  nes....     # th
2310: 65 69 72 20 6f 72 64 65 72 20 6f 66 20 63 72 65  eir order of cre
2320: 61 74 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20  ation, which is 
2330: 74 68 65 0a 09 09 09 20 20 20 20 20 23 20 72 65  the....     # re
2340: 76 65 72 73 65 20 6f 66 20 64 65 66 69 6e 69 74  verse of definit
2350: 69 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 73 6d 61  ion.  I.e. a sma
2360: 6c 6c 65 72 0a 09 09 09 20 20 20 20 20 23 20 6e  ller....     # n
2370: 75 6d 62 65 72 20 6d 65 61 6e 73 20 27 44 65 66  umber means 'Def
2380: 69 6e 65 64 20 65 61 72 6c 69 65 72 27 2c 20 6d  ined earlier', m
2390: 65 61 6e 73 0a 09 09 09 20 20 20 20 20 23 20 27  eans....     # '
23a0: 43 72 65 61 74 65 64 20 6c 61 74 65 72 27 2e 0a  Created later'..
23b0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
23c0: 74 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 44 69 72  trunk {} ; # Dir
23d0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 74 6f  ect reference to
23e0: 20 6d 79 70 72 6f 6a 65 63 74 20 2d 3e 20 74 72   myproject -> tr
23f0: 75 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  unk..    variabl
2400: 65 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 3b 20 23  e myroots {} ; #
2410: 20 4c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 69   List of roots i
2420: 6e 20 74 68 65 20 66 6f 72 65 73 74 20 6f 66 0a  n the forest of.
2430: 09 09 09 20 20 23 20 6c 6f 64 27 73 2e 20 4f 62  ...  # lod's. Ob
2440: 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 20  ject references 
2450: 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 61 6e 64  to revisions and
2460: 0a 09 09 09 20 20 23 20 62 72 61 6e 63 68 65 73  ....  # branches
2470: 2e 20 54 68 65 20 6c 61 74 74 65 72 20 63 61 6e  . The latter can
2480: 20 61 70 70 65 61 72 20 77 68 65 6e 20 74 68 65   appear when the
2490: 79 0a 09 09 09 20 20 23 20 61 72 65 20 73 65 76  y....  # are sev
24a0: 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20  ered from their 
24b0: 70 61 72 65 6e 74 2e 0a 0a 20 20 20 20 23 20 23  parent...    # #
24c0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
24d0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
24e0: 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65  ####.    ## Inte
24f0: 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20  rnal methods..  
2500: 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42    method RecordB
2510: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 72  ranchCommits {br
2520: 61 6e 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 61  anches} {..forea
2530: 63 68 20 62 72 61 6e 63 68 72 65 76 6e 72 20 24  ch branchrevnr $
2540: 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20  branches {..    
2550: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 73  if {[catch {...s
2560: 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66  et branch [$self
2570: 20 52 65 76 32 42 72 61 6e 63 68 20 24 62 72 61   Rev2Branch $bra
2580: 6e 63 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 7d  nchrevnr]..    }
2590: 5d 7d 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63  ]} {...set branc
25a0: 68 20 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c 61  h [$self AddUnla
25b0: 62 65 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 76  beledBranch [rev
25c0: 20 32 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e   2branchnr $bran
25d0: 63 68 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d  chrevnr]]..    }
25e0: 0a 0a 09 20 20 20 20 23 20 52 65 63 6f 72 64 20  ...    # Record 
25f0: 74 68 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 74  the commit, just
2600: 20 61 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d   as revision num
2610: 62 65 72 20 66 6f 72 0a 09 20 20 20 20 23 20 6e  ber for..    # n
2620: 6f 77 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 68  ow. ProcesBranch
2630: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 77 69 6c  Dependencies wil
2640: 6c 20 65 78 74 65 6e 64 20 74 68 61 74 20 69 74  l extend that it
2650: 6f 20 61 0a 09 20 20 20 20 23 20 70 72 6f 70 65  o a..    # prope
2660: 72 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  r object referen
2670: 63 65 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e 63  ce....    $branc
2680: 68 20 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20  h setchildrevnr 
2690: 24 62 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d 0a  $branchrevnr..}.
26a0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
26b0: 20 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72     method Rev2Br
26c0: 61 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 09  anch {revnr} {..
26d0: 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b  if {[rev istrunk
26e0: 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b  revnr $revnr]} {
26f0: 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 69 6e  ..    trouble in
2700: 74 65 72 6e 61 6c 20 22 45 78 70 65 63 74 65 64  ternal "Expected
2710: 20 61 20 62 72 61 6e 63 68 20 72 65 76 69 73 69   a branch revisi
2720: 6f 6e 20 6e 75 6d 62 65 72 22 0a 09 7d 0a 09 72  on number"..}..r
2730: 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 65  eturn $mybranche
2740: 73 28 5b 72 65 76 20 32 62 72 61 6e 63 68 6e 72  s([rev 2branchnr
2750: 20 24 72 65 76 6e 72 5d 29 0a 20 20 20 20 7d 0a   $revnr]).    }.
2760: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 55  .    method AddU
2770: 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63 68 20 7b  nlabeledBranch {
2780: 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 72 65 74  branchnr} {..ret
2790: 75 72 6e 20 5b 24 73 65 6c 66 20 41 64 64 42 72  urn [$self AddBr
27a0: 61 6e 63 68 20 75 6e 6c 61 62 65 6c 65 64 2d 24  anch unlabeled-$
27b0: 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 68  branchnr $branch
27c0: 6e 72 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  nr].    }..    m
27d0: 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63 68 20  ethod AddBranch 
27e0: 7b 6e 61 6d 65 20 62 72 61 6e 63 68 6e 72 7d 20  {name branchnr} 
27f0: 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  {..if {[info exi
2800: 73 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28 24  sts mybranches($
2810: 62 72 61 6e 63 68 6e 72 29 5d 7d 20 7b 0a 09 20  branchnr)]} {.. 
2820: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66     log write 1 f
2830: 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68  ile "In '$mypath
2840: 27 3a 20 42 72 61 6e 63 68 20 27 24 62 72 61 6e  ': Branch '$bran
2850: 63 68 6e 72 27 20 6e 61 6d 65 64 20 27 5b 24 6d  chnr' named '[$m
2860: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63  ybranches($branc
2870: 68 6e 72 29 20 6e 61 6d 65 5d 27 22 0a 09 20 20  hnr) name]'"..  
2880: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69    log write 1 fi
2890: 6c 65 20 22 43 61 6e 6e 6f 74 20 68 61 76 65 20  le "Cannot have 
28a0: 73 65 63 6f 6e 64 20 6e 61 6d 65 20 27 24 6e 61  second name '$na
28b0: 6d 65 27 2c 20 69 67 6e 6f 72 69 6e 67 20 69 74  me', ignoring it
28c0: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d  "..    return..}
28d0: 0a 09 73 65 74 20 62 72 61 6e 63 68 20 5b 73 79  ..set branch [sy
28e0: 6d 20 25 41 55 54 4f 25 20 62 72 61 6e 63 68 20  m %AUTO% branch 
28f0: 24 62 72 61 6e 63 68 6e 72 20 5b 24 6d 79 70 72  $branchnr [$mypr
2900: 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20  oject getsymbol 
2910: 24 6e 61 6d 65 5d 5d 0a 09 24 62 72 61 6e 63 68  $name]]..$branch
2920: 20 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e   setposition [in
2930: 63 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a  cr mybranchcnt].
2940: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 28  .set mybranches(
2950: 24 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61 6e  $branchnr) $bran
2960: 63 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61 6e  ch..return $bran
2970: 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  ch.    }..    me
2980: 74 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61 6d  thod AddTag {nam
2990: 65 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20  e revnr} {..set 
29a0: 74 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25 20  tag [sym %AUTO% 
29b0: 74 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79 70  tag $revnr [$myp
29c0: 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c  roject getsymbol
29d0: 20 24 6e 61 6d 65 5d 5d 0a 09 6c 61 70 70 65 6e   $name]]..lappen
29e0: 64 20 6d 79 74 61 67 73 28 24 72 65 76 6e 72 29  d mytags($revnr)
29f0: 20 24 74 61 67 0a 09 72 65 74 75 72 6e 20 24 74   $tag..return $t
2a00: 61 67 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  ag.    }..    me
2a10: 74 68 6f 64 20 52 65 63 6f 72 64 42 61 73 69 63  thod RecordBasic
2a20: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 72 65  Dependencies {re
2a30: 76 6e 72 20 6e 65 78 74 7d 20 7b 0a 09 23 20 48  vnr next} {..# H
2a40: 61 6e 64 6c 65 20 74 68 65 20 72 65 76 69 73 69  andle the revisi
2a50: 6f 6e 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e  on dependencies.
2a60: 20 52 65 63 6f 72 64 20 74 68 65 6d 20 66 6f 72   Record them for
2a70: 20 6e 6f 77 2c 20 64 6f 0a 09 23 20 6e 6f 74 68   now, do..# noth
2a80: 69 6e 67 20 77 69 74 68 20 74 68 65 6d 20 79 65  ing with them ye
2a90: 74 2e 0a 0a 09 23 20 4f 6e 20 74 68 65 20 74 72  t....# On the tr
2aa0: 75 6e 6b 20 74 68 65 20 27 6e 65 78 74 27 20 66  unk the 'next' f
2ab0: 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
2ac0: 68 65 20 70 72 65 76 69 6f 75 73 0a 09 23 20 72  he previous..# r
2ad0: 65 76 69 73 69 6f 6e 2c 20 69 2e 65 2e 20 74 68  evision, i.e. th
2ae0: 65 20 5f 70 61 72 65 6e 74 5f 20 6f 66 20 74 68  e _parent_ of th
2af0: 65 20 63 75 72 72 65 6e 74 20 6f 6e 65 2e 20 45  e current one. E
2b00: 78 61 6d 70 6c 65 3a 0a 09 23 20 31 2e 36 27 73  xample:..# 1.6's
2b10: 20 6e 65 78 74 20 69 73 20 31 2e 35 20 28 6d 6f   next is 1.5 (mo
2b20: 64 75 6c 6f 20 63 76 73 20 61 64 6d 69 6e 20 2d  dulo cvs admin -
2b30: 6f 29 2e 0a 0a 09 23 20 43 6f 6e 74 72 61 72 69  o)....# Contrari
2b40: 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 74  ly on a branch t
2b50: 68 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20  he 'next' field 
2b60: 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 09 23  points to the..#
2b70: 20 70 72 69 6d 61 72 79 20 5f 63 68 69 6c 64 5f   primary _child_
2b80: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
2b90: 72 65 76 69 73 69 6f 6e 2e 20 41 73 20 65 78 61  revision. As exa
2ba0: 6d 70 6c 65 2c 0a 09 23 20 31 2e 31 2e 33 2e 32  mple,..# 1.1.3.2
2bb0: 27 73 20 27 6e 65 78 74 27 20 77 69 6c 6c 20 62  's 'next' will b
2bc0: 65 20 31 2e 31 2e 33 2e 33 2e 0a 0a 09 23 20 54  e 1.1.3.3....# T
2bd0: 68 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20  he 'next' field 
2be0: 61 63 74 75 61 6c 6c 79 20 61 6c 77 61 79 73 20  actually always 
2bf0: 72 65 66 65 72 73 20 74 6f 20 74 68 65 20 72 65  refers to the re
2c00: 76 69 73 69 6f 6e 0a 09 23 20 63 6f 6e 74 61 69  vision..# contai
2c10: 6e 69 6e 67 20 74 68 65 20 64 65 6c 74 61 20 6e  ning the delta n
2c20: 65 65 64 65 64 20 74 6f 20 72 65 74 72 69 65 76  eeded to retriev
2c30: 65 20 74 68 61 74 20 72 65 76 69 73 69 6f 6e 2e  e that revision.
2c40: 0a 0a 09 23 20 54 68 65 20 64 65 70 65 6e 64 65  ...# The depende
2c50: 6e 63 69 65 73 20 6e 65 65 64 65 64 20 68 65 72  ncies needed her
2c60: 65 20 61 72 65 20 74 68 65 20 6c 6f 67 69 63 61  e are the logica
2c70: 6c 20 73 74 72 75 63 74 75 72 65 2c 0a 09 23 20  l structure,..# 
2c80: 70 61 72 65 6e 74 2f 63 68 69 6c 64 2c 20 61 6e  parent/child, an
2c90: 64 20 6e 6f 74 20 74 68 65 20 69 6d 70 6c 65 6d  d not the implem
2ca0: 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65  entation depende
2cb0: 6e 74 20 64 65 6c 74 61 0a 09 23 20 70 6f 69 6e  nt delta..# poin
2cc0: 74 65 72 73 2e 0a 0a 09 69 66 20 7b 24 6e 65 78  ters....if {$nex
2cd0: 74 20 65 71 20 22 22 7d 20 72 65 74 75 72 6e 0a  t eq ""} return.
2ce0: 09 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
2cf0: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65              pare
2d00: 6e 74 20 2d 3e 20 63 68 69 6c 64 0a 09 69 66 20  nt -> child..if 
2d10: 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76  {[rev istrunkrev
2d20: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20  nr $revnr]} {.. 
2d30: 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 70     lappend mydep
2d40: 65 6e 64 65 6e 63 69 65 73 20 24 6e 65 78 74 20  endencies $next 
2d50: 24 72 65 76 6e 72 0a 09 7d 20 65 6c 73 65 20 7b  $revnr..} else {
2d60: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79  ..    lappend my
2d70: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65  dependencies $re
2d80: 76 6e 72 20 24 6e 65 78 74 0a 09 7d 0a 09 72 65  vnr $next..}..re
2d90: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
2da0: 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 50 72  method ProcessPr
2db0: 69 6d 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65  imaryDependencie
2dc0: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20  s {} {..foreach 
2dd0: 7b 70 61 72 65 6e 74 72 65 76 6e 72 20 63 68 69  {parentrevnr chi
2de0: 6c 64 72 65 76 6e 72 7d 20 24 6d 79 64 65 70 65  ldrevnr} $mydepe
2df0: 6e 64 65 6e 63 69 65 73 20 7b 0a 09 20 20 20 20  ndencies {..    
2e00: 73 65 74 20 70 61 72 65 6e 74 20 24 6d 79 72 65  set parent $myre
2e10: 76 28 24 70 61 72 65 6e 74 72 65 76 6e 72 29 0a  v($parentrevnr).
2e20: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 20  .    set child  
2e30: 24 6d 79 72 65 76 28 24 63 68 69 6c 64 72 65 76  $myrev($childrev
2e40: 6e 72 29 0a 09 20 20 20 20 24 70 61 72 65 6e 74  nr)..    $parent
2e50: 20 73 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64   setchild $child
2e60: 0a 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74  ..    $child set
2e70: 70 61 72 65 6e 74 20 24 70 61 72 65 6e 74 0a 09  parent $parent..
2e80: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
2e90: 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63  .    method Proc
2ea0: 65 73 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65  essBranchDepende
2eb0: 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65  ncies {} {..fore
2ec0: 61 63 68 20 7b 62 72 61 6e 63 68 6e 72 20 62 72  ach {branchnr br
2ed0: 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74  anch} [array get
2ee0: 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09   mybranches] {..
2ef0: 20 20 20 20 73 65 74 20 72 65 76 6e 72 20 5b 24      set revnr [$
2f00: 62 72 61 6e 63 68 20 70 61 72 65 6e 74 72 65 76  branch parentrev
2f10: 6e 72 5d 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b  nr]...    if {![
2f20: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65  info exists myre
2f30: 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09  v($revnr)]} {...
2f40: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65  log write 1 file
2f50: 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20   "In '$mypath': 
2f60: 54 68 65 20 62 72 61 6e 63 68 20 27 5b 24 62 72  The branch '[$br
2f70: 61 6e 63 68 20 6e 61 6d 65 5d 27 20 72 65 66 65  anch name]' refe
2f80: 72 65 6e 63 65 73 22 0a 09 09 6c 6f 67 20 77 72  rences"...log wr
2f90: 69 74 65 20 31 20 66 69 6c 65 20 22 74 68 65 20  ite 1 file "the 
2fa0: 62 6f 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27  bogus revision '
2fb0: 24 72 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c  $revnr' and will
2fc0: 20 62 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09   be ignored."...
2fd0: 24 62 72 61 6e 63 68 20 64 65 73 74 72 6f 79 0a  $branch destroy.
2fe0: 09 09 75 6e 73 65 74 20 6d 79 62 72 61 6e 63 68  ..unset mybranch
2ff0: 65 73 28 24 62 72 61 6e 63 68 6e 72 29 0a 09 20  es($branchnr).. 
3000: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65     } else {...se
3010: 74 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 65  t rev $myrev($re
3020: 76 6e 72 29 0a 09 09 24 72 65 76 20 61 64 64 62  vnr)...$rev addb
3030: 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09  ranch $branch...
3040: 24 62 72 61 6e 63 68 20 73 65 74 70 61 72 65 6e  $branch setparen
3050: 74 20 24 72 65 76 0a 0a 09 09 23 20 49 66 20 72  t $rev....# If r
3060: 65 76 69 73 69 6f 6e 73 20 77 65 72 65 20 63 6f  evisions were co
3070: 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 62  mmitted on the b
3080: 72 61 6e 63 68 20 77 65 20 73 74 6f 72 65 20 61  ranch we store a
3090: 0a 09 09 23 20 72 65 66 65 72 65 6e 63 65 20 74  ...# reference t
30a0: 6f 20 74 68 65 20 62 72 61 6e 63 68 20 74 68 65  o the branch the
30b0: 72 65 2c 20 61 6e 64 20 66 75 72 74 68 65 72 20  re, and further 
30c0: 64 65 63 6c 61 72 65 0a 09 09 23 20 74 68 65 20  declare...# the 
30d0: 66 69 72 73 74 20 63 68 69 6c 64 27 73 20 70 61  first child's pa
30e0: 72 65 6e 74 20 74 6f 20 62 65 20 62 72 61 6e 63  rent to be branc
30f0: 68 27 73 20 70 61 72 65 6e 74 2c 20 61 6e 64 0a  h's parent, and.
3100: 09 09 23 20 6c 69 73 74 20 74 68 69 73 20 63 68  ..# list this ch
3110: 69 6c 64 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ild in the paren
3120: 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 09 69  t revision.....i
3130: 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 63  f {[$branch hasc
3140: 68 69 6c 64 5d 7d 20 7b 0a 09 09 20 20 20 20 73  hild]} {...    s
3150: 65 74 20 63 68 69 6c 64 72 65 76 6e 72 20 5b 24  et childrevnr [$
3160: 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 76 6e  branch childrevn
3170: 72 5d 0a 09 09 20 20 20 20 73 65 74 20 63 68 69  r]...    set chi
3180: 6c 64 20 24 6d 79 72 65 76 28 24 63 68 69 6c 64  ld $myrev($child
3190: 72 65 76 6e 72 29 0a 09 09 20 20 20 20 24 62 72  revnr)...    $br
31a0: 61 6e 63 68 20 73 65 74 63 68 69 6c 64 20 24 63  anch setchild $c
31b0: 68 69 6c 64 0a 0a 09 09 20 20 20 20 24 63 68 69  hild....    $chi
31c0: 6c 64 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e  ld setparentbran
31d0: 63 68 20 24 62 72 61 6e 63 68 0a 09 09 20 20 20  ch $branch...   
31e0: 20 24 63 68 69 6c 64 20 73 65 74 70 61 72 65 6e   $child setparen
31f0: 74 20 20 20 20 20 20 20 24 72 65 76 0a 09 09 20  t       $rev... 
3200: 20 20 20 24 72 65 76 20 61 64 64 63 68 69 6c 64     $rev addchild
3210: 6f 6e 62 72 61 6e 63 68 20 24 63 68 69 6c 64 0a  onbranch $child.
3220: 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72  ..}..    }..}..r
3230: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
3240: 20 6d 65 74 68 6f 64 20 53 6f 72 74 42 72 61 6e   method SortBran
3250: 63 68 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61  ches {} {..forea
3260: 63 68 20 7b 72 65 76 6e 72 20 72 65 76 7d 20 5b  ch {revnr rev} [
3270: 61 72 72 61 79 20 67 65 74 20 6d 79 72 65 76 5d  array get myrev]
3280: 20 7b 20 24 72 65 76 20 73 6f 72 74 62 72 61 6e   { $rev sortbran
3290: 63 68 65 73 20 7d 0a 09 72 65 74 75 72 6e 0a 20  ches }..return. 
32a0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
32b0: 20 50 72 6f 63 65 73 73 54 61 67 44 65 70 65 6e   ProcessTagDepen
32c0: 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f  dencies {} {..fo
32d0: 72 65 61 63 68 20 7b 72 65 76 6e 72 20 74 61 67  reach {revnr tag
32e0: 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74  list} [array get
32f0: 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20   mytags] {..    
3300: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
3310: 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d  s myrev($revnr)]
3320: 7d 20 7b 0a 09 09 73 65 74 20 6e 20 5b 6c 6c 65  } {...set n [lle
3330: 6e 67 74 68 20 24 74 61 67 6c 69 73 74 5d 0a 09  ngth $taglist]..
3340: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c  .log write 1 fil
3350: 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a  e "In '$mypath':
3360: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 5b   The following [
3370: 6e 73 70 20 24 6e 20 74 61 67 5d 20 72 65 66 65  nsp $n tag] refe
3380: 72 65 6e 63 65 22 0a 09 09 6c 6f 67 20 77 72 69  rence"...log wri
3390: 74 65 20 31 20 66 69 6c 65 20 22 74 68 65 20 62  te 1 file "the b
33a0: 6f 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27 24  ogus revision '$
33b0: 72 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c 20  revnr' and will 
33c0: 62 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09 66  be ignored."...f
33d0: 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c  oreach tag $tagl
33e0: 69 73 74 20 7b 0a 09 09 20 20 20 20 6c 6f 67 20  ist {...    log 
33f0: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 20 20  write 1 file "  
3400: 20 20 5b 24 74 61 67 20 6e 61 6d 65 5d 22 0a 09    [$tag name]"..
3410: 09 20 20 20 20 24 74 61 67 20 64 65 73 74 72 6f  .    $tag destro
3420: 79 0a 09 09 7d 0a 09 09 75 6e 73 65 74 20 6d 79  y...}...unset my
3430: 74 61 67 73 28 24 72 65 76 6e 72 29 0a 09 20 20  tags($revnr)..  
3440: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74    } else {...set
3450: 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 76   rev $myrev($rev
3460: 6e 72 29 0a 09 09 66 6f 72 65 61 63 68 20 74 61  nr)...foreach ta
3470: 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 20  g $taglist {... 
3480: 20 20 20 24 72 65 76 20 61 64 64 74 61 67 20 20     $rev addtag  
3490: 20 20 24 74 61 67 0a 09 09 20 20 20 20 24 74 61    $tag...    $ta
34a0: 67 20 73 65 74 74 61 67 72 65 76 20 24 72 65 76  g settagrev $rev
34b0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  ...}..    }..}..
34c0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
34d0: 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69    method Determi
34e0: 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 73 69 6f  neTheRootRevisio
34f0: 6e 20 7b 7d 20 7b 0a 09 23 20 54 68 65 20 72 6f  n {} {..# The ro
3500: 6f 74 20 69 73 20 74 68 65 20 6f 6e 65 20 72 65  ot is the one re
3510: 76 69 73 69 6f 6e 20 77 68 69 63 68 20 68 61 73  vision which has
3520: 20 6e 6f 20 70 61 72 65 6e 74 2e 20 42 79 0a 09   no parent. By..
3530: 23 20 63 68 65 63 6b 69 6e 67 20 61 6c 6c 20 72  # checking all r
3540: 65 76 69 73 69 6f 6e 73 20 77 65 20 65 6e 73 75  evisions we ensu
3550: 72 65 20 74 68 61 74 20 77 65 20 63 61 6e 20 64  re that we can d
3560: 65 74 65 63 74 20 61 6e 64 0a 09 23 20 72 65 70  etect and..# rep
3570: 6f 72 74 20 74 68 65 20 63 61 73 65 20 6f 66 20  ort the case of 
3580: 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 2e 20  multiple roots. 
3590: 57 69 74 68 6f 75 74 20 74 68 61 74 20 77 65 20  Without that we 
35a0: 63 6f 75 6c 64 0a 09 23 20 73 69 6d 70 6c 79 20  could..# simply 
35b0: 74 61 6b 65 20 6f 6e 65 20 72 65 76 69 73 69 6f  take one revisio
35c0: 6e 20 61 6e 64 20 66 6f 6c 6c 6f 77 20 74 68 65  n and follow the
35d0: 20 70 61 72 65 6e 74 20 6c 69 6e 6b 73 20 74 6f   parent links to
35e0: 0a 09 23 20 74 68 65 69 72 20 72 6f 6f 74 20 28  ..# their root (
35f0: 73 69 63 21 29 2e 0a 0a 09 66 6f 72 65 61 63 68  sic!)....foreach
3600: 20 7b 72 65 76 6e 72 20 72 65 76 7d 20 5b 61 72   {revnr rev} [ar
3610: 72 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20 7b  ray get myrev] {
3620: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 65 76 20  ..    if {[$rev 
3630: 68 61 73 70 61 72 65 6e 74 5d 7d 20 63 6f 6e 74  hasparent]} cont
3640: 69 6e 75 65 0a 09 20 20 20 20 69 66 20 7b 24 6d  inue..    if {$m
3650: 79 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 20 74  yroot ne ""} { t
3660: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20  rouble internal 
3670: 22 4d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 20 72  "Multiple root r
3680: 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 22 20  evisions found" 
3690: 7d 0a 09 20 20 20 20 73 65 74 20 6d 79 72 6f 6f  }..    set myroo
36a0: 74 20 24 72 65 76 0a 09 7d 0a 0a 09 23 20 49 6e  t $rev..}...# In
36b0: 20 74 68 65 20 66 75 74 75 72 65 20 77 65 20 61   the future we a
36c0: 6c 73 6f 20 6e 65 65 64 20 61 20 6c 69 73 74 2c  lso need a list,
36d0: 20 61 73 20 62 72 61 6e 63 68 65 73 20 63 61 6e   as branches can
36e0: 20 62 65 63 6f 6d 65 0a 09 23 20 73 65 76 65 72   become..# sever
36f0: 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20 70 61  ed from their pa
3700: 72 65 6e 74 2c 20 6d 61 6b 69 6e 67 20 74 68 65  rent, making the
3710: 6d 20 74 68 65 69 72 20 6f 77 6e 20 72 6f 6f 74  m their own root
3720: 2e 0a 09 73 65 74 20 6d 79 72 6f 6f 74 73 20 5b  ...set myroots [
3730: 6c 69 73 74 20 24 6d 79 72 6f 6f 74 5d 0a 09 72  list $myroot]..r
3740: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
3750: 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69 6e   method Determin
3760: 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 74 69  eRevisionOperati
3770: 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63  ons {} {..foreac
3780: 68 20 72 65 76 20 24 6d 79 72 65 76 69 73 69 6f  h rev $myrevisio
3790: 6e 73 20 7b 20 24 72 65 76 20 64 65 74 65 72 6d  ns { $rev determ
37a0: 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20 7d 0a 09  ineoperation }..
37b0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
37c0: 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69    method Determi
37d0: 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70  neLinesOfDevelop
37e0: 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 46 6f 72  ment {} {..# For
37f0: 20 72 65 76 69 73 69 6f 6e 73 20 74 68 69 73 20   revisions this 
3800: 68 61 73 20 62 65 65 6e 20 64 6f 6e 65 20 61 6c  has been done al
3810: 72 65 61 64 79 2c 20 69 6e 20 27 65 78 74 65 6e  ready, in 'exten
3820: 64 27 2e 20 4e 6f 77 0a 09 23 20 77 65 20 64 6f  d'. Now..# we do
3830: 20 74 68 69 73 20 66 6f 72 20 74 68 65 20 62 72   this for the br
3840: 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67 73 2e  anches and tags.
3850: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62 72  ...foreach {_ br
3860: 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74  anch} [array get
3870: 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09   mybranches] {..
3880: 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 6c      $branch setl
3890: 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44  od [$self GetLOD
38a0: 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74   [$branch parent
38b0: 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09 66 6f 72  revnr]]..}...for
38c0: 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 73 74 7d  each {_ taglist}
38d0: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 61   [array get myta
38e0: 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61  gs] {..    forea
38f0: 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 20  ch tag $taglist 
3900: 7b 0a 09 09 24 74 61 67 20 73 65 74 6c 6f 64 20  {...$tag setlod 
3910: 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 5b 24  [$self GetLOD [$
3920: 74 61 67 20 74 61 67 72 65 76 6e 72 5d 5d 0a 09  tag tagrevnr]]..
3930: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e      }..}..return
3940: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
3950: 6f 64 20 47 65 74 4c 4f 44 20 7b 72 65 76 6e 72  od GetLOD {revnr
3960: 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20 69 73  } {..if {[rev is
3970: 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e  trunkrevnr $revn
3980: 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 75 72  r]} {..    retur
3990: 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 7d 20 65 6c  n $mytrunk..} el
39a0: 73 65 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e  se {..    return
39b0: 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e   [$self Rev2Bran
39c0: 63 68 20 24 72 65 76 6e 72 5d 0a 09 7d 0a 20 20  ch $revnr]..}.  
39d0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
39e0: 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65  HandleNonTrunkDe
39f0: 66 61 75 6c 74 42 72 61 6e 63 68 20 7b 7d 20 7b  faultBranch {} {
3a00: 0a 09 73 65 74 20 72 65 76 6c 69 73 74 20 5b 24  ..set revlist [$
3a10: 73 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b 44 65 66  self NonTrunkDef
3a20: 61 75 6c 74 52 65 76 69 73 69 6f 6e 73 5d 0a 09  aultRevisions]..
3a30: 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 72  if {![llength $r
3a40: 65 76 6c 69 73 74 5d 7d 20 72 65 74 75 72 6e 0a  evlist]} return.
3a50: 0a 09 24 73 65 6c 66 20 41 64 6a 75 73 74 4e 6f  ..$self AdjustNo
3a60: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61  nTrunkDefaultBra
3a70: 6e 63 68 20 24 72 65 76 6c 69 73 74 0a 09 24 73  nch $revlist..$s
3a80: 65 6c 66 20 43 68 65 63 6b 4c 4f 44 73 0a 09 72  elf CheckLODs..r
3a90: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
3aa0: 20 6d 65 74 68 6f 64 20 4e 6f 6e 54 72 75 6e 6b   method NonTrunk
3ab0: 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73  DefaultRevisions
3ac0: 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76   {} {..# From cv
3ad0: 73 32 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  s2svn the follow
3ae0: 69 6e 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  ing explanation 
3af0: 28 77 69 74 68 20 6d 6f 64 69 66 69 63 61 74 69  (with modificati
3b00: 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75 72 20 61  ons..# for our a
3b10: 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20 44  lgorithm):...# D
3b20: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
3b30: 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 6e   there are any n
3b40: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
3b50: 20 62 72 61 6e 63 68 0a 09 23 20 72 65 76 69 73   branch..# revis
3b60: 69 6f 6e 73 2e 0a 0a 09 23 20 49 66 20 61 20 6e  ions....# If a n
3b70: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
3b80: 20 62 72 61 6e 63 68 20 69 73 20 64 65 74 65 72   branch is deter
3b90: 6d 69 6e 65 64 20 74 6f 20 68 61 76 65 20 65 78  mined to have ex
3ba0: 69 73 74 65 64 2c 0a 09 23 20 72 65 74 75 72 6e  isted,..# return
3bb0: 20 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63   a list of objec
3bc0: 74 73 20 66 6f 72 20 61 6c 6c 20 72 65 76 69 73  ts for all revis
3bd0: 69 6f 6e 73 20 74 68 61 74 20 77 65 72 65 20 6f  ions that were o
3be0: 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b  nce..# non-trunk
3bf0: 20 64 65 66 61 75 6c 74 20 72 65 76 69 73 69 6f   default revisio
3c00: 6e 73 2c 20 69 6e 20 64 65 70 65 6e 64 65 6e 63  ns, in dependenc
3c10: 79 20 6f 72 64 65 72 20 28 69 2e 65 2e 20 72 6f  y order (i.e. ro
3c20: 6f 74 0a 09 23 20 66 69 72 73 74 29 2e 0a 0a 09  ot..# first)....
3c30: 23 20 54 68 65 72 65 20 61 72 65 20 74 77 6f 20  # There are two 
3c40: 63 61 73 65 73 20 74 6f 20 68 61 6e 64 6c 65 3a  cases to handle:
3c50: 0a 0a 09 23 20 4f 6e 65 20 63 61 73 65 20 69 73  ...# One case is
3c60: 20 73 69 6d 70 6c 65 2e 20 20 54 68 65 20 52 43   simple.  The RC
3c70: 53 20 66 69 6c 65 20 6c 69 73 74 73 20 61 20 64  S file lists a d
3c80: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23  efault branch..#
3c90: 20 65 78 70 6c 69 63 69 74 6c 79 20 69 6e 20 69   explicitly in i
3ca0: 74 73 20 68 65 61 64 65 72 2c 20 73 75 63 68 20  ts header, such 
3cb0: 61 73 20 27 31 2e 31 2e 31 27 2e 20 20 49 6e 20  as '1.1.1'.  In 
3cc0: 74 68 69 73 20 63 61 73 65 2c 20 77 65 0a 09 23  this case, we..#
3cd0: 20 6b 6e 6f 77 20 74 68 61 74 20 65 76 65 72 79   know that every
3ce0: 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65   revision on the
3cf0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 69   vendor branch i
3d00: 73 20 74 6f 20 62 65 0a 09 23 20 74 72 65 61 74  s to be..# treat
3d10: 65 64 20 61 73 20 68 65 61 64 20 6f 66 20 74 72  ed as head of tr
3d20: 75 6e 6b 20 61 74 20 74 68 61 74 20 70 6f 69 6e  unk at that poin
3d30: 74 20 69 6e 20 74 69 6d 65 2e 0a 0a 09 23 20 42  t in time....# B
3d40: 75 74 20 74 68 65 72 65 27 73 20 61 6c 73 6f 20  ut there's also 
3d50: 61 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73  a degenerate cas
3d60: 65 2e 20 20 54 68 65 20 52 43 53 20 66 69 6c 65  e.  The RCS file
3d70: 20 64 6f 65 73 20 6e 6f 74 0a 09 23 20 63 75 72   does not..# cur
3d80: 72 65 6e 74 6c 79 20 68 61 76 65 20 61 20 64 65  rently have a de
3d90: 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 79 65  fault branch, ye
3da0: 74 20 77 65 20 63 61 6e 20 64 65 64 75 63 65 20  t we can deduce 
3db0: 74 68 61 74 20 66 6f 72 0a 09 23 20 73 6f 6d 65  that for..# some
3dc0: 20 70 65 72 69 6f 64 20 69 6e 20 74 68 65 20 70   period in the p
3dd0: 61 73 74 20 69 74 20 70 72 6f 62 61 62 6c 79 20  ast it probably 
3de0: 2a 64 69 64 2a 20 68 61 76 65 20 6f 6e 65 2e 20  *did* have one. 
3df0: 20 46 6f 72 0a 09 23 20 65 78 61 6d 70 6c 65 2c   For..# example,
3e00: 20 74 68 65 20 66 69 6c 65 20 68 61 73 20 76 65   the file has ve
3e10: 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 31  ndor revisions 1
3e20: 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e 31 2e 31 2e  .1.1.1 -> 1.1.1.
3e30: 39 36 2c 0a 09 23 20 61 6c 6c 20 6f 66 20 77 68  96,..# all of wh
3e40: 69 63 68 20 61 72 65 20 64 61 74 65 64 20 62 65  ich are dated be
3e50: 66 6f 72 65 20 31 2e 32 2c 20 61 6e 64 20 74 68  fore 1.2, and th
3e60: 65 6e 20 69 74 20 68 61 73 20 31 2e 31 2e 31 2e  en it has 1.1.1.
3e70: 39 37 0a 09 23 20 2d 3e 20 31 2e 31 2e 31 2e 31  97..# -> 1.1.1.1
3e80: 30 30 20 64 61 74 65 64 20 61 66 74 65 72 20 31  00 dated after 1
3e90: 2e 32 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  .2.  In this cas
3ea0: 65 2c 20 77 65 20 73 68 6f 75 6c 64 0a 09 23 20  e, we should..# 
3eb0: 72 65 63 6f 72 64 20 31 2e 31 2e 31 2e 39 36 20  record 1.1.1.96 
3ec0: 61 73 20 74 68 65 20 6c 61 73 74 20 76 65 6e 64  as the last vend
3ed0: 6f 72 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 68  or revision to h
3ee0: 61 76 65 20 62 65 65 6e 20 74 68 65 0a 09 23 20  ave been the..# 
3ef0: 68 65 61 64 20 6f 66 20 74 68 65 20 64 65 66 61  head of the defa
3f00: 75 6c 74 20 62 72 61 6e 63 68 2e 0a 0a 09 69 66  ult branch....if
3f10: 20 7b 24 6d 79 70 72 69 6e 63 69 70 61 6c 20 6e   {$myprincipal n
3f20: 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 54  e ""} {..    # T
3f30: 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 61 20  here is still a 
3f40: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 3b 20  default branch; 
3f50: 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20  that means that 
3f60: 61 6c 6c 0a 09 20 20 20 20 23 20 72 65 76 69 73  all..    # revis
3f70: 69 6f 6e 73 20 6f 6e 20 74 68 61 74 20 62 72 61  ions on that bra
3f80: 6e 63 68 20 67 65 74 20 6d 61 72 6b 65 64 2e 0a  nch get marked..
3f90: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
3fa0: 35 20 66 69 6c 65 20 22 46 6f 75 6e 64 20 65 78  5 file "Found ex
3fb0: 70 6c 69 63 69 74 6c 79 20 6d 61 72 6b 65 64 20  plicitly marked 
3fc0: 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 20  NTDB"...    set 
3fd0: 72 6e 65 78 74 20 5b 24 6d 79 72 6f 6f 74 20 63  rnext [$myroot c
3fe0: 68 69 6c 64 5d 0a 09 20 20 20 20 69 66 20 7b 24  hild]..    if {$
3ff0: 72 6e 65 78 74 20 6e 65 20 22 22 7d 20 7b 0a 09  rnext ne ""} {..
4000: 09 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22  .trouble fatal "
4010: 46 69 6c 65 20 77 69 74 68 20 64 65 66 61 75 6c  File with defaul
4020: 74 20 62 72 61 6e 63 68 20 24 6d 79 70 72 69 6e  t branch $myprin
4030: 63 69 70 61 6c 20 61 6c 73 6f 20 68 61 73 20 72  cipal also has r
4040: 65 76 69 73 69 6f 6e 20 5b 24 72 6e 65 78 74 20  evision [$rnext 
4050: 72 65 76 6e 72 5d 22 0a 09 09 72 65 74 75 72 6e  revnr]"...return
4060: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73 65  ..    }...    se
4070: 74 20 72 65 76 20 5b 24 6d 79 62 72 61 6e 63 68  t rev [$mybranch
4080: 65 73 28 24 6d 79 70 72 69 6e 63 69 70 61 6c 29  es($myprincipal)
4090: 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 65 74   child]..    set
40a0: 20 72 65 73 20 7b 7d 0a 0a 09 20 20 20 20 77 68   res {}...    wh
40b0: 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d  ile {$rev ne ""}
40c0: 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72 65 73   {...lappend res
40d0: 20 24 72 65 76 0a 09 09 73 65 74 20 72 65 76 20   $rev...set rev 
40e0: 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 20 20  [$rev child]..  
40f0: 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e    }...    return
4100: 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 69 66   $res...} elseif
4110: 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 7d 20 7b   {$myimported} {
4120: 0a 09 20 20 20 20 23 20 4e 6f 20 64 65 66 61 75  ..    # No defau
4130: 6c 74 20 62 72 61 6e 63 68 2c 20 62 75 74 20 74  lt branch, but t
4140: 68 65 20 66 69 6c 65 20 61 70 70 65 61 72 73 20  he file appears 
4150: 74 6f 20 68 61 76 65 20 62 65 65 6e 0a 09 20 20  to have been..  
4160: 20 20 23 20 69 6d 70 6f 72 74 65 64 2e 20 20 53    # imported.  S
4170: 6f 20 6f 75 72 20 65 64 75 63 61 74 65 64 20 67  o our educated g
4180: 75 65 73 73 20 69 73 20 74 68 61 74 20 61 6c 6c  uess is that all
4190: 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 20   revisions..    
41a0: 23 20 6f 6e 20 74 68 65 20 27 31 2e 31 2e 31 27  # on the '1.1.1'
41b0: 20 62 72 61 6e 63 68 20 77 69 74 68 20 74 69 6d   branch with tim
41c0: 65 73 74 61 6d 70 73 20 70 72 69 6f 72 20 74 6f  estamps prior to
41d0: 20 74 68 65 0a 09 20 20 20 20 23 20 74 69 6d 65   the..    # time
41e0: 73 74 61 6d 70 20 6f 66 20 27 31 2e 32 27 20 77  stamp of '1.2' w
41f0: 65 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65  ere non-trunk de
4200: 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 20 20  fault branch..  
4210: 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a 09    # revisions...
4220: 20 20 20 20 0a 09 20 20 20 20 23 20 54 68 69 73      ..    # This
4230: 20 72 65 61 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f   really only pro
4240: 63 65 73 73 65 73 20 73 74 61 6e 64 61 72 64 20  cesses standard 
4250: 27 31 2e 31 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a  '1.1.1.*'-style.
4260: 09 20 20 20 20 23 20 76 65 6e 64 6f 72 20 72 65  .    # vendor re
4270: 76 69 73 69 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f  visions.  One co
4280: 75 6c 64 20 63 6f 6e 63 65 69 76 61 62 6c 79 20  uld conceivably 
4290: 68 61 76 65 20 61 20 66 69 6c 65 0a 09 20 20 20  have a file..   
42a0: 20 23 20 77 68 6f 73 65 20 64 65 66 61 75 6c 74   # whose default
42b0: 20 62 72 61 6e 63 68 20 69 73 20 31 2e 31 2e 33   branch is 1.1.3
42c0: 20 6f 72 20 77 68 61 74 65 76 65 72 2c 20 6f 72   or whatever, or
42d0: 20 77 61 73 20 74 68 61 74 0a 09 20 20 20 20 23   was that..    #
42e0: 20 61 74 20 73 6f 6d 65 20 70 6f 69 6e 74 20 69   at some point i
42f0: 6e 20 74 69 6d 65 2c 20 77 69 74 68 20 76 65 6e  n time, with ven
4300: 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 31 2e  dor revisions 1.
4310: 31 2e 33 2e 31 2c 0a 09 20 20 20 20 23 20 31 2e  1.3.1,..    # 1.
4320: 31 2e 33 2e 32 2c 20 65 74 63 2e 20 20 42 75 74  1.3.2, etc.  But
4330: 20 77 69 74 68 20 74 68 65 20 64 65 66 61 75 6c   with the defaul
4340: 74 20 62 72 61 6e 63 68 20 67 6f 6e 65 20 6e 6f  t branch gone no
4350: 77 2c 0a 09 20 20 20 20 23 20 77 65 27 64 20 68  w,..    # we'd h
4360: 61 76 65 20 6e 6f 20 62 61 73 69 73 20 66 6f 72  ave no basis for
4370: 20 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74   assuming that t
4380: 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 0a  he non-standard.
4390: 09 20 20 20 20 23 20 76 65 6e 64 6f 72 20 62 72  .    # vendor br
43a0: 61 6e 63 68 20 68 61 64 20 65 76 65 72 20 62 65  anch had ever be
43b0: 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  en the default b
43c0: 72 61 6e 63 68 20 61 6e 79 77 61 79 2e 0a 09 20  ranch anyway... 
43d0: 20 20 20 0a 09 20 20 20 20 23 20 4e 6f 74 65 20     ..    # Note 
43e0: 74 68 61 74 20 77 65 20 72 65 6c 79 20 6f 6e 20  that we rely on 
43f0: 63 6f 6d 70 61 72 69 73 6f 6e 73 20 62 65 74 77  comparisons betw
4400: 65 65 6e 20 74 68 65 20 74 69 6d 65 73 74 61 6d  een the timestam
4410: 70 73 0a 09 20 20 20 20 23 20 6f 66 20 74 68 65  ps..    # of the
4420: 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68   revisions on th
4430: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20  e vendor branch 
4440: 61 6e 64 20 74 68 61 74 20 6f 66 0a 09 20 20 20  and that of..   
4450: 20 23 20 72 65 76 69 73 69 6f 6e 20 31 2e 32 2c   # revision 1.2,
4460: 20 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65   even though the
4470: 20 74 69 6d 65 73 74 61 6d 70 73 20 6d 69 67 68   timestamps migh
4480: 74 20 62 65 0a 09 20 20 20 20 23 20 69 6e 63 6f  t be..    # inco
4490: 72 72 65 63 74 20 64 75 65 20 74 6f 20 63 6c 6f  rrect due to clo
44a0: 63 6b 20 73 6b 65 77 2e 20 20 57 65 20 63 6f 75  ck skew.  We cou
44b0: 6c 64 20 64 6f 20 61 20 73 6c 69 67 68 74 6c 79  ld do a slightly
44c0: 0a 09 20 20 20 20 23 20 62 65 74 74 65 72 20 6a  ..    # better j
44d0: 6f 62 20 69 66 20 77 65 20 75 73 65 64 20 74 68  ob if we used th
44e0: 65 20 63 68 61 6e 67 65 73 65 74 20 74 69 6d 65  e changeset time
44f0: 73 74 61 6d 70 73 2c 20 61 73 20 69 74 20 69 73  stamps, as it is
4500: 0a 09 20 20 20 20 23 20 70 6f 73 73 69 62 6c 65  ..    # possible
4510: 20 74 68 61 74 20 74 68 65 20 64 65 70 65 6e 64   that the depend
4520: 65 6e 63 69 65 73 20 74 68 61 74 20 77 65 6e 74  encies that went
4530: 20 69 6e 74 6f 0a 09 20 20 20 20 23 20 64 65 74   into..    # det
4540: 65 72 6d 69 6e 69 6e 67 20 74 68 6f 73 65 20 74  ermining those t
4550: 69 6d 65 73 74 61 6d 70 73 20 61 72 65 20 6d 6f  imestamps are mo
4560: 72 65 20 61 63 63 75 72 61 74 65 2e 20 20 42 75  re accurate.  Bu
4570: 74 0a 09 20 20 20 20 23 20 74 68 61 74 20 77 6f  t..    # that wo
4580: 75 6c 64 20 72 65 71 75 69 72 65 20 61 6e 20 65  uld require an e
4590: 78 74 72 61 20 70 61 73 73 20 6f 72 20 74 77 6f  xtra pass or two
45a0: 2e 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e  ....    if {![in
45b0: 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72 61 6e  fo exists mybran
45c0: 63 68 65 73 28 31 2e 31 2e 31 29 5d 7d 20 7b 20  ches(1.1.1)]} { 
45d0: 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 0a 09 20 20  return {} }...  
45e0: 20 20 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69    log write 5 fi
45f0: 6c 65 20 22 44 65 64 75 63 65 64 20 65 78 69 73  le "Deduced exis
4600: 74 65 6e 63 65 20 6f 66 20 4e 54 44 42 22 0a 0a  tence of NTDB"..
4610: 09 20 20 20 20 73 65 74 20 72 65 76 20 20 5b 24  .    set rev  [$
4620: 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 2e 31  mybranches(1.1.1
4630: 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 65  ) child]..    se
4640: 74 20 72 65 73 20 20 7b 7d 0a 09 20 20 20 20 73  t res  {}..    s
4650: 65 74 20 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74  et stop [$myroot
4660: 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 69 66   child]...    if
4670: 20 7b 24 73 74 6f 70 20 65 71 20 22 22 7d 20 7b   {$stop eq ""} {
4680: 0a 09 09 23 20 47 65 74 20 65 76 65 72 79 74 68  ...# Get everyth
4690: 69 6e 67 20 6f 6e 20 74 68 65 20 62 72 61 6e 63  ing on the branc
46a0: 68 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 76 20  h...while {$rev 
46b0: 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 6c  ne ""} {...    l
46c0: 61 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a  append res $rev.
46d0: 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24  ..    set rev [$
46e0: 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09  rev child]...}..
46f0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23      } else {...#
4700: 20 43 6f 6c 6c 65 63 74 20 65 76 65 72 79 74 68   Collect everyth
4710: 69 6e 67 20 6f 6e 20 74 68 65 20 62 72 61 6e 63  ing on the branc
4720: 68 20 77 68 69 63 68 20 73 65 65 6d 73 20 74 6f  h which seems to
4730: 20 68 61 76 65 0a 09 09 23 20 62 65 65 6e 20 63   have...# been c
4740: 6f 6d 6d 69 74 74 65 64 20 62 65 66 6f 72 65 20  ommitted before 
4750: 74 68 65 20 66 69 72 73 74 20 70 72 69 6d 61 72  the first primar
4760: 79 20 63 68 69 6c 64 20 6f 66 20 74 68 65 0a 09  y child of the..
4770: 09 23 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e  .# root revision
4780: 2e 0a 09 09 73 65 74 20 73 74 6f 70 64 61 74 65  ....set stopdate
4790: 20 5b 24 73 74 6f 70 20 64 61 74 65 5d 0a 09 09   [$stop date]...
47a0: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22  while {$rev ne "
47b0: 22 7d 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 5b  "} {...    if {[
47c0: 24 72 65 76 20 64 61 74 65 5d 20 3e 3d 20 24 73  $rev date] >= $s
47d0: 74 6f 70 64 61 74 65 7d 20 62 72 65 61 6b 0a 09  topdate} break..
47e0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
47f0: 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 74 20   $rev...    set 
4800: 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d  rev [$rev child]
4810: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20  ...}..    }...  
4820: 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09    return $res...
4830: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65  } else {..    re
4840: 74 75 72 6e 20 7b 7d 0a 09 7d 0a 20 20 20 20 7d  turn {}..}.    }
4850: 0a 0a 20 20 20 20 23 20 47 65 6e 65 72 61 6c 20  ..    # General 
4860: 6e 6f 74 65 3a 20 49 6e 20 74 68 65 20 66 6f 6c  note: In the fol
4870: 6c 6f 77 69 6e 67 20 6d 65 74 68 6f 64 73 20 77  lowing methods w
4880: 65 20 6f 6e 6c 79 20 6d 6f 64 69 66 79 20 74 68  e only modify th
4890: 65 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 62 65  e links.    # be
48a0: 74 77 65 65 6e 20 72 65 76 69 73 69 6f 6e 73 20  tween revisions 
48b0: 61 6e 64 20 73 79 6d 62 6f 6c 73 20 74 6f 20 72  and symbols to r
48c0: 65 73 74 72 75 63 74 75 72 65 20 74 68 65 20 72  estructure the r
48d0: 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 74 72  evision.    # tr
48e0: 65 65 2e 20 57 65 20 64 6f 20 5f 5f 6e 6f 74 5f  ee. We do __not_
48f0: 5f 20 64 65 73 74 72 6f 79 20 74 68 65 20 6f 62  _ destroy the ob
4900: 6a 65 63 74 73 2e 20 47 69 76 65 6e 20 74 68 65  jects. Given the
4910: 20 63 6f 6d 70 6c 65 78 20 6c 69 6e 6b 73 0a 20   complex links. 
4920: 20 20 20 23 20 47 43 20 69 73 20 64 69 66 66 69     # GC is diffi
4930: 63 75 6c 74 20 61 74 20 74 68 69 73 20 6c 65 76  cult at this lev
4940: 65 6c 2e 20 49 74 20 69 73 20 6d 75 63 68 20 65  el. It is much e
4950: 61 73 69 65 72 20 74 6f 20 64 72 6f 70 0a 20 20  asier to drop.  
4960: 20 20 23 20 65 76 65 72 79 74 68 69 6e 67 20 77    # everything w
4970: 68 65 6e 20 77 65 20 77 65 20 61 72 65 20 64 6f  hen we we are do
4980: 6e 65 2e 20 54 68 69 73 20 68 61 70 70 65 6e 73  ne. This happens
4990: 20 69 6e 20 27 64 72 6f 70 27 2c 20 75 73 69 6e   in 'drop', usin
49a0: 67 0a 20 20 20 20 23 20 74 68 65 20 73 74 61 74  g.    # the stat
49b0: 65 20 76 61 72 69 61 62 6c 65 20 27 6d 79 72 65  e variable 'myre
49c0: 76 27 2c 20 27 6d 79 62 72 61 6e 63 68 65 73 27  v', 'mybranches'
49d0: 2c 20 61 6e 64 20 27 6d 79 74 61 67 73 27 2e 20  , and 'mytags'. 
49e0: 57 68 61 74 20 77 65 0a 20 20 20 20 23 20 68 61  What we.    # ha
49f0: 76 65 20 74 6f 20 70 65 72 73 69 73 74 2c 20 70  ve to persist, p
4a00: 65 72 66 6f 72 6d 65 64 20 62 79 20 27 70 65 72  erformed by 'per
4a10: 73 69 73 74 27 2c 20 77 65 20 6b 6e 6f 77 20 77  sist', we know w
4a20: 69 6c 6c 20 62 65 0a 20 20 20 20 23 20 72 65 61  ill be.    # rea
4a30: 63 68 61 62 6c 65 20 74 68 72 6f 75 67 68 20 74  chable through t
4a40: 68 65 20 72 65 76 69 73 69 6f 6e 73 20 6c 69 73  he revisions lis
4a50: 74 65 64 20 69 6e 20 27 6d 79 72 6f 6f 74 73 27  ted in 'myroots'
4a60: 20 61 6e 64 20 74 68 65 69 72 0a 20 20 20 20 23   and their.    #
4a70: 20 63 68 69 6c 64 72 65 6e 20 61 6e 64 20 73 79   children and sy
4a80: 6d 62 6f 6c 73 2e 0a 0a 20 20 20 20 6d 65 74 68  mbols...    meth
4a90: 6f 64 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e  od AdjustNonTrun
4aa0: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b  kDefaultBranch {
4ab0: 72 65 76 6c 69 73 74 7d 20 7b 0a 09 73 65 74 20  revlist} {..set 
4ac0: 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74 20 63 68  stop [$myroot ch
4ad0: 69 6c 64 5d 20 3b 23 20 72 65 76 20 27 31 2e 32  ild] ;# rev '1.2
4ae0: 27 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 35 20  '...log write 5 
4af0: 66 69 6c 65 20 22 41 64 6a 75 73 74 69 6e 67 20  file "Adjusting 
4b00: 4e 54 44 42 20 63 6f 6e 74 61 69 6e 69 6e 67 20  NTDB containing 
4b10: 5b 6e 73 70 20 5b 6c 6c 65 6e 67 74 68 20 24 72  [nsp [llength $r
4b20: 65 76 6c 69 73 74 5d 20 72 65 76 69 73 69 6f 6e  evlist] revision
4b30: 5d 22 0a 0a 09 23 20 46 72 6f 6d 20 63 76 73 32  ]"...# From cvs2
4b40: 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  svn the followin
4b50: 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 77  g explanation (w
4b60: 69 74 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e  ith modification
4b70: 73 0a 09 23 20 66 6f 72 20 6f 75 72 20 61 6c 67  s..# for our alg
4b80: 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20 41 64 6a  orithm):...# Adj
4b90: 75 73 74 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e  ust the non-trun
4ba0: 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  k default branch
4bb0: 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64   revisions found
4bc0: 20 69 6e 20 74 68 65 0a 09 23 20 27 72 65 76 6c   in the..# 'revl
4bd0: 69 73 74 27 2e 0a 0a 09 23 20 27 6d 79 69 6d 70  ist'....# 'myimp
4be0: 6f 72 74 65 64 27 20 69 73 20 61 20 62 6f 6f 6c  orted' is a bool
4bf0: 65 61 6e 20 66 6c 61 67 20 69 6e 64 69 63 61 74  ean flag indicat
4c00: 69 6e 67 20 77 68 65 74 68 65 72 20 74 68 69 73  ing whether this
4c10: 20 66 69 6c 65 0a 09 23 20 61 70 70 65 61 72 73   file..# appears
4c20: 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 69 6d   to have been im
4c30: 70 6f 72 74 65 64 2c 20 77 68 69 63 68 20 61 6c  ported, which al
4c40: 73 6f 20 6d 65 61 6e 73 20 74 68 61 74 0a 09 23  so means that..#
4c50: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 20 68 61   revision 1.1 ha
4c60: 73 20 61 20 67 65 6e 65 72 61 74 65 64 20 6c 6f  s a generated lo
4c70: 67 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 6e  g message that n
4c80: 65 65 64 20 6e 6f 74 20 62 65 0a 09 23 20 70 72  eed not be..# pr
4c90: 65 73 65 72 76 65 64 2e 20 20 27 72 65 76 6c 69  eserved.  'revli
4ca0: 73 74 27 20 69 73 20 61 20 6c 69 73 74 20 6f 66  st' is a list of
4cb0: 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
4cc0: 65 73 20 66 6f 72 20 74 68 65 0a 09 23 20 72 65  es for the..# re
4cd0: 76 69 73 69 6f 6e 73 20 74 68 61 74 20 68 61 76  visions that hav
4ce0: 65 20 62 65 65 6e 20 64 65 74 65 72 6d 69 6e 65  e been determine
4cf0: 64 20 74 6f 20 62 65 20 6e 6f 6e 2d 74 72 75 6e  d to be non-trun
4d00: 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61  k default..# bra
4d10: 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a  nch revisions...
4d20: 09 23 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .# Note that the
4d30: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20   first revision 
4d40: 6f 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  on the default b
4d50: 72 61 6e 63 68 20 69 73 0a 09 23 20 68 61 6e 64  ranch is..# hand
4d60: 6c 65 64 20 73 74 72 61 6e 67 65 6c 79 20 62 79  led strangely by
4d70: 20 43 56 53 2e 20 20 49 66 20 61 20 66 69 6c 65   CVS.  If a file
4d80: 20 69 73 20 69 6d 70 6f 72 74 65 64 20 28 61 73   is imported (as
4d90: 20 6f 70 70 6f 73 65 64 0a 09 23 20 74 6f 20 62   opposed..# to b
4da0: 65 69 6e 67 20 61 64 64 65 64 29 2c 20 43 56 53  eing added), CVS
4db0: 20 63 72 65 61 74 65 73 20 61 20 31 2e 31 20 72   creates a 1.1 r
4dc0: 65 76 69 73 69 6f 6e 2c 20 74 68 65 6e 20 63 72  evision, then cr
4dd0: 65 61 74 65 73 20 61 0a 09 23 20 76 65 6e 64 6f  eates a..# vendo
4de0: 72 20 62 72 61 6e 63 68 20 31 2e 31 2e 31 20 62  r branch 1.1.1 b
4df0: 61 73 65 64 20 6f 6e 20 31 2e 31 2c 20 74 68 65  ased on 1.1, the
4e00: 6e 20 63 72 65 61 74 65 73 20 61 20 31 2e 31 2e  n creates a 1.1.
4e10: 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20  1.1..# revision 
4e20: 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 63 61  that is identica
4e30: 6c 20 74 6f 20 74 68 65 20 31 2e 31 20 72 65 76  l to the 1.1 rev
4e40: 69 73 69 6f 6e 20 28 69 2e 65 2e 2c 20 69 74 73  ision (i.e., its
4e50: 0a 09 23 20 64 65 6c 74 61 74 65 78 74 20 69 73  ..# deltatext is
4e60: 20 65 6d 70 74 79 29 2e 20 20 54 68 65 20 6c 6f   empty).  The lo
4e70: 67 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 74  g message that t
4e80: 68 65 20 75 73 65 72 20 74 79 70 65 64 0a 09 23  he user typed..#
4e90: 20 77 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67 20   when importing 
4ea0: 69 73 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  is stored with t
4eb0: 68 65 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73  he 1.1.1.1 revis
4ec0: 69 6f 6e 2e 20 20 54 68 65 20 31 2e 31 0a 09 23  ion.  The 1.1..#
4ed0: 20 72 65 76 69 73 69 6f 6e 20 61 6c 77 61 79 73   revision always
4ee0: 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 74 61 6e   contains a stan
4ef0: 64 61 72 64 2c 20 67 65 6e 65 72 61 74 65 64 20  dard, generated 
4f00: 6c 6f 67 20 6d 65 73 73 61 67 65 2c 0a 09 23 20  log message,..# 
4f10: 27 49 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f  'Initial revisio
4f20: 6e 5c 6e 27 2e 0a 0a 09 23 20 57 68 65 6e 20 77  n\n'....# When w
4f30: 65 20 64 65 74 65 63 74 20 61 20 73 74 72 61 69  e detect a strai
4f40: 67 68 74 66 6f 72 77 61 72 64 20 69 6d 70 6f 72  ghtforward impor
4f50: 74 20 6c 69 6b 65 20 74 68 69 73 2c 20 77 65 20  t like this, we 
4f60: 77 61 6e 74 0a 09 23 20 74 6f 20 68 61 6e 64 6c  want..# to handl
4f70: 65 20 69 74 20 62 79 20 64 65 6c 65 74 69 6e 67  e it by deleting
4f80: 20 74 68 65 20 31 2e 31 20 72 65 76 69 73 69 6f   the 1.1 revisio
4f90: 6e 20 28 77 68 69 63 68 20 64 6f 65 73 6e 27 74  n (which doesn't
4fa0: 0a 09 23 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20  ..# contain any 
4fb0: 75 73 65 66 75 6c 20 69 6e 66 6f 72 6d 61 74 69  useful informati
4fc0: 6f 6e 29 20 61 6e 64 20 6d 61 6b 69 6e 67 20 31  on) and making 1
4fd0: 2e 31 2e 31 2e 31 20 69 6e 74 6f 20 61 6e 0a 09  .1.1.1 into an..
4fe0: 23 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 72 6f  # independent ro
4ff0: 6f 74 20 69 6e 20 74 68 65 20 66 69 6c 65 27 73  ot in the file's
5000: 20 64 65 70 65 6e 64 65 6e 63 79 20 74 72 65 65   dependency tree
5010: 2e 20 20 49 6e 20 53 56 4e 2c 0a 09 23 20 31 2e  .  In SVN,..# 1.
5020: 31 2e 31 2e 31 20 77 69 6c 6c 20 62 65 20 61 64  1.1.1 will be ad
5030: 64 65 64 20 64 69 72 65 63 74 6c 79 20 74 6f 20  ded directly to 
5040: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  the vendor branc
5050: 68 20 77 69 74 68 20 69 74 73 0a 09 23 20 69 6e  h with its..# in
5060: 69 74 69 61 6c 20 63 6f 6e 74 65 6e 74 2e 20 20  itial content.  
5070: 54 68 65 6e 20 69 6e 20 61 20 73 70 65 63 69 61  Then in a specia
5080: 6c 20 27 70 6f 73 74 2d 63 6f 6d 6d 69 74 27 2c  l 'post-commit',
5090: 20 74 68 65 0a 09 23 20 31 2e 31 2e 31 2e 31 20   the..# 1.1.1.1 
50a0: 72 65 76 69 73 69 6f 6e 20 69 73 20 63 6f 70 69  revision is copi
50b0: 65 64 20 62 61 63 6b 20 74 6f 20 74 72 75 6e 6b  ed back to trunk
50c0: 2e 0a 0a 09 23 20 49 66 20 74 68 65 20 75 73 65  ....# If the use
50d0: 72 20 69 6d 70 6f 72 74 73 20 61 67 61 69 6e 20  r imports again 
50e0: 74 6f 20 74 68 65 20 73 61 6d 65 20 76 65 6e 64  to the same vend
50f0: 6f 72 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20  or branch, then 
5100: 43 56 53 0a 09 23 20 63 72 65 61 74 65 73 20 72  CVS..# creates r
5110: 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 32  evisions 1.1.1.2
5120: 2c 20 31 2e 31 2e 31 2e 33 2c 20 65 74 63 2e 20  , 1.1.1.3, etc. 
5130: 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72  on the vendor br
5140: 61 6e 63 68 2c 0a 09 23 20 2a 77 69 74 68 6f 75  anch,..# *withou
5150: 74 2a 20 63 6f 75 6e 74 65 72 70 61 72 74 73 20  t* counterparts 
5160: 69 6e 20 74 72 75 6e 6b 20 28 65 76 65 6e 20 74  in trunk (even t
5170: 68 6f 75 67 68 20 74 68 65 73 65 20 72 65 76 69  hough these revi
5180: 73 69 6f 6e 73 0a 09 23 20 65 66 66 65 63 74 69  sions..# effecti
5190: 76 65 6c 79 20 70 6c 61 79 20 74 68 65 20 72 6f  vely play the ro
51a0: 6c 65 20 6f 66 20 74 72 75 6e 6b 20 72 65 76 69  le of trunk revi
51b0: 73 69 6f 6e 73 29 2e 20 20 53 6f 20 61 66 74 65  sions).  So afte
51c0: 72 20 77 65 20 61 64 64 0a 09 23 20 73 75 63 68  r we add..# such
51d0: 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 20 74 68   revisions to th
51e0: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c  e vendor branch,
51f0: 20 77 65 20 61 6c 73 6f 20 63 6f 70 79 20 74 68   we also copy th
5200: 65 6d 20 62 61 63 6b 20 74 6f 0a 09 23 20 74 72  em back to..# tr
5210: 75 6e 6b 20 69 6e 20 70 6f 73 74 2d 63 6f 6d 6d  unk in post-comm
5220: 69 74 73 2e 0a 0a 09 23 20 57 65 20 6d 61 72 6b  its....# We mark
5230: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 66   the revisions f
5240: 6f 75 6e 64 20 69 6e 20 27 72 65 76 6c 69 73 74  ound in 'revlist
5250: 27 20 61 73 20 64 65 66 61 75 6c 74 20 62 72 61  ' as default bra
5260: 6e 63 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73  nch..# revisions
5270: 2e 20 20 41 6c 73 6f 2c 20 69 66 20 74 68 65 20  .  Also, if the 
5280: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 68 61  root revision ha
5290: 73 20 61 20 70 72 69 6d 61 72 79 20 63 68 69 6c  s a primary chil
52a0: 64 0a 09 23 20 77 65 20 73 65 74 20 74 68 61 74  d..# we set that
52b0: 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 64 65 70   revision to dep
52c0: 65 6e 64 20 6f 6e 20 74 68 65 20 6c 61 73 74 20  end on the last 
52d0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
52e0: 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69  t..# branch revi
52f0: 73 69 6f 6e 20 61 6e 64 20 70 6f 73 73 69 62 6c  sion and possibl
5300: 79 20 61 64 6a 75 73 74 20 69 74 73 20 74 79 70  y adjust its typ
5310: 65 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a  e accordingly...
5320: 09 73 65 74 20 66 69 72 73 74 20 5b 6c 69 6e 64  .set first [lind
5330: 65 78 20 24 72 65 76 6c 69 73 74 20 30 5d 0a 0a  ex $revlist 0]..
5340: 09 6c 6f 67 20 77 72 69 74 65 20 36 20 66 69 6c  .log write 6 fil
5350: 65 20 22 3c 5b 24 66 69 72 73 74 20 72 65 76 6e  e "<[$first revn
5360: 72 5d 3e 20 5b 65 78 70 72 20 7b 24 6d 79 69 6d  r]> [expr {$myim
5370: 70 6f 72 74 65 64 20 3f 20 22 69 6d 70 6f 72 74  ported ? "import
5380: 65 64 22 20 3a 20 22 6e 6f 74 20 69 6d 70 6f 72  ed" : "not impor
5390: 74 65 64 22 7d 5d 2c 20 5b 24 66 69 72 73 74 20  ted"}], [$first 
53a0: 6f 70 65 72 61 74 69 6f 6e 5d 2c 20 5b 65 78 70  operation], [exp
53b0: 72 20 7b 5b 24 66 69 72 73 74 20 68 61 73 74 65  r {[$first haste
53c0: 78 74 5d 20 3f 20 22 68 61 73 20 74 65 78 74 22  xt] ? "has text"
53d0: 20 3a 20 22 6e 6f 20 74 65 78 74 22 7d 5d 22 0a   : "no text"}]".
53e0: 0a 09 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65  ..if {$myimporte
53f0: 64 20 26 26 0a 09 20 20 20 20 5b 24 66 69 72 73  d &&..    [$firs
5400: 74 20 72 65 76 6e 72 5d 20 65 71 20 22 31 2e 31  t revnr] eq "1.1
5410: 2e 31 2e 31 22 20 26 26 0a 09 20 20 20 20 5b 24  .1.1" &&..    [$
5420: 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d  first operation]
5430: 20 65 71 20 22 63 68 61 6e 67 65 22 20 26 26 0a   eq "change" &&.
5440: 09 20 20 20 20 21 5b 24 66 69 72 73 74 20 68 61  .    ![$first ha
5450: 73 74 65 78 74 5d 7d 20 7b 0a 0a 09 20 20 20 20  stext]} {...    
5460: 73 65 74 20 72 65 76 31 31 20 5b 24 66 69 72 73  set rev11 [$firs
5470: 74 20 70 61 72 65 6e 74 5d 20 3b 20 23 20 41 73  t parent] ; # As
5480: 73 65 72 74 3a 20 53 68 6f 75 6c 64 20 62 65 20  sert: Should be 
5490: 6d 79 72 6f 6f 74 2e 0a 09 20 20 20 20 6c 6f 67  myroot...    log
54a0: 20 77 72 69 74 65 20 33 20 66 69 6c 65 20 22 52   write 3 file "R
54b0: 65 6d 6f 76 69 6e 67 20 69 72 72 65 6c 65 76 61  emoving irreleva
54c0: 6e 74 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 65  nt revision [$re
54d0: 76 31 31 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20  v11 revnr]"...  
54e0: 20 20 23 20 43 75 74 20 6f 75 74 20 74 68 65 20    # Cut out the 
54f0: 6f 6c 64 20 6d 79 72 6f 6f 74 20 72 65 76 69 73  old myroot revis
5500: 69 6f 6e 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65  ion....    ldele
5510: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31  te myroots $rev1
5520: 31 20 3b 20 23 20 4e 6f 74 20 61 20 72 6f 6f 74  1 ; # Not a root
5530: 20 61 6e 79 20 6c 6f 6e 67 65 72 2e 0a 0a 09 20   any longer.... 
5540: 20 20 20 24 66 69 72 73 74 20 63 75 74 66 72 6f     $first cutfro
5550: 6d 70 61 72 65 6e 74 20 3b 20 23 20 53 65 76 65  mparent ; # Seve
5560: 72 20 72 65 76 69 73 69 6f 6e 20 66 72 6f 6d 20  r revision from 
5570: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e  parent revision.
5580: 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20  ..    if {$stop 
5590: 6e 65 20 22 22 7d 20 7b 0a 09 09 24 73 74 6f 70  ne ""} {...$stop
55a0: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09   cutfromparent..
55b0: 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73  .lappend myroots
55c0: 20 24 73 74 6f 70 20 3b 20 23 20 4e 65 77 20 72   $stop ; # New r
55d0: 6f 6f 74 2c 20 61 66 74 65 72 20 76 65 6e 64 6f  oot, after vendo
55e0: 72 20 62 72 61 6e 63 68 0a 09 20 20 20 20 7d 0a  r branch..    }.
55f0: 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 20  ..    # Cut out 
5600: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  the vendor branc
5610: 68 20 73 79 6d 62 6f 6c 0a 0a 09 20 20 20 20 73  h symbol...    s
5620: 65 74 20 76 65 6e 64 6f 72 20 5b 24 66 69 72 73  et vendor [$firs
5630: 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a  t parentbranch].
5640: 09 20 20 20 20 69 66 20 7b 24 76 65 6e 64 6f 72  .    if {$vendor
5650: 20 65 71 20 22 22 7d 20 7b 20 74 72 6f 75 62 6c   eq ""} { troubl
5660: 65 20 69 6e 74 65 72 6e 61 6c 20 22 46 69 72 73  e internal "Firs
5670: 74 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 20  t NTDB revision 
5680: 68 61 73 20 6e 6f 20 62 72 61 6e 63 68 22 20 7d  has no branch" }
5690: 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65 6e 64  ..    if {[$vend
56a0: 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20 24 72  or parent] eq $r
56b0: 65 76 31 31 7d 20 7b 0a 09 09 24 72 65 76 31 31  ev11} {...$rev11
56c0: 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20   removebranch   
56d0: 20 20 20 20 20 24 76 65 6e 64 6f 72 0a 09 09 24       $vendor...$
56e0: 72 65 76 31 31 20 72 65 6d 6f 76 65 63 68 69 6c  rev11 removechil
56f0: 64 6f 6e 62 72 61 6e 63 68 20 24 66 69 72 73 74  donbranch $first
5700: 0a 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f  ...$first cutfro
5710: 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 0a 09 09  mparentbranch...
5720: 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20  lappend myroots 
5730: 24 66 69 72 73 74 0a 09 20 20 20 20 7d 0a 0a 09  $first..    }...
5740: 20 20 20 20 23 20 43 68 61 6e 67 65 20 74 68 65      # Change the
5750: 20 74 79 70 65 20 6f 66 20 66 69 72 73 74 20 28   type of first (
5760: 74 79 70 69 63 61 6c 6c 79 20 66 72 6f 6d 20 43  typically from C
5770: 68 61 6e 67 65 20 74 6f 20 41 64 64 29 3a 0a 09  hange to Add):..
5780: 20 20 20 20 24 66 69 72 73 74 20 72 65 74 79 70      $first retyp
5790: 65 20 61 64 64 0a 0a 09 20 20 20 20 23 20 4d 6f  e add...    # Mo
57a0: 76 65 20 61 6e 79 20 74 61 67 73 20 61 6e 64 20  ve any tags and 
57b0: 62 72 61 6e 63 68 65 73 20 66 72 6f 6d 20 74 68  branches from th
57c0: 65 20 6f 6c 64 20 74 6f 20 74 68 65 20 6e 65 77  e old to the new
57d0: 20 72 6f 6f 74 2e 0a 09 20 20 20 20 24 72 65 76   root...    $rev
57e0: 31 31 20 6d 6f 76 65 73 79 6d 62 6f 6c 73 74 6f  11 movesymbolsto
57f0: 20 24 66 69 72 73 74 0a 09 7d 0a 0a 09 23 20 4d   $first..}...# M
5800: 61 72 6b 20 61 6c 6c 20 74 68 65 20 73 70 65 63  ark all the spec
5810: 69 61 6c 20 72 65 76 69 73 69 6f 6e 73 20 61 73  ial revisions as
5820: 20 73 75 63 68 0a 09 66 6f 72 65 61 63 68 20 72   such..foreach r
5830: 65 76 20 24 72 65 76 6c 69 73 74 20 7b 0a 09 20  ev $revlist {.. 
5840: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 20 66     log write 3 f
5850: 69 6c 65 20 22 52 65 76 69 73 69 6f 6e 20 6f 6e  ile "Revision on
5860: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 3a   default branch:
5870: 20 5b 24 72 65 76 20 72 65 76 6e 72 5d 22 0a 09   [$rev revnr]"..
5880: 20 20 20 20 24 72 65 76 20 73 65 74 6f 6e 64 65      $rev setonde
5890: 66 61 75 6c 74 62 72 61 6e 63 68 20 31 0a 09 7d  faultbranch 1..}
58a0: 0a 0a 09 69 66 20 7b 24 73 74 6f 70 20 6e 65 20  ...if {$stop ne 
58b0: 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 52 65 76  ""} {..    # Rev
58c0: 69 73 69 6f 6e 20 31 2e 32 20 6c 6f 67 69 63 61  ision 1.2 logica
58d0: 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  lly follows the 
58e0: 69 6d 70 6f 72 74 65 64 20 72 65 76 69 73 69 6f  imported revisio
58f0: 6e 73 2c 0a 09 20 20 20 20 23 20 6e 6f 74 20 31  ns,..    # not 1
5900: 2e 31 2e 20 20 41 63 63 6f 72 64 69 6e 67 6c 79  .1.  Accordingly
5910: 2c 20 63 6f 6e 6e 65 63 74 20 69 74 20 74 6f 20  , connect it to 
5920: 74 68 65 20 6c 61 73 74 20 4e 54 44 42 52 20 61  the last NTDBR a
5930: 6e 64 0a 09 20 20 20 20 23 20 70 6f 73 73 69 62  nd..    # possib
5940: 6c 79 20 63 68 61 6e 67 65 20 69 74 73 20 74 79  ly change its ty
5950: 70 65 2e 0a 0a 09 20 20 20 20 73 65 74 20 6c 61  pe....    set la
5960: 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c  st [lindex $revl
5970: 69 73 74 20 65 6e 64 5d 0a 09 20 20 20 20 24 73  ist end]..    $s
5980: 74 6f 70 20 73 65 74 64 65 66 61 75 6c 74 62 72  top setdefaultbr
5990: 61 6e 63 68 70 61 72 65 6e 74 20 24 6c 61 73 74  anchparent $last
59a0: 20 3b 20 23 20 52 65 74 79 70 65 73 20 74 68 65   ; # Retypes the
59b0: 20 72 65 76 69 73 69 6f 6e 20 74 6f 6f 2e 0a 09   revision too...
59c0: 20 20 20 20 24 6c 61 73 74 20 73 65 74 64 65 66      $last setdef
59d0: 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 20  aultbranchchild 
59e0: 20 24 73 74 6f 70 0a 09 7d 0a 09 72 65 74 75 72   $stop..}..retur
59f0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
5a00: 68 6f 64 20 43 68 65 63 6b 4c 4f 44 73 20 7b 7d  hod CheckLODs {}
5a10: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62   {..foreach {_ b
5a20: 72 61 6e 63 68 7d 20 20 5b 61 72 72 61 79 20 67  ranch}  [array g
5a30: 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b  et mybranches] {
5a40: 20 24 62 72 61 6e 63 68 20 63 68 65 63 6b 6c 6f   $branch checklo
5a50: 64 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20  d }..foreach {_ 
5a60: 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20  taglist} [array 
5a70: 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20  get mytags] {.. 
5a80: 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 24     foreach tag $
5a90: 74 61 67 6c 69 73 74 20 7b 20 24 74 61 67 20 63  taglist { $tag c
5aa0: 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d 0a 09 72 65  hecklod }..}..re
5ab0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
5ac0: 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 72 72  method RemoveIrr
5ad0: 65 6c 65 76 61 6e 74 44 65 6c 65 74 69 6f 6e 73  elevantDeletions
5ae0: 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76   {} {..# From cv
5af0: 73 32 73 76 6e 3a 20 49 66 20 61 20 66 69 6c 65  s2svn: If a file
5b00: 20 69 73 20 61 64 64 65 64 20 6f 6e 20 61 20 62   is added on a b
5b10: 72 61 6e 63 68 2c 20 74 68 65 6e 20 61 20 74 72  ranch, then a tr
5b20: 75 6e 6b 0a 09 23 20 72 65 76 69 73 69 6f 6e 20  unk..# revision 
5b30: 69 73 20 61 64 64 65 64 20 61 74 20 74 68 65 20  is added at the 
5b40: 73 61 6d 65 20 74 69 6d 65 20 69 6e 20 74 68 65  same time in the
5b50: 20 27 44 65 61 64 27 20 73 74 61 74 65 2e 0a 09   'Dead' state...
5b60: 23 20 54 68 69 73 20 72 65 76 69 73 69 6f 6e 20  # This revision 
5b70: 64 6f 65 73 6e 27 74 20 64 6f 20 61 6e 79 74 68  doesn't do anyth
5b80: 69 6e 67 20 75 73 65 66 75 6c 2c 20 73 6f 20 64  ing useful, so d
5b90: 65 6c 65 74 65 20 69 74 2e 0a 0a 09 66 6f 72 65  elete it....fore
5ba0: 61 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74  ach root $myroot
5bb0: 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72  s {..    if {[$r
5bc0: 6f 6f 74 20 69 73 6e 65 65 64 65 64 5d 7d 20 63  oot isneeded]} c
5bd0: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67  ontinue..    log
5be0: 20 77 72 69 74 65 20 32 20 66 69 6c 65 20 22 52   write 2 file "R
5bf0: 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 63 65 73 73  emoving unnecess
5c00: 61 72 79 20 64 65 61 64 20 72 65 76 69 73 69 6f  ary dead revisio
5c10: 6e 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22  n [$root revnr]"
5c20: 0a 0a 09 20 20 20 20 23 20 52 65 6d 6f 76 65 20  ...    # Remove 
5c30: 61 73 20 72 6f 6f 74 2c 20 6d 61 6b 65 20 69 74  as root, make it
5c40: 73 20 63 68 69 6c 64 20 6e 65 77 20 72 6f 6f 74  s child new root
5c50: 20 61 66 74 65 72 0a 09 20 20 20 20 23 20 64 69   after..    # di
5c60: 73 63 6f 6e 6e 65 63 74 69 6e 67 20 69 74 20 66  sconnecting it f
5c70: 72 6f 6d 20 74 68 65 20 72 65 76 69 73 69 6f 6e  rom the revision
5c80: 20 6a 75 73 74 20 67 6f 69 6e 67 20 61 77 61 79   just going away
5c90: 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 20  ....    ldelete 
5ca0: 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20  myroots $root.. 
5cb0: 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61     if {[$root ha
5cc0: 73 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74  schild]} {...set
5cd0: 20 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20 63 68   child [$root ch
5ce0: 69 6c 64 5d 0a 09 09 24 63 68 69 6c 64 20 63 75  ild]...$child cu
5cf0: 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61  tfromparent...la
5d00: 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 63  ppend myroots $c
5d10: 68 69 6c 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20  hild..    }...  
5d20: 20 20 23 20 52 65 6d 6f 76 65 20 74 68 65 20 62    # Remove the b
5d30: 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20  ranches spawned 
5d40: 62 79 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20  by the revision 
5d50: 74 6f 20 62 65 0a 09 20 20 20 20 23 20 64 65 6c  to be..    # del
5d60: 65 74 65 64 2e 20 49 66 20 74 68 65 20 62 72 61  eted. If the bra
5d70: 6e 63 68 20 68 61 73 20 72 65 76 69 73 69 6f 6e  nch has revision
5d80: 73 20 74 68 65 79 20 73 68 6f 75 6c 64 20 61 6c  s they should al
5d90: 72 65 61 64 79 0a 09 20 20 20 20 23 20 75 73 65  ready..    # use
5da0: 20 6f 70 65 72 61 74 69 6f 6e 20 27 61 64 64 27   operation 'add'
5db0: 2c 20 6e 6f 20 6e 65 65 64 20 74 6f 20 63 68 61  , no need to cha
5dc0: 6e 67 65 20 74 68 61 74 2e 20 54 68 65 20 66 69  nge that. The fi
5dd0: 72 73 74 0a 09 20 20 20 20 23 20 72 65 76 69 73  rst..    # revis
5de0: 69 6f 6e 20 6f 6e 20 65 61 63 68 20 62 72 61 6e  ion on each bran
5df0: 63 68 20 62 65 63 6f 6d 65 73 20 61 20 6e 65 77  ch becomes a new
5e00: 20 61 6e 64 20 64 69 73 63 6f 6e 6e 65 63 74 65   and disconnecte
5e10: 64 0a 09 20 20 20 20 23 20 72 6f 6f 74 2e 0a 0a  d..    # root...
5e20: 09 20 20 20 20 66 6f 72 65 61 63 68 20 62 72 61  .    foreach bra
5e30: 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63  nch [$root branc
5e40: 68 65 73 5d 20 7b 0a 09 09 69 66 20 7b 21 5b 24  hes] {...if {![$
5e50: 62 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d  branch haschild]
5e60: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74  } continue...set
5e70: 20 66 69 72 73 74 20 5b 24 62 72 61 6e 63 68 20   first [$branch 
5e80: 63 68 69 6c 64 5d 0a 09 09 24 66 69 72 73 74 20  child]...$first 
5e90: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 62 72 61  cutfromparentbra
5ea0: 6e 63 68 0a 09 09 24 66 69 72 73 74 20 63 75 74  nch...$first cut
5eb0: 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70  fromparent...lap
5ec0: 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69  pend myroots $fi
5ed0: 72 73 74 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  rst..    }..    
5ee0: 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62  $root removeallb
5ef0: 72 61 6e 63 68 65 73 0a 0a 09 20 20 20 20 23 20  ranches...    # 
5f00: 54 61 67 67 69 6e 67 20 61 20 64 65 61 64 20 72  Tagging a dead r
5f10: 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20  evision doesn't 
5f20: 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73 6f 20  do anything, so 
5f30: 72 65 6d 6f 76 65 0a 09 20 20 20 20 23 20 61 6e  remove..    # an
5f40: 79 20 74 61 67 73 20 74 68 61 74 20 77 65 72 65  y tags that were
5f50: 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 20 20   set on it....  
5f60: 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c    $root removeal
5f70: 6c 74 61 67 73 0a 0a 09 20 20 20 20 23 20 54 68  ltags...    # Th
5f80: 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61 70 70  is can only happ
5f90: 65 6e 20 6f 6e 63 65 20 70 65 72 20 66 69 6c 65  en once per file
5fa0: 2c 20 61 6e 64 20 77 65 20 6d 69 67 68 74 20 68  , and we might h
5fb0: 61 76 65 0a 09 20 20 20 20 23 20 6a 75 73 74 20  ave..    # just 
5fc0: 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74 73 2c  changed myroots,
5fd0: 20 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f 6f 70   so end the loop
5fe0: 0a 09 20 20 20 20 62 72 65 61 6b 0a 09 7d 0a 09  ..    break..}..
5ff0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
6000: 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49    method RemoveI
6010: 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65 6c 65  nitialBranchDele
6020: 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72  tions {} {..# Fr
6030: 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74  om cvs2svn: If t
6040: 68 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f  he first revisio
6050: 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 69 73  n on a branch is
6060: 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73 73 61   an..# unnecessa
6070: 72 79 20 64 65 6c 65 74 65 2c 20 72 65 6d 6f 76  ry delete, remov
6080: 65 20 69 74 2e 0a 09 23 0a 09 23 20 49 66 20 61  e it...#..# If a
6090: 20 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f   file is added o
60a0: 6e 20 61 20 62 72 61 6e 63 68 20 28 77 68 65 74  n a branch (whet
60b0: 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 61 6c  her or not it al
60c0: 72 65 61 64 79 0a 09 23 20 65 78 69 73 74 65 64  ready..# existed
60d0: 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68 65 6e   on trunk), then
60e0: 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 6f 66   new versions of
60f0: 20 43 56 53 20 61 64 64 20 61 20 66 69 72 73 74   CVS add a first
6100: 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73  ..# branch revis
6110: 69 6f 6e 20 69 6e 20 74 68 65 20 27 64 65 61 64  ion in the 'dead
6120: 27 20 73 74 61 74 65 20 28 74 6f 20 69 6e 64 69  ' state (to indi
6130: 63 61 74 65 20 74 68 61 74 20 74 68 65 0a 09 23  cate that the..#
6140: 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20 65 78   file did not ex
6150: 69 73 74 20 6f 6e 20 74 68 65 20 62 72 61 6e 63  ist on the branc
6160: 68 20 77 68 65 6e 20 74 68 65 20 62 72 61 6e 63  h when the branc
6170: 68 20 77 61 73 0a 09 23 20 63 72 65 61 74 65 64  h was..# created
6180: 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68  ) followed by th
6190: 65 20 73 65 63 6f 6e 64 20 62 72 61 6e 63 68 20  e second branch 
61a0: 72 65 76 69 73 69 6f 6e 2c 20 77 68 69 63 68 20  revision, which 
61b0: 69 73 20 61 6e 0a 09 23 20 61 64 64 2e 20 20 57  is an..# add.  W
61c0: 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74 65 72  hen we encounter
61d0: 20 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e 2c   this situation,
61e0: 20 77 65 20 73 65 76 65 72 20 74 68 65 20 62 72   we sever the br
61f0: 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74 72 75  anch..# from tru
6200: 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65 20 74 68  nk and delete th
6210: 65 20 66 69 72 73 74 20 62 72 61 6e 63 68 20 72  e first branch r
6220: 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 74 20  evision....# At 
6230: 74 68 69 73 20 70 6f 69 6e 74 20 77 65 20 6d 61  this point we ma
6240: 79 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 6d  y have already m
6250: 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20 69 6e  ultiple roots in
6260: 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77 65 20   myroots,..# we 
6270: 68 61 76 65 20 74 6f 20 70 72 6f 63 65 73 73 20  have to process 
6280: 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72 65  them all....fore
6290: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20  ach root [$self 
62a0: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
62b0: 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b  nt] {..    if {[
62c0: 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 62 72  $root isneededbr
62d0: 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e  anchdel]} contin
62e0: 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  ue..    log writ
62f0: 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69  e 2 file "Removi
6300: 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69  ng unnecessary i
6310: 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20 64 65  nitial branch de
6320: 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72 65 76 6e  lete [$root revn
6330: 72 5d 22 0a 0a 09 20 20 20 20 73 65 74 20 62 72  r]"...    set br
6340: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 65  anch [$root pare
6350: 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 73  ntbranch]..    s
6360: 65 74 20 70 61 72 65 6e 74 20 5b 24 72 6f 6f 74  et parent [$root
6370: 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 73 65   parent]..    se
6380: 74 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f 74 20  t child  [$root 
6390: 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 65  child]...    lde
63a0: 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f  lete myroots $ro
63b0: 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20  ot..    lappend 
63c0: 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 0a  myroots $child..
63d0: 09 20 20 20 20 24 63 68 69 6c 64 20 20 63 75 74  .    $child  cut
63e0: 66 72 6f 6d 70 61 72 65 6e 74 0a 09 20 20 20 20  fromparent..    
63f0: 24 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72  $parent removebr
6400: 61 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61  anch        $bra
6410: 6e 63 68 0a 09 20 20 20 20 24 70 61 72 65 6e 74  nch..    $parent
6420: 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72   removechildonbr
6430: 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09 72  anch $root..}..r
6440: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
6450: 20 6d 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66 44   method LinesOfD
6460: 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a  evelopment {} {.
6470: 09 23 20 44 65 74 65 72 6d 69 6e 65 20 61 6c 6c  .# Determine all
6480: 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f   lines of develo
6490: 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 66 69  pment for the fi
64a0: 6c 65 2e 20 54 68 69 73 20 61 72 65 0a 09 23 20  le. This are..# 
64b0: 74 68 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c  the known roots,
64c0: 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f 66   and the root of
64d0: 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 66 6f   all branches fo
64e0: 75 6e 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c 69  und on the..# li
64f0: 6e 65 20 6f 66 20 70 72 69 6d 61 72 79 20 63 68  ne of primary ch
6500: 69 6c 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f  ildren....set lo
6510: 64 72 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65 61  droots {}..forea
6520: 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73  ch root $myroots
6530: 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64   {..    $self Ad
6540: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66  dBranchedLinesOf
6550: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72  Development lodr
6560: 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20  oots $root..    
6570: 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73  lappend lodroots
6580: 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72   $root..}..retur
6590: 6e 20 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20 20  n $lodroots.    
65a0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64  }..    method Ad
65b0: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66  dBranchedLinesOf
65c0: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20  Development {lv 
65d0: 72 6f 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20 31  root} {..upvar 1
65e0: 20 24 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09 77   $lv lodroots..w
65f0: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22  hile {$root ne "
6600: 22 7d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63  "} {..    foreac
6610: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20  h branch [$root 
6620: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 66  branches] {...if
6630: 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63   {![$branch hasc
6640: 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  hild]} continue.
6650: 09 09 73 65 74 20 63 68 69 6c 64 20 5b 24 62 72  ..set child [$br
6660: 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 23 20  anch child]...# 
6670: 52 65 63 75 72 73 65 20 69 6e 74 6f 20 74 68 65  Recurse into the
6680: 20 62 72 61 6e 63 68 20 66 6f 72 20 64 65 65 70   branch for deep
6690: 65 72 20 62 72 61 6e 63 68 65 73 2e 0a 09 09 24  er branches....$
66a0: 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64  self AddBranched
66b0: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
66c0: 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69  nt lodroots $chi
66d0: 6c 64 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f 64  ld...lappend lod
66e0: 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 20  roots $child..  
66f0: 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f    }..    set roo
6700: 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  t [$root child].
6710: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
6720: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63  ..    method Exc
6730: 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f  ludeNonTrunkInfo
6740: 72 6d 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20  rmation {} {..# 
6750: 52 65 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74  Remove all non-t
6760: 72 75 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20 72  runk branches, r
6770: 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74 61  evisions, and ta
6780: 67 73 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65 65  gs. We do..# kee
6790: 70 20 74 68 65 20 74 61 67 73 20 77 68 69 63 68  p the tags which
67a0: 20 61 72 65 20 6f 6e 20 74 68 65 20 74 72 75 6e   are on the trun
67b0: 6b 2e 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f 6f  k....set ntdbroo
67c0: 74 20 22 22 0a 09 66 6f 72 65 61 63 68 20 72 6f  t ""..foreach ro
67d0: 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f  ot [$self LinesO
67e0: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a  fDevelopment] {.
67f0: 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 48 65 72  .    # Note: Her
6800: 65 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  e the order of t
6810: 68 65 20 72 6f 6f 74 73 20 69 73 20 69 6d 70 6f  he roots is impo
6820: 72 74 61 6e 74 2c 0a 09 20 20 20 20 23 20 69 2e  rtant,..    # i.
6830: 65 2e 20 74 68 61 74 20 77 65 20 67 65 74 20 74  e. that we get t
6840: 68 65 6d 20 69 6e 20 64 65 70 74 68 20 66 69 72  hem in depth fir
6850: 73 74 20 6f 72 64 65 72 2e 20 54 68 69 73 20 65  st order. This e
6860: 6e 73 75 72 65 73 0a 09 20 20 20 20 23 20 74 68  nsures..    # th
6870: 61 74 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f  at the removal o
6880: 66 20 61 20 62 72 61 6e 63 68 20 68 61 70 70 65  f a branch happe
6890: 6e 73 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68  ns only after th
68a0: 65 0a 09 20 20 20 20 23 20 62 72 61 6e 63 68 65  e..    # branche
68b0: 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69  s spawned from i
68c0: 74 20 77 65 72 65 20 72 65 6d 6f 76 65 64 2e 20  t were removed. 
68d0: 4f 74 68 65 72 77 69 73 65 20 74 68 65 0a 09 20  Otherwise the.. 
68e0: 20 20 20 23 20 73 79 73 74 65 6d 20 6d 69 67 68     # system migh
68f0: 74 20 74 72 79 20 74 6f 20 61 63 63 65 73 73 20  t try to access 
6900: 64 65 6c 65 74 65 64 20 6f 62 6a 65 63 74 73 2e  deleted objects.
6910: 0a 0a 09 20 20 20 20 23 20 44 6f 20 6e 6f 74 20  ...    # Do not 
6920: 65 78 63 6c 75 64 65 20 74 68 65 20 74 72 75 6e  exclude the trun
6930: 6b 2e 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24 72  k...    if {[[$r
6940: 6f 6f 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e 6b  oot lod] istrunk
6950: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20  ]} continue..   
6960: 20 24 73 65 6c 66 20 45 78 63 6c 75 64 65 42 72   $self ExcludeBr
6970: 61 6e 63 68 20 24 72 6f 6f 74 20 6e 74 64 62 72  anch $root ntdbr
6980: 6f 6f 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e 74  oot..}...if {$nt
6990: 64 62 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a  dbroot ne ""} {.
69a0: 09 20 20 20 20 24 73 65 6c 66 20 47 72 61 66 74  .    $self Graft
69b0: 4e 54 44 42 32 54 72 75 6e 6b 20 24 6e 74 64 62  NTDB2Trunk $ntdb
69c0: 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  root..}..return.
69d0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
69e0: 64 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20  d ExcludeBranch 
69f0: 7b 72 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20 45  {root nv} {..# E
6a00: 78 63 6c 75 64 65 20 74 68 65 20 62 72 61 6e 63  xclude the branc
6a10: 68 2f 6c 6f 64 20 73 74 61 72 74 69 6e 67 20 61  h/lod starting a
6a20: 74 20 72 6f 6f 74 2c 20 61 20 72 65 76 69 73 69  t root, a revisi
6a30: 6f 6e 2e 0a 09 23 0a 09 23 20 49 66 20 74 68 65  on...#..# If the
6a40: 20 4c 4f 44 20 73 74 61 72 74 73 20 77 69 74 68   LOD starts with
6a50: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
6a60: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69  lt branch revisi
6a70: 6f 6e 73 2c 0a 09 23 20 77 65 20 6c 65 61 76 65  ons,..# we leave
6a80: 20 74 68 65 6d 20 69 6e 20 70 6c 61 63 65 20 61   them in place a
6a90: 6e 64 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 65  nd do not delete
6aa0: 20 74 68 65 20 62 72 61 6e 63 68 2e 20 49 6e 20   the branch. In 
6ab0: 74 68 61 74 0a 09 23 20 63 61 73 65 20 74 68 65  that..# case the
6ac0: 20 63 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 68   command sets th
6ad0: 65 20 76 61 72 69 61 62 6c 65 20 69 6e 20 4e 56  e variable in NV
6ae0: 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 0a   so that we can.
6af0: 09 23 20 6c 61 74 65 72 20 72 65 77 6f 72 6b 20  .# later rework 
6b00: 74 68 65 73 65 20 72 65 76 69 73 6f 6e 73 20 74  these revisons t
6b10: 6f 20 62 65 20 70 75 72 65 6c 79 20 74 72 75 6e  o be purely trun
6b20: 6b 2e 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 20  k....if {[$root 
6b30: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63  isondefaultbranc
6b40: 68 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e  h]} {..    # Han
6b50: 64 6c 69 6e 67 20 61 20 4e 54 44 42 2e 20 54 68  dling a NTDB. Th
6b60: 69 73 20 62 72 61 6e 63 68 20 6d 61 79 20 63 6f  is branch may co
6b70: 6e 73 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79 20  nsists not only 
6b80: 6f 66 0a 09 20 20 20 20 23 20 4e 54 44 42 20 72  of..    # NTDB r
6b90: 65 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 61 6c  evisions, but al
6ba0: 73 6f 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42  so some non-NTDB
6bb0: 2e 20 54 68 65 20 6c 61 74 74 65 72 20 61 72 65  . The latter are
6bc0: 0a 09 20 20 20 20 23 20 74 72 75 6c 79 20 6f 6e  ..    # truly on
6bd0: 20 61 20 62 72 61 6e 63 68 20 61 6e 64 20 68 61   a branch and ha
6be0: 76 65 20 74 6f 20 62 65 20 65 78 63 6c 75 64 65  ve to be exclude
6bf0: 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  d. The following
6c00: 0a 09 20 20 20 20 23 20 6c 6f 6f 70 20 64 65 74  ..    # loop det
6c10: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 72 65  ermines if there
6c20: 20 61 72 65 20 73 75 63 68 20 72 65 76 69 73 69   are such revisi
6c30: 6f 6e 73 2e 0a 0a 09 20 20 20 20 75 70 76 61 72  ons....    upvar
6c40: 20 31 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74 0a   1 $nv ntdbroot.
6c50: 09 20 20 20 20 73 65 74 20 6e 74 64 62 72 6f 6f  .    set ntdbroo
6c60: 74 20 24 72 6f 6f 74 0a 09 20 20 20 20 24 72 6f  t $root..    $ro
6c70: 6f 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74  ot cutfromparent
6c80: 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 73 65 74  branch...    set
6c90: 20 72 65 76 20 24 72 6f 6f 74 0a 09 20 20 20 20   rev $root..    
6ca0: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22  while {$rev ne "
6cb0: 22 7d 20 7b 0a 09 09 24 72 65 76 20 72 65 6d 6f  "} {...$rev remo
6cc0: 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09  veallbranches...
6cd0: 23 20 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a  # See note [x]..
6ce0: 0a 09 09 69 66 20 7b 5b 24 72 65 76 20 69 73 6f  ...if {[$rev iso
6cf0: 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d  ndefaultbranch]}
6d00: 20 7b 0a 09 09 20 20 20 20 73 65 74 20 72 65 76   {...    set rev
6d10: 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09   [$rev child]...
6d20: 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 62  } else {...    b
6d30: 72 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a  reak...}..    }.
6d40: 0a 09 20 20 20 20 23 20 72 65 76 20 6e 6f 77 20  ..    # rev now 
6d50: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
6d60: 73 74 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76 69  st non-NTDB revi
6d70: 73 69 6f 6e 20 61 66 74 65 72 20 74 68 65 0a 09  sion after the..
6d80: 20 20 20 20 23 20 4e 54 44 42 2c 20 6f 72 20 69      # NTDB, or i
6d90: 73 20 65 6d 70 74 79 20 69 66 20 74 68 65 72 65  s empty if there
6da0: 20 69 73 20 6e 6f 20 73 75 63 68 2e 20 49 66 20   is no such. If 
6db0: 77 65 20 68 61 76 65 20 73 6f 6d 65 0a 09 20 20  we have some..  
6dc0: 20 20 23 20 74 68 65 79 20 68 61 76 65 20 74 6f    # they have to
6dd0: 20 72 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20 20   removed....    
6de0: 69 66 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20  if {$rev ne ""} 
6df0: 20 7b 0a 09 09 73 65 74 20 6c 61 73 74 6e 74 64   {...set lastntd
6e00: 62 20 5b 24 72 65 76 20 70 61 72 65 6e 74 5d 0a  b [$rev parent].
6e10: 09 09 24 6c 61 73 74 6e 74 64 62 20 63 75 74 66  ..$lastntdb cutf
6e20: 72 6f 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c 65  romchild...while
6e30: 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a   {$rev ne ""} {.
6e40: 09 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76  ..    $rev remov
6e50: 65 61 6c 6c 74 61 67 73 0a 09 09 20 20 20 20 24  ealltags...    $
6e60: 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61  rev removeallbra
6e70: 6e 63 68 65 73 0a 09 09 20 20 20 20 23 20 4e 6f  nches...    # No
6e80: 74 65 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20 73  te [x]: We may s
6e90: 74 69 6c 6c 20 68 61 76 65 20 68 61 64 20 62 72  till have had br
6ea0: 61 6e 63 68 65 73 20 6f 6e 20 74 68 65 0a 09 09  anches on the...
6eb0: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2e 20      # revision. 
6ec0: 42 72 61 6e 63 68 65 73 20 77 69 74 68 6f 75 74  Branches without
6ed0: 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d 69   revisions commi
6ee0: 74 74 65 64 0a 09 09 20 20 20 20 23 20 6f 6e 20  tted...    # on 
6ef0: 74 68 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f 77  them do not show
6f00: 20 75 70 20 69 6e 20 74 68 65 20 6c 69 73 74 20   up in the list 
6f10: 6f 66 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09 20  of roots aka... 
6f20: 20 20 20 23 20 6c 69 6e 65 73 20 6f 66 20 64 65     # lines of de
6f30: 76 65 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20 20  velopment....   
6f40: 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63   set rev [$rev c
6f50: 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d  hild]...}..    }
6f60: 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a  ..    return..}.
6f70: 0a 09 23 20 4e 6f 20 4e 54 44 42 20 73 74 75 66  ..# No NTDB stuf
6f80: 66 20 74 6f 20 64 65 61 6c 20 77 69 74 68 2e 20  f to deal with. 
6f90: 46 69 72 73 74 20 64 65 6c 65 74 65 20 74 68 65  First delete the
6fa0: 20 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a 09   branch object..
6fb0: 23 20 69 74 73 65 6c 66 2c 20 61 66 74 65 72 20  # itself, after 
6fc0: 63 75 74 74 69 6e 67 20 61 6c 6c 20 74 68 65 20  cutting all the 
6fd0: 76 61 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74 69  various connecti
6fe0: 6f 6e 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e 63  ons....set branc
6ff0: 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62  h [$root parentb
7000: 72 61 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72 61  ranch]..if {$bra
7010: 6e 63 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20  nch ne ""} {..  
7020: 20 20 73 65 74 20 62 72 61 6e 63 68 70 61 72 65    set branchpare
7030: 6e 74 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65  nt [$branch pare
7040: 6e 74 5d 0a 09 20 20 20 20 24 62 72 61 6e 63 68  nt]..    $branch
7050: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61  parent removebra
7060: 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e  nch        $bran
7070: 63 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70  ch..    $branchp
7080: 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c  arent removechil
7090: 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a  donbranch $root.
70a0: 09 7d 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20  .}...# The root 
70b0: 69 73 20 6e 6f 20 73 75 63 68 20 61 6e 79 20 6c  is no such any l
70c0: 6f 6e 67 65 72 20 65 69 74 68 65 72 2e 0a 09 6c  onger either...l
70d0: 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24  delete myroots $
70e0: 72 6f 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f 20  root...# Now go 
70f0: 74 68 72 6f 75 67 68 20 74 68 65 20 6c 69 6e 65  through the line
7100: 20 61 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c 20   and remove all 
7110: 69 74 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a  its revisions...
7120: 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65  .while {$root ne
7130: 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f   ""} {..    $roo
7140: 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a  t removealltags.
7150: 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76  .    $root remov
7160: 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20 20  eallbranches..  
7170: 20 20 23 20 4e 6f 74 65 3a 20 53 65 65 20 74 68    # Note: See th
7180: 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20 20  e note [x]....  
7190: 20 20 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e    # From cvs2svn
71a0: 3a 20 49 66 20 74 68 69 73 20 69 73 20 74 68 65  : If this is the
71b0: 20 6c 61 73 74 20 64 65 66 61 75 6c 74 20 72 65   last default re
71c0: 76 69 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20 20  vision on a..   
71d0: 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66   # non-trunk def
71e0: 61 75 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c 6c  ault branch foll
71f0: 6f 77 65 64 20 62 79 20 61 20 31 2e 32 20 72 65  owed by a 1.2 re
7200: 76 69 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 74  vision,..    # t
7210: 68 65 6e 20 74 68 65 20 31 2e 32 20 72 65 76 69  hen the 1.2 revi
7220: 73 69 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e 20  sion depends on 
7230: 74 68 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d 45  this one.  FIXME
7240: 3a 20 49 74 20 69 73 0a 09 20 20 20 20 23 20 71  : It is..    # q
7250: 75 65 73 74 69 6f 6e 61 62 6c 65 20 77 68 65 74  uestionable whet
7260: 68 65 72 20 74 68 69 73 20 68 61 6e 64 6c 69 6e  her this handlin
7270: 67 20 69 73 20 63 6f 72 72 65 63 74 2c 20 73 69  g is correct, si
7280: 6e 63 65 20 74 68 65 0a 09 20 20 20 20 23 20 6e  nce the..    # n
7290: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
72a0: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e   branch revision
72b0: 73 20 61 66 66 65 63 74 20 74 72 75 6e 6b 20 61  s affect trunk a
72c0: 6e 64 0a 09 20 20 20 20 23 20 73 68 6f 75 6c 64  nd..    # should
72d0: 20 74 68 65 72 65 66 6f 72 65 20 6e 6f 74 20 6a   therefore not j
72e0: 75 73 74 20 62 65 20 64 69 73 63 61 72 64 65 64  ust be discarded
72f0: 20 65 76 65 6e 20 69 66 0a 09 20 20 20 20 23 20   even if..    # 
7300: 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09  --trunk-only....
7310: 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68      if {[$root h
7320: 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63  asdefaultbranchc
7330: 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 6e  hild]} {...set n
7340: 74 64 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20  tdbchild [$root 
7350: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69  defaultbranchchi
7360: 6c 64 5d 0a 09 09 69 66 20 7b 5b 24 6e 74 64 62  ld]...if {[$ntdb
7370: 63 68 69 6c 64 20 64 65 66 61 75 6c 74 62 72 61  child defaultbra
7380: 6e 63 68 70 61 72 65 6e 74 5d 20 6e 65 20 24 6e  nchparent] ne $n
7390: 74 64 62 63 68 69 6c 64 7d 20 7b 0a 09 09 20 20  tdbchild} {...  
73a0: 20 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e    trouble intern
73b0: 61 6c 20 22 6e 74 64 62 20 2d 20 74 72 75 6e 6b  al "ntdb - trunk
73c0: 20 6c 69 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 22   linkage broken"
73d0: 0a 09 09 7d 0a 09 09 24 6e 74 64 62 63 68 69 6c  ...}...$ntdbchil
73e0: 64 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e  d cutdefaultbran
73f0: 63 68 70 61 72 65 6e 74 0a 09 09 69 66 20 7b 5b  chparent...if {[
7400: 24 6e 74 64 62 63 68 69 6c 64 20 68 61 73 70 61  $ntdbchild haspa
7410: 72 65 6e 74 5d 7d 20 7b 0a 09 09 20 20 20 20 6c  rent]} {...    l
7420: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 5b  append myroots [
7430: 24 6e 74 64 62 63 68 69 6c 64 20 70 61 72 65 6e  $ntdbchild paren
7440: 74 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09  t]...}..    }...
7450: 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 72      set root [$r
7460: 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 0a 09  oot child]..}...
7470: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
7480: 20 20 6d 65 74 68 6f 64 20 47 72 61 66 74 4e 54    method GraftNT
7490: 44 42 32 54 72 75 6e 6b 20 7b 72 6f 6f 74 7d 20  DB2Trunk {root} 
74a0: 7b 0a 09 23 20 57 65 20 63 61 6e 20 6e 6f 77 20  {..# We can now 
74b0: 67 72 61 66 74 20 74 68 65 20 6e 6f 6e 2d 74 72  graft the non-tr
74c0: 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e  unk default bran
74d0: 63 68 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 0a  ch revisions to.
74e0: 09 23 20 74 72 75 6e 6b 2e 20 54 68 65 79 20 73  .# trunk. They s
74f0: 68 6f 75 6c 64 20 61 6c 72 65 61 64 79 20 62 65  hould already be
7500: 20 61 6c 6f 6e 65 20 6f 6e 20 61 20 43 56 53 42   alone on a CVSB
7510: 72 61 6e 63 68 2d 6c 65 73 73 0a 09 23 20 62 72  ranch-less..# br
7520: 61 6e 63 68 2e 0a 0a 09 69 66 20 7b 5b 24 72 6f  anch....if {[$ro
7530: 6f 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e  ot hasparentbran
7540: 63 68 5d 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69  ch]} { trouble i
7550: 6e 74 65 72 6e 61 6c 20 22 4e 54 44 42 20 72 6f  nternal "NTDB ro
7560: 6f 74 20 73 74 69 6c 6c 20 68 61 73 20 69 74 73  ot still has its
7570: 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 22 20   branch symbol" 
7580: 7d 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61  }..if {[$root ha
7590: 73 62 72 61 6e 63 68 65 73 5d 7d 20 20 20 20 20  sbranches]}     
75a0: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e  { trouble intern
75b0: 61 6c 20 22 4e 54 44 42 20 72 6f 6f 74 20 73 74  al "NTDB root st
75c0: 69 6c 6c 20 68 61 73 20 73 70 61 77 6e 65 64 20  ill has spawned 
75d0: 62 72 61 6e 63 68 65 73 22 20 7d 0a 0a 09 73 65  branches" }...se
75e0: 74 20 6c 61 73 74 20 24 72 6f 6f 74 0a 09 77 68  t last $root..wh
75f0: 69 6c 65 20 7b 5b 24 6c 61 73 74 20 68 61 73 63  ile {[$last hasc
7600: 68 69 6c 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74  hild]} {set last
7610: 20 5b 24 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a   [$last child]}.
7620: 0a 09 69 66 20 7b 5b 24 6c 61 73 74 20 68 61 73  ..if {[$last has
7630: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69  defaultbranchchi
7640: 6c 64 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74  ld]} {...    set
7650: 20 72 65 76 31 32 20 5b 24 6c 61 73 74 20 64 65   rev12 [$last de
7660: 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64  faultbranchchild
7670: 5d 0a 09 20 20 20 20 24 72 65 76 31 32 20 63 75  ]..    $rev12 cu
7680: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61  tdefaultbranchpa
7690: 72 65 6e 74 0a 09 20 20 20 20 24 6c 61 73 74 20  rent..    $last 
76a0: 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e 63   cutdefaultbranc
76b0: 68 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 72 65  hchild...    $re
76c0: 76 31 32 20 63 68 61 6e 67 65 70 61 72 65 6e 74  v12 changeparent
76d0: 20 24 6c 61 73 74 0a 09 20 20 20 20 24 6c 61 73   $last..    $las
76e0: 74 20 20 63 68 61 6e 67 65 63 68 69 6c 64 20 24  t  changechild $
76f0: 72 65 76 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c  rev12...    ldel
7700: 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76  ete myroots $rev
7710: 31 32 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20  12...    # Note 
7720: 61 6e 64 20 72 65 6d 65 6d 62 65 72 20 74 68 61  and remember tha
7730: 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 72 65  t the type of re
7740: 76 31 32 20 77 61 73 20 61 6c 72 65 61 64 79 0a  v12 was already.
7750: 09 20 20 20 20 23 20 61 64 6a 75 73 74 65 64 20  .    # adjusted 
7760: 62 79 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e  by AdjustNonTrun
7770: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 2c 20  kDefaultBranch, 
7780: 73 6f 20 77 65 20 64 6f 6e 27 74 0a 09 20 20 20  so we don't..   
7790: 20 23 20 68 61 76 65 20 74 6f 20 63 68 61 6e 67   # have to chang
77a0: 65 20 69 74 73 20 74 79 70 65 20 68 65 72 65 2e  e its type here.
77b0: 0a 09 7d 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f  ..}...while {$ro
77c0: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20  ot ne ""} {..   
77d0: 20 24 72 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61   $root setondefa
77e0: 75 6c 74 62 72 61 6e 63 68 20 30 0a 09 20 20 20  ultbranch 0..   
77f0: 20 24 72 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d   $root setlod $m
7800: 79 74 72 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65  ytrunk..    fore
7810: 61 63 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74  ach tag [$root t
7820: 61 67 73 5d 20 7b 0a 09 09 24 74 61 67 20 73 65  ags] {...$tag se
7830: 74 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20  tlod $mytrunk.. 
7840: 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f     }..    set ro
7850: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d  ot [$root child]
7860: 0a 09 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74  ..}..        ret
7870: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
7880: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
7890: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
78a0: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f  ######.    ## Co
78b0: 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20  nfiguration..   
78c0: 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65   pragma -hastype
78d0: 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20  info    no  ; # 
78e0: 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65  no type introspe
78f0: 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61  ction.    pragma
7900: 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20   -hasinfo       
7910: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65   no  ; # no obje
7920: 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e  ct introspection
7930: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73  .    pragma -has
7940: 74 79 70 65 6d 65 74 68 6f 64 73 20 6e 6f 20 20  typemethods no  
7950: 3b 20 23 20 74 79 70 65 20 69 73 20 6e 6f 74 20  ; # type is not 
7960: 72 65 6c 65 76 61 6e 74 2e 0a 0a 20 20 20 20 23  relevant...    #
7970: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
7980: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
7990: 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70  ######.}..namesp
79a0: 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66  ace eval ::vc::f
79b0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
79c0: 76 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61  vs {.    namespa
79d0: 63 65 20 65 78 70 6f 72 74 20 66 69 6c 65 0a 20  ce export file. 
79e0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
79f0: 6c 20 66 69 6c 65 20 7b 0a 09 23 20 49 6d 70 6f  l file {..# Impo
7a00: 72 74 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2c  rt not required,
7a10: 20 61 6c 72 65 61 64 79 20 61 20 63 68 69 6c 64   already a child
7a20: 20 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23 20 6e   namespace...# n
7a30: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
7a40: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
7a50: 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a  port::cvs::file:
7a60: 3a 72 65 76 0a 09 23 20 6e 61 6d 65 73 70 61 63  :rev..# namespac
7a70: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
7a80: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
7a90: 76 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 0a 09 6e  vs::file::sym..n
7aa0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
7ab0: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73  ::vc::tools::mis
7ac0: 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20  c::*..namespace 
7ad0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f  import ::vc::too
7ae0: 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 6d  ls::trouble..nam
7af0: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
7b00: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 20  vc::tools::log. 
7b10: 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23     }.}..# # ## #
7b20: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
7b30: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20  # ############# 
7b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
7b50: 23 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a  #####.## Ready..
7b60: 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20  package provide 
7b70: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
7b80: 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e  rt::cvs::file 1.
7b90: 30 0a 72 65 74 75 72 6e 0a                       0.return.