Hex Artifact Content
Not logged in

Artifact a38feddbdfa9c68548dd072b5fd53809edfa9a80:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [cfe4b269ac] - Added detection of irrelevant trunk revisions for files added to a branch but not the trunk. Repository extended to keep inverted indices for the meta data and commit messages for retrieval of commit messages per meta data, required for the previous. fixed problem with file objects, we kept only the rcs path, and need the user visible path too. by aku on 2007-10-17 04:37:05.

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 66 6f 73 73 69 6c 3a 0a 09  om cvs2fossil:..
5810: 23 20 49 66 20 61 20 66 69 6c 65 20 69 73 20 61  # If a file is a
5820: 64 64 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 68  dded on a branch
5830: 2c 20 74 68 65 6e 20 61 20 74 72 75 6e 6b 20 72  , then a trunk r
5840: 65 76 69 73 69 6f 6e 20 69 73 0a 09 23 20 61 64  evision is..# ad
5850: 64 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ded at the same 
5860: 74 69 6d 65 20 69 6e 20 74 68 65 20 27 44 65 61  time in the 'Dea
5870: 64 27 20 73 74 61 74 65 2e 20 20 54 68 69 73 20  d' state.  This 
5880: 72 65 76 69 73 69 6f 6e 0a 09 23 20 64 6f 65 73  revision..# does
5890: 6e 27 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20  n't do anything 
58a0: 75 73 65 66 75 6c 2c 20 73 6f 20 64 65 6c 65 74  useful, so delet
58b0: 65 20 69 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20  e it....foreach 
58c0: 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a  root $myroots {.
58d0: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20  .    if {[$root 
58e0: 69 73 6e 65 65 64 65 64 5d 7d 20 63 6f 6e 74 69  isneeded]} conti
58f0: 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  nue..    log wri
5900: 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76  te 2 file "Remov
5910: 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20  ing unnecessary 
5920: 64 65 61 64 20 72 65 76 69 73 69 6f 6e 20 5b 24  dead revision [$
5930: 72 6f 6f 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20  root revnr]"... 
5940: 20 20 20 23 20 52 65 6d 6f 76 65 20 61 73 20 72     # Remove as r
5950: 6f 6f 74 2c 20 6d 61 6b 65 20 69 74 73 20 63 68  oot, make its ch
5960: 69 6c 64 20 6e 65 77 20 72 6f 6f 74 20 61 66 74  ild new root aft
5970: 65 72 0a 09 20 20 20 20 23 20 64 69 73 63 6f 6e  er..    # discon
5980: 6e 65 63 74 69 6e 67 20 69 74 20 66 72 6f 6d 20  necting it from 
5990: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6a 75 73  the revision jus
59a0: 74 20 67 6f 69 6e 67 20 61 77 61 79 2e 0a 0a 09  t going away....
59b0: 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f      ldelete myro
59c0: 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 69  ots $root..    i
59d0: 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 63 68 69  f {[$root haschi
59e0: 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 63 68 69  ld]} {...set chi
59f0: 6c 64 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d  ld [$root child]
5a00: 0a 09 09 24 63 68 69 6c 64 20 63 75 74 66 72 6f  ...$child cutfro
5a10: 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e  mparent...lappen
5a20: 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64  d myroots $child
5a30: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20  ..    }...    # 
5a40: 52 65 6d 6f 76 65 20 74 68 65 20 62 72 61 6e 63  Remove the branc
5a50: 68 65 73 20 73 70 61 77 6e 65 64 20 62 79 20 74  hes spawned by t
5a60: 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 62  he revision to b
5a70: 65 0a 09 20 20 20 20 23 20 64 65 6c 65 74 65 64  e..    # deleted
5a80: 2e 20 49 66 20 74 68 65 20 62 72 61 6e 63 68 20  . If the branch 
5a90: 68 61 73 20 72 65 76 69 73 69 6f 6e 73 20 74 68  has revisions th
5aa0: 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64  ey should alread
5ab0: 79 0a 09 20 20 20 20 23 20 75 73 65 20 6f 70 65  y..    # use ope
5ac0: 72 61 74 69 6f 6e 20 27 61 64 64 27 2c 20 6e 6f  ration 'add', no
5ad0: 20 6e 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20   need to change 
5ae0: 74 68 61 74 2e 20 54 68 65 20 66 69 72 73 74 0a  that. The first.
5af0: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20  .    # revision 
5b00: 6f 6e 20 65 61 63 68 20 62 72 61 6e 63 68 20 62  on each branch b
5b10: 65 63 6f 6d 65 73 20 61 20 6e 65 77 20 61 6e 64  ecomes a new and
5b20: 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 0a 09 20   disconnected.. 
5b30: 20 20 20 23 20 72 6f 6f 74 2e 0a 0a 09 20 20 20     # root....   
5b40: 20 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20   foreach branch 
5b50: 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d  [$root branches]
5b60: 20 7b 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e   {...if {![$bran
5b70: 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f  ch haschild]} co
5b80: 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 66 69 72  ntinue...set fir
5b90: 73 74 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c  st [$branch chil
5ba0: 64 5d 0a 09 09 24 66 69 72 73 74 20 63 75 74 66  d]...$first cutf
5bb0: 72 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 0a  romparentbranch.
5bc0: 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d  ..$first cutfrom
5bd0: 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64  parent...lappend
5be0: 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a   myroots $first.
5bf0: 09 20 20 20 20 7d 0a 09 20 20 20 20 24 72 6f 6f  .    }..    $roo
5c00: 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63  t removeallbranc
5c10: 68 65 73 0a 0a 09 20 20 20 20 23 20 54 61 67 67  hes...    # Tagg
5c20: 69 6e 67 20 61 20 64 65 61 64 20 72 65 76 69 73  ing a dead revis
5c30: 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61  ion doesn't do a
5c40: 6e 79 74 68 69 6e 67 2c 20 73 6f 20 72 65 6d 6f  nything, so remo
5c50: 76 65 0a 09 20 20 20 20 23 20 61 6e 79 20 74 61  ve..    # any ta
5c60: 67 73 20 74 68 61 74 20 77 65 72 65 20 73 65 74  gs that were set
5c70: 20 6f 6e 20 69 74 2e 0a 0a 09 20 20 20 20 24 72   on it....    $r
5c80: 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67  oot removealltag
5c90: 73 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 63  s...    # This c
5ca0: 61 6e 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 6f  an only happen o
5cb0: 6e 63 65 20 70 65 72 20 66 69 6c 65 2c 20 61 6e  nce per file, an
5cc0: 64 20 77 65 20 6d 69 67 68 74 20 68 61 76 65 0a  d we might have.
5cd0: 09 20 20 20 20 23 20 6a 75 73 74 20 63 68 61 6e  .    # just chan
5ce0: 67 65 64 20 6d 79 72 6f 6f 74 73 2c 20 73 6f 20  ged myroots, so 
5cf0: 62 72 65 61 6b 20 6f 75 74 20 6f 66 20 74 68 65  break out of the
5d00: 20 6c 6f 6f 70 3a 0a 09 20 20 20 20 62 72 65 61   loop:..    brea
5d10: 6b 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  k..}..return.   
5d20: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 52   }..    method R
5d30: 65 6d 6f 76 65 49 6e 69 74 69 61 6c 42 72 61 6e  emoveInitialBran
5d40: 63 68 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b  chDeletions {} {
5d50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
5d60: 6f 64 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72 75  od ExcludeNonTru
5d70: 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 7b 7d  nkInformation {}
5d80: 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20   {.    }..    # 
5d90: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
5da0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
5db0: 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e  #####.    ## Con
5dc0: 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20  figuration..    
5dd0: 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69  pragma -hastypei
5de0: 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e  nfo    no  ; # n
5df0: 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65 63  o type introspec
5e00: 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20  tion.    pragma 
5e10: 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20 20  -hasinfo        
5e20: 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 63  no  ; # no objec
5e30: 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a  t introspection.
5e40: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74      pragma -hast
5e50: 79 70 65 6d 65 74 68 6f 64 73 20 6e 6f 20 20 3b  ypemethods no  ;
5e60: 20 23 20 74 79 70 65 20 69 73 20 6e 6f 74 20 72   # type is not r
5e70: 65 6c 65 76 61 6e 74 2e 0a 0a 20 20 20 20 23 20  elevant...    # 
5e80: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
5e90: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
5ea0: 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61  #####.}..namespa
5eb0: 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f  ce eval ::vc::fo
5ec0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
5ed0: 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  s {.    namespac
5ee0: 65 20 65 78 70 6f 72 74 20 66 69 6c 65 0a 20 20  e export file.  
5ef0: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c    namespace eval
5f00: 20 66 69 6c 65 20 7b 0a 09 23 20 49 6d 70 6f 72   file {..# Impor
5f10: 74 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2c 20  t not required, 
5f20: 61 6c 72 65 61 64 79 20 61 20 63 68 69 6c 64 20  already a child 
5f30: 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23 20 6e 61  namespace...# na
5f40: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
5f50: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
5f60: 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a  ort::cvs::file::
5f70: 72 65 76 0a 09 23 20 6e 61 6d 65 73 70 61 63 65  rev..# namespace
5f80: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
5f90: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
5fa0: 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 0a 09 6e 61  s::file::sym..na
5fb0: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
5fc0: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63  :vc::tools::misc
5fd0: 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20 69  ::*..namespace i
5fe0: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c  mport ::vc::tool
5ff0: 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 6d 65  s::trouble..name
6000: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
6010: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 20 20  c::tools::log.  
6020: 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23    }.}..# # ## ##
6030: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
6040: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
6050: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
6060: 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70  ####.## Ready..p
6070: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76  ackage provide v
6080: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
6090: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30  t::cvs::file 1.0
60a0: 0a 72 65 74 75 72 6e 0a                          .return.