Hex Artifact Content
Not logged in

Artifact 26e48dda4d0560b190831de1450ad0e47e57b76d:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [510cd02303] - Continued the work on pass II, wrangling a file into shape. Completed handling of unnecessary initial deletions on branches. by aku on 2007-10-19 07:23:57.

0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23  ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69  07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66  es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65  tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69  d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e  n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20  SE, which.# you 
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65  should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ived as part of 
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f  this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74  n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72   voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79  ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75   many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20  als.  For exact 
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73  contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65  tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79  vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c   and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66  able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e  ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23  com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 46 69 6c  ########..## Fil
0200: 65 2c 20 70 61 72 74 20 6f 66 20 61 20 70 72 6f  e, part of a pro
0210: 6a 65 63 74 2c 20 70 61 72 74 20 6f 66 20 61 20  ject, part of a 
0220: 43 56 53 20 72 65 70 6f 73 69 74 6f 72 79 2e 20  CVS repository. 
0230: 4d 75 6c 74 69 70 6c 65 0a 23 23 20 69 6e 73 74  Multiple.## inst
0240: 61 6e 63 65 73 20 61 72 65 20 70 6f 73 73 69 62  ances are possib
0250: 6c 65 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20  le...# # ## ### 
0260: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
0270: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
0280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0290: 23 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e  ##.## Requiremen
02a0: 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ts..package requ
02b0: 69 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20  ire Tcl 8.4     
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 20 20 20 20 20 20 20 20 3b 20 23 20 52 65 71 75          ; # Requ
02e0: 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61  ired runtime..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 6e  ckage require sn
0300: 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  it              
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0320: 20 20 3b 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e    ; # OO system.
0330: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
0340: 20 73 74 72 75 63 74 3a 3a 73 65 74 20 20 20 20   struct::set    
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0360: 20 20 20 20 20 3b 20 23 20 53 65 74 20 6f 70 65       ; # Set ope
0370: 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65  rations..package
0380: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
0390: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
03a0: 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 20 3b 20 23  ::file::rev  ; #
03b0: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 72 65   CVS per file re
03c0: 76 69 73 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65  visions..package
03d0: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
03e0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
03f0: 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 3b 20 23  ::file::sym  ; #
0400: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 73 79   CVS per file sy
0410: 6d 62 6f 6c 73 2e 0a 70 61 63 6b 61 67 65 20 72  mbols..package r
0420: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73  equire vc::tools
0430: 3a 3a 74 72 6f 75 62 6c 65 20 20 20 20 20 20 20  ::trouble       
0440: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 45             ; # E
0450: 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e 0a  rror reporting..
0460: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0470: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 20  vc::tools::log  
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0490: 20 20 20 20 3b 20 23 20 55 73 65 72 20 66 65 65      ; # User fee
04a0: 64 62 61 63 6b 0a 70 61 63 6b 61 67 65 20 72 65  dback.package re
04b0: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a  quire vc::tools:
04c0: 3a 6d 69 73 63 20 20 20 20 20 20 20 20 20 20 20  :misc           
04d0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 54 65            ; # Te
04e0: 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a 0a 23  xt formatting..#
04f0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0500: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0510: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0520: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0530: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76  ..snit::type ::v
0540: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0550: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 7b 0a 20  t::cvs::file {. 
0560: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
0570: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0580: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
0590: 23 20 50 75 62 6c 69 63 20 41 50 49 0a 0a 20 20  # Public API..  
05a0: 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b 70    constructor {p
05b0: 61 74 68 20 75 73 72 70 61 74 68 20 65 78 65 63  ath usrpath exec
05c0: 75 74 61 62 6c 65 20 70 72 6f 6a 65 63 74 7d 20  utable project} 
05d0: 7b 0a 09 73 65 74 20 6d 79 70 61 74 68 20 20 20  {..set mypath   
05e0: 20 20 20 20 24 70 61 74 68 0a 09 73 65 74 20 6d      $path..set m
05f0: 79 75 73 72 70 61 74 68 20 20 20 20 24 75 73 72  yusrpath    $usr
0600: 70 61 74 68 0a 09 73 65 74 20 6d 79 65 78 65 63  path..set myexec
0610: 75 74 61 62 6c 65 20 24 65 78 65 63 75 74 61 62  utable $executab
0620: 6c 65 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 63  le..set myprojec
0630: 74 20 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73  t    $project..s
0640: 65 74 20 6d 79 74 72 75 6e 6b 20 20 20 20 20 20  et mytrunk      
0650: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e  [$myproject trun
0660: 6b 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  k]..return.    }
0670: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 61 74  ..    method pat
0680: 68 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e  h    {} { return
0690: 20 24 6d 79 70 61 74 68 20 7d 0a 20 20 20 20 6d   $mypath }.    m
06a0: 65 74 68 6f 64 20 75 73 72 70 61 74 68 20 7b 7d  ethod usrpath {}
06b0: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 75 73 72   { return $myusr
06c0: 70 61 74 68 20 7d 0a 20 20 20 20 6d 65 74 68 6f  path }.    metho
06d0: 64 20 70 72 6f 6a 65 63 74 20 7b 7d 20 7b 20 72  d project {} { r
06e0: 65 74 75 72 6e 20 24 6d 79 70 72 6f 6a 65 63 74  eturn $myproject
06f0: 20 7d 0a 0a 20 20 20 20 64 65 6c 65 67 61 74 65   }..    delegate
0700: 20 6d 65 74 68 6f 64 20 63 6f 6d 6d 69 74 6d 65   method commitme
0710: 73 73 61 67 65 6f 66 20 74 6f 20 6d 79 70 72 6f  ssageof to mypro
0720: 6a 65 63 74 0a 0a 20 20 20 20 23 20 23 20 23 23  ject..    # # ##
0730: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
0740: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
0750: 23 0a 20 20 20 20 23 23 20 4d 65 74 68 6f 64 73  #.    ## Methods
0760: 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68   required for th
0770: 65 20 63 6c 61 73 73 20 74 6f 20 62 65 20 61 20  e class to be a 
0780: 73 69 6e 6b 20 6f 66 20 74 68 65 20 72 63 73 20  sink of the rcs 
0790: 70 61 72 73 65 72 0a 0a 20 20 20 20 23 6d 65 74  parser..    #met
07a0: 68 6f 64 20 62 65 67 69 6e 20 7b 7d 20 7b 70 75  hod begin {} {pu
07b0: 74 73 20 62 65 67 69 6e 7d 0a 20 20 20 20 23 6d  ts begin}.    #m
07c0: 65 74 68 6f 64 20 73 65 74 68 65 61 64 20 7b 68  ethod sethead {h
07d0: 7d 20 7b 70 75 74 73 20 68 65 61 64 3d 24 68 7d  } {puts head=$h}
07e0: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74  .    #method set
07f0: 70 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20  principalbranch 
0800: 7b 62 7d 20 7b 70 75 74 73 20 70 62 3d 24 62 7d  {b} {puts pb=$b}
0810: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66  .    #method def
0820: 74 61 67 20 7b 73 20 72 7d 20 7b 70 75 74 73 20  tag {s r} {puts 
0830: 24 73 3d 24 72 7d 0a 20 20 20 20 23 6d 65 74 68  $s=$r}.    #meth
0840: 6f 64 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63  od setcomment {c
0850: 7d 20 7b 70 75 74 73 20 63 6f 6d 6d 65 6e 74 3d  } {puts comment=
0860: 24 63 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20  $c}.    #method 
0870: 61 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 70 75  admindone {} {pu
0880: 74 73 20 61 64 6d 69 6e 64 6f 6e 65 7d 0a 20 20  ts admindone}.  
0890: 20 20 23 6d 65 74 68 6f 64 20 64 65 66 20 7b 72    #method def {r
08a0: 65 76 20 64 61 74 65 20 61 75 74 68 6f 72 20 73  ev date author s
08b0: 74 61 74 65 20 6e 65 78 74 20 62 72 61 6e 63 68  tate next branch
08c0: 65 73 7d 20 7b 70 75 74 73 20 22 64 65 66 20 24  es} {puts "def $
08d0: 72 65 76 20 24 64 61 74 65 20 24 61 75 74 68 6f  rev $date $autho
08e0: 72 20 24 73 74 61 74 65 20 24 6e 65 78 74 20 24  r $state $next $
08f0: 62 72 61 6e 63 68 65 73 22 7d 0a 20 20 20 20 23  branches"}.    #
0900: 6d 65 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 7b  method defdone {
0910: 7d 20 7b 70 75 74 73 20 64 65 66 2d 64 6f 6e 65  } {puts def-done
0920: 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65  }.    #method se
0930: 74 64 65 73 63 20 7b 64 7d 20 7b 70 75 74 73 20  tdesc {d} {puts 
0940: 64 65 73 63 3d 24 64 7d 0a 20 20 20 20 23 6d 65  desc=$d}.    #me
0950: 74 68 6f 64 20 65 78 74 65 6e 64 20 7b 72 65 76  thod extend {rev
0960: 20 63 6f 6d 6d 69 74 6d 73 67 20 64 65 6c 74 61   commitmsg delta
0970: 72 61 6e 67 65 7d 20 7b 70 75 74 73 20 22 65 78  range} {puts "ex
0980: 74 65 6e 64 20 24 63 6f 6d 6d 69 74 6d 73 67 20  tend $commitmsg 
0990: 24 64 65 6c 74 61 72 61 6e 67 65 22 7d 0a 20 20  $deltarange"}.  
09a0: 20 20 23 6d 65 74 68 6f 64 20 64 6f 6e 65 20 7b    #method done {
09b0: 7d 20 7b 70 75 74 73 20 64 6f 6e 65 7d 0a 0a 20  } {puts done}.. 
09c0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
09d0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
09e0: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
09f0: 23 20 50 65 72 73 69 73 74 65 6e 63 65 20 28 70  # Persistence (p
0a00: 61 73 73 20 49 49 29 0a 0a 20 20 20 20 6d 65 74  ass II)..    met
0a10: 68 6f 64 20 70 65 72 73 69 73 74 20 7b 7d 20 7b  hod persist {} {
0a20: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20  .    }..    # # 
0a30: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
0a40: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0a50: 23 23 23 0a 20 20 20 20 23 23 20 49 6d 70 6c 65  ###.    ## Imple
0a60: 6d 65 6e 74 20 74 68 65 20 73 69 6e 6b 0a 0a 20  ment the sink.. 
0a70: 20 20 20 6d 65 74 68 6f 64 20 62 65 67 69 6e 20     method begin 
0a80: 7b 7d 20 7b 23 69 67 6e 6f 72 65 7d 0a 0a 20 20  {} {#ignore}..  
0a90: 20 20 6d 65 74 68 6f 64 20 73 65 74 68 65 61 64    method sethead
0aa0: 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20   {revnr} {..set 
0ab0: 6d 79 68 65 61 64 72 65 76 6e 72 20 24 72 65 76  myheadrevnr $rev
0ac0: 6e 72 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  nr..return.    }
0ad0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
0ae0: 70 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20  principalbranch 
0af0: 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 73 65  {branchnr} {..se
0b00: 74 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 24 62  t myprincipal $b
0b10: 72 61 6e 63 68 6e 72 0a 09 72 65 74 75 72 6e 0a  ranchnr..return.
0b20: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
0b30: 64 20 64 65 66 74 61 67 20 7b 6e 61 6d 65 20 72  d deftag {name r
0b40: 65 76 6e 72 7d 20 7b 0a 09 23 20 46 55 54 55 52  evnr} {..# FUTUR
0b50: 45 3a 20 50 65 72 66 6f 72 6d 20 73 79 6d 62 6f  E: Perform symbo
0b60: 6c 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  l transformation
0b70: 20 68 65 72 65 2e 0a 0a 09 69 66 20 7b 5b 73 74   here....if {[st
0b80: 72 75 63 74 3a 3a 73 65 74 20 63 6f 6e 74 61 69  ruct::set contai
0b90: 6e 73 20 24 6d 79 73 79 6d 62 6f 6c 73 20 24 6e  ns $mysymbols $n
0ba0: 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f  ame]} {..    tro
0bb0: 75 62 6c 65 20 66 61 74 61 6c 20 22 4d 75 6c 74  uble fatal "Mult
0bc0: 69 70 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 73  iple definitions
0bd0: 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 27   of the symbol '
0be0: 24 6e 61 6d 65 27 20 69 6e 20 27 24 6d 79 70 61  $name' in '$mypa
0bf0: 74 68 27 22 0a 09 20 20 20 20 72 65 74 75 72 6e  th'"..    return
0c00: 0a 09 7d 0a 0a 09 73 74 72 75 63 74 3a 3a 73 65  ..}...struct::se
0c10: 74 20 61 64 64 20 6d 79 73 79 6d 62 6f 6c 73 20  t add mysymbols 
0c20: 24 6e 61 6d 65 0a 0a 09 69 66 20 7b 5b 72 65 76  $name...if {[rev
0c30: 20 69 73 62 72 61 6e 63 68 72 65 76 6e 72 20 24   isbranchrevnr $
0c40: 72 65 76 6e 72 20 2d 3e 20 62 72 61 6e 63 68 6e  revnr -> branchn
0c50: 72 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66  r]} {..    $self
0c60: 20 41 64 64 42 72 61 6e 63 68 20 24 6e 61 6d 65   AddBranch $name
0c70: 20 24 62 72 61 6e 63 68 6e 72 0a 09 7d 20 65 6c   $branchnr..} el
0c80: 73 65 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20  se {..    $self 
0c90: 41 64 64 54 61 67 20 24 6e 61 6d 65 20 24 72 65  AddTag $name $re
0ca0: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  vnr..}..return. 
0cb0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
0cc0: 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d 20   setcomment {c} 
0cd0: 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20 20 20  {# ignore}..    
0ce0: 6d 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65  method admindone
0cf0: 20 7b 7d 20 7b 0a 09 23 20 57 65 20 64 6f 20 6e   {} {..# We do n
0d00: 6f 74 68 69 6e 67 20 61 74 20 74 68 65 20 62 6f  othing at the bo
0d10: 75 6e 64 61 72 79 20 6f 66 20 61 64 6d 69 6e 20  undary of admin 
0d20: 61 6e 64 20 72 65 76 69 73 69 6f 6e 20 64 61 74  and revision dat
0d30: 61 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  a.    }..    met
0d40: 68 6f 64 20 64 65 66 20 7b 72 65 76 6e 72 20 64  hod def {revnr d
0d50: 61 74 65 20 61 75 74 68 6f 72 20 73 74 61 74 65  ate author state
0d60: 20 6e 65 78 74 20 62 72 61 6e 63 68 65 73 7d 20   next branches} 
0d70: 7b 0a 09 24 73 65 6c 66 20 52 65 63 6f 72 64 42  {..$self RecordB
0d80: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 24 62 72  ranchCommits $br
0d90: 61 6e 63 68 65 73 0a 0a 09 69 66 20 7b 5b 69 6e  anches...if {[in
0da0: 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28  fo exists myrev(
0db0: 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 20 20 20  $revnr)]} {..   
0dc0: 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22   trouble fatal "
0dd0: 46 69 6c 65 20 24 6d 79 70 61 74 68 20 63 6f 6e  File $mypath con
0de0: 74 61 69 6e 73 20 64 75 70 6c 69 63 61 74 65 20  tains duplicate 
0df0: 64 65 66 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20  definitions for 
0e00: 72 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 2e  revision $revnr.
0e10: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d  "..    return..}
0e20: 0a 0a 09 73 65 74 20 6d 79 61 69 64 28 24 72 65  ...set myaid($re
0e30: 76 6e 72 29 20 5b 24 6d 79 70 72 6f 6a 65 63 74  vnr) [$myproject
0e40: 20 64 65 66 61 75 74 68 6f 72 20 24 61 75 74 68   defauthor $auth
0e50: 6f 72 5d 0a 09 73 65 74 20 6d 79 72 65 76 28 24  or]..set myrev($
0e60: 72 65 76 6e 72 29 20 5b 72 65 76 20 25 41 55 54  revnr) [rev %AUT
0e70: 4f 25 20 24 72 65 76 6e 72 20 24 64 61 74 65 20  O% $revnr $date 
0e80: 24 73 74 61 74 65 20 24 73 65 6c 66 5d 0a 0a 09  $state $self]...
0e90: 24 73 65 6c 66 20 52 65 63 6f 72 64 42 61 73 69  $self RecordBasi
0ea0: 63 44 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72  cDependencies $r
0eb0: 65 76 6e 72 20 24 6e 65 78 74 0a 09 72 65 74 75  evnr $next..retu
0ec0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
0ed0: 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d 20  thod defdone {} 
0ee0: 7b 0a 09 23 20 54 68 69 73 20 69 73 20 61 6c 6c  {..# This is all
0ef0: 20 64 6f 6e 65 20 61 66 74 65 72 20 74 68 65 20   done after the 
0f00: 72 65 76 69 73 69 6f 6e 20 74 72 65 65 20 68 61  revision tree ha
0f10: 73 20 62 65 65 6e 20 65 78 74 72 61 63 74 65 64  s been extracted
0f20: 0a 09 23 20 66 72 6f 6d 20 74 68 65 20 66 69 6c  ..# from the fil
0f30: 65 2c 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f  e, before the co
0f40: 6d 6d 69 74 20 6d 65 73 61 67 65 73 20 61 6e 64  mmit mesages and
0f50: 20 64 65 6c 74 61 20 74 65 78 74 73 20 61 72 65   delta texts are
0f60: 0a 09 23 20 70 72 6f 63 65 73 73 65 64 2e 0a 0a  ..# processed...
0f70: 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 50 72  .$self ProcessPr
0f80: 69 6d 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65  imaryDependencie
0f90: 73 0a 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73  s..$self Process
0fa0: 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69  BranchDependenci
0fb0: 65 73 0a 09 24 73 65 6c 66 20 53 6f 72 74 42 72  es..$self SortBr
0fc0: 61 6e 63 68 65 73 0a 09 24 73 65 6c 66 20 50 72  anches..$self Pr
0fd0: 6f 63 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e  ocessTagDependen
0fe0: 63 69 65 73 0a 09 24 73 65 6c 66 20 44 65 74 65  cies..$self Dete
0ff0: 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69  rmineTheRootRevi
1000: 73 69 6f 6e 0a 09 72 65 74 75 72 6e 0a 20 20 20  sion..return.   
1010: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73   }..    method s
1020: 65 74 64 65 73 63 20 7b 64 7d 20 7b 23 20 69 67  etdesc {d} {# ig
1030: 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f  nore}..    metho
1040: 64 20 65 78 74 65 6e 64 20 7b 72 65 76 6e 72 20  d extend {revnr 
1050: 63 6f 6d 6d 69 74 6d 73 67 20 74 65 78 74 72 61  commitmsg textra
1060: 6e 67 65 7d 20 7b 0a 09 73 65 74 20 63 6d 69 64  nge} {..set cmid
1070: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 66   [$myproject def
1080: 63 6d 65 73 73 61 67 65 20 5b 73 74 72 69 6e 67  cmessage [string
1090: 20 74 72 69 6d 20 24 63 6f 6d 6d 69 74 6d 73 67   trim $commitmsg
10a0: 5d 5d 0a 0a 09 73 65 74 20 72 65 76 20 24 6d 79  ]]...set rev $my
10b0: 72 65 76 28 24 72 65 76 6e 72 29 0a 0a 09 69 66  rev($revnr)...if
10c0: 20 7b 5b 24 72 65 76 20 68 61 73 6d 65 74 61 5d   {[$rev hasmeta]
10d0: 7d 20 7b 0a 09 20 20 20 20 23 20 41 70 70 61 72  } {..    # Appar
10e0: 65 6e 74 6c 79 20 72 65 70 6f 73 69 74 6f 72 69  ently repositori
10f0: 65 73 20 65 78 69 73 74 20 69 6e 20 77 68 69 63  es exist in whic
1100: 68 20 74 68 65 20 64 65 6c 74 61 20 64 61 74 61  h the delta data
1110: 0a 09 20 20 20 20 23 20 66 6f 72 20 72 65 76 69  ..    # for revi
1120: 73 69 6f 6e 20 31 2e 31 20 69 73 20 70 72 6f 76  sion 1.1 is prov
1130: 69 64 65 64 20 73 65 76 65 72 61 6c 20 74 69 6d  ided several tim
1140: 65 73 2c 20 61 74 20 6c 65 61 73 74 0a 09 20 20  es, at least..  
1150: 20 20 23 20 74 77 69 63 65 2e 20 54 68 65 20 61    # twice. The a
1160: 63 74 75 61 6c 20 63 61 75 73 65 20 6f 66 20 74  ctual cause of t
1170: 68 69 73 20 64 75 70 6c 69 63 61 74 69 6f 6e 20  his duplication 
1180: 69 73 20 6e 6f 74 0a 09 20 20 20 20 23 20 6b 6e  is not..    # kn
1190: 6f 77 6e 2e 20 53 70 65 63 75 6c 61 74 69 6f 6e  own. Speculation
11a0: 20 63 65 6e 74 65 72 73 20 6f 6e 20 52 43 53 2f   centers on RCS/
11b0: 43 56 53 20 62 75 67 73 2c 20 6f 72 20 66 72 6f  CVS bugs, or fro
11c0: 6d 0a 09 20 20 20 20 23 20 6d 61 6e 75 61 6c 20  m..    # manual 
11d0: 65 64 69 74 73 20 6f 66 20 74 68 65 20 72 65 70  edits of the rep
11e0: 6f 73 69 74 6f 72 79 20 77 68 69 63 68 20 62 6f  ository which bo
11f0: 72 6b 65 64 20 74 68 65 0a 09 20 20 20 20 23 20  rked the..    # 
1200: 69 6e 74 65 72 6e 61 6c 73 2e 20 57 68 61 74 65  internals. Whate
1210: 76 65 72 20 74 68 65 20 63 61 75 73 65 2c 20 74  ver the cause, t
1220: 65 73 74 69 6e 67 20 73 68 6f 77 65 64 20 74 68  esting showed th
1230: 61 74 20 62 6f 74 68 0a 09 20 20 20 20 23 20 63  at both..    # c
1240: 76 73 20 61 6e 64 20 72 63 73 20 75 73 65 20 74  vs and rcs use t
1250: 68 65 20 66 69 72 73 74 20 64 65 66 69 6e 69 74  he first definit
1260: 69 6f 6e 20 77 68 65 6e 20 70 65 72 66 6f 72 6d  ion when perform
1270: 69 6e 67 20 61 0a 09 20 20 20 20 23 20 63 68 65  ing a..    # che
1280: 63 6b 6f 75 74 2c 20 61 6e 64 20 77 65 20 66 6f  ckout, and we fo
1290: 6c 6c 6f 77 20 74 68 65 69 72 20 6c 65 61 64 2e  llow their lead.
12a0: 20 53 69 64 65 20 6e 6f 74 65 73 3a 20 27 63 76   Side notes: 'cv
12b0: 73 0a 09 20 20 20 20 23 20 6c 6f 67 27 20 66 61  s..    # log' fa
12c0: 69 6c 73 20 6f 6e 20 73 75 63 68 20 61 20 66 69  ils on such a fi
12d0: 6c 65 2c 20 61 6e 64 20 27 63 76 73 20 72 6c 6f  le, and 'cvs rlo
12e0: 67 27 20 70 72 69 6e 74 73 20 74 68 65 20 6c 6f  g' prints the lo
12f0: 67 0a 09 20 20 20 20 23 20 6d 65 73 73 61 67 65  g..    # message
1300: 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20   from the first 
1310: 64 65 6c 74 61 2c 20 69 67 6e 6f 72 69 6e 67 20  delta, ignoring 
1320: 74 68 65 20 73 65 63 6f 6e 64 2e 0a 0a 09 20 20  the second....  
1330: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69    log write 1 fi
1340: 6c 65 20 22 49 6e 20 66 69 6c 65 20 24 6d 79 70  le "In file $myp
1350: 61 74 68 20 3a 20 44 75 70 6c 69 63 61 74 65 20  ath : Duplicate 
1360: 64 65 6c 74 61 20 64 61 74 61 20 66 6f 72 20 72  delta data for r
1370: 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 22 0a  evision $revnr".
1380: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31  .    log write 1
1390: 20 66 69 6c 65 20 22 49 67 6e 6f 72 69 6e 67 20   file "Ignoring 
13a0: 74 68 65 20 64 75 70 6c 69 63 61 74 65 22 0a 09  the duplicate"..
13b0: 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09      return..}...
13c0: 23 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20  # Determine the 
13d0: 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d  line of developm
13e0: 65 6e 74 20 66 6f 72 20 74 68 65 20 72 65 76 69  ent for the revi
13f0: 73 69 6f 6e 20 28 70 72 6f 6a 65 63 74 0a 09 23  sion (project..#
1400: 20 6c 65 76 65 6c 29 2e 20 54 68 69 73 20 67 69   level). This gi
1410: 76 65 73 20 75 73 20 74 68 65 20 62 72 61 6e 63  ves us the branc
1420: 68 69 64 20 74 6f 6f 2c 20 72 65 71 75 69 72 65  hid too, require
1430: 64 20 66 6f 72 20 74 68 65 0a 09 23 20 6d 65 74  d for the..# met
1440: 61 20 64 61 74 61 20 67 72 6f 75 70 20 74 68 65  a data group the
1450: 20 72 65 76 69 73 69 6f 6e 20 69 73 20 69 6e 2e   revision is in.
1460: 20 28 4e 6f 74 65 3a 20 42 79 20 70 75 74 74 69   (Note: By putti
1470: 6e 67 20 62 6f 74 68 0a 09 23 20 62 72 61 6e 63  ng both..# branc
1480: 68 2f 6c 6f 64 20 61 6e 64 20 70 72 6f 6a 65 63  h/lod and projec
1490: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  t information in
14a0: 74 6f 20 74 68 65 20 67 72 6f 75 70 20 77 65 20  to the group we 
14b0: 65 6e 73 75 72 65 0a 09 23 20 74 68 61 74 20 61  ensure..# that a
14c0: 6e 79 20 63 72 6f 73 73 2d 70 72 6f 6a 65 63 74  ny cross-project
14d0: 20 61 6e 64 20 63 72 6f 73 73 2d 62 72 61 6e 63   and cross-branc
14e0: 68 20 63 6f 6d 6d 69 74 73 20 61 72 65 0a 09 23  h commits are..#
14f0: 20 73 65 70 61 72 61 74 65 64 20 69 6e 74 6f 20   separated into 
1500: 6d 75 6c 74 69 70 6c 65 20 63 6f 6d 6d 69 74 73  multiple commits
1510: 2c 20 6f 6e 65 20 69 6e 20 65 61 63 68 20 6f 66  , one in each of
1520: 20 74 68 65 20 70 72 6f 6a 65 63 74 73 0a 09 23   the projects..#
1530: 20 61 6e 64 2f 6f 72 20 62 72 61 6e 63 68 65 73   and/or branches
1540: 29 2e 0a 0a 09 73 65 74 20 6c 6f 64 20 5b 24 73  )....set lod [$s
1550: 65 6c 66 20 47 65 74 4c 4f 44 20 24 72 65 76 6e  elf GetLOD $revn
1560: 72 5d 0a 0a 09 24 72 65 76 20 73 65 74 6d 65 74  r]...$rev setmet
1570: 61 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65  a [$myproject de
1580: 66 6d 65 74 61 20 5b 24 6c 6f 64 20 69 64 5d 20  fmeta [$lod id] 
1590: 24 6d 79 61 69 64 28 24 72 65 76 6e 72 29 20 24  $myaid($revnr) $
15a0: 63 6d 69 64 5d 0a 09 24 72 65 76 20 73 65 74 74  cmid]..$rev sett
15b0: 65 78 74 20 24 74 65 78 74 72 61 6e 67 65 0a 09  ext $textrange..
15c0: 24 72 65 76 20 73 65 74 6c 6f 64 20 20 24 6c 6f  $rev setlod  $lo
15d0: 64 0a 0a 09 23 20 49 66 20 74 68 69 73 20 69 73  d...# If this is
15e0: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 2c 20 77   revision 1.1, w
15f0: 65 20 68 61 76 65 20 74 6f 20 64 65 74 65 72 6d  e have to determ
1600: 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 0a  ine whether the.
1610: 09 23 20 66 69 6c 65 20 73 65 65 6d 73 20 74 6f  .# file seems to
1620: 20 68 61 76 65 20 62 65 65 6e 20 63 72 65 61 74   have been creat
1630: 65 64 20 74 68 72 6f 75 67 68 20 27 63 76 73 20  ed through 'cvs 
1640: 61 64 64 27 20 69 6e 73 74 65 61 64 20 6f 66 0a  add' instead of.
1650: 09 23 20 27 63 76 73 20 69 6d 70 6f 72 74 27 2e  .# 'cvs import'.
1660: 20 54 68 69 73 20 63 61 6e 20 62 65 20 64 6f 6e   This can be don
1670: 65 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 61 74 20  e by looking at 
1680: 74 68 65 20 75 6e 2d 0a 09 23 20 61 64 75 6c 74  the un-..# adult
1690: 65 72 61 74 65 64 20 63 6f 6d 6d 69 74 20 6d 65  erated commit me
16a0: 73 73 61 67 65 2c 20 61 73 20 43 56 53 20 75 73  ssage, as CVS us
16b0: 65 73 20 61 20 68 61 72 64 77 69 72 65 64 20 6d  es a hardwired m
16c0: 61 67 69 63 0a 09 23 20 6d 65 73 73 61 67 65 20  agic..# message 
16d0: 66 6f 72 20 74 68 65 20 6c 61 74 74 65 72 2c 20  for the latter, 
16e0: 69 2e 65 2e 20 22 49 6e 69 74 69 61 6c 20 72 65  i.e. "Initial re
16f0: 76 69 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a 09 23  vision\n", no..#
1700: 20 70 65 72 69 6f 64 2e 20 20 28 54 68 69 73 20   period.  (This 
1710: 66 61 63 74 20 61 6c 73 6f 20 68 65 6c 70 73 20  fact also helps 
1720: 75 73 20 77 68 65 6e 20 74 68 65 20 74 69 6d 65  us when the time
1730: 20 63 6f 6d 65 73 20 74 6f 0a 09 23 20 64 65 74   comes to..# det
1740: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
1750: 68 69 73 20 66 69 6c 65 20 6d 69 67 68 74 20 68  his file might h
1760: 61 76 65 20 68 61 64 20 61 20 64 65 66 61 75 6c  ave had a defaul
1770: 74 20 62 72 61 6e 63 68 0a 09 23 20 69 6e 20 74  t branch..# in t
1780: 68 65 20 70 61 73 74 2e 29 0a 0a 09 69 66 20 7b  he past.)...if {
1790: 24 72 65 76 6e 72 20 65 71 20 22 31 2e 31 22 7d  $revnr eq "1.1"}
17a0: 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 6d   {..    set myim
17b0: 70 6f 72 74 65 64 20 5b 65 78 70 72 20 7b 24 63  ported [expr {$c
17c0: 6f 6d 6d 69 74 6d 73 67 20 65 71 20 22 49 6e 69  ommitmsg eq "Ini
17d0: 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22  tial revision\n"
17e0: 7d 5d 0a 09 7d 0a 0a 09 23 20 48 65 72 65 20 77  }]..}...# Here w
17f0: 65 20 61 6c 73 6f 20 6b 65 65 70 20 74 72 61 63  e also keep trac
1800: 6b 20 6f 66 20 74 68 65 20 6f 72 64 65 72 20 69  k of the order i
1810: 6e 20 77 68 69 63 68 20 74 68 65 20 72 65 76 69  n which the revi
1820: 73 69 6f 6e 73 0a 09 23 20 77 65 72 65 20 61 64  sions..# were ad
1830: 64 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65 2e  ded to the file.
1840: 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79 72 65 76  ...lappend myrev
1850: 69 73 69 6f 6e 73 20 24 72 65 76 0a 09 72 65 74  isions $rev..ret
1860: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
1870: 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b 0a  ethod done {} {.
1880: 09 23 20 43 6f 6d 70 6c 65 74 65 20 74 68 65 20  .# Complete the 
1890: 72 65 76 69 73 69 6f 6e 73 2c 20 62 72 61 6e 63  revisions, branc
18a0: 68 65 73 2c 20 61 6e 64 20 74 61 67 73 2e 20 54  hes, and tags. T
18b0: 68 69 73 20 69 6e 63 6c 75 64 65 73 0a 09 23 20  his includes..# 
18c0: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6e 6f  looking for a no
18d0: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20  n-trunk default 
18e0: 62 72 61 6e 63 68 2c 20 6d 61 72 6b 69 6e 67 20  branch, marking 
18f0: 69 74 73 20 6d 65 6d 62 65 72 73 0a 09 23 20 61  its members..# a
1900: 6e 64 20 6c 69 6e 6b 69 6e 67 20 74 68 65 6d 20  nd linking them 
1910: 69 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2e 0a  into the trunk..
1920: 0a 09 24 73 65 6c 66 20 44 65 74 65 72 6d 69 6e  ..$self Determin
1930: 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 74 69  eRevisionOperati
1940: 6f 6e 73 0a 09 24 73 65 6c 66 20 44 65 74 65 72  ons..$self Deter
1950: 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65 6c  mineLinesOfDevel
1960: 6f 70 6d 65 6e 74 0a 09 24 73 65 6c 66 20 48 61  opment..$self Ha
1970: 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65 66 61  ndleNonTrunkDefa
1980: 75 6c 74 42 72 61 6e 63 68 0a 09 24 73 65 6c 66  ultBranch..$self
1990: 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 61 6e   RemoveIrrelevan
19a0: 74 44 65 6c 65 74 69 6f 6e 73 0a 09 24 73 65 6c  tDeletions..$sel
19b0: 66 20 52 65 6d 6f 76 65 49 6e 69 74 69 61 6c 42  f RemoveInitialB
19c0: 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e 73 0a 0a  ranchDeletions..
19d0: 09 69 66 20 7b 5b 24 6d 79 70 72 6f 6a 65 63 74  .if {[$myproject
19e0: 20 74 72 75 6e 6b 6f 6e 6c 79 5d 7d 20 7b 0a 09   trunkonly]} {..
19f0: 20 20 20 20 24 73 65 6c 66 20 45 78 63 6c 75 64      $self Exclud
1a00: 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 6d 61  eNonTrunkInforma
1a10: 74 69 6f 6e 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  tion..}..return.
1a20: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23      }..    # # #
1a30: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
1a40: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
1a50: 23 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a  ##.    ## State.
1a60: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
1a70: 70 61 74 68 20 20 20 20 20 20 20 20 20 20 20 20  path            
1a80: 7b 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74  {} ; # Path of t
1a90: 68 65 20 66 69 6c 65 27 73 20 72 63 73 20 61 72  he file's rcs ar
1aa0: 63 68 69 76 65 2e 0a 20 20 20 20 76 61 72 69 61  chive..    varia
1ab0: 62 6c 65 20 6d 79 75 73 72 70 61 74 68 20 20 20  ble myusrpath   
1ac0: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74        {} ; # Pat
1ad0: 68 20 6f 66 20 74 68 65 20 66 69 6c 65 20 61 73  h of the file as
1ae0: 20 73 65 65 6e 20 62 79 20 75 73 65 72 73 2e 0a   seen by users..
1af0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 65      variable mye
1b00: 78 65 63 75 74 61 62 6c 65 20 20 20 20 20 20 30  xecutable      0
1b10: 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c    ; # Boolean fl
1b20: 61 67 20 27 66 69 6c 65 20 65 78 65 63 75 74 61  ag 'file executa
1b30: 62 6c 65 27 2e 0a 20 20 20 20 76 61 72 69 61 62  ble'..    variab
1b40: 6c 65 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20  le myproject    
1b50: 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65       {} ; # Refe
1b60: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 70 72 6f  rence to the pro
1b70: 6a 65 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 09  ject object.....
1b80: 20 20 20 20 23 20 74 68 65 20 66 69 6c 65 20 62      # the file b
1b90: 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76  elongs to..    v
1ba0: 61 72 69 61 62 6c 65 20 6d 79 72 65 76 20 2d 61  ariable myrev -a
1bb0: 72 72 61 79 20 20 20 20 20 20 7b 7d 20 3b 20 23  rray      {} ; #
1bc0: 20 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e   Maps revision n
1bd0: 75 6d 62 65 72 20 74 6f 20 74 68 65 0a 09 09 09  umber to the....
1be0: 09 20 20 20 20 23 20 61 73 73 6f 63 69 61 74 65  .    # associate
1bf0: 64 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63  d revision objec
1c00: 74 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  t..    variable 
1c10: 6d 79 72 65 76 69 73 69 6f 6e 73 20 20 20 20 20  myrevisions     
1c20: 20 20 7b 7d 20 3b 20 23 20 53 61 6d 65 20 61 73    {} ; # Same as
1c30: 20 6d 79 72 65 76 2c 20 62 75 74 20 61 20 6c 69   myrev, but a li
1c40: 73 74 2c 0a 09 09 09 09 20 20 20 20 23 20 67 69  st,.....    # gi
1c50: 76 69 6e 67 20 75 73 20 74 68 65 20 6f 72 64 65  ving us the orde
1c60: 72 20 6f 66 0a 09 09 09 09 20 20 20 20 23 20 72  r of.....    # r
1c70: 65 76 69 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61  evisions..    va
1c80: 72 69 61 62 6c 65 20 6d 79 61 69 64 20 20 20 20  riable myaid    
1c90: 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20    -array {} ; # 
1ca0: 4d 61 70 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d  Map revision num
1cb0: 62 65 72 73 20 74 6f 20 74 68 65 20 69 64 0a 09  bers to the id..
1cc0: 09 09 09 20 20 20 20 23 20 6f 66 20 74 68 65 20  ...    # of the 
1cd0: 61 75 74 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69  author who commi
1ce0: 74 74 65 64 0a 09 09 09 09 20 20 20 20 23 20 69  tted.....    # i
1cf0: 74 2e 20 54 68 69 73 20 69 73 20 6c 61 74 65 72  t. This is later
1d00: 20 61 67 67 72 65 67 61 74 65 64 0a 09 09 09 09   aggregated.....
1d10: 20 20 20 20 23 20 77 69 74 68 20 63 6f 6d 6d 69      # with commi
1d20: 74 20 6d 65 73 73 61 67 65 2c 20 62 72 61 6e 63  t message, branc
1d30: 68 20 6e 61 6d 65 0a 09 09 09 09 20 20 20 20 23  h name.....    #
1d40: 20 61 6e 64 20 70 72 6f 6a 65 63 74 20 69 64 20   and project id 
1d50: 66 6f 72 20 61 20 6d 65 74 61 20 69 64 2e 0a 20  for a meta id.. 
1d60: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65     variable myhe
1d70: 61 64 72 65 76 6e 72 20 20 20 20 20 20 20 7b 7d  adrevnr       {}
1d80: 20 3b 20 23 20 48 65 61 64 20 72 65 76 69 73 69   ; # Head revisi
1d90: 6f 6e 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d  on (revision num
1da0: 62 65 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c  ber).    variabl
1db0: 65 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20  e myprincipal   
1dc0: 20 20 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63      {} ; # Princ
1dd0: 69 70 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61  ipal branch (bra
1de0: 6e 63 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09  nch number).....
1df0: 09 20 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20  .    # Contrary 
1e00: 74 6f 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73  to the name this
1e10: 20 69 73 20 74 68 65 0a 09 09 09 09 20 20 20 20   is the.....    
1e20: 23 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  # default branch
1e30: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
1e40: 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20  ydependencies   
1e50: 20 7b 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61   {} ; # Dictiona
1e60: 72 79 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69  ry parent -> chi
1e70: 6c 64 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65  ld,.....    # re
1e80: 63 6f 72 64 73 20 70 72 69 6d 61 72 79 20 64 65  cords primary de
1e90: 70 65 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20  pendencies..    
1ea0: 76 61 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72  variable myimpor
1eb0: 74 65 64 20 20 20 20 20 20 20 20 30 20 20 3b 20  ted        0  ; 
1ec0: 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20  # Boolean flag. 
1ed0: 53 65 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  Set if and only 
1ee0: 69 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76  if.....    # rev
1ef0: 20 31 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65   1.1 of the file
1f00: 20 73 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20   seemingly..... 
1f10: 20 20 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65     # was importe
1f20: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64  d instead of add
1f30: 65 64 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72  ed.....    # nor
1f40: 6d 61 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61  mally..    varia
1f50: 62 6c 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20  ble myroot      
1f60: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66        {} ; # Ref
1f70: 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65  erence to the re
1f80: 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09  vision object...
1f90: 09 09 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20  ..    # holding 
1fa0: 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f  the root revisio
1fb0: 6e 2e 20 20 49 74 73 0a 09 09 09 09 20 20 20 20  n.  Its.....    
1fc0: 23 20 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79  # number usually
1fd0: 20 69 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62   is '1.1'. Can b
1fe0: 65 0a 09 09 09 09 20 20 20 20 23 20 61 20 64 69  e.....    # a di
1ff0: 66 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20  fferent number, 
2000: 62 65 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20  because of..... 
2010: 20 20 20 23 20 67 61 70 73 20 63 72 65 61 74 65     # gaps create
2020: 64 20 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20  d via 'cvsadmin 
2030: 2d 6f 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  -o'..    variabl
2040: 65 20 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72  e mybranches -ar
2050: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20  ray {} ; # Maps 
2060: 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f  branch number to
2070: 20 74 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09   the symbol.....
2080: 20 20 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e      # object han
2090: 64 6c 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68  dling the branch
20a0: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
20b0: 79 74 61 67 73 20 20 20 20 20 2d 61 72 72 61 79  ytags     -array
20c0: 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76   {} ; # Maps rev
20d0: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20  ision number to 
20e0: 74 68 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20  the list.....   
20f0: 20 23 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a   # of symbol obj
2100: 65 63 74 73 20 66 6f 72 20 74 68 65 20 74 61 67  ects for the tag
2110: 73 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 6f  s.....    # asso
2120: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
2130: 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61  revision..    va
2140: 72 69 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73  riable mysymbols
2150: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20           {} ; # 
2160: 53 65 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f  Set of the symbo
2170: 6c 20 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e  l names found in
2180: 0a 09 09 09 09 20 20 20 20 23 20 74 68 69 73 20  .....    # this 
2190: 66 69 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61  file...    varia
21a0: 62 6c 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20  ble mybranchcnt 
21b0: 30 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f  0 ; # Counter fo
21c0: 72 20 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72  r branches, to r
21d0: 65 63 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20  ecord their.... 
21e0: 20 20 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64      # order of d
21f0: 65 66 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20  efinition. This 
2200: 61 6c 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09  also defines....
2210: 20 20 20 20 20 23 20 74 68 65 69 72 20 6f 72 64       # their ord
2220: 65 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20  er of creation, 
2230: 77 68 69 63 68 20 69 73 20 74 68 65 0a 09 09 09  which is the....
2240: 20 20 20 20 20 23 20 72 65 76 65 72 73 65 20 6f       # reverse o
2250: 66 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49  f definition.  I
2260: 2e 65 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09  .e. a smaller...
2270: 09 20 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d  .     # number m
2280: 65 61 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61  eans 'Defined ea
2290: 72 6c 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09  rlier', means...
22a0: 09 20 20 20 20 20 23 20 27 43 72 65 61 74 65 64  .     # 'Created
22b0: 20 6c 61 74 65 72 27 2e 0a 0a 20 20 20 20 76 61   later'...    va
22c0: 72 69 61 62 6c 65 20 6d 79 74 72 75 6e 6b 20 7b  riable mytrunk {
22d0: 7d 20 3b 20 23 20 44 69 72 65 63 74 20 72 65 66  } ; # Direct ref
22e0: 65 72 65 6e 63 65 20 74 6f 20 6d 79 70 72 6f 6a  erence to myproj
22f0: 65 63 74 20 2d 3e 20 74 72 75 6e 6b 2e 0a 20 20  ect -> trunk..  
2300: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f    variable myroo
2310: 74 73 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f  ts {} ; # List o
2320: 66 20 72 6f 6f 74 73 20 69 6e 20 74 68 65 20 66  f roots in the f
2330: 6f 72 65 73 74 20 6f 66 0a 09 09 09 20 20 23 20  orest of....  # 
2340: 6c 6f 64 27 73 2e 20 4f 62 6a 65 63 74 20 72 65  lod's. Object re
2350: 66 65 72 65 6e 63 65 73 20 74 6f 20 72 65 76 69  ferences to revi
2360: 73 69 6f 6e 73 20 61 6e 64 0a 09 09 09 20 20 23  sions and....  #
2370: 20 62 72 61 6e 63 68 65 73 2e 20 54 68 65 20 6c   branches. The l
2380: 61 74 74 65 72 20 63 61 6e 20 61 70 70 65 61 72  atter can appear
2390: 20 77 68 65 6e 20 74 68 65 79 0a 09 09 09 20 20   when they....  
23a0: 23 20 61 72 65 20 73 65 76 65 72 65 64 20 66 72  # are severed fr
23b0: 6f 6d 20 74 68 65 69 72 20 70 61 72 65 6e 74 2e  om their parent.
23c0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
23d0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
23e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
23f0: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65    ## Internal me
2400: 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f  thods..    metho
2410: 64 20 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f  d RecordBranchCo
2420: 6d 6d 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d  mmits {branches}
2430: 20 7b 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e   {..foreach bran
2440: 63 68 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65  chrevnr $branche
2450: 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61  s {..    if {[ca
2460: 74 63 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e  tch {...set bran
2470: 63 68 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72  ch [$self Rev2Br
2480: 61 6e 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e  anch $branchrevn
2490: 72 5d 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09  r]..    }]} {...
24a0: 73 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c  set branch [$sel
24b0: 66 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72  f AddUnlabeledBr
24c0: 61 6e 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63  anch [rev 2branc
24d0: 68 6e 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72  hnr $branchrevnr
24e0: 5d 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  ]]..    }...    
24f0: 23 20 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d  # Record the com
2500: 6d 69 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76  mit, just as rev
2510: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  ision number for
2520: 0a 09 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f  ..    # now. Pro
2530: 63 65 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65  cesBranchDepende
2540: 6e 63 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e  ncies will exten
2550: 64 20 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20  d that ito a..  
2560: 20 20 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63    # proper objec
2570: 74 20 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20  t reference.... 
2580: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68     $branch setch
2590: 69 6c 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68  ildrevnr $branch
25a0: 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e  revnr..}..return
25b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
25c0: 6f 64 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72  od Rev2Branch {r
25d0: 65 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65  evnr} {..if {[re
25e0: 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24  v istrunkrevnr $
25f0: 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 74  revnr]} {..    t
2600: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20  rouble internal 
2610: 22 45 78 70 65 63 74 65 64 20 61 20 62 72 61 6e  "Expected a bran
2620: 63 68 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62  ch revision numb
2630: 65 72 22 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24  er"..}..return $
2640: 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20  mybranches([rev 
2650: 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72  2branchnr $revnr
2660: 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  ]).    }..    me
2670: 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65  thod AddUnlabele
2680: 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e  dBranch {branchn
2690: 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73  r} {..return [$s
26a0: 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e  elf AddBranch un
26b0: 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e  labeled-$branchn
26c0: 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20  r $branchnr].   
26d0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41   }..    method A
26e0: 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62  ddBranch {name b
26f0: 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b  ranchnr} {..if {
2700: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62  [info exists myb
2710: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e  ranches($branchn
2720: 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20  r)]} {..    log 
2730: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e  write 1 file "In
2740: 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e   '$mypath': Bran
2750: 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e  ch '$branchnr' n
2760: 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68  amed '[$mybranch
2770: 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61  es($branchnr) na
2780: 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77  me]'"..    log w
2790: 72 69 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e  rite 1 file "Can
27a0: 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20  not have second 
27b0: 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67  name '$name', ig
27c0: 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20  noring it"..    
27d0: 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62  return..}..set b
27e0: 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f  ranch [sym %AUTO
27f0: 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68  % branch $branch
2800: 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67  nr [$myproject g
2810: 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 5d  etsymbol $name]]
2820: 0a 09 24 62 72 61 6e 63 68 20 73 65 74 70 6f 73  ..$branch setpos
2830: 69 74 69 6f 6e 20 5b 69 6e 63 72 20 6d 79 62 72  ition [incr mybr
2840: 61 6e 63 68 63 6e 74 5d 0a 09 73 65 74 20 6d 79  anchcnt]..set my
2850: 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68  branches($branch
2860: 6e 72 29 20 24 62 72 61 6e 63 68 0a 09 72 65 74  nr) $branch..ret
2870: 75 72 6e 20 24 62 72 61 6e 63 68 0a 20 20 20 20  urn $branch.    
2880: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64  }..    method Ad
2890: 64 54 61 67 20 7b 6e 61 6d 65 20 72 65 76 6e 72  dTag {name revnr
28a0: 7d 20 7b 0a 09 73 65 74 20 74 61 67 20 5b 73 79  } {..set tag [sy
28b0: 6d 20 25 41 55 54 4f 25 20 74 61 67 20 24 72 65  m %AUTO% tag $re
28c0: 76 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20  vnr [$myproject 
28d0: 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d  getsymbol $name]
28e0: 5d 0a 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67  ]..lappend mytag
28f0: 73 28 24 72 65 76 6e 72 29 20 24 74 61 67 0a 09  s($revnr) $tag..
2900: 72 65 74 75 72 6e 20 24 74 61 67 0a 20 20 20 20  return $tag.    
2910: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65  }..    method Re
2920: 63 6f 72 64 42 61 73 69 63 44 65 70 65 6e 64 65  cordBasicDepende
2930: 6e 63 69 65 73 20 7b 72 65 76 6e 72 20 6e 65 78  ncies {revnr nex
2940: 74 7d 20 7b 0a 09 23 20 48 61 6e 64 6c 65 20 74  t} {..# Handle t
2950: 68 65 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65  he revision depe
2960: 6e 64 65 6e 63 69 65 73 2e 20 52 65 63 6f 72 64  ndencies. Record
2970: 20 74 68 65 6d 20 66 6f 72 20 6e 6f 77 2c 20 64   them for now, d
2980: 6f 0a 09 23 20 6e 6f 74 68 69 6e 67 20 77 69 74  o..# nothing wit
2990: 68 20 74 68 65 6d 20 79 65 74 2e 0a 0a 09 23 20  h them yet....# 
29a0: 4f 6e 20 74 68 65 20 74 72 75 6e 6b 20 74 68 65  On the trunk the
29b0: 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f   'next' field po
29c0: 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76  ints to the prev
29d0: 69 6f 75 73 0a 09 23 20 72 65 76 69 73 69 6f 6e  ious..# revision
29e0: 2c 20 69 2e 65 2e 20 74 68 65 20 5f 70 61 72 65  , i.e. the _pare
29f0: 6e 74 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65  nt_ of the curre
2a00: 6e 74 20 6f 6e 65 2e 20 45 78 61 6d 70 6c 65 3a  nt one. Example:
2a10: 0a 09 23 20 31 2e 36 27 73 20 6e 65 78 74 20 69  ..# 1.6's next i
2a20: 73 20 31 2e 35 20 28 6d 6f 64 75 6c 6f 20 63 76  s 1.5 (modulo cv
2a30: 73 20 61 64 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23  s admin -o)....#
2a40: 20 43 6f 6e 74 72 61 72 69 6c 79 20 6f 6e 20 61   Contrarily on a
2a50: 20 62 72 61 6e 63 68 20 74 68 65 20 27 6e 65 78   branch the 'nex
2a60: 74 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20  t' field points 
2a70: 74 6f 20 74 68 65 0a 09 23 20 70 72 69 6d 61 72  to the..# primar
2a80: 79 20 5f 63 68 69 6c 64 5f 20 6f 66 20 74 68 65  y _child_ of the
2a90: 20 63 75 72 72 65 6e 74 20 72 65 76 69 73 69 6f   current revisio
2aa0: 6e 2e 20 41 73 20 65 78 61 6d 70 6c 65 2c 0a 09  n. As example,..
2ab0: 23 20 31 2e 31 2e 33 2e 32 27 73 20 27 6e 65 78  # 1.1.3.2's 'nex
2ac0: 74 27 20 77 69 6c 6c 20 62 65 20 31 2e 31 2e 33  t' will be 1.1.3
2ad0: 2e 33 2e 0a 0a 09 23 20 54 68 65 20 27 6e 65 78  .3....# The 'nex
2ae0: 74 27 20 66 69 65 6c 64 20 61 63 74 75 61 6c 6c  t' field actuall
2af0: 79 20 61 6c 77 61 79 73 20 72 65 66 65 72 73 20  y always refers 
2b00: 74 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a  to the revision.
2b10: 09 23 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  .# containing th
2b20: 65 20 64 65 6c 74 61 20 6e 65 65 64 65 64 20 74  e delta needed t
2b30: 6f 20 72 65 74 72 69 65 76 65 20 74 68 61 74 20  o retrieve that 
2b40: 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 54 68  revision....# Th
2b50: 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 6e  e dependencies n
2b60: 65 65 64 65 64 20 68 65 72 65 20 61 72 65 20 74  eeded here are t
2b70: 68 65 20 6c 6f 67 69 63 61 6c 20 73 74 72 75 63  he logical struc
2b80: 74 75 72 65 2c 0a 09 23 20 70 61 72 65 6e 74 2f  ture,..# parent/
2b90: 63 68 69 6c 64 2c 20 61 6e 64 20 6e 6f 74 20 74  child, and not t
2ba0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
2bb0: 6e 20 64 65 70 65 6e 64 65 6e 74 20 64 65 6c 74  n dependent delt
2bc0: 61 0a 09 23 20 70 6f 69 6e 74 65 72 73 2e 0a 0a  a..# pointers...
2bd0: 09 69 66 20 7b 24 6e 65 78 74 20 65 71 20 22 22  .if {$next eq ""
2be0: 7d 20 72 65 74 75 72 6e 0a 09 23 20 20 20 20 20  } return..#     
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c00: 20 20 20 20 20 70 61 72 65 6e 74 20 2d 3e 20 63       parent -> c
2c10: 68 69 6c 64 0a 09 69 66 20 7b 5b 72 65 76 20 69  hild..if {[rev i
2c20: 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76  strunkrevnr $rev
2c30: 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70  nr]} {..    lapp
2c40: 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69  end mydependenci
2c50: 65 73 20 24 6e 65 78 74 20 24 72 65 76 6e 72 0a  es $next $revnr.
2c60: 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 6c  .} else {..    l
2c70: 61 70 70 65 6e 64 20 6d 79 64 65 70 65 6e 64 65  append mydepende
2c80: 6e 63 69 65 73 20 24 72 65 76 6e 72 20 24 6e 65  ncies $revnr $ne
2c90: 78 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  xt..}..return.  
2ca0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
2cb0: 50 72 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65  ProcessPrimaryDe
2cc0: 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a  pendencies {} {.
2cd0: 09 66 6f 72 65 61 63 68 20 7b 70 61 72 65 6e 74  .foreach {parent
2ce0: 72 65 76 6e 72 20 63 68 69 6c 64 72 65 76 6e 72  revnr childrevnr
2cf0: 7d 20 24 6d 79 64 65 70 65 6e 64 65 6e 63 69 65  } $mydependencie
2d00: 73 20 7b 0a 09 20 20 20 20 73 65 74 20 70 61 72  s {..    set par
2d10: 65 6e 74 20 24 6d 79 72 65 76 28 24 70 61 72 65  ent $myrev($pare
2d20: 6e 74 72 65 76 6e 72 29 0a 09 20 20 20 20 73 65  ntrevnr)..    se
2d30: 74 20 63 68 69 6c 64 20 20 24 6d 79 72 65 76 28  t child  $myrev(
2d40: 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 09 20 20  $childrevnr)..  
2d50: 20 20 24 70 61 72 65 6e 74 20 73 65 74 63 68 69    $parent setchi
2d60: 6c 64 20 24 63 68 69 6c 64 0a 09 20 20 20 20 24  ld $child..    $
2d70: 63 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74 20  child setparent 
2d80: 24 70 61 72 65 6e 74 0a 09 7d 0a 09 72 65 74 75  $parent..}..retu
2d90: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
2da0: 74 68 6f 64 20 50 72 6f 63 65 73 73 42 72 61 6e  thod ProcessBran
2db0: 63 68 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b  chDependencies {
2dc0: 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 62 72  } {..foreach {br
2dd0: 61 6e 63 68 6e 72 20 62 72 61 6e 63 68 7d 20 5b  anchnr branch} [
2de0: 61 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e  array get mybran
2df0: 63 68 65 73 5d 20 7b 0a 09 20 20 20 20 73 65 74  ches] {..    set
2e00: 20 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20   revnr [$branch 
2e10: 70 61 72 65 6e 74 72 65 76 6e 72 5d 0a 0a 09 20  parentrevnr]... 
2e20: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
2e30: 69 73 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e  ists myrev($revn
2e40: 72 29 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69  r)]} {...log wri
2e50: 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24  te 1 file "In '$
2e60: 6d 79 70 61 74 68 27 3a 20 54 68 65 20 62 72 61  mypath': The bra
2e70: 6e 63 68 20 27 5b 24 62 72 61 6e 63 68 20 6e 61  nch '[$branch na
2e80: 6d 65 5d 27 20 72 65 66 65 72 65 6e 63 65 73 22  me]' references"
2e90: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66  ...log write 1 f
2ea0: 69 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 72  ile "the bogus r
2eb0: 65 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27  evision '$revnr'
2ec0: 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e   and will be ign
2ed0: 6f 72 65 64 2e 22 0a 09 09 24 62 72 61 6e 63 68  ored."...$branch
2ee0: 20 64 65 73 74 72 6f 79 0a 09 09 75 6e 73 65 74   destroy...unset
2ef0: 20 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 61   mybranches($bra
2f00: 6e 63 68 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c  nchnr)..    } el
2f10: 73 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24  se {...set rev $
2f20: 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09  myrev($revnr)...
2f30: 24 72 65 76 20 61 64 64 62 72 61 6e 63 68 20 24  $rev addbranch $
2f40: 62 72 61 6e 63 68 0a 09 09 24 62 72 61 6e 63 68  branch...$branch
2f50: 20 73 65 74 70 61 72 65 6e 74 20 24 72 65 76 0a   setparent $rev.
2f60: 0a 09 09 23 20 49 66 20 72 65 76 69 73 69 6f 6e  ...# If revision
2f70: 73 20 77 65 72 65 20 63 6f 6d 6d 69 74 74 65 64  s were committed
2f80: 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77   on the branch w
2f90: 65 20 73 74 6f 72 65 20 61 0a 09 09 23 20 72 65  e store a...# re
2fa0: 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 62  ference to the b
2fb0: 72 61 6e 63 68 20 74 68 65 72 65 2c 20 61 6e 64  ranch there, and
2fc0: 20 66 75 72 74 68 65 72 20 64 65 63 6c 61 72 65   further declare
2fd0: 0a 09 09 23 20 74 68 65 20 66 69 72 73 74 20 63  ...# the first c
2fe0: 68 69 6c 64 27 73 20 70 61 72 65 6e 74 20 74 6f  hild's parent to
2ff0: 20 62 65 20 62 72 61 6e 63 68 27 73 20 70 61 72   be branch's par
3000: 65 6e 74 2c 20 61 6e 64 0a 09 09 23 20 6c 69 73  ent, and...# lis
3010: 74 20 74 68 69 73 20 63 68 69 6c 64 20 69 6e 20  t this child in 
3020: 74 68 65 20 70 61 72 65 6e 74 20 72 65 76 69 73  the parent revis
3030: 69 6f 6e 2e 0a 0a 09 09 69 66 20 7b 5b 24 62 72  ion.....if {[$br
3040: 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20  anch haschild]} 
3050: 7b 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 6c  {...    set chil
3060: 64 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20  drevnr [$branch 
3070: 63 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20  childrevnr]...  
3080: 20 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79 72    set child $myr
3090: 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a  ev($childrevnr).
30a0: 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65  ..    $branch se
30b0: 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09  tchild $child...
30c0: 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70  .    $child setp
30d0: 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61  arentbranch $bra
30e0: 6e 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c 64  nch...    $child
30f0: 20 73 65 74 70 61 72 65 6e 74 20 20 20 20 20 20   setparent      
3100: 20 24 72 65 76 0a 09 09 20 20 20 20 24 72 65 76   $rev...    $rev
3110: 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63   addchildonbranc
3120: 68 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20  h $child...}..  
3130: 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20    }..}..return. 
3140: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
3150: 20 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b 7d   SortBranches {}
3160: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76   {..foreach {rev
3170: 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67  nr rev} [array g
3180: 65 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65 76  et myrev] { $rev
3190: 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d 0a   sortbranches }.
31a0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
31b0: 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73     method Proces
31c0: 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65 73  sTagDependencies
31d0: 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b   {} {..foreach {
31e0: 72 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b  revnr taglist} [
31f0: 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73  array get mytags
3200: 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b 69  ] {..    if {![i
3210: 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76  nfo exists myrev
3220: 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73  ($revnr)]} {...s
3230: 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74  et n [llength $t
3240: 61 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72  aglist]...log wr
3250: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27  ite 1 file "In '
3260: 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66 6f  $mypath': The fo
3270: 6c 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20  llowing [nsp $n 
3280: 74 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22 0a  tag] reference".
3290: 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69  ..log write 1 fi
32a0: 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65  le "the bogus re
32b0: 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20  vision '$revnr' 
32c0: 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f  and will be igno
32d0: 72 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68 20  red."...foreach 
32e0: 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09  tag $taglist {..
32f0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31  .    log write 1
3300: 20 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61 67   file "    [$tag
3310: 20 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24 74   name]"...    $t
3320: 61 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09  ag destroy...}..
3330: 09 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24 72  .unset mytags($r
3340: 65 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73  evnr)..    } els
3350: 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d  e {...set rev $m
3360: 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 66  yrev($revnr)...f
3370: 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c  oreach tag $tagl
3380: 69 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65 76  ist {...    $rev
3390: 20 61 64 64 74 61 67 20 24 74 61 67 0a 09 09 20   addtag $tag... 
33a0: 20 20 20 24 74 61 67 20 73 65 74 74 61 67 72 65     $tag settagre
33b0: 76 20 24 72 65 76 0a 09 09 7d 0a 09 20 20 20 20  v $rev...}..    
33c0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  }..}..return.   
33d0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44   }..    method D
33e0: 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52  etermineTheRootR
33f0: 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20  evision {} {..# 
3400: 54 68 65 20 72 6f 6f 74 20 69 73 20 74 68 65 20  The root is the 
3410: 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 77 68 69  one revision whi
3420: 63 68 20 68 61 73 20 6e 6f 20 70 61 72 65 6e 74  ch has no parent
3430: 2e 20 42 79 0a 09 23 20 63 68 65 63 6b 69 6e 67  . By..# checking
3440: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 77   all revisions w
3450: 65 20 65 6e 73 75 72 65 20 74 68 61 74 20 77 65  e ensure that we
3460: 20 63 61 6e 20 64 65 74 65 63 74 20 61 6e 64 0a   can detect and.
3470: 09 23 20 72 65 70 6f 72 74 20 74 68 65 20 63 61  .# report the ca
3480: 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 72  se of multiple r
3490: 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74 20 74 68  oots. Without th
34a0: 61 74 20 77 65 20 63 6f 75 6c 64 0a 09 23 20 73  at we could..# s
34b0: 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e 65 20 72  imply take one r
34c0: 65 76 69 73 69 6f 6e 20 61 6e 64 20 66 6f 6c 6c  evision and foll
34d0: 6f 77 20 74 68 65 20 70 61 72 65 6e 74 20 6c 69  ow the parent li
34e0: 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65 69 72 20  nks to..# their 
34f0: 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a 0a 09 66  root (sic!)....f
3500: 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 72 65  oreach {revnr re
3510: 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79  v} [array get my
3520: 72 65 76 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b  rev] {..    if {
3530: 5b 24 72 65 76 20 68 61 73 70 61 72 65 6e 74 5d  [$rev hasparent]
3540: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20  } continue..    
3550: 69 66 20 7b 24 6d 79 72 6f 6f 74 20 6e 65 20 22  if {$myroot ne "
3560: 22 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74  "} { trouble int
3570: 65 72 6e 61 6c 20 22 4d 75 6c 74 69 70 6c 65 20  ernal "Multiple 
3580: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66  root revisions f
3590: 6f 75 6e 64 22 20 7d 0a 09 20 20 20 20 73 65 74  ound" }..    set
35a0: 20 6d 79 72 6f 6f 74 20 24 72 65 76 0a 09 7d 0a   myroot $rev..}.
35b0: 0a 09 23 20 49 6e 20 74 68 65 20 66 75 74 75 72  ..# In the futur
35c0: 65 20 77 65 20 61 6c 73 6f 20 6e 65 65 64 20 61  e we also need a
35d0: 20 6c 69 73 74 2c 20 61 73 20 62 72 61 6e 63 68   list, as branch
35e0: 65 73 20 63 61 6e 20 62 65 63 6f 6d 65 0a 09 23  es can become..#
35f0: 20 73 65 76 65 72 65 64 20 66 72 6f 6d 20 74 68   severed from th
3600: 65 69 72 20 70 61 72 65 6e 74 2c 20 6d 61 6b 69  eir parent, maki
3610: 6e 67 20 74 68 65 6d 20 74 68 65 69 72 20 6f 77  ng them their ow
3620: 6e 20 72 6f 6f 74 2e 0a 09 73 65 74 20 6d 79 72  n root...set myr
3630: 6f 6f 74 73 20 5b 6c 69 73 74 20 24 6d 79 72 6f  oots [list $myro
3640: 6f 74 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ot]..return.    
3650: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65  }..    method De
3660: 74 65 72 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f  termineRevisionO
3670: 70 65 72 61 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09  perations {} {..
3680: 66 6f 72 65 61 63 68 20 72 65 76 20 24 6d 79 72  foreach rev $myr
3690: 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 76 20  evisions { $rev 
36a0: 64 65 74 65 72 6d 69 6e 65 6f 70 65 72 61 74 69  determineoperati
36b0: 6f 6e 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  on }..return.   
36c0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44   }..    method D
36d0: 65 74 65 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44  etermineLinesOfD
36e0: 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a  evelopment {} {.
36f0: 09 23 20 46 6f 72 20 72 65 76 69 73 69 6f 6e 73  .# For revisions
3700: 20 74 68 69 73 20 68 61 73 20 62 65 65 6e 20 64   this has been d
3710: 6f 6e 65 20 61 6c 72 65 61 64 79 2c 20 69 6e 20  one already, in 
3720: 27 65 78 74 65 6e 64 27 2e 20 4e 6f 77 0a 09 23  'extend'. Now..#
3730: 20 77 65 20 64 6f 20 74 68 69 73 20 66 6f 72 20   we do this for 
3740: 74 68 65 20 62 72 61 6e 63 68 65 73 20 61 6e 64  the branches and
3750: 20 74 61 67 73 2e 0a 0a 09 66 6f 72 65 61 63 68   tags....foreach
3760: 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b 61 72 72   {_ branch} [arr
3770: 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65  ay get mybranche
3780: 73 5d 20 7b 0a 09 20 20 20 20 24 62 72 61 6e 63  s] {..    $branc
3790: 68 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20  h setlod [$self 
37a0: 47 65 74 4c 4f 44 20 5b 24 62 72 61 6e 63 68 20  GetLOD [$branch 
37b0: 70 61 72 65 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d  parentrevnr]]..}
37c0: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61  ...foreach {_ ta
37d0: 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65  glist} [array ge
37e0: 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20  t mytags] {..   
37f0: 20 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61   foreach tag $ta
3800: 67 6c 69 73 74 20 7b 0a 09 09 24 74 61 67 20 73  glist {...$tag s
3810: 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74  etlod [$self Get
3820: 4c 4f 44 20 5b 24 74 61 67 20 74 61 67 72 65 76  LOD [$tag tagrev
3830: 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  nr]]..    }..}..
3840: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
3850: 20 20 6d 65 74 68 6f 64 20 47 65 74 4c 4f 44 20    method GetLOD 
3860: 7b 72 65 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b  {revnr} {..if {[
3870: 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72  rev istrunkrevnr
3880: 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20   $revnr]} {..   
3890: 20 72 65 74 75 72 6e 20 24 6d 79 74 72 75 6e 6b   return $mytrunk
38a0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20  ..} else {..    
38b0: 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 52 65  return [$self Re
38c0: 76 32 42 72 61 6e 63 68 20 24 72 65 76 6e 72 5d  v2Branch $revnr]
38d0: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  ..}.    }..    m
38e0: 65 74 68 6f 64 20 48 61 6e 64 6c 65 4e 6f 6e 54  ethod HandleNonT
38f0: 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e 63  runkDefaultBranc
3900: 68 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c  h {} {..set revl
3910: 69 73 74 20 5b 24 73 65 6c 66 20 4e 6f 6e 54 72  ist [$self NonTr
3920: 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69  unkDefaultRevisi
3930: 6f 6e 73 5d 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e  ons]..if {![llen
3940: 67 74 68 20 24 72 65 76 6c 69 73 74 5d 7d 20 72  gth $revlist]} r
3950: 65 74 75 72 6e 0a 0a 09 24 73 65 6c 66 20 41 64  eturn...$self Ad
3960: 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61  justNonTrunkDefa
3970: 75 6c 74 42 72 61 6e 63 68 20 24 72 65 76 6c 69  ultBranch $revli
3980: 73 74 0a 09 24 73 65 6c 66 20 43 68 65 63 6b 4c  st..$self CheckL
3990: 4f 44 73 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ODs..return.    
39a0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 4e 6f  }..    method No
39b0: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 65 76  nTrunkDefaultRev
39c0: 69 73 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46  isions {} {..# F
39d0: 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20  rom cvs2svn the 
39e0: 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e  following explan
39f0: 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69  ation (with modi
3a00: 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72  fications..# for
3a10: 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a   our algorithm):
3a20: 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 20 77  ...# Determine w
3a30: 68 65 74 68 65 72 20 74 68 65 72 65 20 61 72 65  hether there are
3a40: 20 61 6e 79 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64   any non-trunk d
3a50: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23  efault branch..#
3a60: 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20   revisions....# 
3a70: 49 66 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64  If a non-trunk d
3a80: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73  efault branch is
3a90: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 68   determined to h
3aa0: 61 76 65 20 65 78 69 73 74 65 64 2c 0a 09 23 20  ave existed,..# 
3ab0: 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66  return a list of
3ac0: 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 61 6c 6c   objects for all
3ad0: 20 72 65 76 69 73 69 6f 6e 73 20 74 68 61 74 20   revisions that 
3ae0: 77 65 72 65 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e  were once..# non
3af0: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 72  -trunk default r
3b00: 65 76 69 73 69 6f 6e 73 2c 20 69 6e 20 64 65 70  evisions, in dep
3b10: 65 6e 64 65 6e 63 79 20 6f 72 64 65 72 20 28 69  endency order (i
3b20: 2e 65 2e 20 72 6f 6f 74 0a 09 23 20 66 69 72 73  .e. root..# firs
3b30: 74 29 2e 0a 0a 09 23 20 54 68 65 72 65 20 61 72  t)....# There ar
3b40: 65 20 74 77 6f 20 63 61 73 65 73 20 74 6f 20 68  e two cases to h
3b50: 61 6e 64 6c 65 3a 0a 0a 09 23 20 4f 6e 65 20 63  andle:...# One c
3b60: 61 73 65 20 69 73 20 73 69 6d 70 6c 65 2e 20 20  ase is simple.  
3b70: 54 68 65 20 52 43 53 20 66 69 6c 65 20 6c 69 73  The RCS file lis
3b80: 74 73 20 61 20 64 65 66 61 75 6c 74 20 62 72 61  ts a default bra
3b90: 6e 63 68 0a 09 23 20 65 78 70 6c 69 63 69 74 6c  nch..# explicitl
3ba0: 79 20 69 6e 20 69 74 73 20 68 65 61 64 65 72 2c  y in its header,
3bb0: 20 73 75 63 68 20 61 73 20 27 31 2e 31 2e 31 27   such as '1.1.1'
3bc0: 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  .  In this case,
3bd0: 20 77 65 0a 09 23 20 6b 6e 6f 77 20 74 68 61 74   we..# know that
3be0: 20 65 76 65 72 79 20 72 65 76 69 73 69 6f 6e 20   every revision 
3bf0: 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72  on the vendor br
3c00: 61 6e 63 68 20 69 73 20 74 6f 20 62 65 0a 09 23  anch is to be..#
3c10: 20 74 72 65 61 74 65 64 20 61 73 20 68 65 61 64   treated as head
3c20: 20 6f 66 20 74 72 75 6e 6b 20 61 74 20 74 68 61   of trunk at tha
3c30: 74 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e  t point in time.
3c40: 0a 0a 09 23 20 42 75 74 20 74 68 65 72 65 27 73  ...# But there's
3c50: 20 61 6c 73 6f 20 61 20 64 65 67 65 6e 65 72 61   also a degenera
3c60: 74 65 20 63 61 73 65 2e 20 20 54 68 65 20 52 43  te case.  The RC
3c70: 53 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 0a  S file does not.
3c80: 09 23 20 63 75 72 72 65 6e 74 6c 79 20 68 61 76  .# currently hav
3c90: 65 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e  e a default bran
3ca0: 63 68 2c 20 79 65 74 20 77 65 20 63 61 6e 20 64  ch, yet we can d
3cb0: 65 64 75 63 65 20 74 68 61 74 20 66 6f 72 0a 09  educe that for..
3cc0: 23 20 73 6f 6d 65 20 70 65 72 69 6f 64 20 69 6e  # some period in
3cd0: 20 74 68 65 20 70 61 73 74 20 69 74 20 70 72 6f   the past it pro
3ce0: 62 61 62 6c 79 20 2a 64 69 64 2a 20 68 61 76 65  bably *did* have
3cf0: 20 6f 6e 65 2e 20 20 46 6f 72 0a 09 23 20 65 78   one.  For..# ex
3d00: 61 6d 70 6c 65 2c 20 74 68 65 20 66 69 6c 65 20  ample, the file 
3d10: 68 61 73 20 76 65 6e 64 6f 72 20 72 65 76 69 73  has vendor revis
3d20: 69 6f 6e 73 20 31 2e 31 2e 31 2e 31 20 2d 3e 20  ions 1.1.1.1 -> 
3d30: 31 2e 31 2e 31 2e 39 36 2c 0a 09 23 20 61 6c 6c  1.1.1.96,..# all
3d40: 20 6f 66 20 77 68 69 63 68 20 61 72 65 20 64 61   of which are da
3d50: 74 65 64 20 62 65 66 6f 72 65 20 31 2e 32 2c 20  ted before 1.2, 
3d60: 61 6e 64 20 74 68 65 6e 20 69 74 20 68 61 73 20  and then it has 
3d70: 31 2e 31 2e 31 2e 39 37 0a 09 23 20 2d 3e 20 31  1.1.1.97..# -> 1
3d80: 2e 31 2e 31 2e 31 30 30 20 64 61 74 65 64 20 61  .1.1.100 dated a
3d90: 66 74 65 72 20 31 2e 32 2e 20 20 49 6e 20 74 68  fter 1.2.  In th
3da0: 69 73 20 63 61 73 65 2c 20 77 65 20 73 68 6f 75  is case, we shou
3db0: 6c 64 0a 09 23 20 72 65 63 6f 72 64 20 31 2e 31  ld..# record 1.1
3dc0: 2e 31 2e 39 36 20 61 73 20 74 68 65 20 6c 61 73  .1.96 as the las
3dd0: 74 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f  t vendor revisio
3de0: 6e 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 74  n to have been t
3df0: 68 65 0a 09 23 20 68 65 61 64 20 6f 66 20 74 68  he..# head of th
3e00: 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  e default branch
3e10: 2e 0a 0a 09 69 66 20 7b 24 6d 79 70 72 69 6e 63  ....if {$myprinc
3e20: 69 70 61 6c 20 6e 65 20 22 22 7d 20 7b 0a 09 20  ipal ne ""} {.. 
3e30: 20 20 20 23 20 54 68 65 72 65 20 69 73 20 73 74     # There is st
3e40: 69 6c 6c 20 61 20 64 65 66 61 75 6c 74 20 62 72  ill a default br
3e50: 61 6e 63 68 3b 20 74 68 61 74 20 6d 65 61 6e 73  anch; that means
3e60: 20 74 68 61 74 20 61 6c 6c 0a 09 20 20 20 20 23   that all..    #
3e70: 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68   revisions on th
3e80: 61 74 20 62 72 61 6e 63 68 20 67 65 74 20 6d 61  at branch get ma
3e90: 72 6b 65 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20  rked....    log 
3ea0: 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 46 6f  write 5 file "Fo
3eb0: 75 6e 64 20 65 78 70 6c 69 63 69 74 6c 79 20 6d  und explicitly m
3ec0: 61 72 6b 65 64 20 4e 54 44 42 22 0a 0a 09 20 20  arked NTDB"...  
3ed0: 20 20 73 65 74 20 72 6e 65 78 74 20 5b 24 6d 79    set rnext [$my
3ee0: 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20  root child]..   
3ef0: 20 69 66 20 7b 24 72 6e 65 78 74 20 6e 65 20 22   if {$rnext ne "
3f00: 22 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 66  "} {...trouble f
3f10: 61 74 61 6c 20 22 46 69 6c 65 20 77 69 74 68 20  atal "File with 
3f20: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 24  default branch $
3f30: 6d 79 70 72 69 6e 63 69 70 61 6c 20 61 6c 73 6f  myprincipal also
3f40: 20 68 61 73 20 72 65 76 69 73 69 6f 6e 20 5b 24   has revision [$
3f50: 72 6e 65 78 74 20 72 65 76 6e 72 5d 22 0a 09 09  rnext revnr]"...
3f60: 72 65 74 75 72 6e 0a 09 20 20 20 20 7d 0a 0a 09  return..    }...
3f70: 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 6d 79      set rev [$my
3f80: 62 72 61 6e 63 68 65 73 28 24 6d 79 70 72 69 6e  branches($myprin
3f90: 63 69 70 61 6c 29 20 63 68 69 6c 64 5d 0a 09 20  cipal) child].. 
3fa0: 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a 0a 09     set res {}...
3fb0: 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65 76 20      while {$rev 
3fc0: 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65  ne ""} {...lappe
3fd0: 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 73 65  nd res $rev...se
3fe0: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c  t rev [$rev chil
3ff0: 64 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  d]..    }...    
4000: 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20  return $res...} 
4010: 65 6c 73 65 69 66 20 7b 24 6d 79 69 6d 70 6f 72  elseif {$myimpor
4020: 74 65 64 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f  ted} {..    # No
4030: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c   default branch,
4040: 20 62 75 74 20 74 68 65 20 66 69 6c 65 20 61 70   but the file ap
4050: 70 65 61 72 73 20 74 6f 20 68 61 76 65 20 62 65  pears to have be
4060: 65 6e 0a 09 20 20 20 20 23 20 69 6d 70 6f 72 74  en..    # import
4070: 65 64 2e 20 20 53 6f 20 6f 75 72 20 65 64 75 63  ed.  So our educ
4080: 61 74 65 64 20 67 75 65 73 73 20 69 73 20 74 68  ated guess is th
4090: 61 74 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73  at all revisions
40a0: 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 65 20 27  ..    # on the '
40b0: 31 2e 31 2e 31 27 20 62 72 61 6e 63 68 20 77 69  1.1.1' branch wi
40c0: 74 68 20 74 69 6d 65 73 74 61 6d 70 73 20 70 72  th timestamps pr
40d0: 69 6f 72 20 74 6f 20 74 68 65 0a 09 20 20 20 20  ior to the..    
40e0: 23 20 74 69 6d 65 73 74 61 6d 70 20 6f 66 20 27  # timestamp of '
40f0: 31 2e 32 27 20 77 65 72 65 20 6e 6f 6e 2d 74 72  1.2' were non-tr
4100: 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e  unk default bran
4110: 63 68 0a 09 20 20 20 20 23 20 72 65 76 69 73 69  ch..    # revisi
4120: 6f 6e 73 2e 0a 09 20 20 20 20 0a 09 20 20 20 20  ons...    ..    
4130: 23 20 54 68 69 73 20 72 65 61 6c 6c 79 20 6f 6e  # This really on
4140: 6c 79 20 70 72 6f 63 65 73 73 65 73 20 73 74 61  ly processes sta
4150: 6e 64 61 72 64 20 27 31 2e 31 2e 31 2e 2a 27 2d  ndard '1.1.1.*'-
4160: 73 74 79 6c 65 0a 09 20 20 20 20 23 20 76 65 6e  style..    # ven
4170: 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e 20 20  dor revisions.  
4180: 4f 6e 65 20 63 6f 75 6c 64 20 63 6f 6e 63 65 69  One could concei
4190: 76 61 62 6c 79 20 68 61 76 65 20 61 20 66 69 6c  vably have a fil
41a0: 65 0a 09 20 20 20 20 23 20 77 68 6f 73 65 20 64  e..    # whose d
41b0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73  efault branch is
41c0: 20 31 2e 31 2e 33 20 6f 72 20 77 68 61 74 65 76   1.1.3 or whatev
41d0: 65 72 2c 20 6f 72 20 77 61 73 20 74 68 61 74 0a  er, or was that.
41e0: 09 20 20 20 20 23 20 61 74 20 73 6f 6d 65 20 70  .    # at some p
41f0: 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 77 69  oint in time, wi
4200: 74 68 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69  th vendor revisi
4210: 6f 6e 73 20 31 2e 31 2e 33 2e 31 2c 0a 09 20 20  ons 1.1.3.1,..  
4220: 20 20 23 20 31 2e 31 2e 33 2e 32 2c 20 65 74 63    # 1.1.3.2, etc
4230: 2e 20 20 42 75 74 20 77 69 74 68 20 74 68 65 20  .  But with the 
4240: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 67  default branch g
4250: 6f 6e 65 20 6e 6f 77 2c 0a 09 20 20 20 20 23 20  one now,..    # 
4260: 77 65 27 64 20 68 61 76 65 20 6e 6f 20 62 61 73  we'd have no bas
4270: 69 73 20 66 6f 72 20 61 73 73 75 6d 69 6e 67 20  is for assuming 
4280: 74 68 61 74 20 74 68 65 20 6e 6f 6e 2d 73 74 61  that the non-sta
4290: 6e 64 61 72 64 0a 09 20 20 20 20 23 20 76 65 6e  ndard..    # ven
42a0: 64 6f 72 20 62 72 61 6e 63 68 20 68 61 64 20 65  dor branch had e
42b0: 76 65 72 20 62 65 65 6e 20 74 68 65 20 64 65 66  ver been the def
42c0: 61 75 6c 74 20 62 72 61 6e 63 68 20 61 6e 79 77  ault branch anyw
42d0: 61 79 2e 0a 09 20 20 20 20 0a 09 20 20 20 20 23  ay...    ..    #
42e0: 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 72 65   Note that we re
42f0: 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73 6f 6e  ly on comparison
4300: 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 69  s between the ti
4310: 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 20 23 20  mestamps..    # 
4320: 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73  of the revisions
4330: 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62   on the vendor b
4340: 72 61 6e 63 68 20 61 6e 64 20 74 68 61 74 20 6f  ranch and that o
4350: 66 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 6f  f..    # revisio
4360: 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 68 6f 75  n 1.2, even thou
4370: 67 68 20 74 68 65 20 74 69 6d 65 73 74 61 6d 70  gh the timestamp
4380: 73 20 6d 69 67 68 74 20 62 65 0a 09 20 20 20 20  s might be..    
4390: 23 20 69 6e 63 6f 72 72 65 63 74 20 64 75 65 20  # incorrect due 
43a0: 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e 20 20  to clock skew.  
43b0: 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 20 73 6c  We could do a sl
43c0: 69 67 68 74 6c 79 0a 09 20 20 20 20 23 20 62 65  ightly..    # be
43d0: 74 74 65 72 20 6a 6f 62 20 69 66 20 77 65 20 75  tter job if we u
43e0: 73 65 64 20 74 68 65 20 63 68 61 6e 67 65 73 65  sed the changese
43f0: 74 20 74 69 6d 65 73 74 61 6d 70 73 2c 20 61 73  t timestamps, as
4400: 20 69 74 20 69 73 0a 09 20 20 20 20 23 20 70 6f   it is..    # po
4410: 73 73 69 62 6c 65 20 74 68 61 74 20 74 68 65 20  ssible that the 
4420: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74 68 61  dependencies tha
4430: 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20 20 20  t went into..   
4440: 20 23 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 74   # determining t
4450: 68 6f 73 65 20 74 69 6d 65 73 74 61 6d 70 73 20  hose timestamps 
4460: 61 72 65 20 6d 6f 72 65 20 61 63 63 75 72 61 74  are more accurat
4470: 65 2e 20 20 42 75 74 0a 09 20 20 20 20 23 20 74  e.  But..    # t
4480: 68 61 74 20 77 6f 75 6c 64 20 72 65 71 75 69 72  hat would requir
4490: 65 20 61 6e 20 65 78 74 72 61 20 70 61 73 73 20  e an extra pass 
44a0: 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20 69 66  or two....    if
44b0: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
44c0: 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 2e 31  mybranches(1.1.1
44d0: 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b 7d 20  )]} { return {} 
44e0: 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  }...    log writ
44f0: 65 20 35 20 66 69 6c 65 20 22 44 65 64 75 63 65  e 5 file "Deduce
4500: 64 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 4e  d existence of N
4510: 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 20 72  TDB"...    set r
4520: 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 68 65 73  ev  [$mybranches
4530: 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d 0a 09  (1.1.1) child]..
4540: 20 20 20 20 73 65 74 20 72 65 73 20 20 7b 7d 0a      set res  {}.
4550: 09 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 24  .    set stop [$
4560: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 0a 09  myroot child]...
4570: 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20 65 71      if {$stop eq
4580: 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 74 20 65   ""} {...# Get e
4590: 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 65  verything on the
45a0: 20 62 72 61 6e 63 68 0a 09 09 77 68 69 6c 65 20   branch...while 
45b0: 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09  {$rev ne ""} {..
45c0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
45d0: 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 74 20   $rev...    set 
45e0: 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d  rev [$rev child]
45f0: 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73 65  ...}..    } else
4600: 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74 20 65   {...# Collect e
4610: 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 65  verything on the
4620: 20 62 72 61 6e 63 68 20 77 68 69 63 68 20 73 65   branch which se
4630: 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 09 23 20  ems to have...# 
4640: 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64 20 62  been committed b
4650: 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  efore the first 
4660: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66  primary child of
4670: 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 20 72 65   the...# root re
4680: 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20 73 74  vision....set st
4690: 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 20 64 61  opdate [$stop da
46a0: 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24 72 65  te]...while {$re
46b0: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20  v ne ""} {...   
46c0: 20 69 66 20 7b 5b 24 72 65 76 20 64 61 74 65 5d   if {[$rev date]
46d0: 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d 20 62   >= $stopdate} b
46e0: 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 70 70 65  reak...    lappe
46f0: 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 20 20  nd res $rev...  
4700: 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20    set rev [$rev 
4710: 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20  child]...}..    
4720: 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20 24  }...    return $
4730: 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  res...} else {..
4740: 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a 09 7d      return {}..}
4750: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
4760: 6f 64 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e  od AdjustNonTrun
4770: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b  kDefaultBranch {
4780: 72 65 76 6c 69 73 74 7d 20 7b 0a 09 73 65 74 20  revlist} {..set 
4790: 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74 20 63 68  stop [$myroot ch
47a0: 69 6c 64 5d 20 3b 23 20 72 65 76 20 27 31 2e 32  ild] ;# rev '1.2
47b0: 27 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 35 20  '...log write 5 
47c0: 66 69 6c 65 20 22 41 64 6a 75 73 74 69 6e 67 20  file "Adjusting 
47d0: 4e 54 44 42 20 63 6f 6e 74 61 69 6e 69 6e 67 20  NTDB containing 
47e0: 5b 6e 73 70 20 5b 6c 6c 65 6e 67 74 68 20 24 72  [nsp [llength $r
47f0: 65 76 6c 69 73 74 5d 20 72 65 76 69 73 69 6f 6e  evlist] revision
4800: 5d 22 0a 0a 09 23 20 46 72 6f 6d 20 63 76 73 32  ]"...# From cvs2
4810: 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  svn the followin
4820: 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 77  g explanation (w
4830: 69 74 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e  ith modification
4840: 73 0a 09 23 20 66 6f 72 20 6f 75 72 20 61 6c 67  s..# for our alg
4850: 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20 41 64 6a  orithm):...# Adj
4860: 75 73 74 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e  ust the non-trun
4870: 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  k default branch
4880: 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64   revisions found
4890: 20 69 6e 20 74 68 65 0a 09 23 20 27 72 65 76 6c   in the..# 'revl
48a0: 69 73 74 27 2e 0a 0a 09 23 20 27 6d 79 69 6d 70  ist'....# 'myimp
48b0: 6f 72 74 65 64 27 20 69 73 20 61 20 62 6f 6f 6c  orted' is a bool
48c0: 65 61 6e 20 66 6c 61 67 20 69 6e 64 69 63 61 74  ean flag indicat
48d0: 69 6e 67 20 77 68 65 74 68 65 72 20 74 68 69 73  ing whether this
48e0: 20 66 69 6c 65 0a 09 23 20 61 70 70 65 61 72 73   file..# appears
48f0: 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 69 6d   to have been im
4900: 70 6f 72 74 65 64 2c 20 77 68 69 63 68 20 61 6c  ported, which al
4910: 73 6f 20 6d 65 61 6e 73 20 74 68 61 74 0a 09 23  so means that..#
4920: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 20 68 61   revision 1.1 ha
4930: 73 20 61 20 67 65 6e 65 72 61 74 65 64 20 6c 6f  s a generated lo
4940: 67 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 6e  g message that n
4950: 65 65 64 20 6e 6f 74 20 62 65 0a 09 23 20 70 72  eed not be..# pr
4960: 65 73 65 72 76 65 64 2e 20 20 27 72 65 76 6c 69  eserved.  'revli
4970: 73 74 27 20 69 73 20 61 20 6c 69 73 74 20 6f 66  st' is a list of
4980: 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
4990: 65 73 20 66 6f 72 20 74 68 65 0a 09 23 20 72 65  es for the..# re
49a0: 76 69 73 69 6f 6e 73 20 74 68 61 74 20 68 61 76  visions that hav
49b0: 65 20 62 65 65 6e 20 64 65 74 65 72 6d 69 6e 65  e been determine
49c0: 64 20 74 6f 20 62 65 20 6e 6f 6e 2d 74 72 75 6e  d to be non-trun
49d0: 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61  k default..# bra
49e0: 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a  nch revisions...
49f0: 09 23 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .# Note that the
4a00: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20   first revision 
4a10: 6f 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  on the default b
4a20: 72 61 6e 63 68 20 69 73 0a 09 23 20 68 61 6e 64  ranch is..# hand
4a30: 6c 65 64 20 73 74 72 61 6e 67 65 6c 79 20 62 79  led strangely by
4a40: 20 43 56 53 2e 20 20 49 66 20 61 20 66 69 6c 65   CVS.  If a file
4a50: 20 69 73 20 69 6d 70 6f 72 74 65 64 20 28 61 73   is imported (as
4a60: 20 6f 70 70 6f 73 65 64 0a 09 23 20 74 6f 20 62   opposed..# to b
4a70: 65 69 6e 67 20 61 64 64 65 64 29 2c 20 43 56 53  eing added), CVS
4a80: 20 63 72 65 61 74 65 73 20 61 20 31 2e 31 20 72   creates a 1.1 r
4a90: 65 76 69 73 69 6f 6e 2c 20 74 68 65 6e 20 63 72  evision, then cr
4aa0: 65 61 74 65 73 20 61 0a 09 23 20 76 65 6e 64 6f  eates a..# vendo
4ab0: 72 20 62 72 61 6e 63 68 20 31 2e 31 2e 31 20 62  r branch 1.1.1 b
4ac0: 61 73 65 64 20 6f 6e 20 31 2e 31 2c 20 74 68 65  ased on 1.1, the
4ad0: 6e 20 63 72 65 61 74 65 73 20 61 20 31 2e 31 2e  n creates a 1.1.
4ae0: 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20  1.1..# revision 
4af0: 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 63 61  that is identica
4b00: 6c 20 74 6f 20 74 68 65 20 31 2e 31 20 72 65 76  l to the 1.1 rev
4b10: 69 73 69 6f 6e 20 28 69 2e 65 2e 2c 20 69 74 73  ision (i.e., its
4b20: 0a 09 23 20 64 65 6c 74 61 74 65 78 74 20 69 73  ..# deltatext is
4b30: 20 65 6d 70 74 79 29 2e 20 20 54 68 65 20 6c 6f   empty).  The lo
4b40: 67 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 74  g message that t
4b50: 68 65 20 75 73 65 72 20 74 79 70 65 64 0a 09 23  he user typed..#
4b60: 20 77 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67 20   when importing 
4b70: 69 73 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  is stored with t
4b80: 68 65 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73  he 1.1.1.1 revis
4b90: 69 6f 6e 2e 20 20 54 68 65 20 31 2e 31 0a 09 23  ion.  The 1.1..#
4ba0: 20 72 65 76 69 73 69 6f 6e 20 61 6c 77 61 79 73   revision always
4bb0: 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 74 61 6e   contains a stan
4bc0: 64 61 72 64 2c 20 67 65 6e 65 72 61 74 65 64 20  dard, generated 
4bd0: 6c 6f 67 20 6d 65 73 73 61 67 65 2c 0a 09 23 20  log message,..# 
4be0: 27 49 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f  'Initial revisio
4bf0: 6e 5c 6e 27 2e 0a 0a 09 23 20 57 68 65 6e 20 77  n\n'....# When w
4c00: 65 20 64 65 74 65 63 74 20 61 20 73 74 72 61 69  e detect a strai
4c10: 67 68 74 66 6f 72 77 61 72 64 20 69 6d 70 6f 72  ghtforward impor
4c20: 74 20 6c 69 6b 65 20 74 68 69 73 2c 20 77 65 20  t like this, we 
4c30: 77 61 6e 74 0a 09 23 20 74 6f 20 68 61 6e 64 6c  want..# to handl
4c40: 65 20 69 74 20 62 79 20 64 65 6c 65 74 69 6e 67  e it by deleting
4c50: 20 74 68 65 20 31 2e 31 20 72 65 76 69 73 69 6f   the 1.1 revisio
4c60: 6e 20 28 77 68 69 63 68 20 64 6f 65 73 6e 27 74  n (which doesn't
4c70: 0a 09 23 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20  ..# contain any 
4c80: 75 73 65 66 75 6c 20 69 6e 66 6f 72 6d 61 74 69  useful informati
4c90: 6f 6e 29 20 61 6e 64 20 6d 61 6b 69 6e 67 20 31  on) and making 1
4ca0: 2e 31 2e 31 2e 31 20 69 6e 74 6f 20 61 6e 0a 09  .1.1.1 into an..
4cb0: 23 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 72 6f  # independent ro
4cc0: 6f 74 20 69 6e 20 74 68 65 20 66 69 6c 65 27 73  ot in the file's
4cd0: 20 64 65 70 65 6e 64 65 6e 63 79 20 74 72 65 65   dependency tree
4ce0: 2e 20 20 49 6e 20 53 56 4e 2c 0a 09 23 20 31 2e  .  In SVN,..# 1.
4cf0: 31 2e 31 2e 31 20 77 69 6c 6c 20 62 65 20 61 64  1.1.1 will be ad
4d00: 64 65 64 20 64 69 72 65 63 74 6c 79 20 74 6f 20  ded directly to 
4d10: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  the vendor branc
4d20: 68 20 77 69 74 68 20 69 74 73 0a 09 23 20 69 6e  h with its..# in
4d30: 69 74 69 61 6c 20 63 6f 6e 74 65 6e 74 2e 20 20  itial content.  
4d40: 54 68 65 6e 20 69 6e 20 61 20 73 70 65 63 69 61  Then in a specia
4d50: 6c 20 27 70 6f 73 74 2d 63 6f 6d 6d 69 74 27 2c  l 'post-commit',
4d60: 20 74 68 65 0a 09 23 20 31 2e 31 2e 31 2e 31 20   the..# 1.1.1.1 
4d70: 72 65 76 69 73 69 6f 6e 20 69 73 20 63 6f 70 69  revision is copi
4d80: 65 64 20 62 61 63 6b 20 74 6f 20 74 72 75 6e 6b  ed back to trunk
4d90: 2e 0a 0a 09 23 20 49 66 20 74 68 65 20 75 73 65  ....# If the use
4da0: 72 20 69 6d 70 6f 72 74 73 20 61 67 61 69 6e 20  r imports again 
4db0: 74 6f 20 74 68 65 20 73 61 6d 65 20 76 65 6e 64  to the same vend
4dc0: 6f 72 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20  or branch, then 
4dd0: 43 56 53 0a 09 23 20 63 72 65 61 74 65 73 20 72  CVS..# creates r
4de0: 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 32  evisions 1.1.1.2
4df0: 2c 20 31 2e 31 2e 31 2e 33 2c 20 65 74 63 2e 20  , 1.1.1.3, etc. 
4e00: 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72  on the vendor br
4e10: 61 6e 63 68 2c 0a 09 23 20 2a 77 69 74 68 6f 75  anch,..# *withou
4e20: 74 2a 20 63 6f 75 6e 74 65 72 70 61 72 74 73 20  t* counterparts 
4e30: 69 6e 20 74 72 75 6e 6b 20 28 65 76 65 6e 20 74  in trunk (even t
4e40: 68 6f 75 67 68 20 74 68 65 73 65 20 72 65 76 69  hough these revi
4e50: 73 69 6f 6e 73 0a 09 23 20 65 66 66 65 63 74 69  sions..# effecti
4e60: 76 65 6c 79 20 70 6c 61 79 20 74 68 65 20 72 6f  vely play the ro
4e70: 6c 65 20 6f 66 20 74 72 75 6e 6b 20 72 65 76 69  le of trunk revi
4e80: 73 69 6f 6e 73 29 2e 20 20 53 6f 20 61 66 74 65  sions).  So afte
4e90: 72 20 77 65 20 61 64 64 0a 09 23 20 73 75 63 68  r we add..# such
4ea0: 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 20 74 68   revisions to th
4eb0: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c  e vendor branch,
4ec0: 20 77 65 20 61 6c 73 6f 20 63 6f 70 79 20 74 68   we also copy th
4ed0: 65 6d 20 62 61 63 6b 20 74 6f 0a 09 23 20 74 72  em back to..# tr
4ee0: 75 6e 6b 20 69 6e 20 70 6f 73 74 2d 63 6f 6d 6d  unk in post-comm
4ef0: 69 74 73 2e 0a 0a 09 23 20 57 65 20 6d 61 72 6b  its....# We mark
4f00: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 66   the revisions f
4f10: 6f 75 6e 64 20 69 6e 20 27 72 65 76 6c 69 73 74  ound in 'revlist
4f20: 27 20 61 73 20 64 65 66 61 75 6c 74 20 62 72 61  ' as default bra
4f30: 6e 63 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73  nch..# revisions
4f40: 2e 20 20 41 6c 73 6f 2c 20 69 66 20 74 68 65 20  .  Also, if the 
4f50: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 68 61  root revision ha
4f60: 73 20 61 20 70 72 69 6d 61 72 79 20 63 68 69 6c  s a primary chil
4f70: 64 0a 09 23 20 77 65 20 73 65 74 20 74 68 61 74  d..# we set that
4f80: 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 64 65 70   revision to dep
4f90: 65 6e 64 20 6f 6e 20 74 68 65 20 6c 61 73 74 20  end on the last 
4fa0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
4fb0: 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69  t..# branch revi
4fc0: 73 69 6f 6e 20 61 6e 64 20 70 6f 73 73 69 62 6c  sion and possibl
4fd0: 79 20 61 64 6a 75 73 74 20 69 74 73 20 74 79 70  y adjust its typ
4fe0: 65 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a  e accordingly...
4ff0: 09 73 65 74 20 66 69 72 73 74 20 5b 6c 69 6e 64  .set first [lind
5000: 65 78 20 24 72 65 76 6c 69 73 74 20 30 5d 0a 0a  ex $revlist 0]..
5010: 09 6c 6f 67 20 77 72 69 74 65 20 36 20 66 69 6c  .log write 6 fil
5020: 65 20 22 3c 5b 24 66 69 72 73 74 20 72 65 76 6e  e "<[$first revn
5030: 72 5d 3e 20 5b 65 78 70 72 20 7b 24 6d 79 69 6d  r]> [expr {$myim
5040: 70 6f 72 74 65 64 20 3f 20 22 69 6d 70 6f 72 74  ported ? "import
5050: 65 64 22 20 3a 20 22 6e 6f 74 20 69 6d 70 6f 72  ed" : "not impor
5060: 74 65 64 22 7d 5d 2c 20 5b 24 66 69 72 73 74 20  ted"}], [$first 
5070: 6f 70 65 72 61 74 69 6f 6e 5d 2c 20 5b 65 78 70  operation], [exp
5080: 72 20 7b 5b 24 66 69 72 73 74 20 68 61 73 74 65  r {[$first haste
5090: 78 74 5d 20 3f 20 22 68 61 73 20 74 65 78 74 22  xt] ? "has text"
50a0: 20 3a 20 22 6e 6f 20 74 65 78 74 22 7d 5d 22 0a   : "no text"}]".
50b0: 0a 09 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65  ..if {$myimporte
50c0: 64 20 26 26 0a 09 20 20 20 20 5b 24 66 69 72 73  d &&..    [$firs
50d0: 74 20 72 65 76 6e 72 5d 20 65 71 20 22 31 2e 31  t revnr] eq "1.1
50e0: 2e 31 2e 31 22 20 26 26 0a 09 20 20 20 20 5b 24  .1.1" &&..    [$
50f0: 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d  first operation]
5100: 20 65 71 20 22 63 68 61 6e 67 65 22 20 26 26 0a   eq "change" &&.
5110: 09 20 20 20 20 21 5b 24 66 69 72 73 74 20 68 61  .    ![$first ha
5120: 73 74 65 78 74 5d 7d 20 7b 0a 0a 09 20 20 20 20  stext]} {...    
5130: 73 65 74 20 72 65 76 31 31 20 5b 24 66 69 72 73  set rev11 [$firs
5140: 74 20 70 61 72 65 6e 74 5d 20 3b 20 23 20 41 73  t parent] ; # As
5150: 73 65 72 74 3a 20 53 68 6f 75 6c 64 20 62 65 20  sert: Should be 
5160: 6d 79 72 6f 6f 74 2e 0a 09 20 20 20 20 6c 6f 67  myroot...    log
5170: 20 77 72 69 74 65 20 33 20 66 69 6c 65 20 22 52   write 3 file "R
5180: 65 6d 6f 76 69 6e 67 20 69 72 72 65 6c 65 76 61  emoving irreleva
5190: 6e 74 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 65  nt revision [$re
51a0: 76 31 31 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20  v11 revnr]"...  
51b0: 20 20 23 20 43 75 74 20 6f 75 74 20 74 68 65 20    # Cut out the 
51c0: 6f 6c 64 20 6d 79 72 6f 6f 74 20 72 65 76 69 73  old myroot revis
51d0: 69 6f 6e 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65  ion....    ldele
51e0: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31  te myroots $rev1
51f0: 31 20 3b 20 23 20 4e 6f 74 20 61 20 72 6f 6f 74  1 ; # Not a root
5200: 20 61 6e 79 20 6c 6f 6e 67 65 72 2e 0a 09 20 20   any longer...  
5210: 20 20 75 6e 73 65 74 20 6d 79 72 65 76 28 5b 24    unset myrev([$
5220: 72 65 76 31 31 20 72 65 76 6e 72 5d 29 0a 0a 09  rev11 revnr])...
5230: 20 20 20 20 24 66 69 72 73 74 20 63 75 74 66 72      $first cutfr
5240: 6f 6d 70 61 72 65 6e 74 20 3b 20 23 20 53 65 76  omparent ; # Sev
5250: 65 72 20 72 65 76 69 73 69 6f 6e 20 66 72 6f 6d  er revision from
5260: 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e   parent revision
5270: 2e 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70  ...    if {$stop
5280: 20 6e 65 20 22 22 7d 20 7b 0a 09 09 24 73 74 6f   ne ""} {...$sto
5290: 70 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a  p cutfromparent.
52a0: 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74  ..lappend myroot
52b0: 73 20 24 73 74 6f 70 20 3b 20 23 20 4e 65 77 20  s $stop ; # New 
52c0: 72 6f 6f 74 2c 20 61 66 74 65 72 20 76 65 6e 64  root, after vend
52d0: 6f 72 20 62 72 61 6e 63 68 0a 09 20 20 20 20 7d  or branch..    }
52e0: 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74  ...    # Cut out
52f0: 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e   the vendor bran
5300: 63 68 20 73 79 6d 62 6f 6c 0a 0a 09 20 20 20 20  ch symbol...    
5310: 73 65 74 20 76 65 6e 64 6f 72 20 5b 24 66 69 72  set vendor [$fir
5320: 73 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d  st parentbranch]
5330: 0a 09 20 20 20 20 69 66 20 7b 24 76 65 6e 64 6f  ..    if {$vendo
5340: 72 20 65 71 20 22 22 7d 20 7b 20 74 72 6f 75 62  r eq ""} { troub
5350: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 46 69 72  le internal "Fir
5360: 73 74 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e  st NTDB revision
5370: 20 68 61 73 20 6e 6f 20 62 72 61 6e 63 68 22 20   has no branch" 
5380: 7d 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65 6e  }..    if {[$ven
5390: 64 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20 24  dor parent] eq $
53a0: 72 65 76 31 31 7d 20 7b 0a 09 09 75 6e 73 65 74  rev11} {...unset
53b0: 20 6d 79 62 72 61 6e 63 68 65 73 28 5b 24 76 65   mybranches([$ve
53c0: 6e 64 6f 72 20 62 72 61 6e 63 68 6e 72 5d 29 0a  ndor branchnr]).
53d0: 09 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 62  ..$rev11 removeb
53e0: 72 61 6e 63 68 20 20 20 20 20 20 20 20 24 76 65  ranch        $ve
53f0: 6e 64 6f 72 0a 09 09 24 72 65 76 31 31 20 72 65  ndor...$rev11 re
5400: 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63  movechildonbranc
5410: 68 20 24 66 69 72 73 74 0a 09 09 24 66 69 72 73  h $first...$firs
5420: 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 62  t cutfromparentb
5430: 72 61 6e 63 68 0a 09 09 6c 61 70 70 65 6e 64 20  ranch...lappend 
5440: 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a 09  myroots $first..
5450: 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 68      }...    # Ch
5460: 61 6e 67 65 20 74 68 65 20 74 79 70 65 20 6f 66  ange the type of
5470: 20 66 69 72 73 74 20 28 74 79 70 69 63 61 6c 6c   first (typicall
5480: 79 20 66 72 6f 6d 20 43 68 61 6e 67 65 20 74 6f  y from Change to
5490: 20 41 64 64 29 3a 0a 09 20 20 20 20 24 66 69 72   Add):..    $fir
54a0: 73 74 20 72 65 74 79 70 65 20 61 64 64 0a 0a 09  st retype add...
54b0: 20 20 20 20 23 20 4d 6f 76 65 20 61 6e 79 20 74      # Move any t
54c0: 61 67 73 20 61 6e 64 20 62 72 61 6e 63 68 65 73  ags and branches
54d0: 20 66 72 6f 6d 20 74 68 65 20 6f 6c 64 20 74 6f   from the old to
54e0: 20 74 68 65 20 6e 65 77 20 72 6f 6f 74 2e 0a 09   the new root...
54f0: 20 20 20 20 24 72 65 76 31 31 20 6d 6f 76 65 73      $rev11 moves
5500: 79 6d 62 6f 6c 73 74 6f 20 24 66 69 72 73 74 0a  ymbolsto $first.
5510: 09 7d 0a 0a 09 23 20 4d 61 72 6b 20 61 6c 6c 20  .}...# Mark all 
5520: 74 68 65 20 73 70 65 63 69 61 6c 20 72 65 76 69  the special revi
5530: 73 69 6f 6e 73 20 61 73 20 73 75 63 68 0a 09 66  sions as such..f
5540: 6f 72 65 61 63 68 20 72 65 76 20 24 72 65 76 6c  oreach rev $revl
5550: 69 73 74 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77  ist {..    log w
5560: 72 69 74 65 20 33 20 66 69 6c 65 20 22 52 65 76  rite 3 file "Rev
5570: 69 73 69 6f 6e 20 6f 6e 20 64 65 66 61 75 6c 74  ision on default
5580: 20 62 72 61 6e 63 68 3a 20 5b 24 72 65 76 20 72   branch: [$rev r
5590: 65 76 6e 72 5d 22 0a 09 20 20 20 20 24 72 65 76  evnr]"..    $rev
55a0: 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e   isondefaultbran
55b0: 63 68 0a 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f  ch..}...if {$sto
55c0: 70 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20  p ne ""} {..    
55d0: 23 20 52 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c  # Revision 1.2 l
55e0: 6f 67 69 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73  ogically follows
55f0: 20 74 68 65 20 69 6d 70 6f 72 74 65 64 20 72 65   the imported re
5600: 76 69 73 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20  visions,..    # 
5610: 6e 6f 74 20 31 2e 31 2e 20 20 41 63 63 6f 72 64  not 1.1.  Accord
5620: 69 6e 67 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69  ingly, connect i
5630: 74 20 74 6f 20 74 68 65 20 6c 61 73 74 20 4e 54  t to the last NT
5640: 44 42 52 20 61 6e 64 0a 09 20 20 20 20 23 20 70  DBR and..    # p
5650: 6f 73 73 69 62 6c 79 20 63 68 61 6e 67 65 20 69  ossibly change i
5660: 74 73 20 74 79 70 65 2e 0a 0a 09 20 20 20 20 73  ts type....    s
5670: 65 74 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20  et last [lindex 
5680: 24 72 65 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20  $revlist end].. 
5690: 20 20 20 24 73 74 6f 70 20 73 65 74 64 65 66 61     $stop setdefa
56a0: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20  ultbranchparent 
56b0: 24 6c 61 73 74 20 3b 20 23 20 52 65 74 79 70 65  $last ; # Retype
56c0: 73 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74  s the revision t
56d0: 6f 6f 2e 0a 09 20 20 20 20 24 6c 61 73 74 20 73  oo...    $last s
56e0: 65 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63  etdefaultbranchc
56f0: 68 69 6c 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09  hild  $stop..}..
5700: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
5710: 20 20 6d 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f    method CheckLO
5720: 44 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68  Ds {} {..foreach
5730: 20 7b 5f 20 62 72 61 6e 63 68 7d 20 20 5b 61 72   {_ branch}  [ar
5740: 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68  ray get mybranch
5750: 65 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 63 68  es] { $branch ch
5760: 65 63 6b 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63  ecklod }..foreac
5770: 68 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61  h {_ taglist} [a
5780: 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d  rray get mytags]
5790: 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20   {..    foreach 
57a0: 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24  tag $taglist { $
57b0: 74 61 67 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09  tag checklod }..
57c0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
57d0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f  .    method Remo
57e0: 76 65 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65  veIrrelevantDele
57f0: 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72  tions {} {..# Fr
5800: 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 61  om cvs2svn: If a
5810: 20 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f   file is added o
5820: 6e 20 61 20 62 72 61 6e 63 68 2c 20 74 68 65 6e  n a branch, then
5830: 20 61 20 74 72 75 6e 6b 0a 09 23 20 72 65 76 69   a trunk..# revi
5840: 73 69 6f 6e 20 69 73 20 61 64 64 65 64 20 61 74  sion is added at
5850: 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 69   the same time i
5860: 6e 20 74 68 65 20 27 44 65 61 64 27 20 73 74 61  n the 'Dead' sta
5870: 74 65 2e 0a 09 23 20 54 68 69 73 20 72 65 76 69  te...# This revi
5880: 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20  sion doesn't do 
5890: 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 2c  anything useful,
58a0: 20 73 6f 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a   so delete it...
58b0: 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d  .foreach root $m
58c0: 79 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 69 66  yroots {..    if
58d0: 20 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65   {[$root isneede
58e0: 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  d]} continue..  
58f0: 20 20 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69    log write 2 fi
5900: 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e  le "Removing unn
5910: 65 63 65 73 73 61 72 79 20 64 65 61 64 20 72 65  ecessary dead re
5920: 76 69 73 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65  vision [$root re
5930: 76 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 52 65  vnr]"...    # Re
5940: 6d 6f 76 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61  move as root, ma
5950: 6b 65 20 69 74 73 20 63 68 69 6c 64 20 6e 65 77  ke its child new
5960: 20 72 6f 6f 74 20 61 66 74 65 72 0a 09 20 20 20   root after..   
5970: 20 23 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67   # disconnecting
5980: 20 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 76   it from the rev
5990: 69 73 69 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67  ision just going
59a0: 20 61 77 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65   away....    lde
59b0: 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f  lete myroots $ro
59c0: 6f 74 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f  ot..    if {[$ro
59d0: 6f 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a  ot haschild]} {.
59e0: 09 09 73 65 74 20 63 68 69 6c 64 20 5b 24 72 6f  ..set child [$ro
59f0: 6f 74 20 63 68 69 6c 64 5d 0a 09 09 24 63 68 69  ot child]...$chi
5a00: 6c 64 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74  ld cutfromparent
5a10: 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f  ...lappend myroo
5a20: 74 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d  ts $child..    }
5a30: 0a 0a 09 20 20 20 20 23 20 52 65 6d 6f 76 65 20  ...    # Remove 
5a40: 74 68 65 20 62 72 61 6e 63 68 65 73 20 73 70 61  the branches spa
5a50: 77 6e 65 64 20 62 79 20 74 68 65 20 72 65 76 69  wned by the revi
5a60: 73 69 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20 20  sion to be..    
5a70: 23 20 64 65 6c 65 74 65 64 2e 20 49 66 20 74 68  # deleted. If th
5a80: 65 20 62 72 61 6e 63 68 20 68 61 73 20 72 65 76  e branch has rev
5a90: 69 73 69 6f 6e 73 20 74 68 65 79 20 73 68 6f 75  isions they shou
5aa0: 6c 64 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20  ld already..    
5ab0: 23 20 75 73 65 20 6f 70 65 72 61 74 69 6f 6e 20  # use operation 
5ac0: 27 61 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20 74  'add', no need t
5ad0: 6f 20 63 68 61 6e 67 65 20 74 68 61 74 2e 20 54  o change that. T
5ae0: 68 65 20 66 69 72 73 74 0a 09 20 20 20 20 23 20  he first..    # 
5af0: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63 68  revision on each
5b00: 20 62 72 61 6e 63 68 20 62 65 63 6f 6d 65 73 20   branch becomes 
5b10: 61 20 6e 65 77 20 61 6e 64 20 64 69 73 63 6f 6e  a new and discon
5b20: 6e 65 63 74 65 64 0a 09 20 20 20 20 23 20 72 6f  nected..    # ro
5b30: 6f 74 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61 63  ot....    foreac
5b40: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20  h branch [$root 
5b50: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 66  branches] {...if
5b60: 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63   {![$branch hasc
5b70: 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  hild]} continue.
5b80: 09 09 73 65 74 20 66 69 72 73 74 20 5b 24 62 72  ..set first [$br
5b90: 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 24 66  anch child]...$f
5ba0: 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65  irst cutfrompare
5bb0: 6e 74 62 72 61 6e 63 68 0a 09 09 24 66 69 72 73  ntbranch...$firs
5bc0: 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a  t cutfromparent.
5bd0: 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74  ..lappend myroot
5be0: 73 20 24 66 69 72 73 74 0a 09 20 20 20 20 7d 0a  s $first..    }.
5bf0: 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76  .    $root remov
5c00: 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 0a 09 20  eallbranches... 
5c10: 20 20 20 23 20 54 61 67 67 69 6e 67 20 61 20 64     # Tagging a d
5c20: 65 61 64 20 72 65 76 69 73 69 6f 6e 20 64 6f 65  ead revision doe
5c30: 73 6e 27 74 20 64 6f 20 61 6e 79 74 68 69 6e 67  sn't do anything
5c40: 2c 20 73 6f 20 72 65 6d 6f 76 65 0a 09 20 20 20  , so remove..   
5c50: 20 23 20 61 6e 79 20 74 61 67 73 20 74 68 61 74   # any tags that
5c60: 20 77 65 72 65 20 73 65 74 20 6f 6e 20 69 74 2e   were set on it.
5c70: 0a 0a 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d  ...    $root rem
5c80: 6f 76 65 61 6c 6c 74 61 67 73 0a 0a 09 20 20 20  ovealltags...   
5c90: 20 23 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79   # This can only
5ca0: 20 68 61 70 70 65 6e 20 6f 6e 63 65 20 70 65 72   happen once per
5cb0: 20 66 69 6c 65 2c 20 61 6e 64 20 77 65 20 6d 69   file, and we mi
5cc0: 67 68 74 20 68 61 76 65 0a 09 20 20 20 20 23 20  ght have..    # 
5cd0: 6a 75 73 74 20 63 68 61 6e 67 65 64 20 6d 79 72  just changed myr
5ce0: 6f 6f 74 73 2c 20 73 6f 20 65 6e 64 20 74 68 65  oots, so end the
5cf0: 20 6c 6f 6f 70 0a 09 20 20 20 20 62 72 65 61 6b   loop..    break
5d00: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
5d10: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65  }..    method Re
5d20: 6d 6f 76 65 49 6e 69 74 69 61 6c 42 72 61 6e 63  moveInitialBranc
5d30: 68 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a  hDeletions {} {.
5d40: 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a  .# From cvs2svn:
5d50: 20 49 66 20 74 68 65 20 66 69 72 73 74 20 72 65   If the first re
5d60: 76 69 73 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e  vision on a bran
5d70: 63 68 20 69 73 20 61 6e 0a 09 23 20 75 6e 6e 65  ch is an..# unne
5d80: 63 65 73 73 61 72 79 20 64 65 6c 65 74 65 2c 20  cessary delete, 
5d90: 72 65 6d 6f 76 65 20 69 74 2e 0a 09 23 0a 09 23  remove it...#..#
5da0: 20 49 66 20 61 20 66 69 6c 65 20 69 73 20 61 64   If a file is ad
5db0: 64 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 20  ded on a branch 
5dc0: 28 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20  (whether or not 
5dd0: 69 74 20 61 6c 72 65 61 64 79 0a 09 23 20 65 78  it already..# ex
5de0: 69 73 74 65 64 20 6f 6e 20 74 72 75 6e 6b 29 2c  isted on trunk),
5df0: 20 74 68 65 6e 20 6e 65 77 20 76 65 72 73 69 6f   then new versio
5e00: 6e 73 20 6f 66 20 43 56 53 20 61 64 64 20 61 20  ns of CVS add a 
5e10: 66 69 72 73 74 0a 09 23 20 62 72 61 6e 63 68 20  first..# branch 
5e20: 72 65 76 69 73 69 6f 6e 20 69 6e 20 74 68 65 20  revision in the 
5e30: 27 64 65 61 64 27 20 73 74 61 74 65 20 28 74 6f  'dead' state (to
5e40: 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20 74   indicate that t
5e50: 68 65 0a 09 23 20 66 69 6c 65 20 64 69 64 20 6e  he..# file did n
5e60: 6f 74 20 65 78 69 73 74 20 6f 6e 20 74 68 65 20  ot exist on the 
5e70: 62 72 61 6e 63 68 20 77 68 65 6e 20 74 68 65 20  branch when the 
5e80: 62 72 61 6e 63 68 20 77 61 73 0a 09 23 20 63 72  branch was..# cr
5e90: 65 61 74 65 64 29 20 66 6f 6c 6c 6f 77 65 64 20  eated) followed 
5ea0: 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20 62 72  by the second br
5eb0: 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 2c 20 77  anch revision, w
5ec0: 68 69 63 68 20 69 73 20 61 6e 0a 09 23 20 61 64  hich is an..# ad
5ed0: 64 2e 20 20 57 68 65 6e 20 77 65 20 65 6e 63 6f  d.  When we enco
5ee0: 75 6e 74 65 72 20 74 68 69 73 20 73 69 74 75 61  unter this situa
5ef0: 74 69 6f 6e 2c 20 77 65 20 73 65 76 65 72 20 74  tion, we sever t
5f00: 68 65 20 62 72 61 6e 63 68 0a 09 23 20 66 72 6f  he branch..# fro
5f10: 6d 20 74 72 75 6e 6b 20 61 6e 64 20 64 65 6c 65  m trunk and dele
5f20: 74 65 20 74 68 65 20 66 69 72 73 74 20 62 72 61  te the first bra
5f30: 6e 63 68 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09  nch revision....
5f40: 23 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 20  # At this point 
5f50: 77 65 20 6d 61 79 20 68 61 76 65 20 61 6c 72 65  we may have alre
5f60: 61 64 79 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f  ady multiple roo
5f70: 74 73 20 69 6e 20 6d 79 72 6f 6f 74 73 2c 0a 09  ts in myroots,..
5f80: 23 20 77 65 20 68 61 76 65 20 74 6f 20 70 72 6f  # we have to pro
5f90: 63 65 73 73 20 74 68 65 6d 20 61 6c 6c 2e 0a 0a  cess them all...
5fa0: 09 73 65 74 20 6c 6f 64 72 6f 6f 74 73 20 5b 24  .set lodroots [$
5fb0: 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65  self LinesOfDeve
5fc0: 6c 6f 70 6d 65 6e 74 5d 0a 09 66 6f 72 65 61 63  lopment]..foreac
5fd0: 68 20 72 6f 6f 74 20 24 6c 6f 64 72 6f 6f 74 73  h root $lodroots
5fe0: 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f   {..    if {[$ro
5ff0: 6f 74 20 69 73 6e 65 65 64 65 64 62 72 61 6e 63  ot isneededbranc
6000: 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  hdel]} continue.
6010: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 32  .    log write 2
6020: 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20   file "Removing 
6030: 75 6e 6e 65 63 65 73 73 61 72 79 20 69 6e 69 74  unnecessary init
6040: 69 61 6c 20 62 72 61 6e 63 68 20 64 65 6c 65 74  ial branch delet
6050: 65 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22  e [$root revnr]"
6060: 0a 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e 63  ...    set branc
6070: 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62  h [$root parentb
6080: 72 61 6e 63 68 5d 0a 09 20 20 20 20 73 65 74 20  ranch]..    set 
6090: 70 61 72 65 6e 74 20 5b 24 72 6f 6f 74 20 70 61  parent [$root pa
60a0: 72 65 6e 74 5d 0a 09 20 20 20 20 73 65 74 20 63  rent]..    set c
60b0: 68 69 6c 64 20 20 5b 24 72 6f 6f 74 20 63 68 69  hild  [$root chi
60c0: 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74  ld]...    ldelet
60d0: 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a  e myroots $root.
60e0: 09 20 20 20 20 75 6e 73 65 74 20 6d 79 72 65 76  .    unset myrev
60f0: 28 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d 29 0a  ([$root revnr]).
6100: 09 20 20 20 20 24 63 68 69 6c 64 20 63 75 74 66  .    $child cutf
6110: 72 6f 6d 70 61 72 65 6e 74 0a 09 20 20 20 20 6c  romparent..    l
6120: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24  append myroots $
6130: 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 70 61 72  child...    $par
6140: 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f  ent removechildo
6150: 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09 20  nbranch $root.. 
6160: 20 20 20 24 70 61 72 65 6e 74 20 72 65 6d 6f 76     $parent remov
6170: 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 20 24  ebranch        $
6180: 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 24 62 72  branch...    $br
6190: 61 6e 63 68 20 64 65 73 74 72 6f 79 0a 09 20 20  anch destroy..  
61a0: 20 20 24 72 6f 6f 74 20 20 20 64 65 73 74 72 6f    $root   destro
61b0: 79 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  y..}..return.   
61c0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 4c   }..    method L
61d0: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e  inesOfDevelopmen
61e0: 74 20 7b 7d 20 7b 0a 09 23 20 44 65 74 65 72 6d  t {} {..# Determ
61f0: 69 6e 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66  ine all lines of
6200: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72   development for
6210: 20 74 68 65 20 66 69 6c 65 2e 20 54 68 69 73 20   the file. This 
6220: 61 72 65 0a 09 23 20 74 68 65 20 6b 6e 6f 77 6e  are..# the known
6230: 20 72 6f 6f 74 73 2c 20 61 6e 64 20 74 68 65 20   roots, and the 
6240: 72 6f 6f 74 20 6f 66 20 61 6c 6c 20 62 72 61 6e  root of all bran
6250: 63 68 65 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68  ches found on th
6260: 65 0a 09 23 20 6c 69 6e 65 20 6f 66 20 70 72 69  e..# line of pri
6270: 6d 61 72 79 20 63 68 69 6c 64 72 65 6e 2e 0a 0a  mary children...
6280: 09 73 65 74 20 6c 6f 64 72 6f 6f 74 73 20 7b 7d  .set lodroots {}
6290: 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24  ..foreach root $
62a0: 6d 79 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 24  myroots {..    $
62b0: 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64  self AddBranched
62c0: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
62d0: 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f  nt lodroots $roo
62e0: 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6c  t..    lappend l
62f0: 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 7d  odroots $root..}
6300: 0a 09 72 65 74 75 72 6e 20 24 6c 6f 64 72 6f 6f  ..return $lodroo
6310: 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  ts.    }..    me
6320: 74 68 6f 64 20 41 64 64 42 72 61 6e 63 68 65 64  thod AddBranched
6330: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
6340: 6e 74 20 7b 6c 76 20 72 6f 6f 74 7d 20 7b 0a 09  nt {lv root} {..
6350: 75 70 76 61 72 20 31 20 24 6c 76 20 6c 6f 64 72  upvar 1 $lv lodr
6360: 6f 6f 74 73 0a 09 77 68 69 6c 65 20 7b 24 72 6f  oots..while {$ro
6370: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20  ot ne ""} {..   
6380: 20 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20   foreach branch 
6390: 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d  [$root branches]
63a0: 20 7b 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e   {...if {![$bran
63b0: 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f  ch haschild]} co
63c0: 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 63 68 69  ntinue...set chi
63d0: 6c 64 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c  ld [$branch chil
63e0: 64 5d 0a 09 09 23 20 52 65 63 75 72 73 65 20 69  d]...# Recurse i
63f0: 6e 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20 66  nto the branch f
6400: 6f 72 20 64 65 65 70 65 72 20 62 72 61 6e 63 68  or deeper branch
6410: 65 73 2e 0a 09 09 24 73 65 6c 66 20 41 64 64 42  es....$self AddB
6420: 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65  ranchedLinesOfDe
6430: 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f  velopment lodroo
6440: 74 73 20 24 63 68 69 6c 64 0a 09 09 6c 61 70 70  ts $child...lapp
6450: 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68  end lodroots $ch
6460: 69 6c 64 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  ild..    }..    
6470: 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20  set root [$root 
6480: 63 68 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72  child]..}..retur
6490: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
64a0: 68 6f 64 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72  hod ExcludeNonTr
64b0: 75 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 7b  unkInformation {
64c0: 7d 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  } {.    }..    #
64d0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
64e0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
64f0: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f  ######.    ## Co
6500: 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20  nfiguration..   
6510: 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65   pragma -hastype
6520: 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20  info    no  ; # 
6530: 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65  no type introspe
6540: 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61  ction.    pragma
6550: 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20   -hasinfo       
6560: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65   no  ; # no obje
6570: 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e  ct introspection
6580: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73  .    pragma -has
6590: 74 79 70 65 6d 65 74 68 6f 64 73 20 6e 6f 20 20  typemethods no  
65a0: 3b 20 23 20 74 79 70 65 20 69 73 20 6e 6f 74 20  ; # type is not 
65b0: 72 65 6c 65 76 61 6e 74 2e 0a 0a 20 20 20 20 23  relevant...    #
65c0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
65d0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
65e0: 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70  ######.}..namesp
65f0: 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66  ace eval ::vc::f
6600: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
6610: 76 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61  vs {.    namespa
6620: 63 65 20 65 78 70 6f 72 74 20 66 69 6c 65 0a 20  ce export file. 
6630: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
6640: 6c 20 66 69 6c 65 20 7b 0a 09 23 20 49 6d 70 6f  l file {..# Impo
6650: 72 74 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2c  rt not required,
6660: 20 61 6c 72 65 61 64 79 20 61 20 63 68 69 6c 64   already a child
6670: 20 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23 20 6e   namespace...# n
6680: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
6690: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
66a0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a  port::cvs::file:
66b0: 3a 72 65 76 0a 09 23 20 6e 61 6d 65 73 70 61 63  :rev..# namespac
66c0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
66d0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
66e0: 76 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 0a 09 6e  vs::file::sym..n
66f0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
6700: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73  ::vc::tools::mis
6710: 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20  c::*..namespace 
6720: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f  import ::vc::too
6730: 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 6d  ls::trouble..nam
6740: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
6750: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 20  vc::tools::log. 
6760: 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23     }.}..# # ## #
6770: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
6780: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20  # ############# 
6790: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
67a0: 23 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a  #####.## Ready..
67b0: 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20  package provide 
67c0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
67d0: 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e  rt::cvs::file 1.
67e0: 30 0a 72 65 74 75 72 6e 0a                       0.return.