Hex Artifact Content
Not logged in

Artifact a0a48d681efabeb95ae5e8d59aeb112ddf404678:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [38b967dcf5] - Merge aku's CVS import changes into the main line. Fix a small bug in diff.c. by drh on 2007-11-17 00:29:42. Also file tools/cvs2fossil/lib/c2f_file.tcl part of check-in [6f8667b03e] - Added code creating aggregate symbol statistics. This completes pass 2 (CollRev). by aku on 2007-10-31 03:44:01.

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 0a 0a 09 20 20  ents..    }...  
82e0: 20 20 23 20 46 6f 72 20 74 68 65 20 72 65 76 69    # For the revi
82f0: 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 6e  sions in the lin
8300: 65 20 77 65 20 72 65 67 69 73 74 65 72 20 74 68  e we register th
8310: 65 69 72 20 62 72 61 6e 63 68 65 73 0a 09 20 20  eir branches..  
8320: 20 20 23 20 61 6e 64 20 74 61 67 73 20 61 73 20    # and tags as 
8330: 62 6c 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 65  blockers for the
8340: 20 6c 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 65   lod, and update
8350: 20 74 68 65 20 74 79 70 65 0a 09 20 20 20 20 23   the type..    #
8360: 20 63 6f 75 6e 74 65 72 73 20 61 73 20 77 65 6c   counters as wel
8370: 6c 2e 20 41 73 20 62 72 61 6e 63 68 20 73 79 6d  l. As branch sym
8380: 62 6f 6c 73 20 77 69 74 68 6f 75 74 20 63 6f 6d  bols without com
8390: 6d 69 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 74  mits on..    # t
83a0: 68 65 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 74  hem are not list
83b0: 65 64 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 64  ed as lines of d
83c0: 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 68  evelopment, we h
83d0: 61 76 65 20 74 6f 0a 09 20 20 20 20 23 20 63 6f  ave to..    # co
83e0: 75 6e 74 20 74 68 65 6d 20 68 65 72 65 20 61 73  unt them here as
83f0: 20 77 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e 20   well, as plain 
8400: 62 72 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 73  branches. At las
8410: 74 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 65  t we..    # have
8420: 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20   to compute and 
8430: 72 65 67 69 73 74 65 72 20 74 68 65 20 70 6f 73  register the pos
8440: 73 69 62 6c 65 20 70 61 72 65 6e 74 73 20 6f 66  sible parents of
8450: 20 74 68 65 0a 09 20 20 20 20 23 20 74 61 67 73   the..    # tags
8460: 2c 20 69 6e 20 63 61 73 65 20 74 68 65 79 20 61  , in case they a
8470: 72 65 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 74  re later convert
8480: 65 64 20 61 73 20 62 72 61 6e 63 68 65 73 2e 0a  ed as branches..
8490: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f  ..    while {$ro
84a0: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 6f  ot ne ""} {...fo
84b0: 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72  reach branch [$r
84c0: 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a  oot branches] {.
84d0: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b  ..    $lod block
84e0: 65 64 62 79 20 24 62 72 61 6e 63 68 0a 09 09 20  edby $branch... 
84f0: 20 20 20 24 62 72 61 6e 63 68 20 70 6f 73 73 69     $branch possi
8500: 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20  bleparents...   
8510: 20 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61   if {[$branch ha
8520: 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75  schild]} continu
8530: 65 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20  e...    $branch 
8540: 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 09  countasbranch...
8550: 7d 0a 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67  }....foreach tag
8560: 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a   [$root tags] {.
8570: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b  ..    $lod block
8580: 65 64 62 79 20 24 74 61 67 0a 09 09 20 20 20 20  edby $tag...    
8590: 24 74 61 67 20 70 6f 73 73 69 62 6c 65 70 61 72  $tag possiblepar
85a0: 65 6e 74 73 0a 09 09 20 20 20 20 24 74 61 67 20  ents...    $tag 
85b0: 63 6f 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a 0a  countastag...}..
85c0: 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f  ..set root [$roo
85d0: 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a  t child]..    }.
85e0: 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  .}...return.    
85f0: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  }..    # # ## ##
8600: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
8610: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
8620: 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74     ## Configurat
8630: 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20  ion..    pragma 
8640: 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20  -hastypeinfo    
8650: 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20  no  ; # no type 
8660: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20  introspection.  
8670: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66    pragma -hasinf
8680: 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23  o        no  ; #
8690: 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f   no object intro
86a0: 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61  spection.    pra
86b0: 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68  gma -hastypemeth
86c0: 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65  ods no  ; # type
86d0: 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74   is not relevant
86e0: 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  ...    # # ## ##
86f0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
8700: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d   #############.}
8710: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
8720: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
8730: 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20  mport::cvs {.   
8740: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72   namespace expor
8750: 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 73  t file.    names
8760: 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 7b  pace eval file {
8770: 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 72  ..# Import not r
8780: 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 79  equired, already
8790: 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 61   a child namespa
87a0: 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 65  ce...# namespace
87b0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
87c0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
87d0: 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 20  s::file::rev..# 
87e0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
87f0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
8800: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65  mport::cvs::file
8810: 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 65  ::sym..namespace
8820: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f   import ::vc::to
8830: 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61  ols::misc::*..na
8840: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
8850: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75  :vc::tools::trou
8860: 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69  ble..namespace i
8870: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c  mport ::vc::tool
8880: 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 63  s::log..namespac
8890: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
88a0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
88b0: 76 73 3a 3a 73 74 61 74 65 0a 20 20 20 20 7d 0a  vs::state.    }.
88c0: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  }..# # ## ### ##
88d0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
88e0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
88f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8900: 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61  .## Ready..packa
8910: 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66  ge provide vc::f
8920: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
8930: 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a 72 65 74  vs::file 1.0.ret
8940: 75 72 6e 0a                                      urn.