Hex Artifact Content
Not logged in

Artifact 244708335681ce784b535108c2e10e98dea03caf:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [930ec162ce] - Fixed the calculation of possible parents for a detached NTDB. Has to be trunk. The symbols were skipped before, causing them to have no parents at all later on, forcing an abort after CollateSymbols. Added some high verbosity log commands for debugging of this area. by aku on 2007-11-22 06:03:47.

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 66 6f 73 73 69  equire vc::fossi
0430: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
0440: 73 74 61 74 65 20 20 20 20 20 20 3b 20 23 20 53  state      ; # S
0450: 74 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61  tate storage..pa
0460: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63  ckage require vc
0470: 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65  ::tools::trouble
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0490: 20 20 3b 20 23 20 45 72 72 6f 72 20 72 65 70 6f    ; # Error repo
04a0: 72 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72  rting..package r
04b0: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73  equire vc::tools
04c0: 3a 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20  ::log           
04d0: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 55             ; # U
04e0: 73 65 72 20 66 65 65 64 62 61 63 6b 0a 70 61 63  ser feedback.pac
04f0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a  kage require vc:
0500: 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 20  :tools::misc    
0510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0520: 20 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61 74   ; # Text format
0530: 74 69 6e 67 0a 0a 23 20 23 20 23 23 20 23 23 23  ting..# # ## ###
0540: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
0550: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23  ############# ##
0560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0570: 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74 3a 3a 74  ###.## ..snit::t
0580: 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  ype ::vc::fossil
0590: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66  ::import::cvs::f
05a0: 69 6c 65 20 7b 0a 20 20 20 20 23 20 23 20 23 23  ile {.    # # ##
05b0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
05c0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
05d0: 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63 20  #.    ## Public 
05e0: 41 50 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72 75  API..    constru
05f0: 63 74 6f 72 20 7b 69 64 20 70 61 74 68 20 75 73  ctor {id path us
0600: 72 70 61 74 68 20 65 78 65 63 75 74 61 62 6c 65  rpath executable
0610: 20 70 72 6f 6a 65 63 74 7d 20 7b 0a 09 73 65 74   project} {..set
0620: 20 6d 79 69 64 20 20 20 20 20 20 20 20 20 24 69   myid         $i
0630: 64 0a 09 73 65 74 20 6d 79 70 61 74 68 20 20 20  d..set mypath   
0640: 20 20 20 20 24 70 61 74 68 0a 09 73 65 74 20 6d      $path..set m
0650: 79 75 73 72 70 61 74 68 20 20 20 20 24 75 73 72  yusrpath    $usr
0660: 70 61 74 68 0a 09 73 65 74 20 6d 79 65 78 65 63  path..set myexec
0670: 75 74 61 62 6c 65 20 24 65 78 65 63 75 74 61 62  utable $executab
0680: 6c 65 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 63  le..set myprojec
0690: 74 20 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73  t    $project..s
06a0: 65 74 20 6d 79 74 72 75 6e 6b 20 20 20 20 20 20  et mytrunk      
06b0: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e  [$myproject trun
06c0: 6b 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  k]..return.    }
06d0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
06e0: 69 64 20 7b 69 64 7d 20 7b 0a 09 69 66 20 7b 24  id {id} {..if {$
06f0: 6d 79 69 64 20 6e 65 20 22 22 7d 20 7b 20 74 72  myid ne ""} { tr
0700: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22  ouble internal "
0710: 46 69 6c 65 20 27 24 6d 79 70 61 74 68 27 20 61  File '$mypath' a
0720: 6c 72 65 61 64 79 20 68 61 73 20 61 6e 20 69 64  lready has an id
0730: 2c 20 27 24 6d 79 69 64 27 22 20 7d 0a 09 73 65  , '$myid'" }..se
0740: 74 20 6d 79 69 64 20 24 69 64 0a 09 72 65 74 75  t myid $id..retu
0750: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
0760: 74 68 6f 64 20 69 64 20 20 20 20 20 20 7b 7d 20  thod id      {} 
0770: 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 64 20 7d  { return $myid }
0780: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 61 74 68  .    method path
0790: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20      {} { return 
07a0: 24 6d 79 70 61 74 68 20 7d 0a 20 20 20 20 6d 65  $mypath }.    me
07b0: 74 68 6f 64 20 75 73 72 70 61 74 68 20 7b 7d 20  thod usrpath {} 
07c0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 75 73 72 70  { return $myusrp
07d0: 61 74 68 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64  ath }.    method
07e0: 20 70 72 6f 6a 65 63 74 20 7b 7d 20 7b 20 72 65   project {} { re
07f0: 74 75 72 6e 20 24 6d 79 70 72 6f 6a 65 63 74 20  turn $myproject 
0800: 7d 0a 0a 20 20 20 20 64 65 6c 65 67 61 74 65 20  }..    delegate 
0810: 6d 65 74 68 6f 64 20 63 6f 6d 6d 69 74 6d 65 73  method commitmes
0820: 73 61 67 65 6f 66 20 74 6f 20 6d 79 70 72 6f 6a  sageof to myproj
0830: 65 63 74 0a 0a 20 20 20 20 23 20 23 20 23 23 20  ect..    # # ## 
0840: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
0850: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
0860: 0a 20 20 20 20 23 23 20 4d 65 74 68 6f 64 73 20  .    ## Methods 
0870: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
0880: 20 63 6c 61 73 73 20 74 6f 20 62 65 20 61 20 73   class to be a s
0890: 69 6e 6b 20 6f 66 20 74 68 65 20 72 63 73 20 70  ink of the rcs p
08a0: 61 72 73 65 72 0a 0a 20 20 20 20 23 6d 65 74 68  arser..    #meth
08b0: 6f 64 20 62 65 67 69 6e 20 7b 7d 20 7b 70 75 74  od begin {} {put
08c0: 73 20 62 65 67 69 6e 7d 0a 20 20 20 20 23 6d 65  s begin}.    #me
08d0: 74 68 6f 64 20 73 65 74 68 65 61 64 20 7b 68 7d  thod sethead {h}
08e0: 20 7b 70 75 74 73 20 68 65 61 64 3d 24 68 7d 0a   {puts head=$h}.
08f0: 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 70      #method setp
0900: 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20 7b  rincipalbranch {
0910: 62 7d 20 7b 70 75 74 73 20 70 62 3d 24 62 7d 0a  b} {puts pb=$b}.
0920: 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66 74      #method deft
0930: 61 67 20 7b 73 20 72 7d 20 7b 70 75 74 73 20 24  ag {s r} {puts $
0940: 73 3d 24 72 7d 0a 20 20 20 20 23 6d 65 74 68 6f  s=$r}.    #metho
0950: 64 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d  d setcomment {c}
0960: 20 7b 70 75 74 73 20 63 6f 6d 6d 65 6e 74 3d 24   {puts comment=$
0970: 63 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 61  c}.    #method a
0980: 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 70 75 74  dmindone {} {put
0990: 73 20 61 64 6d 69 6e 64 6f 6e 65 7d 0a 20 20 20  s admindone}.   
09a0: 20 23 6d 65 74 68 6f 64 20 64 65 66 20 7b 72 65   #method def {re
09b0: 76 20 64 61 74 65 20 61 75 74 68 6f 72 20 73 74  v date author st
09c0: 61 74 65 20 6e 65 78 74 20 62 72 61 6e 63 68 65  ate next branche
09d0: 73 7d 20 7b 70 75 74 73 20 22 64 65 66 20 24 72  s} {puts "def $r
09e0: 65 76 20 24 64 61 74 65 20 24 61 75 74 68 6f 72  ev $date $author
09f0: 20 24 73 74 61 74 65 20 24 6e 65 78 74 20 24 62   $state $next $b
0a00: 72 61 6e 63 68 65 73 22 7d 0a 20 20 20 20 23 6d  ranches"}.    #m
0a10: 65 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d  ethod defdone {}
0a20: 20 7b 70 75 74 73 20 64 65 66 2d 64 6f 6e 65 7d   {puts def-done}
0a30: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74  .    #method set
0a40: 64 65 73 63 20 7b 64 7d 20 7b 70 75 74 73 20 64  desc {d} {puts d
0a50: 65 73 63 3d 24 64 7d 0a 20 20 20 20 23 6d 65 74  esc=$d}.    #met
0a60: 68 6f 64 20 65 78 74 65 6e 64 20 7b 72 65 76 20  hod extend {rev 
0a70: 63 6f 6d 6d 69 74 6d 73 67 20 64 65 6c 74 61 72  commitmsg deltar
0a80: 61 6e 67 65 7d 20 7b 70 75 74 73 20 22 65 78 74  ange} {puts "ext
0a90: 65 6e 64 20 24 63 6f 6d 6d 69 74 6d 73 67 20 24  end $commitmsg $
0aa0: 64 65 6c 74 61 72 61 6e 67 65 22 7d 0a 20 20 20  deltarange"}.   
0ab0: 20 23 6d 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d   #method done {}
0ac0: 20 7b 70 75 74 73 20 64 6f 6e 65 7d 0a 0a 20 20   {puts done}..  
0ad0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
0ae0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0af0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
0b00: 20 50 65 72 73 69 73 74 65 6e 63 65 20 28 70 61   Persistence (pa
0b10: 73 73 20 49 49 29 0a 0a 20 20 20 20 6d 65 74 68  ss II)..    meth
0b20: 6f 64 20 70 65 72 73 69 73 74 20 7b 7d 20 7b 0a  od persist {} {.
0b30: 09 23 20 46 69 72 73 74 20 63 6f 6c 6c 65 63 74  .# First collect
0b40: 20 74 68 65 20 72 65 61 63 68 61 62 6c 65 20 72   the reachable r
0b50: 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d  evisions and sym
0b60: 62 6f 6c 73 2c 20 74 68 65 6e 0a 09 23 20 61 73  bols, then..# as
0b70: 73 69 67 6e 20 69 64 27 73 20 74 6f 20 61 6c 6c  sign id's to all
0b80: 2e 20 54 68 65 79 20 61 72 65 20 73 6f 72 74 65  . They are sorte
0b90: 64 20 73 6f 20 74 68 61 74 20 77 65 20 77 69 6c  d so that we wil
0ba0: 6c 20 68 61 76 65 20 69 64 73 0a 09 23 20 77 68  l have ids..# wh
0bb0: 69 63 68 20 73 6f 72 74 20 69 6e 20 6f 72 64 65  ich sort in orde
0bc0: 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2e 20 54  r of creation. T
0bd0: 68 65 6e 20 77 65 20 63 61 6e 20 73 61 76 65 20  hen we can save 
0be0: 74 68 65 6d 2e 20 54 68 69 73 0a 09 23 20 69 73  them. This..# is
0bf0: 20 64 6f 6e 65 20 62 6f 74 74 6f 6d 20 75 70 2e   done bottom up.
0c00: 20 52 65 76 69 73 69 6f 6e 73 2c 20 74 68 65 6e   Revisions, then
0c10: 20 73 79 6d 62 6f 6c 73 2e 20 5f 5f 4e 4f 54 45   symbols. __NOTE
0c20: 5f 5f 20 54 68 69 73 0a 09 23 20 77 6f 72 6b 73  __ This..# works
0c30: 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 73 71   only because sq
0c40: 6c 69 74 65 20 69 73 20 6e 6f 74 20 63 68 65 63  lite is not chec
0c50: 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79  king foreign key
0c60: 0a 09 23 20 72 65 66 65 72 65 6e 63 65 73 20 64  ..# references d
0c70: 75 72 69 6e 67 20 69 6e 73 65 72 74 2e 20 54 68  uring insert. Th
0c80: 69 73 20 61 6c 6c 6f 77 73 20 74 6f 20 68 61 76  is allows to hav
0c90: 65 20 64 61 6e 67 6c 69 6e 67 0a 09 23 20 72 65  e dangling..# re
0ca0: 66 65 72 65 6e 63 65 73 20 77 68 69 63 68 20 61  ferences which a
0cb0: 72 65 20 66 69 78 65 64 20 6c 61 74 65 72 2e 20  re fixed later. 
0cc0: 54 68 65 20 6c 6f 6e 67 65 73 74 20 64 61 6e 67  The longest dang
0cd0: 6c 69 6e 67 0a 09 23 20 72 65 66 65 72 65 6e 63  ling..# referenc
0ce0: 65 73 20 61 72 65 20 66 6f 72 20 74 68 65 20 70  es are for the p
0cf0: 72 6f 6a 65 63 74 20 6c 65 76 65 6c 20 73 79 6d  roject level sym
0d00: 62 6f 6c 73 2c 20 74 68 65 73 65 20 77 65 20 64  bols, these we d
0d10: 6f 0a 09 23 20 6e 6f 74 20 73 61 76 65 20 68 65  o..# not save he
0d20: 72 65 2c 20 62 75 74 20 61 74 20 74 68 65 20 65  re, but at the e
0d30: 6e 64 20 6f 66 20 74 68 65 20 70 61 73 73 2e 20  nd of the pass. 
0d40: 57 68 61 74 20 77 65 20 6e 65 65 64 20 61 72 65  What we need are
0d50: 0a 09 23 20 74 68 65 20 69 64 73 2c 20 68 65 6e  ..# the ids, hen
0d60: 63 65 20 74 68 65 20 74 77 6f 20 70 68 61 73 65  ce the two phase
0d70: 73 2e 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73  s....struct::lis
0d80: 74 20 61 73 73 69 67 6e 20 5b 24 73 65 6c 66 20  t assign [$self 
0d90: 41 63 74 69 76 65 5d 20 72 65 76 69 73 69 6f 6e  Active] revision
0da0: 73 20 73 79 6d 62 6f 6c 73 0a 09 66 6f 72 65 61  s symbols..forea
0db0: 63 68 20 72 65 76 20 24 72 65 76 69 73 69 6f 6e  ch rev $revision
0dc0: 73 20 7b 20 24 72 65 76 20 64 65 66 69 64 20 7d  s { $rev defid }
0dd0: 0a 09 66 6f 72 65 61 63 68 20 73 79 6d 20 24 73  ..foreach sym $s
0de0: 79 6d 62 6f 6c 73 20 20 20 7b 20 24 73 79 6d 20  ymbols   { $sym 
0df0: 64 65 66 69 64 20 7d 0a 0a 09 73 74 61 74 65 20  defid }...state 
0e00: 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20  transaction {.. 
0e10: 20 20 20 66 6f 72 65 61 63 68 20 72 65 76 20 24     foreach rev $
0e20: 72 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 76  revisions { $rev
0e30: 20 70 65 72 73 69 73 74 20 7d 0a 09 20 20 20 20   persist }..    
0e40: 66 6f 72 65 61 63 68 20 73 79 6d 20 24 73 79 6d  foreach sym $sym
0e50: 62 6f 6c 73 20 20 20 7b 20 24 73 79 6d 20 70 65  bols   { $sym pe
0e60: 72 73 69 73 74 20 7d 0a 09 7d 0a 09 72 65 74 75  rsist }..}..retu
0e70: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
0e80: 74 68 6f 64 20 64 72 6f 70 20 7b 7d 20 7b 0a 09  thod drop {} {..
0e90: 66 6f 72 65 61 63 68 20 7b 5f 20 72 65 76 7d 20  foreach {_ rev} 
0ea0: 20 20 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79     [array get my
0eb0: 72 65 76 5d 20 20 20 20 20 20 7b 20 24 72 65 76  rev]      { $rev
0ec0: 20 64 65 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65   destroy }..fore
0ed0: 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b  ach {_ branch} [
0ee0: 61 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e  array get mybran
0ef0: 63 68 65 73 5d 20 7b 20 24 62 72 61 6e 63 68 20  ches] { $branch 
0f00: 64 65 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65 61  destroy }..forea
0f10: 63 68 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b  ch {_ taglist} [
0f20: 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73  array get mytags
0f30: 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68  ] {..    foreach
0f40: 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20   tag $taglist { 
0f50: 24 74 61 67 20 64 65 73 74 72 6f 79 20 7d 0a 09  $tag destroy }..
0f60: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
0f70: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
0f80: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
0f90: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
0fa0: 20 23 23 20 49 6d 70 6c 65 6d 65 6e 74 20 74 68   ## Implement th
0fb0: 65 20 73 69 6e 6b 0a 0a 20 20 20 20 6d 65 74 68  e sink..    meth
0fc0: 6f 64 20 62 65 67 69 6e 20 7b 7d 20 7b 23 69 67  od begin {} {#ig
0fd0: 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f  nore}..    metho
0fe0: 64 20 73 65 74 68 65 61 64 20 7b 72 65 76 6e 72  d sethead {revnr
0ff0: 7d 20 7b 0a 09 73 65 74 20 6d 79 68 65 61 64 72  } {..set myheadr
1000: 65 76 6e 72 20 24 72 65 76 6e 72 0a 09 72 65 74  evnr $revnr..ret
1010: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
1020: 65 74 68 6f 64 20 73 65 74 70 72 69 6e 63 69 70  ethod setprincip
1030: 61 6c 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68  albranch {branch
1040: 6e 72 7d 20 7b 0a 09 73 65 74 20 6d 79 70 72 69  nr} {..set mypri
1050: 6e 63 69 70 61 6c 20 24 62 72 61 6e 63 68 6e 72  ncipal $branchnr
1060: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
1070: 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 74 61      method defta
1080: 67 20 7b 6e 61 6d 65 20 72 65 76 6e 72 7d 20 7b  g {name revnr} {
1090: 0a 09 23 20 46 55 54 55 52 45 3a 20 50 65 72 66  ..# FUTURE: Perf
10a0: 6f 72 6d 20 73 79 6d 62 6f 6c 20 74 72 61 6e 73  orm symbol trans
10b0: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 72 65 2e 0a  formation here..
10c0: 0a 09 69 66 20 7b 5b 73 74 72 75 63 74 3a 3a 73  ..if {[struct::s
10d0: 65 74 20 63 6f 6e 74 61 69 6e 73 20 24 6d 79 73  et contains $mys
10e0: 79 6d 62 6f 6c 73 20 24 6e 61 6d 65 5d 7d 20 7b  ymbols $name]} {
10f0: 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 66 61  ..    trouble fa
1100: 74 61 6c 20 22 4d 75 6c 74 69 70 6c 65 20 64 65  tal "Multiple de
1110: 66 69 6e 69 74 69 6f 6e 73 20 6f 66 20 74 68 65  finitions of the
1120: 20 73 79 6d 62 6f 6c 20 27 24 6e 61 6d 65 27 20   symbol '$name' 
1130: 69 6e 20 27 24 6d 79 70 61 74 68 27 22 0a 09 20  in '$mypath'".. 
1140: 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73     return..}...s
1150: 74 72 75 63 74 3a 3a 73 65 74 20 61 64 64 20 6d  truct::set add m
1160: 79 73 79 6d 62 6f 6c 73 20 24 6e 61 6d 65 0a 0a  ysymbols $name..
1170: 09 69 66 20 7b 5b 72 65 76 20 69 73 62 72 61 6e  .if {[rev isbran
1180: 63 68 72 65 76 6e 72 20 24 72 65 76 6e 72 20 2d  chrevnr $revnr -
1190: 3e 20 62 72 61 6e 63 68 6e 72 5d 7d 20 7b 0a 09  > branchnr]} {..
11a0: 20 20 20 20 24 73 65 6c 66 20 41 64 64 42 72 61      $self AddBra
11b0: 6e 63 68 20 24 6e 61 6d 65 20 24 62 72 61 6e 63  nch $name $branc
11c0: 68 6e 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20  hnr..} else {.. 
11d0: 20 20 20 24 73 65 6c 66 20 41 64 64 54 61 67 20     $self AddTag 
11e0: 24 6e 61 6d 65 20 24 72 65 76 6e 72 0a 09 7d 0a  $name $revnr..}.
11f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1200: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d     method setcom
1210: 6d 65 6e 74 20 7b 63 7d 20 7b 23 20 69 67 6e 6f  ment {c} {# igno
1220: 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  re}..    method 
1230: 61 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 0a 09  admindone {} {..
1240: 23 20 57 65 20 64 6f 20 6e 6f 74 68 69 6e 67 20  # We do nothing 
1250: 61 74 20 74 68 65 20 62 6f 75 6e 64 61 72 79 20  at the boundary 
1260: 6f 66 20 61 64 6d 69 6e 20 61 6e 64 20 72 65 76  of admin and rev
1270: 69 73 69 6f 6e 20 64 61 74 61 0a 20 20 20 20 7d  ision data.    }
1280: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66  ..    method def
1290: 20 7b 72 65 76 6e 72 20 64 61 74 65 20 61 75 74   {revnr date aut
12a0: 68 6f 72 20 73 74 61 74 65 20 6e 65 78 74 20 62  hor state next b
12b0: 72 61 6e 63 68 65 73 7d 20 7b 0a 09 24 73 65 6c  ranches} {..$sel
12c0: 66 20 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f  f RecordBranchCo
12d0: 6d 6d 69 74 73 20 24 62 72 61 6e 63 68 65 73 0a  mmits $branches.
12e0: 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  ..if {[info exis
12f0: 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29  ts myrev($revnr)
1300: 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c  ]} {..    troubl
1310: 65 20 66 61 74 61 6c 20 22 46 69 6c 65 20 24 6d  e fatal "File $m
1320: 79 70 61 74 68 20 63 6f 6e 74 61 69 6e 73 20 64  ypath contains d
1330: 75 70 6c 69 63 61 74 65 20 64 65 66 69 6e 69 74  uplicate definit
1340: 69 6f 6e 73 20 66 6f 72 20 72 65 76 69 73 69 6f  ions for revisio
1350: 6e 20 24 72 65 76 6e 72 2e 22 0a 09 20 20 20 20  n $revnr."..    
1360: 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 65 74 20  return..}...set 
1370: 6d 79 61 69 64 28 24 72 65 76 6e 72 29 20 5b 24  myaid($revnr) [$
1380: 6d 79 70 72 6f 6a 65 63 74 20 64 65 66 61 75 74  myproject defaut
1390: 68 6f 72 20 24 61 75 74 68 6f 72 5d 0a 09 73 65  hor $author]..se
13a0: 74 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 20  t myrev($revnr) 
13b0: 5b 72 65 76 20 25 41 55 54 4f 25 20 24 72 65 76  [rev %AUTO% $rev
13c0: 6e 72 20 24 64 61 74 65 20 24 73 74 61 74 65 20  nr $date $state 
13d0: 24 73 65 6c 66 5d 0a 0a 09 24 73 65 6c 66 20 52  $self]...$self R
13e0: 65 63 6f 72 64 42 61 73 69 63 44 65 70 65 6e 64  ecordBasicDepend
13f0: 65 6e 63 69 65 73 20 24 72 65 76 6e 72 20 24 6e  encies $revnr $n
1400: 65 78 74 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ext..return.    
1410: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65  }..    method de
1420: 66 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 54 68  fdone {} {..# Th
1430: 69 73 20 69 73 20 61 6c 6c 20 64 6f 6e 65 20 61  is is all done a
1440: 66 74 65 72 20 74 68 65 20 72 65 76 69 73 69 6f  fter the revisio
1450: 6e 20 74 72 65 65 20 68 61 73 20 62 65 65 6e 20  n tree has been 
1460: 65 78 74 72 61 63 74 65 64 0a 09 23 20 66 72 6f  extracted..# fro
1470: 6d 20 74 68 65 20 66 69 6c 65 2c 20 62 65 66 6f  m the file, befo
1480: 72 65 20 74 68 65 20 63 6f 6d 6d 69 74 20 6d 65  re the commit me
1490: 73 61 67 65 73 20 61 6e 64 20 64 65 6c 74 61 20  sages and delta 
14a0: 74 65 78 74 73 20 61 72 65 0a 09 23 20 70 72 6f  texts are..# pro
14b0: 63 65 73 73 65 64 2e 0a 0a 09 24 73 65 6c 66 20  cessed....$self 
14c0: 50 72 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65  ProcessPrimaryDe
14d0: 70 65 6e 64 65 6e 63 69 65 73 0a 09 24 73 65 6c  pendencies..$sel
14e0: 66 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44  f ProcessBranchD
14f0: 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 24 73 65  ependencies..$se
1500: 6c 66 20 53 6f 72 74 42 72 61 6e 63 68 65 73 0a  lf SortBranches.
1510: 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 54 61  .$self ProcessTa
1520: 67 44 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 24  gDependencies..$
1530: 73 65 6c 66 20 44 65 74 65 72 6d 69 6e 65 54 68  self DetermineTh
1540: 65 52 6f 6f 74 52 65 76 69 73 69 6f 6e 0a 09 72  eRootRevision..r
1550: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
1560: 20 6d 65 74 68 6f 64 20 73 65 74 64 65 73 63 20   method setdesc 
1570: 7b 64 7d 20 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a  {d} {# ignore}..
1580: 20 20 20 20 6d 65 74 68 6f 64 20 65 78 74 65 6e      method exten
1590: 64 20 7b 72 65 76 6e 72 20 63 6f 6d 6d 69 74 6d  d {revnr commitm
15a0: 73 67 20 74 65 78 74 72 61 6e 67 65 7d 20 7b 0a  sg textrange} {.
15b0: 09 73 65 74 20 63 6d 69 64 20 5b 24 6d 79 70 72  .set cmid [$mypr
15c0: 6f 6a 65 63 74 20 64 65 66 63 6d 65 73 73 61 67  oject defcmessag
15d0: 65 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24  e [string trim $
15e0: 63 6f 6d 6d 69 74 6d 73 67 5d 5d 0a 0a 09 73 65  commitmsg]]...se
15f0: 74 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 65  t rev $myrev($re
1600: 76 6e 72 29 0a 0a 09 69 66 20 7b 5b 24 72 65 76  vnr)...if {[$rev
1610: 20 68 61 73 6d 65 74 61 5d 7d 20 7b 0a 09 20 20   hasmeta]} {..  
1620: 20 20 23 20 41 70 70 61 72 65 6e 74 6c 79 20 72    # Apparently r
1630: 65 70 6f 73 69 74 6f 72 69 65 73 20 65 78 69 73  epositories exis
1640: 74 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 64  t in which the d
1650: 65 6c 74 61 20 64 61 74 61 0a 09 20 20 20 20 23  elta data..    #
1660: 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 31 2e   for revision 1.
1670: 31 20 69 73 20 70 72 6f 76 69 64 65 64 20 73 65  1 is provided se
1680: 76 65 72 61 6c 20 74 69 6d 65 73 2c 20 61 74 20  veral times, at 
1690: 6c 65 61 73 74 0a 09 20 20 20 20 23 20 74 77 69  least..    # twi
16a0: 63 65 2e 20 54 68 65 20 61 63 74 75 61 6c 20 63  ce. The actual c
16b0: 61 75 73 65 20 6f 66 20 74 68 69 73 20 64 75 70  ause of this dup
16c0: 6c 69 63 61 74 69 6f 6e 20 69 73 20 6e 6f 74 0a  lication is not.
16d0: 09 20 20 20 20 23 20 6b 6e 6f 77 6e 2e 20 53 70  .    # known. Sp
16e0: 65 63 75 6c 61 74 69 6f 6e 20 63 65 6e 74 65 72  eculation center
16f0: 73 20 6f 6e 20 52 43 53 2f 43 56 53 20 62 75 67  s on RCS/CVS bug
1700: 73 2c 20 6f 72 20 66 72 6f 6d 0a 09 20 20 20 20  s, or from..    
1710: 23 20 6d 61 6e 75 61 6c 20 65 64 69 74 73 20 6f  # manual edits o
1720: 66 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79  f the repository
1730: 20 77 68 69 63 68 20 62 6f 72 6b 65 64 20 74 68   which borked th
1740: 65 0a 09 20 20 20 20 23 20 69 6e 74 65 72 6e 61  e..    # interna
1750: 6c 73 2e 20 57 68 61 74 65 76 65 72 20 74 68 65  ls. Whatever the
1760: 20 63 61 75 73 65 2c 20 74 65 73 74 69 6e 67 20   cause, testing 
1770: 73 68 6f 77 65 64 20 74 68 61 74 20 62 6f 74 68  showed that both
1780: 0a 09 20 20 20 20 23 20 63 76 73 20 61 6e 64 20  ..    # cvs and 
1790: 72 63 73 20 75 73 65 20 74 68 65 20 66 69 72 73  rcs use the firs
17a0: 74 20 64 65 66 69 6e 69 74 69 6f 6e 20 77 68 65  t definition whe
17b0: 6e 20 70 65 72 66 6f 72 6d 69 6e 67 20 61 0a 09  n performing a..
17c0: 20 20 20 20 23 20 63 68 65 63 6b 6f 75 74 2c 20      # checkout, 
17d0: 61 6e 64 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68  and we follow th
17e0: 65 69 72 20 6c 65 61 64 2e 20 53 69 64 65 20 6e  eir lead. Side n
17f0: 6f 74 65 73 3a 20 27 63 76 73 0a 09 20 20 20 20  otes: 'cvs..    
1800: 23 20 6c 6f 67 27 20 66 61 69 6c 73 20 6f 6e 20  # log' fails on 
1810: 73 75 63 68 20 61 20 66 69 6c 65 2c 20 61 6e 64  such a file, and
1820: 20 27 63 76 73 20 72 6c 6f 67 27 20 70 72 69 6e   'cvs rlog' prin
1830: 74 73 20 74 68 65 20 6c 6f 67 0a 09 20 20 20 20  ts the log..    
1840: 23 20 6d 65 73 73 61 67 65 20 66 72 6f 6d 20 74  # message from t
1850: 68 65 20 66 69 72 73 74 20 64 65 6c 74 61 2c 20  he first delta, 
1860: 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 73 65 63  ignoring the sec
1870: 6f 6e 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77  ond....    log w
1880: 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20  rite 1 file "In 
1890: 66 69 6c 65 20 24 6d 79 70 61 74 68 20 3a 20 44  file $mypath : D
18a0: 75 70 6c 69 63 61 74 65 20 64 65 6c 74 61 20 64  uplicate delta d
18b0: 61 74 61 20 66 6f 72 20 72 65 76 69 73 69 6f 6e  ata for revision
18c0: 20 24 72 65 76 6e 72 22 0a 09 20 20 20 20 6c 6f   $revnr"..    lo
18d0: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22  g write 1 file "
18e0: 49 67 6e 6f 72 69 6e 67 20 74 68 65 20 64 75 70  Ignoring the dup
18f0: 6c 69 63 61 74 65 22 0a 09 20 20 20 20 72 65 74  licate"..    ret
1900: 75 72 6e 0a 09 7d 0a 0a 09 23 20 44 65 74 65 72  urn..}...# Deter
1910: 6d 69 6e 65 20 74 68 65 20 6c 69 6e 65 20 6f 66  mine the line of
1920: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72   development for
1930: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 28 70   the revision (p
1940: 72 6f 6a 65 63 74 0a 09 23 20 6c 65 76 65 6c 29  roject..# level)
1950: 2e 20 54 68 69 73 20 67 69 76 65 73 20 75 73 20  . This gives us 
1960: 74 68 65 20 62 72 61 6e 63 68 69 64 20 74 6f 6f  the branchid too
1970: 2c 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  , required for t
1980: 68 65 0a 09 23 20 6d 65 74 61 20 64 61 74 61 20  he..# meta data 
1990: 67 72 6f 75 70 20 74 68 65 20 72 65 76 69 73 69  group the revisi
19a0: 6f 6e 20 69 73 20 69 6e 2e 20 28 4e 6f 74 65 3a  on is in. (Note:
19b0: 20 42 79 20 70 75 74 74 69 6e 67 20 62 6f 74 68   By putting both
19c0: 0a 09 23 20 62 72 61 6e 63 68 2f 6c 6f 64 20 61  ..# branch/lod a
19d0: 6e 64 20 70 72 6f 6a 65 63 74 20 69 6e 66 6f 72  nd project infor
19e0: 6d 61 74 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20  mation into the 
19f0: 67 72 6f 75 70 20 77 65 20 65 6e 73 75 72 65 0a  group we ensure.
1a00: 09 23 20 74 68 61 74 20 61 6e 79 20 63 72 6f 73  .# that any cros
1a10: 73 2d 70 72 6f 6a 65 63 74 20 61 6e 64 20 63 72  s-project and cr
1a20: 6f 73 73 2d 62 72 61 6e 63 68 20 63 6f 6d 6d 69  oss-branch commi
1a30: 74 73 20 61 72 65 0a 09 23 20 73 65 70 61 72 61  ts are..# separa
1a40: 74 65 64 20 69 6e 74 6f 20 6d 75 6c 74 69 70 6c  ted into multipl
1a50: 65 20 63 6f 6d 6d 69 74 73 2c 20 6f 6e 65 20 69  e commits, one i
1a60: 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 70 72  n each of the pr
1a70: 6f 6a 65 63 74 73 0a 09 23 20 61 6e 64 2f 6f 72  ojects..# and/or
1a80: 20 62 72 61 6e 63 68 65 73 29 2e 0a 0a 09 73 65   branches)....se
1a90: 74 20 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74  t lod [$self Get
1aa0: 4c 4f 44 20 24 72 65 76 6e 72 5d 0a 0a 09 24 72  LOD $revnr]...$r
1ab0: 65 76 20 73 65 74 6d 65 74 61 20 5b 24 6d 79 70  ev setmeta [$myp
1ac0: 72 6f 6a 65 63 74 20 64 65 66 6d 65 74 61 20 5b  roject defmeta [
1ad0: 24 6c 6f 64 20 69 64 5d 20 24 6d 79 61 69 64 28  $lod id] $myaid(
1ae0: 24 72 65 76 6e 72 29 20 24 63 6d 69 64 5d 0a 09  $revnr) $cmid]..
1af0: 24 72 65 76 20 73 65 74 74 65 78 74 20 24 74 65  $rev settext $te
1b00: 78 74 72 61 6e 67 65 0a 09 24 72 65 76 20 73 65  xtrange..$rev se
1b10: 74 6c 6f 64 20 20 24 6c 6f 64 0a 0a 09 23 20 49  tlod  $lod...# I
1b20: 66 20 74 68 69 73 20 69 73 20 72 65 76 69 73 69  f this is revisi
1b30: 6f 6e 20 31 2e 31 2c 20 77 65 20 68 61 76 65 20  on 1.1, we have 
1b40: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  to determine whe
1b50: 74 68 65 72 20 74 68 65 0a 09 23 20 66 69 6c 65  ther the..# file
1b60: 20 73 65 65 6d 73 20 74 6f 20 68 61 76 65 20 62   seems to have b
1b70: 65 65 6e 20 63 72 65 61 74 65 64 20 74 68 72 6f  een created thro
1b80: 75 67 68 20 27 63 76 73 20 61 64 64 27 20 69 6e  ugh 'cvs add' in
1b90: 73 74 65 61 64 20 6f 66 0a 09 23 20 27 63 76 73  stead of..# 'cvs
1ba0: 20 69 6d 70 6f 72 74 27 2e 20 54 68 69 73 20 63   import'. This c
1bb0: 61 6e 20 62 65 20 64 6f 6e 65 20 62 79 20 6c 6f  an be done by lo
1bc0: 6f 6b 69 6e 67 20 61 74 20 74 68 65 20 75 6e 2d  oking at the un-
1bd0: 0a 09 23 20 61 64 75 6c 74 65 72 61 74 65 64 20  ..# adulterated 
1be0: 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 2c 20  commit message, 
1bf0: 61 73 20 43 56 53 20 75 73 65 73 20 61 20 68 61  as CVS uses a ha
1c00: 72 64 77 69 72 65 64 20 6d 61 67 69 63 0a 09 23  rdwired magic..#
1c10: 20 6d 65 73 73 61 67 65 20 66 6f 72 20 74 68 65   message for the
1c20: 20 6c 61 74 74 65 72 2c 20 69 2e 65 2e 20 22 49   latter, i.e. "I
1c30: 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c  nitial revision\
1c40: 6e 22 2c 20 6e 6f 0a 09 23 20 70 65 72 69 6f 64  n", no..# period
1c50: 2e 20 20 28 54 68 69 73 20 66 61 63 74 20 61 6c  .  (This fact al
1c60: 73 6f 20 68 65 6c 70 73 20 75 73 20 77 68 65 6e  so helps us when
1c70: 20 74 68 65 20 74 69 6d 65 20 63 6f 6d 65 73 20   the time comes 
1c80: 74 6f 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 20  to..# determine 
1c90: 77 68 65 74 68 65 72 20 74 68 69 73 20 66 69 6c  whether this fil
1ca0: 65 20 6d 69 67 68 74 20 68 61 76 65 20 68 61 64  e might have had
1cb0: 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63   a default branc
1cc0: 68 0a 09 23 20 69 6e 20 74 68 65 20 70 61 73 74  h..# in the past
1cd0: 2e 29 0a 0a 09 69 66 20 7b 24 72 65 76 6e 72 20  .)...if {$revnr 
1ce0: 65 71 20 22 31 2e 31 22 7d 20 7b 0a 09 20 20 20  eq "1.1"} {..   
1cf0: 20 73 65 74 20 6d 79 69 6d 70 6f 72 74 65 64 20   set myimported 
1d00: 5b 65 78 70 72 20 7b 24 63 6f 6d 6d 69 74 6d 73  [expr {$commitms
1d10: 67 20 65 71 20 22 49 6e 69 74 69 61 6c 20 72 65  g eq "Initial re
1d20: 76 69 73 69 6f 6e 5c 6e 22 7d 5d 0a 09 7d 0a 0a  vision\n"}]..}..
1d30: 09 23 20 48 65 72 65 20 77 65 20 61 6c 73 6f 20  .# Here we also 
1d40: 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68  keep track of th
1d50: 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
1d60: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 0a 09   the revisions..
1d70: 23 20 77 65 72 65 20 61 64 64 65 64 20 74 6f 20  # were added to 
1d80: 74 68 65 20 66 69 6c 65 2e 0a 0a 09 6c 61 70 70  the file....lapp
1d90: 65 6e 64 20 6d 79 72 65 76 69 73 69 6f 6e 73 20  end myrevisions 
1da0: 24 72 65 76 0a 09 72 65 74 75 72 6e 0a 20 20 20  $rev..return.   
1db0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64   }..    method d
1dc0: 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 43 6f 6d 70  one {} {..# Comp
1dd0: 6c 65 74 65 20 74 68 65 20 72 65 76 69 73 69 6f  lete the revisio
1de0: 6e 73 2c 20 62 72 61 6e 63 68 65 73 2c 20 61 6e  ns, branches, an
1df0: 64 20 74 61 67 73 2e 20 54 68 69 73 20 69 6e 63  d tags. This inc
1e00: 6c 75 64 65 73 0a 09 23 20 6c 6f 6f 6b 69 6e 67  ludes..# looking
1e10: 20 66 6f 72 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b   for a non-trunk
1e20: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c   default branch,
1e30: 20 6d 61 72 6b 69 6e 67 20 69 74 73 20 6d 65 6d   marking its mem
1e40: 62 65 72 73 0a 09 23 20 61 6e 64 20 6c 69 6e 6b  bers..# and link
1e50: 69 6e 67 20 74 68 65 6d 20 69 6e 74 6f 20 74 68  ing them into th
1e60: 65 20 74 72 75 6e 6b 2c 20 70 6f 73 73 69 62 6c  e trunk, possibl
1e70: 79 20 65 78 63 6c 75 64 69 6e 67 0a 09 23 20 6e  y excluding..# n
1e80: 6f 6e 2d 74 72 75 6e 6b 20 64 61 74 61 2c 20 61  on-trunk data, a
1e90: 6e 64 20 63 6f 6c 6c 65 63 74 69 6e 67 20 61 67  nd collecting ag
1ea0: 67 72 65 67 61 74 65 20 73 79 6d 62 6f 6c 20 73  gregate symbol s
1eb0: 74 61 74 69 73 74 69 63 73 2e 0a 0a 09 24 73 65  tatistics....$se
1ec0: 6c 66 20 44 65 74 65 72 6d 69 6e 65 52 65 76 69  lf DetermineRevi
1ed0: 73 69 6f 6e 4f 70 65 72 61 74 69 6f 6e 73 0a 09  sionOperations..
1ee0: 24 73 65 6c 66 20 44 65 74 65 72 6d 69 6e 65 4c  $self DetermineL
1ef0: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e  inesOfDevelopmen
1f00: 74 0a 09 24 73 65 6c 66 20 48 61 6e 64 6c 65 4e  t..$self HandleN
1f10: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72  onTrunkDefaultBr
1f20: 61 6e 63 68 0a 09 24 73 65 6c 66 20 52 65 6d 6f  anch..$self Remo
1f30: 76 65 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65  veIrrelevantDele
1f40: 74 69 6f 6e 73 0a 09 24 73 65 6c 66 20 52 65 6d  tions..$self Rem
1f50: 6f 76 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 68  oveInitialBranch
1f60: 44 65 6c 65 74 69 6f 6e 73 0a 0a 09 69 66 20 7b  Deletions...if {
1f70: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e  [$myproject trun
1f80: 6b 6f 6e 6c 79 5d 7d 20 7b 0a 09 20 20 20 20 24  konly]} {..    $
1f90: 73 65 6c 66 20 45 78 63 6c 75 64 65 4e 6f 6e 54  self ExcludeNonT
1fa0: 72 75 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 0a  runkInformation.
1fb0: 09 7d 0a 0a 09 24 73 65 6c 66 20 41 67 67 72 65  .}...$self Aggre
1fc0: 67 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 0a 09  gateSymbolData..
1fd0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
1fe0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
1ff0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
2000: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
2010: 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69   State..    vari
2020: 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20 20 20  able myid       
2030: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 46 69         {} ; # Fi
2040: 6c 65 20 69 64 20 69 6e 20 74 68 65 20 70 65 72  le id in the per
2050: 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a 20  sistent state.. 
2060: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 61     variable mypa
2070: 74 68 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d  th            {}
2080: 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68 65   ; # Path of the
2090: 20 66 69 6c 65 27 73 20 72 63 73 20 61 72 63 68   file's rcs arch
20a0: 69 76 65 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  ive..    variabl
20b0: 65 20 6d 79 75 73 72 70 61 74 68 20 20 20 20 20  e myusrpath     
20c0: 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 68 20      {} ; # Path 
20d0: 6f 66 20 74 68 65 20 66 69 6c 65 20 61 73 20 73  of the file as s
20e0: 65 65 6e 20 62 79 20 75 73 65 72 73 2e 0a 20 20  een by users..  
20f0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 65 78 65    variable myexe
2100: 63 75 74 61 62 6c 65 20 20 20 20 20 20 30 20 20  cutable      0  
2110: 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67  ; # Boolean flag
2120: 20 27 66 69 6c 65 20 65 78 65 63 75 74 61 62 6c   'file executabl
2130: 65 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  e'..    variable
2140: 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20 20 20   myproject      
2150: 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65     {} ; # Refere
2160: 6e 63 65 20 74 6f 20 74 68 65 20 70 72 6f 6a 65  nce to the proje
2170: 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 20  ct object.....  
2180: 20 20 23 20 74 68 65 20 66 69 6c 65 20 62 65 6c    # the file bel
2190: 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76 61 72  ongs to..    var
21a0: 69 61 62 6c 65 20 6d 79 72 65 76 20 2d 61 72 72  iable myrev -arr
21b0: 61 79 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 4d  ay      {} ; # 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 0a 09 09 09 09 20  ber to the..... 
21e0: 20 20 20 23 20 61 73 73 6f 63 69 61 74 65 64 20     # associated 
21f0: 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2e  revision object.
2200: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
2210: 72 65 76 69 73 69 6f 6e 73 20 20 20 20 20 20 20  revisions       
2220: 7b 7d 20 3b 20 23 20 53 61 6d 65 20 61 73 20 6d  {} ; # Same as m
2230: 79 72 65 76 2c 20 62 75 74 20 61 20 6c 69 73 74  yrev, but a list
2240: 2c 0a 09 09 09 09 20 20 20 20 23 20 67 69 76 69  ,.....    # givi
2250: 6e 67 20 75 73 20 74 68 65 20 6f 72 64 65 72 20  ng us the order 
2260: 6f 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76  of.....    # rev
2270: 69 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61 72 69  isions..    vari
2280: 61 62 6c 65 20 6d 79 61 69 64 20 20 20 20 20 20  able myaid      
2290: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61  -array {} ; # Ma
22a0: 70 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65  p revision numbe
22b0: 72 73 20 74 6f 20 74 68 65 20 69 64 0a 09 09 09  rs to the id....
22c0: 09 20 20 20 20 23 20 6f 66 20 74 68 65 20 61 75  .    # of the au
22d0: 74 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69 74 74  thor who committ
22e0: 65 64 0a 09 09 09 09 20 20 20 20 23 20 69 74 2e  ed.....    # it.
22f0: 20 54 68 69 73 20 69 73 20 6c 61 74 65 72 20 61   This is later a
2300: 67 67 72 65 67 61 74 65 64 0a 09 09 09 09 20 20  ggregated.....  
2310: 20 20 23 20 77 69 74 68 20 63 6f 6d 6d 69 74 20    # with commit 
2320: 6d 65 73 73 61 67 65 2c 20 62 72 61 6e 63 68 20  message, branch 
2330: 6e 61 6d 65 0a 09 09 09 09 20 20 20 20 23 20 61  name.....    # a
2340: 6e 64 20 70 72 6f 6a 65 63 74 20 69 64 20 66 6f  nd project id fo
2350: 72 20 61 20 6d 65 74 61 20 69 64 2e 0a 20 20 20  r a meta id..   
2360: 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65 61 64   variable myhead
2370: 72 65 76 6e 72 20 20 20 20 20 20 20 7b 7d 20 3b  revnr       {} ;
2380: 20 23 20 48 65 61 64 20 72 65 76 69 73 69 6f 6e   # Head revision
2390: 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65   (revision numbe
23a0: 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  r).    variable 
23b0: 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20 20 20  myprincipal     
23c0: 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63 69 70    {} ; # Princip
23d0: 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61 6e 63  al branch (branc
23e0: 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09 09 20  h number)...... 
23f0: 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20 74 6f     # Contrary to
2400: 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73 20 69   the name this i
2410: 73 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 20  s the.....    # 
2420: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a  default branch..
2430: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64      variable myd
2440: 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20 20 7b  ependencies    {
2450: 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61 72 79  } ; # Dictionary
2460: 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64   parent -> child
2470: 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65 63 6f  ,.....    # reco
2480: 72 64 73 20 70 72 69 6d 61 72 79 20 64 65 70 65  rds primary depe
2490: 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20 76 61  ndencies..    va
24a0: 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74 65  riable myimporte
24b0: 64 20 20 20 20 20 20 20 20 30 20 20 3b 20 23 20  d        0  ; # 
24c0: 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 53 65  Boolean flag. Se
24d0: 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  t if and only if
24e0: 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 20 31  .....    # rev 1
24f0: 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65 20 73  .1 of the file s
2500: 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20 20 20  eemingly.....   
2510: 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65 64 20   # was imported 
2520: 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64 65 64  instead of added
2530: 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72 6d 61  .....    # norma
2540: 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  lly..    variabl
2550: 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20 20 20  e myroot        
2560: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72      {} ; # Refer
2570: 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65 76 69  ence to the revi
2580: 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09 09 09  sion object.....
2590: 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20 74 68      # holding th
25a0: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e  e root revision.
25b0: 20 20 49 74 73 0a 09 09 09 09 20 20 20 20 23 20    Its.....    # 
25c0: 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79 20 69  number usually i
25d0: 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62 65 0a  s '1.1'. Can be.
25e0: 09 09 09 09 20 20 20 20 23 20 61 20 64 69 66 66  ....    # a diff
25f0: 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 62 65  erent number, be
2600: 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20 20 20  cause of.....   
2610: 20 23 20 67 61 70 73 20 63 72 65 61 74 65 64 20   # gaps created 
2620: 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20 2d 6f  via 'cvsadmin -o
2630: 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  '..    variable 
2640: 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72 72 61  mybranches -arra
2650: 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 62 72  y {} ; # Maps br
2660: 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f 20 74  anch number to t
2670: 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09 20 20  he symbol.....  
2680: 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c    # object handl
2690: 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 2e 0a  ing the branch..
26a0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74      variable myt
26b0: 61 67 73 20 20 20 20 20 2d 61 72 72 61 79 20 7b  ags     -array {
26c0: 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 73  } ; # Maps revis
26d0: 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  ion number to th
26e0: 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20 20 23  e list.....    #
26f0: 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a 65 63   of symbol objec
2700: 74 73 20 66 6f 72 20 74 68 65 20 74 61 67 73 0a  ts for the tags.
2710: 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63 69  ....    # associ
2720: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 72 65  ated with the re
2730: 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69  vision..    vari
2740: 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73 20 20  able mysymbols  
2750: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 65         {} ; # Se
2760: 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20  t of the symbol 
2770: 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e 0a 09  names found in..
2780: 09 09 09 20 20 20 20 23 20 74 68 69 73 20 66 69  ...    # this fi
2790: 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  le...    variabl
27a0: 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20 30 20  e mybranchcnt 0 
27b0: 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f 72 20  ; # Counter for 
27c0: 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72 65 63  branches, to rec
27d0: 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20 20 20  ord their....   
27e0: 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64 65 66    # order of def
27f0: 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20 61 6c  inition. This al
2800: 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09 20 20  so defines....  
2810: 20 20 20 23 20 74 68 65 69 72 20 6f 72 64 65 72     # their order
2820: 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20 77 68   of creation, wh
2830: 69 63 68 20 69 73 20 74 68 65 0a 09 09 09 20 20  ich is the....  
2840: 20 20 20 23 20 72 65 76 65 72 73 65 20 6f 66 20     # reverse of 
2850: 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 2e 65  definition.  I.e
2860: 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09 09 20  . a smaller.... 
2870: 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d 65 61      # number mea
2880: 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61 72 6c  ns 'Defined earl
2890: 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09 09 20  ier', means.... 
28a0: 20 20 20 20 23 20 27 43 72 65 61 74 65 64 20 6c      # 'Created l
28b0: 61 74 65 72 27 2e 0a 0a 20 20 20 20 76 61 72 69  ater'...    vari
28c0: 61 62 6c 65 20 6d 79 74 72 75 6e 6b 20 7b 7d 20  able mytrunk {} 
28d0: 3b 20 23 20 44 69 72 65 63 74 20 72 65 66 65 72  ; # Direct refer
28e0: 65 6e 63 65 20 74 6f 20 6d 79 70 72 6f 6a 65 63  ence to myprojec
28f0: 74 20 2d 3e 20 74 72 75 6e 6b 2e 0a 20 20 20 20  t -> trunk..    
2900: 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74 73  variable myroots
2910: 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20   {} ; # List of 
2920: 72 6f 6f 74 73 20 69 6e 20 74 68 65 20 66 6f 72  roots in the for
2930: 65 73 74 20 6f 66 0a 09 09 09 20 20 23 20 6c 6f  est of....  # lo
2940: 64 27 73 2e 20 4f 62 6a 65 63 74 20 72 65 66 65  d's. Object refe
2950: 72 65 6e 63 65 73 20 74 6f 20 72 65 76 69 73 69  rences to revisi
2960: 6f 6e 73 20 61 6e 64 0a 09 09 09 20 20 23 20 62  ons and....  # b
2970: 72 61 6e 63 68 65 73 2e 20 54 68 65 20 6c 61 74  ranches. The lat
2980: 74 65 72 20 63 61 6e 20 61 70 70 65 61 72 20 77  ter can appear w
2990: 68 65 6e 20 74 68 65 79 0a 09 09 09 20 20 23 20  hen they....  # 
29a0: 61 72 65 20 73 65 76 65 72 65 64 20 66 72 6f 6d  are severed from
29b0: 20 74 68 65 69 72 20 70 61 72 65 6e 74 2e 0a 0a   their parent...
29c0: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
29d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
29e0: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20  ###########.    
29f0: 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68  ## Internal meth
2a00: 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ods..    method 
2a10: 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d  RecordBranchComm
2a20: 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b  its {branches} {
2a30: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68  ..foreach branch
2a40: 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65 73 20  revnr $branches 
2a50: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61 74 63  {..    if {[catc
2a60: 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68  h {...set branch
2a70: 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e   [$self Rev2Bran
2a80: 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d  ch $branchrevnr]
2a90: 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 73 65  ..    }]} {...se
2aa0: 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20  t branch [$self 
2ab0: 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e  AddUnlabeledBran
2ac0: 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63 68 6e  ch [rev 2branchn
2ad0: 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 5d  r $branchrevnr]]
2ae0: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20  ..    }...    # 
2af0: 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d 6d 69  Record the commi
2b00: 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76 69 73  t, just as revis
2b10: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 0a 09  ion number for..
2b20: 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f 63 65      # now. Proce
2b30: 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63  sBranchDependenc
2b40: 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e 64 20  ies will extend 
2b50: 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20 20 20  that ito a..    
2b60: 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63 74 20  # proper object 
2b70: 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20 20 20  reference....   
2b80: 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c   $branch setchil
2b90: 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68 72 65  drevnr $branchre
2ba0: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  vnr..}..return. 
2bb0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
2bc0: 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72 65 76   Rev2Branch {rev
2bd0: 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20  nr} {..if {[rev 
2be0: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65  istrunkrevnr $re
2bf0: 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f  vnr]} {..    tro
2c00: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 45  uble internal "E
2c10: 78 70 65 63 74 65 64 20 61 20 62 72 61 6e 63 68  xpected a branch
2c20: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72   revision number
2c30: 22 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79  "..}..return $my
2c40: 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20 32 62  branches([rev 2b
2c50: 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72 5d 29  ranchnr $revnr])
2c60: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
2c70: 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42  od AddUnlabeledB
2c80: 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e 72 7d  ranch {branchnr}
2c90: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73 65 6c   {..return [$sel
2ca0: 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e 6c 61  f AddBranch unla
2cb0: 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e 72 20  beled-$branchnr 
2cc0: 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20 20 7d  $branchnr].    }
2cd0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64  ..    method Add
2ce0: 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62 72 61  Branch {name bra
2cf0: 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 69  nchnr} {..if {[i
2d00: 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72 61  nfo exists mybra
2d10: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29  nches($branchnr)
2d20: 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72  ]} {..    log wr
2d30: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27  ite 1 file "In '
2d40: 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e 63 68  $mypath': Branch
2d50: 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e 61 6d   '$branchnr' nam
2d60: 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68 65 73  ed '[$mybranches
2d70: 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61 6d 65  ($branchnr) name
2d80: 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  ]'"..    log wri
2d90: 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e 6e 6f  te 1 file "Canno
2da0: 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20 6e 61  t have second na
2db0: 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67 6e 6f  me '$name', igno
2dc0: 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20 72 65  ring it"..    re
2dd0: 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62 72 61  turn..}..set bra
2de0: 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f 25 20  nch [sym %AUTO% 
2df0: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 6e 72  branch $branchnr
2e00: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 65 74   [$myproject get
2e10: 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20 24 73  symbol $name] $s
2e20: 65 6c 66 5d 0a 09 24 62 72 61 6e 63 68 20 73 65  elf]..$branch se
2e30: 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e 63 72 20  tposition [incr 
2e40: 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a 09 73 65  mybranchcnt]..se
2e50: 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72  t mybranches($br
2e60: 61 6e 63 68 6e 72 29 20 24 62 72 61 6e 63 68 0a  anchnr) $branch.
2e70: 09 72 65 74 75 72 6e 20 24 62 72 61 6e 63 68 0a  .return $branch.
2e80: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
2e90: 64 20 41 64 64 54 61 67 20 7b 6e 61 6d 65 20 72  d AddTag {name r
2ea0: 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 74 61 67  evnr} {..set tag
2eb0: 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 74 61 67   [sym %AUTO% tag
2ec0: 20 24 72 65 76 6e 72 20 5b 24 6d 79 70 72 6f 6a   $revnr [$myproj
2ed0: 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e  ect getsymbol $n
2ee0: 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 6c 61 70  ame] $self]..lap
2ef0: 70 65 6e 64 20 6d 79 74 61 67 73 28 24 72 65 76  pend mytags($rev
2f00: 6e 72 29 20 24 74 61 67 0a 09 72 65 74 75 72 6e  nr) $tag..return
2f10: 20 24 74 61 67 0a 20 20 20 20 7d 0a 0a 20 20 20   $tag.    }..   
2f20: 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 61   method RecordBa
2f30: 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65 73 20  sicDependencies 
2f40: 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 7b 0a 09  {revnr next} {..
2f50: 23 20 48 61 6e 64 6c 65 20 74 68 65 20 72 65 76  # Handle the rev
2f60: 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 6e 63 69  ision dependenci
2f70: 65 73 2e 20 52 65 63 6f 72 64 20 74 68 65 6d 20  es. Record them 
2f80: 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 23 20 6e  for now, do..# n
2f90: 6f 74 68 69 6e 67 20 77 69 74 68 20 74 68 65 6d  othing with them
2fa0: 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 74 68 65   yet....# On the
2fb0: 20 74 72 75 6e 6b 20 74 68 65 20 27 6e 65 78 74   trunk the 'next
2fc0: 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  ' field points t
2fd0: 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 09  o the previous..
2fe0: 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 2e 65 2e  # revision, i.e.
2ff0: 20 74 68 65 20 5f 70 61 72 65 6e 74 5f 20 6f 66   the _parent_ of
3000: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f 6e 65   the current one
3010: 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 20 31 2e  . Example:..# 1.
3020: 36 27 73 20 6e 65 78 74 20 69 73 20 31 2e 35 20  6's next is 1.5 
3030: 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 64 6d 69  (modulo cvs admi
3040: 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f 6e 74 72  n -o)....# Contr
3050: 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63  arily on a branc
3060: 68 20 74 68 65 20 27 6e 65 78 74 27 20 66 69 65  h the 'next' fie
3070: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
3080: 0a 09 23 20 70 72 69 6d 61 72 79 20 5f 63 68 69  ..# primary _chi
3090: 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65  ld_ of the curre
30a0: 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 41 73 20  nt revision. As 
30b0: 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 2e 31 2e  example,..# 1.1.
30c0: 33 2e 32 27 73 20 27 6e 65 78 74 27 20 77 69 6c  3.2's 'next' wil
30d0: 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e 0a 0a 09  l be 1.1.3.3....
30e0: 23 20 54 68 65 20 27 6e 65 78 74 27 20 66 69 65  # The 'next' fie
30f0: 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 6c 77 61  ld actually alwa
3100: 79 73 20 72 65 66 65 72 73 20 74 6f 20 74 68 65  ys refers to the
3110: 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 63 6f 6e   revision..# con
3120: 74 61 69 6e 69 6e 67 20 74 68 65 20 64 65 6c 74  taining the delt
3130: 61 20 6e 65 65 64 65 64 20 74 6f 20 72 65 74 72  a needed to retr
3140: 69 65 76 65 20 74 68 61 74 20 72 65 76 69 73 69  ieve that revisi
3150: 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 65 70 65  on....# The depe
3160: 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 65 64 20  ndencies needed 
3170: 68 65 72 65 20 61 72 65 20 74 68 65 20 6c 6f 67  here are the log
3180: 69 63 61 6c 20 73 74 72 75 63 74 75 72 65 2c 0a  ical structure,.
3190: 09 23 20 70 61 72 65 6e 74 2f 63 68 69 6c 64 2c  .# parent/child,
31a0: 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 69 6d 70   and not the imp
31b0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 70 65  lementation depe
31c0: 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 23 20 70  ndent delta..# p
31d0: 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 20 7b 24  ointers....if {$
31e0: 6e 65 78 74 20 65 71 20 22 22 7d 20 72 65 74 75  next eq ""} retu
31f0: 72 6e 0a 09 23 20 20 20 20 20 20 20 20 20 20 20  rn..#           
3200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
3210: 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 0a 09  arent -> child..
3220: 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b  if {[rev istrunk
3230: 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b  revnr $revnr]} {
3240: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79  ..    lappend my
3250: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 6e 65  dependencies $ne
3260: 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 65 6c 73  xt $revnr..} els
3270: 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64  e {..    lappend
3280: 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20   mydependencies 
3290: 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09 7d 0a  $revnr $next..}.
32a0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
32b0: 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73     method Proces
32c0: 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 65 6e  sPrimaryDependen
32d0: 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61  cies {} {..forea
32e0: 63 68 20 7b 70 61 72 65 6e 74 72 65 76 6e 72 20  ch {parentrevnr 
32f0: 63 68 69 6c 64 72 65 76 6e 72 7d 20 24 6d 79 64  childrevnr} $myd
3300: 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 0a 09 20  ependencies {.. 
3310: 20 20 20 73 65 74 20 70 61 72 65 6e 74 20 24 6d     set parent $m
3320: 79 72 65 76 28 24 70 61 72 65 6e 74 72 65 76 6e  yrev($parentrevn
3330: 72 29 0a 09 20 20 20 20 73 65 74 20 63 68 69 6c  r)..    set chil
3340: 64 20 20 24 6d 79 72 65 76 28 24 63 68 69 6c 64  d  $myrev($child
3350: 72 65 76 6e 72 29 0a 09 20 20 20 20 24 70 61 72  revnr)..    $par
3360: 65 6e 74 20 73 65 74 63 68 69 6c 64 20 24 63 68  ent setchild $ch
3370: 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20  ild..    $child 
3380: 73 65 74 70 61 72 65 6e 74 20 24 70 61 72 65 6e  setparent $paren
3390: 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  t..}..return.   
33a0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50   }..    method P
33b0: 72 6f 63 65 73 73 42 72 61 6e 63 68 44 65 70 65  rocessBranchDepe
33c0: 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66  ndencies {} {..f
33d0: 6f 72 65 61 63 68 20 7b 62 72 61 6e 63 68 6e 72  oreach {branchnr
33e0: 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20   branch} [array 
33f0: 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20  get mybranches] 
3400: 7b 0a 09 20 20 20 20 73 65 74 20 72 65 76 6e 72  {..    set revnr
3410: 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74   [$branch parent
3420: 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20 69 66 20  revnr]...    if 
3430: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d  {![info exists m
3440: 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b  yrev($revnr)]} {
3450: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66  ...log write 1 f
3460: 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68  ile "In '$mypath
3470: 27 3a 20 54 68 65 20 62 72 61 6e 63 68 20 27 5b  ': The branch '[
3480: 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d 27 20 72  $branch name]' r
3490: 65 66 65 72 65 6e 63 65 73 22 0a 09 09 6c 6f 67  eferences"...log
34a0: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 74   write 1 file "t
34b0: 68 65 20 62 6f 67 75 73 20 72 65 76 69 73 69 6f  he bogus revisio
34c0: 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64 20 77  n '$revnr' and w
34d0: 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e 22  ill be ignored."
34e0: 0a 09 09 24 62 72 61 6e 63 68 20 64 65 73 74 72  ...$branch destr
34f0: 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79 62 72 61  oy...unset mybra
3500: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29  nches($branchnr)
3510: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09  ..    } else {..
3520: 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 76 28  .set rev $myrev(
3530: 24 72 65 76 6e 72 29 0a 09 09 24 72 65 76 20 61  $revnr)...$rev a
3540: 64 64 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68  ddbranch $branch
3550: 0a 09 09 24 62 72 61 6e 63 68 20 73 65 74 70 61  ...$branch setpa
3560: 72 65 6e 74 20 24 72 65 76 0a 0a 09 09 23 20 49  rent $rev....# I
3570: 66 20 72 65 76 69 73 69 6f 6e 73 20 77 65 72 65  f revisions were
3580: 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68   committed on th
3590: 65 20 62 72 61 6e 63 68 20 77 65 20 73 74 6f 72  e branch we stor
35a0: 65 20 61 0a 09 09 23 20 72 65 66 65 72 65 6e 63  e a...# referenc
35b0: 65 20 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20  e to the branch 
35c0: 74 68 65 72 65 2c 20 61 6e 64 20 66 75 72 74 68  there, and furth
35d0: 65 72 20 64 65 63 6c 61 72 65 0a 09 09 23 20 74  er declare...# t
35e0: 68 65 20 66 69 72 73 74 20 63 68 69 6c 64 27 73  he first child's
35f0: 20 70 61 72 65 6e 74 20 74 6f 20 62 65 20 62 72   parent to be br
3600: 61 6e 63 68 27 73 20 70 61 72 65 6e 74 2c 20 61  anch's parent, a
3610: 6e 64 0a 09 09 23 20 6c 69 73 74 20 74 68 69 73  nd...# list this
3620: 20 63 68 69 6c 64 20 69 6e 20 74 68 65 20 70 61   child in the pa
3630: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a  rent revision...
3640: 09 09 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68  ..if {[$branch h
3650: 61 73 63 68 69 6c 64 72 65 76 5d 7d 20 7b 0a 09  aschildrev]} {..
3660: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 72 65  .    set childre
3670: 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 63 68 69  vnr [$branch chi
3680: 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20 20 20 73  ldrevnr]...    s
3690: 65 74 20 63 68 69 6c 64 20 24 6d 79 72 65 76 28  et child $myrev(
36a0: 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 09 09 20  $childrevnr)... 
36b0: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68     $branch setch
36c0: 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09 09 20 20  ild $child....  
36d0: 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 72 65    $child setpare
36e0: 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68  ntbranch $branch
36f0: 0a 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65  ...    $child se
3700: 74 70 61 72 65 6e 74 20 20 20 20 20 20 20 24 72  tparent       $r
3710: 65 76 0a 09 09 20 20 20 20 24 72 65 76 20 61 64  ev...    $rev ad
3720: 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24  dchildonbranch $
3730: 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20 20 20 7d  child...}..    }
3740: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
3750: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 53 6f  }..    method So
3760: 72 74 42 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a  rtBranches {} {.
3770: 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20  .foreach {revnr 
3780: 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20  rev} [array get 
3790: 6d 79 72 65 76 5d 20 7b 20 24 72 65 76 20 73 6f  myrev] { $rev so
37a0: 72 74 62 72 61 6e 63 68 65 73 20 7d 0a 09 72 65  rtbranches }..re
37b0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
37c0: 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 54 61  method ProcessTa
37d0: 67 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d  gDependencies {}
37e0: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76   {..foreach {rev
37f0: 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72  nr taglist} [arr
3800: 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b  ay get mytags] {
3810: 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f  ..    if {![info
3820: 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 24 72   exists myrev($r
3830: 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73 65 74 20  evnr)]} {...set 
3840: 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74 61 67 6c  n [llength $tagl
3850: 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72 69 74 65  ist]...log write
3860: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79   1 file "In '$my
3870: 70 61 74 68 27 3a 20 54 68 65 20 66 6f 6c 6c 6f  path': The follo
3880: 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20 74 61 67  wing [nsp $n tag
3890: 5d 20 72 65 66 65 72 65 6e 63 65 22 0a 09 09 6c  ] reference"...l
38a0: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20  og write 1 file 
38b0: 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 73  "the bogus revis
38c0: 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64  ion '$revnr' and
38d0: 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64   will be ignored
38e0: 2e 22 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67  ."...foreach tag
38f0: 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 20 20   $taglist {...  
3900: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69    log write 1 fi
3910: 6c 65 20 22 20 20 20 20 5b 24 74 61 67 20 6e 61  le "    [$tag na
3920: 6d 65 5d 22 0a 09 09 20 20 20 20 24 74 61 67 20  me]"...    $tag 
3930: 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09 09 75 6e  destroy...}...un
3940: 73 65 74 20 6d 79 74 61 67 73 28 24 72 65 76 6e  set mytags($revn
3950: 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b  r)..    } else {
3960: 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 65  ...set rev $myre
3970: 76 28 24 72 65 76 6e 72 29 0a 09 09 66 6f 72 65  v($revnr)...fore
3980: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74  ach tag $taglist
3990: 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20 61 64   {...    $rev ad
39a0: 64 74 61 67 20 20 20 20 24 74 61 67 0a 09 09 20  dtag    $tag... 
39b0: 20 20 20 24 74 61 67 20 73 65 74 74 61 67 72 65     $tag settagre
39c0: 76 20 24 72 65 76 0a 09 09 7d 0a 09 20 20 20 20  v $rev...}..    
39d0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  }..}..return.   
39e0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44   }..    method D
39f0: 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52  etermineTheRootR
3a00: 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20  evision {} {..# 
3a10: 54 68 65 20 72 6f 6f 74 20 69 73 20 74 68 65 20  The root is the 
3a20: 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 77 68 69  one revision whi
3a30: 63 68 20 68 61 73 20 6e 6f 20 70 61 72 65 6e 74  ch has no parent
3a40: 2e 20 42 79 0a 09 23 20 63 68 65 63 6b 69 6e 67  . By..# checking
3a50: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 77   all revisions w
3a60: 65 20 65 6e 73 75 72 65 20 74 68 61 74 20 77 65  e ensure that we
3a70: 20 63 61 6e 20 64 65 74 65 63 74 20 61 6e 64 0a   can detect and.
3a80: 09 23 20 72 65 70 6f 72 74 20 74 68 65 20 63 61  .# report the ca
3a90: 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 72  se of multiple r
3aa0: 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74 20 74 68  oots. Without th
3ab0: 61 74 20 77 65 20 63 6f 75 6c 64 0a 09 23 20 73  at we could..# s
3ac0: 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e 65 20 72  imply take one r
3ad0: 65 76 69 73 69 6f 6e 20 61 6e 64 20 66 6f 6c 6c  evision and foll
3ae0: 6f 77 20 74 68 65 20 70 61 72 65 6e 74 20 6c 69  ow the parent li
3af0: 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65 69 72 20  nks to..# their 
3b00: 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a 0a 09 66  root (sic!)....f
3b10: 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 72 65  oreach {revnr re
3b20: 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79  v} [array get my
3b30: 72 65 76 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b  rev] {..    if {
3b40: 5b 24 72 65 76 20 68 61 73 70 61 72 65 6e 74 5d  [$rev hasparent]
3b50: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20  } continue..    
3b60: 69 66 20 7b 24 6d 79 72 6f 6f 74 20 6e 65 20 22  if {$myroot ne "
3b70: 22 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74  "} { trouble int
3b80: 65 72 6e 61 6c 20 22 4d 75 6c 74 69 70 6c 65 20  ernal "Multiple 
3b90: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66  root revisions f
3ba0: 6f 75 6e 64 22 20 7d 0a 09 20 20 20 20 73 65 74  ound" }..    set
3bb0: 20 6d 79 72 6f 6f 74 20 24 72 65 76 0a 09 7d 0a   myroot $rev..}.
3bc0: 0a 09 23 20 49 6e 20 74 68 65 20 66 75 74 75 72  ..# In the futur
3bd0: 65 20 77 65 20 61 6c 73 6f 20 6e 65 65 64 20 61  e we also need a
3be0: 20 6c 69 73 74 2c 20 61 73 20 62 72 61 6e 63 68   list, as branch
3bf0: 65 73 20 63 61 6e 20 62 65 63 6f 6d 65 0a 09 23  es can become..#
3c00: 20 73 65 76 65 72 65 64 20 66 72 6f 6d 20 74 68   severed from th
3c10: 65 69 72 20 70 61 72 65 6e 74 2c 20 6d 61 6b 69  eir parent, maki
3c20: 6e 67 20 74 68 65 6d 20 74 68 65 69 72 20 6f 77  ng them their ow
3c30: 6e 20 72 6f 6f 74 2e 0a 09 73 65 74 20 6d 79 72  n root...set myr
3c40: 6f 6f 74 73 20 5b 6c 69 73 74 20 24 6d 79 72 6f  oots [list $myro
3c50: 6f 74 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ot]..return.    
3c60: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65  }..    method De
3c70: 74 65 72 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f  termineRevisionO
3c80: 70 65 72 61 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09  perations {} {..
3c90: 66 6f 72 65 61 63 68 20 72 65 76 20 24 6d 79 72  foreach rev $myr
3ca0: 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 76 20  evisions { $rev 
3cb0: 64 65 74 65 72 6d 69 6e 65 6f 70 65 72 61 74 69  determineoperati
3cc0: 6f 6e 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  on }..return.   
3cd0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44   }..    method D
3ce0: 65 74 65 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44  etermineLinesOfD
3cf0: 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a  evelopment {} {.
3d00: 09 23 20 46 6f 72 20 72 65 76 69 73 69 6f 6e 73  .# For revisions
3d10: 20 74 68 69 73 20 68 61 73 20 62 65 65 6e 20 64   this has been d
3d20: 6f 6e 65 20 61 6c 72 65 61 64 79 2c 20 69 6e 20  one already, in 
3d30: 27 65 78 74 65 6e 64 27 2e 20 4e 6f 77 0a 09 23  'extend'. Now..#
3d40: 20 77 65 20 64 6f 20 74 68 69 73 20 66 6f 72 20   we do this for 
3d50: 74 68 65 20 62 72 61 6e 63 68 65 73 20 61 6e 64  the branches and
3d60: 20 74 61 67 73 2e 0a 0a 09 66 6f 72 65 61 63 68   tags....foreach
3d70: 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b 61 72 72   {_ branch} [arr
3d80: 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65  ay get mybranche
3d90: 73 5d 20 7b 0a 09 20 20 20 20 24 62 72 61 6e 63  s] {..    $branc
3da0: 68 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20  h setlod [$self 
3db0: 47 65 74 4c 4f 44 20 5b 24 62 72 61 6e 63 68 20  GetLOD [$branch 
3dc0: 70 61 72 65 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d  parentrevnr]]..}
3dd0: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61  ...foreach {_ ta
3de0: 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65  glist} [array ge
3df0: 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20  t mytags] {..   
3e00: 20 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61   foreach tag $ta
3e10: 67 6c 69 73 74 20 7b 0a 09 09 24 74 61 67 20 73  glist {...$tag s
3e20: 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74  etlod [$self Get
3e30: 4c 4f 44 20 5b 24 74 61 67 20 74 61 67 72 65 76  LOD [$tag tagrev
3e40: 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  nr]]..    }..}..
3e50: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
3e60: 20 20 6d 65 74 68 6f 64 20 47 65 74 4c 4f 44 20    method GetLOD 
3e70: 7b 72 65 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b  {revnr} {..if {[
3e80: 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72  rev istrunkrevnr
3e90: 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20   $revnr]} {..   
3ea0: 20 72 65 74 75 72 6e 20 24 6d 79 74 72 75 6e 6b   return $mytrunk
3eb0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20  ..} else {..    
3ec0: 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 52 65  return [$self Re
3ed0: 76 32 42 72 61 6e 63 68 20 24 72 65 76 6e 72 5d  v2Branch $revnr]
3ee0: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  ..}.    }..    m
3ef0: 65 74 68 6f 64 20 48 61 6e 64 6c 65 4e 6f 6e 54  ethod HandleNonT
3f00: 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e 63  runkDefaultBranc
3f10: 68 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c  h {} {..set revl
3f20: 69 73 74 20 5b 24 73 65 6c 66 20 4e 6f 6e 54 72  ist [$self NonTr
3f30: 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69  unkDefaultRevisi
3f40: 6f 6e 73 5d 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e  ons]..if {![llen
3f50: 67 74 68 20 24 72 65 76 6c 69 73 74 5d 7d 20 72  gth $revlist]} r
3f60: 65 74 75 72 6e 0a 0a 09 24 73 65 6c 66 20 41 64  eturn...$self Ad
3f70: 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61  justNonTrunkDefa
3f80: 75 6c 74 42 72 61 6e 63 68 20 24 72 65 76 6c 69  ultBranch $revli
3f90: 73 74 0a 09 24 73 65 6c 66 20 43 68 65 63 6b 4c  st..$self CheckL
3fa0: 4f 44 73 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ODs..return.    
3fb0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 4e 6f  }..    method No
3fc0: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 65 76  nTrunkDefaultRev
3fd0: 69 73 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46  isions {} {..# F
3fe0: 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20  rom cvs2svn the 
3ff0: 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e  following explan
4000: 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69  ation (with modi
4010: 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72  fications..# for
4020: 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a   our algorithm):
4030: 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 20 77  ...# Determine w
4040: 68 65 74 68 65 72 20 74 68 65 72 65 20 61 72 65  hether there are
4050: 20 61 6e 79 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64   any non-trunk d
4060: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23  efault branch..#
4070: 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20   revisions....# 
4080: 49 66 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64  If a non-trunk d
4090: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73  efault branch is
40a0: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 68   determined to h
40b0: 61 76 65 20 65 78 69 73 74 65 64 2c 0a 09 23 20  ave existed,..# 
40c0: 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66  return a list of
40d0: 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 61 6c 6c   objects for all
40e0: 20 72 65 76 69 73 69 6f 6e 73 20 74 68 61 74 20   revisions that 
40f0: 77 65 72 65 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e  were once..# non
4100: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 72  -trunk default r
4110: 65 76 69 73 69 6f 6e 73 2c 20 69 6e 20 64 65 70  evisions, in dep
4120: 65 6e 64 65 6e 63 79 20 6f 72 64 65 72 20 28 69  endency order (i
4130: 2e 65 2e 20 72 6f 6f 74 0a 09 23 20 66 69 72 73  .e. root..# firs
4140: 74 29 2e 0a 0a 09 23 20 54 68 65 72 65 20 61 72  t)....# There ar
4150: 65 20 74 77 6f 20 63 61 73 65 73 20 74 6f 20 68  e two cases to h
4160: 61 6e 64 6c 65 3a 0a 0a 09 23 20 4f 6e 65 20 63  andle:...# One c
4170: 61 73 65 20 69 73 20 73 69 6d 70 6c 65 2e 20 20  ase is simple.  
4180: 54 68 65 20 52 43 53 20 66 69 6c 65 20 6c 69 73  The RCS file lis
4190: 74 73 20 61 20 64 65 66 61 75 6c 74 20 62 72 61  ts a default bra
41a0: 6e 63 68 0a 09 23 20 65 78 70 6c 69 63 69 74 6c  nch..# explicitl
41b0: 79 20 69 6e 20 69 74 73 20 68 65 61 64 65 72 2c  y in its header,
41c0: 20 73 75 63 68 20 61 73 20 27 31 2e 31 2e 31 27   such as '1.1.1'
41d0: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
41e0: 20 77 65 0a 09 23 20 6b 6e 6f 77 20 74 68 61 74   we..# know that
41f0: 20 65 76 65 72 79 20 72 65 76 69 73 69 6f 6e 20   every revision 
4200: 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72  on the vendor br
4210: 61 6e 63 68 20 69 73 20 74 6f 20 62 65 0a 09 23  anch is to be..#
4220: 20 74 72 65 61 74 65 64 20 61 73 20 68 65 61 64   treated as head
4230: 20 6f 66 20 74 72 75 6e 6b 20 61 74 20 74 68 61   of trunk at tha
4240: 74 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e  t point in time.
4250: 0a 0a 09 23 20 42 75 74 20 74 68 65 72 65 27 73  ...# But there's
4260: 20 61 6c 73 6f 20 61 20 64 65 67 65 6e 65 72 61   also a degenera
4270: 74 65 20 63 61 73 65 2e 20 20 54 68 65 20 52 43  te case.  The RC
4280: 53 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 0a  S file does not.
4290: 09 23 20 63 75 72 72 65 6e 74 6c 79 20 68 61 76  .# currently hav
42a0: 65 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e  e a default bran
42b0: 63 68 2c 20 79 65 74 20 77 65 20 63 61 6e 20 64  ch, yet we can d
42c0: 65 64 75 63 65 20 74 68 61 74 20 66 6f 72 0a 09  educe that for..
42d0: 23 20 73 6f 6d 65 20 70 65 72 69 6f 64 20 69 6e  # some period in
42e0: 20 74 68 65 20 70 61 73 74 20 69 74 20 70 72 6f   the past it pro
42f0: 62 61 62 6c 79 20 2a 64 69 64 2a 20 68 61 76 65  bably *did* have
4300: 20 6f 6e 65 2e 20 20 46 6f 72 0a 09 23 20 65 78   one.  For..# ex
4310: 61 6d 70 6c 65 2c 20 74 68 65 20 66 69 6c 65 20  ample, the file 
4320: 68 61 73 20 76 65 6e 64 6f 72 20 72 65 76 69 73  has vendor revis
4330: 69 6f 6e 73 20 31 2e 31 2e 31 2e 31 20 2d 3e 20  ions 1.1.1.1 -> 
4340: 31 2e 31 2e 31 2e 39 36 2c 0a 09 23 20 61 6c 6c  1.1.1.96,..# all
4350: 20 6f 66 20 77 68 69 63 68 20 61 72 65 20 64 61   of which are da
4360: 74 65 64 20 62 65 66 6f 72 65 20 31 2e 32 2c 20  ted before 1.2, 
4370: 61 6e 64 20 74 68 65 6e 20 69 74 20 68 61 73 20  and then it has 
4380: 31 2e 31 2e 31 2e 39 37 0a 09 23 20 2d 3e 20 31  1.1.1.97..# -> 1
4390: 2e 31 2e 31 2e 31 30 30 20 64 61 74 65 64 20 61  .1.1.100 dated a
43a0: 66 74 65 72 20 31 2e 32 2e 20 20 49 6e 20 74 68  fter 1.2.  In th
43b0: 69 73 20 63 61 73 65 2c 20 77 65 20 73 68 6f 75  is case, we shou
43c0: 6c 64 0a 09 23 20 72 65 63 6f 72 64 20 31 2e 31  ld..# record 1.1
43d0: 2e 31 2e 39 36 20 61 73 20 74 68 65 20 6c 61 73  .1.96 as the las
43e0: 74 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f  t vendor revisio
43f0: 6e 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 74  n to have been t
4400: 68 65 0a 09 23 20 68 65 61 64 20 6f 66 20 74 68  he..# head of th
4410: 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  e default branch
4420: 2e 0a 0a 09 69 66 20 7b 24 6d 79 70 72 69 6e 63  ....if {$myprinc
4430: 69 70 61 6c 20 6e 65 20 22 22 7d 20 7b 0a 09 20  ipal ne ""} {.. 
4440: 20 20 20 23 20 54 68 65 72 65 20 69 73 20 73 74     # There is st
4450: 69 6c 6c 20 61 20 64 65 66 61 75 6c 74 20 62 72  ill a default br
4460: 61 6e 63 68 3b 20 74 68 61 74 20 6d 65 61 6e 73  anch; that means
4470: 20 74 68 61 74 20 61 6c 6c 0a 09 20 20 20 20 23   that all..    #
4480: 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68   revisions on th
4490: 61 74 20 62 72 61 6e 63 68 20 67 65 74 20 6d 61  at branch get ma
44a0: 72 6b 65 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20  rked....    log 
44b0: 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 46 6f  write 5 file "Fo
44c0: 75 6e 64 20 65 78 70 6c 69 63 69 74 6c 79 20 6d  und explicitly m
44d0: 61 72 6b 65 64 20 4e 54 44 42 22 0a 0a 09 20 20  arked NTDB"...  
44e0: 20 20 73 65 74 20 72 6e 65 78 74 20 5b 24 6d 79    set rnext [$my
44f0: 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20  root child]..   
4500: 20 69 66 20 7b 24 72 6e 65 78 74 20 6e 65 20 22   if {$rnext ne "
4510: 22 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 66  "} {...trouble f
4520: 61 74 61 6c 20 22 46 69 6c 65 20 77 69 74 68 20  atal "File with 
4530: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 24  default branch $
4540: 6d 79 70 72 69 6e 63 69 70 61 6c 20 61 6c 73 6f  myprincipal also
4550: 20 68 61 73 20 72 65 76 69 73 69 6f 6e 20 5b 24   has revision [$
4560: 72 6e 65 78 74 20 72 65 76 6e 72 5d 22 0a 09 09  rnext revnr]"...
4570: 72 65 74 75 72 6e 0a 09 20 20 20 20 7d 0a 0a 09  return..    }...
4580: 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 6d 79      set rev [$my
4590: 62 72 61 6e 63 68 65 73 28 24 6d 79 70 72 69 6e  branches($myprin
45a0: 63 69 70 61 6c 29 20 63 68 69 6c 64 5d 0a 09 20  cipal) child].. 
45b0: 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 0a 09     set res {}...
45c0: 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65 76 20      while {$rev 
45d0: 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65  ne ""} {...lappe
45e0: 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 73 65  nd res $rev...se
45f0: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c  t rev [$rev chil
4600: 64 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  d]..    }...    
4610: 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20  return $res...} 
4620: 65 6c 73 65 69 66 20 7b 24 6d 79 69 6d 70 6f 72  elseif {$myimpor
4630: 74 65 64 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f  ted} {..    # No
4640: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c   default branch,
4650: 20 62 75 74 20 74 68 65 20 66 69 6c 65 20 61 70   but the file ap
4660: 70 65 61 72 73 20 74 6f 20 68 61 76 65 20 62 65  pears to have be
4670: 65 6e 0a 09 20 20 20 20 23 20 69 6d 70 6f 72 74  en..    # import
4680: 65 64 2e 20 20 53 6f 20 6f 75 72 20 65 64 75 63  ed.  So our educ
4690: 61 74 65 64 20 67 75 65 73 73 20 69 73 20 74 68  ated guess is th
46a0: 61 74 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73  at all revisions
46b0: 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 65 20 27  ..    # on the '
46c0: 31 2e 31 2e 31 27 20 62 72 61 6e 63 68 20 77 69  1.1.1' branch wi
46d0: 74 68 20 74 69 6d 65 73 74 61 6d 70 73 20 70 72  th timestamps pr
46e0: 69 6f 72 20 74 6f 20 74 68 65 0a 09 20 20 20 20  ior to the..    
46f0: 23 20 74 69 6d 65 73 74 61 6d 70 20 6f 66 20 27  # timestamp of '
4700: 31 2e 32 27 20 77 65 72 65 20 6e 6f 6e 2d 74 72  1.2' were non-tr
4710: 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e  unk default bran
4720: 63 68 0a 09 20 20 20 20 23 20 72 65 76 69 73 69  ch..    # revisi
4730: 6f 6e 73 2e 0a 09 20 20 20 20 0a 09 20 20 20 20  ons...    ..    
4740: 23 20 54 68 69 73 20 72 65 61 6c 6c 79 20 6f 6e  # This really on
4750: 6c 79 20 70 72 6f 63 65 73 73 65 73 20 73 74 61  ly processes sta
4760: 6e 64 61 72 64 20 27 31 2e 31 2e 31 2e 2a 27 2d  ndard '1.1.1.*'-
4770: 73 74 79 6c 65 0a 09 20 20 20 20 23 20 76 65 6e  style..    # ven
4780: 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e 20 20  dor revisions.  
4790: 4f 6e 65 20 63 6f 75 6c 64 20 63 6f 6e 63 65 69  One could concei
47a0: 76 61 62 6c 79 20 68 61 76 65 20 61 20 66 69 6c  vably have a fil
47b0: 65 0a 09 20 20 20 20 23 20 77 68 6f 73 65 20 64  e..    # whose d
47c0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73  efault branch is
47d0: 20 31 2e 31 2e 33 20 6f 72 20 77 68 61 74 65 76   1.1.3 or whatev
47e0: 65 72 2c 20 6f 72 20 77 61 73 20 74 68 61 74 0a  er, or was that.
47f0: 09 20 20 20 20 23 20 61 74 20 73 6f 6d 65 20 70  .    # at some p
4800: 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 77 69  oint in time, wi
4810: 74 68 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69  th vendor revisi
4820: 6f 6e 73 20 31 2e 31 2e 33 2e 31 2c 0a 09 20 20  ons 1.1.3.1,..  
4830: 20 20 23 20 31 2e 31 2e 33 2e 32 2c 20 65 74 63    # 1.1.3.2, etc
4840: 2e 20 20 42 75 74 20 77 69 74 68 20 74 68 65 20  .  But with the 
4850: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 67  default branch g
4860: 6f 6e 65 20 6e 6f 77 2c 0a 09 20 20 20 20 23 20  one now,..    # 
4870: 77 65 27 64 20 68 61 76 65 20 6e 6f 20 62 61 73  we'd have no bas
4880: 69 73 20 66 6f 72 20 61 73 73 75 6d 69 6e 67 20  is for assuming 
4890: 74 68 61 74 20 74 68 65 20 6e 6f 6e 2d 73 74 61  that the non-sta
48a0: 6e 64 61 72 64 0a 09 20 20 20 20 23 20 76 65 6e  ndard..    # ven
48b0: 64 6f 72 20 62 72 61 6e 63 68 20 68 61 64 20 65  dor branch had e
48c0: 76 65 72 20 62 65 65 6e 20 74 68 65 20 64 65 66  ver been the def
48d0: 61 75 6c 74 20 62 72 61 6e 63 68 20 61 6e 79 77  ault branch anyw
48e0: 61 79 2e 0a 09 20 20 20 20 0a 09 20 20 20 20 23  ay...    ..    #
48f0: 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 72 65   Note that we re
4900: 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73 6f 6e  ly on comparison
4910: 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 69  s between the ti
4920: 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 20 23 20  mestamps..    # 
4930: 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73  of the revisions
4940: 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62   on the vendor b
4950: 72 61 6e 63 68 20 61 6e 64 20 74 68 61 74 20 6f  ranch and that o
4960: 66 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 6f  f..    # revisio
4970: 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 68 6f 75  n 1.2, even thou
4980: 67 68 20 74 68 65 20 74 69 6d 65 73 74 61 6d 70  gh the timestamp
4990: 73 20 6d 69 67 68 74 20 62 65 0a 09 20 20 20 20  s might be..    
49a0: 23 20 69 6e 63 6f 72 72 65 63 74 20 64 75 65 20  # incorrect due 
49b0: 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e 20 20  to clock skew.  
49c0: 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 20 73 6c  We could do a sl
49d0: 69 67 68 74 6c 79 0a 09 20 20 20 20 23 20 62 65  ightly..    # be
49e0: 74 74 65 72 20 6a 6f 62 20 69 66 20 77 65 20 75  tter job if we u
49f0: 73 65 64 20 74 68 65 20 63 68 61 6e 67 65 73 65  sed the changese
4a00: 74 20 74 69 6d 65 73 74 61 6d 70 73 2c 20 61 73  t timestamps, as
4a10: 20 69 74 20 69 73 0a 09 20 20 20 20 23 20 70 6f   it is..    # po
4a20: 73 73 69 62 6c 65 20 74 68 61 74 20 74 68 65 20  ssible that the 
4a30: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74 68 61  dependencies tha
4a40: 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20 20 20  t went into..   
4a50: 20 23 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 74   # determining t
4a60: 68 6f 73 65 20 74 69 6d 65 73 74 61 6d 70 73 20  hose timestamps 
4a70: 61 72 65 20 6d 6f 72 65 20 61 63 63 75 72 61 74  are more accurat
4a80: 65 2e 20 20 42 75 74 0a 09 20 20 20 20 23 20 74  e.  But..    # t
4a90: 68 61 74 20 77 6f 75 6c 64 20 72 65 71 75 69 72  hat would requir
4aa0: 65 20 61 6e 20 65 78 74 72 61 20 70 61 73 73 20  e an extra pass 
4ab0: 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20 69 66  or two....    if
4ac0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
4ad0: 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 2e 31  mybranches(1.1.1
4ae0: 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b 7d 20  )]} { return {} 
4af0: 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  }...    log writ
4b00: 65 20 35 20 66 69 6c 65 20 22 44 65 64 75 63 65  e 5 file "Deduce
4b10: 64 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 4e  d existence of N
4b20: 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 20 72  TDB"...    set r
4b30: 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 68 65 73  ev  [$mybranches
4b40: 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d 0a 09  (1.1.1) child]..
4b50: 20 20 20 20 73 65 74 20 72 65 73 20 20 7b 7d 0a      set res  {}.
4b60: 09 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 24  .    set stop [$
4b70: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 0a 09  myroot child]...
4b80: 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20 65 71      if {$stop eq
4b90: 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 74 20 65   ""} {...# Get e
4ba0: 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 65  verything on the
4bb0: 20 62 72 61 6e 63 68 0a 09 09 77 68 69 6c 65 20   branch...while 
4bc0: 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09  {$rev ne ""} {..
4bd0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
4be0: 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 74 20   $rev...    set 
4bf0: 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d  rev [$rev child]
4c00: 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73 65  ...}..    } else
4c10: 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74 20 65   {...# Collect e
4c20: 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 65  verything on the
4c30: 20 62 72 61 6e 63 68 20 77 68 69 63 68 20 73 65   branch which se
4c40: 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 09 23 20  ems to have...# 
4c50: 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64 20 62  been committed b
4c60: 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  efore the first 
4c70: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66  primary child of
4c80: 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 20 72 65   the...# root re
4c90: 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20 73 74  vision....set st
4ca0: 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 20 64 61  opdate [$stop da
4cb0: 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24 72 65  te]...while {$re
4cc0: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20  v ne ""} {...   
4cd0: 20 69 66 20 7b 5b 24 72 65 76 20 64 61 74 65 5d   if {[$rev date]
4ce0: 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d 20 62   >= $stopdate} b
4cf0: 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 70 70 65  reak...    lappe
4d00: 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 20 20  nd res $rev...  
4d10: 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20    set rev [$rev 
4d20: 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20  child]...}..    
4d30: 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20 24  }...    return $
4d40: 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  res...} else {..
4d50: 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a 09 7d      return {}..}
4d60: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 47 65  .    }..    # Ge
4d70: 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49 6e 20 74  neral note: In t
4d80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 65 74  he following met
4d90: 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20 6d 6f 64  hods we only mod
4da0: 69 66 79 20 74 68 65 20 6c 69 6e 6b 73 0a 20 20  ify the links.  
4db0: 20 20 23 20 62 65 74 77 65 65 6e 20 72 65 76 69    # between revi
4dc0: 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d 62 6f 6c  sions and symbol
4dd0: 73 20 74 6f 20 72 65 73 74 72 75 63 74 75 72 65  s to restructure
4de0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 20 20   the revision.  
4df0: 20 20 23 20 74 72 65 65 2e 20 57 65 20 64 6f 20    # tree. We do 
4e00: 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 6f 79 20  __not__ destroy 
4e10: 74 68 65 20 6f 62 6a 65 63 74 73 2e 20 47 69 76  the objects. Giv
4e20: 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65 78 20 6c  en the complex l
4e30: 69 6e 6b 73 0a 20 20 20 20 23 20 47 43 20 69 73  inks.    # GC is
4e40: 20 64 69 66 66 69 63 75 6c 74 20 61 74 20 74 68   difficult at th
4e50: 69 73 20 6c 65 76 65 6c 2e 20 49 74 20 69 73 20  is level. It is 
4e60: 6d 75 63 68 20 65 61 73 69 65 72 20 74 6f 20 64  much easier to d
4e70: 72 6f 70 0a 20 20 20 20 23 20 65 76 65 72 79 74  rop.    # everyt
4e80: 68 69 6e 67 20 77 68 65 6e 20 77 65 20 77 65 20  hing when we we 
4e90: 61 72 65 20 64 6f 6e 65 2e 20 54 68 69 73 20 68  are done. This h
4ea0: 61 70 70 65 6e 73 20 69 6e 20 27 64 72 6f 70 27  appens in 'drop'
4eb0: 2c 20 75 73 69 6e 67 0a 20 20 20 20 23 20 74 68  , using.    # th
4ec0: 65 20 73 74 61 74 65 20 76 61 72 69 61 62 6c 65  e state variable
4ed0: 20 27 6d 79 72 65 76 27 2c 20 27 6d 79 62 72 61   'myrev', 'mybra
4ee0: 6e 63 68 65 73 27 2c 20 61 6e 64 20 27 6d 79 74  nches', and 'myt
4ef0: 61 67 73 27 2e 20 57 68 61 74 20 77 65 0a 20 20  ags'. What we.  
4f00: 20 20 23 20 68 61 76 65 20 74 6f 20 70 65 72 73    # have to pers
4f10: 69 73 74 2c 20 70 65 72 66 6f 72 6d 65 64 20 62  ist, performed b
4f20: 79 20 27 70 65 72 73 69 73 74 27 2c 20 77 65 20  y 'persist', we 
4f30: 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a 20 20 20  know will be.   
4f40: 20 23 20 72 65 61 63 68 61 62 6c 65 20 74 68 72   # reachable thr
4f50: 6f 75 67 68 20 74 68 65 20 72 65 76 69 73 69 6f  ough the revisio
4f60: 6e 73 20 6c 69 73 74 65 64 20 69 6e 20 27 6d 79  ns listed in 'my
4f70: 72 6f 6f 74 73 27 20 61 6e 64 20 74 68 65 69 72  roots' and their
4f80: 0a 20 20 20 20 23 20 63 68 69 6c 64 72 65 6e 20  .    # children 
4f90: 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a 0a 20 20  and symbols...  
4fa0: 20 20 6d 65 74 68 6f 64 20 41 64 6a 75 73 74 4e    method AdjustN
4fb0: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72  onTrunkDefaultBr
4fc0: 61 6e 63 68 20 7b 72 65 76 6c 69 73 74 7d 20 7b  anch {revlist} {
4fd0: 0a 09 73 65 74 20 73 74 6f 70 20 5b 24 6d 79 72  ..set stop [$myr
4fe0: 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23 20 72 65  oot child] ;# re
4ff0: 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 20 77 72  v '1.2'...log wr
5000: 69 74 65 20 35 20 66 69 6c 65 20 22 41 64 6a 75  ite 5 file "Adju
5010: 73 74 69 6e 67 20 4e 54 44 42 20 63 6f 6e 74 61  sting NTDB conta
5020: 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c 65 6e  ining [nsp [llen
5030: 67 74 68 20 24 72 65 76 6c 69 73 74 5d 20 72 65  gth $revlist] re
5040: 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 46 72 6f  vision]"...# Fro
5050: 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f  m cvs2svn the fo
5060: 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74  llowing explanat
5070: 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69  ion (with modifi
5080: 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f  cations..# for o
5090: 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a  ur algorithm):..
50a0: 09 23 20 41 64 6a 75 73 74 20 74 68 65 20 6e 6f  .# Adjust the no
50b0: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20  n-trunk default 
50c0: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73  branch revisions
50d0: 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 09 23   found in the..#
50e0: 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a 09 23 20   'revlist'....# 
50f0: 27 6d 79 69 6d 70 6f 72 74 65 64 27 20 69 73 20  'myimported' is 
5100: 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 20 69  a boolean flag i
5110: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
5120: 72 20 74 68 69 73 20 66 69 6c 65 0a 09 23 20 61  r this file..# a
5130: 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 20 62  ppears to have b
5140: 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c 20 77 68  een imported, wh
5150: 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e 73 20 74  ich also means t
5160: 68 61 74 0a 09 23 20 72 65 76 69 73 69 6f 6e 20  hat..# revision 
5170: 31 2e 31 20 68 61 73 20 61 20 67 65 6e 65 72 61  1.1 has a genera
5180: 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  ted log message 
5190: 74 68 61 74 20 6e 65 65 64 20 6e 6f 74 20 62 65  that need not be
51a0: 0a 09 23 20 70 72 65 73 65 72 76 65 64 2e 20 20  ..# preserved.  
51b0: 27 72 65 76 6c 69 73 74 27 20 69 73 20 61 20 6c  'revlist' is a l
51c0: 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 20 72 65  ist of object re
51d0: 66 65 72 65 6e 63 65 73 20 66 6f 72 20 74 68 65  ferences for the
51e0: 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 74 68  ..# revisions th
51f0: 61 74 20 68 61 76 65 20 62 65 65 6e 20 64 65 74  at have been det
5200: 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 6e 6f  ermined to be no
5210: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 0a  n-trunk default.
5220: 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 69  .# branch revisi
5230: 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 74 68  ons....# Note th
5240: 61 74 20 74 68 65 20 66 69 72 73 74 20 72 65 76  at the first rev
5250: 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 64 65 66  ision on the def
5260: 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 0a 09  ault branch is..
5270: 23 20 68 61 6e 64 6c 65 64 20 73 74 72 61 6e 67  # handled strang
5280: 65 6c 79 20 62 79 20 43 56 53 2e 20 20 49 66 20  ely by CVS.  If 
5290: 61 20 66 69 6c 65 20 69 73 20 69 6d 70 6f 72 74  a file is import
52a0: 65 64 20 28 61 73 20 6f 70 70 6f 73 65 64 0a 09  ed (as opposed..
52b0: 23 20 74 6f 20 62 65 69 6e 67 20 61 64 64 65 64  # to being added
52c0: 29 2c 20 43 56 53 20 63 72 65 61 74 65 73 20 61  ), CVS creates a
52d0: 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 2c 20 74   1.1 revision, t
52e0: 68 65 6e 20 63 72 65 61 74 65 73 20 61 0a 09 23  hen creates a..#
52f0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 31   vendor branch 1
5300: 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e 20 31 2e  .1.1 based on 1.
5310: 31 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 20  1, then creates 
5320: 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20 72 65 76  a 1.1.1.1..# rev
5330: 69 73 69 6f 6e 20 74 68 61 74 20 69 73 20 69 64  ision that is id
5340: 65 6e 74 69 63 61 6c 20 74 6f 20 74 68 65 20 31  entical to the 1
5350: 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 69 2e 65  .1 revision (i.e
5360: 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c 74 61 74  ., its..# deltat
5370: 65 78 74 20 69 73 20 65 6d 70 74 79 29 2e 20 20  ext is empty).  
5380: 54 68 65 20 6c 6f 67 20 6d 65 73 73 61 67 65 20  The log message 
5390: 74 68 61 74 20 74 68 65 20 75 73 65 72 20 74 79  that the user ty
53a0: 70 65 64 0a 09 23 20 77 68 65 6e 20 69 6d 70 6f  ped..# when impo
53b0: 72 74 69 6e 67 20 69 73 20 73 74 6f 72 65 64 20  rting is stored 
53c0: 77 69 74 68 20 74 68 65 20 31 2e 31 2e 31 2e 31  with the 1.1.1.1
53d0: 20 72 65 76 69 73 69 6f 6e 2e 20 20 54 68 65 20   revision.  The 
53e0: 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20  1.1..# revision 
53f0: 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 73 20  always contains 
5400: 61 20 73 74 61 6e 64 61 72 64 2c 20 67 65 6e 65  a standard, gene
5410: 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67  rated log messag
5420: 65 2c 0a 09 23 20 27 49 6e 69 74 69 61 6c 20 72  e,..# 'Initial r
5430: 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a 09 23 20  evision\n'....# 
5440: 57 68 65 6e 20 77 65 20 64 65 74 65 63 74 20 61  When we detect a
5450: 20 73 74 72 61 69 67 68 74 66 6f 72 77 61 72 64   straightforward
5460: 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20 74 68 69   import like thi
5470: 73 2c 20 77 65 20 77 61 6e 74 0a 09 23 20 74 6f  s, we want..# to
5480: 20 68 61 6e 64 6c 65 20 69 74 20 62 79 20 64 65   handle it by de
5490: 6c 65 74 69 6e 67 20 74 68 65 20 31 2e 31 20 72  leting the 1.1 r
54a0: 65 76 69 73 69 6f 6e 20 28 77 68 69 63 68 20 64  evision (which d
54b0: 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e 74 61 69  oesn't..# contai
54c0: 6e 20 61 6e 79 20 75 73 65 66 75 6c 20 69 6e 66  n any useful inf
54d0: 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20 6d 61  ormation) and ma
54e0: 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20 69 6e 74  king 1.1.1.1 int
54f0: 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70 65 6e 64  o an..# independ
5500: 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74 68 65 20  ent root in the 
5510: 66 69 6c 65 27 73 20 64 65 70 65 6e 64 65 6e 63  file's dependenc
5520: 79 20 74 72 65 65 2e 20 20 49 6e 20 53 56 4e 2c  y tree.  In SVN,
5530: 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77 69 6c 6c  ..# 1.1.1.1 will
5540: 20 62 65 20 61 64 64 65 64 20 64 69 72 65 63 74   be added direct
5550: 6c 79 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72  ly to the vendor
5560: 20 62 72 61 6e 63 68 20 77 69 74 68 20 69 74 73   branch with its
5570: 0a 09 23 20 69 6e 69 74 69 61 6c 20 63 6f 6e 74  ..# initial cont
5580: 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e 20 61 20  ent.  Then in a 
5590: 73 70 65 63 69 61 6c 20 27 70 6f 73 74 2d 63 6f  special 'post-co
55a0: 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23 20 31 2e  mmit', the..# 1.
55b0: 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 69  1.1.1 revision i
55c0: 73 20 63 6f 70 69 65 64 20 62 61 63 6b 20 74 6f  s copied back to
55d0: 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 66 20 74   trunk....# If t
55e0: 68 65 20 75 73 65 72 20 69 6d 70 6f 72 74 73 20  he user imports 
55f0: 61 67 61 69 6e 20 74 6f 20 74 68 65 20 73 61 6d  again to the sam
5600: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c  e vendor branch,
5610: 20 74 68 65 6e 20 43 56 53 0a 09 23 20 63 72 65   then CVS..# cre
5620: 61 74 65 73 20 72 65 76 69 73 69 6f 6e 73 20 31  ates revisions 1
5630: 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 2e 33 2c  .1.1.2, 1.1.1.3,
5640: 20 65 74 63 2e 20 6f 6e 20 74 68 65 20 76 65 6e   etc. on the ven
5650: 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23 20 2a  dor branch,..# *
5660: 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e 74 65 72  without* counter
5670: 70 61 72 74 73 20 69 6e 20 74 72 75 6e 6b 20 28  parts in trunk (
5680: 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73  even though thes
5690: 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20 65  e revisions..# e
56a0: 66 66 65 63 74 69 76 65 6c 79 20 70 6c 61 79 20  ffectively play 
56b0: 74 68 65 20 72 6f 6c 65 20 6f 66 20 74 72 75 6e  the role of trun
56c0: 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e 20 20 53  k revisions).  S
56d0: 6f 20 61 66 74 65 72 20 77 65 20 61 64 64 0a 09  o after we add..
56e0: 23 20 73 75 63 68 20 72 65 76 69 73 69 6f 6e 73  # such revisions
56f0: 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 20 62   to the vendor b
5700: 72 61 6e 63 68 2c 20 77 65 20 61 6c 73 6f 20 63  ranch, we also c
5710: 6f 70 79 20 74 68 65 6d 20 62 61 63 6b 20 74 6f  opy them back to
5720: 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20 70 6f 73  ..# trunk in pos
5730: 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 23 20 57  t-commits....# W
5740: 65 20 6d 61 72 6b 20 74 68 65 20 72 65 76 69 73  e mark the revis
5750: 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 27 72  ions found in 'r
5760: 65 76 6c 69 73 74 27 20 61 73 20 64 65 66 61 75  evlist' as defau
5770: 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 76  lt branch..# rev
5780: 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f 2c 20 69  isions.  Also, i
5790: 66 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73  f the root revis
57a0: 69 6f 6e 20 68 61 73 20 61 20 70 72 69 6d 61 72  ion has a primar
57b0: 79 20 63 68 69 6c 64 0a 09 23 20 77 65 20 73 65  y child..# we se
57c0: 74 20 74 68 61 74 20 72 65 76 69 73 69 6f 6e 20  t that revision 
57d0: 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65  to depend on the
57e0: 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 6e 6b 20   last non-trunk 
57f0: 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61 6e 63  default..# branc
5800: 68 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 70  h revision and p
5810: 6f 73 73 69 62 6c 79 20 61 64 6a 75 73 74 20 69  ossibly adjust i
5820: 74 73 20 74 79 70 65 20 61 63 63 6f 72 64 69 6e  ts type accordin
5830: 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69 72 73 74  gly....set first
5840: 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c 69 73   [lindex $revlis
5850: 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65  t 0]...log write
5860: 20 36 20 66 69 6c 65 20 22 3c 5b 24 66 69 72 73   6 file "<[$firs
5870: 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78 70 72 20  t revnr]> [expr 
5880: 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 3f 20 22  {$myimported ? "
5890: 69 6d 70 6f 72 74 65 64 22 20 3a 20 22 6e 6f 74  imported" : "not
58a0: 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c 20 5b 24   imported"}], [$
58b0: 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d  first operation]
58c0: 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69 72 73 74  , [expr {[$first
58d0: 20 68 61 73 74 65 78 74 5d 20 3f 20 22 68 61 73   hastext] ? "has
58e0: 20 74 65 78 74 22 20 3a 20 22 6e 6f 20 74 65 78   text" : "no tex
58f0: 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 6d 79 69  t"}]"...if {$myi
5900: 6d 70 6f 72 74 65 64 20 26 26 0a 09 20 20 20 20  mported &&..    
5910: 5b 24 66 69 72 73 74 20 72 65 76 6e 72 5d 20 65  [$first revnr] e
5920: 71 20 22 31 2e 31 2e 31 2e 31 22 20 26 26 0a 09  q "1.1.1.1" &&..
5930: 20 20 20 20 5b 24 66 69 72 73 74 20 6f 70 65 72      [$first oper
5940: 61 74 69 6f 6e 5d 20 65 71 20 22 63 68 61 6e 67  ation] eq "chang
5950: 65 22 20 26 26 0a 09 20 20 20 20 21 5b 24 66 69  e" &&..    ![$fi
5960: 72 73 74 20 68 61 73 74 65 78 74 5d 7d 20 7b 0a  rst hastext]} {.
5970: 0a 09 20 20 20 20 73 65 74 20 72 65 76 31 31 20  ..    set rev11 
5980: 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 5d 20  [$first parent] 
5990: 3b 20 23 20 41 73 73 65 72 74 3a 20 53 68 6f 75  ; # Assert: Shou
59a0: 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e 0a 09 20  ld be myroot... 
59b0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 20 66     log write 3 f
59c0: 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 69 72  ile "Removing ir
59d0: 72 65 6c 65 76 61 6e 74 20 72 65 76 69 73 69 6f  relevant revisio
59e0: 6e 20 5b 24 72 65 76 31 31 20 72 65 76 6e 72 5d  n [$rev11 revnr]
59f0: 22 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75  "...    # Cut ou
5a00: 74 20 74 68 65 20 6f 6c 64 20 6d 79 72 6f 6f 74  t the old myroot
5a10: 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 20 20 20   revision....   
5a20: 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73   ldelete myroots
5a30: 20 24 72 65 76 31 31 20 3b 20 23 20 4e 6f 74 20   $rev11 ; # Not 
5a40: 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f 6e 67 65  a root any longe
5a50: 72 2e 0a 0a 09 20 20 20 20 24 66 69 72 73 74 20  r....    $first 
5a60: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 20 3b 20  cutfromparent ; 
5a70: 23 20 53 65 76 65 72 20 72 65 76 69 73 69 6f 6e  # Sever revision
5a80: 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 72 65 76   from parent rev
5a90: 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69 66 20 7b  ision...    if {
5aa0: 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b 0a 09  $stop ne ""} {..
5ab0: 09 24 73 74 6f 70 20 63 75 74 66 72 6f 6d 70 61  .$stop cutfrompa
5ac0: 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d  rent...lappend m
5ad0: 79 72 6f 6f 74 73 20 24 73 74 6f 70 20 3b 20 23  yroots $stop ; #
5ae0: 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66 74 65 72   New root, after
5af0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 0a 09   vendor branch..
5b00: 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 75      }...    # Cu
5b10: 74 20 6f 75 74 20 74 68 65 20 76 65 6e 64 6f 72  t out the vendor
5b20: 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 0a 0a   branch symbol..
5b30: 09 20 20 20 20 73 65 74 20 76 65 6e 64 6f 72 20  .    set vendor 
5b40: 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 62 72  [$first parentbr
5b50: 61 6e 63 68 5d 0a 09 20 20 20 20 69 66 20 7b 24  anch]..    if {$
5b60: 76 65 6e 64 6f 72 20 65 71 20 22 22 7d 20 7b 20  vendor eq ""} { 
5b70: 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c  trouble internal
5b80: 20 22 46 69 72 73 74 20 4e 54 44 42 20 72 65 76   "First NTDB rev
5b90: 69 73 69 6f 6e 20 68 61 73 20 6e 6f 20 62 72 61  ision has no bra
5ba0: 6e 63 68 22 20 7d 0a 09 20 20 20 20 69 66 20 7b  nch" }..    if {
5bb0: 5b 24 76 65 6e 64 6f 72 20 70 61 72 65 6e 74 5d  [$vendor parent]
5bc0: 20 65 71 20 24 72 65 76 31 31 7d 20 7b 0a 09 09   eq $rev11} {...
5bd0: 24 72 65 76 31 31 20 72 65 6d 6f 76 65 62 72 61  $rev11 removebra
5be0: 6e 63 68 20 20 20 20 20 20 20 20 24 76 65 6e 64  nch        $vend
5bf0: 6f 72 0a 09 09 24 72 65 76 31 31 20 72 65 6d 6f  or...$rev11 remo
5c00: 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20  vechildonbranch 
5c10: 24 66 69 72 73 74 0a 09 09 24 76 65 6e 64 6f 72  $first...$vendor
5c20: 20 63 75 74 63 68 69 6c 64 0a 09 09 24 66 69 72   cutchild...$fir
5c30: 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74  st cutfromparent
5c40: 62 72 61 6e 63 68 0a 09 09 6c 61 70 70 65 6e 64  branch...lappend
5c50: 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a   myroots $first.
5c60: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43  .    }...    # C
5c70: 68 61 6e 67 65 20 74 68 65 20 74 79 70 65 20 6f  hange the type o
5c80: 66 20 66 69 72 73 74 20 28 74 79 70 69 63 61 6c  f first (typical
5c90: 6c 79 20 66 72 6f 6d 20 43 68 61 6e 67 65 20 74  ly from Change t
5ca0: 6f 20 41 64 64 29 3a 0a 09 20 20 20 20 24 66 69  o Add):..    $fi
5cb0: 72 73 74 20 72 65 74 79 70 65 20 61 64 64 0a 0a  rst retype add..
5cc0: 09 20 20 20 20 23 20 4d 6f 76 65 20 61 6e 79 20  .    # Move any 
5cd0: 74 61 67 73 20 61 6e 64 20 62 72 61 6e 63 68 65  tags and branche
5ce0: 73 20 66 72 6f 6d 20 74 68 65 20 6f 6c 64 20 74  s from the old t
5cf0: 6f 20 74 68 65 20 6e 65 77 20 72 6f 6f 74 2e 0a  o the new root..
5d00: 09 20 20 20 20 24 72 65 76 31 31 20 6d 6f 76 65  .    $rev11 move
5d10: 73 79 6d 62 6f 6c 73 74 6f 20 24 66 69 72 73 74  symbolsto $first
5d20: 0a 09 7d 0a 0a 09 23 20 4d 61 72 6b 20 61 6c 6c  ..}...# Mark all
5d30: 20 74 68 65 20 73 70 65 63 69 61 6c 20 72 65 76   the special rev
5d40: 69 73 69 6f 6e 73 20 61 73 20 73 75 63 68 0a 09  isions as such..
5d50: 66 6f 72 65 61 63 68 20 72 65 76 20 24 72 65 76  foreach rev $rev
5d60: 6c 69 73 74 20 7b 0a 09 20 20 20 20 6c 6f 67 20  list {..    log 
5d70: 77 72 69 74 65 20 33 20 66 69 6c 65 20 22 52 65  write 3 file "Re
5d80: 76 69 73 69 6f 6e 20 6f 6e 20 64 65 66 61 75 6c  vision on defaul
5d90: 74 20 62 72 61 6e 63 68 3a 20 5b 24 72 65 76 20  t branch: [$rev 
5da0: 72 65 76 6e 72 5d 22 0a 09 20 20 20 20 24 72 65  revnr]"..    $re
5db0: 76 20 73 65 74 6f 6e 64 65 66 61 75 6c 74 62 72  v setondefaultbr
5dc0: 61 6e 63 68 20 31 0a 09 7d 0a 0a 09 69 66 20 7b  anch 1..}...if {
5dd0: 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b 0a 09  $stop ne ""} {..
5de0: 20 20 20 20 23 20 52 65 76 69 73 69 6f 6e 20 31      # Revision 1
5df0: 2e 32 20 6c 6f 67 69 63 61 6c 6c 79 20 66 6f 6c  .2 logically fol
5e00: 6c 6f 77 73 20 74 68 65 20 69 6d 70 6f 72 74 65  lows the importe
5e10: 64 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 20 20  d revisions,..  
5e20: 20 20 23 20 6e 6f 74 20 31 2e 31 2e 20 20 41 63    # not 1.1.  Ac
5e30: 63 6f 72 64 69 6e 67 6c 79 2c 20 63 6f 6e 6e 65  cordingly, conne
5e40: 63 74 20 69 74 20 74 6f 20 74 68 65 20 6c 61 73  ct it to the las
5e50: 74 20 4e 54 44 42 52 20 61 6e 64 0a 09 20 20 20  t NTDBR and..   
5e60: 20 23 20 70 6f 73 73 69 62 6c 79 20 63 68 61 6e   # possibly chan
5e70: 67 65 20 69 74 73 20 74 79 70 65 2e 0a 0a 09 20  ge its type.... 
5e80: 20 20 20 73 65 74 20 6c 61 73 74 20 5b 6c 69 6e     set last [lin
5e90: 64 65 78 20 24 72 65 76 6c 69 73 74 20 65 6e 64  dex $revlist end
5ea0: 5d 0a 09 20 20 20 20 24 73 74 6f 70 20 73 65 74  ]..    $stop set
5eb0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72  defaultbranchpar
5ec0: 65 6e 74 20 24 6c 61 73 74 20 3b 20 23 20 52 65  ent $last ; # Re
5ed0: 74 79 70 65 73 20 74 68 65 20 72 65 76 69 73 69  types the revisi
5ee0: 6f 6e 20 74 6f 6f 2e 0a 09 20 20 20 20 24 6c 61  on too...    $la
5ef0: 73 74 20 73 65 74 64 65 66 61 75 6c 74 62 72 61  st setdefaultbra
5f00: 6e 63 68 63 68 69 6c 64 20 20 24 73 74 6f 70 0a  nchchild  $stop.
5f10: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
5f20: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 43 68 65  ..    method Che
5f30: 63 6b 4c 4f 44 73 20 7b 7d 20 7b 0a 09 66 6f 72  ckLODs {} {..for
5f40: 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20  each {_ branch} 
5f50: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62 72   [array get mybr
5f60: 61 6e 63 68 65 73 5d 20 7b 20 24 62 72 61 6e 63  anches] { $branc
5f70: 68 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 66 6f  h checklod }..fo
5f80: 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 73 74  reach {_ taglist
5f90: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74  } [array get myt
5fa0: 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65  ags] {..    fore
5fb0: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74  ach tag $taglist
5fc0: 20 7b 20 24 74 61 67 20 63 68 65 63 6b 6c 6f 64   { $tag checklod
5fd0: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20   }..}..return.  
5fe0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
5ff0: 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 61 6e 74  RemoveIrrelevant
6000: 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09  Deletions {} {..
6010: 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20  # From cvs2svn: 
6020: 49 66 20 61 20 66 69 6c 65 20 69 73 20 61 64 64  If a file is add
6030: 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 2c 20  ed on a branch, 
6040: 74 68 65 6e 20 61 20 74 72 75 6e 6b 0a 09 23 20  then a trunk..# 
6050: 72 65 76 69 73 69 6f 6e 20 69 73 20 61 64 64 65  revision is adde
6060: 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  d at the same ti
6070: 6d 65 20 69 6e 20 74 68 65 20 27 44 65 61 64 27  me in the 'Dead'
6080: 20 73 74 61 74 65 2e 0a 09 23 20 54 68 69 73 20   state...# This 
6090: 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74  revision doesn't
60a0: 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73 65   do anything use
60b0: 66 75 6c 2c 20 73 6f 20 64 65 6c 65 74 65 20 69  ful, so delete i
60c0: 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f  t....foreach roo
60d0: 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a 09 20 20  t $myroots {..  
60e0: 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 69 73 6e    if {[$root isn
60f0: 65 65 64 65 64 5d 7d 20 63 6f 6e 74 69 6e 75 65  eeded]} continue
6100: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
6110: 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67  2 file "Removing
6120: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 64 65 61   unnecessary dea
6130: 64 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6f 6f  d revision [$roo
6140: 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 20 20  t revnr]"...    
6150: 23 20 52 65 6d 6f 76 65 20 61 73 20 72 6f 6f 74  # Remove as root
6160: 2c 20 6d 61 6b 65 20 69 74 73 20 63 68 69 6c 64  , make its child
6170: 20 6e 65 77 20 72 6f 6f 74 20 61 66 74 65 72 0a   new root after.
6180: 09 20 20 20 20 23 20 64 69 73 63 6f 6e 6e 65 63  .    # disconnec
6190: 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 74 68 65  ting it from the
61a0: 20 72 65 76 69 73 69 6f 6e 20 6a 75 73 74 20 67   revision just g
61b0: 6f 69 6e 67 20 61 77 61 79 2e 0a 0a 09 20 20 20  oing away....   
61c0: 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73   ldelete myroots
61d0: 20 24 72 6f 6f 74 0a 09 20 20 20 20 69 66 20 7b   $root..    if {
61e0: 5b 24 72 6f 6f 74 20 68 61 73 63 68 69 6c 64 5d  [$root haschild]
61f0: 7d 20 7b 0a 09 09 73 65 74 20 63 68 69 6c 64 20  } {...set child 
6200: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 09  [$root child]...
6210: 24 63 68 69 6c 64 20 63 75 74 66 72 6f 6d 70 61  $child cutfrompa
6220: 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d  rent...lappend m
6230: 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20  yroots $child.. 
6240: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 75 74     }...    # Cut
6250: 20 6f 75 74 20 74 68 65 20 62 72 61 6e 63 68 65   out the branche
6260: 73 20 73 70 61 77 6e 65 64 20 62 79 20 74 68 65  s spawned by the
6270: 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 62 65 0a   revision to be.
6280: 09 20 20 20 20 23 20 64 65 6c 65 74 65 64 2e 20  .    # deleted. 
6290: 49 66 20 74 68 65 20 62 72 61 6e 63 68 20 68 61  If the branch ha
62a0: 73 20 72 65 76 69 73 69 6f 6e 73 20 74 68 65 79  s revisions they
62b0: 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64 79 0a   should already.
62c0: 09 20 20 20 20 23 20 75 73 65 20 6f 70 65 72 61  .    # use opera
62d0: 74 69 6f 6e 20 27 61 64 64 27 2c 20 6e 6f 20 6e  tion 'add', no n
62e0: 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68  eed to change th
62f0: 61 74 2e 20 54 68 65 20 66 69 72 73 74 0a 09 20  at. The first.. 
6300: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 6f 6e     # revision on
6310: 20 65 61 63 68 20 62 72 61 6e 63 68 20 62 65 63   each branch bec
6320: 6f 6d 65 73 20 61 20 6e 65 77 20 61 6e 64 20 64  omes a new and d
6330: 69 73 63 6f 6e 6e 65 63 74 65 64 0a 09 20 20 20  isconnected..   
6340: 20 23 20 72 6f 6f 74 2e 0a 0a 09 20 20 20 20 66   # root....    f
6350: 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24  oreach branch [$
6360: 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b  root branches] {
6370: 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63 68  ...if {![$branch
6380: 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74   haschild]} cont
6390: 69 6e 75 65 0a 09 09 73 65 74 20 66 69 72 73 74  inue...set first
63a0: 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 5d   [$branch child]
63b0: 0a 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f  ...$first cutfro
63c0: 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 0a 09 09  mparentbranch...
63d0: 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61  $first cutfrompa
63e0: 72 65 6e 74 0a 09 09 24 62 72 61 6e 63 68 20 63  rent...$branch c
63f0: 75 74 63 68 69 6c 64 0a 09 09 6c 61 70 70 65 6e  utchild...lappen
6400: 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 74  d myroots $first
6410: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 24 72 6f  ..    }..    $ro
6420: 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e  ot removeallbran
6430: 63 68 65 73 0a 0a 09 20 20 20 20 23 20 54 61 67  ches...    # Tag
6440: 67 69 6e 67 20 61 20 64 65 61 64 20 72 65 76 69  ging a dead revi
6450: 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20  sion doesn't do 
6460: 61 6e 79 74 68 69 6e 67 2c 20 73 6f 20 72 65 6d  anything, so rem
6470: 6f 76 65 0a 09 20 20 20 20 23 20 61 6e 79 20 74  ove..    # any t
6480: 61 67 73 20 74 68 61 74 20 77 65 72 65 20 73 65  ags that were se
6490: 74 20 6f 6e 20 69 74 2e 0a 0a 09 20 20 20 20 24  t on it....    $
64a0: 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61  root removeallta
64b0: 67 73 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20  gs...    # This 
64c0: 63 61 6e 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20  can only happen 
64d0: 6f 6e 63 65 20 70 65 72 20 66 69 6c 65 2c 20 61  once per file, a
64e0: 6e 64 20 77 65 20 6d 69 67 68 74 20 68 61 76 65  nd we might have
64f0: 0a 09 20 20 20 20 23 20 6a 75 73 74 20 63 68 61  ..    # just cha
6500: 6e 67 65 64 20 6d 79 72 6f 6f 74 73 2c 20 73 6f  nged myroots, so
6510: 20 65 6e 64 20 74 68 65 20 6c 6f 6f 70 0a 09 20   end the loop.. 
6520: 20 20 20 62 72 65 61 6b 0a 09 7d 0a 09 72 65 74     break..}..ret
6530: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
6540: 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 6e 69 74  ethod RemoveInit
6550: 69 61 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 6f  ialBranchDeletio
6560: 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20  ns {} {..# From 
6570: 63 76 73 32 73 76 6e 3a 20 49 66 20 74 68 65 20  cvs2svn: If the 
6580: 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f  first revision o
6590: 6e 20 61 20 62 72 61 6e 63 68 20 69 73 20 61 6e  n a branch is an
65a0: 0a 09 23 20 75 6e 6e 65 63 65 73 73 61 72 79 20  ..# unnecessary 
65b0: 64 65 6c 65 74 65 2c 20 72 65 6d 6f 76 65 20 69  delete, remove i
65c0: 74 2e 0a 09 23 0a 09 23 20 49 66 20 61 20 66 69  t...#..# If a fi
65d0: 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e 20 61  le is added on a
65e0: 20 62 72 61 6e 63 68 20 28 77 68 65 74 68 65 72   branch (whether
65f0: 20 6f 72 20 6e 6f 74 20 69 74 20 61 6c 72 65 61   or not it alrea
6600: 64 79 0a 09 23 20 65 78 69 73 74 65 64 20 6f 6e  dy..# existed on
6610: 20 74 72 75 6e 6b 29 2c 20 74 68 65 6e 20 6e 65   trunk), then ne
6620: 77 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 43 56  w versions of CV
6630: 53 20 61 64 64 20 61 20 66 69 72 73 74 0a 09 23  S add a first..#
6640: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e   branch revision
6650: 20 69 6e 20 74 68 65 20 27 64 65 61 64 27 20 73   in the 'dead' s
6660: 74 61 74 65 20 28 74 6f 20 69 6e 64 69 63 61 74  tate (to indicat
6670: 65 20 74 68 61 74 20 74 68 65 0a 09 23 20 66 69  e that the..# fi
6680: 6c 65 20 64 69 64 20 6e 6f 74 20 65 78 69 73 74  le did not exist
6690: 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77   on the branch w
66a0: 68 65 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77  hen the branch w
66b0: 61 73 0a 09 23 20 63 72 65 61 74 65 64 29 20 66  as..# created) f
66c0: 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 73  ollowed by the s
66d0: 65 63 6f 6e 64 20 62 72 61 6e 63 68 20 72 65 76  econd branch rev
66e0: 69 73 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20  ision, which is 
66f0: 61 6e 0a 09 23 20 61 64 64 2e 20 20 57 68 65 6e  an..# add.  When
6700: 20 77 65 20 65 6e 63 6f 75 6e 74 65 72 20 74 68   we encounter th
6710: 69 73 20 73 69 74 75 61 74 69 6f 6e 2c 20 77 65  is situation, we
6720: 20 73 65 76 65 72 20 74 68 65 20 62 72 61 6e 63   sever the branc
6730: 68 0a 09 23 20 66 72 6f 6d 20 74 72 75 6e 6b 20  h..# from trunk 
6740: 61 6e 64 20 64 65 6c 65 74 65 20 74 68 65 20 66  and delete the f
6750: 69 72 73 74 20 62 72 61 6e 63 68 20 72 65 76 69  irst branch revi
6760: 73 69 6f 6e 2e 0a 0a 09 23 20 41 74 20 74 68 69  sion....# At thi
6770: 73 20 70 6f 69 6e 74 20 77 65 20 6d 61 79 20 68  s point we may h
6780: 61 76 65 20 61 6c 72 65 61 64 79 20 6d 75 6c 74  ave already mult
6790: 69 70 6c 65 20 72 6f 6f 74 73 20 69 6e 20 6d 79  iple roots in my
67a0: 72 6f 6f 74 73 2c 0a 09 23 20 77 65 20 68 61 76  roots,..# we hav
67b0: 65 20 74 6f 20 70 72 6f 63 65 73 73 20 74 68 65  e to process the
67c0: 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72 65 61 63 68  m all....foreach
67d0: 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e   root [$self Lin
67e0: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d  esOfDevelopment]
67f0: 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f   {..    if {[$ro
6800: 6f 74 20 69 73 6e 65 65 64 65 64 62 72 61 6e 63  ot isneededbranc
6810: 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  hdel]} continue.
6820: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 32  .    log write 2
6830: 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20   file "Removing 
6840: 75 6e 6e 65 63 65 73 73 61 72 79 20 69 6e 69 74  unnecessary init
6850: 69 61 6c 20 62 72 61 6e 63 68 20 64 65 6c 65 74  ial branch delet
6860: 65 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22  e [$root revnr]"
6870: 0a 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e 63  ...    set branc
6880: 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62  h [$root parentb
6890: 72 61 6e 63 68 5d 0a 09 20 20 20 20 73 65 74 20  ranch]..    set 
68a0: 70 61 72 65 6e 74 20 5b 24 72 6f 6f 74 20 70 61  parent [$root pa
68b0: 72 65 6e 74 5d 0a 09 20 20 20 20 73 65 74 20 63  rent]..    set c
68c0: 68 69 6c 64 20 20 5b 24 72 6f 6f 74 20 63 68 69  hild  [$root chi
68d0: 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74  ld]...    ldelet
68e0: 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a  e myroots $root.
68f0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 72  .    lappend myr
6900: 6f 6f 74 73 20 24 63 68 69 6c 64 0a 0a 09 20 20  oots $child...  
6910: 20 20 24 62 72 61 6e 63 68 20 63 75 74 63 68 69    $branch cutchi
6920: 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20 20  ld..    $child  
6930: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 0a 09  cutfromparent...
6940: 20 20 20 20 24 70 61 72 65 6e 74 20 72 65 6d 6f      $parent remo
6950: 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 20  vebranch        
6960: 24 62 72 61 6e 63 68 0a 09 20 20 20 20 24 70 61  $branch..    $pa
6970: 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c 64  rent removechild
6980: 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09  onbranch $root..
6990: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
69a0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 4c 69 6e 65  .    method Line
69b0: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b  sOfDevelopment {
69c0: 7d 20 7b 0a 09 23 20 44 65 74 65 72 6d 69 6e 65  } {..# Determine
69d0: 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 64 65   all lines of de
69e0: 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68  velopment for th
69f0: 65 20 66 69 6c 65 2e 20 54 68 69 73 20 61 72 65  e file. This are
6a00: 0a 09 23 20 74 68 65 20 6b 6e 6f 77 6e 20 72 6f  ..# the known ro
6a10: 6f 74 73 2c 20 61 6e 64 20 74 68 65 20 72 6f 6f  ots, and the roo
6a20: 74 20 6f 66 20 61 6c 6c 20 62 72 61 6e 63 68 65  t of all branche
6a30: 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 0a 09  s found on the..
6a40: 23 20 6c 69 6e 65 20 6f 66 20 70 72 69 6d 61 72  # line of primar
6a50: 79 20 63 68 69 6c 64 72 65 6e 2e 0a 0a 09 73 65  y children....se
6a60: 74 20 6c 6f 64 72 6f 6f 74 73 20 7b 7d 0a 09 66  t lodroots {}..f
6a70: 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79 72  oreach root $myr
6a80: 6f 6f 74 73 20 7b 0a 09 20 20 20 20 24 73 65 6c  oots {..    $sel
6a90: 66 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69 6e  f AddBranchedLin
6aa0: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20  esOfDevelopment 
6ab0: 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09  lodroots $root..
6ac0: 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 6f 64 72      lappend lodr
6ad0: 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 7d 0a 09 72  oots $root..}..r
6ae0: 65 74 75 72 6e 20 24 6c 6f 64 72 6f 6f 74 73 0a  eturn $lodroots.
6af0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
6b00: 64 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69 6e  d AddBranchedLin
6b10: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20  esOfDevelopment 
6b20: 7b 6c 76 20 72 6f 6f 74 7d 20 7b 0a 09 75 70 76  {lv root} {..upv
6b30: 61 72 20 31 20 24 6c 76 20 6c 6f 64 72 6f 6f 74  ar 1 $lv lodroot
6b40: 73 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20  s..while {$root 
6b50: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 66 6f  ne ""} {..    fo
6b60: 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72  reach branch [$r
6b70: 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a  oot branches] {.
6b80: 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63 68 20  ..if {![$branch 
6b90: 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69  haschild]} conti
6ba0: 6e 75 65 0a 09 09 73 65 74 20 63 68 69 6c 64 20  nue...set child 
6bb0: 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 5d 0a  [$branch child].
6bc0: 09 09 23 20 52 65 63 75 72 73 65 20 69 6e 74 6f  ..# Recurse into
6bd0: 20 74 68 65 20 62 72 61 6e 63 68 20 66 6f 72 20   the branch for 
6be0: 64 65 65 70 65 72 20 62 72 61 6e 63 68 65 73 2e  deeper branches.
6bf0: 0a 09 09 24 73 65 6c 66 20 41 64 64 42 72 61 6e  ...$self AddBran
6c00: 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c  chedLinesOfDevel
6c10: 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f 74 73 20  opment lodroots 
6c20: 24 63 68 69 6c 64 0a 09 09 6c 61 70 70 65 6e 64  $child...lappend
6c30: 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 6c 64   lodroots $child
6c40: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65 74  ..    }..    set
6c50: 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69   root [$root chi
6c60: 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  ld]..}..return. 
6c70: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
6c80: 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b   ExcludeNonTrunk
6c90: 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 7b 7d 20 7b  Information {} {
6ca0: 0a 09 23 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6e  ..# Remove all n
6cb0: 6f 6e 2d 74 72 75 6e 6b 20 62 72 61 6e 63 68 65  on-trunk branche
6cc0: 73 2c 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e  s, revisions, an
6cd0: 64 20 74 61 67 73 2e 20 57 65 20 64 6f 0a 09 23  d tags. We do..#
6ce0: 20 6b 65 65 70 20 74 68 65 20 74 61 67 73 20 77   keep the tags w
6cf0: 68 69 63 68 20 61 72 65 20 6f 6e 20 74 68 65 20  hich are on the 
6d00: 74 72 75 6e 6b 2e 0a 0a 09 73 65 74 20 6e 74 64  trunk....set ntd
6d10: 62 72 6f 6f 74 20 22 22 0a 09 66 6f 72 65 61 63  broot ""..foreac
6d20: 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69  h root [$self Li
6d30: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74  nesOfDevelopment
6d40: 5d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a  ] {..    # Note:
6d50: 20 48 65 72 65 20 74 68 65 20 6f 72 64 65 72 20   Here the order 
6d60: 6f 66 20 74 68 65 20 72 6f 6f 74 73 20 69 73 20  of the roots is 
6d70: 69 6d 70 6f 72 74 61 6e 74 2c 0a 09 20 20 20 20  important,..    
6d80: 23 20 69 2e 65 2e 20 74 68 61 74 20 77 65 20 67  # i.e. that we g
6d90: 65 74 20 74 68 65 6d 20 69 6e 20 64 65 70 74 68  et them in depth
6da0: 20 66 69 72 73 74 20 6f 72 64 65 72 2e 20 54 68   first order. Th
6db0: 69 73 20 65 6e 73 75 72 65 73 0a 09 20 20 20 20  is ensures..    
6dc0: 23 20 74 68 61 74 20 74 68 65 20 72 65 6d 6f 76  # that the remov
6dd0: 61 6c 20 6f 66 20 61 20 62 72 61 6e 63 68 20 68  al of a branch h
6de0: 61 70 70 65 6e 73 20 6f 6e 6c 79 20 61 66 74 65  appens only afte
6df0: 72 20 74 68 65 0a 09 20 20 20 20 23 20 62 72 61  r the..    # bra
6e00: 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 66 72  nches spawned fr
6e10: 6f 6d 20 69 74 20 77 65 72 65 20 72 65 6d 6f 76  om it were remov
6e20: 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 74 68  ed. Otherwise th
6e30: 65 0a 09 20 20 20 20 23 20 73 79 73 74 65 6d 20  e..    # system 
6e40: 6d 69 67 68 74 20 74 72 79 20 74 6f 20 61 63 63  might try to acc
6e50: 65 73 73 20 64 65 6c 65 74 65 64 20 6f 62 6a 65  ess deleted obje
6e60: 63 74 73 2e 0a 0a 09 20 20 20 20 23 20 44 6f 20  cts....    # Do 
6e70: 6e 6f 74 20 65 78 63 6c 75 64 65 20 74 68 65 20  not exclude the 
6e80: 74 72 75 6e 6b 2e 0a 09 20 20 20 20 69 66 20 7b  trunk...    if {
6e90: 5b 5b 24 72 6f 6f 74 20 6c 6f 64 5d 20 69 73 74  [[$root lod] ist
6ea0: 72 75 6e 6b 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  runk]} continue.
6eb0: 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 6c 75  .    $self Exclu
6ec0: 64 65 42 72 61 6e 63 68 20 24 72 6f 6f 74 20 6e  deBranch $root n
6ed0: 74 64 62 72 6f 6f 74 0a 09 7d 0a 0a 09 69 66 20  tdbroot..}...if 
6ee0: 7b 24 6e 74 64 62 72 6f 6f 74 20 6e 65 20 22 22  {$ntdbroot ne ""
6ef0: 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 47  } {..    $self G
6f00: 72 61 66 74 4e 54 44 42 32 54 72 75 6e 6b 20 24  raftNTDB2Trunk $
6f10: 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 09 72 65 74  ntdbroot..}..ret
6f20: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
6f30: 65 74 68 6f 64 20 45 78 63 6c 75 64 65 42 72 61  ethod ExcludeBra
6f40: 6e 63 68 20 7b 72 6f 6f 74 20 6e 76 7d 20 7b 0a  nch {root nv} {.
6f50: 09 23 20 45 78 63 6c 75 64 65 20 74 68 65 20 62  .# Exclude the b
6f60: 72 61 6e 63 68 2f 6c 6f 64 20 73 74 61 72 74 69  ranch/lod starti
6f70: 6e 67 20 61 74 20 72 6f 6f 74 2c 20 61 20 72 65  ng at root, a re
6f80: 76 69 73 69 6f 6e 2e 0a 09 23 0a 09 23 20 49 66  vision...#..# If
6f90: 20 74 68 65 20 4c 4f 44 20 73 74 61 72 74 73 20   the LOD starts 
6fa0: 77 69 74 68 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64  with non-trunk d
6fb0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65  efault branch re
6fc0: 76 69 73 69 6f 6e 73 2c 0a 09 23 20 77 65 20 6c  visions,..# we l
6fd0: 65 61 76 65 20 74 68 65 6d 20 69 6e 20 70 6c 61  eave them in pla
6fe0: 63 65 20 61 6e 64 20 64 6f 20 6e 6f 74 20 64 65  ce and do not de
6ff0: 6c 65 74 65 20 74 68 65 20 62 72 61 6e 63 68 2e  lete the branch.
7000: 20 49 6e 20 74 68 61 74 0a 09 23 20 63 61 73 65   In that..# case
7010: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 73 65 74   the command set
7020: 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 69  s the variable i
7030: 6e 20 4e 56 20 73 6f 20 74 68 61 74 20 77 65 20  n NV so that we 
7040: 63 61 6e 0a 09 23 20 6c 61 74 65 72 20 72 65 77  can..# later rew
7050: 6f 72 6b 20 74 68 65 73 65 20 72 65 76 69 73 6f  ork these reviso
7060: 6e 73 20 74 6f 20 62 65 20 70 75 72 65 6c 79 20  ns to be purely 
7070: 74 72 75 6e 6b 2e 0a 0a 09 69 66 20 7b 5b 24 72  trunk....if {[$r
7080: 6f 6f 74 20 69 73 6f 6e 64 65 66 61 75 6c 74 62  oot isondefaultb
7090: 72 61 6e 63 68 5d 7d 20 7b 0a 09 20 20 20 20 23  ranch]} {..    #
70a0: 20 48 61 6e 64 6c 69 6e 67 20 61 20 4e 54 44 42   Handling a NTDB
70b0: 2e 20 54 68 69 73 20 62 72 61 6e 63 68 20 6d 61  . This branch ma
70c0: 79 20 63 6f 6e 73 69 73 74 73 20 6e 6f 74 20 6f  y consists not o
70d0: 6e 6c 79 20 6f 66 0a 09 20 20 20 20 23 20 4e 54  nly of..    # NT
70e0: 44 42 20 72 65 76 69 73 69 6f 6e 73 2c 20 62 75  DB revisions, bu
70f0: 74 20 61 6c 73 6f 20 73 6f 6d 65 20 6e 6f 6e 2d  t also some non-
7100: 4e 54 44 42 2e 20 54 68 65 20 6c 61 74 74 65 72  NTDB. The latter
7110: 20 61 72 65 0a 09 20 20 20 20 23 20 74 72 75 6c   are..    # trul
7120: 79 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 61 6e  y on a branch an
7130: 64 20 68 61 76 65 20 74 6f 20 62 65 20 65 78 63  d have to be exc
7140: 6c 75 64 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f  luded. The follo
7150: 77 69 6e 67 0a 09 20 20 20 20 23 20 6c 6f 6f 70  wing..    # loop
7160: 20 64 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74   determines if t
7170: 68 65 72 65 20 61 72 65 20 73 75 63 68 20 72 65  here are such re
7180: 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 20 20 20 75  visions....    u
7190: 70 76 61 72 20 31 20 24 6e 76 20 6e 74 64 62 72  pvar 1 $nv ntdbr
71a0: 6f 6f 74 0a 09 20 20 20 20 73 65 74 20 6e 74 64  oot..    set ntd
71b0: 62 72 6f 6f 74 20 24 72 6f 6f 74 0a 09 20 20 20  broot $root..   
71c0: 20 24 72 6f 6f 74 20 63 75 74 66 72 6f 6d 70 61   $root cutfrompa
71d0: 72 65 6e 74 62 72 61 6e 63 68 0a 0a 09 20 20 20  rentbranch...   
71e0: 20 73 65 74 20 72 65 76 20 24 72 6f 6f 74 0a 09   set rev $root..
71f0: 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65 76 20      while {$rev 
7200: 6e 65 20 22 22 7d 20 7b 0a 09 09 24 72 65 76 20  ne ""} {...$rev 
7210: 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65  removeallbranche
7220: 73 0a 09 09 23 20 53 65 65 20 6e 6f 74 65 20 5b  s...# See note [
7230: 78 5d 2e 0a 0a 09 09 69 66 20 7b 5b 24 72 65 76  x].....if {[$rev
7240: 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e   isondefaultbran
7250: 63 68 5d 7d 20 7b 0a 09 09 20 20 20 20 73 65 74  ch]} {...    set
7260: 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64   rev [$rev child
7270: 5d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20  ]...} else {... 
7280: 20 20 20 62 72 65 61 6b 0a 09 09 7d 0a 09 20 20     break...}..  
7290: 20 20 7d 0a 0a 09 20 20 20 20 23 20 72 65 76 20    }...    # rev 
72a0: 6e 6f 77 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  now contains the
72b0: 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 54 44 42 20   first non-NTDB 
72c0: 72 65 76 69 73 69 6f 6e 20 61 66 74 65 72 20 74  revision after t
72d0: 68 65 0a 09 20 20 20 20 23 20 4e 54 44 42 2c 20  he..    # NTDB, 
72e0: 6f 72 20 69 73 20 65 6d 70 74 79 20 69 66 20 74  or is empty if t
72f0: 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 2e  here is no such.
7300: 20 49 66 20 77 65 20 68 61 76 65 20 73 6f 6d 65   If we have some
7310: 0a 09 20 20 20 20 23 20 74 68 65 79 20 68 61 76  ..    # they hav
7320: 65 20 74 6f 20 72 65 6d 6f 76 65 64 2e 0a 0a 09  e to removed....
7330: 20 20 20 20 69 66 20 7b 24 72 65 76 20 6e 65 20      if {$rev ne 
7340: 22 22 7d 20 20 7b 0a 09 09 73 65 74 20 6c 61 73  ""}  {...set las
7350: 74 6e 74 64 62 20 5b 24 72 65 76 20 70 61 72 65  tntdb [$rev pare
7360: 6e 74 5d 0a 09 09 24 6c 61 73 74 6e 74 64 62 20  nt]...$lastntdb 
7370: 63 75 74 66 72 6f 6d 63 68 69 6c 64 0a 09 09 77  cutfromchild...w
7380: 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22  hile {$rev ne ""
7390: 7d 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20 72  } {...    $rev r
73a0: 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09 09 20  emovealltags... 
73b0: 20 20 20 24 72 65 76 20 72 65 6d 6f 76 65 61 6c     $rev removeal
73c0: 6c 62 72 61 6e 63 68 65 73 0a 09 09 20 20 20 20  lbranches...    
73d0: 23 20 4e 6f 74 65 20 5b 78 5d 3a 20 57 65 20 6d  # Note [x]: We m
73e0: 61 79 20 73 74 69 6c 6c 20 68 61 76 65 20 68 61  ay still have ha
73f0: 64 20 62 72 61 6e 63 68 65 73 20 6f 6e 20 74 68  d branches on th
7400: 65 0a 09 09 20 20 20 20 23 20 72 65 76 69 73 69  e...    # revisi
7410: 6f 6e 2e 20 42 72 61 6e 63 68 65 73 20 77 69 74  on. Branches wit
7420: 68 6f 75 74 20 72 65 76 69 73 69 6f 6e 73 20 63  hout revisions c
7430: 6f 6d 6d 69 74 74 65 64 0a 09 09 20 20 20 20 23  ommitted...    #
7440: 20 6f 6e 20 74 68 65 6d 20 64 6f 20 6e 6f 74 20   on them do not 
7450: 73 68 6f 77 20 75 70 20 69 6e 20 74 68 65 20 6c  show up in the l
7460: 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 61 6b 61  ist of roots aka
7470: 0a 09 09 20 20 20 20 23 20 6c 69 6e 65 73 20 6f  ...    # lines o
7480: 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a 09  f development...
7490: 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72  .    set rev [$r
74a0: 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20  ev child]...}.. 
74b0: 20 20 20 7d 0a 09 20 20 20 20 72 65 74 75 72 6e     }..    return
74c0: 0a 09 7d 0a 0a 09 23 20 4e 6f 20 4e 54 44 42 20  ..}...# No NTDB 
74d0: 73 74 75 66 66 20 74 6f 20 64 65 61 6c 20 77 69  stuff to deal wi
74e0: 74 68 2e 20 46 69 72 73 74 20 64 65 6c 65 74 65  th. First delete
74f0: 20 74 68 65 20 62 72 61 6e 63 68 20 6f 62 6a 65   the branch obje
7500: 63 74 0a 09 23 20 69 74 73 65 6c 66 2c 20 61 66  ct..# itself, af
7510: 74 65 72 20 63 75 74 74 69 6e 67 20 61 6c 6c 20  ter cutting all 
7520: 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6e 6e  the various conn
7530: 65 63 74 69 6f 6e 73 2e 0a 0a 09 73 65 74 20 62  ections....set b
7540: 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 72  ranch [$root par
7550: 65 6e 74 62 72 61 6e 63 68 5d 0a 09 69 66 20 7b  entbranch]..if {
7560: 24 62 72 61 6e 63 68 20 6e 65 20 22 22 7d 20 7b  $branch ne ""} {
7570: 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e 63 68  ..    set branch
7580: 70 61 72 65 6e 74 20 5b 24 62 72 61 6e 63 68 20  parent [$branch 
7590: 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 24 62 72  parent]..    $br
75a0: 61 6e 63 68 70 61 72 65 6e 74 20 72 65 6d 6f 76  anchparent remov
75b0: 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 20 24  ebranch        $
75c0: 62 72 61 6e 63 68 0a 09 20 20 20 20 24 62 72 61  branch..    $bra
75d0: 6e 63 68 70 61 72 65 6e 74 20 72 65 6d 6f 76 65  nchparent remove
75e0: 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 72  childonbranch $r
75f0: 6f 6f 74 0a 09 7d 0a 0a 09 23 20 54 68 65 20 72  oot..}...# The r
7600: 6f 6f 74 20 69 73 20 6e 6f 20 73 75 63 68 20 61  oot is no such a
7610: 6e 79 20 6c 6f 6e 67 65 72 20 65 69 74 68 65 72  ny longer either
7620: 2e 0a 09 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f  ...ldelete myroo
7630: 74 73 20 24 72 6f 6f 74 0a 0a 09 23 20 4e 6f 77  ts $root...# Now
7640: 20 67 6f 20 74 68 72 6f 75 67 68 20 74 68 65 20   go through the 
7650: 6c 69 6e 65 20 61 6e 64 20 72 65 6d 6f 76 65 20  line and remove 
7660: 61 6c 6c 20 69 74 73 20 72 65 76 69 73 69 6f 6e  all its revision
7670: 73 2e 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f  s....while {$roo
7680: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20  t ne ""} {..    
7690: 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74  $root removeallt
76a0: 61 67 73 0a 09 20 20 20 20 24 72 6f 6f 74 20 72  ags..    $root r
76b0: 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 73  emoveallbranches
76c0: 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 53 65  ..    # Note: Se
76d0: 65 20 74 68 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a  e the note [x]..
76e0: 0a 09 20 20 20 20 23 20 46 72 6f 6d 20 63 76 73  ..    # From cvs
76f0: 32 73 76 6e 3a 20 49 66 20 74 68 69 73 20 69 73  2svn: If this is
7700: 20 74 68 65 20 6c 61 73 74 20 64 65 66 61 75 6c   the last defaul
7710: 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61 0a  t revision on a.
7720: 09 20 20 20 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b  .    # non-trunk
7730: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
7740: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 31 2e  followed by a 1.
7750: 32 20 72 65 76 69 73 69 6f 6e 2c 0a 09 20 20 20  2 revision,..   
7760: 20 23 20 74 68 65 6e 20 74 68 65 20 31 2e 32 20   # then the 1.2 
7770: 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 73  revision depends
7780: 20 6f 6e 20 74 68 69 73 20 6f 6e 65 2e 20 20 46   on this one.  F
7790: 49 58 4d 45 3a 20 49 74 20 69 73 0a 09 20 20 20  IXME: It is..   
77a0: 20 23 20 71 75 65 73 74 69 6f 6e 61 62 6c 65 20   # questionable 
77b0: 77 68 65 74 68 65 72 20 74 68 69 73 20 68 61 6e  whether this han
77c0: 64 6c 69 6e 67 20 69 73 20 63 6f 72 72 65 63 74  dling is correct
77d0: 2c 20 73 69 6e 63 65 20 74 68 65 0a 09 20 20 20  , since the..   
77e0: 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66   # non-trunk def
77f0: 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69  ault branch revi
7800: 73 69 6f 6e 73 20 61 66 66 65 63 74 20 74 72 75  sions affect tru
7810: 6e 6b 20 61 6e 64 0a 09 20 20 20 20 23 20 73 68  nk and..    # sh
7820: 6f 75 6c 64 20 74 68 65 72 65 66 6f 72 65 20 6e  ould therefore n
7830: 6f 74 20 6a 75 73 74 20 62 65 20 64 69 73 63 61  ot just be disca
7840: 72 64 65 64 20 65 76 65 6e 20 69 66 0a 09 20 20  rded even if..  
7850: 20 20 23 20 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c 79    # --trunk-only
7860: 2e 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f  ....    if {[$ro
7870: 6f 74 20 68 61 73 64 65 66 61 75 6c 74 62 72 61  ot hasdefaultbra
7880: 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 73  nchchild]} {...s
7890: 65 74 20 6e 74 64 62 63 68 69 6c 64 20 5b 24 72  et ntdbchild [$r
78a0: 6f 6f 74 20 64 65 66 61 75 6c 74 62 72 61 6e 63  oot defaultbranc
78b0: 68 63 68 69 6c 64 5d 0a 09 09 69 66 20 7b 5b 24  hchild]...if {[$
78c0: 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61 75 6c  ntdbchild defaul
78d0: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d 20 6e  tbranchparent] n
78e0: 65 20 24 6e 74 64 62 63 68 69 6c 64 7d 20 7b 0a  e $ntdbchild} {.
78f0: 09 09 20 20 20 20 74 72 6f 75 62 6c 65 20 69 6e  ..    trouble in
7900: 74 65 72 6e 61 6c 20 22 6e 74 64 62 20 2d 20 74  ternal "ntdb - t
7910: 72 75 6e 6b 20 6c 69 6e 6b 61 67 65 20 62 72 6f  runk linkage bro
7920: 6b 65 6e 22 0a 09 09 7d 0a 09 09 24 6e 74 64 62  ken"...}...$ntdb
7930: 63 68 69 6c 64 20 63 75 74 64 65 66 61 75 6c 74  child cutdefault
7940: 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 09 69  branchparent...i
7950: 66 20 7b 5b 24 6e 74 64 62 63 68 69 6c 64 20 68  f {[$ntdbchild h
7960: 61 73 70 61 72 65 6e 74 5d 7d 20 7b 0a 09 09 20  asparent]} {... 
7970: 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f     lappend myroo
7980: 74 73 20 5b 24 6e 74 64 62 63 68 69 6c 64 20 70  ts [$ntdbchild p
7990: 61 72 65 6e 74 5d 0a 09 09 7d 0a 09 20 20 20 20  arent]...}..    
79a0: 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74  }...    set root
79b0: 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09   [$root child]..
79c0: 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  }...return.    }
79d0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 47 72 61  ..    method Gra
79e0: 66 74 4e 54 44 42 32 54 72 75 6e 6b 20 7b 72 6f  ftNTDB2Trunk {ro
79f0: 6f 74 7d 20 7b 0a 09 23 20 57 65 20 63 61 6e 20  ot} {..# We can 
7a00: 6e 6f 77 20 67 72 61 66 74 20 74 68 65 20 6e 6f  now graft the no
7a10: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20  n-trunk default 
7a20: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73  branch revisions
7a30: 20 74 6f 0a 09 23 20 74 72 75 6e 6b 2e 20 54 68   to..# trunk. Th
7a40: 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64  ey should alread
7a50: 79 20 62 65 20 61 6c 6f 6e 65 20 6f 6e 20 61 20  y be alone on a 
7a60: 43 56 53 42 72 61 6e 63 68 2d 6c 65 73 73 0a 09  CVSBranch-less..
7a70: 23 20 62 72 61 6e 63 68 2e 0a 0a 09 69 66 20 7b  # branch....if {
7a80: 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74  [$root hasparent
7a90: 62 72 61 6e 63 68 5d 7d 20 7b 20 74 72 6f 75 62  branch]} { troub
7aa0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 4e 54 44  le internal "NTD
7ab0: 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73  B root still has
7ac0: 20 69 74 73 20 62 72 61 6e 63 68 20 73 79 6d 62   its branch symb
7ad0: 6f 6c 22 20 7d 0a 09 69 66 20 7b 5b 24 72 6f 6f  ol" }..if {[$roo
7ae0: 74 20 68 61 73 62 72 61 6e 63 68 65 73 5d 7d 20  t hasbranches]} 
7af0: 20 20 20 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e      { trouble in
7b00: 74 65 72 6e 61 6c 20 22 4e 54 44 42 20 72 6f 6f  ternal "NTDB roo
7b10: 74 20 73 74 69 6c 6c 20 68 61 73 20 73 70 61 77  t still has spaw
7b20: 6e 65 64 20 62 72 61 6e 63 68 65 73 22 20 7d 0a  ned branches" }.
7b30: 0a 09 73 65 74 20 6c 61 73 74 20 24 72 6f 6f 74  ..set last $root
7b40: 0a 09 77 68 69 6c 65 20 7b 5b 24 6c 61 73 74 20  ..while {[$last 
7b50: 68 61 73 63 68 69 6c 64 5d 7d 20 7b 73 65 74 20  haschild]} {set 
7b60: 6c 61 73 74 20 5b 24 6c 61 73 74 20 63 68 69 6c  last [$last chil
7b70: 64 5d 7d 0a 0a 09 69 66 20 7b 5b 24 6c 61 73 74  d]}...if {[$last
7b80: 20 68 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63   hasdefaultbranc
7b90: 68 63 68 69 6c 64 5d 7d 20 7b 0a 0a 09 20 20 20  hchild]} {...   
7ba0: 20 73 65 74 20 72 65 76 31 32 20 5b 24 6c 61 73   set rev12 [$las
7bb0: 74 20 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63  t defaultbranchc
7bc0: 68 69 6c 64 5d 0a 09 20 20 20 20 24 72 65 76 31  hild]..    $rev1
7bd0: 32 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e  2 cutdefaultbran
7be0: 63 68 70 61 72 65 6e 74 0a 09 20 20 20 20 24 6c  chparent..    $l
7bf0: 61 73 74 20 20 63 75 74 64 65 66 61 75 6c 74 62  ast  cutdefaultb
7c00: 72 61 6e 63 68 63 68 69 6c 64 0a 0a 09 20 20 20  ranchchild...   
7c10: 20 24 72 65 76 31 32 20 63 68 61 6e 67 65 70 61   $rev12 changepa
7c20: 72 65 6e 74 20 24 6c 61 73 74 0a 09 20 20 20 20  rent $last..    
7c30: 24 6c 61 73 74 20 20 63 68 61 6e 67 65 63 68 69  $last  changechi
7c40: 6c 64 20 24 72 65 76 31 32 0a 0a 09 20 20 20 20  ld $rev12...    
7c50: 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20  ldelete myroots 
7c60: 24 72 65 76 31 32 0a 0a 09 20 20 20 20 23 20 4e  $rev12...    # N
7c70: 6f 74 65 20 61 6e 64 20 72 65 6d 65 6d 62 65 72  ote and remember
7c80: 20 74 68 61 74 20 74 68 65 20 74 79 70 65 20 6f   that the type o
7c90: 66 20 72 65 76 31 32 20 77 61 73 20 61 6c 72 65  f rev12 was alre
7ca0: 61 64 79 0a 09 20 20 20 20 23 20 61 64 6a 75 73  ady..    # adjus
7cb0: 74 65 64 20 62 79 20 41 64 6a 75 73 74 4e 6f 6e  ted by AdjustNon
7cc0: 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e  TrunkDefaultBran
7cd0: 63 68 2c 20 73 6f 20 77 65 20 64 6f 6e 27 74 0a  ch, so we don't.
7ce0: 09 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 63  .    # have to c
7cf0: 68 61 6e 67 65 20 69 74 73 20 74 79 70 65 20 68  hange its type h
7d00: 65 72 65 2e 0a 09 7d 0a 0a 09 77 68 69 6c 65 20  ere...}...while 
7d10: 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a  {$root ne ""} {.
7d20: 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74 6f 6e  .    $root seton
7d30: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 30 0a  defaultbranch 0.
7d40: 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74 6c 6f  .    $root setlo
7d50: 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20  d $mytrunk..    
7d60: 66 6f 72 65 61 63 68 20 74 61 67 20 5b 24 72 6f  foreach tag [$ro
7d70: 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09 24 74 61  ot tags] {...$ta
7d80: 67 20 73 65 74 6c 6f 64 20 24 6d 79 74 72 75 6e  g setlod $mytrun
7d90: 6b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65  k..    }..    se
7da0: 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68  t root [$root ch
7db0: 69 6c 64 5d 0a 09 7d 0a 0a 20 20 20 20 20 20 20  ild]..}..       
7dc0: 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20   return.    }.. 
7dd0: 20 20 20 6d 65 74 68 6f 64 20 41 63 74 69 76 65     method Active
7de0: 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76 69 73   {} {..set revis
7df0: 69 6f 6e 73 20 7b 7d 0a 09 73 65 74 20 73 79 6d  ions {}..set sym
7e00: 62 6f 6c 73 20 20 20 7b 7d 0a 0a 09 66 6f 72 65  bols   {}...fore
7e10: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20  ach root [$self 
7e20: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
7e30: 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b  nt] {..    if {[
7e40: 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 62  $root hasparentb
7e50: 72 61 6e 63 68 5d 7d 20 7b 20 6c 61 70 70 65 6e  ranch]} { lappen
7e60: 64 20 73 79 6d 62 6f 6c 73 20 5b 24 72 6f 6f 74  d symbols [$root
7e70: 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 20 7d   parentbranch] }
7e80: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f  ..    while {$ro
7e90: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61  ot ne ""} {...la
7ea0: 70 70 65 6e 64 20 72 65 76 69 73 69 6f 6e 73 20  ppend revisions 
7eb0: 24 72 6f 6f 74 0a 09 09 66 6f 72 65 61 63 68 20  $root...foreach 
7ec0: 74 61 67 20 20 20 20 5b 24 72 6f 6f 74 20 74 61  tag    [$root ta
7ed0: 67 73 5d 20 20 20 20 20 7b 20 6c 61 70 70 65 6e  gs]     { lappen
7ee0: 64 20 73 79 6d 62 6f 6c 73 20 24 74 61 67 20 20  d symbols $tag  
7ef0: 20 20 7d 0a 09 09 66 6f 72 65 61 63 68 20 62 72    }...foreach br
7f00: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e  anch [$root bran
7f10: 63 68 65 73 5d 20 7b 20 6c 61 70 70 65 6e 64 20  ches] { lappend 
7f20: 73 79 6d 62 6f 6c 73 20 24 62 72 61 6e 63 68 20  symbols $branch 
7f30: 7d 0a 09 09 73 65 74 20 6c 6f 64 20 5b 24 72 6f  }...set lod [$ro
7f40: 6f 74 20 6c 6f 64 5d 0a 09 09 69 66 20 7b 21 5b  ot lod]...if {![
7f50: 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 7d 20 7b  $lod istrunk]} {
7f60: 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73   lappend symbols
7f70: 20 24 6c 6f 64 20 7d 0a 09 09 73 65 74 20 72 6f   $lod }...set ro
7f80: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d  ot [$root child]
7f90: 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74  ..    }..}...ret
7fa0: 75 72 6e 20 5b 6c 69 73 74 20 5b 6c 73 6f 72 74  urn [list [lsort
7fb0: 20 2d 75 6e 69 71 75 65 20 2d 64 69 63 74 20 24   -unique -dict $
7fc0: 72 65 76 69 73 69 6f 6e 73 5d 20 5b 6c 73 6f 72  revisions] [lsor
7fd0: 74 20 2d 75 6e 69 71 75 65 20 2d 64 69 63 74 20  t -unique -dict 
7fe0: 24 73 79 6d 62 6f 6c 73 5d 5d 0a 20 20 20 20 7d  $symbols]].    }
7ff0: 0a 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 67  ...    method Ag
8000: 67 72 65 67 61 74 65 53 79 6d 62 6f 6c 44 61 74  gregateSymbolDat
8010: 61 20 7b 7d 20 7b 0a 09 23 20 4e 6f 77 20 74 68  a {} {..# Now th
8020: 61 74 20 74 68 65 20 65 78 61 63 74 20 73 65 74  at the exact set
8030: 20 6f 66 20 72 65 76 69 73 69 6f 6e 73 20 28 61   of revisions (a
8040: 6e 64 20 74 68 72 6f 75 67 68 20 74 68 61 74 0a  nd through that.
8050: 09 23 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20  .# branches and 
8060: 74 61 67 73 29 20 69 73 20 6b 6e 6f 77 6e 20 77  tags) is known w
8070: 65 20 63 61 6e 20 75 70 64 61 74 65 20 74 68 65  e can update the
8080: 20 61 67 67 72 65 67 61 74 65 0a 09 23 20 73 79   aggregate..# sy
8090: 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 73 2e  mbol statistics.
80a0: 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20  ...foreach root 
80b0: 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65  [$self LinesOfDe
80c0: 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20  velopment] {..  
80d0: 20 20 73 65 74 20 6c 6f 64 20 5b 24 72 6f 6f 74    set lod [$root
80e0: 20 6c 6f 64 5d 0a 0a 09 20 20 20 20 23 20 4e 6f   lod]...    # No
80f0: 74 65 3a 20 49 66 20 74 68 65 20 4c 4f 44 20 69  te: If the LOD i
8100: 73 20 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20  s the trunk the 
8110: 63 6f 75 6e 74 2a 2c 20 65 74 63 2e 20 6d 65 74  count*, etc. met
8120: 68 6f 64 73 0a 09 20 20 20 20 23 20 77 69 6c 6c  hods..    # will
8130: 20 64 6f 20 6e 6f 74 68 69 6e 67 2c 20 61 73 20   do nothing, as 
8140: 69 74 20 69 73 20 61 6c 77 61 79 73 20 70 72 65  it is always pre
8150: 73 65 6e 74 20 28 63 61 6e 6e 6f 74 20 62 65 0a  sent (cannot be.
8160: 09 20 20 20 20 23 20 65 78 63 6c 75 64 65 64 29  .    # excluded)
8170: 2c 20 61 6e 64 20 69 73 20 61 6c 77 61 79 73 20  , and is always 
8180: 61 20 62 72 61 6e 63 68 20 74 6f 6f 2e 0a 0a 09  a branch too....
8190: 20 20 20 20 23 20 4c 69 6e 65 73 20 6f 66 20 64      # Lines of d
81a0: 65 76 65 6c 6f 70 6d 65 6e 74 20 63 6f 75 6e 74  evelopment count
81b0: 20 61 73 20 62 72 61 6e 63 68 65 73 20 61 6e 64   as branches and
81c0: 20 68 61 76 65 20 61 20 63 6f 6d 6d 69 74 0a 09   have a commit..
81d0: 20 20 20 20 23 20 6f 6e 20 74 68 65 6d 20 28 72      # on them (r
81e0: 6f 6f 74 29 2e 20 49 66 20 74 68 65 79 20 61 72  oot). If they ar
81f0: 65 20 73 74 69 6c 6c 20 61 74 74 61 63 68 65 64  e still attached
8200: 20 74 6f 20 61 20 74 72 65 65 20 77 65 0a 09 20   to a tree we.. 
8210: 20 20 20 23 20 68 61 76 65 20 74 6f 20 63 6f 6d     # have to com
8220: 70 75 74 65 20 61 6e 64 20 72 65 67 69 73 74 65  pute and registe
8230: 72 20 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e  r possible paren
8240: 74 73 2e 0a 0a 09 20 20 20 20 24 6c 6f 64 20 63  ts....    $lod c
8250: 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 20 20  ountasbranch..  
8260: 20 20 24 6c 6f 64 20 63 6f 75 6e 74 61 63 6f 6d    $lod countacom
8270: 6d 69 74 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24  mit...    if {[$
8280: 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 62 72  root hasparentbr
8290: 61 6e 63 68 5d 7d 20 7b 0a 09 09 23 20 4e 6f 74  anch]} {...# Not
82a0: 65 20 6c 6f 64 20 3d 3d 20 5b 24 72 6f 6f 74 20  e lod == [$root 
82b0: 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 09  parentbranch]...
82c0: 24 6c 6f 64 20 70 6f 73 73 69 62 6c 65 70 61 72  $lod possiblepar
82d0: 65 6e 74 73 0a 09 20 20 20 20 7d 20 65 6c 73 65  ents..    } else
82e0: 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75  if {![$lod istru
82f0: 6e 6b 5d 20 26 26 20 5b 24 72 6f 6f 74 20 69 73  nk] && [$root is
8300: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d  ondefaultbranch]
8310: 7d 20 7b 0a 09 09 23 20 54 68 69 73 20 69 73 20  } {...# This is 
8320: 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f  the root revisio
8330: 6e 20 6f 66 20 61 20 64 65 74 61 63 68 65 64 20  n of a detached 
8340: 4e 54 44 42 2e 20 57 65 0a 09 09 23 20 68 61 76  NTDB. We...# hav
8350: 65 20 74 6f 20 6d 61 6e 75 61 6c 6c 79 20 73 65  e to manually se
8360: 74 20 74 68 65 20 6f 6e 6c 79 20 70 6f 73 73 69  t the only possi
8370: 62 6c 65 20 70 61 72 65 6e 74 20 66 6f 72 0a 09  ble parent for..
8380: 09 23 20 74 68 69 73 20 4c 4f 44 2c 20 74 68 65  .# this LOD, the
8390: 20 74 72 75 6e 6b 20 69 74 73 65 6c 66 2e 0a 0a   trunk itself...
83a0: 09 09 5b 24 6c 6f 64 20 73 79 6d 62 6f 6c 5d 20  ..[$lod symbol] 
83b0: 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 20 24  possibleparent $
83c0: 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 0a  mytrunk..    }..
83d0: 09 20 20 20 20 23 20 46 6f 72 20 74 68 65 20 72  .    # For the r
83e0: 65 76 69 73 69 6f 6e 73 20 69 6e 20 74 68 65 20  evisions in the 
83f0: 6c 69 6e 65 20 77 65 20 72 65 67 69 73 74 65 72  line we register
8400: 20 74 68 65 69 72 20 62 72 61 6e 63 68 65 73 0a   their branches.
8410: 09 20 20 20 20 23 20 61 6e 64 20 74 61 67 73 20  .    # and tags 
8420: 61 73 20 62 6c 6f 63 6b 65 72 73 20 66 6f 72 20  as blockers for 
8430: 74 68 65 20 6c 6f 64 2c 20 61 6e 64 20 75 70 64  the lod, and upd
8440: 61 74 65 20 74 68 65 20 74 79 70 65 0a 09 20 20  ate the type..  
8450: 20 20 23 20 63 6f 75 6e 74 65 72 73 20 61 73 20    # counters as 
8460: 77 65 6c 6c 2e 20 41 73 20 62 72 61 6e 63 68 20  well. As branch 
8470: 73 79 6d 62 6f 6c 73 20 77 69 74 68 6f 75 74 20  symbols without 
8480: 63 6f 6d 6d 69 74 73 20 6f 6e 0a 09 20 20 20 20  commits on..    
8490: 23 20 74 68 65 6d 20 61 72 65 20 6e 6f 74 20 6c  # them are not l
84a0: 69 73 74 65 64 20 61 73 20 6c 69 6e 65 73 20 6f  isted as lines o
84b0: 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 77  f development, w
84c0: 65 20 68 61 76 65 20 74 6f 0a 09 20 20 20 20 23  e have to..    #
84d0: 20 63 6f 75 6e 74 20 74 68 65 6d 20 68 65 72 65   count them here
84e0: 20 61 73 20 77 65 6c 6c 2c 20 61 73 20 70 6c 61   as well, as pla
84f0: 69 6e 20 62 72 61 6e 63 68 65 73 2e 20 41 74 20  in branches. At 
8500: 6c 61 73 74 20 77 65 0a 09 20 20 20 20 23 20 68  last we..    # h
8510: 61 76 65 20 74 6f 20 63 6f 6d 70 75 74 65 20 61  ave to compute a
8520: 6e 64 20 72 65 67 69 73 74 65 72 20 74 68 65 20  nd register the 
8530: 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73  possible parents
8540: 20 6f 66 20 74 68 65 0a 09 20 20 20 20 23 20 74   of the..    # t
8550: 61 67 73 2c 20 69 6e 20 63 61 73 65 20 74 68 65  ags, in case the
8560: 79 20 61 72 65 20 6c 61 74 65 72 20 63 6f 6e 76  y are later conv
8570: 65 72 74 65 64 20 61 73 20 62 72 61 6e 63 68 65  erted as branche
8580: 73 2e 0a 0a 09 20 20 20 20 77 68 69 6c 65 20 7b  s....    while {
8590: 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09  $root ne ""} {..
85a0: 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20  .foreach branch 
85b0: 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d  [$root branches]
85c0: 20 7b 0a 09 09 20 20 20 20 24 6c 6f 64 20 62 6c   {...    $lod bl
85d0: 6f 63 6b 65 64 62 79 20 24 62 72 61 6e 63 68 0a  ockedby $branch.
85e0: 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 70 6f  ..    $branch po
85f0: 73 73 69 62 6c 65 70 61 72 65 6e 74 73 0a 09 09  ssibleparents...
8600: 20 20 20 20 69 66 20 7b 5b 24 62 72 61 6e 63 68      if {[$branch
8610: 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74   haschild]} cont
8620: 69 6e 75 65 0a 09 09 20 20 20 20 24 62 72 61 6e  inue...    $bran
8630: 63 68 20 63 6f 75 6e 74 61 73 62 72 61 6e 63 68  ch countasbranch
8640: 0a 09 09 7d 0a 0a 09 09 66 6f 72 65 61 63 68 20  ...}....foreach 
8650: 74 61 67 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d  tag [$root tags]
8660: 20 7b 0a 09 09 20 20 20 20 24 6c 6f 64 20 62 6c   {...    $lod bl
8670: 6f 63 6b 65 64 62 79 20 24 74 61 67 0a 09 09 20  ockedby $tag... 
8680: 20 20 20 24 74 61 67 20 70 6f 73 73 69 62 6c 65     $tag possible
8690: 70 61 72 65 6e 74 73 0a 09 09 20 20 20 20 24 74  parents...    $t
86a0: 61 67 20 63 6f 75 6e 74 61 73 74 61 67 0a 09 09  ag countastag...
86b0: 7d 0a 0a 09 09 73 65 74 20 72 6f 6f 74 20 5b 24  }....set root [$
86c0: 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20  root child]..   
86d0: 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20   }..}...return. 
86e0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23     }..    # # ##
86f0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
8700: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
8710: 23 0a 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75  #.    ## Configu
8720: 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67  ration..    prag
8730: 6d 61 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20  ma -hastypeinfo 
8740: 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79     no  ; # no ty
8750: 70 65 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e  pe introspection
8760: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73  .    pragma -has
8770: 69 6e 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20  info        no  
8780: 3b 20 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e  ; # no object in
8790: 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20  trospection.    
87a0: 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 6d  pragma -hastypem
87b0: 65 74 68 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74  ethods no  ; # t
87c0: 79 70 65 20 69 73 20 6e 6f 74 20 72 65 6c 65 76  ype is not relev
87d0: 61 6e 74 2e 0a 0a 20 20 20 20 23 20 23 20 23 23  ant...    # # ##
87e0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
87f0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
8800: 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65  #.}..namespace e
8810: 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  val ::vc::fossil
8820: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a  ::import::cvs {.
8830: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78      namespace ex
8840: 70 6f 72 74 20 66 69 6c 65 0a 20 20 20 20 6e 61  port file.    na
8850: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 66 69 6c  mespace eval fil
8860: 65 20 7b 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f  e {..# Import no
8870: 74 20 72 65 71 75 69 72 65 64 2c 20 61 6c 72 65  t required, alre
8880: 61 64 79 20 61 20 63 68 69 6c 64 20 6e 61 6d 65  ady a child name
8890: 73 70 61 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70  space...# namesp
88a0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
88b0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
88c0: 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a  :cvs::file::rev.
88d0: 09 23 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  .# namespace imp
88e0: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  ort ::vc::fossil
88f0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66  ::import::cvs::f
8900: 69 6c 65 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70  ile::sym..namesp
8910: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
8920: 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a  :tools::misc::*.
8930: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
8940: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74  t ::vc::tools::t
8950: 72 6f 75 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63  rouble..namespac
8960: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74  e import ::vc::t
8970: 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73  ools::log..names
8980: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63  pace import ::vc
8990: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
89a0: 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 20 20 20  ::cvs::state.   
89b0: 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23   }.}..# # ## ###
89c0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
89d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23  ############# ##
89e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
89f0: 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61  ###.## Ready..pa
8a00: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 63  ckage provide vc
8a10: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
8a20: 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a  ::cvs::file 1.0.
8a30: 72 65 74 75 72 6e 0a                             return.