Hex Artifact Content
Not logged in

Artifact bd5c5d46d200a8e9a509e68b80ebe97ee026f494:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [adf168e23e] - Extended handling of id's for files so that we have them for backreferences from symbols and revisions. Completed persistence of revisions and symbols at file-level and fixed small problem with left-over links to branches. by aku on 2007-10-24 08:01:01.

0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23  ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69  07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66  es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65  tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69  d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e  n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20  SE, which.# you 
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65  should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ived as part of 
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f  this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74  n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72   voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79  ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75   many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20  als.  For exact 
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73  contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65  tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79  vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c   and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66  able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e  ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23  com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 46 69 6c  ########..## Fil
0200: 65 2c 20 70 61 72 74 20 6f 66 20 61 20 70 72 6f  e, part of a pro
0210: 6a 65 63 74 2c 20 70 61 72 74 20 6f 66 20 61 20  ject, part of a 
0220: 43 56 53 20 72 65 70 6f 73 69 74 6f 72 79 2e 20  CVS repository. 
0230: 4d 75 6c 74 69 70 6c 65 0a 23 23 20 69 6e 73 74  Multiple.## inst
0240: 61 6e 63 65 73 20 61 72 65 20 70 6f 73 73 69 62  ances are possib
0250: 6c 65 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20  le...# # ## ### 
0260: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
0270: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
0280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0290: 23 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e  ##.## Requiremen
02a0: 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ts..package requ
02b0: 69 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20  ire Tcl 8.4     
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 20 20 20 20 20 20 20 20 3b 20 23 20 52 65 71 75          ; # Requ
02e0: 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61  ired runtime..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 6e  ckage require sn
0300: 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  it              
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0320: 20 20 3b 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e    ; # OO system.
0330: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
0340: 20 73 74 72 75 63 74 3a 3a 73 65 74 20 20 20 20   struct::set    
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0360: 20 20 20 20 20 3b 20 23 20 53 65 74 20 6f 70 65       ; # Set ope
0370: 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65  rations..package
0380: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
0390: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
03a0: 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 20 3b 20 23  ::file::rev  ; #
03b0: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 72 65   CVS per file re
03c0: 76 69 73 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65  visions..package
03d0: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
03e0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
03f0: 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 3b 20 23  ::file::sym  ; #
0400: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 73 79   CVS per file sy
0410: 6d 62 6f 6c 73 2e 0a 70 61 63 6b 61 67 65 20 72  mbols..package r
0420: 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69  equire vc::fossi
0430: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
0440: 73 74 61 74 65 20 20 20 20 20 20 3b 20 23 20 53  state      ; # S
0450: 74 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61  tate storage..pa
0460: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63  ckage require vc
0470: 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65  ::tools::trouble
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0490: 20 20 3b 20 23 20 45 72 72 6f 72 20 72 65 70 6f    ; # Error repo
04a0: 72 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72  rting..package r
04b0: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73  equire vc::tools
04c0: 3a 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20  ::log           
04d0: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 55             ; # U
04e0: 73 65 72 20 66 65 65 64 62 61 63 6b 0a 70 61 63  ser feedback.pac
04f0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a  kage require vc:
0500: 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 20  :tools::misc    
0510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0520: 20 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61 74   ; # Text format
0530: 74 69 6e 67 0a 0a 23 20 23 20 23 23 20 23 23 23  ting..# # ## ###
0540: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
0550: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23  ############# ##
0560: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0570: 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74 3a 3a 74  ###.## ..snit::t
0580: 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  ype ::vc::fossil
0590: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66  ::import::cvs::f
05a0: 69 6c 65 20 7b 0a 20 20 20 20 23 20 23 20 23 23  ile {.    # # ##
05b0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
05c0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
05d0: 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63 20  #.    ## Public 
05e0: 41 50 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72 75  API..    constru
05f0: 63 74 6f 72 20 7b 69 64 20 70 61 74 68 20 75 73  ctor {id path us
0600: 72 70 61 74 68 20 65 78 65 63 75 74 61 62 6c 65  rpath executable
0610: 20 70 72 6f 6a 65 63 74 7d 20 7b 0a 09 73 65 74   project} {..set
0620: 20 6d 79 69 64 20 20 20 20 20 20 20 20 20 24 69   myid         $i
0630: 64 0a 09 73 65 74 20 6d 79 70 61 74 68 20 20 20  d..set mypath   
0640: 20 20 20 20 24 70 61 74 68 0a 09 73 65 74 20 6d      $path..set m
0650: 79 75 73 72 70 61 74 68 20 20 20 20 24 75 73 72  yusrpath    $usr
0660: 70 61 74 68 0a 09 73 65 74 20 6d 79 65 78 65 63  path..set myexec
0670: 75 74 61 62 6c 65 20 24 65 78 65 63 75 74 61 62  utable $executab
0680: 6c 65 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 63  le..set myprojec
0690: 74 20 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73  t    $project..s
06a0: 65 74 20 6d 79 74 72 75 6e 6b 20 20 20 20 20 20  et mytrunk      
06b0: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e  [$myproject trun
06c0: 6b 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  k]..return.    }
06d0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
06e0: 69 64 20 7b 69 64 7d 20 7b 0a 09 69 66 20 7b 24  id {id} {..if {$
06f0: 6d 79 69 64 20 6e 65 20 22 22 7d 20 7b 20 74 72  myid ne ""} { tr
0700: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22  ouble internal "
0710: 46 69 6c 65 20 27 24 6d 79 70 61 74 68 27 20 61  File '$mypath' a
0720: 6c 72 65 61 64 79 20 68 61 73 20 61 6e 20 69 64  lready has an id
0730: 2c 20 27 24 6d 79 69 64 27 22 20 7d 0a 09 73 65  , '$myid'" }..se
0740: 74 20 6d 79 69 64 20 24 69 64 0a 09 72 65 74 75  t myid $id..retu
0750: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
0760: 74 68 6f 64 20 69 64 20 20 20 20 20 20 7b 7d 20  thod id      {} 
0770: 7b 20 72 65 74 75 72 6e 20 24 6d 79 69 64 20 7d  { return $myid }
0780: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 61 74 68  .    method path
0790: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20      {} { return 
07a0: 24 6d 79 70 61 74 68 20 7d 0a 20 20 20 20 6d 65  $mypath }.    me
07b0: 74 68 6f 64 20 75 73 72 70 61 74 68 20 7b 7d 20  thod usrpath {} 
07c0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 75 73 72 70  { return $myusrp
07d0: 61 74 68 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64  ath }.    method
07e0: 20 70 72 6f 6a 65 63 74 20 7b 7d 20 7b 20 72 65   project {} { re
07f0: 74 75 72 6e 20 24 6d 79 70 72 6f 6a 65 63 74 20  turn $myproject 
0800: 7d 0a 0a 20 20 20 20 64 65 6c 65 67 61 74 65 20  }..    delegate 
0810: 6d 65 74 68 6f 64 20 63 6f 6d 6d 69 74 6d 65 73  method commitmes
0820: 73 61 67 65 6f 66 20 74 6f 20 6d 79 70 72 6f 6a  sageof to myproj
0830: 65 63 74 0a 0a 20 20 20 20 23 20 23 20 23 23 20  ect..    # # ## 
0840: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
0850: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
0860: 0a 20 20 20 20 23 23 20 4d 65 74 68 6f 64 73 20  .    ## Methods 
0870: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
0880: 20 63 6c 61 73 73 20 74 6f 20 62 65 20 61 20 73   class to be a s
0890: 69 6e 6b 20 6f 66 20 74 68 65 20 72 63 73 20 70  ink of the rcs p
08a0: 61 72 73 65 72 0a 0a 20 20 20 20 23 6d 65 74 68  arser..    #meth
08b0: 6f 64 20 62 65 67 69 6e 20 7b 7d 20 7b 70 75 74  od begin {} {put
08c0: 73 20 62 65 67 69 6e 7d 0a 20 20 20 20 23 6d 65  s begin}.    #me
08d0: 74 68 6f 64 20 73 65 74 68 65 61 64 20 7b 68 7d  thod sethead {h}
08e0: 20 7b 70 75 74 73 20 68 65 61 64 3d 24 68 7d 0a   {puts head=$h}.
08f0: 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 70      #method setp
0900: 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20 7b  rincipalbranch {
0910: 62 7d 20 7b 70 75 74 73 20 70 62 3d 24 62 7d 0a  b} {puts pb=$b}.
0920: 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66 74      #method deft
0930: 61 67 20 7b 73 20 72 7d 20 7b 70 75 74 73 20 24  ag {s r} {puts $
0940: 73 3d 24 72 7d 0a 20 20 20 20 23 6d 65 74 68 6f  s=$r}.    #metho
0950: 64 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d  d setcomment {c}
0960: 20 7b 70 75 74 73 20 63 6f 6d 6d 65 6e 74 3d 24   {puts comment=$
0970: 63 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 61  c}.    #method a
0980: 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 70 75 74  dmindone {} {put
0990: 73 20 61 64 6d 69 6e 64 6f 6e 65 7d 0a 20 20 20  s admindone}.   
09a0: 20 23 6d 65 74 68 6f 64 20 64 65 66 20 7b 72 65   #method def {re
09b0: 76 20 64 61 74 65 20 61 75 74 68 6f 72 20 73 74  v date author st
09c0: 61 74 65 20 6e 65 78 74 20 62 72 61 6e 63 68 65  ate next branche
09d0: 73 7d 20 7b 70 75 74 73 20 22 64 65 66 20 24 72  s} {puts "def $r
09e0: 65 76 20 24 64 61 74 65 20 24 61 75 74 68 6f 72  ev $date $author
09f0: 20 24 73 74 61 74 65 20 24 6e 65 78 74 20 24 62   $state $next $b
0a00: 72 61 6e 63 68 65 73 22 7d 0a 20 20 20 20 23 6d  ranches"}.    #m
0a10: 65 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d  ethod defdone {}
0a20: 20 7b 70 75 74 73 20 64 65 66 2d 64 6f 6e 65 7d   {puts def-done}
0a30: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74  .    #method set
0a40: 64 65 73 63 20 7b 64 7d 20 7b 70 75 74 73 20 64  desc {d} {puts d
0a50: 65 73 63 3d 24 64 7d 0a 20 20 20 20 23 6d 65 74  esc=$d}.    #met
0a60: 68 6f 64 20 65 78 74 65 6e 64 20 7b 72 65 76 20  hod extend {rev 
0a70: 63 6f 6d 6d 69 74 6d 73 67 20 64 65 6c 74 61 72  commitmsg deltar
0a80: 61 6e 67 65 7d 20 7b 70 75 74 73 20 22 65 78 74  ange} {puts "ext
0a90: 65 6e 64 20 24 63 6f 6d 6d 69 74 6d 73 67 20 24  end $commitmsg $
0aa0: 64 65 6c 74 61 72 61 6e 67 65 22 7d 0a 20 20 20  deltarange"}.   
0ab0: 20 23 6d 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d   #method done {}
0ac0: 20 7b 70 75 74 73 20 64 6f 6e 65 7d 0a 0a 20 20   {puts done}..  
0ad0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
0ae0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0af0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
0b00: 20 50 65 72 73 69 73 74 65 6e 63 65 20 28 70 61   Persistence (pa
0b10: 73 73 20 49 49 29 0a 0a 20 20 20 20 6d 65 74 68  ss II)..    meth
0b20: 6f 64 20 70 65 72 73 69 73 74 20 7b 7d 20 7b 0a  od persist {} {.
0b30: 09 23 20 46 69 72 73 74 20 63 6f 6c 6c 65 63 74  .# First collect
0b40: 20 74 68 65 20 72 65 61 63 68 61 62 6c 65 20 72   the reachable r
0b50: 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d  evisions and sym
0b60: 62 6f 6c 73 2c 20 74 68 65 6e 0a 09 23 20 61 73  bols, then..# as
0b70: 73 69 67 6e 20 69 64 27 73 20 74 6f 20 61 6c 6c  sign id's to all
0b80: 2e 20 54 68 65 79 20 61 72 65 20 73 6f 72 74 65  . They are sorte
0b90: 64 20 73 6f 20 74 68 61 74 20 77 65 20 77 69 6c  d so that we wil
0ba0: 6c 20 68 61 76 65 20 69 64 73 0a 09 23 20 77 68  l have ids..# wh
0bb0: 69 63 68 20 73 6f 72 74 20 69 6e 20 6f 72 64 65  ich sort in orde
0bc0: 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2e 20 54  r of creation. T
0bd0: 68 65 6e 20 77 65 20 63 61 6e 20 73 61 76 65 20  hen we can save 
0be0: 74 68 65 6d 2e 20 54 68 69 73 0a 09 23 20 69 73  them. This..# is
0bf0: 20 64 6f 6e 65 20 62 6f 74 74 6f 6d 20 75 70 2e   done bottom up.
0c00: 20 52 65 76 69 73 69 6f 6e 73 2c 20 74 68 65 6e   Revisions, then
0c10: 20 73 79 6d 62 6f 6c 73 2e 20 5f 5f 4e 4f 54 45   symbols. __NOTE
0c20: 5f 5f 20 54 68 69 73 0a 09 23 20 77 6f 72 6b 73  __ This..# works
0c30: 20 6f 6e 6c 79 20 62 65 63 61 75 73 65 20 73 71   only because sq
0c40: 6c 69 74 65 20 69 73 20 6e 6f 74 20 63 68 65 63  lite is not chec
0c50: 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79  king foreign key
0c60: 0a 09 23 20 72 65 66 65 72 65 6e 63 65 73 20 64  ..# references d
0c70: 75 72 69 6e 67 20 69 6e 73 65 72 74 2e 20 54 68  uring insert. Th
0c80: 69 73 20 61 6c 6c 6f 77 73 20 74 6f 20 68 61 76  is allows to hav
0c90: 65 20 64 61 6e 67 6c 69 6e 67 0a 09 23 20 72 65  e dangling..# re
0ca0: 66 65 72 65 6e 63 65 73 20 77 68 69 63 68 20 61  ferences which a
0cb0: 72 65 20 66 69 78 65 64 20 6c 61 74 65 72 2e 20  re fixed later. 
0cc0: 54 68 65 20 6c 6f 6e 67 65 73 74 20 64 61 6e 67  The longest dang
0cd0: 6c 69 6e 67 0a 09 23 20 72 65 66 65 72 65 6e 63  ling..# referenc
0ce0: 65 73 20 61 72 65 20 66 6f 72 20 74 68 65 20 70  es are for the p
0cf0: 72 6f 6a 65 63 74 20 6c 65 76 65 6c 20 73 79 6d  roject level sym
0d00: 62 6f 6c 73 2c 20 74 68 65 73 65 20 77 65 20 64  bols, these we d
0d10: 6f 0a 09 23 20 6e 6f 74 20 73 61 76 65 20 68 65  o..# not save he
0d20: 72 65 2c 20 62 75 74 20 61 74 20 74 68 65 20 65  re, but at the e
0d30: 6e 64 20 6f 66 20 74 68 65 20 70 61 73 73 2e 20  nd of the pass. 
0d40: 57 68 61 74 20 77 65 20 6e 65 65 64 20 61 72 65  What we need are
0d50: 0a 09 23 20 74 68 65 20 69 64 73 2c 20 68 65 6e  ..# the ids, hen
0d60: 63 65 20 74 68 65 20 74 77 6f 20 70 68 61 73 65  ce the two phase
0d70: 73 2e 0a 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73  s....struct::lis
0d80: 74 20 61 73 73 69 67 6e 20 5b 24 73 65 6c 66 20  t assign [$self 
0d90: 41 63 74 69 76 65 5d 20 72 65 76 69 73 69 6f 6e  Active] revision
0da0: 73 20 73 79 6d 62 6f 6c 73 0a 09 66 6f 72 65 61  s symbols..forea
0db0: 63 68 20 72 65 76 20 24 72 65 76 69 73 69 6f 6e  ch rev $revision
0dc0: 73 20 7b 20 24 72 65 76 20 64 65 66 69 64 20 7d  s { $rev defid }
0dd0: 0a 09 66 6f 72 65 61 63 68 20 73 79 6d 20 24 73  ..foreach sym $s
0de0: 79 6d 62 6f 6c 73 20 20 20 7b 20 24 73 79 6d 20  ymbols   { $sym 
0df0: 64 65 66 69 64 20 7d 0a 0a 09 73 74 61 74 65 20  defid }...state 
0e00: 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20  transaction {.. 
0e10: 20 20 20 66 6f 72 65 61 63 68 20 72 65 76 20 24     foreach rev $
0e20: 72 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 76  revisions { $rev
0e30: 20 70 65 72 73 69 73 74 20 7d 0a 09 20 20 20 20   persist }..    
0e40: 66 6f 72 65 61 63 68 20 73 79 6d 20 24 73 79 6d  foreach sym $sym
0e50: 62 6f 6c 73 20 20 20 7b 20 24 73 79 6d 20 70 65  bols   { $sym pe
0e60: 72 73 69 73 74 20 7d 0a 09 7d 0a 09 72 65 74 75  rsist }..}..retu
0e70: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
0e80: 74 68 6f 64 20 64 72 6f 70 20 7b 7d 20 7b 0a 09  thod drop {} {..
0e90: 66 6f 72 65 61 63 68 20 7b 5f 20 72 65 76 7d 20  foreach {_ rev} 
0ea0: 20 20 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79     [array get my
0eb0: 72 65 76 5d 20 20 20 20 20 20 7b 20 24 72 65 76  rev]      { $rev
0ec0: 20 64 65 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65   destroy }..fore
0ed0: 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b  ach {_ branch} [
0ee0: 61 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e  array get mybran
0ef0: 63 68 65 73 5d 20 7b 20 24 62 72 61 6e 63 68 20  ches] { $branch 
0f00: 64 65 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65 61  destroy }..forea
0f10: 63 68 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b  ch {_ taglist} [
0f20: 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73  array get mytags
0f30: 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68  ] {..    foreach
0f40: 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20   tag $taglist { 
0f50: 24 74 61 67 20 64 65 73 74 72 6f 79 20 7d 0a 09  $tag destroy }..
0f60: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
0f70: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
0f80: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
0f90: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
0fa0: 20 23 23 20 49 6d 70 6c 65 6d 65 6e 74 20 74 68   ## Implement th
0fb0: 65 20 73 69 6e 6b 0a 0a 20 20 20 20 6d 65 74 68  e sink..    meth
0fc0: 6f 64 20 62 65 67 69 6e 20 7b 7d 20 7b 23 69 67  od begin {} {#ig
0fd0: 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f  nore}..    metho
0fe0: 64 20 73 65 74 68 65 61 64 20 7b 72 65 76 6e 72  d sethead {revnr
0ff0: 7d 20 7b 0a 09 73 65 74 20 6d 79 68 65 61 64 72  } {..set myheadr
1000: 65 76 6e 72 20 24 72 65 76 6e 72 0a 09 72 65 74  evnr $revnr..ret
1010: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
1020: 65 74 68 6f 64 20 73 65 74 70 72 69 6e 63 69 70  ethod setprincip
1030: 61 6c 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68  albranch {branch
1040: 6e 72 7d 20 7b 0a 09 73 65 74 20 6d 79 70 72 69  nr} {..set mypri
1050: 6e 63 69 70 61 6c 20 24 62 72 61 6e 63 68 6e 72  ncipal $branchnr
1060: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
1070: 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 74 61      method defta
1080: 67 20 7b 6e 61 6d 65 20 72 65 76 6e 72 7d 20 7b  g {name revnr} {
1090: 0a 09 23 20 46 55 54 55 52 45 3a 20 50 65 72 66  ..# FUTURE: Perf
10a0: 6f 72 6d 20 73 79 6d 62 6f 6c 20 74 72 61 6e 73  orm symbol trans
10b0: 66 6f 72 6d 61 74 69 6f 6e 20 68 65 72 65 2e 0a  formation here..
10c0: 0a 09 69 66 20 7b 5b 73 74 72 75 63 74 3a 3a 73  ..if {[struct::s
10d0: 65 74 20 63 6f 6e 74 61 69 6e 73 20 24 6d 79 73  et contains $mys
10e0: 79 6d 62 6f 6c 73 20 24 6e 61 6d 65 5d 7d 20 7b  ymbols $name]} {
10f0: 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 66 61  ..    trouble fa
1100: 74 61 6c 20 22 4d 75 6c 74 69 70 6c 65 20 64 65  tal "Multiple de
1110: 66 69 6e 69 74 69 6f 6e 73 20 6f 66 20 74 68 65  finitions of the
1120: 20 73 79 6d 62 6f 6c 20 27 24 6e 61 6d 65 27 20   symbol '$name' 
1130: 69 6e 20 27 24 6d 79 70 61 74 68 27 22 0a 09 20  in '$mypath'".. 
1140: 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73     return..}...s
1150: 74 72 75 63 74 3a 3a 73 65 74 20 61 64 64 20 6d  truct::set add m
1160: 79 73 79 6d 62 6f 6c 73 20 24 6e 61 6d 65 0a 0a  ysymbols $name..
1170: 09 69 66 20 7b 5b 72 65 76 20 69 73 62 72 61 6e  .if {[rev isbran
1180: 63 68 72 65 76 6e 72 20 24 72 65 76 6e 72 20 2d  chrevnr $revnr -
1190: 3e 20 62 72 61 6e 63 68 6e 72 5d 7d 20 7b 0a 09  > branchnr]} {..
11a0: 20 20 20 20 24 73 65 6c 66 20 41 64 64 42 72 61      $self AddBra
11b0: 6e 63 68 20 24 6e 61 6d 65 20 24 62 72 61 6e 63  nch $name $branc
11c0: 68 6e 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20  hnr..} else {.. 
11d0: 20 20 20 24 73 65 6c 66 20 41 64 64 54 61 67 20     $self AddTag 
11e0: 24 6e 61 6d 65 20 24 72 65 76 6e 72 0a 09 7d 0a  $name $revnr..}.
11f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1200: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d     method setcom
1210: 6d 65 6e 74 20 7b 63 7d 20 7b 23 20 69 67 6e 6f  ment {c} {# igno
1220: 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  re}..    method 
1230: 61 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 0a 09  admindone {} {..
1240: 23 20 57 65 20 64 6f 20 6e 6f 74 68 69 6e 67 20  # We do nothing 
1250: 61 74 20 74 68 65 20 62 6f 75 6e 64 61 72 79 20  at the boundary 
1260: 6f 66 20 61 64 6d 69 6e 20 61 6e 64 20 72 65 76  of admin and rev
1270: 69 73 69 6f 6e 20 64 61 74 61 0a 20 20 20 20 7d  ision data.    }
1280: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66  ..    method def
1290: 20 7b 72 65 76 6e 72 20 64 61 74 65 20 61 75 74   {revnr date aut
12a0: 68 6f 72 20 73 74 61 74 65 20 6e 65 78 74 20 62  hor state next b
12b0: 72 61 6e 63 68 65 73 7d 20 7b 0a 09 24 73 65 6c  ranches} {..$sel
12c0: 66 20 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f  f RecordBranchCo
12d0: 6d 6d 69 74 73 20 24 62 72 61 6e 63 68 65 73 0a  mmits $branches.
12e0: 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  ..if {[info exis
12f0: 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29  ts myrev($revnr)
1300: 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c  ]} {..    troubl
1310: 65 20 66 61 74 61 6c 20 22 46 69 6c 65 20 24 6d  e fatal "File $m
1320: 79 70 61 74 68 20 63 6f 6e 74 61 69 6e 73 20 64  ypath contains d
1330: 75 70 6c 69 63 61 74 65 20 64 65 66 69 6e 69 74  uplicate definit
1340: 69 6f 6e 73 20 66 6f 72 20 72 65 76 69 73 69 6f  ions for revisio
1350: 6e 20 24 72 65 76 6e 72 2e 22 0a 09 20 20 20 20  n $revnr."..    
1360: 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 65 74 20  return..}...set 
1370: 6d 79 61 69 64 28 24 72 65 76 6e 72 29 20 5b 24  myaid($revnr) [$
1380: 6d 79 70 72 6f 6a 65 63 74 20 64 65 66 61 75 74  myproject defaut
1390: 68 6f 72 20 24 61 75 74 68 6f 72 5d 0a 09 73 65  hor $author]..se
13a0: 74 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 20  t myrev($revnr) 
13b0: 5b 72 65 76 20 25 41 55 54 4f 25 20 24 72 65 76  [rev %AUTO% $rev
13c0: 6e 72 20 24 64 61 74 65 20 24 73 74 61 74 65 20  nr $date $state 
13d0: 24 73 65 6c 66 5d 0a 0a 09 24 73 65 6c 66 20 52  $self]...$self R
13e0: 65 63 6f 72 64 42 61 73 69 63 44 65 70 65 6e 64  ecordBasicDepend
13f0: 65 6e 63 69 65 73 20 24 72 65 76 6e 72 20 24 6e  encies $revnr $n
1400: 65 78 74 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ext..return.    
1410: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65  }..    method de
1420: 66 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 54 68  fdone {} {..# Th
1430: 69 73 20 69 73 20 61 6c 6c 20 64 6f 6e 65 20 61  is is all done a
1440: 66 74 65 72 20 74 68 65 20 72 65 76 69 73 69 6f  fter the revisio
1450: 6e 20 74 72 65 65 20 68 61 73 20 62 65 65 6e 20  n tree has been 
1460: 65 78 74 72 61 63 74 65 64 0a 09 23 20 66 72 6f  extracted..# fro
1470: 6d 20 74 68 65 20 66 69 6c 65 2c 20 62 65 66 6f  m the file, befo
1480: 72 65 20 74 68 65 20 63 6f 6d 6d 69 74 20 6d 65  re the commit me
1490: 73 61 67 65 73 20 61 6e 64 20 64 65 6c 74 61 20  sages and delta 
14a0: 74 65 78 74 73 20 61 72 65 0a 09 23 20 70 72 6f  texts are..# pro
14b0: 63 65 73 73 65 64 2e 0a 0a 09 24 73 65 6c 66 20  cessed....$self 
14c0: 50 72 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65  ProcessPrimaryDe
14d0: 70 65 6e 64 65 6e 63 69 65 73 0a 09 24 73 65 6c  pendencies..$sel
14e0: 66 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44  f ProcessBranchD
14f0: 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 24 73 65  ependencies..$se
1500: 6c 66 20 53 6f 72 74 42 72 61 6e 63 68 65 73 0a  lf SortBranches.
1510: 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 54 61  .$self ProcessTa
1520: 67 44 65 70 65 6e 64 65 6e 63 69 65 73 0a 09 24  gDependencies..$
1530: 73 65 6c 66 20 44 65 74 65 72 6d 69 6e 65 54 68  self DetermineTh
1540: 65 52 6f 6f 74 52 65 76 69 73 69 6f 6e 0a 09 72  eRootRevision..r
1550: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
1560: 20 6d 65 74 68 6f 64 20 73 65 74 64 65 73 63 20   method setdesc 
1570: 7b 64 7d 20 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a  {d} {# ignore}..
1580: 20 20 20 20 6d 65 74 68 6f 64 20 65 78 74 65 6e      method exten
1590: 64 20 7b 72 65 76 6e 72 20 63 6f 6d 6d 69 74 6d  d {revnr commitm
15a0: 73 67 20 74 65 78 74 72 61 6e 67 65 7d 20 7b 0a  sg textrange} {.
15b0: 09 73 65 74 20 63 6d 69 64 20 5b 24 6d 79 70 72  .set cmid [$mypr
15c0: 6f 6a 65 63 74 20 64 65 66 63 6d 65 73 73 61 67  oject defcmessag
15d0: 65 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24  e [string trim $
15e0: 63 6f 6d 6d 69 74 6d 73 67 5d 5d 0a 0a 09 73 65  commitmsg]]...se
15f0: 74 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 65  t rev $myrev($re
1600: 76 6e 72 29 0a 0a 09 69 66 20 7b 5b 24 72 65 76  vnr)...if {[$rev
1610: 20 68 61 73 6d 65 74 61 5d 7d 20 7b 0a 09 20 20   hasmeta]} {..  
1620: 20 20 23 20 41 70 70 61 72 65 6e 74 6c 79 20 72    # Apparently r
1630: 65 70 6f 73 69 74 6f 72 69 65 73 20 65 78 69 73  epositories exis
1640: 74 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 64  t in which the d
1650: 65 6c 74 61 20 64 61 74 61 0a 09 20 20 20 20 23  elta data..    #
1660: 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 31 2e   for revision 1.
1670: 31 20 69 73 20 70 72 6f 76 69 64 65 64 20 73 65  1 is provided se
1680: 76 65 72 61 6c 20 74 69 6d 65 73 2c 20 61 74 20  veral times, at 
1690: 6c 65 61 73 74 0a 09 20 20 20 20 23 20 74 77 69  least..    # twi
16a0: 63 65 2e 20 54 68 65 20 61 63 74 75 61 6c 20 63  ce. The actual c
16b0: 61 75 73 65 20 6f 66 20 74 68 69 73 20 64 75 70  ause of this dup
16c0: 6c 69 63 61 74 69 6f 6e 20 69 73 20 6e 6f 74 0a  lication is not.
16d0: 09 20 20 20 20 23 20 6b 6e 6f 77 6e 2e 20 53 70  .    # known. Sp
16e0: 65 63 75 6c 61 74 69 6f 6e 20 63 65 6e 74 65 72  eculation center
16f0: 73 20 6f 6e 20 52 43 53 2f 43 56 53 20 62 75 67  s on RCS/CVS bug
1700: 73 2c 20 6f 72 20 66 72 6f 6d 0a 09 20 20 20 20  s, or from..    
1710: 23 20 6d 61 6e 75 61 6c 20 65 64 69 74 73 20 6f  # manual edits o
1720: 66 20 74 68 65 20 72 65 70 6f 73 69 74 6f 72 79  f the repository
1730: 20 77 68 69 63 68 20 62 6f 72 6b 65 64 20 74 68   which borked th
1740: 65 0a 09 20 20 20 20 23 20 69 6e 74 65 72 6e 61  e..    # interna
1750: 6c 73 2e 20 57 68 61 74 65 76 65 72 20 74 68 65  ls. Whatever the
1760: 20 63 61 75 73 65 2c 20 74 65 73 74 69 6e 67 20   cause, testing 
1770: 73 68 6f 77 65 64 20 74 68 61 74 20 62 6f 74 68  showed that both
1780: 0a 09 20 20 20 20 23 20 63 76 73 20 61 6e 64 20  ..    # cvs and 
1790: 72 63 73 20 75 73 65 20 74 68 65 20 66 69 72 73  rcs use the firs
17a0: 74 20 64 65 66 69 6e 69 74 69 6f 6e 20 77 68 65  t definition whe
17b0: 6e 20 70 65 72 66 6f 72 6d 69 6e 67 20 61 0a 09  n performing a..
17c0: 20 20 20 20 23 20 63 68 65 63 6b 6f 75 74 2c 20      # checkout, 
17d0: 61 6e 64 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68  and we follow th
17e0: 65 69 72 20 6c 65 61 64 2e 20 53 69 64 65 20 6e  eir lead. Side n
17f0: 6f 74 65 73 3a 20 27 63 76 73 0a 09 20 20 20 20  otes: 'cvs..    
1800: 23 20 6c 6f 67 27 20 66 61 69 6c 73 20 6f 6e 20  # log' fails on 
1810: 73 75 63 68 20 61 20 66 69 6c 65 2c 20 61 6e 64  such a file, and
1820: 20 27 63 76 73 20 72 6c 6f 67 27 20 70 72 69 6e   'cvs rlog' prin
1830: 74 73 20 74 68 65 20 6c 6f 67 0a 09 20 20 20 20  ts the log..    
1840: 23 20 6d 65 73 73 61 67 65 20 66 72 6f 6d 20 74  # message from t
1850: 68 65 20 66 69 72 73 74 20 64 65 6c 74 61 2c 20  he first delta, 
1860: 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 73 65 63  ignoring the sec
1870: 6f 6e 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77  ond....    log w
1880: 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20  rite 1 file "In 
1890: 66 69 6c 65 20 24 6d 79 70 61 74 68 20 3a 20 44  file $mypath : D
18a0: 75 70 6c 69 63 61 74 65 20 64 65 6c 74 61 20 64  uplicate delta d
18b0: 61 74 61 20 66 6f 72 20 72 65 76 69 73 69 6f 6e  ata for revision
18c0: 20 24 72 65 76 6e 72 22 0a 09 20 20 20 20 6c 6f   $revnr"..    lo
18d0: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22  g write 1 file "
18e0: 49 67 6e 6f 72 69 6e 67 20 74 68 65 20 64 75 70  Ignoring the dup
18f0: 6c 69 63 61 74 65 22 0a 09 20 20 20 20 72 65 74  licate"..    ret
1900: 75 72 6e 0a 09 7d 0a 0a 09 23 20 44 65 74 65 72  urn..}...# Deter
1910: 6d 69 6e 65 20 74 68 65 20 6c 69 6e 65 20 6f 66  mine the line of
1920: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72   development for
1930: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 28 70   the revision (p
1940: 72 6f 6a 65 63 74 0a 09 23 20 6c 65 76 65 6c 29  roject..# level)
1950: 2e 20 54 68 69 73 20 67 69 76 65 73 20 75 73 20  . This gives us 
1960: 74 68 65 20 62 72 61 6e 63 68 69 64 20 74 6f 6f  the branchid too
1970: 2c 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  , required for t
1980: 68 65 0a 09 23 20 6d 65 74 61 20 64 61 74 61 20  he..# meta data 
1990: 67 72 6f 75 70 20 74 68 65 20 72 65 76 69 73 69  group the revisi
19a0: 6f 6e 20 69 73 20 69 6e 2e 20 28 4e 6f 74 65 3a  on is in. (Note:
19b0: 20 42 79 20 70 75 74 74 69 6e 67 20 62 6f 74 68   By putting both
19c0: 0a 09 23 20 62 72 61 6e 63 68 2f 6c 6f 64 20 61  ..# branch/lod a
19d0: 6e 64 20 70 72 6f 6a 65 63 74 20 69 6e 66 6f 72  nd project infor
19e0: 6d 61 74 69 6f 6e 20 69 6e 74 6f 20 74 68 65 20  mation into the 
19f0: 67 72 6f 75 70 20 77 65 20 65 6e 73 75 72 65 0a  group we ensure.
1a00: 09 23 20 74 68 61 74 20 61 6e 79 20 63 72 6f 73  .# that any cros
1a10: 73 2d 70 72 6f 6a 65 63 74 20 61 6e 64 20 63 72  s-project and cr
1a20: 6f 73 73 2d 62 72 61 6e 63 68 20 63 6f 6d 6d 69  oss-branch commi
1a30: 74 73 20 61 72 65 0a 09 23 20 73 65 70 61 72 61  ts are..# separa
1a40: 74 65 64 20 69 6e 74 6f 20 6d 75 6c 74 69 70 6c  ted into multipl
1a50: 65 20 63 6f 6d 6d 69 74 73 2c 20 6f 6e 65 20 69  e commits, one i
1a60: 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20 70 72  n each of the pr
1a70: 6f 6a 65 63 74 73 0a 09 23 20 61 6e 64 2f 6f 72  ojects..# and/or
1a80: 20 62 72 61 6e 63 68 65 73 29 2e 0a 0a 09 73 65   branches)....se
1a90: 74 20 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74  t lod [$self Get
1aa0: 4c 4f 44 20 24 72 65 76 6e 72 5d 0a 0a 09 24 72  LOD $revnr]...$r
1ab0: 65 76 20 73 65 74 6d 65 74 61 20 5b 24 6d 79 70  ev setmeta [$myp
1ac0: 72 6f 6a 65 63 74 20 64 65 66 6d 65 74 61 20 5b  roject defmeta [
1ad0: 24 6c 6f 64 20 69 64 5d 20 24 6d 79 61 69 64 28  $lod id] $myaid(
1ae0: 24 72 65 76 6e 72 29 20 24 63 6d 69 64 5d 0a 09  $revnr) $cmid]..
1af0: 24 72 65 76 20 73 65 74 74 65 78 74 20 24 74 65  $rev settext $te
1b00: 78 74 72 61 6e 67 65 0a 09 24 72 65 76 20 73 65  xtrange..$rev se
1b10: 74 6c 6f 64 20 20 24 6c 6f 64 0a 0a 09 23 20 49  tlod  $lod...# I
1b20: 66 20 74 68 69 73 20 69 73 20 72 65 76 69 73 69  f this is revisi
1b30: 6f 6e 20 31 2e 31 2c 20 77 65 20 68 61 76 65 20  on 1.1, we have 
1b40: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  to determine whe
1b50: 74 68 65 72 20 74 68 65 0a 09 23 20 66 69 6c 65  ther the..# file
1b60: 20 73 65 65 6d 73 20 74 6f 20 68 61 76 65 20 62   seems to have b
1b70: 65 65 6e 20 63 72 65 61 74 65 64 20 74 68 72 6f  een created thro
1b80: 75 67 68 20 27 63 76 73 20 61 64 64 27 20 69 6e  ugh 'cvs add' in
1b90: 73 74 65 61 64 20 6f 66 0a 09 23 20 27 63 76 73  stead of..# 'cvs
1ba0: 20 69 6d 70 6f 72 74 27 2e 20 54 68 69 73 20 63   import'. This c
1bb0: 61 6e 20 62 65 20 64 6f 6e 65 20 62 79 20 6c 6f  an be done by lo
1bc0: 6f 6b 69 6e 67 20 61 74 20 74 68 65 20 75 6e 2d  oking at the un-
1bd0: 0a 09 23 20 61 64 75 6c 74 65 72 61 74 65 64 20  ..# adulterated 
1be0: 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 2c 20  commit message, 
1bf0: 61 73 20 43 56 53 20 75 73 65 73 20 61 20 68 61  as CVS uses a ha
1c00: 72 64 77 69 72 65 64 20 6d 61 67 69 63 0a 09 23  rdwired magic..#
1c10: 20 6d 65 73 73 61 67 65 20 66 6f 72 20 74 68 65   message for the
1c20: 20 6c 61 74 74 65 72 2c 20 69 2e 65 2e 20 22 49   latter, i.e. "I
1c30: 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c  nitial revision\
1c40: 6e 22 2c 20 6e 6f 0a 09 23 20 70 65 72 69 6f 64  n", no..# period
1c50: 2e 20 20 28 54 68 69 73 20 66 61 63 74 20 61 6c  .  (This fact al
1c60: 73 6f 20 68 65 6c 70 73 20 75 73 20 77 68 65 6e  so helps us when
1c70: 20 74 68 65 20 74 69 6d 65 20 63 6f 6d 65 73 20   the time comes 
1c80: 74 6f 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 20  to..# determine 
1c90: 77 68 65 74 68 65 72 20 74 68 69 73 20 66 69 6c  whether this fil
1ca0: 65 20 6d 69 67 68 74 20 68 61 76 65 20 68 61 64  e might have had
1cb0: 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63   a default branc
1cc0: 68 0a 09 23 20 69 6e 20 74 68 65 20 70 61 73 74  h..# in the past
1cd0: 2e 29 0a 0a 09 69 66 20 7b 24 72 65 76 6e 72 20  .)...if {$revnr 
1ce0: 65 71 20 22 31 2e 31 22 7d 20 7b 0a 09 20 20 20  eq "1.1"} {..   
1cf0: 20 73 65 74 20 6d 79 69 6d 70 6f 72 74 65 64 20   set myimported 
1d00: 5b 65 78 70 72 20 7b 24 63 6f 6d 6d 69 74 6d 73  [expr {$commitms
1d10: 67 20 65 71 20 22 49 6e 69 74 69 61 6c 20 72 65  g eq "Initial re
1d20: 76 69 73 69 6f 6e 5c 6e 22 7d 5d 0a 09 7d 0a 0a  vision\n"}]..}..
1d30: 09 23 20 48 65 72 65 20 77 65 20 61 6c 73 6f 20  .# Here we also 
1d40: 6b 65 65 70 20 74 72 61 63 6b 20 6f 66 20 74 68  keep track of th
1d50: 65 20 6f 72 64 65 72 20 69 6e 20 77 68 69 63 68  e order in which
1d60: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 0a 09   the revisions..
1d70: 23 20 77 65 72 65 20 61 64 64 65 64 20 74 6f 20  # were added to 
1d80: 74 68 65 20 66 69 6c 65 2e 0a 0a 09 6c 61 70 70  the file....lapp
1d90: 65 6e 64 20 6d 79 72 65 76 69 73 69 6f 6e 73 20  end myrevisions 
1da0: 24 72 65 76 0a 09 72 65 74 75 72 6e 0a 20 20 20  $rev..return.   
1db0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64   }..    method d
1dc0: 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 43 6f 6d 70  one {} {..# Comp
1dd0: 6c 65 74 65 20 74 68 65 20 72 65 76 69 73 69 6f  lete the revisio
1de0: 6e 73 2c 20 62 72 61 6e 63 68 65 73 2c 20 61 6e  ns, branches, an
1df0: 64 20 74 61 67 73 2e 20 54 68 69 73 20 69 6e 63  d tags. This inc
1e00: 6c 75 64 65 73 0a 09 23 20 6c 6f 6f 6b 69 6e 67  ludes..# looking
1e10: 20 66 6f 72 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b   for a non-trunk
1e20: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c   default branch,
1e30: 20 6d 61 72 6b 69 6e 67 20 69 74 73 20 6d 65 6d   marking its mem
1e40: 62 65 72 73 0a 09 23 20 61 6e 64 20 6c 69 6e 6b  bers..# and link
1e50: 69 6e 67 20 74 68 65 6d 20 69 6e 74 6f 20 74 68  ing them into th
1e60: 65 20 74 72 75 6e 6b 2e 0a 0a 09 24 73 65 6c 66  e trunk....$self
1e70: 20 44 65 74 65 72 6d 69 6e 65 52 65 76 69 73 69   DetermineRevisi
1e80: 6f 6e 4f 70 65 72 61 74 69 6f 6e 73 0a 09 24 73  onOperations..$s
1e90: 65 6c 66 20 44 65 74 65 72 6d 69 6e 65 4c 69 6e  elf DetermineLin
1ea0: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 0a  esOfDevelopment.
1eb0: 09 24 73 65 6c 66 20 48 61 6e 64 6c 65 4e 6f 6e  .$self HandleNon
1ec0: 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e  TrunkDefaultBran
1ed0: 63 68 0a 09 24 73 65 6c 66 20 52 65 6d 6f 76 65  ch..$self Remove
1ee0: 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 74 69  IrrelevantDeleti
1ef0: 6f 6e 73 0a 09 24 73 65 6c 66 20 52 65 6d 6f 76  ons..$self Remov
1f00: 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65  eInitialBranchDe
1f10: 6c 65 74 69 6f 6e 73 0a 0a 09 69 66 20 7b 5b 24  letions...if {[$
1f20: 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e 6b 6f  myproject trunko
1f30: 6e 6c 79 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65  nly]} {..    $se
1f40: 6c 66 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72 75  lf ExcludeNonTru
1f50: 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 0a 09 7d  nkInformation..}
1f60: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
1f70: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
1f80: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
1f90: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20  ###########.    
1fa0: 23 23 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61  ## State..    va
1fb0: 72 69 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20  riable myid     
1fc0: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20           {} ; # 
1fd0: 46 69 6c 65 20 69 64 20 69 6e 20 74 68 65 20 70  File id in the p
1fe0: 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e  ersistent state.
1ff0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
2000: 70 61 74 68 20 20 20 20 20 20 20 20 20 20 20 20  path            
2010: 7b 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74  {} ; # Path of t
2020: 68 65 20 66 69 6c 65 27 73 20 72 63 73 20 61 72  he file's rcs ar
2030: 63 68 69 76 65 2e 0a 20 20 20 20 76 61 72 69 61  chive..    varia
2040: 62 6c 65 20 6d 79 75 73 72 70 61 74 68 20 20 20  ble myusrpath   
2050: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74        {} ; # Pat
2060: 68 20 6f 66 20 74 68 65 20 66 69 6c 65 20 61 73  h of the file as
2070: 20 73 65 65 6e 20 62 79 20 75 73 65 72 73 2e 0a   seen by users..
2080: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 65      variable mye
2090: 78 65 63 75 74 61 62 6c 65 20 20 20 20 20 20 30  xecutable      0
20a0: 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c    ; # Boolean fl
20b0: 61 67 20 27 66 69 6c 65 20 65 78 65 63 75 74 61  ag 'file executa
20c0: 62 6c 65 27 2e 0a 20 20 20 20 76 61 72 69 61 62  ble'..    variab
20d0: 6c 65 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20  le myproject    
20e0: 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65       {} ; # Refe
20f0: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 70 72 6f  rence to the pro
2100: 6a 65 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 09  ject object.....
2110: 20 20 20 20 23 20 74 68 65 20 66 69 6c 65 20 62      # the file b
2120: 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76  elongs to..    v
2130: 61 72 69 61 62 6c 65 20 6d 79 72 65 76 20 2d 61  ariable myrev -a
2140: 72 72 61 79 20 20 20 20 20 20 7b 7d 20 3b 20 23  rray      {} ; #
2150: 20 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e   Maps revision n
2160: 75 6d 62 65 72 20 74 6f 20 74 68 65 0a 09 09 09  umber to the....
2170: 09 20 20 20 20 23 20 61 73 73 6f 63 69 61 74 65  .    # associate
2180: 64 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63  d revision objec
2190: 74 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  t..    variable 
21a0: 6d 79 72 65 76 69 73 69 6f 6e 73 20 20 20 20 20  myrevisions     
21b0: 20 20 7b 7d 20 3b 20 23 20 53 61 6d 65 20 61 73    {} ; # Same as
21c0: 20 6d 79 72 65 76 2c 20 62 75 74 20 61 20 6c 69   myrev, but a li
21d0: 73 74 2c 0a 09 09 09 09 20 20 20 20 23 20 67 69  st,.....    # gi
21e0: 76 69 6e 67 20 75 73 20 74 68 65 20 6f 72 64 65  ving us the orde
21f0: 72 20 6f 66 0a 09 09 09 09 20 20 20 20 23 20 72  r of.....    # r
2200: 65 76 69 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61  evisions..    va
2210: 72 69 61 62 6c 65 20 6d 79 61 69 64 20 20 20 20  riable myaid    
2220: 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20    -array {} ; # 
2230: 4d 61 70 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d  Map revision num
2240: 62 65 72 73 20 74 6f 20 74 68 65 20 69 64 0a 09  bers to the id..
2250: 09 09 09 20 20 20 20 23 20 6f 66 20 74 68 65 20  ...    # of the 
2260: 61 75 74 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69  author who commi
2270: 74 74 65 64 0a 09 09 09 09 20 20 20 20 23 20 69  tted.....    # i
2280: 74 2e 20 54 68 69 73 20 69 73 20 6c 61 74 65 72  t. This is later
2290: 20 61 67 67 72 65 67 61 74 65 64 0a 09 09 09 09   aggregated.....
22a0: 20 20 20 20 23 20 77 69 74 68 20 63 6f 6d 6d 69      # with commi
22b0: 74 20 6d 65 73 73 61 67 65 2c 20 62 72 61 6e 63  t message, branc
22c0: 68 20 6e 61 6d 65 0a 09 09 09 09 20 20 20 20 23  h name.....    #
22d0: 20 61 6e 64 20 70 72 6f 6a 65 63 74 20 69 64 20   and project id 
22e0: 66 6f 72 20 61 20 6d 65 74 61 20 69 64 2e 0a 20  for a meta id.. 
22f0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65     variable myhe
2300: 61 64 72 65 76 6e 72 20 20 20 20 20 20 20 7b 7d  adrevnr       {}
2310: 20 3b 20 23 20 48 65 61 64 20 72 65 76 69 73 69   ; # Head revisi
2320: 6f 6e 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d  on (revision num
2330: 62 65 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c  ber).    variabl
2340: 65 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20  e myprincipal   
2350: 20 20 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63      {} ; # Princ
2360: 69 70 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61  ipal branch (bra
2370: 6e 63 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09  nch number).....
2380: 09 20 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20  .    # Contrary 
2390: 74 6f 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73  to the name this
23a0: 20 69 73 20 74 68 65 0a 09 09 09 09 20 20 20 20   is the.....    
23b0: 23 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  # default branch
23c0: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
23d0: 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20  ydependencies   
23e0: 20 7b 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61   {} ; # Dictiona
23f0: 72 79 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69  ry parent -> chi
2400: 6c 64 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65  ld,.....    # re
2410: 63 6f 72 64 73 20 70 72 69 6d 61 72 79 20 64 65  cords primary de
2420: 70 65 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20  pendencies..    
2430: 76 61 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72  variable myimpor
2440: 74 65 64 20 20 20 20 20 20 20 20 30 20 20 3b 20  ted        0  ; 
2450: 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20  # Boolean flag. 
2460: 53 65 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  Set if and only 
2470: 69 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76  if.....    # rev
2480: 20 31 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65   1.1 of the file
2490: 20 73 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20   seemingly..... 
24a0: 20 20 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65     # was importe
24b0: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64  d instead of add
24c0: 65 64 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72  ed.....    # nor
24d0: 6d 61 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61  mally..    varia
24e0: 62 6c 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20  ble myroot      
24f0: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66        {} ; # Ref
2500: 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65  erence to the re
2510: 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09  vision object...
2520: 09 09 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20  ..    # holding 
2530: 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f  the root revisio
2540: 6e 2e 20 20 49 74 73 0a 09 09 09 09 20 20 20 20  n.  Its.....    
2550: 23 20 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79  # number usually
2560: 20 69 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62   is '1.1'. Can b
2570: 65 0a 09 09 09 09 20 20 20 20 23 20 61 20 64 69  e.....    # a di
2580: 66 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20  fferent number, 
2590: 62 65 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20  because of..... 
25a0: 20 20 20 23 20 67 61 70 73 20 63 72 65 61 74 65     # gaps create
25b0: 64 20 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20  d via 'cvsadmin 
25c0: 2d 6f 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  -o'..    variabl
25d0: 65 20 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72  e mybranches -ar
25e0: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20  ray {} ; # Maps 
25f0: 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f  branch number to
2600: 20 74 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09   the symbol.....
2610: 20 20 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e      # object han
2620: 64 6c 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68  dling the branch
2630: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
2640: 79 74 61 67 73 20 20 20 20 20 2d 61 72 72 61 79  ytags     -array
2650: 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76   {} ; # Maps rev
2660: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20  ision number to 
2670: 74 68 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20  the list.....   
2680: 20 23 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a   # of symbol obj
2690: 65 63 74 73 20 66 6f 72 20 74 68 65 20 74 61 67  ects for the tag
26a0: 73 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 6f  s.....    # asso
26b0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
26c0: 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61  revision..    va
26d0: 72 69 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73  riable mysymbols
26e0: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20           {} ; # 
26f0: 53 65 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f  Set of the symbo
2700: 6c 20 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e  l names found in
2710: 0a 09 09 09 09 20 20 20 20 23 20 74 68 69 73 20  .....    # this 
2720: 66 69 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61  file...    varia
2730: 62 6c 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20  ble mybranchcnt 
2740: 30 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f  0 ; # Counter fo
2750: 72 20 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72  r branches, to r
2760: 65 63 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20  ecord their.... 
2770: 20 20 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64      # order of d
2780: 65 66 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20  efinition. This 
2790: 61 6c 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09  also defines....
27a0: 20 20 20 20 20 23 20 74 68 65 69 72 20 6f 72 64       # their ord
27b0: 65 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20  er of creation, 
27c0: 77 68 69 63 68 20 69 73 20 74 68 65 0a 09 09 09  which is the....
27d0: 20 20 20 20 20 23 20 72 65 76 65 72 73 65 20 6f       # reverse o
27e0: 66 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49  f definition.  I
27f0: 2e 65 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09  .e. a smaller...
2800: 09 20 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d  .     # number m
2810: 65 61 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61  eans 'Defined ea
2820: 72 6c 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09  rlier', means...
2830: 09 20 20 20 20 20 23 20 27 43 72 65 61 74 65 64  .     # 'Created
2840: 20 6c 61 74 65 72 27 2e 0a 0a 20 20 20 20 76 61   later'...    va
2850: 72 69 61 62 6c 65 20 6d 79 74 72 75 6e 6b 20 7b  riable mytrunk {
2860: 7d 20 3b 20 23 20 44 69 72 65 63 74 20 72 65 66  } ; # Direct ref
2870: 65 72 65 6e 63 65 20 74 6f 20 6d 79 70 72 6f 6a  erence to myproj
2880: 65 63 74 20 2d 3e 20 74 72 75 6e 6b 2e 0a 20 20  ect -> trunk..  
2890: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f    variable myroo
28a0: 74 73 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f  ts {} ; # List o
28b0: 66 20 72 6f 6f 74 73 20 69 6e 20 74 68 65 20 66  f roots in the f
28c0: 6f 72 65 73 74 20 6f 66 0a 09 09 09 20 20 23 20  orest of....  # 
28d0: 6c 6f 64 27 73 2e 20 4f 62 6a 65 63 74 20 72 65  lod's. Object re
28e0: 66 65 72 65 6e 63 65 73 20 74 6f 20 72 65 76 69  ferences to revi
28f0: 73 69 6f 6e 73 20 61 6e 64 0a 09 09 09 20 20 23  sions and....  #
2900: 20 62 72 61 6e 63 68 65 73 2e 20 54 68 65 20 6c   branches. The l
2910: 61 74 74 65 72 20 63 61 6e 20 61 70 70 65 61 72  atter can appear
2920: 20 77 68 65 6e 20 74 68 65 79 0a 09 09 09 20 20   when they....  
2930: 23 20 61 72 65 20 73 65 76 65 72 65 64 20 66 72  # are severed fr
2940: 6f 6d 20 74 68 65 69 72 20 70 61 72 65 6e 74 2e  om their parent.
2950: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
2960: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
2970: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
2980: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65    ## Internal me
2990: 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f  thods..    metho
29a0: 64 20 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f  d RecordBranchCo
29b0: 6d 6d 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d  mmits {branches}
29c0: 20 7b 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e   {..foreach bran
29d0: 63 68 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65  chrevnr $branche
29e0: 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61  s {..    if {[ca
29f0: 74 63 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e  tch {...set bran
2a00: 63 68 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72  ch [$self Rev2Br
2a10: 61 6e 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e  anch $branchrevn
2a20: 72 5d 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09  r]..    }]} {...
2a30: 73 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c  set branch [$sel
2a40: 66 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72  f AddUnlabeledBr
2a50: 61 6e 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63  anch [rev 2branc
2a60: 68 6e 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72  hnr $branchrevnr
2a70: 5d 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  ]]..    }...    
2a80: 23 20 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d  # Record the com
2a90: 6d 69 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76  mit, just as rev
2aa0: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  ision number for
2ab0: 0a 09 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f  ..    # now. Pro
2ac0: 63 65 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65  cesBranchDepende
2ad0: 6e 63 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e  ncies will exten
2ae0: 64 20 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20  d that ito a..  
2af0: 20 20 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63    # proper objec
2b00: 74 20 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20  t reference.... 
2b10: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68     $branch setch
2b20: 69 6c 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68  ildrevnr $branch
2b30: 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e  revnr..}..return
2b40: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
2b50: 6f 64 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72  od Rev2Branch {r
2b60: 65 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65  evnr} {..if {[re
2b70: 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24  v istrunkrevnr $
2b80: 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 74  revnr]} {..    t
2b90: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20  rouble internal 
2ba0: 22 45 78 70 65 63 74 65 64 20 61 20 62 72 61 6e  "Expected a bran
2bb0: 63 68 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62  ch revision numb
2bc0: 65 72 22 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24  er"..}..return $
2bd0: 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20  mybranches([rev 
2be0: 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72  2branchnr $revnr
2bf0: 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  ]).    }..    me
2c00: 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65  thod AddUnlabele
2c10: 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e  dBranch {branchn
2c20: 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73  r} {..return [$s
2c30: 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e  elf AddBranch un
2c40: 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e  labeled-$branchn
2c50: 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20  r $branchnr].   
2c60: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41   }..    method A
2c70: 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62  ddBranch {name b
2c80: 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b  ranchnr} {..if {
2c90: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62  [info exists myb
2ca0: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e  ranches($branchn
2cb0: 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20  r)]} {..    log 
2cc0: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e  write 1 file "In
2cd0: 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e   '$mypath': Bran
2ce0: 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e  ch '$branchnr' n
2cf0: 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68  amed '[$mybranch
2d00: 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61  es($branchnr) na
2d10: 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77  me]'"..    log w
2d20: 72 69 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e  rite 1 file "Can
2d30: 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20  not have second 
2d40: 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67  name '$name', ig
2d50: 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20  noring it"..    
2d60: 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62  return..}..set b
2d70: 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f  ranch [sym %AUTO
2d80: 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68  % branch $branch
2d90: 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67  nr [$myproject g
2da0: 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20  etsymbol $name] 
2db0: 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e 63 68 20  $self]..$branch 
2dc0: 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e 63  setposition [inc
2dd0: 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a 09  r mybranchcnt]..
2de0: 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24  set mybranches($
2df0: 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61 6e 63  branchnr) $branc
2e00: 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61 6e 63  h..return $branc
2e10: 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  h.    }..    met
2e20: 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61 6d 65  hod AddTag {name
2e30: 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 74   revnr} {..set t
2e40: 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 74  ag [sym %AUTO% t
2e50: 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79 70 72  ag $revnr [$mypr
2e60: 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20  oject getsymbol 
2e70: 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 6c  $name] $self]..l
2e80: 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28 24 72  append mytags($r
2e90: 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65 74 75  evnr) $tag..retu
2ea0: 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a 0a 20  rn $tag.    }.. 
2eb0: 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64     method Record
2ec0: 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65  BasicDependencie
2ed0: 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 7b  s {revnr next} {
2ee0: 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65 20 72  ..# Handle the r
2ef0: 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 6e  evision dependen
2f00: 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74 68 65  cies. Record the
2f10: 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 23  m for now, do..#
2f20: 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20 74 68   nothing with th
2f30: 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 74  em yet....# On t
2f40: 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27 6e 65  he trunk the 'ne
2f50: 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  xt' field points
2f60: 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
2f70: 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 2e  ..# revision, i.
2f80: 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74 5f 20  e. the _parent_ 
2f90: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f  of the current o
2fa0: 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 20  ne. Example:..# 
2fb0: 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20 31 2e  1.6's next is 1.
2fc0: 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 64  5 (modulo cvs ad
2fd0: 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f 6e  min -o)....# Con
2fe0: 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 61  trarily on a bra
2ff0: 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27 20 66  nch the 'next' f
3000: 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
3010: 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20 5f 63  he..# primary _c
3020: 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 72  hild_ of the cur
3030: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 41  rent revision. A
3040: 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 2e  s example,..# 1.
3050: 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27 20 77  1.3.2's 'next' w
3060: 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e 0a  ill be 1.1.3.3..
3070: 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27 20 66  ..# The 'next' f
3080: 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 6c  ield actually al
3090: 77 61 79 73 20 72 65 66 65 72 73 20 74 6f 20 74  ways refers to t
30a0: 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 63  he revision..# c
30b0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 65  ontaining the de
30c0: 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20 72 65  lta needed to re
30d0: 74 72 69 65 76 65 20 74 68 61 74 20 72 65 76 69  trieve that revi
30e0: 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 65  sion....# The de
30f0: 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 65  pendencies neede
3100: 64 20 68 65 72 65 20 61 72 65 20 74 68 65 20 6c  d here are the l
3110: 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75 72 65  ogical structure
3120: 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68 69 6c  ,..# parent/chil
3130: 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 69  d, and not the i
3140: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65  mplementation de
3150: 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 23  pendent delta..#
3160: 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 20   pointers....if 
3170: 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20 72 65  {$next eq ""} re
3180: 74 75 72 6e 0a 09 23 20 20 20 20 20 20 20 20 20  turn..#         
3190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31a0: 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64   parent -> child
31b0: 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75  ..if {[rev istru
31c0: 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d  nkrevnr $revnr]}
31d0: 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
31e0: 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24  mydependencies $
31f0: 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 65  next $revnr..} e
3200: 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 65  lse {..    lappe
3210: 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65  nd mydependencie
3220: 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09  s $revnr $next..
3230: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
3240: 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63  .    method Proc
3250: 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64  essPrimaryDepend
3260: 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72  encies {} {..for
3270: 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65 76 6e  each {parentrevn
3280: 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20 24 6d  r childrevnr} $m
3290: 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 0a  ydependencies {.
32a0: 09 20 20 20 20 73 65 74 20 70 61 72 65 6e 74 20  .    set parent 
32b0: 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74 72 65  $myrev($parentre
32c0: 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20 63 68  vnr)..    set ch
32d0: 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63 68 69  ild  $myrev($chi
32e0: 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20 24 70  ldrevnr)..    $p
32f0: 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64 20 24  arent setchild $
3300: 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c  child..    $chil
3310: 64 20 73 65 74 70 61 72 65 6e 74 20 24 70 61 72  d setparent $par
3320: 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  ent..}..return. 
3330: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
3340: 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44 65   ProcessBranchDe
3350: 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a  pendencies {} {.
3360: 09 66 6f 72 65 61 63 68 20 7b 62 72 61 6e 63 68  .foreach {branch
3370: 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61  nr branch} [arra
3380: 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73  y get mybranches
3390: 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72 65 76  ] {..    set rev
33a0: 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65  nr [$branch pare
33b0: 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20 69  ntrevnr]...    i
33c0: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
33d0: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d   myrev($revnr)]}
33e0: 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31   {...log write 1
33f0: 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61   file "In '$mypa
3400: 74 68 27 3a 20 54 68 65 20 62 72 61 6e 63 68 20  th': The branch 
3410: 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d 27  '[$branch name]'
3420: 20 72 65 66 65 72 65 6e 63 65 73 22 0a 09 09 6c   references"...l
3430: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20  og write 1 file 
3440: 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 73  "the bogus revis
3450: 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64  ion '$revnr' and
3460: 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64   will be ignored
3470: 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 64 65 73  ."...$branch des
3480: 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79 62  troy...unset myb
3490: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e  ranches($branchn
34a0: 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b  r)..    } else {
34b0: 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 65  ...set rev $myre
34c0: 76 28 24 72 65 76 6e 72 29 0a 09 09 24 72 65 76  v($revnr)...$rev
34d0: 20 61 64 64 62 72 61 6e 63 68 20 24 62 72 61 6e   addbranch $bran
34e0: 63 68 0a 09 09 24 62 72 61 6e 63 68 20 73 65 74  ch...$branch set
34f0: 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09 09 23  parent $rev....#
3500: 20 49 66 20 72 65 76 69 73 69 6f 6e 73 20 77 65   If revisions we
3510: 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20  re committed on 
3520: 74 68 65 20 62 72 61 6e 63 68 20 77 65 20 73 74  the branch we st
3530: 6f 72 65 20 61 0a 09 09 23 20 72 65 66 65 72 65  ore a...# refere
3540: 6e 63 65 20 74 6f 20 74 68 65 20 62 72 61 6e 63  nce to the branc
3550: 68 20 74 68 65 72 65 2c 20 61 6e 64 20 66 75 72  h there, and fur
3560: 74 68 65 72 20 64 65 63 6c 61 72 65 0a 09 09 23  ther declare...#
3570: 20 74 68 65 20 66 69 72 73 74 20 63 68 69 6c 64   the first child
3580: 27 73 20 70 61 72 65 6e 74 20 74 6f 20 62 65 20  's parent to be 
3590: 62 72 61 6e 63 68 27 73 20 70 61 72 65 6e 74 2c  branch's parent,
35a0: 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 20 74 68   and...# list th
35b0: 69 73 20 63 68 69 6c 64 20 69 6e 20 74 68 65 20  is child in the 
35c0: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e  parent revision.
35d0: 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e 63 68  ....if {[$branch
35e0: 20 68 61 73 63 68 69 6c 64 72 65 76 5d 7d 20 7b   haschildrev]} {
35f0: 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 6c 64  ...    set child
3600: 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 63  revnr [$branch c
3610: 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20 20  hildrevnr]...   
3620: 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79 72 65   set child $myre
3630: 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 09  v($childrevnr)..
3640: 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74  .    $branch set
3650: 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09 09  child $child....
3660: 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 61      $child setpa
3670: 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e  rentbranch $bran
3680: 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c 64 20  ch...    $child 
3690: 73 65 74 70 61 72 65 6e 74 20 20 20 20 20 20 20  setparent       
36a0: 24 72 65 76 0a 09 09 20 20 20 20 24 72 65 76 20  $rev...    $rev 
36b0: 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68  addchildonbranch
36c0: 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20 20   $child...}..   
36d0: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20   }..}..return.  
36e0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
36f0: 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b 7d 20  SortBranches {} 
3700: 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e  {..foreach {revn
3710: 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65  r rev} [array ge
3720: 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65 76 20  t myrev] { $rev 
3730: 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d 0a 09  sortbranches }..
3740: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
3750: 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73    method Process
3760: 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65 73 20  TagDependencies 
3770: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72  {} {..foreach {r
3780: 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b 61  evnr taglist} [a
3790: 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d  rray get mytags]
37a0: 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e   {..    if {![in
37b0: 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28  fo exists myrev(
37c0: 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73 65  $revnr)]} {...se
37d0: 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74 61  t n [llength $ta
37e0: 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72 69  glist]...log wri
37f0: 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24  te 1 file "In '$
3800: 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66 6f 6c  mypath': The fol
3810: 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20 74  lowing [nsp $n t
3820: 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22 0a 09  ag] reference"..
3830: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c  .log write 1 fil
3840: 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 76  e "the bogus rev
3850: 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61  ision '$revnr' a
3860: 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72  nd will be ignor
3870: 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68 20 74  ed."...foreach t
3880: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09  ag $taglist {...
3890: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20      log write 1 
38a0: 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61 67 20  file "    [$tag 
38b0: 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24 74 61  name]"...    $ta
38c0: 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09 09  g destroy...}...
38d0: 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24 72 65  unset mytags($re
38e0: 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65  vnr)..    } else
38f0: 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79   {...set rev $my
3900: 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 66 6f  rev($revnr)...fo
3910: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69  reach tag $tagli
3920: 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20  st {...    $rev 
3930: 61 64 64 74 61 67 20 20 20 20 24 74 61 67 0a 09  addtag    $tag..
3940: 09 20 20 20 20 24 74 61 67 20 73 65 74 74 61 67  .    $tag settag
3950: 72 65 76 20 24 72 65 76 0a 09 09 7d 0a 09 20 20  rev $rev...}..  
3960: 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20    }..}..return. 
3970: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
3980: 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f   DetermineTheRoo
3990: 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09  tRevision {} {..
39a0: 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20 74 68  # The root is th
39b0: 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 77  e one revision w
39c0: 68 69 63 68 20 68 61 73 20 6e 6f 20 70 61 72 65  hich has no pare
39d0: 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 63 6b 69  nt. By..# checki
39e0: 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73  ng all revisions
39f0: 20 77 65 20 65 6e 73 75 72 65 20 74 68 61 74 20   we ensure that 
3a00: 77 65 20 63 61 6e 20 64 65 74 65 63 74 20 61 6e  we can detect an
3a10: 64 0a 09 23 20 72 65 70 6f 72 74 20 74 68 65 20  d..# report the 
3a20: 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c 65  case of multiple
3a30: 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74 20   roots. Without 
3a40: 74 68 61 74 20 77 65 20 63 6f 75 6c 64 0a 09 23  that we could..#
3a50: 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e 65   simply take one
3a60: 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 66 6f   revision and fo
3a70: 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 6e 74 20  llow the parent 
3a80: 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65 69  links to..# thei
3a90: 72 20 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a 0a  r root (sic!)...
3aa0: 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20  .foreach {revnr 
3ab0: 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20  rev} [array get 
3ac0: 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20 69 66  myrev] {..    if
3ad0: 20 7b 5b 24 72 65 76 20 68 61 73 70 61 72 65 6e   {[$rev hasparen
3ae0: 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  t]} continue..  
3af0: 20 20 69 66 20 7b 24 6d 79 72 6f 6f 74 20 6e 65    if {$myroot ne
3b00: 20 22 22 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69   ""} { trouble i
3b10: 6e 74 65 72 6e 61 6c 20 22 4d 75 6c 74 69 70 6c  nternal "Multipl
3b20: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73  e root revisions
3b30: 20 66 6f 75 6e 64 22 20 7d 0a 09 20 20 20 20 73   found" }..    s
3b40: 65 74 20 6d 79 72 6f 6f 74 20 24 72 65 76 0a 09  et myroot $rev..
3b50: 7d 0a 0a 09 23 20 49 6e 20 74 68 65 20 66 75 74  }...# In the fut
3b60: 75 72 65 20 77 65 20 61 6c 73 6f 20 6e 65 65 64  ure we also need
3b70: 20 61 20 6c 69 73 74 2c 20 61 73 20 62 72 61 6e   a list, as bran
3b80: 63 68 65 73 20 63 61 6e 20 62 65 63 6f 6d 65 0a  ches can become.
3b90: 09 23 20 73 65 76 65 72 65 64 20 66 72 6f 6d 20  .# severed from 
3ba0: 74 68 65 69 72 20 70 61 72 65 6e 74 2c 20 6d 61  their parent, ma
3bb0: 6b 69 6e 67 20 74 68 65 6d 20 74 68 65 69 72 20  king them their 
3bc0: 6f 77 6e 20 72 6f 6f 74 2e 0a 09 73 65 74 20 6d  own root...set m
3bd0: 79 72 6f 6f 74 73 20 5b 6c 69 73 74 20 24 6d 79  yroots [list $my
3be0: 72 6f 6f 74 5d 0a 09 72 65 74 75 72 6e 0a 20 20  root]..return.  
3bf0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
3c00: 44 65 74 65 72 6d 69 6e 65 52 65 76 69 73 69 6f  DetermineRevisio
3c10: 6e 4f 70 65 72 61 74 69 6f 6e 73 20 7b 7d 20 7b  nOperations {} {
3c20: 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 6d  ..foreach rev $m
3c30: 79 72 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65  yrevisions { $re
3c40: 76 20 64 65 74 65 72 6d 69 6e 65 6f 70 65 72 61  v determineopera
3c50: 74 69 6f 6e 20 7d 0a 09 72 65 74 75 72 6e 0a 20  tion }..return. 
3c60: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
3c70: 20 44 65 74 65 72 6d 69 6e 65 4c 69 6e 65 73 4f   DetermineLinesO
3c80: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20  fDevelopment {} 
3c90: 7b 0a 09 23 20 46 6f 72 20 72 65 76 69 73 69 6f  {..# For revisio
3ca0: 6e 73 20 74 68 69 73 20 68 61 73 20 62 65 65 6e  ns this has been
3cb0: 20 64 6f 6e 65 20 61 6c 72 65 61 64 79 2c 20 69   done already, i
3cc0: 6e 20 27 65 78 74 65 6e 64 27 2e 20 4e 6f 77 0a  n 'extend'. Now.
3cd0: 09 23 20 77 65 20 64 6f 20 74 68 69 73 20 66 6f  .# we do this fo
3ce0: 72 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 61  r the branches a
3cf0: 6e 64 20 74 61 67 73 2e 0a 0a 09 66 6f 72 65 61  nd tags....forea
3d00: 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b 61  ch {_ branch} [a
3d10: 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63  rray get mybranc
3d20: 68 65 73 5d 20 7b 0a 09 20 20 20 20 24 62 72 61  hes] {..    $bra
3d30: 6e 63 68 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c  nch setlod [$sel
3d40: 66 20 47 65 74 4c 4f 44 20 5b 24 62 72 61 6e 63  f GetLOD [$branc
3d50: 68 20 70 61 72 65 6e 74 72 65 76 6e 72 5d 5d 0a  h parentrevnr]].
3d60: 09 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20  .}...foreach {_ 
3d70: 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20  taglist} [array 
3d80: 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20  get mytags] {.. 
3d90: 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 24     foreach tag $
3da0: 74 61 67 6c 69 73 74 20 7b 0a 09 09 24 74 61 67  taglist {...$tag
3db0: 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47   setlod [$self G
3dc0: 65 74 4c 4f 44 20 5b 24 74 61 67 20 74 61 67 72  etLOD [$tag tagr
3dd0: 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 09 7d  evnr]]..    }..}
3de0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
3df0: 20 20 20 20 6d 65 74 68 6f 64 20 47 65 74 4c 4f      method GetLO
3e00: 44 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 69 66 20  D {revnr} {..if 
3e10: 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76  {[rev istrunkrev
3e20: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20  nr $revnr]} {.. 
3e30: 20 20 20 72 65 74 75 72 6e 20 24 6d 79 74 72 75     return $mytru
3e40: 6e 6b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20  nk..} else {..  
3e50: 20 20 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20    return [$self 
3e60: 52 65 76 32 42 72 61 6e 63 68 20 24 72 65 76 6e  Rev2Branch $revn
3e70: 72 5d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  r]..}.    }..   
3e80: 20 6d 65 74 68 6f 64 20 48 61 6e 64 6c 65 4e 6f   method HandleNo
3e90: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61  nTrunkDefaultBra
3ea0: 6e 63 68 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65  nch {} {..set re
3eb0: 76 6c 69 73 74 20 5b 24 73 65 6c 66 20 4e 6f 6e  vlist [$self Non
3ec0: 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69  TrunkDefaultRevi
3ed0: 73 69 6f 6e 73 5d 0a 09 69 66 20 7b 21 5b 6c 6c  sions]..if {![ll
3ee0: 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d 7d  ength $revlist]}
3ef0: 20 72 65 74 75 72 6e 0a 0a 09 24 73 65 6c 66 20   return...$self 
3f00: 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65  AdjustNonTrunkDe
3f10: 66 61 75 6c 74 42 72 61 6e 63 68 20 24 72 65 76  faultBranch $rev
3f20: 6c 69 73 74 0a 09 24 73 65 6c 66 20 43 68 65 63  list..$self Chec
3f30: 6b 4c 4f 44 73 0a 09 72 65 74 75 72 6e 0a 20 20  kLODs..return.  
3f40: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
3f50: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 52  NonTrunkDefaultR
3f60: 65 76 69 73 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23  evisions {} {..#
3f70: 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68   From cvs2svn th
3f80: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c  e following expl
3f90: 61 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f  anation (with mo
3fa0: 64 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66  difications..# f
3fb0: 6f 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d  or our algorithm
3fc0: 29 3a 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65  ):...# Determine
3fd0: 20 77 68 65 74 68 65 72 20 74 68 65 72 65 20 61   whether there a
3fe0: 72 65 20 61 6e 79 20 6e 6f 6e 2d 74 72 75 6e 6b  re any non-trunk
3ff0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a   default branch.
4000: 09 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09  .# revisions....
4010: 23 20 49 66 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b  # If a non-trunk
4020: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
4030: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  is determined to
4040: 20 68 61 76 65 20 65 78 69 73 74 65 64 2c 0a 09   have existed,..
4050: 23 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20  # return a list 
4060: 6f 66 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 61  of objects for a
4070: 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 74 68 61  ll revisions tha
4080: 74 20 77 65 72 65 20 6f 6e 63 65 0a 09 23 20 6e  t were once..# n
4090: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
40a0: 20 72 65 76 69 73 69 6f 6e 73 2c 20 69 6e 20 64   revisions, in d
40b0: 65 70 65 6e 64 65 6e 63 79 20 6f 72 64 65 72 20  ependency order 
40c0: 28 69 2e 65 2e 20 72 6f 6f 74 0a 09 23 20 66 69  (i.e. root..# fi
40d0: 72 73 74 29 2e 0a 0a 09 23 20 54 68 65 72 65 20  rst)....# There 
40e0: 61 72 65 20 74 77 6f 20 63 61 73 65 73 20 74 6f  are two cases to
40f0: 20 68 61 6e 64 6c 65 3a 0a 0a 09 23 20 4f 6e 65   handle:...# One
4100: 20 63 61 73 65 20 69 73 20 73 69 6d 70 6c 65 2e   case is simple.
4110: 20 20 54 68 65 20 52 43 53 20 66 69 6c 65 20 6c    The RCS file l
4120: 69 73 74 73 20 61 20 64 65 66 61 75 6c 74 20 62  ists a default b
4130: 72 61 6e 63 68 0a 09 23 20 65 78 70 6c 69 63 69  ranch..# explici
4140: 74 6c 79 20 69 6e 20 69 74 73 20 68 65 61 64 65  tly in its heade
4150: 72 2c 20 73 75 63 68 20 61 73 20 27 31 2e 31 2e  r, such as '1.1.
4160: 31 27 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  1'.  In this cas
4170: 65 2c 20 77 65 0a 09 23 20 6b 6e 6f 77 20 74 68  e, we..# know th
4180: 61 74 20 65 76 65 72 79 20 72 65 76 69 73 69 6f  at every revisio
4190: 6e 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20  n on the vendor 
41a0: 62 72 61 6e 63 68 20 69 73 20 74 6f 20 62 65 0a  branch is to be.
41b0: 09 23 20 74 72 65 61 74 65 64 20 61 73 20 68 65  .# treated as he
41c0: 61 64 20 6f 66 20 74 72 75 6e 6b 20 61 74 20 74  ad of trunk at t
41d0: 68 61 74 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d  hat point in tim
41e0: 65 2e 0a 0a 09 23 20 42 75 74 20 74 68 65 72 65  e....# But there
41f0: 27 73 20 61 6c 73 6f 20 61 20 64 65 67 65 6e 65  's also a degene
4200: 72 61 74 65 20 63 61 73 65 2e 20 20 54 68 65 20  rate case.  The 
4210: 52 43 53 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f  RCS file does no
4220: 74 0a 09 23 20 63 75 72 72 65 6e 74 6c 79 20 68  t..# currently h
4230: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 62 72  ave a default br
4240: 61 6e 63 68 2c 20 79 65 74 20 77 65 20 63 61 6e  anch, yet we can
4250: 20 64 65 64 75 63 65 20 74 68 61 74 20 66 6f 72   deduce that for
4260: 0a 09 23 20 73 6f 6d 65 20 70 65 72 69 6f 64 20  ..# some period 
4270: 69 6e 20 74 68 65 20 70 61 73 74 20 69 74 20 70  in the past it p
4280: 72 6f 62 61 62 6c 79 20 2a 64 69 64 2a 20 68 61  robably *did* ha
4290: 76 65 20 6f 6e 65 2e 20 20 46 6f 72 0a 09 23 20  ve one.  For..# 
42a0: 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 69 6c  example, the fil
42b0: 65 20 68 61 73 20 76 65 6e 64 6f 72 20 72 65 76  e has vendor rev
42c0: 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 31 20 2d  isions 1.1.1.1 -
42d0: 3e 20 31 2e 31 2e 31 2e 39 36 2c 0a 09 23 20 61  > 1.1.1.96,..# a
42e0: 6c 6c 20 6f 66 20 77 68 69 63 68 20 61 72 65 20  ll of which are 
42f0: 64 61 74 65 64 20 62 65 66 6f 72 65 20 31 2e 32  dated before 1.2
4300: 2c 20 61 6e 64 20 74 68 65 6e 20 69 74 20 68 61  , and then it ha
4310: 73 20 31 2e 31 2e 31 2e 39 37 0a 09 23 20 2d 3e  s 1.1.1.97..# ->
4320: 20 31 2e 31 2e 31 2e 31 30 30 20 64 61 74 65 64   1.1.1.100 dated
4330: 20 61 66 74 65 72 20 31 2e 32 2e 20 20 49 6e 20   after 1.2.  In 
4340: 74 68 69 73 20 63 61 73 65 2c 20 77 65 20 73 68  this case, we sh
4350: 6f 75 6c 64 0a 09 23 20 72 65 63 6f 72 64 20 31  ould..# record 1
4360: 2e 31 2e 31 2e 39 36 20 61 73 20 74 68 65 20 6c  .1.1.96 as the l
4370: 61 73 74 20 76 65 6e 64 6f 72 20 72 65 76 69 73  ast vendor revis
4380: 69 6f 6e 20 74 6f 20 68 61 76 65 20 62 65 65 6e  ion to have been
4390: 20 74 68 65 0a 09 23 20 68 65 61 64 20 6f 66 20   the..# head of 
43a0: 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e  the default bran
43b0: 63 68 2e 0a 0a 09 69 66 20 7b 24 6d 79 70 72 69  ch....if {$mypri
43c0: 6e 63 69 70 61 6c 20 6e 65 20 22 22 7d 20 7b 0a  ncipal ne ""} {.
43d0: 09 20 20 20 20 23 20 54 68 65 72 65 20 69 73 20  .    # There is 
43e0: 73 74 69 6c 6c 20 61 20 64 65 66 61 75 6c 74 20  still a default 
43f0: 62 72 61 6e 63 68 3b 20 74 68 61 74 20 6d 65 61  branch; that mea
4400: 6e 73 20 74 68 61 74 20 61 6c 6c 0a 09 20 20 20  ns that all..   
4410: 20 23 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20   # revisions on 
4420: 74 68 61 74 20 62 72 61 6e 63 68 20 67 65 74 20  that branch get 
4430: 6d 61 72 6b 65 64 2e 0a 0a 09 20 20 20 20 6c 6f  marked....    lo
4440: 67 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22  g write 5 file "
4450: 46 6f 75 6e 64 20 65 78 70 6c 69 63 69 74 6c 79  Found explicitly
4460: 20 6d 61 72 6b 65 64 20 4e 54 44 42 22 0a 0a 09   marked NTDB"...
4470: 20 20 20 20 73 65 74 20 72 6e 65 78 74 20 5b 24      set rnext [$
4480: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20  myroot child].. 
4490: 20 20 20 69 66 20 7b 24 72 6e 65 78 74 20 6e 65     if {$rnext ne
44a0: 20 22 22 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65   ""} {...trouble
44b0: 20 66 61 74 61 6c 20 22 46 69 6c 65 20 77 69 74   fatal "File wit
44c0: 68 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  h default branch
44d0: 20 24 6d 79 70 72 69 6e 63 69 70 61 6c 20 61 6c   $myprincipal al
44e0: 73 6f 20 68 61 73 20 72 65 76 69 73 69 6f 6e 20  so has revision 
44f0: 5b 24 72 6e 65 78 74 20 72 65 76 6e 72 5d 22 0a  [$rnext revnr]".
4500: 09 09 72 65 74 75 72 6e 0a 09 20 20 20 20 7d 0a  ..return..    }.
4510: 0a 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24  ..    set rev [$
4520: 6d 79 62 72 61 6e 63 68 65 73 28 24 6d 79 70 72  mybranches($mypr
4530: 69 6e 63 69 70 61 6c 29 20 63 68 69 6c 64 5d 0a  incipal) child].
4540: 09 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a  .    set res {}.
4550: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65  ..    while {$re
4560: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70  v ne ""} {...lap
4570: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09  pend res $rev...
4580: 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68  set rev [$rev ch
4590: 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20  ild]..    }...  
45a0: 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09    return $res...
45b0: 7d 20 65 6c 73 65 69 66 20 7b 24 6d 79 69 6d 70  } elseif {$myimp
45c0: 6f 72 74 65 64 7d 20 7b 0a 09 20 20 20 20 23 20  orted} {..    # 
45d0: 4e 6f 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  No default branc
45e0: 68 2c 20 62 75 74 20 74 68 65 20 66 69 6c 65 20  h, but the file 
45f0: 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 20  appears to have 
4600: 62 65 65 6e 0a 09 20 20 20 20 23 20 69 6d 70 6f  been..    # impo
4610: 72 74 65 64 2e 20 20 53 6f 20 6f 75 72 20 65 64  rted.  So our ed
4620: 75 63 61 74 65 64 20 67 75 65 73 73 20 69 73 20  ucated guess is 
4630: 74 68 61 74 20 61 6c 6c 20 72 65 76 69 73 69 6f  that all revisio
4640: 6e 73 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 65  ns..    # on the
4650: 20 27 31 2e 31 2e 31 27 20 62 72 61 6e 63 68 20   '1.1.1' branch 
4660: 77 69 74 68 20 74 69 6d 65 73 74 61 6d 70 73 20  with timestamps 
4670: 70 72 69 6f 72 20 74 6f 20 74 68 65 0a 09 20 20  prior to the..  
4680: 20 20 23 20 74 69 6d 65 73 74 61 6d 70 20 6f 66    # timestamp of
4690: 20 27 31 2e 32 27 20 77 65 72 65 20 6e 6f 6e 2d   '1.2' were non-
46a0: 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72  trunk default br
46b0: 61 6e 63 68 0a 09 20 20 20 20 23 20 72 65 76 69  anch..    # revi
46c0: 73 69 6f 6e 73 2e 0a 09 20 20 20 20 0a 09 20 20  sions...    ..  
46d0: 20 20 23 20 54 68 69 73 20 72 65 61 6c 6c 79 20    # This really 
46e0: 6f 6e 6c 79 20 70 72 6f 63 65 73 73 65 73 20 73  only processes s
46f0: 74 61 6e 64 61 72 64 20 27 31 2e 31 2e 31 2e 2a  tandard '1.1.1.*
4700: 27 2d 73 74 79 6c 65 0a 09 20 20 20 20 23 20 76  '-style..    # v
4710: 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e  endor revisions.
4720: 20 20 4f 6e 65 20 63 6f 75 6c 64 20 63 6f 6e 63    One could conc
4730: 65 69 76 61 62 6c 79 20 68 61 76 65 20 61 20 66  eivably have a f
4740: 69 6c 65 0a 09 20 20 20 20 23 20 77 68 6f 73 65  ile..    # whose
4750: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
4760: 69 73 20 31 2e 31 2e 33 20 6f 72 20 77 68 61 74  is 1.1.3 or what
4770: 65 76 65 72 2c 20 6f 72 20 77 61 73 20 74 68 61  ever, or was tha
4780: 74 0a 09 20 20 20 20 23 20 61 74 20 73 6f 6d 65  t..    # at some
4790: 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20   point in time, 
47a0: 77 69 74 68 20 76 65 6e 64 6f 72 20 72 65 76 69  with vendor revi
47b0: 73 69 6f 6e 73 20 31 2e 31 2e 33 2e 31 2c 0a 09  sions 1.1.3.1,..
47c0: 20 20 20 20 23 20 31 2e 31 2e 33 2e 32 2c 20 65      # 1.1.3.2, e
47d0: 74 63 2e 20 20 42 75 74 20 77 69 74 68 20 74 68  tc.  But with th
47e0: 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  e default branch
47f0: 20 67 6f 6e 65 20 6e 6f 77 2c 0a 09 20 20 20 20   gone now,..    
4800: 23 20 77 65 27 64 20 68 61 76 65 20 6e 6f 20 62  # we'd have no b
4810: 61 73 69 73 20 66 6f 72 20 61 73 73 75 6d 69 6e  asis for assumin
4820: 67 20 74 68 61 74 20 74 68 65 20 6e 6f 6e 2d 73  g that the non-s
4830: 74 61 6e 64 61 72 64 0a 09 20 20 20 20 23 20 76  tandard..    # v
4840: 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 68 61 64  endor branch had
4850: 20 65 76 65 72 20 62 65 65 6e 20 74 68 65 20 64   ever been the d
4860: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 61 6e  efault branch an
4870: 79 77 61 79 2e 0a 09 20 20 20 20 0a 09 20 20 20  yway...    ..   
4880: 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20   # Note that we 
4890: 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73  rely on comparis
48a0: 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  ons between the 
48b0: 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 20  timestamps..    
48c0: 23 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f  # of the revisio
48d0: 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72  ns on the vendor
48e0: 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61 74   branch and that
48f0: 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69 73   of..    # revis
4900: 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 68  ion 1.2, even th
4910: 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73 74 61  ough the timesta
4920: 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20 20  mps might be..  
4930: 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64 75    # incorrect du
4940: 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e  e to clock skew.
4950: 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 20    We could do a 
4960: 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23 20  slightly..    # 
4970: 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77 65  better job if we
4980: 20 75 73 65 64 20 74 68 65 20 63 68 61 6e 67 65   used the change
4990: 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c 20  set timestamps, 
49a0: 61 73 20 69 74 20 69 73 0a 09 20 20 20 20 23 20  as it is..    # 
49b0: 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74 68  possible that th
49c0: 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74  e dependencies t
49d0: 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20  hat went into.. 
49e0: 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e 67     # determining
49f0: 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d 70   those timestamp
4a00: 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75 72  s are more accur
4a10: 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20 23  ate.  But..    #
4a20: 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71 75   that would requ
4a30: 69 72 65 20 61 6e 20 65 78 74 72 61 20 70 61 73  ire an extra pas
4a40: 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20  s or two....    
4a50: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
4a60: 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31  s mybranches(1.1
4a70: 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b  .1)]} { return {
4a80: 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72  } }...    log wr
4a90: 69 74 65 20 35 20 66 69 6c 65 20 22 44 65 64 75  ite 5 file "Dedu
4aa0: 63 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f 66  ced existence of
4ab0: 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74   NTDB"...    set
4ac0: 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 68   rev  [$mybranch
4ad0: 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d  es(1.1.1) child]
4ae0: 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 20 7b  ..    set res  {
4af0: 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70 20  }..    set stop 
4b00: 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  [$myroot child].
4b10: 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20  ..    if {$stop 
4b20: 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 74  eq ""} {...# Get
4b30: 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74   everything on t
4b40: 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69 6c  he branch...whil
4b50: 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b  e {$rev ne ""} {
4b60: 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  ...    lappend r
4b70: 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 65  es $rev...    se
4b80: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c  t rev [$rev chil
4b90: 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c  d]...}..    } el
4ba0: 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74  se {...# Collect
4bb0: 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74   everything on t
4bc0: 68 65 20 62 72 61 6e 63 68 20 77 68 69 63 68 20  he branch which 
4bd0: 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 09  seems to have...
4be0: 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64  # been committed
4bf0: 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
4c00: 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20  t primary child 
4c10: 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 20  of the...# root 
4c20: 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20  revision....set 
4c30: 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 20  stopdate [$stop 
4c40: 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24  date]...while {$
4c50: 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20  rev ne ""} {... 
4c60: 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61 74     if {[$rev dat
4c70: 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d  e] >= $stopdate}
4c80: 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 70   break...    lap
4c90: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09  pend res $rev...
4ca0: 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65      set rev [$re
4cb0: 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20  v child]...}..  
4cc0: 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e    }...    return
4cd0: 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b   $res...} else {
4ce0: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a  ..    return {}.
4cf0: 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  .}.    }..    # 
4d00: 47 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49 6e  General note: In
4d10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
4d20: 65 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20 6d  ethods we only m
4d30: 6f 64 69 66 79 20 74 68 65 20 6c 69 6e 6b 73 0a  odify the links.
4d40: 20 20 20 20 23 20 62 65 74 77 65 65 6e 20 72 65      # between re
4d50: 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d 62  visions and symb
4d60: 6f 6c 73 20 74 6f 20 72 65 73 74 72 75 63 74 75  ols to restructu
4d70: 72 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a  re the revision.
4d80: 20 20 20 20 23 20 74 72 65 65 2e 20 57 65 20 64      # tree. We d
4d90: 6f 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 6f  o __not__ destro
4da0: 79 20 74 68 65 20 6f 62 6a 65 63 74 73 2e 20 47  y the objects. G
4db0: 69 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65 78  iven the complex
4dc0: 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 43 20   links.    # GC 
4dd0: 69 73 20 64 69 66 66 69 63 75 6c 74 20 61 74 20  is difficult at 
4de0: 74 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 20 69  this level. It i
4df0: 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 74 6f  s much easier to
4e00: 20 64 72 6f 70 0a 20 20 20 20 23 20 65 76 65 72   drop.    # ever
4e10: 79 74 68 69 6e 67 20 77 68 65 6e 20 77 65 20 77  ything when we w
4e20: 65 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 69 73  e are done. This
4e30: 20 68 61 70 70 65 6e 73 20 69 6e 20 27 64 72 6f   happens in 'dro
4e40: 70 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 23 20  p', using.    # 
4e50: 74 68 65 20 73 74 61 74 65 20 76 61 72 69 61 62  the state variab
4e60: 6c 65 20 27 6d 79 72 65 76 27 2c 20 27 6d 79 62  le 'myrev', 'myb
4e70: 72 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 27 6d  ranches', and 'm
4e80: 79 74 61 67 73 27 2e 20 57 68 61 74 20 77 65 0a  ytags'. What we.
4e90: 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 70 65      # have to pe
4ea0: 72 73 69 73 74 2c 20 70 65 72 66 6f 72 6d 65 64  rsist, performed
4eb0: 20 62 79 20 27 70 65 72 73 69 73 74 27 2c 20 77   by 'persist', w
4ec0: 65 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a 20  e know will be. 
4ed0: 20 20 20 23 20 72 65 61 63 68 61 62 6c 65 20 74     # reachable t
4ee0: 68 72 6f 75 67 68 20 74 68 65 20 72 65 76 69 73  hrough the revis
4ef0: 69 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e 20 27  ions listed in '
4f00: 6d 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 68 65  myroots' and the
4f10: 69 72 0a 20 20 20 20 23 20 63 68 69 6c 64 72 65  ir.    # childre
4f20: 6e 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a 0a  n and symbols...
4f30: 20 20 20 20 6d 65 74 68 6f 64 20 41 64 6a 75 73      method Adjus
4f40: 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74  tNonTrunkDefault
4f50: 42 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 74 7d  Branch {revlist}
4f60: 20 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b 24 6d   {..set stop [$m
4f70: 79 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23 20  yroot child] ;# 
4f80: 72 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 20  rev '1.2'...log 
4f90: 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 41 64  write 5 file "Ad
4fa0: 6a 75 73 74 69 6e 67 20 4e 54 44 42 20 63 6f 6e  justing NTDB con
4fb0: 74 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c  taining [nsp [ll
4fc0: 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d 20  ength $revlist] 
4fd0: 72 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 46  revision]"...# F
4fe0: 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20  rom cvs2svn the 
4ff0: 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e  following explan
5000: 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69  ation (with modi
5010: 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72  fications..# for
5020: 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a   our algorithm):
5030: 0a 0a 09 23 20 41 64 6a 75 73 74 20 74 68 65 20  ...# Adjust the 
5040: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
5050: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f  t branch revisio
5060: 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a  ns found in the.
5070: 09 23 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a 09  .# 'revlist'....
5080: 23 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 20 69  # 'myimported' i
5090: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  s a boolean flag
50a0: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
50b0: 68 65 72 20 74 68 69 73 20 66 69 6c 65 0a 09 23  her this file..#
50c0: 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65   appears to have
50d0: 20 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c 20   been imported, 
50e0: 77 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e 73  which also means
50f0: 20 74 68 61 74 0a 09 23 20 72 65 76 69 73 69 6f   that..# revisio
5100: 6e 20 31 2e 31 20 68 61 73 20 61 20 67 65 6e 65  n 1.1 has a gene
5110: 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67  rated log messag
5120: 65 20 74 68 61 74 20 6e 65 65 64 20 6e 6f 74 20  e that need not 
5130: 62 65 0a 09 23 20 70 72 65 73 65 72 76 65 64 2e  be..# preserved.
5140: 20 20 27 72 65 76 6c 69 73 74 27 20 69 73 20 61    'revlist' is a
5150: 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 20   list of object 
5160: 72 65 66 65 72 65 6e 63 65 73 20 66 6f 72 20 74  references for t
5170: 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20  he..# revisions 
5180: 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 64  that have been d
5190: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
51a0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
51b0: 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69  t..# branch revi
51c0: 73 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 20  sions....# Note 
51d0: 74 68 61 74 20 74 68 65 20 66 69 72 73 74 20 72  that the first r
51e0: 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 64  evision on the d
51f0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73  efault branch is
5200: 0a 09 23 20 68 61 6e 64 6c 65 64 20 73 74 72 61  ..# handled stra
5210: 6e 67 65 6c 79 20 62 79 20 43 56 53 2e 20 20 49  ngely by CVS.  I
5220: 66 20 61 20 66 69 6c 65 20 69 73 20 69 6d 70 6f  f a file is impo
5230: 72 74 65 64 20 28 61 73 20 6f 70 70 6f 73 65 64  rted (as opposed
5240: 0a 09 23 20 74 6f 20 62 65 69 6e 67 20 61 64 64  ..# to being add
5250: 65 64 29 2c 20 43 56 53 20 63 72 65 61 74 65 73  ed), CVS creates
5260: 20 61 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 2c   a 1.1 revision,
5270: 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 61 0a   then creates a.
5280: 09 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68  .# vendor branch
5290: 20 31 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e 20   1.1.1 based on 
52a0: 31 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 74 65  1.1, then create
52b0: 73 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20 72  s a 1.1.1.1..# r
52c0: 65 76 69 73 69 6f 6e 20 74 68 61 74 20 69 73 20  evision that is 
52d0: 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 68 65  identical to the
52e0: 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 69   1.1 revision (i
52f0: 2e 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c 74  .e., its..# delt
5300: 61 74 65 78 74 20 69 73 20 65 6d 70 74 79 29 2e  atext is empty).
5310: 20 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 61 67    The log messag
5320: 65 20 74 68 61 74 20 74 68 65 20 75 73 65 72 20  e that the user 
5330: 74 79 70 65 64 0a 09 23 20 77 68 65 6e 20 69 6d  typed..# when im
5340: 70 6f 72 74 69 6e 67 20 69 73 20 73 74 6f 72 65  porting is store
5350: 64 20 77 69 74 68 20 74 68 65 20 31 2e 31 2e 31  d with the 1.1.1
5360: 2e 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 54 68  .1 revision.  Th
5370: 65 20 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f  e 1.1..# revisio
5380: 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e  n always contain
5390: 73 20 61 20 73 74 61 6e 64 61 72 64 2c 20 67 65  s a standard, ge
53a0: 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73  nerated log mess
53b0: 61 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 61 6c  age,..# 'Initial
53c0: 20 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a 09   revision\n'....
53d0: 23 20 57 68 65 6e 20 77 65 20 64 65 74 65 63 74  # When we detect
53e0: 20 61 20 73 74 72 61 69 67 68 74 66 6f 72 77 61   a straightforwa
53f0: 72 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20 74  rd import like t
5400: 68 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 23 20  his, we want..# 
5410: 74 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 79 20  to handle it by 
5420: 64 65 6c 65 74 69 6e 67 20 74 68 65 20 31 2e 31  deleting the 1.1
5430: 20 72 65 76 69 73 69 6f 6e 20 28 77 68 69 63 68   revision (which
5440: 20 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e 74   doesn't..# cont
5450: 61 69 6e 20 61 6e 79 20 75 73 65 66 75 6c 20 69  ain any useful i
5460: 6e 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20  nformation) and 
5470: 6d 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20 69  making 1.1.1.1 i
5480: 6e 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70 65  nto an..# indepe
5490: 6e 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74 68  ndent root in th
54a0: 65 20 66 69 6c 65 27 73 20 64 65 70 65 6e 64 65  e file's depende
54b0: 6e 63 79 20 74 72 65 65 2e 20 20 49 6e 20 53 56  ncy tree.  In SV
54c0: 4e 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77 69  N,..# 1.1.1.1 wi
54d0: 6c 6c 20 62 65 20 61 64 64 65 64 20 64 69 72 65  ll be added dire
54e0: 63 74 6c 79 20 74 6f 20 74 68 65 20 76 65 6e 64  ctly to the vend
54f0: 6f 72 20 62 72 61 6e 63 68 20 77 69 74 68 20 69  or branch with i
5500: 74 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 63 6f  ts..# initial co
5510: 6e 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e 20  ntent.  Then in 
5520: 61 20 73 70 65 63 69 61 6c 20 27 70 6f 73 74 2d  a special 'post-
5530: 63 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23 20  commit', the..# 
5540: 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e  1.1.1.1 revision
5550: 20 69 73 20 63 6f 70 69 65 64 20 62 61 63 6b 20   is copied back 
5560: 74 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 66  to trunk....# If
5570: 20 74 68 65 20 75 73 65 72 20 69 6d 70 6f 72 74   the user import
5580: 73 20 61 67 61 69 6e 20 74 6f 20 74 68 65 20 73  s again to the s
5590: 61 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  ame vendor branc
55a0: 68 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 20 63  h, then CVS..# c
55b0: 72 65 61 74 65 73 20 72 65 76 69 73 69 6f 6e 73  reates revisions
55c0: 20 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 2e   1.1.1.2, 1.1.1.
55d0: 33 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 20 76  3, etc. on the v
55e0: 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23  endor branch,..#
55f0: 20 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e 74   *without* count
5600: 65 72 70 61 72 74 73 20 69 6e 20 74 72 75 6e 6b  erparts in trunk
5610: 20 28 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68   (even though th
5620: 65 73 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23  ese revisions..#
5630: 20 65 66 66 65 63 74 69 76 65 6c 79 20 70 6c 61   effectively pla
5640: 79 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 74 72  y the role of tr
5650: 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e 20  unk revisions). 
5660: 20 53 6f 20 61 66 74 65 72 20 77 65 20 61 64 64   So after we add
5670: 0a 09 23 20 73 75 63 68 20 72 65 76 69 73 69 6f  ..# such revisio
5680: 6e 73 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72  ns to the vendor
5690: 20 62 72 61 6e 63 68 2c 20 77 65 20 61 6c 73 6f   branch, we also
56a0: 20 63 6f 70 79 20 74 68 65 6d 20 62 61 63 6b 20   copy them back 
56b0: 74 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20 70  to..# trunk in p
56c0: 6f 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 23  ost-commits....#
56d0: 20 57 65 20 6d 61 72 6b 20 74 68 65 20 72 65 76   We mark the rev
56e0: 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20  isions found in 
56f0: 27 72 65 76 6c 69 73 74 27 20 61 73 20 64 65 66  'revlist' as def
5700: 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72  ault branch..# r
5710: 65 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f 2c  evisions.  Also,
5720: 20 69 66 20 74 68 65 20 72 6f 6f 74 20 72 65 76   if the root rev
5730: 69 73 69 6f 6e 20 68 61 73 20 61 20 70 72 69 6d  ision has a prim
5740: 61 72 79 20 63 68 69 6c 64 0a 09 23 20 77 65 20  ary child..# we 
5750: 73 65 74 20 74 68 61 74 20 72 65 76 69 73 69 6f  set that revisio
5760: 6e 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20 74  n to depend on t
5770: 68 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 6e  he last non-trun
5780: 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61  k default..# bra
5790: 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 61 6e 64  nch revision and
57a0: 20 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 73 74   possibly adjust
57b0: 20 69 74 73 20 74 79 70 65 20 61 63 63 6f 72 64   its type accord
57c0: 69 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69 72  ingly....set fir
57d0: 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c  st [lindex $revl
57e0: 69 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 69  ist 0]...log wri
57f0: 74 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 66 69  te 6 file "<[$fi
5800: 72 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78 70  rst revnr]> [exp
5810: 72 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 3f  r {$myimported ?
5820: 20 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 22 6e   "imported" : "n
5830: 6f 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c 20  ot imported"}], 
5840: 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f  [$first operatio
5850: 6e 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69 72  n], [expr {[$fir
5860: 73 74 20 68 61 73 74 65 78 74 5d 20 3f 20 22 68  st hastext] ? "h
5870: 61 73 20 74 65 78 74 22 20 3a 20 22 6e 6f 20 74  as text" : "no t
5880: 65 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 6d  ext"}]"...if {$m
5890: 79 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 20 20  yimported &&..  
58a0: 20 20 5b 24 66 69 72 73 74 20 72 65 76 6e 72 5d    [$first revnr]
58b0: 20 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 26 26   eq "1.1.1.1" &&
58c0: 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20 6f 70  ..    [$first op
58d0: 65 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 68 61  eration] eq "cha
58e0: 6e 67 65 22 20 26 26 0a 09 20 20 20 20 21 5b 24  nge" &&..    ![$
58f0: 66 69 72 73 74 20 68 61 73 74 65 78 74 5d 7d 20  first hastext]} 
5900: 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 31  {...    set rev1
5910: 31 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74  1 [$first parent
5920: 5d 20 3b 20 23 20 41 73 73 65 72 74 3a 20 53 68  ] ; # Assert: Sh
5930: 6f 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e 0a  ould be myroot..
5940: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33  .    log write 3
5950: 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20   file "Removing 
5960: 69 72 72 65 6c 65 76 61 6e 74 20 72 65 76 69 73  irrelevant revis
5970: 69 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 76 6e  ion [$rev11 revn
5980: 72 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 74 20  r]"...    # Cut 
5990: 6f 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 72 6f  out the old myro
59a0: 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 20  ot revision.... 
59b0: 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f     ldelete myroo
59c0: 74 73 20 24 72 65 76 31 31 20 3b 20 23 20 4e 6f  ts $rev11 ; # No
59d0: 74 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f 6e  t a root any lon
59e0: 67 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 72 73  ger....    $firs
59f0: 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 20  t cutfromparent 
5a00: 3b 20 23 20 53 65 76 65 72 20 72 65 76 69 73 69  ; # Sever revisi
5a10: 6f 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 72  on from parent r
5a20: 65 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69 66  evision...    if
5a30: 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b   {$stop ne ""} {
5a40: 0a 09 09 24 73 74 6f 70 20 63 75 74 66 72 6f 6d  ...$stop cutfrom
5a50: 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64  parent...lappend
5a60: 20 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 20 3b   myroots $stop ;
5a70: 20 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66 74   # New root, aft
5a80: 65 72 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68  er vendor branch
5a90: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20  ..    }...    # 
5aa0: 43 75 74 20 6f 75 74 20 74 68 65 20 76 65 6e 64  Cut out the vend
5ab0: 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c  or branch symbol
5ac0: 0a 0a 09 20 20 20 20 73 65 74 20 76 65 6e 64 6f  ...    set vendo
5ad0: 72 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74  r [$first parent
5ae0: 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 66 20  branch]..    if 
5af0: 7b 24 76 65 6e 64 6f 72 20 65 71 20 22 22 7d 20  {$vendor eq ""} 
5b00: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e  { trouble intern
5b10: 61 6c 20 22 46 69 72 73 74 20 4e 54 44 42 20 72  al "First NTDB r
5b20: 65 76 69 73 69 6f 6e 20 68 61 73 20 6e 6f 20 62  evision has no b
5b30: 72 61 6e 63 68 22 20 7d 0a 09 20 20 20 20 69 66  ranch" }..    if
5b40: 20 7b 5b 24 76 65 6e 64 6f 72 20 70 61 72 65 6e   {[$vendor paren
5b50: 74 5d 20 65 71 20 24 72 65 76 31 31 7d 20 7b 0a  t] eq $rev11} {.
5b60: 09 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 62  ..$rev11 removeb
5b70: 72 61 6e 63 68 20 20 20 20 20 20 20 20 24 76 65  ranch        $ve
5b80: 6e 64 6f 72 0a 09 09 24 72 65 76 31 31 20 72 65  ndor...$rev11 re
5b90: 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63  movechildonbranc
5ba0: 68 20 24 66 69 72 73 74 0a 09 09 24 76 65 6e 64  h $first...$vend
5bb0: 6f 72 20 63 75 74 63 68 69 6c 64 0a 09 09 24 66  or cutchild...$f
5bc0: 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65  irst cutfrompare
5bd0: 6e 74 62 72 61 6e 63 68 0a 09 09 6c 61 70 70 65  ntbranch...lappe
5be0: 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73  nd myroots $firs
5bf0: 74 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23  t..    }...    #
5c00: 20 43 68 61 6e 67 65 20 74 68 65 20 74 79 70 65   Change the type
5c10: 20 6f 66 20 66 69 72 73 74 20 28 74 79 70 69 63   of first (typic
5c20: 61 6c 6c 79 20 66 72 6f 6d 20 43 68 61 6e 67 65  ally from Change
5c30: 20 74 6f 20 41 64 64 29 3a 0a 09 20 20 20 20 24   to Add):..    $
5c40: 66 69 72 73 74 20 72 65 74 79 70 65 20 61 64 64  first retype add
5c50: 0a 0a 09 20 20 20 20 23 20 4d 6f 76 65 20 61 6e  ...    # Move an
5c60: 79 20 74 61 67 73 20 61 6e 64 20 62 72 61 6e 63  y tags and branc
5c70: 68 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6c 64  hes from the old
5c80: 20 74 6f 20 74 68 65 20 6e 65 77 20 72 6f 6f 74   to the new root
5c90: 2e 0a 09 20 20 20 20 24 72 65 76 31 31 20 6d 6f  ...    $rev11 mo
5ca0: 76 65 73 79 6d 62 6f 6c 73 74 6f 20 24 66 69 72  vesymbolsto $fir
5cb0: 73 74 0a 09 7d 0a 0a 09 23 20 4d 61 72 6b 20 61  st..}...# Mark a
5cc0: 6c 6c 20 74 68 65 20 73 70 65 63 69 61 6c 20 72  ll the special r
5cd0: 65 76 69 73 69 6f 6e 73 20 61 73 20 73 75 63 68  evisions as such
5ce0: 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 72  ..foreach rev $r
5cf0: 65 76 6c 69 73 74 20 7b 0a 09 20 20 20 20 6c 6f  evlist {..    lo
5d00: 67 20 77 72 69 74 65 20 33 20 66 69 6c 65 20 22  g write 3 file "
5d10: 52 65 76 69 73 69 6f 6e 20 6f 6e 20 64 65 66 61  Revision on defa
5d20: 75 6c 74 20 62 72 61 6e 63 68 3a 20 5b 24 72 65  ult branch: [$re
5d30: 76 20 72 65 76 6e 72 5d 22 0a 09 20 20 20 20 24  v revnr]"..    $
5d40: 72 65 76 20 73 65 74 6f 6e 64 65 66 61 75 6c 74  rev setondefault
5d50: 62 72 61 6e 63 68 20 31 0a 09 7d 0a 0a 09 69 66  branch 1..}...if
5d60: 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b   {$stop ne ""} {
5d70: 0a 09 20 20 20 20 23 20 52 65 76 69 73 69 6f 6e  ..    # Revision
5d80: 20 31 2e 32 20 6c 6f 67 69 63 61 6c 6c 79 20 66   1.2 logically f
5d90: 6f 6c 6c 6f 77 73 20 74 68 65 20 69 6d 70 6f 72  ollows the impor
5da0: 74 65 64 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09  ted revisions,..
5db0: 20 20 20 20 23 20 6e 6f 74 20 31 2e 31 2e 20 20      # not 1.1.  
5dc0: 41 63 63 6f 72 64 69 6e 67 6c 79 2c 20 63 6f 6e  Accordingly, con
5dd0: 6e 65 63 74 20 69 74 20 74 6f 20 74 68 65 20 6c  nect it to the l
5de0: 61 73 74 20 4e 54 44 42 52 20 61 6e 64 0a 09 20  ast NTDBR and.. 
5df0: 20 20 20 23 20 70 6f 73 73 69 62 6c 79 20 63 68     # possibly ch
5e00: 61 6e 67 65 20 69 74 73 20 74 79 70 65 2e 0a 0a  ange its type...
5e10: 09 20 20 20 20 73 65 74 20 6c 61 73 74 20 5b 6c  .    set last [l
5e20: 69 6e 64 65 78 20 24 72 65 76 6c 69 73 74 20 65  index $revlist e
5e30: 6e 64 5d 0a 09 20 20 20 20 24 73 74 6f 70 20 73  nd]..    $stop s
5e40: 65 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70  etdefaultbranchp
5e50: 61 72 65 6e 74 20 24 6c 61 73 74 20 3b 20 23 20  arent $last ; # 
5e60: 52 65 74 79 70 65 73 20 74 68 65 20 72 65 76 69  Retypes the revi
5e70: 73 69 6f 6e 20 74 6f 6f 2e 0a 09 20 20 20 20 24  sion too...    $
5e80: 6c 61 73 74 20 73 65 74 64 65 66 61 75 6c 74 62  last setdefaultb
5e90: 72 61 6e 63 68 63 68 69 6c 64 20 20 24 73 74 6f  ranchchild  $sto
5ea0: 70 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  p..}..return.   
5eb0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 43   }..    method C
5ec0: 68 65 63 6b 4c 4f 44 73 20 7b 7d 20 7b 0a 09 66  heckLODs {} {..f
5ed0: 6f 72 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 68  oreach {_ branch
5ee0: 7d 20 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79  }  [array get my
5ef0: 62 72 61 6e 63 68 65 73 5d 20 7b 20 24 62 72 61  branches] { $bra
5f00: 6e 63 68 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09  nch checklod }..
5f10: 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69  foreach {_ tagli
5f20: 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d  st} [array get m
5f30: 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f  ytags] {..    fo
5f40: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69  reach tag $tagli
5f50: 73 74 20 7b 20 24 74 61 67 20 63 68 65 63 6b 6c  st { $tag checkl
5f60: 6f 64 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  od }..}..return.
5f70: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
5f80: 64 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 61  d RemoveIrreleva
5f90: 6e 74 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b  ntDeletions {} {
5fa0: 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e  ..# From cvs2svn
5fb0: 3a 20 49 66 20 61 20 66 69 6c 65 20 69 73 20 61  : If a file is a
5fc0: 64 64 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 68  dded on a branch
5fd0: 2c 20 74 68 65 6e 20 61 20 74 72 75 6e 6b 0a 09  , then a trunk..
5fe0: 23 20 72 65 76 69 73 69 6f 6e 20 69 73 20 61 64  # revision is ad
5ff0: 64 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ded at the same 
6000: 74 69 6d 65 20 69 6e 20 74 68 65 20 27 44 65 61  time in the 'Dea
6010: 64 27 20 73 74 61 74 65 2e 0a 09 23 20 54 68 69  d' state...# Thi
6020: 73 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e  s revision doesn
6030: 27 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75  't do anything u
6040: 73 65 66 75 6c 2c 20 73 6f 20 64 65 6c 65 74 65  seful, so delete
6050: 20 69 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72   it....foreach r
6060: 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a 09  oot $myroots {..
6070: 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 69      if {[$root i
6080: 73 6e 65 65 64 65 64 5d 7d 20 63 6f 6e 74 69 6e  sneeded]} contin
6090: 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  ue..    log writ
60a0: 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69  e 2 file "Removi
60b0: 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20 64  ng unnecessary d
60c0: 65 61 64 20 72 65 76 69 73 69 6f 6e 20 5b 24 72  ead revision [$r
60d0: 6f 6f 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20  oot revnr]"...  
60e0: 20 20 23 20 52 65 6d 6f 76 65 20 61 73 20 72 6f    # Remove as ro
60f0: 6f 74 2c 20 6d 61 6b 65 20 69 74 73 20 63 68 69  ot, make its chi
6100: 6c 64 20 6e 65 77 20 72 6f 6f 74 20 61 66 74 65  ld new root afte
6110: 72 0a 09 20 20 20 20 23 20 64 69 73 63 6f 6e 6e  r..    # disconn
6120: 65 63 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 74  ecting it from t
6130: 68 65 20 72 65 76 69 73 69 6f 6e 20 6a 75 73 74  he revision just
6140: 20 67 6f 69 6e 67 20 61 77 61 79 2e 0a 0a 09 20   going away.... 
6150: 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f     ldelete myroo
6160: 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 69 66  ts $root..    if
6170: 20 7b 5b 24 72 6f 6f 74 20 68 61 73 63 68 69 6c   {[$root haschil
6180: 64 5d 7d 20 7b 0a 09 09 73 65 74 20 63 68 69 6c  d]} {...set chil
6190: 64 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  d [$root child].
61a0: 09 09 24 63 68 69 6c 64 20 63 75 74 66 72 6f 6d  ..$child cutfrom
61b0: 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64  parent...lappend
61c0: 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a   myroots $child.
61d0: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43  .    }...    # C
61e0: 75 74 20 6f 75 74 20 74 68 65 20 62 72 61 6e 63  ut out the branc
61f0: 68 65 73 20 73 70 61 77 6e 65 64 20 62 79 20 74  hes spawned by t
6200: 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 62  he revision to b
6210: 65 0a 09 20 20 20 20 23 20 64 65 6c 65 74 65 64  e..    # deleted
6220: 2e 20 49 66 20 74 68 65 20 62 72 61 6e 63 68 20  . If the branch 
6230: 68 61 73 20 72 65 76 69 73 69 6f 6e 73 20 74 68  has revisions th
6240: 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64  ey should alread
6250: 79 0a 09 20 20 20 20 23 20 75 73 65 20 6f 70 65  y..    # use ope
6260: 72 61 74 69 6f 6e 20 27 61 64 64 27 2c 20 6e 6f  ration 'add', no
6270: 20 6e 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20   need to change 
6280: 74 68 61 74 2e 20 54 68 65 20 66 69 72 73 74 0a  that. The first.
6290: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20  .    # revision 
62a0: 6f 6e 20 65 61 63 68 20 62 72 61 6e 63 68 20 62  on each branch b
62b0: 65 63 6f 6d 65 73 20 61 20 6e 65 77 20 61 6e 64  ecomes a new and
62c0: 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 0a 09 20   disconnected.. 
62d0: 20 20 20 23 20 72 6f 6f 74 2e 0a 0a 09 20 20 20     # root....   
62e0: 20 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20   foreach branch 
62f0: 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d  [$root branches]
6300: 20 7b 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e   {...if {![$bran
6310: 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f  ch haschild]} co
6320: 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 66 69 72  ntinue...set fir
6330: 73 74 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c  st [$branch chil
6340: 64 5d 0a 09 09 24 66 69 72 73 74 20 63 75 74 66  d]...$first cutf
6350: 72 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 0a  romparentbranch.
6360: 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d  ..$first cutfrom
6370: 70 61 72 65 6e 74 0a 09 09 24 62 72 61 6e 63 68  parent...$branch
6380: 20 63 75 74 63 68 69 6c 64 0a 09 09 6c 61 70 70   cutchild...lapp
6390: 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 72  end myroots $fir
63a0: 73 74 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 24  st..    }..    $
63b0: 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72  root removeallbr
63c0: 61 6e 63 68 65 73 0a 0a 09 20 20 20 20 23 20 54  anches...    # T
63d0: 61 67 67 69 6e 67 20 61 20 64 65 61 64 20 72 65  agging a dead re
63e0: 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64  vision doesn't d
63f0: 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73 6f 20 72  o anything, so r
6400: 65 6d 6f 76 65 0a 09 20 20 20 20 23 20 61 6e 79  emove..    # any
6410: 20 74 61 67 73 20 74 68 61 74 20 77 65 72 65 20   tags that were 
6420: 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 20 20 20  set on it....   
6430: 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c   $root removeall
6440: 74 61 67 73 0a 0a 09 20 20 20 20 23 20 54 68 69  tags...    # Thi
6450: 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61 70 70 65  s can only happe
6460: 6e 20 6f 6e 63 65 20 70 65 72 20 66 69 6c 65 2c  n once per file,
6470: 20 61 6e 64 20 77 65 20 6d 69 67 68 74 20 68 61   and we might ha
6480: 76 65 0a 09 20 20 20 20 23 20 6a 75 73 74 20 63  ve..    # just c
6490: 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74 73 2c 20  hanged myroots, 
64a0: 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f 6f 70 0a  so end the loop.
64b0: 09 20 20 20 20 62 72 65 61 6b 0a 09 7d 0a 09 72  .    break..}..r
64c0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
64d0: 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 6e   method RemoveIn
64e0: 69 74 69 61 6c 42 72 61 6e 63 68 44 65 6c 65 74  itialBranchDelet
64f0: 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f  ions {} {..# Fro
6500: 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74 68  m cvs2svn: If th
6510: 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e  e first revision
6520: 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 69 73 20   on a branch is 
6530: 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73 73 61 72  an..# unnecessar
6540: 79 20 64 65 6c 65 74 65 2c 20 72 65 6d 6f 76 65  y delete, remove
6550: 20 69 74 2e 0a 09 23 0a 09 23 20 49 66 20 61 20   it...#..# If a 
6560: 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e  file is added on
6570: 20 61 20 62 72 61 6e 63 68 20 28 77 68 65 74 68   a branch (wheth
6580: 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 61 6c 72  er or not it alr
6590: 65 61 64 79 0a 09 23 20 65 78 69 73 74 65 64 20  eady..# existed 
65a0: 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68 65 6e 20  on trunk), then 
65b0: 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  new versions of 
65c0: 43 56 53 20 61 64 64 20 61 20 66 69 72 73 74 0a  CVS add a first.
65d0: 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 69  .# branch revisi
65e0: 6f 6e 20 69 6e 20 74 68 65 20 27 64 65 61 64 27  on in the 'dead'
65f0: 20 73 74 61 74 65 20 28 74 6f 20 69 6e 64 69 63   state (to indic
6600: 61 74 65 20 74 68 61 74 20 74 68 65 0a 09 23 20  ate that the..# 
6610: 66 69 6c 65 20 64 69 64 20 6e 6f 74 20 65 78 69  file did not exi
6620: 73 74 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68  st on the branch
6630: 20 77 68 65 6e 20 74 68 65 20 62 72 61 6e 63 68   when the branch
6640: 20 77 61 73 0a 09 23 20 63 72 65 61 74 65 64 29   was..# created)
6650: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65   followed by the
6660: 20 73 65 63 6f 6e 64 20 62 72 61 6e 63 68 20 72   second branch r
6670: 65 76 69 73 69 6f 6e 2c 20 77 68 69 63 68 20 69  evision, which i
6680: 73 20 61 6e 0a 09 23 20 61 64 64 2e 20 20 57 68  s an..# add.  Wh
6690: 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74 65 72 20  en we encounter 
66a0: 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e 2c 20  this situation, 
66b0: 77 65 20 73 65 76 65 72 20 74 68 65 20 62 72 61  we sever the bra
66c0: 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74 72 75 6e  nch..# from trun
66d0: 6b 20 61 6e 64 20 64 65 6c 65 74 65 20 74 68 65  k and delete the
66e0: 20 66 69 72 73 74 20 62 72 61 6e 63 68 20 72 65   first branch re
66f0: 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 74 20 74  vision....# At t
6700: 68 69 73 20 70 6f 69 6e 74 20 77 65 20 6d 61 79  his point we may
6710: 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 6d 75   have already mu
6720: 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20 69 6e 20  ltiple roots in 
6730: 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77 65 20 68  myroots,..# we h
6740: 61 76 65 20 74 6f 20 70 72 6f 63 65 73 73 20 74  ave to process t
6750: 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72 65 61  hem all....forea
6760: 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c  ch root [$self L
6770: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e  inesOfDevelopmen
6780: 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24  t] {..    if {[$
6790: 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 62 72 61  root isneededbra
67a0: 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e 75  nchdel]} continu
67b0: 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  e..    log write
67c0: 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e   2 file "Removin
67d0: 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 6e  g unnecessary in
67e0: 69 74 69 61 6c 20 62 72 61 6e 63 68 20 64 65 6c  itial branch del
67f0: 65 74 65 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72  ete [$root revnr
6800: 5d 22 0a 0a 09 20 20 20 20 73 65 74 20 62 72 61  ]"...    set bra
6810: 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e  nch [$root paren
6820: 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 73 65  tbranch]..    se
6830: 74 20 70 61 72 65 6e 74 20 5b 24 72 6f 6f 74 20  t parent [$root 
6840: 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 73 65 74  parent]..    set
6850: 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f 74 20 63   child  [$root c
6860: 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 65 6c  hild]...    ldel
6870: 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f  ete myroots $roo
6880: 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d  t..    lappend m
6890: 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 0a 09  yroots $child...
68a0: 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 63      $branch cutc
68b0: 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64  hild..    $child
68c0: 20 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a    cutfromparent.
68d0: 0a 09 20 20 20 20 24 70 61 72 65 6e 74 20 72 65  ..    $parent re
68e0: 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 20 20 20  movebranch      
68f0: 20 20 24 62 72 61 6e 63 68 0a 09 20 20 20 20 24    $branch..    $
6900: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69  parent removechi
6910: 6c 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74  ldonbranch $root
6920: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
6930: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 4c 69  }..    method Li
6940: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74  nesOfDevelopment
6950: 20 7b 7d 20 7b 0a 09 23 20 44 65 74 65 72 6d 69   {} {..# Determi
6960: 6e 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20  ne all lines of 
6970: 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20  development for 
6980: 74 68 65 20 66 69 6c 65 2e 20 54 68 69 73 20 61  the file. This a
6990: 72 65 0a 09 23 20 74 68 65 20 6b 6e 6f 77 6e 20  re..# the known 
69a0: 72 6f 6f 74 73 2c 20 61 6e 64 20 74 68 65 20 72  roots, and the r
69b0: 6f 6f 74 20 6f 66 20 61 6c 6c 20 62 72 61 6e 63  oot of all branc
69c0: 68 65 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65  hes found on the
69d0: 0a 09 23 20 6c 69 6e 65 20 6f 66 20 70 72 69 6d  ..# line of prim
69e0: 61 72 79 20 63 68 69 6c 64 72 65 6e 2e 0a 0a 09  ary children....
69f0: 73 65 74 20 6c 6f 64 72 6f 6f 74 73 20 7b 7d 0a  set lodroots {}.
6a00: 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d  .foreach root $m
6a10: 79 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 24 73  yroots {..    $s
6a20: 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64 4c  elf AddBranchedL
6a30: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e  inesOfDevelopmen
6a40: 74 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74  t lodroots $root
6a50: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 6f  ..    lappend lo
6a60: 64 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 7d 0a  droots $root..}.
6a70: 09 72 65 74 75 72 6e 20 24 6c 6f 64 72 6f 6f 74  .return $lodroot
6a80: 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  s.    }..    met
6a90: 68 6f 64 20 41 64 64 42 72 61 6e 63 68 65 64 4c  hod AddBranchedL
6aa0: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e  inesOfDevelopmen
6ab0: 74 20 7b 6c 76 20 72 6f 6f 74 7d 20 7b 0a 09 75  t {lv root} {..u
6ac0: 70 76 61 72 20 31 20 24 6c 76 20 6c 6f 64 72 6f  pvar 1 $lv lodro
6ad0: 6f 74 73 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f  ots..while {$roo
6ae0: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20  t ne ""} {..    
6af0: 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b  foreach branch [
6b00: 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20  $root branches] 
6b10: 7b 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63  {...if {![$branc
6b20: 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e  h haschild]} con
6b30: 74 69 6e 75 65 0a 09 09 73 65 74 20 63 68 69 6c  tinue...set chil
6b40: 64 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64  d [$branch child
6b50: 5d 0a 09 09 23 20 52 65 63 75 72 73 65 20 69 6e  ]...# Recurse in
6b60: 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20 66 6f  to the branch fo
6b70: 72 20 64 65 65 70 65 72 20 62 72 61 6e 63 68 65  r deeper branche
6b80: 73 2e 0a 09 09 24 73 65 6c 66 20 41 64 64 42 72  s....$self AddBr
6b90: 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 76  anchedLinesOfDev
6ba0: 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f 74  elopment lodroot
6bb0: 73 20 24 63 68 69 6c 64 0a 09 09 6c 61 70 70 65  s $child...lappe
6bc0: 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69  nd lodroots $chi
6bd0: 6c 64 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73  ld..    }..    s
6be0: 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63  et root [$root c
6bf0: 68 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e  hild]..}..return
6c00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
6c10: 6f 64 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72 75  od ExcludeNonTru
6c20: 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 7b 7d  nkInformation {}
6c30: 20 7b 0a 09 23 20 52 65 6d 6f 76 65 20 61 6c 6c   {..# Remove all
6c40: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 62 72 61 6e 63   non-trunk branc
6c50: 68 65 73 2c 20 72 65 76 69 73 69 6f 6e 73 2c 20  hes, revisions, 
6c60: 61 6e 64 20 74 61 67 73 2e 20 57 65 20 64 6f 0a  and tags. We do.
6c70: 09 23 20 6b 65 65 70 20 74 68 65 20 74 61 67 73  .# keep the tags
6c80: 20 77 68 69 63 68 20 61 72 65 20 6f 6e 20 74 68   which are on th
6c90: 65 20 74 72 75 6e 6b 2e 0a 0a 09 73 65 74 20 6e  e trunk....set n
6ca0: 74 64 62 72 6f 6f 74 20 22 22 0a 09 66 6f 72 65  tdbroot ""..fore
6cb0: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20  ach root [$self 
6cc0: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
6cd0: 6e 74 5d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 74  nt] {..    # Not
6ce0: 65 3a 20 48 65 72 65 20 74 68 65 20 6f 72 64 65  e: Here the orde
6cf0: 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 73 20 69  r of the roots i
6d00: 73 20 69 6d 70 6f 72 74 61 6e 74 2c 0a 09 20 20  s important,..  
6d10: 20 20 23 20 69 2e 65 2e 20 74 68 61 74 20 77 65    # i.e. that we
6d20: 20 67 65 74 20 74 68 65 6d 20 69 6e 20 64 65 70   get them in dep
6d30: 74 68 20 66 69 72 73 74 20 6f 72 64 65 72 2e 20  th first order. 
6d40: 54 68 69 73 20 65 6e 73 75 72 65 73 0a 09 20 20  This ensures..  
6d50: 20 20 23 20 74 68 61 74 20 74 68 65 20 72 65 6d    # that the rem
6d60: 6f 76 61 6c 20 6f 66 20 61 20 62 72 61 6e 63 68  oval of a branch
6d70: 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 61 66   happens only af
6d80: 74 65 72 20 74 68 65 0a 09 20 20 20 20 23 20 62  ter the..    # b
6d90: 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20  ranches spawned 
6da0: 66 72 6f 6d 20 69 74 20 77 65 72 65 20 72 65 6d  from it were rem
6db0: 6f 76 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20  oved. Otherwise 
6dc0: 74 68 65 0a 09 20 20 20 20 23 20 73 79 73 74 65  the..    # syste
6dd0: 6d 20 6d 69 67 68 74 20 74 72 79 20 74 6f 20 61  m might try to a
6de0: 63 63 65 73 73 20 64 65 6c 65 74 65 64 20 6f 62  ccess deleted ob
6df0: 6a 65 63 74 73 2e 0a 0a 09 20 20 20 20 23 20 44  jects....    # D
6e00: 6f 20 6e 6f 74 20 65 78 63 6c 75 64 65 20 74 68  o not exclude th
6e10: 65 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 69 66  e trunk...    if
6e20: 20 7b 5b 5b 24 72 6f 6f 74 20 6c 6f 64 5d 20 69   {[[$root lod] i
6e30: 73 74 72 75 6e 6b 5d 7d 20 63 6f 6e 74 69 6e 75  strunk]} continu
6e40: 65 0a 09 20 20 20 20 24 73 65 6c 66 20 45 78 63  e..    $self Exc
6e50: 6c 75 64 65 42 72 61 6e 63 68 20 24 72 6f 6f 74  ludeBranch $root
6e60: 20 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 0a 09 69   ntdbroot..}...i
6e70: 66 20 7b 24 6e 74 64 62 72 6f 6f 74 20 6e 65 20  f {$ntdbroot ne 
6e80: 22 22 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66  ""} {..    $self
6e90: 20 47 72 61 66 74 4e 54 44 42 32 54 72 75 6e 6b   GraftNTDB2Trunk
6ea0: 20 24 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 09 72   $ntdbroot..}..r
6eb0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
6ec0: 20 6d 65 74 68 6f 64 20 45 78 63 6c 75 64 65 42   method ExcludeB
6ed0: 72 61 6e 63 68 20 7b 72 6f 6f 74 20 6e 76 7d 20  ranch {root nv} 
6ee0: 7b 0a 09 23 20 45 78 63 6c 75 64 65 20 74 68 65  {..# Exclude the
6ef0: 20 62 72 61 6e 63 68 2f 6c 6f 64 20 73 74 61 72   branch/lod star
6f00: 74 69 6e 67 20 61 74 20 72 6f 6f 74 2c 20 61 20  ting at root, a 
6f10: 72 65 76 69 73 69 6f 6e 2e 0a 09 23 0a 09 23 20  revision...#..# 
6f20: 49 66 20 74 68 65 20 4c 4f 44 20 73 74 61 72 74  If the LOD start
6f30: 73 20 77 69 74 68 20 6e 6f 6e 2d 74 72 75 6e 6b  s with non-trunk
6f40: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
6f50: 72 65 76 69 73 69 6f 6e 73 2c 0a 09 23 20 77 65  revisions,..# we
6f60: 20 6c 65 61 76 65 20 74 68 65 6d 20 69 6e 20 70   leave them in p
6f70: 6c 61 63 65 20 61 6e 64 20 64 6f 20 6e 6f 74 20  lace and do not 
6f80: 64 65 6c 65 74 65 20 74 68 65 20 62 72 61 6e 63  delete the branc
6f90: 68 2e 20 49 6e 20 74 68 61 74 0a 09 23 20 63 61  h. In that..# ca
6fa0: 73 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 73  se the command s
6fb0: 65 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65  ets the variable
6fc0: 20 69 6e 20 4e 56 20 73 6f 20 74 68 61 74 20 77   in NV so that w
6fd0: 65 20 63 61 6e 0a 09 23 20 6c 61 74 65 72 20 72  e can..# later r
6fe0: 65 77 6f 72 6b 20 74 68 65 73 65 20 72 65 76 69  ework these revi
6ff0: 73 6f 6e 73 20 74 6f 20 62 65 20 70 75 72 65 6c  sons to be purel
7000: 79 20 74 72 75 6e 6b 2e 0a 0a 09 69 66 20 7b 5b  y trunk....if {[
7010: 24 72 6f 6f 74 20 69 73 6f 6e 64 65 66 61 75 6c  $root isondefaul
7020: 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 20 20 20  tbranch]} {..   
7030: 20 23 20 48 61 6e 64 6c 69 6e 67 20 61 20 4e 54   # Handling a NT
7040: 44 42 2e 20 54 68 69 73 20 62 72 61 6e 63 68 20  DB. This branch 
7050: 6d 61 79 20 63 6f 6e 73 69 73 74 73 20 6e 6f 74  may consists not
7060: 20 6f 6e 6c 79 20 6f 66 0a 09 20 20 20 20 23 20   only of..    # 
7070: 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 73 2c 20  NTDB revisions, 
7080: 62 75 74 20 61 6c 73 6f 20 73 6f 6d 65 20 6e 6f  but also some no
7090: 6e 2d 4e 54 44 42 2e 20 54 68 65 20 6c 61 74 74  n-NTDB. The latt
70a0: 65 72 20 61 72 65 0a 09 20 20 20 20 23 20 74 72  er are..    # tr
70b0: 75 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63 68 20  uly on a branch 
70c0: 61 6e 64 20 68 61 76 65 20 74 6f 20 62 65 20 65  and have to be e
70d0: 78 63 6c 75 64 65 64 2e 20 54 68 65 20 66 6f 6c  xcluded. The fol
70e0: 6c 6f 77 69 6e 67 0a 09 20 20 20 20 23 20 6c 6f  lowing..    # lo
70f0: 6f 70 20 64 65 74 65 72 6d 69 6e 65 73 20 69 66  op determines if
7100: 20 74 68 65 72 65 20 61 72 65 20 73 75 63 68 20   there are such 
7110: 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 20 20  revisions....   
7120: 20 75 70 76 61 72 20 31 20 24 6e 76 20 6e 74 64   upvar 1 $nv ntd
7130: 62 72 6f 6f 74 0a 09 20 20 20 20 73 65 74 20 6e  broot..    set n
7140: 74 64 62 72 6f 6f 74 20 24 72 6f 6f 74 0a 09 20  tdbroot $root.. 
7150: 20 20 20 24 72 6f 6f 74 20 63 75 74 66 72 6f 6d     $root cutfrom
7160: 70 61 72 65 6e 74 62 72 61 6e 63 68 0a 0a 09 20  parentbranch... 
7170: 20 20 20 73 65 74 20 72 65 76 20 24 72 6f 6f 74     set rev $root
7180: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65  ..    while {$re
7190: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 24 72 65  v ne ""} {...$re
71a0: 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63  v removeallbranc
71b0: 68 65 73 0a 09 09 23 20 53 65 65 20 6e 6f 74 65  hes...# See note
71c0: 20 5b 78 5d 2e 0a 0a 09 09 69 66 20 7b 5b 24 72   [x].....if {[$r
71d0: 65 76 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72  ev isondefaultbr
71e0: 61 6e 63 68 5d 7d 20 7b 0a 09 09 20 20 20 20 73  anch]} {...    s
71f0: 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69  et rev [$rev chi
7200: 6c 64 5d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09  ld]...} else {..
7210: 09 20 20 20 20 62 72 65 61 6b 0a 09 09 7d 0a 09  .    break...}..
7220: 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 72 65      }...    # re
7230: 76 20 6e 6f 77 20 63 6f 6e 74 61 69 6e 73 20 74  v now contains t
7240: 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 54 44  he first non-NTD
7250: 42 20 72 65 76 69 73 69 6f 6e 20 61 66 74 65 72  B revision after
7260: 20 74 68 65 0a 09 20 20 20 20 23 20 4e 54 44 42   the..    # NTDB
7270: 2c 20 6f 72 20 69 73 20 65 6d 70 74 79 20 69 66  , or is empty if
7280: 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63   there is no suc
7290: 68 2e 20 49 66 20 77 65 20 68 61 76 65 20 73 6f  h. If we have so
72a0: 6d 65 0a 09 20 20 20 20 23 20 74 68 65 79 20 68  me..    # they h
72b0: 61 76 65 20 74 6f 20 72 65 6d 6f 76 65 64 2e 0a  ave to removed..
72c0: 0a 09 20 20 20 20 69 66 20 7b 24 72 65 76 20 6e  ..    if {$rev n
72d0: 65 20 22 22 7d 20 20 7b 0a 09 09 73 65 74 20 6c  e ""}  {...set l
72e0: 61 73 74 6e 74 64 62 20 5b 24 72 65 76 20 70 61  astntdb [$rev pa
72f0: 72 65 6e 74 5d 0a 09 09 24 6c 61 73 74 6e 74 64  rent]...$lastntd
7300: 62 20 63 75 74 66 72 6f 6d 63 68 69 6c 64 0a 09  b cutfromchild..
7310: 09 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20  .while {$rev ne 
7320: 22 22 7d 20 7b 0a 09 09 20 20 20 20 24 72 65 76  ""} {...    $rev
7330: 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09   removealltags..
7340: 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76 65  .    $rev remove
7350: 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09 20 20  allbranches...  
7360: 20 20 23 20 4e 6f 74 65 20 5b 78 5d 3a 20 57 65    # Note [x]: We
7370: 20 6d 61 79 20 73 74 69 6c 6c 20 68 61 76 65 20   may still have 
7380: 68 61 64 20 62 72 61 6e 63 68 65 73 20 6f 6e 20  had branches on 
7390: 74 68 65 0a 09 09 20 20 20 20 23 20 72 65 76 69  the...    # revi
73a0: 73 69 6f 6e 2e 20 42 72 61 6e 63 68 65 73 20 77  sion. Branches w
73b0: 69 74 68 6f 75 74 20 72 65 76 69 73 69 6f 6e 73  ithout revisions
73c0: 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 20 20 20   committed...   
73d0: 20 23 20 6f 6e 20 74 68 65 6d 20 64 6f 20 6e 6f   # on them do no
73e0: 74 20 73 68 6f 77 20 75 70 20 69 6e 20 74 68 65  t show up in the
73f0: 20 6c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 61   list of roots a
7400: 6b 61 0a 09 09 20 20 20 20 23 20 6c 69 6e 65 73  ka...    # lines
7410: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e   of development.
7420: 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b  ...    set rev [
7430: 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a  $rev child]...}.
7440: 09 20 20 20 20 7d 0a 09 20 20 20 20 72 65 74 75  .    }..    retu
7450: 72 6e 0a 09 7d 0a 0a 09 23 20 4e 6f 20 4e 54 44  rn..}...# No NTD
7460: 42 20 73 74 75 66 66 20 74 6f 20 64 65 61 6c 20  B stuff to deal 
7470: 77 69 74 68 2e 20 46 69 72 73 74 20 64 65 6c 65  with. First dele
7480: 74 65 20 74 68 65 20 62 72 61 6e 63 68 20 6f 62  te the branch ob
7490: 6a 65 63 74 0a 09 23 20 69 74 73 65 6c 66 2c 20  ject..# itself, 
74a0: 61 66 74 65 72 20 63 75 74 74 69 6e 67 20 61 6c  after cutting al
74b0: 6c 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f  l the various co
74c0: 6e 6e 65 63 74 69 6f 6e 73 2e 0a 0a 09 73 65 74  nnections....set
74d0: 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70   branch [$root p
74e0: 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 69 66  arentbranch]..if
74f0: 20 7b 24 62 72 61 6e 63 68 20 6e 65 20 22 22 7d   {$branch ne ""}
7500: 20 7b 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e   {..    set bran
7510: 63 68 70 61 72 65 6e 74 20 5b 24 62 72 61 6e 63  chparent [$branc
7520: 68 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 24  h parent]..    $
7530: 62 72 61 6e 63 68 70 61 72 65 6e 74 20 72 65 6d  branchparent rem
7540: 6f 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 20  ovebranch       
7550: 20 24 62 72 61 6e 63 68 0a 09 20 20 20 20 24 62   $branch..    $b
7560: 72 61 6e 63 68 70 61 72 65 6e 74 20 72 65 6d 6f  ranchparent remo
7570: 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20  vechildonbranch 
7580: 24 72 6f 6f 74 0a 09 7d 0a 0a 09 23 20 54 68 65  $root..}...# The
7590: 20 72 6f 6f 74 20 69 73 20 6e 6f 20 73 75 63 68   root is no such
75a0: 20 61 6e 79 20 6c 6f 6e 67 65 72 20 65 69 74 68   any longer eith
75b0: 65 72 2e 0a 09 6c 64 65 6c 65 74 65 20 6d 79 72  er...ldelete myr
75c0: 6f 6f 74 73 20 24 72 6f 6f 74 0a 0a 09 23 20 4e  oots $root...# N
75d0: 6f 77 20 67 6f 20 74 68 72 6f 75 67 68 20 74 68  ow go through th
75e0: 65 20 6c 69 6e 65 20 61 6e 64 20 72 65 6d 6f 76  e line and remov
75f0: 65 20 61 6c 6c 20 69 74 73 20 72 65 76 69 73 69  e all its revisi
7600: 6f 6e 73 2e 0a 0a 09 77 68 69 6c 65 20 7b 24 72  ons....while {$r
7610: 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20  oot ne ""} {..  
7620: 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c    $root removeal
7630: 6c 74 61 67 73 0a 09 20 20 20 20 24 72 6f 6f 74  ltags..    $root
7640: 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68   removeallbranch
7650: 65 73 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20  es..    # Note: 
7660: 53 65 65 20 74 68 65 20 6e 6f 74 65 20 5b 78 5d  See the note [x]
7670: 2e 0a 0a 09 20 20 20 20 23 20 46 72 6f 6d 20 63  ....    # From c
7680: 76 73 32 73 76 6e 3a 20 49 66 20 74 68 69 73 20  vs2svn: If this 
7690: 69 73 20 74 68 65 20 6c 61 73 74 20 64 65 66 61  is the last defa
76a0: 75 6c 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20  ult revision on 
76b0: 61 0a 09 20 20 20 20 23 20 6e 6f 6e 2d 74 72 75  a..    # non-tru
76c0: 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  nk default branc
76d0: 68 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20  h followed by a 
76e0: 31 2e 32 20 72 65 76 69 73 69 6f 6e 2c 0a 09 20  1.2 revision,.. 
76f0: 20 20 20 23 20 74 68 65 6e 20 74 68 65 20 31 2e     # then the 1.
7700: 32 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e  2 revision depen
7710: 64 73 20 6f 6e 20 74 68 69 73 20 6f 6e 65 2e 20  ds on this one. 
7720: 20 46 49 58 4d 45 3a 20 49 74 20 69 73 0a 09 20   FIXME: It is.. 
7730: 20 20 20 23 20 71 75 65 73 74 69 6f 6e 61 62 6c     # questionabl
7740: 65 20 77 68 65 74 68 65 72 20 74 68 69 73 20 68  e whether this h
7750: 61 6e 64 6c 69 6e 67 20 69 73 20 63 6f 72 72 65  andling is corre
7760: 63 74 2c 20 73 69 6e 63 65 20 74 68 65 0a 09 20  ct, since the.. 
7770: 20 20 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64     # non-trunk d
7780: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65  efault branch re
7790: 76 69 73 69 6f 6e 73 20 61 66 66 65 63 74 20 74  visions affect t
77a0: 72 75 6e 6b 20 61 6e 64 0a 09 20 20 20 20 23 20  runk and..    # 
77b0: 73 68 6f 75 6c 64 20 74 68 65 72 65 66 6f 72 65  should therefore
77c0: 20 6e 6f 74 20 6a 75 73 74 20 62 65 20 64 69 73   not just be dis
77d0: 63 61 72 64 65 64 20 65 76 65 6e 20 69 66 0a 09  carded even if..
77e0: 20 20 20 20 23 20 2d 2d 74 72 75 6e 6b 2d 6f 6e      # --trunk-on
77f0: 6c 79 2e 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24  ly....    if {[$
7800: 72 6f 6f 74 20 68 61 73 64 65 66 61 75 6c 74 62  root hasdefaultb
7810: 72 61 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 09  ranchchild]} {..
7820: 09 73 65 74 20 6e 74 64 62 63 68 69 6c 64 20 5b  .set ntdbchild [
7830: 24 72 6f 6f 74 20 64 65 66 61 75 6c 74 62 72 61  $root defaultbra
7840: 6e 63 68 63 68 69 6c 64 5d 0a 09 09 69 66 20 7b  nchchild]...if {
7850: 5b 24 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61  [$ntdbchild defa
7860: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d  ultbranchparent]
7870: 20 6e 65 20 24 6e 74 64 62 63 68 69 6c 64 7d 20   ne $ntdbchild} 
7880: 7b 0a 09 09 20 20 20 20 74 72 6f 75 62 6c 65 20  {...    trouble 
7890: 69 6e 74 65 72 6e 61 6c 20 22 6e 74 64 62 20 2d  internal "ntdb -
78a0: 20 74 72 75 6e 6b 20 6c 69 6e 6b 61 67 65 20 62   trunk linkage b
78b0: 72 6f 6b 65 6e 22 0a 09 09 7d 0a 09 09 24 6e 74  roken"...}...$nt
78c0: 64 62 63 68 69 6c 64 20 63 75 74 64 65 66 61 75  dbchild cutdefau
78d0: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09  ltbranchparent..
78e0: 09 69 66 20 7b 5b 24 6e 74 64 62 63 68 69 6c 64  .if {[$ntdbchild
78f0: 20 68 61 73 70 61 72 65 6e 74 5d 7d 20 7b 0a 09   hasparent]} {..
7900: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 72  .    lappend myr
7910: 6f 6f 74 73 20 5b 24 6e 74 64 62 63 68 69 6c 64  oots [$ntdbchild
7920: 20 70 61 72 65 6e 74 5d 0a 09 09 7d 0a 09 20 20   parent]...}..  
7930: 20 20 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 6f    }...    set ro
7940: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d  ot [$root child]
7950: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20  ..}...return.   
7960: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 47   }..    method G
7970: 72 61 66 74 4e 54 44 42 32 54 72 75 6e 6b 20 7b  raftNTDB2Trunk {
7980: 72 6f 6f 74 7d 20 7b 0a 09 23 20 57 65 20 63 61  root} {..# We ca
7990: 6e 20 6e 6f 77 20 67 72 61 66 74 20 74 68 65 20  n now graft the 
79a0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
79b0: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f  t branch revisio
79c0: 6e 73 20 74 6f 0a 09 23 20 74 72 75 6e 6b 2e 20  ns to..# trunk. 
79d0: 54 68 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65  They should alre
79e0: 61 64 79 20 62 65 20 61 6c 6f 6e 65 20 6f 6e 20  ady be alone on 
79f0: 61 20 43 56 53 42 72 61 6e 63 68 2d 6c 65 73 73  a CVSBranch-less
7a00: 0a 09 23 20 62 72 61 6e 63 68 2e 0a 0a 09 69 66  ..# branch....if
7a10: 20 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65   {[$root haspare
7a20: 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 20 74 72 6f  ntbranch]} { tro
7a30: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 4e  uble internal "N
7a40: 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68  TDB root still h
7a50: 61 73 20 69 74 73 20 62 72 61 6e 63 68 20 73 79  as its branch sy
7a60: 6d 62 6f 6c 22 20 7d 0a 09 69 66 20 7b 5b 24 72  mbol" }..if {[$r
7a70: 6f 6f 74 20 68 61 73 62 72 61 6e 63 68 65 73 5d  oot hasbranches]
7a80: 7d 20 20 20 20 20 7b 20 74 72 6f 75 62 6c 65 20  }     { trouble 
7a90: 69 6e 74 65 72 6e 61 6c 20 22 4e 54 44 42 20 72  internal "NTDB r
7aa0: 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73 20 73 70  oot still has sp
7ab0: 61 77 6e 65 64 20 62 72 61 6e 63 68 65 73 22 20  awned branches" 
7ac0: 7d 0a 0a 09 73 65 74 20 6c 61 73 74 20 24 72 6f  }...set last $ro
7ad0: 6f 74 0a 09 77 68 69 6c 65 20 7b 5b 24 6c 61 73  ot..while {[$las
7ae0: 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 73 65  t haschild]} {se
7af0: 74 20 6c 61 73 74 20 5b 24 6c 61 73 74 20 63 68  t last [$last ch
7b00: 69 6c 64 5d 7d 0a 0a 09 69 66 20 7b 5b 24 6c 61  ild]}...if {[$la
7b10: 73 74 20 68 61 73 64 65 66 61 75 6c 74 62 72 61  st hasdefaultbra
7b20: 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 0a 09 20  nchchild]} {... 
7b30: 20 20 20 73 65 74 20 72 65 76 31 32 20 5b 24 6c     set rev12 [$l
7b40: 61 73 74 20 64 65 66 61 75 6c 74 62 72 61 6e 63  ast defaultbranc
7b50: 68 63 68 69 6c 64 5d 0a 09 20 20 20 20 24 72 65  hchild]..    $re
7b60: 76 31 32 20 63 75 74 64 65 66 61 75 6c 74 62 72  v12 cutdefaultbr
7b70: 61 6e 63 68 70 61 72 65 6e 74 0a 09 20 20 20 20  anchparent..    
7b80: 24 6c 61 73 74 20 20 63 75 74 64 65 66 61 75 6c  $last  cutdefaul
7b90: 74 62 72 61 6e 63 68 63 68 69 6c 64 0a 0a 09 20  tbranchchild... 
7ba0: 20 20 20 24 72 65 76 31 32 20 63 68 61 6e 67 65     $rev12 change
7bb0: 70 61 72 65 6e 74 20 24 6c 61 73 74 0a 09 20 20  parent $last..  
7bc0: 20 20 24 6c 61 73 74 20 20 63 68 61 6e 67 65 63    $last  changec
7bd0: 68 69 6c 64 20 24 72 65 76 31 32 0a 0a 09 20 20  hild $rev12...  
7be0: 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74    ldelete myroot
7bf0: 73 20 24 72 65 76 31 32 0a 0a 09 20 20 20 20 23  s $rev12...    #
7c00: 20 4e 6f 74 65 20 61 6e 64 20 72 65 6d 65 6d 62   Note and rememb
7c10: 65 72 20 74 68 61 74 20 74 68 65 20 74 79 70 65  er that the type
7c20: 20 6f 66 20 72 65 76 31 32 20 77 61 73 20 61 6c   of rev12 was al
7c30: 72 65 61 64 79 0a 09 20 20 20 20 23 20 61 64 6a  ready..    # adj
7c40: 75 73 74 65 64 20 62 79 20 41 64 6a 75 73 74 4e  usted by AdjustN
7c50: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72  onTrunkDefaultBr
7c60: 61 6e 63 68 2c 20 73 6f 20 77 65 20 64 6f 6e 27  anch, so we don'
7c70: 74 0a 09 20 20 20 20 23 20 68 61 76 65 20 74 6f  t..    # have to
7c80: 20 63 68 61 6e 67 65 20 69 74 73 20 74 79 70 65   change its type
7c90: 20 68 65 72 65 2e 0a 09 7d 0a 0a 09 77 68 69 6c   here...}...whil
7ca0: 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20  e {$root ne ""} 
7cb0: 7b 0a 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74  {..    $root set
7cc0: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20  ondefaultbranch 
7cd0: 30 0a 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74  0..    $root set
7ce0: 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20  lod $mytrunk..  
7cf0: 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 5b 24    foreach tag [$
7d00: 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09 24  root tags] {...$
7d10: 74 61 67 20 73 65 74 6c 6f 64 20 24 6d 79 74 72  tag setlod $mytr
7d20: 75 6e 6b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  unk..    }..    
7d30: 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20  set root [$root 
7d40: 63 68 69 6c 64 5d 0a 09 7d 0a 0a 20 20 20 20 20  child]..}..     
7d50: 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a     return.    }.
7d60: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 63 74 69  .    method Acti
7d70: 76 65 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76  ve {} {..set rev
7d80: 69 73 69 6f 6e 73 20 7b 7d 0a 09 73 65 74 20 73  isions {}..set s
7d90: 79 6d 62 6f 6c 73 20 20 20 7b 7d 0a 0a 09 66 6f  ymbols   {}...fo
7da0: 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c  reach root [$sel
7db0: 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70  f LinesOfDevelop
7dc0: 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20  ment] {..    if 
7dd0: 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e  {[$root hasparen
7de0: 74 62 72 61 6e 63 68 5d 7d 20 7b 20 6c 61 70 70  tbranch]} { lapp
7df0: 65 6e 64 20 73 79 6d 62 6f 6c 73 20 5b 24 72 6f  end symbols [$ro
7e00: 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d  ot parentbranch]
7e10: 20 7d 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24   }..    while {$
7e20: 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09  root ne ""} {...
7e30: 6c 61 70 70 65 6e 64 20 72 65 76 69 73 69 6f 6e  lappend revision
7e40: 73 20 24 72 6f 6f 74 0a 09 09 66 6f 72 65 61 63  s $root...foreac
7e50: 68 20 74 61 67 20 20 20 20 5b 24 72 6f 6f 74 20  h tag    [$root 
7e60: 74 61 67 73 5d 20 20 20 20 20 7b 20 6c 61 70 70  tags]     { lapp
7e70: 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 74 61 67  end symbols $tag
7e80: 20 20 20 20 7d 0a 09 09 66 6f 72 65 61 63 68 20      }...foreach 
7e90: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72  branch [$root br
7ea0: 61 6e 63 68 65 73 5d 20 7b 20 6c 61 70 70 65 6e  anches] { lappen
7eb0: 64 20 73 79 6d 62 6f 6c 73 20 24 62 72 61 6e 63  d symbols $branc
7ec0: 68 20 7d 0a 09 09 73 65 74 20 6c 6f 64 20 5b 24  h }...set lod [$
7ed0: 72 6f 6f 74 20 6c 6f 64 5d 0a 09 09 69 66 20 7b  root lod]...if {
7ee0: 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 7d  ![$lod istrunk]}
7ef0: 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f   { lappend symbo
7f00: 6c 73 20 24 6c 6f 64 20 7d 0a 09 09 73 65 74 20  ls $lod }...set 
7f10: 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c  root [$root chil
7f20: 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72  d]..    }..}...r
7f30: 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b 6c 73 6f  eturn [list [lso
7f40: 72 74 20 2d 75 6e 69 71 75 65 20 2d 64 69 63 74  rt -unique -dict
7f50: 20 24 72 65 76 69 73 69 6f 6e 73 5d 20 5b 6c 73   $revisions] [ls
7f60: 6f 72 74 20 2d 75 6e 69 71 75 65 20 2d 64 69 63  ort -unique -dic
7f70: 74 20 24 73 79 6d 62 6f 6c 73 5d 5d 0a 20 20 20  t $symbols]].   
7f80: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   }..    # # ## #
7f90: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
7fa0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
7fb0: 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61      ## Configura
7fc0: 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61  tion..    pragma
7fd0: 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20   -hastypeinfo   
7fe0: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65   no  ; # no type
7ff0: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20   introspection. 
8000: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e     pragma -hasin
8010: 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20  fo        no  ; 
8020: 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72  # no object intr
8030: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72  ospection.    pr
8040: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74  agma -hastypemet
8050: 68 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70  hods no  ; # typ
8060: 65 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e  e is not relevan
8070: 74 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23  t...    # # ## #
8080: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
8090: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
80a0: 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61  }..namespace eva
80b0: 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  l ::vc::fossil::
80c0: 69 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20  import::cvs {.  
80d0: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f    namespace expo
80e0: 72 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65  rt file.    name
80f0: 73 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20  space eval file 
8100: 7b 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20  {..# Import not 
8110: 72 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64  required, alread
8120: 79 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70  y a child namesp
8130: 61 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63  ace...# namespac
8140: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
8150: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
8160: 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23  vs::file::rev..#
8170: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72   namespace impor
8180: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  t ::vc::fossil::
8190: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c  import::cvs::fil
81a0: 65 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63  e::sym..namespac
81b0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74  e import ::vc::t
81c0: 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e  ools::misc::*..n
81d0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
81e0: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f  ::vc::tools::tro
81f0: 75 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20  uble..namespace 
8200: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f  import ::vc::too
8210: 6c 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61  ls::log..namespa
8220: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
8230: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
8240: 63 76 73 3a 3a 73 74 61 74 65 0a 20 20 20 20 7d  cvs::state.    }
8250: 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23  .}..# # ## ### #
8260: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
8270: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23  ########### ####
8280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
8290: 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b  #.## Ready..pack
82a0: 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a  age provide vc::
82b0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
82c0: 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a 72 65  cvs::file 1.0.re
82d0: 74 75 72 6e 0a                                   turn.