Hex Artifact Content
Not logged in

Artifact ce592fc078fe6cdf3112774b84d31b7e830d7e32:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [7208c7ac4d] - Changes to cvs2fossil to import tcllib CVS into fossil on Win32

* using ::file instead of file in snit methods to get the core file command * taking care of files that only differ in case in the Attic and the repo on case insensitive FS * passing platform specific

by mjanssen on 2008-01-28 23:57:27.

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 73 74 72 75 63 74 3a   require struct:
0390: 3a 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20  :list           
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
03b0: 20 48 69 67 68 65 72 20 6f 72 64 65 72 20 6f 70   Higher order op
03c0: 65 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67  erations..packag
03d0: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f  e require vc::fo
03e0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
03f0: 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 20 3b 20  s::file::rev  ; 
0400: 23 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 72  # CVS per file r
0410: 65 76 69 73 69 6f 6e 73 2e 0a 70 61 63 6b 61 67  evisions..packag
0420: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f  e require vc::fo
0430: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
0440: 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 3b 20  s::file::sym  ; 
0450: 23 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 73  # CVS per file s
0460: 79 6d 62 6f 6c 73 2e 0a 70 61 63 6b 61 67 65 20  ymbols..package 
0470: 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73  require vc::foss
0480: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
0490: 3a 73 74 61 74 65 20 20 20 20 20 20 3b 20 23 20  :state      ; # 
04a0: 53 74 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70  State storage..p
04b0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76  ackage require v
04c0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
04d0: 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74  t::cvs::integrit
04e0: 79 20 20 3b 20 23 20 53 74 61 74 65 20 69 6e 74  y  ; # State int
04f0: 65 67 72 69 74 79 20 63 68 65 63 6b 73 2e 0a 70  egrity checks..p
0500: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76  ackage require v
0510: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0520: 74 3a 3a 63 76 73 3a 3a 67 74 63 6f 72 65 20 20  t::cvs::gtcore  
0530: 20 20 20 3b 20 23 20 47 72 61 70 68 20 74 72 61     ; # Graph tra
0540: 76 65 72 73 61 6c 20 63 6f 72 65 2e 0a 70 61 63  versal core..pac
0550: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a  kage require vc:
0560: 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 20  :tools::trouble 
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 3b 20 23 20 45 72 72 6f 72 20 72 65 70 6f 72   ; # Error repor
0590: 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72 65  ting..package re
05a0: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a  quire vc::tools:
05b0: 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20 20  :log            
05c0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 55 73            ; # Us
05d0: 65 72 20 66 65 65 64 62 61 63 6b 0a 70 61 63 6b  er feedback.pack
05e0: 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a  age require vc::
05f0: 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 20 20  tools::misc     
0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0610: 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61 74 74  ; # Text formatt
0620: 69 6e 67 0a 0a 23 20 23 20 23 23 20 23 23 23 20  ing..# # ## ### 
0630: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
0640: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
0650: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0660: 23 23 0a 23 23 0a 0a 73 6e 69 74 3a 3a 74 79 70  ##.##..snit::typ
0670: 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  e ::vc::fossil::
0680: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c  import::cvs::fil
0690: 65 20 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23  e {.    # # ## #
06a0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
06b0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
06c0: 20 20 20 20 23 23 20 50 75 62 6c 69 63 20 41 50      ## Public AP
06d0: 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72 75 63 74  I..    construct
06e0: 6f 72 20 7b 69 64 20 70 61 74 68 20 75 73 72 70  or {id path usrp
06f0: 61 74 68 20 65 78 65 63 75 74 61 62 6c 65 20 70  ath executable p
0700: 72 6f 6a 65 63 74 7d 20 7b 0a 09 73 65 74 20 6d  roject} {..set m
0710: 79 69 64 20 20 20 20 20 20 20 20 20 24 69 64 0a  yid         $id.
0720: 09 73 65 74 20 6d 79 70 61 74 68 20 20 20 20 20  .set mypath     
0730: 20 20 24 70 61 74 68 0a 09 73 65 74 20 6d 79 75    $path..set myu
0740: 73 72 70 61 74 68 20 20 20 20 24 75 73 72 70 61  srpath    $usrpa
0750: 74 68 0a 09 73 65 74 20 6d 79 65 78 65 63 75 74  th..set myexecut
0760: 61 62 6c 65 20 24 65 78 65 63 75 74 61 62 6c 65  able $executable
0770: 0a 09 73 65 74 20 6d 79 70 72 6f 6a 65 63 74 20  ..set myproject 
0780: 20 20 20 24 70 72 6f 6a 65 63 74 0a 09 73 65 74     $project..set
0790: 20 6d 79 74 72 75 6e 6b 20 20 20 20 20 20 5b 24   mytrunk      [$
07a0: 6d 79 70 72 6f 6a 65 63 74 20 74 72 75 6e 6b 5d  myproject trunk]
07b0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
07c0: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 69 64      method setid
07d0: 20 7b 69 64 7d 20 7b 0a 09 69 6e 74 65 67 72 69   {id} {..integri
07e0: 74 79 20 61 73 73 65 72 74 20 7b 24 6d 79 69 64  ty assert {$myid
07f0: 20 65 71 20 22 22 7d 20 7b 46 69 6c 65 20 27 24   eq ""} {File '$
0800: 6d 79 70 61 74 68 27 20 61 6c 72 65 61 64 79 20  mypath' already 
0810: 68 61 73 20 61 6e 20 69 64 2c 20 27 24 6d 79 69  has an id, '$myi
0820: 64 27 7d 0a 09 73 65 74 20 6d 79 69 64 20 24 69  d'}..set myid $i
0830: 64 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  d..return.    }.
0840: 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 64 20 20  .    method id  
0850: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20      {} { return 
0860: 24 6d 79 69 64 20 7d 0a 20 20 20 20 6d 65 74 68  $myid }.    meth
0870: 6f 64 20 70 61 74 68 20 20 20 20 7b 7d 20 7b 20  od path    {} { 
0880: 72 65 74 75 72 6e 20 24 6d 79 70 61 74 68 20 7d  return $mypath }
0890: 0a 20 20 20 20 6d 65 74 68 6f 64 20 75 73 72 70  .    method usrp
08a0: 61 74 68 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20  ath {} { return 
08b0: 24 6d 79 75 73 72 70 61 74 68 20 7d 0a 20 20 20  $myusrpath }.   
08c0: 20 6d 65 74 68 6f 64 20 70 72 6f 6a 65 63 74 20   method project 
08d0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 70  {} { return $myp
08e0: 72 6f 6a 65 63 74 20 7d 0a 0a 20 20 20 20 64 65  roject }..    de
08f0: 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 63 6f  legate method co
0900: 6d 6d 69 74 6d 65 73 73 61 67 65 6f 66 20 74 6f  mmitmessageof to
0910: 20 6d 79 70 72 6f 6a 65 63 74 0a 0a 20 20 20 20   myproject..    
0920: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
0930: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
0940: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 4d  #######.    ## M
0950: 65 74 68 6f 64 73 20 72 65 71 75 69 72 65 64 20  ethods required 
0960: 66 6f 72 20 74 68 65 20 63 6c 61 73 73 20 74 6f  for the class to
0970: 20 62 65 20 61 20 73 69 6e 6b 20 6f 66 20 74 68   be a sink of th
0980: 65 20 72 63 73 20 70 61 72 73 65 72 0a 0a 20 20  e rcs parser..  
0990: 20 20 23 6d 65 74 68 6f 64 20 62 65 67 69 6e 20    #method begin 
09a0: 7b 7d 20 7b 70 75 74 73 20 62 65 67 69 6e 7d 0a  {} {puts begin}.
09b0: 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 68      #method seth
09c0: 65 61 64 20 7b 68 7d 20 7b 70 75 74 73 20 68 65  ead {h} {puts he
09d0: 61 64 3d 24 68 7d 0a 20 20 20 20 23 6d 65 74 68  ad=$h}.    #meth
09e0: 6f 64 20 73 65 74 70 72 69 6e 63 69 70 61 6c 62  od setprincipalb
09f0: 72 61 6e 63 68 20 7b 62 7d 20 7b 70 75 74 73 20  ranch {b} {puts 
0a00: 70 62 3d 24 62 7d 0a 20 20 20 20 23 6d 65 74 68  pb=$b}.    #meth
0a10: 6f 64 20 64 65 66 74 61 67 20 7b 73 20 72 7d 20  od deftag {s r} 
0a20: 7b 70 75 74 73 20 24 73 3d 24 72 7d 0a 20 20 20  {puts $s=$r}.   
0a30: 20 23 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d   #method setcomm
0a40: 65 6e 74 20 7b 63 7d 20 7b 70 75 74 73 20 63 6f  ent {c} {puts co
0a50: 6d 6d 65 6e 74 3d 24 63 7d 0a 20 20 20 20 23 6d  mment=$c}.    #m
0a60: 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 20  ethod admindone 
0a70: 7b 7d 20 7b 70 75 74 73 20 61 64 6d 69 6e 64 6f  {} {puts admindo
0a80: 6e 65 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20  ne}.    #method 
0a90: 64 65 66 20 7b 72 65 76 20 64 61 74 65 20 61 75  def {rev date au
0aa0: 74 68 6f 72 20 73 74 61 74 65 20 6e 65 78 74 20  thor state next 
0ab0: 62 72 61 6e 63 68 65 73 7d 20 7b 70 75 74 73 20  branches} {puts 
0ac0: 22 64 65 66 20 24 72 65 76 20 24 64 61 74 65 20  "def $rev $date 
0ad0: 24 61 75 74 68 6f 72 20 24 73 74 61 74 65 20 24  $author $state $
0ae0: 6e 65 78 74 20 24 62 72 61 6e 63 68 65 73 22 7d  next $branches"}
0af0: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66  .    #method def
0b00: 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 65  done {} {puts de
0b10: 66 2d 64 6f 6e 65 7d 0a 20 20 20 20 23 6d 65 74  f-done}.    #met
0b20: 68 6f 64 20 73 65 74 64 65 73 63 20 7b 64 7d 20  hod setdesc {d} 
0b30: 7b 70 75 74 73 20 64 65 73 63 3d 24 64 7d 0a 20  {puts desc=$d}. 
0b40: 20 20 20 23 6d 65 74 68 6f 64 20 65 78 74 65 6e     #method exten
0b50: 64 20 7b 72 65 76 20 63 6f 6d 6d 69 74 6d 73 67  d {rev commitmsg
0b60: 20 64 65 6c 74 61 72 61 6e 67 65 7d 20 7b 70 75   deltarange} {pu
0b70: 74 73 20 22 65 78 74 65 6e 64 20 24 63 6f 6d 6d  ts "extend $comm
0b80: 69 74 6d 73 67 20 24 64 65 6c 74 61 72 61 6e 67  itmsg $deltarang
0b90: 65 22 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20  e"}.    #method 
0ba0: 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 6f  done {} {puts do
0bb0: 6e 65 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20  ne}..    # # ## 
0bc0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
0bd0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
0be0: 0a 20 20 20 20 23 23 20 50 65 72 73 69 73 74 65  .    ## Persiste
0bf0: 6e 63 65 20 28 70 61 73 73 20 49 49 29 0a 0a 20  nce (pass II).. 
0c00: 20 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73     method persis
0c10: 74 20 7b 7d 20 7b 0a 09 23 20 46 69 72 73 74 20  t {} {..# First 
0c20: 63 6f 6c 6c 65 63 74 20 74 68 65 20 72 65 61 63  collect the reac
0c30: 68 61 62 6c 65 20 72 65 76 69 73 69 6f 6e 73 20  hable revisions 
0c40: 61 6e 64 20 73 79 6d 62 6f 6c 73 2c 20 74 68 65  and symbols, the
0c50: 6e 0a 09 23 20 61 73 73 69 67 6e 20 69 64 27 73  n..# assign id's
0c60: 20 74 6f 20 61 6c 6c 2e 20 54 68 65 79 20 61 72   to all. They ar
0c70: 65 20 73 6f 72 74 65 64 20 73 6f 20 74 68 61 74  e sorted so that
0c80: 20 77 65 20 77 69 6c 6c 20 68 61 76 65 20 69 64   we will have id
0c90: 73 0a 09 23 20 77 68 69 63 68 20 73 6f 72 74 20  s..# which sort 
0ca0: 69 6e 20 6f 72 64 65 72 20 6f 66 20 63 72 65 61  in order of crea
0cb0: 74 69 6f 6e 2e 20 54 68 65 6e 20 77 65 20 63 61  tion. Then we ca
0cc0: 6e 20 73 61 76 65 20 74 68 65 6d 2e 20 54 68 69  n save them. Thi
0cd0: 73 0a 09 23 20 69 73 20 64 6f 6e 65 20 62 6f 74  s..# is done bot
0ce0: 74 6f 6d 20 75 70 2e 20 52 65 76 69 73 69 6f 6e  tom up. Revision
0cf0: 73 2c 20 74 68 65 6e 20 73 79 6d 62 6f 6c 73 2e  s, then symbols.
0d00: 20 5f 5f 4e 4f 54 45 5f 5f 20 54 68 69 73 0a 09   __NOTE__ This..
0d10: 23 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 62 65 63  # works only bec
0d20: 61 75 73 65 20 73 71 6c 69 74 65 20 69 73 20 6e  ause sqlite is n
0d30: 6f 74 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65  ot checking fore
0d40: 69 67 6e 20 6b 65 79 0a 09 23 20 72 65 66 65 72  ign key..# refer
0d50: 65 6e 63 65 73 20 64 75 72 69 6e 67 20 69 6e 73  ences during ins
0d60: 65 72 74 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  ert. This allows
0d70: 20 74 6f 20 68 61 76 65 20 64 61 6e 67 6c 69 6e   to have danglin
0d80: 67 0a 09 23 20 72 65 66 65 72 65 6e 63 65 73 20  g..# references 
0d90: 77 68 69 63 68 20 61 72 65 20 66 69 78 65 64 20  which are fixed 
0da0: 6c 61 74 65 72 2e 20 54 68 65 20 6c 6f 6e 67 65  later. The longe
0db0: 73 74 20 64 61 6e 67 6c 69 6e 67 0a 09 23 20 72  st dangling..# r
0dc0: 65 66 65 72 65 6e 63 65 73 20 61 72 65 20 66 6f  eferences are fo
0dd0: 72 20 74 68 65 20 70 72 6f 6a 65 63 74 20 6c 65  r the project le
0de0: 76 65 6c 20 73 79 6d 62 6f 6c 73 2c 20 74 68 65  vel symbols, the
0df0: 73 65 20 77 65 20 64 6f 0a 09 23 20 6e 6f 74 20  se we do..# not 
0e00: 73 61 76 65 20 68 65 72 65 2c 20 62 75 74 20 61  save here, but a
0e10: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
0e20: 20 70 61 73 73 2e 20 57 68 61 74 20 77 65 20 6e   pass. What we n
0e30: 65 65 64 20 61 72 65 0a 09 23 20 74 68 65 20 69  eed are..# the i
0e40: 64 73 2c 20 68 65 6e 63 65 20 74 68 65 20 74 77  ds, hence the tw
0e50: 6f 20 70 68 61 73 65 73 2e 0a 0a 09 73 74 72 75  o phases....stru
0e60: 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20  ct::list assign 
0e70: 5b 24 73 65 6c 66 20 41 63 74 69 76 65 5d 20 72  [$self Active] r
0e80: 65 76 69 73 69 6f 6e 73 20 73 79 6d 62 6f 6c 73  evisions symbols
0e90: 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 72  ..foreach rev $r
0ea0: 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65 76 20  evisions { $rev 
0eb0: 64 65 66 69 64 20 7d 0a 09 66 6f 72 65 61 63 68  defid }..foreach
0ec0: 20 73 79 6d 20 24 73 79 6d 62 6f 6c 73 20 20 20   sym $symbols   
0ed0: 7b 20 24 73 79 6d 20 64 65 66 69 64 20 7d 0a 0a  { $sym defid }..
0ee0: 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74 69  .state transacti
0ef0: 6f 6e 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63  on {..    foreac
0f00: 68 20 72 65 76 20 24 72 65 76 69 73 69 6f 6e 73  h rev $revisions
0f10: 20 7b 20 24 72 65 76 20 70 65 72 73 69 73 74 20   { $rev persist 
0f20: 7d 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 73  }..    foreach s
0f30: 79 6d 20 24 73 79 6d 62 6f 6c 73 20 20 20 7b 20  ym $symbols   { 
0f40: 24 73 79 6d 20 70 65 72 73 69 73 74 20 7d 0a 09  $sym persist }..
0f50: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
0f60: 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 72 6f 70  .    method drop
0f70: 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b   {} {..foreach {
0f80: 5f 20 72 65 76 7d 20 20 20 20 5b 61 72 72 61 79  _ rev}    [array
0f90: 20 67 65 74 20 6d 79 72 65 76 5d 20 20 20 20 20   get myrev]     
0fa0: 20 7b 20 24 72 65 76 20 64 65 73 74 72 6f 79 20   { $rev destroy 
0fb0: 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62 72  }..foreach {_ br
0fc0: 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74  anch} [array get
0fd0: 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 20 24   mybranches] { $
0fe0: 62 72 61 6e 63 68 20 64 65 73 74 72 6f 79 20 7d  branch destroy }
0ff0: 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67  ..foreach {_ tag
1000: 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74  list} [array get
1010: 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20   mytags] {..    
1020: 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67  foreach tag $tag
1030: 6c 69 73 74 20 7b 20 24 74 61 67 20 64 65 73 74  list { $tag dest
1040: 72 6f 79 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  roy }..}..return
1050: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20  .    }..    # # 
1060: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
1070: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
1080: 23 23 23 0a 20 20 20 20 23 23 20 49 6d 70 6c 65  ###.    ## Imple
1090: 6d 65 6e 74 20 74 68 65 20 73 69 6e 6b 0a 0a 20  ment the sink.. 
10a0: 20 20 20 6d 65 74 68 6f 64 20 62 65 67 69 6e 20     method begin 
10b0: 7b 7d 20 7b 23 69 67 6e 6f 72 65 7d 0a 0a 20 20  {} {#ignore}..  
10c0: 20 20 6d 65 74 68 6f 64 20 73 65 74 68 65 61 64    method sethead
10d0: 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20   {revnr} {..set 
10e0: 6d 79 68 65 61 64 72 65 76 6e 72 20 24 72 65 76  myheadrevnr $rev
10f0: 6e 72 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  nr..return.    }
1100: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
1110: 70 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20  principalbranch 
1120: 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 73 65  {branchnr} {..se
1130: 74 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 24 62  t myprincipal $b
1140: 72 61 6e 63 68 6e 72 0a 09 72 65 74 75 72 6e 0a  ranchnr..return.
1150: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
1160: 64 20 64 65 66 74 61 67 20 7b 6e 61 6d 65 20 72  d deftag {name r
1170: 65 76 6e 72 7d 20 7b 0a 09 23 20 46 55 54 55 52  evnr} {..# FUTUR
1180: 45 3a 20 50 65 72 66 6f 72 6d 20 73 79 6d 62 6f  E: Perform symbo
1190: 6c 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  l transformation
11a0: 20 68 65 72 65 2e 0a 0a 09 69 66 20 7b 5b 73 74   here....if {[st
11b0: 72 75 63 74 3a 3a 73 65 74 20 63 6f 6e 74 61 69  ruct::set contai
11c0: 6e 73 20 24 6d 79 73 79 6d 62 6f 6c 73 20 24 6e  ns $mysymbols $n
11d0: 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f  ame]} {..    tro
11e0: 75 62 6c 65 20 66 61 74 61 6c 20 22 4d 75 6c 74  uble fatal "Mult
11f0: 69 70 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 73  iple definitions
1200: 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 27   of the symbol '
1210: 24 6e 61 6d 65 27 20 69 6e 20 27 24 6d 79 70 61  $name' in '$mypa
1220: 74 68 27 22 0a 09 20 20 20 20 72 65 74 75 72 6e  th'"..    return
1230: 0a 09 7d 0a 0a 09 73 74 72 75 63 74 3a 3a 73 65  ..}...struct::se
1240: 74 20 61 64 64 20 6d 79 73 79 6d 62 6f 6c 73 20  t add mysymbols 
1250: 24 6e 61 6d 65 0a 0a 09 69 66 20 7b 5b 72 65 76  $name...if {[rev
1260: 20 69 73 62 72 61 6e 63 68 72 65 76 6e 72 20 24   isbranchrevnr $
1270: 72 65 76 6e 72 20 2d 3e 20 62 72 61 6e 63 68 6e  revnr -> branchn
1280: 72 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66  r]} {..    $self
1290: 20 41 64 64 42 72 61 6e 63 68 20 24 6e 61 6d 65   AddBranch $name
12a0: 20 24 62 72 61 6e 63 68 6e 72 0a 09 7d 20 65 6c   $branchnr..} el
12b0: 73 65 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20  se {..    $self 
12c0: 41 64 64 54 61 67 20 24 6e 61 6d 65 20 24 72 65  AddTag $name $re
12d0: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  vnr..}..return. 
12e0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
12f0: 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d 20   setcomment {c} 
1300: 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20 20 20  {# ignore}..    
1310: 6d 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65  method admindone
1320: 20 7b 7d 20 7b 0a 09 23 20 57 65 20 64 6f 20 6e   {} {..# We do n
1330: 6f 74 68 69 6e 67 20 61 74 20 74 68 65 20 62 6f  othing at the bo
1340: 75 6e 64 61 72 79 20 6f 66 20 61 64 6d 69 6e 20  undary of admin 
1350: 61 6e 64 20 72 65 76 69 73 69 6f 6e 20 64 61 74  and revision dat
1360: 61 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  a.    }..    met
1370: 68 6f 64 20 64 65 66 20 7b 72 65 76 6e 72 20 64  hod def {revnr d
1380: 61 74 65 20 61 75 74 68 6f 72 20 73 74 61 74 65  ate author state
1390: 20 6e 65 78 74 20 62 72 61 6e 63 68 65 73 7d 20   next branches} 
13a0: 7b 0a 09 24 73 65 6c 66 20 52 65 63 6f 72 64 42  {..$self RecordB
13b0: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 24 62 72  ranchCommits $br
13c0: 61 6e 63 68 65 73 0a 0a 09 69 66 20 7b 5b 69 6e  anches...if {[in
13d0: 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28  fo exists myrev(
13e0: 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 20 20 20  $revnr)]} {..   
13f0: 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22   trouble fatal "
1400: 46 69 6c 65 20 24 6d 79 70 61 74 68 20 63 6f 6e  File $mypath con
1410: 74 61 69 6e 73 20 64 75 70 6c 69 63 61 74 65 20  tains duplicate 
1420: 64 65 66 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20  definitions for 
1430: 72 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 2e  revision $revnr.
1440: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d  "..    return..}
1450: 0a 0a 09 73 65 74 20 6d 79 61 69 64 28 24 72 65  ...set myaid($re
1460: 76 6e 72 29 20 5b 24 6d 79 70 72 6f 6a 65 63 74  vnr) [$myproject
1470: 20 64 65 66 61 75 74 68 6f 72 20 24 61 75 74 68   defauthor $auth
1480: 6f 72 5d 0a 09 73 65 74 20 6d 79 72 65 76 28 24  or]..set myrev($
1490: 72 65 76 6e 72 29 20 5b 72 65 76 20 25 41 55 54  revnr) [rev %AUT
14a0: 4f 25 20 24 72 65 76 6e 72 20 24 64 61 74 65 20  O% $revnr $date 
14b0: 24 73 74 61 74 65 20 24 73 65 6c 66 5d 0a 0a 09  $state $self]...
14c0: 24 73 65 6c 66 20 52 65 63 6f 72 64 42 61 73 69  $self RecordBasi
14d0: 63 44 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72  cDependencies $r
14e0: 65 76 6e 72 20 24 6e 65 78 74 0a 09 72 65 74 75  evnr $next..retu
14f0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
1500: 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d 20  thod defdone {} 
1510: 7b 0a 09 23 20 54 68 69 73 20 69 73 20 61 6c 6c  {..# This is all
1520: 20 64 6f 6e 65 20 61 66 74 65 72 20 74 68 65 20   done after the 
1530: 72 65 76 69 73 69 6f 6e 20 74 72 65 65 20 68 61  revision tree ha
1540: 73 20 62 65 65 6e 20 65 78 74 72 61 63 74 65 64  s been extracted
1550: 0a 09 23 20 66 72 6f 6d 20 74 68 65 20 66 69 6c  ..# from the fil
1560: 65 2c 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f  e, before the co
1570: 6d 6d 69 74 20 6d 65 73 61 67 65 73 20 61 6e 64  mmit mesages and
1580: 20 64 65 6c 74 61 20 74 65 78 74 73 20 61 72 65   delta texts are
1590: 0a 09 23 20 70 72 6f 63 65 73 73 65 64 2e 0a 0a  ..# processed...
15a0: 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 50 72  .$self ProcessPr
15b0: 69 6d 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65  imaryDependencie
15c0: 73 0a 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73  s..$self Process
15d0: 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69  BranchDependenci
15e0: 65 73 0a 09 24 73 65 6c 66 20 53 6f 72 74 42 72  es..$self SortBr
15f0: 61 6e 63 68 65 73 0a 09 24 73 65 6c 66 20 50 72  anches..$self Pr
1600: 6f 63 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e  ocessTagDependen
1610: 63 69 65 73 0a 09 24 73 65 6c 66 20 44 65 74 65  cies..$self Dete
1620: 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69  rmineTheRootRevi
1630: 73 69 6f 6e 0a 09 72 65 74 75 72 6e 0a 20 20 20  sion..return.   
1640: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73   }..    method s
1650: 65 74 64 65 73 63 20 7b 64 7d 20 7b 23 20 69 67  etdesc {d} {# ig
1660: 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f  nore}..    metho
1670: 64 20 65 78 74 65 6e 64 20 7b 72 65 76 6e 72 20  d extend {revnr 
1680: 63 6f 6d 6d 69 74 6d 73 67 20 74 65 78 74 72 61  commitmsg textra
1690: 6e 67 65 7d 20 7b 0a 09 73 65 74 20 63 6d 69 64  nge} {..set cmid
16a0: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 66   [$myproject def
16b0: 63 6d 65 73 73 61 67 65 20 5b 73 74 72 69 6e 67  cmessage [string
16c0: 20 74 72 69 6d 20 24 63 6f 6d 6d 69 74 6d 73 67   trim $commitmsg
16d0: 5d 5d 0a 0a 09 73 65 74 20 72 65 76 20 24 6d 79  ]]...set rev $my
16e0: 72 65 76 28 24 72 65 76 6e 72 29 0a 0a 09 69 66  rev($revnr)...if
16f0: 20 7b 5b 24 72 65 76 20 68 61 73 6d 65 74 61 5d   {[$rev hasmeta]
1700: 7d 20 7b 0a 09 20 20 20 20 23 20 41 70 70 61 72  } {..    # Appar
1710: 65 6e 74 6c 79 20 72 65 70 6f 73 69 74 6f 72 69  ently repositori
1720: 65 73 20 65 78 69 73 74 20 69 6e 20 77 68 69 63  es exist in whic
1730: 68 20 74 68 65 20 64 65 6c 74 61 20 64 61 74 61  h the delta data
1740: 0a 09 20 20 20 20 23 20 66 6f 72 20 72 65 76 69  ..    # for revi
1750: 73 69 6f 6e 20 31 2e 31 20 69 73 20 70 72 6f 76  sion 1.1 is prov
1760: 69 64 65 64 20 73 65 76 65 72 61 6c 20 74 69 6d  ided several tim
1770: 65 73 2c 20 61 74 20 6c 65 61 73 74 0a 09 20 20  es, at least..  
1780: 20 20 23 20 74 77 69 63 65 2e 20 54 68 65 20 61    # twice. The a
1790: 63 74 75 61 6c 20 63 61 75 73 65 20 6f 66 20 74  ctual cause of t
17a0: 68 69 73 20 64 75 70 6c 69 63 61 74 69 6f 6e 20  his duplication 
17b0: 69 73 20 6e 6f 74 0a 09 20 20 20 20 23 20 6b 6e  is not..    # kn
17c0: 6f 77 6e 2e 20 53 70 65 63 75 6c 61 74 69 6f 6e  own. Speculation
17d0: 20 63 65 6e 74 65 72 73 20 6f 6e 20 52 43 53 2f   centers on RCS/
17e0: 43 56 53 20 62 75 67 73 2c 20 6f 72 20 66 72 6f  CVS bugs, or fro
17f0: 6d 0a 09 20 20 20 20 23 20 6d 61 6e 75 61 6c 20  m..    # manual 
1800: 65 64 69 74 73 20 6f 66 20 74 68 65 20 72 65 70  edits of the rep
1810: 6f 73 69 74 6f 72 79 20 77 68 69 63 68 20 62 6f  ository which bo
1820: 72 6b 65 64 20 74 68 65 0a 09 20 20 20 20 23 20  rked the..    # 
1830: 69 6e 74 65 72 6e 61 6c 73 2e 20 57 68 61 74 65  internals. Whate
1840: 76 65 72 20 74 68 65 20 63 61 75 73 65 2c 20 74  ver the cause, t
1850: 65 73 74 69 6e 67 20 73 68 6f 77 65 64 20 74 68  esting showed th
1860: 61 74 20 62 6f 74 68 0a 09 20 20 20 20 23 20 63  at both..    # c
1870: 76 73 20 61 6e 64 20 72 63 73 20 75 73 65 20 74  vs and rcs use t
1880: 68 65 20 66 69 72 73 74 20 64 65 66 69 6e 69 74  he first definit
1890: 69 6f 6e 20 77 68 65 6e 20 70 65 72 66 6f 72 6d  ion when perform
18a0: 69 6e 67 20 61 0a 09 20 20 20 20 23 20 63 68 65  ing a..    # che
18b0: 63 6b 6f 75 74 2c 20 61 6e 64 20 77 65 20 66 6f  ckout, and we fo
18c0: 6c 6c 6f 77 20 74 68 65 69 72 20 6c 65 61 64 2e  llow their lead.
18d0: 20 53 69 64 65 20 6e 6f 74 65 73 3a 20 27 63 76   Side notes: 'cv
18e0: 73 0a 09 20 20 20 20 23 20 6c 6f 67 27 20 66 61  s..    # log' fa
18f0: 69 6c 73 20 6f 6e 20 73 75 63 68 20 61 20 66 69  ils on such a fi
1900: 6c 65 2c 20 61 6e 64 20 27 63 76 73 20 72 6c 6f  le, and 'cvs rlo
1910: 67 27 20 70 72 69 6e 74 73 20 74 68 65 20 6c 6f  g' prints the lo
1920: 67 0a 09 20 20 20 20 23 20 6d 65 73 73 61 67 65  g..    # message
1930: 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20   from the first 
1940: 64 65 6c 74 61 2c 20 69 67 6e 6f 72 69 6e 67 20  delta, ignoring 
1950: 74 68 65 20 73 65 63 6f 6e 64 2e 0a 0a 09 20 20  the second....  
1960: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69    log write 1 fi
1970: 6c 65 20 22 49 6e 20 66 69 6c 65 20 24 6d 79 70  le "In file $myp
1980: 61 74 68 20 3a 20 44 75 70 6c 69 63 61 74 65 20  ath : Duplicate 
1990: 64 65 6c 74 61 20 64 61 74 61 20 66 6f 72 20 72  delta data for r
19a0: 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 22 0a  evision $revnr".
19b0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31  .    log write 1
19c0: 20 66 69 6c 65 20 22 49 67 6e 6f 72 69 6e 67 20   file "Ignoring 
19d0: 74 68 65 20 64 75 70 6c 69 63 61 74 65 22 0a 09  the duplicate"..
19e0: 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09      return..}...
19f0: 23 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20  # Determine the 
1a00: 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d  line of developm
1a10: 65 6e 74 20 66 6f 72 20 74 68 65 20 72 65 76 69  ent for the revi
1a20: 73 69 6f 6e 20 28 70 72 6f 6a 65 63 74 0a 09 23  sion (project..#
1a30: 20 6c 65 76 65 6c 29 2e 20 54 68 69 73 20 67 69   level). This gi
1a40: 76 65 73 20 75 73 20 74 68 65 20 62 72 61 6e 63  ves us the branc
1a50: 68 69 64 20 74 6f 6f 2c 20 72 65 71 75 69 72 65  hid too, require
1a60: 64 20 66 6f 72 20 74 68 65 0a 09 23 20 6d 65 74  d for the..# met
1a70: 61 20 64 61 74 61 20 67 72 6f 75 70 20 74 68 65  a data group the
1a80: 20 72 65 76 69 73 69 6f 6e 20 69 73 20 69 6e 2e   revision is in.
1a90: 20 28 4e 6f 74 65 3a 20 42 79 20 70 75 74 74 69   (Note: By putti
1aa0: 6e 67 20 62 6f 74 68 0a 09 23 20 62 72 61 6e 63  ng both..# branc
1ab0: 68 2f 6c 6f 64 20 61 6e 64 20 70 72 6f 6a 65 63  h/lod and projec
1ac0: 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e  t information in
1ad0: 74 6f 20 74 68 65 20 67 72 6f 75 70 20 77 65 20  to the group we 
1ae0: 65 6e 73 75 72 65 0a 09 23 20 74 68 61 74 20 61  ensure..# that a
1af0: 6e 79 20 63 72 6f 73 73 2d 70 72 6f 6a 65 63 74  ny cross-project
1b00: 20 61 6e 64 20 63 72 6f 73 73 2d 62 72 61 6e 63   and cross-branc
1b10: 68 20 63 6f 6d 6d 69 74 73 20 61 72 65 0a 09 23  h commits are..#
1b20: 20 73 65 70 61 72 61 74 65 64 20 69 6e 74 6f 20   separated into 
1b30: 6d 75 6c 74 69 70 6c 65 20 63 6f 6d 6d 69 74 73  multiple commits
1b40: 2c 20 6f 6e 65 20 69 6e 20 65 61 63 68 20 6f 66  , one in each of
1b50: 20 74 68 65 20 70 72 6f 6a 65 63 74 73 0a 09 23   the projects..#
1b60: 20 61 6e 64 2f 6f 72 20 62 72 61 6e 63 68 65 73   and/or branches
1b70: 29 2e 0a 0a 09 73 65 74 20 6c 6f 64 20 5b 24 73  )....set lod [$s
1b80: 65 6c 66 20 47 65 74 4c 4f 44 20 24 72 65 76 6e  elf GetLOD $revn
1b90: 72 5d 0a 0a 09 24 72 65 76 20 73 65 74 6d 65 74  r]...$rev setmet
1ba0: 61 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65  a [$myproject de
1bb0: 66 6d 65 74 61 20 5b 24 6c 6f 64 20 69 64 5d 20  fmeta [$lod id] 
1bc0: 24 6d 79 61 69 64 28 24 72 65 76 6e 72 29 20 24  $myaid($revnr) $
1bd0: 63 6d 69 64 5d 0a 09 24 72 65 76 20 73 65 74 74  cmid]..$rev sett
1be0: 65 78 74 20 24 74 65 78 74 72 61 6e 67 65 0a 09  ext $textrange..
1bf0: 24 72 65 76 20 73 65 74 6c 6f 64 20 20 24 6c 6f  $rev setlod  $lo
1c00: 64 0a 0a 09 23 20 49 66 20 74 68 69 73 20 69 73  d...# If this is
1c10: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 2c 20 77   revision 1.1, w
1c20: 65 20 68 61 76 65 20 74 6f 20 64 65 74 65 72 6d  e have to determ
1c30: 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 0a  ine whether the.
1c40: 09 23 20 66 69 6c 65 20 73 65 65 6d 73 20 74 6f  .# file seems to
1c50: 20 68 61 76 65 20 62 65 65 6e 20 63 72 65 61 74   have been creat
1c60: 65 64 20 74 68 72 6f 75 67 68 20 27 63 76 73 20  ed through 'cvs 
1c70: 61 64 64 27 20 69 6e 73 74 65 61 64 20 6f 66 0a  add' instead of.
1c80: 09 23 20 27 63 76 73 20 69 6d 70 6f 72 74 27 2e  .# 'cvs import'.
1c90: 20 54 68 69 73 20 63 61 6e 20 62 65 20 64 6f 6e   This can be don
1ca0: 65 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 61 74 20  e by looking at 
1cb0: 74 68 65 20 75 6e 2d 0a 09 23 20 61 64 75 6c 74  the un-..# adult
1cc0: 65 72 61 74 65 64 20 63 6f 6d 6d 69 74 20 6d 65  erated commit me
1cd0: 73 73 61 67 65 2c 20 61 73 20 43 56 53 20 75 73  ssage, as CVS us
1ce0: 65 73 20 61 20 68 61 72 64 77 69 72 65 64 20 6d  es a hardwired m
1cf0: 61 67 69 63 0a 09 23 20 6d 65 73 73 61 67 65 20  agic..# message 
1d00: 66 6f 72 20 74 68 65 20 6c 61 74 74 65 72 2c 20  for the latter, 
1d10: 69 2e 65 2e 20 22 49 6e 69 74 69 61 6c 20 72 65  i.e. "Initial re
1d20: 76 69 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a 09 23  vision\n", no..#
1d30: 20 70 65 72 69 6f 64 2e 20 20 28 54 68 69 73 20   period.  (This 
1d40: 66 61 63 74 20 61 6c 73 6f 20 68 65 6c 70 73 20  fact also helps 
1d50: 75 73 20 77 68 65 6e 20 74 68 65 20 74 69 6d 65  us when the time
1d60: 20 63 6f 6d 65 73 20 74 6f 0a 09 23 20 64 65 74   comes to..# det
1d70: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
1d80: 68 69 73 20 66 69 6c 65 20 6d 69 67 68 74 20 68  his file might h
1d90: 61 76 65 20 68 61 64 20 61 20 64 65 66 61 75 6c  ave had a defaul
1da0: 74 20 62 72 61 6e 63 68 0a 09 23 20 69 6e 20 74  t branch..# in t
1db0: 68 65 20 70 61 73 74 2e 29 0a 0a 09 69 66 20 7b  he past.)...if {
1dc0: 24 72 65 76 6e 72 20 65 71 20 22 31 2e 31 22 7d  $revnr eq "1.1"}
1dd0: 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 6d   {..    set myim
1de0: 70 6f 72 74 65 64 20 5b 65 78 70 72 20 7b 24 63  ported [expr {$c
1df0: 6f 6d 6d 69 74 6d 73 67 20 65 71 20 22 49 6e 69  ommitmsg eq "Ini
1e00: 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22  tial revision\n"
1e10: 7d 5d 0a 09 7d 0a 0a 09 23 20 48 65 72 65 20 77  }]..}...# Here w
1e20: 65 20 61 6c 73 6f 20 6b 65 65 70 20 74 72 61 63  e also keep trac
1e30: 6b 20 6f 66 20 74 68 65 20 6f 72 64 65 72 20 69  k of the order i
1e40: 6e 20 77 68 69 63 68 20 74 68 65 20 72 65 76 69  n which the revi
1e50: 73 69 6f 6e 73 0a 09 23 20 77 65 72 65 20 61 64  sions..# were ad
1e60: 64 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65 2e  ded to the file.
1e70: 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79 72 65 76  ...lappend myrev
1e80: 69 73 69 6f 6e 73 20 24 72 65 76 0a 09 72 65 74  isions $rev..ret
1e90: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
1ea0: 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b 0a  ethod done {} {.
1eb0: 09 23 20 43 6f 6d 70 6c 65 74 65 20 74 68 65 20  .# Complete the 
1ec0: 72 65 76 69 73 69 6f 6e 73 2c 20 62 72 61 6e 63  revisions, branc
1ed0: 68 65 73 2c 20 61 6e 64 20 74 61 67 73 2e 20 54  hes, and tags. T
1ee0: 68 69 73 20 69 6e 63 6c 75 64 65 73 0a 09 23 20  his includes..# 
1ef0: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6e 6f  looking for a no
1f00: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20  n-trunk default 
1f10: 62 72 61 6e 63 68 2c 20 6d 61 72 6b 69 6e 67 20  branch, marking 
1f20: 69 74 73 20 6d 65 6d 62 65 72 73 0a 09 23 20 61  its members..# a
1f30: 6e 64 20 6c 69 6e 6b 69 6e 67 20 74 68 65 6d 20  nd linking them 
1f40: 69 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2c 20  into the trunk, 
1f50: 70 6f 73 73 69 62 6c 79 20 65 78 63 6c 75 64 69  possibly excludi
1f60: 6e 67 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20  ng..# non-trunk 
1f70: 64 61 74 61 2c 20 61 6e 64 20 63 6f 6c 6c 65 63  data, and collec
1f80: 74 69 6e 67 20 61 67 67 72 65 67 61 74 65 20 73  ting aggregate s
1f90: 79 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 73  ymbol statistics
1fa0: 2e 0a 0a 09 24 73 65 6c 66 20 44 65 74 65 72 6d  ....$self Determ
1fb0: 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61  ineRevisionOpera
1fc0: 74 69 6f 6e 73 0a 09 24 73 65 6c 66 20 44 65 74  tions..$self Det
1fd0: 65 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76  ermineLinesOfDev
1fe0: 65 6c 6f 70 6d 65 6e 74 0a 09 24 73 65 6c 66 20  elopment..$self 
1ff0: 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65  HandleNonTrunkDe
2000: 66 61 75 6c 74 42 72 61 6e 63 68 0a 09 24 73 65  faultBranch..$se
2010: 6c 66 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 76  lf RemoveIrrelev
2020: 61 6e 74 44 65 6c 65 74 69 6f 6e 73 0a 09 24 73  antDeletions..$s
2030: 65 6c 66 20 52 65 6d 6f 76 65 49 6e 69 74 69 61  elf RemoveInitia
2040: 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e 73  lBranchDeletions
2050: 0a 0a 09 69 66 20 7b 5b 24 6d 79 70 72 6f 6a 65  ...if {[$myproje
2060: 63 74 20 74 72 75 6e 6b 6f 6e 6c 79 5d 7d 20 7b  ct trunkonly]} {
2070: 0a 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 6c  ..    $self Excl
2080: 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72  udeNonTrunkInfor
2090: 6d 61 74 69 6f 6e 0a 09 7d 0a 0a 09 24 73 65 6c  mation..}...$sel
20a0: 66 20 41 67 67 72 65 67 61 74 65 53 79 6d 62 6f  f AggregateSymbo
20b0: 6c 44 61 74 61 0a 09 72 65 74 75 72 6e 0a 20 20  lData..return.  
20c0: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20    }..    # # ## 
20d0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
20e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
20f0: 0a 20 20 20 20 23 23 20 50 61 73 73 20 58 49 49  .    ## Pass XII
2100: 20 28 49 6d 70 6f 72 74 29 2e 0a 0a 20 20 20 20   (Import)...    
2110: 6d 65 74 68 6f 64 20 70 75 73 68 74 6f 20 7b 72  method pushto {r
2120: 65 70 6f 73 69 74 6f 72 79 7d 20 7b 0a 09 73 65  epository} {..se
2130: 74 20 77 73 20 5b 24 72 65 70 6f 73 69 74 6f 72  t ws [$repositor
2140: 79 20 77 6f 72 6b 73 70 61 63 65 5d 0a 09 73 74  y workspace]..st
2150: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67  ruct::list assig
2160: 6e 20 5b 24 73 65 6c 66 20 45 78 70 61 6e 64 20  n [$self Expand 
2170: 24 77 73 5d 20 66 69 6c 65 6d 61 70 20 72 65 76  $ws] filemap rev
2180: 6d 61 70 0a 09 23 20 66 69 6c 65 6d 61 70 20 3d  map..# filemap =
2190: 20 64 69 63 74 20 28 70 61 74 68 20 2d 3e 20 75   dict (path -> u
21a0: 75 69 64 29 0a 09 23 20 72 65 76 6d 61 70 20 20  uid)..# revmap  
21b0: 3d 20 64 69 63 74 20 28 70 61 74 68 20 2d 3e 20  = dict (path -> 
21c0: 72 69 64 29 0a 0a 09 61 72 72 61 79 20 73 65 74  rid)...array set
21d0: 20 69 64 6d 61 70 20 5b 24 72 65 70 6f 73 69 74   idmap [$reposit
21e0: 6f 72 79 20 69 6d 70 6f 72 74 66 69 6c 65 73 20  ory importfiles 
21f0: 24 66 69 6c 65 6d 61 70 5d 0a 0a 09 23 20 57 69  $filemap]...# Wi
2200: 70 65 20 77 6f 72 6b 73 70 61 63 65 20 63 6c 65  pe workspace cle
2210: 61 6e 20 6f 66 20 74 68 65 20 69 6d 70 6f 72 74  an of the import
2220: 65 64 20 66 69 6c 65 73 2e 0a 09 66 6f 72 65 61  ed files...forea
2230: 63 68 20 78 20 5b 67 6c 6f 62 20 2d 64 69 72 65  ch x [glob -dire
2240: 63 74 6f 72 79 20 24 77 73 20 72 2a 5d 20 7b 20  ctory $ws r*] { 
2250: 3a 3a 66 69 6c 65 20 64 65 6c 65 74 65 20 24 78  ::file delete $x
2260: 20 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 70 61   }...foreach {pa
2270: 74 68 20 72 69 64 7d 20 24 72 65 76 6d 61 70 20  th rid} $revmap 
2280: 7b 0a 09 20 20 20 20 73 65 74 20 75 75 69 64 20  {..    set uuid 
2290: 24 69 64 6d 61 70 28 24 70 61 74 68 29 0a 09 20  $idmap($path).. 
22a0: 20 20 20 73 74 61 74 65 20 72 75 6e 20 7b 0a 09     state run {..
22b0: 09 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 65 76  .INSERT INTO rev
22c0: 75 75 69 64 20 28 72 69 64 2c 20 20 75 75 69 64  uuid (rid,  uuid
22d0: 29 0a 09 09 56 41 4c 55 45 53 20 20 20 20 20 20  )...VALUES      
22e0: 20 20 20 20 20 20 20 20 28 24 72 69 64 2c 20 24          ($rid, $
22f0: 75 75 69 64 29 0a 09 20 20 20 20 7d 0a 09 7d 0a  uuid)..    }..}.
2300: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
2310: 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64     method Expand
2320: 20 7b 64 69 72 7d 20 7b 0a 09 73 65 74 20 65 78   {dir} {..set ex
2330: 20 5b 73 74 72 75 63 74 3a 3a 67 72 61 70 68 20   [struct::graph 
2340: 65 78 5d 20 3b 20 23 20 45 78 70 61 6e 73 69 6f  ex] ; # Expansio
2350: 6e 20 67 72 61 70 68 2e 0a 09 73 65 74 20 7a 70  n graph...set zp
2360: 20 5b 73 74 72 75 63 74 3a 3a 67 72 61 70 68 20   [struct::graph 
2370: 7a 70 5d 20 3b 20 23 20 5a 69 70 2f 49 6d 70 6f  zp] ; # Zip/Impo
2380: 72 74 20 67 72 61 70 68 2e 0a 0a 09 63 6c 6f 73  rt graph....clos
2390: 65 20 5b 6f 70 65 6e 20 24 64 69 72 2f 72 5f 5f  e [open $dir/r__
23a0: 65 6d 70 74 79 5f 5f 20 77 5d 3b 23 20 42 61 73  empty__ w];# Bas
23b0: 65 20 66 6f 72 20 64 65 74 61 63 68 65 64 20 72  e for detached r
23c0: 6f 6f 74 73 20 6f 6e 20 62 72 61 6e 63 68 65 73  oots on branches
23d0: 2e 0a 0a 09 23 20 50 68 61 73 65 20 49 3a 20 50  ....# Phase I: P
23e0: 75 6c 6c 20 74 68 65 20 72 65 76 69 73 69 6f 6e  ull the revision
23f0: 73 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 61 6e  s from memory an
2400: 64 20 66 69 6c 6c 20 74 68 65 20 67 72 61 70 68  d fill the graph
2410: 73 0a 09 23 20 20 20 20 20 20 20 20 20 20 77 69  s..#          wi
2420: 74 68 20 74 68 65 6d 2e 2e 2e 0a 0a 09 73 65 74  th them......set
2430: 20 65 61 72 63 73 20 20 20 7b 7d 20 3b 20 23 20   earcs   {} ; # 
2440: 41 72 63 73 20 66 6f 72 20 65 78 70 61 6e 73 69  Arcs for expansi
2450: 6f 6e 20 67 72 61 70 68 0a 09 73 65 74 20 7a 61  on graph..set za
2460: 72 63 73 20 20 20 7b 7d 20 3b 20 23 20 41 72 63  rcs   {} ; # Arc
2470: 73 20 66 6f 72 20 7a 69 70 20 67 72 61 70 68 0a  s for zip graph.
2480: 09 73 65 74 20 72 65 76 6d 61 70 20 20 7b 7d 20  .set revmap  {} 
2490: 3b 20 23 20 70 61 74 68 20 2d 3e 20 72 69 64 20  ; # path -> rid 
24a0: 6d 61 70 20 74 6f 20 6c 61 74 65 72 20 6d 65 72  map to later mer
24b0: 67 65 20 75 75 69 64 20 69 6e 66 6f 72 6d 61 74  ge uuid informat
24c0: 69 6f 6e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72  ion...foreach {r
24d0: 69 64 20 72 65 76 6e 72 20 70 61 72 65 6e 74 20  id revnr parent 
24e0: 63 68 69 6c 64 20 63 6f 66 66 20 63 6c 65 6e 7d  child coff clen}
24f0: 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20   [state run {.. 
2500: 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c     SELECT R.rid,
2510: 20 52 2e 72 65 76 2c 20 52 2e 70 61 72 65 6e 74   R.rev, R.parent
2520: 2c 20 52 2e 63 68 69 6c 64 2c 20 52 2e 63 6f 66  , R.child, R.cof
2530: 66 2c 20 52 2e 63 6c 65 6e 0a 09 20 20 20 20 46  f, R.clen..    F
2540: 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52  ROM   revision R
2550: 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e 66  ..    WHERE  R.f
2560: 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 7b  id = $myid..}] {
2570: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ..    lappend re
2580: 76 6d 61 70 20 72 24 72 65 76 6e 72 20 24 72 69  vmap r$revnr $ri
2590: 64 0a 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64 65  d...    $zp node
25a0: 20 69 6e 73 65 72 74 20 24 72 69 64 0a 09 20 20   insert $rid..  
25b0: 20 20 24 7a 70 20 6e 6f 64 65 20 73 65 74 20 20    $zp node set  
25c0: 20 20 24 72 69 64 20 72 65 76 6e 72 20 24 72 65    $rid revnr $re
25d0: 76 6e 72 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64  vnr..    $zp nod
25e0: 65 20 73 65 74 20 20 20 20 24 72 69 64 20 6c 61  e set    $rid la
25f0: 62 65 6c 20 3c 24 72 65 76 6e 72 3e 0a 0a 09 20  bel <$revnr>... 
2600: 20 20 20 69 66 20 7b 24 63 68 69 6c 64 20 6e 65     if {$child ne
2610: 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64   ""} {...lappend
2620: 20 7a 61 72 63 73 20 24 63 68 69 6c 64 20 24 72   zarcs $child $r
2630: 69 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  id..    }...    
2640: 24 65 78 20 6e 6f 64 65 20 69 6e 73 65 72 74 20  $ex node insert 
2650: 24 72 69 64 0a 09 20 20 20 20 24 65 78 20 6e 6f  $rid..    $ex no
2660: 64 65 20 73 65 74 20 20 20 20 24 72 69 64 20 74  de set    $rid t
2670: 65 78 74 20 20 5b 6c 69 73 74 20 24 63 6f 66 66  ext  [list $coff
2680: 20 24 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65 78   $clen]..    $ex
2690: 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 72 69   node set    $ri
26a0: 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a 09  d revnr $revnr..
26b0: 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 65 74      $ex node set
26c0: 20 20 20 20 24 72 69 64 20 6c 61 62 65 6c 20 3c      $rid label <
26d0: 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69 66  $revnr>...    if
26e0: 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65   {[rev istrunkre
26f0: 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09  vnr $revnr]} {..
2700: 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b 2c  .# On the trunk,
2710: 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69   this revision i
2720: 73 20 61 20 64 65 6c 74 61 20 62 61 73 65 64 20  s a delta based 
2730: 6f 6e 20 74 68 65 0a 09 09 23 20 63 68 69 6c 64  on the...# child
2740: 2e 20 54 68 61 74 20 6d 61 6b 65 73 20 74 68 65  . That makes the
2750: 20 63 68 69 6c 64 20 6f 75 72 20 70 72 65 64 65   child our prede
2760: 63 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b 24  cessor.....if {$
2770: 63 68 69 6c 64 20 65 71 20 22 22 7d 20 63 6f 6e  child eq ""} con
2780: 74 69 6e 75 65 0a 09 09 6c 61 70 70 65 6e 64 20  tinue...lappend 
2790: 65 61 72 63 73 20 24 63 68 69 6c 64 20 24 72 69  earcs $child $ri
27a0: 64 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  d..    } else {.
27b0: 09 09 23 20 4f 6e 20 61 20 62 72 61 6e 63 68 20  ..# On a branch 
27c0: 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69 73  this revision is
27d0: 20 61 20 64 65 6c 74 61 20 62 61 73 65 64 20 6f   a delta based o
27e0: 6e 20 74 68 65 0a 09 09 23 20 70 61 72 65 6e 74  n the...# parent
27f0: 2e 20 54 68 61 74 20 6d 61 6b 65 73 20 74 68 65  . That makes the
2800: 20 70 61 72 65 6e 74 20 6f 75 72 20 70 72 65 64   parent our pred
2810: 65 63 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b  ecessor.....if {
2820: 24 70 61 72 65 6e 74 20 65 71 20 22 22 7d 20 7b  $parent eq ""} {
2830: 0a 09 09 20 20 20 20 23 20 44 65 74 61 63 68 65  ...    # Detache
2840: 64 20 62 72 61 6e 63 68 20 72 6f 6f 74 2c 20 74  d branch root, t
2850: 68 69 73 20 69 73 20 61 20 70 61 74 63 68 20 62  his is a patch b
2860: 61 73 65 64 20 6f 6e 0a 09 09 20 20 20 20 23 20  ased on...    # 
2870: 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e 67  the empty string
2880: 2e 0a 09 09 20 20 20 20 24 65 78 20 6e 6f 64 65  ....    $ex node
2890: 20 73 65 74 20 24 72 69 64 20 5f 5f 62 61 73 65   set $rid __base
28a0: 5f 5f 20 72 5f 5f 65 6d 70 74 79 5f 5f 20 0a 09  __ r__empty__ ..
28b0: 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09 09  .    continue...
28c0: 7d 0a 09 09 6c 61 70 70 65 6e 64 20 65 61 72 63  }...lappend earc
28d0: 73 20 24 70 61 72 65 6e 74 20 24 72 69 64 0a 09  s $parent $rid..
28e0: 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 50 68 61      }..}...# Pha
28f0: 73 65 20 49 49 3a 20 49 6e 73 65 72 74 20 74 68  se II: Insert th
2900: 65 20 61 63 63 75 6d 75 6c 61 74 65 64 20 64 65  e accumulated de
2910: 70 65 6e 64 65 6e 63 69 65 73 0a 0a 09 66 6f 72  pendencies...for
2920: 65 61 63 68 20 7b 66 72 6f 6d 20 74 6f 7d 20 24  each {from to} $
2930: 65 61 72 63 73 20 7b 20 24 65 78 20 61 72 63 20  earcs { $ex arc 
2940: 69 6e 73 65 72 74 20 24 66 72 6f 6d 20 24 74 6f  insert $from $to
2950: 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 66 72 6f   }..foreach {fro
2960: 6d 20 74 6f 7d 20 24 7a 61 72 63 73 20 7b 20 24  m to} $zarcs { $
2970: 7a 70 20 61 72 63 20 69 6e 73 65 72 74 20 24 66  zp arc insert $f
2980: 72 6f 6d 20 24 74 6f 20 7d 0a 0a 09 23 20 50 68  rom $to }...# Ph
2990: 61 73 65 20 49 49 49 3a 20 54 72 61 76 65 72 73  ase III: Travers
29a0: 65 20 74 68 65 20 67 72 61 70 68 73 2c 20 65 78  e the graphs, ex
29b0: 70 61 6e 64 20 74 68 65 20 66 69 6c 65 2c 20 61  pand the file, a
29c0: 6e 64 0a 09 23 20 20 20 20 20 20 20 20 20 20 20  nd..#           
29d0: 20 67 65 6e 65 72 61 74 65 20 69 6d 70 6f 72 74   generate import
29e0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a 0a   instructions...
29f0: 09 73 65 74 20 61 72 63 68 69 76 65 20 5b 3a 3a  .set archive [::
2a00: 66 69 6c 65 20 6a 6f 69 6e 20 5b 24 6d 79 70 72  file join [$mypr
2a10: 6f 6a 65 63 74 20 66 75 6c 6c 70 61 74 68 5d 20  oject fullpath] 
2a20: 24 6d 79 70 61 74 68 5d 0a 09 73 65 74 20 61 63  $mypath]..set ac
2a30: 20 20 20 20 20 20 5b 6f 70 65 6e 20 24 61 72 63        [open $arc
2a40: 68 69 76 65 20 72 5d 0a 09 66 63 6f 6e 66 69 67  hive r]..fconfig
2a50: 75 72 65 20 24 61 63 20 2d 74 72 61 6e 73 6c 61  ure $ac -transla
2a60: 74 69 6f 6e 20 62 69 6e 61 72 79 0a 0a 09 23 20  tion binary...# 
2a70: 46 69 72 73 74 20 74 72 61 76 65 72 73 65 20 74  First traverse t
2a80: 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 61  he expansion gra
2a90: 70 68 2c 20 74 68 69 73 20 67 69 76 65 73 20 75  ph, this gives u
2aa0: 73 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f  s the..# revisio
2ab0: 6e 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20  ns in the order 
2ac0: 77 65 20 68 61 76 65 20 74 6f 20 65 78 70 61 6e  we have to expan
2ad0: 64 20 74 68 65 6d 2c 20 77 68 69 63 68 20 77 65  d them, which we
2ae0: 20 64 6f 2e 0a 0a 09 73 65 74 20 6d 61 78 20 5b   do....set max [
2af0: 6c 6c 65 6e 67 74 68 20 5b 24 65 78 20 6e 6f 64  llength [$ex nod
2b00: 65 73 5d 5d 0a 09 73 65 74 20 6d 79 69 6d 70 6f  es]]..set myimpo
2b10: 72 74 20 30 0a 0a 09 67 74 63 6f 72 65 20 64 61  rt 0...gtcore da
2b20: 74 61 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f  tacmd   [mymetho
2b30: 64 20 45 78 70 61 6e 64 44 61 74 61 5d 0a 09 67  d ExpandData]..g
2b40: 74 63 6f 72 65 20 66 6f 72 6d 61 74 63 6d 64 20  tcore formatcmd 
2b50: 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64  [mymethod Expand
2b60: 46 6f 72 6d 61 74 5d 0a 09 67 74 63 6f 72 65 20  Format]..gtcore 
2b70: 73 6f 72 74 63 6d 64 20 20 20 5b 6d 79 6d 65 74  sortcmd   [mymet
2b80: 68 6f 64 20 45 78 70 61 6e 64 53 6f 72 74 5d 0a  hod ExpandSort].
2b90: 09 67 74 63 6f 72 65 20 73 61 76 65 63 6d 64 20  .gtcore savecmd 
2ba0: 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61    [mymethod Expa
2bb0: 6e 64 31 20 24 61 63 20 24 64 69 72 20 24 6d 61  nd1 $ac $dir $ma
2bc0: 78 5d 0a 0a 09 67 74 63 6f 72 65 20 74 72 61 76  x]...gtcore trav
2bd0: 65 72 73 65 20 24 65 78 20 7b 45 78 70 61 6e 64  erse $ex {Expand
2be0: 69 6e 67 20 72 65 76 69 73 69 6f 6e 73 2e 2e 2e  ing revisions...
2bf0: 7d 0a 09 63 6c 6f 73 65 20 24 61 63 0a 0a 09 23  }..close $ac...#
2c00: 20 4e 6f 77 20 74 72 61 76 65 72 73 65 20 74 68   Now traverse th
2c10: 65 20 69 6d 70 6f 72 74 20 67 72 61 70 68 2c 20  e import graph, 
2c20: 74 68 69 73 20 62 75 69 6c 64 73 20 74 68 65 20  this builds the 
2c30: 69 6e 73 74 72 75 63 74 69 6f 6e 0a 09 23 20 6d  instruction..# m
2c40: 61 70 20 66 6f 72 20 74 68 65 20 66 6f 73 73 69  ap for the fossi
2c50: 6c 20 64 65 6c 74 61 73 2e 0a 0a 09 67 74 63 6f  l deltas....gtco
2c60: 72 65 20 64 61 74 61 63 6d 64 20 20 20 5b 6d 79  re datacmd   [my
2c70: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74  method ExpandDat
2c80: 61 5d 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d 61  a]..gtcore forma
2c90: 74 63 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20 45  tcmd [mymethod E
2ca0: 78 70 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67 74  xpandFormat]..gt
2cb0: 63 6f 72 65 20 73 6f 72 74 63 6d 64 20 20 20 5b  core sortcmd   [
2cc0: 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53  mymethod ExpandS
2cd0: 6f 72 74 5d 0a 09 67 74 63 6f 72 65 20 73 61 76  ort]..gtcore sav
2ce0: 65 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64  ecmd   [mymethod
2cf0: 20 45 78 70 61 6e 64 32 5d 0a 0a 09 73 65 74 20   Expand2]...set 
2d00: 6d 79 69 6d 70 6f 72 74 20 7b 7d 0a 09 67 74 63  myimport {}..gtc
2d10: 6f 72 65 20 74 72 61 76 65 72 73 65 20 24 7a 70  ore traverse $zp
2d20: 20 7b 47 65 6e 65 72 61 74 69 6e 67 20 72 65 76   {Generating rev
2d30: 69 73 69 6f 6e 20 6f 72 64 65 72 20 66 6f 72 20  ision order for 
2d40: 69 6d 70 6f 72 74 2e 2e 2e 7d 0a 09 73 65 74 20  import...}..set 
2d50: 66 69 6c 65 6d 61 70 20 24 6d 79 69 6d 70 6f 72  filemap $myimpor
2d60: 74 0a 09 75 6e 73 65 74 20 6d 79 69 6d 70 6f 72  t..unset myimpor
2d70: 74 0a 0a 09 23 20 41 6e 64 20 62 61 63 6b 20 74  t...# And back t
2d80: 6f 20 69 6d 70 6f 72 74 20 63 6f 6e 74 72 6f 6c  o import control
2d90: 0a 0a 09 24 65 78 20 64 65 73 74 72 6f 79 0a 09  ...$ex destroy..
2da0: 24 7a 70 20 64 65 73 74 72 6f 79 0a 0a 09 72 65  $zp destroy...re
2db0: 74 75 72 6e 20 5b 6c 69 73 74 20 24 66 69 6c 65  turn [list $file
2dc0: 6d 61 70 20 24 72 65 76 6d 61 70 5d 0a 20 20 20  map $revmap].   
2dd0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45   }..    method E
2de0: 78 70 61 6e 64 44 61 74 61 20 20 20 7b 67 72 61  xpandData   {gra
2df0: 70 68 20 6e 6f 64 65 7d 20 7b 20 72 65 74 75 72  ph node} { retur
2e00: 6e 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67  n [$graph node g
2e10: 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 20  et $node revnr] 
2e20: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70  }.    method Exp
2e30: 61 6e 64 46 6f 72 6d 61 74 20 7b 67 72 61 70 68  andFormat {graph
2e40: 20 69 74 65 6d 7d 20 7b 20 72 65 74 75 72 6e 20   item} { return 
2e50: 3c 5b 6c 69 6e 64 65 78 20 24 69 74 65 6d 20 31  <[lindex $item 1
2e60: 5d 3e 20 7d 20 3b 20 23 20 72 65 76 6e 72 0a 20  ]> } ; # revnr. 
2e70: 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64     method Expand
2e80: 53 6f 72 74 20 20 20 7b 67 72 61 70 68 20 63 61  Sort   {graph ca
2e90: 6e 64 69 64 61 74 65 73 7d 20 7b 0a 09 23 20 63  ndidates} {..# c
2ea0: 61 6e 64 69 64 61 74 65 73 20 3d 20 6c 69 73 74  andidates = list
2eb0: 28 69 74 65 6d 29 2c 20 69 74 65 6d 20 3d 20 6c  (item), item = l
2ec0: 69 73 74 28 6e 6f 64 65 20 72 65 76 6e 72 29 0a  ist(node revnr).
2ed0: 09 23 20 53 6f 72 74 20 62 79 20 6e 6f 64 65 20  .# Sort by node 
2ee0: 61 6e 64 20 72 65 76 6e 72 20 2d 3e 20 54 72 75  and revnr -> Tru
2ef0: 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d  nk revisions com
2f00: 65 20 66 69 72 73 74 2e 0a 09 72 65 74 75 72 6e  e first...return
2f10: 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 31   [lsort -index 1
2f20: 20 2d 64 69 63 74 20 5b 6c 73 6f 72 74 20 2d 69   -dict [lsort -i
2f30: 6e 64 65 78 20 30 20 2d 64 69 63 74 20 24 63 61  ndex 0 -dict $ca
2f40: 6e 64 69 64 61 74 65 73 5d 5d 0a 20 20 20 20 7d  ndidates]].    }
2f50: 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61  .    method Expa
2f60: 6e 64 31 20 7b 63 68 61 6e 20 64 69 72 20 6d 61  nd1 {chan dir ma
2f70: 78 20 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a  x graph node} {.
2f80: 09 6c 6f 67 20 70 72 6f 67 72 65 73 73 20 33 20  .log progress 3 
2f90: 66 69 6c 65 20 24 6d 79 69 6d 70 6f 72 74 20 24  file $myimport $
2fa0: 6d 61 78 20 3b 20 69 6e 63 72 20 6d 79 69 6d 70  max ; incr myimp
2fb0: 6f 72 74 0a 0a 09 73 65 74 20 72 65 76 6e 72 20  ort...set revnr 
2fc0: 20 20 20 20 20 20 20 20 20 20 5b 24 67 72 61 70            [$grap
2fd0: 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65  h node get $node
2fe0: 20 72 65 76 6e 72 5d 0a 09 73 65 74 20 66 6e 61   revnr]..set fna
2ff0: 6d 65 20 20 20 20 20 20 20 20 20 20 72 24 72 65  me          r$re
3000: 76 6e 72 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73  vnr..struct::lis
3010: 74 20 61 73 73 69 67 6e 20 5b 24 67 72 61 70 68  t assign [$graph
3020: 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20   node get $node 
3030: 74 65 78 74 5d 20 6f 66 66 73 65 74 20 6c 65 6e  text] offset len
3040: 67 74 68 0a 0a 09 69 66 20 7b 24 6c 65 6e 67 74  gth...if {$lengt
3050: 68 20 3c 20 30 7d 20 7b 0a 09 20 20 20 20 73 65  h < 0} {..    se
3060: 74 20 64 61 74 61 20 22 22 0a 09 7d 20 65 6c 73  t data ""..} els
3070: 65 20 7b 0a 09 20 20 20 20 73 65 65 6b 20 24 63  e {..    seek $c
3080: 68 61 6e 20 24 6f 66 66 73 65 74 20 73 74 61 72  han $offset star
3090: 74 0a 09 20 20 20 20 73 65 74 20 64 61 74 61 20  t..    set data 
30a0: 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 40 40 20  [string map {@@ 
30b0: 40 7d 20 5b 72 65 61 64 20 24 63 68 61 6e 20 24  @} [read $chan $
30c0: 6c 65 6e 67 74 68 5d 5d 0a 09 7d 0a 0a 09 69 66  length]]..}...if
30d0: 20 7b 21 5b 24 67 72 61 70 68 20 6e 6f 64 65 20   {![$graph node 
30e0: 6b 65 79 65 78 69 73 74 73 20 24 6e 6f 64 65 20  keyexists $node 
30f0: 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a 09 20 20  __base__]} {..  
3100: 20 20 23 20 46 75 6c 6c 20 74 65 78 74 20 6e 6f    # Full text no
3110: 64 65 2e 20 47 65 74 20 74 68 65 20 64 61 74 61  de. Get the data
3120: 2c 20 64 65 63 6f 64 65 20 69 74 2c 20 61 6e 64  , decode it, and
3130: 20 73 61 76 65 2e 0a 0a 09 20 20 20 20 6c 6f 67   save....    log
3140: 20 77 72 69 74 65 20 38 20 66 69 6c 65 20 7b 45   write 8 file {E
3150: 78 70 61 6e 64 69 6e 67 20 3c 24 72 65 76 6e 72  xpanding <$revnr
3160: 3e 2c 20 66 75 6c 6c 20 74 65 78 74 7d 0a 0a 09  >, full text}...
3170: 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72      fileutil::wr
3180: 69 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61  iteFile -transla
3190: 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72  tion binary $dir
31a0: 2f 24 66 6e 61 6d 65 20 24 64 61 74 61 0a 09 7d  /$fname $data..}
31b0: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 20 44   else {..    # D
31c0: 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 73  elta node. __bas
31d0: 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65 20  e__ is the name 
31e0: 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74  of the file cont
31f0: 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74 68  aining..    # th
3200: 65 20 62 61 73 65 6c 69 6e 65 2e 20 54 68 65 20  e baseline. The 
3210: 70 61 74 63 68 20 69 73 20 61 74 20 74 68 65 20  patch is at the 
3220: 73 70 65 63 69 66 69 65 64 20 6c 6f 63 61 74 69  specified locati
3230: 6f 6e 20 6f 66 0a 09 20 20 20 20 23 20 74 68 65  on of..    # the
3240: 20 61 72 63 68 69 76 65 20 66 69 6c 65 2e 0a 0a   archive file...
3250: 09 20 20 20 20 73 65 74 20 66 62 61 73 65 20 5b  .    set fbase [
3260: 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20  $graph node get 
3270: 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a  $node __base__].
3280: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38  .    log write 8
3290: 20 66 69 6c 65 20 7b 45 78 70 61 6e 64 69 6e 67   file {Expanding
32a0: 20 3c 24 72 65 76 6e 72 3e 2c 20 69 73 20 64 65   <$revnr>, is de
32b0: 6c 74 61 20 6f 66 20 3c 24 66 62 61 73 65 3e 7d  lta of <$fbase>}
32c0: 0a 0a 09 20 20 20 20 73 65 74 20 62 61 73 65 20  ...    set base 
32d0: 5b 66 69 6c 65 75 74 69 6c 3a 3a 63 61 74 20 2d  [fileutil::cat -
32e0: 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61  translation bina
32f0: 72 79 20 24 64 69 72 2f 24 66 62 61 73 65 5d 0a  ry $dir/$fbase].
3300: 0a 09 20 20 20 20 23 20 57 72 69 74 69 6e 67 20  ..    # Writing 
3310: 74 68 65 20 70 61 74 63 68 20 74 6f 20 64 69 73  the patch to dis
3320: 6b 20 69 73 20 6a 75 73 74 20 66 6f 72 20 62 65  k is just for be
3330: 74 74 65 72 0a 09 20 20 20 20 23 20 64 65 62 75  tter..    # debu
3340: 67 67 69 6e 67 2e 20 49 74 20 69 73 20 6e 6f 74  gging. It is not
3350: 20 75 73 65 64 20 6f 74 68 65 72 77 69 73 65 2e   used otherwise.
3360: 0a 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a  ..    fileutil::
3370: 77 72 69 74 65 46 69 6c 65 20 24 64 69 72 2f 72  writeFile $dir/r
3380: 70 61 74 63 68 20 24 64 61 74 61 0a 09 20 20 20  patch $data..   
3390: 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74 65   fileutil::write
33a0: 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61 74 69 6f  File -translatio
33b0: 6e 20 62 69 6e 61 72 79 20 24 64 69 72 2f 24 66  n binary $dir/$f
33c0: 6e 61 6d 65 20 5c 0a 09 09 5b 41 70 70 6c 79 20  name \...[Apply 
33d0: 24 62 61 73 65 20 24 64 61 74 61 5d 0a 09 7d 0a  $base $data]..}.
33e0: 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20  ..# Post to all 
33f0: 73 75 63 63 65 73 73 6f 72 73 20 74 68 61 74 20  successors that 
3400: 74 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74  the just generat
3410: 65 64 20 66 69 6c 65 20 69 73 20 74 68 65 69 72  ed file is their
3420: 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e 0a 0a 09  ..# baseline....
3430: 66 6f 72 65 61 63 68 20 6f 75 74 20 5b 24 67 72  foreach out [$gr
3440: 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74 20 24  aph nodes -out $
3450: 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 24 67 72  node] {..    $gr
3460: 61 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f 75  aph node set $ou
3470: 74 20 5f 5f 62 61 73 65 5f 5f 20 24 66 6e 61 6d  t __base__ $fnam
3480: 65 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  e..}..return.   
3490: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 41 70 70   }..    proc App
34a0: 6c 79 20 7b 62 61 73 65 20 64 65 6c 74 61 7d 20  ly {base delta} 
34b0: 7b 0a 09 23 20 62 61 73 65 20 20 3d 20 62 61 73  {..# base  = bas
34c0: 65 20 74 65 78 74 2e 0a 09 23 20 64 65 6c 74 61  e text...# delta
34d0: 20 3d 20 64 65 6c 74 61 20 69 6e 20 72 63 73 20   = delta in rcs 
34e0: 66 6f 72 6d 61 74 2e 0a 09 23 0a 09 23 20 42 6f  format...#..# Bo
34f0: 74 68 20 73 74 72 69 6e 67 73 20 61 72 65 20 75  th strings are u
3500: 6e 65 6e 63 6f 64 65 64 2c 20 69 2e 65 2e 20 74  nencoded, i.e. t
3510: 68 69 6e 67 73 20 6c 69 6b 65 20 40 40 2c 20 65  hings like @@, e
3520: 74 63 2e 20 68 61 76 65 0a 09 23 20 61 6c 72 65  tc. have..# alre
3530: 61 64 79 20 62 65 65 6e 20 72 65 70 6c 61 63 65  ady been replace
3540: 64 20 77 69 74 68 20 74 68 65 69 72 20 70 72 6f  d with their pro
3550: 70 65 72 20 63 68 61 72 61 63 74 65 72 73 2e 0a  per characters..
3560: 09 23 0a 09 23 20 52 65 74 75 72 6e 20 76 61 6c  .#..# Return val
3570: 75 65 20 69 73 20 74 68 65 20 70 61 74 63 68 65  ue is the patche
3580: 64 20 74 65 78 74 2e 0a 0a 09 73 65 74 20 62 61  d text....set ba
3590: 73 65 20 5b 73 70 6c 69 74 20 24 62 61 73 65 20  se [split $base 
35a0: 5c 6e 5d 0a 09 73 65 74 20 62 6c 65 6e 20 5b 6c  \n]..set blen [l
35b0: 6c 65 6e 67 74 68 20 24 62 61 73 65 5d 0a 09 73  length $base]..s
35c0: 65 74 20 6f 6f 66 66 20 30 0a 09 73 65 74 20 72  et ooff 0..set r
35d0: 65 73 20 22 22 0a 0a 09 73 65 74 20 6c 69 6e 65  es ""...set line
35e0: 73 20 20 5b 73 70 6c 69 74 20 24 64 65 6c 74 61  s  [split $delta
35f0: 20 5c 6e 5d 0a 09 73 65 74 20 6e 6c 69 6e 65 73   \n]..set nlines
3600: 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 73   [llength $lines
3610: 5d 0a 0a 09 66 6f 72 20 7b 73 65 74 20 69 20 30  ]...for {set i 0
3620: 7d 20 7b 24 69 20 3c 20 24 6e 6c 69 6e 65 73 7d  } {$i < $nlines}
3630: 20 7b 7d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21   {} {..    if {!
3640: 5b 72 65 67 65 78 70 20 7b 5e 28 5b 61 64 5d 29  [regexp {^([ad])
3650: 28 5c 64 2b 29 5c 73 28 5c 64 2b 29 24 7d 20 5b  (\d+)\s(\d+)$} [
3660: 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69  lindex $lines $i
3670: 5d 20 2d 3e 20 63 6d 64 20 73 6c 20 63 6e 5d 7d  ] -> cmd sl cn]}
3680: 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 69 6e 74   {...trouble int
3690: 65 72 6e 61 6c 20 22 42 61 64 20 65 64 20 63 6f  ernal "Bad ed co
36a0: 6d 6d 61 6e 64 20 27 5b 6c 69 6e 64 65 78 20 24  mmand '[lindex $
36b0: 6c 69 6e 65 73 20 24 69 5d 27 22 0a 09 20 20 20  lines $i]'"..   
36c0: 20 7d 0a 0a 09 20 20 20 20 69 6e 63 72 20 69 0a   }...    incr i.
36d0: 09 20 20 20 20 73 65 74 20 65 6c 20 5b 65 78 70  .    set el [exp
36e0: 72 20 7b 24 73 6c 20 2b 20 24 63 6e 7d 5d 0a 0a  r {$sl + $cn}]..
36f0: 09 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61  .    switch -exa
3700: 63 74 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 64  ct -- $cmd {...d
3710: 20 7b 0a 09 09 20 20 20 20 69 6e 63 72 20 73 6c   {...    incr sl
3720: 20 2d 31 0a 09 09 20 20 20 20 69 6e 63 72 20 65   -1...    incr e
3730: 6c 20 2d 31 0a 09 09 20 20 20 20 69 66 20 7b 24  l -1...    if {$
3740: 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72  sl < $ooff} { tr
3750: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b  ouble internal {
3760: 44 65 6c 65 74 69 6f 6e 20 62 65 66 6f 72 65 20  Deletion before 
3770: 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 09 20  last edit} }... 
3780: 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c     if {$sl > $bl
3790: 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e  en} { trouble in
37a0: 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e  ternal {Deletion
37b0: 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64 7d 20   past file end} 
37c0: 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 65 6c 20  }...    if {$el 
37d0: 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62  > $blen} { troub
37e0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c  le internal {Del
37f0: 65 74 69 6f 6e 20 62 65 79 6f 6e 64 20 66 69 6c  etion beyond fil
3800: 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20 20 20 66  e end} }...    f
3810: 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 65  oreach x [lrange
3820: 20 24 62 61 73 65 20 24 6f 6f 66 66 20 24 73 6c   $base $ooff $sl
3830: 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20  ] { lappend res 
3840: 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74 20 20  $x }...    set  
3850: 6f 6f 66 66 20 24 65 6c 0a 09 09 7d 0a 09 09 61  ooff $el...}...a
3860: 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c   {...    if {$sl
3870: 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72 6f 75   < $ooff} { trou
3880: 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49 6e  ble internal {In
3890: 73 65 72 74 20 62 65 66 6f 72 65 20 6c 61 73 74  sert before last
38a0: 20 65 64 69 74 7d 20 7d 0a 09 09 20 20 20 20 69   edit} }...    i
38b0: 66 20 7b 24 73 6c 20 3e 20 24 62 6c 65 6e 7d 20  f {$sl > $blen} 
38c0: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e  { trouble intern
38d0: 61 6c 20 7b 49 6e 73 65 72 74 20 70 61 73 74 20  al {Insert past 
38e0: 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 0a 09 09 20  file end} }.... 
38f0: 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c 72     foreach x [lr
3900: 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66  ange $base $ooff
3910: 20 24 73 6c 5d 20 20 20 20 20 20 20 20 20 20 20   $sl]           
3920: 20 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20    { lappend res 
3930: 24 78 20 7d 0a 09 09 20 20 20 20 66 6f 72 65 61  $x }...    forea
3940: 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 6c 69  ch x [lrange $li
3950: 6e 65 73 20 24 69 20 5b 65 78 70 72 20 7b 24 69  nes $i [expr {$i
3960: 20 2b 20 24 63 6e 7d 5d 5d 20 7b 20 6c 61 70 70   + $cn}]] { lapp
3970: 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 09 20  end res $x }... 
3980: 20 20 20 73 65 74 20 6f 6f 66 66 20 24 73 6c 0a     set ooff $sl.
3990: 09 09 20 20 20 20 69 6e 63 72 20 69 20 24 63 6e  ..    incr i $cn
39a0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  ...}..    }..}..
39b0: 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67  foreach x [lrang
39c0: 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 65 6e  e $base $ooff en
39d0: 64 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73  d] { lappend res
39e0: 20 24 78 20 7d 0a 09 72 65 74 75 72 6e 20 5b 6a   $x }..return [j
39f0: 6f 69 6e 20 24 72 65 73 20 5c 6e 5d 0a 20 20 20  oin $res \n].   
3a00: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45   }..    method E
3a10: 78 70 61 6e 64 32 20 7b 67 72 61 70 68 20 6e 6f  xpand2 {graph no
3a20: 64 65 7d 20 7b 0a 09 73 65 74 20 72 65 76 6e 72  de} {..set revnr
3a30: 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65   [$graph node ge
3a40: 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 0a 0a  t $node revnr]..
3a50: 09 23 20 46 69 72 73 74 20 69 6d 70 6f 72 74 20  .# First import 
3a60: 74 68 65 20 66 69 6c 65 2e 0a 09 6c 61 70 70 65  the file...lappe
3a70: 6e 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 73  nd myimport [lis
3a80: 74 20 41 20 72 24 72 65 76 6e 72 20 7b 7d 5d 0a  t A r$revnr {}].
3a90: 0a 09 69 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f  ..if {[$graph no
3aa0: 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6e 6f  de keyexists $no
3ab0: 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a  de __base__]} {.
3ac0: 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e 6f 64  .    # Delta nod
3ad0: 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73 20 74  e. __base__ is t
3ae0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
3af0: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 09  ile containing..
3b00: 20 20 20 20 23 20 74 68 65 20 62 61 73 65 6c 69      # the baseli
3b10: 6e 65 2e 20 47 65 6e 65 72 61 74 65 20 69 6e 73  ne. Generate ins
3b20: 74 72 75 63 74 69 6f 6e 20 74 6f 20 6d 61 6b 65  truction to make
3b30: 20 74 68 65 20 64 65 6c 74 61 20 61 73 0a 09 20   the delta as.. 
3b40: 20 20 20 23 20 77 65 6c 6c 2e 0a 0a 09 20 20 20     # well....   
3b50: 20 73 65 74 20 66 62 61 73 65 20 5b 24 67 72 61   set fbase [$gra
3b60: 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64  ph node get $nod
3b70: 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09 20 20 20  e __base__]..   
3b80: 20 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70 6f 72   lappend myimpor
3b90: 74 20 5b 6c 69 73 74 20 44 20 72 24 72 65 76 6e  t [list D r$revn
3ba0: 72 20 72 24 66 62 61 73 65 5d 0a 09 7d 0a 0a 09  r r$fbase]..}...
3bb0: 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 73 75  # Post to all su
3bc0: 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 74 68  ccessors that th
3bd0: 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 65 64  e just generated
3be0: 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 0a 09   file is their..
3bf0: 23 20 62 61 73 65 6c 69 6e 65 2e 20 45 78 63 65  # baseline. Exce
3c00: 70 74 69 6f 6e 3a 20 54 68 6f 73 65 20 77 68 69  ption: Those whi
3c10: 63 68 20 61 76 65 20 61 6c 72 65 61 64 79 20 61  ch ave already a
3c20: 20 62 61 73 65 6c 69 6e 65 20 73 65 74 2e 0a 09   baseline set...
3c30: 23 20 54 6f 67 65 74 68 65 72 20 77 69 74 68 20  # Together with 
3c40: 74 68 65 20 73 6f 72 74 69 6e 67 20 6f 66 20 74  the sorting of t
3c50: 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 66  runk revisions f
3c60: 69 72 73 74 20 74 68 65 20 74 72 75 6e 6b 0a 09  irst the trunk..
3c70: 23 20 73 68 6f 75 6c 64 20 6f 6e 65 20 75 6e 69  # should one uni
3c80: 6e 74 65 72 75 70 74 65 64 20 6c 69 6e 65 2c 20  nterupted line, 
3c90: 77 69 74 68 20 62 72 61 6e 63 68 20 72 6f 6f 74  with branch root
3ca0: 73 20 5f 6e 6f 74 5f 20 64 65 6c 74 61 0a 09 23  s _not_ delta..#
3cb0: 20 63 6f 6d 70 72 65 73 73 65 64 20 70 65 72 20   compressed per 
3cc0: 74 68 65 69 72 20 62 72 61 6e 63 68 65 73 2e 0a  their branches..
3cd0: 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20 5b 24  ..foreach out [$
3ce0: 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74  graph nodes -out
3cf0: 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 69   $node] {..    i
3d00: 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f 64 65 20  f {[$graph node 
3d10: 6b 65 79 65 78 69 73 74 73 20 24 6f 75 74 20 5f  keyexists $out _
3d20: 5f 62 61 73 65 5f 5f 5d 7d 20 63 6f 6e 74 69 6e  _base__]} contin
3d30: 75 65 0a 09 20 20 20 20 24 67 72 61 70 68 20 6e  ue..    $graph n
3d40: 6f 64 65 20 73 65 74 20 24 6f 75 74 20 5f 5f 62  ode set $out __b
3d50: 61 73 65 5f 5f 20 24 72 65 76 6e 72 0a 09 7d 0a  ase__ $revnr..}.
3d60: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
3d70: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 6d     variable myim
3d80: 70 6f 72 74 0a 0a 20 20 20 20 23 20 23 20 23 23  port..    # # ##
3d90: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
3da0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
3db0: 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a  #.    ## State..
3dc0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69      variable myi
3dd0: 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  d              {
3de0: 7d 20 3b 20 23 20 46 69 6c 65 20 69 64 20 69 6e  } ; # File id in
3df0: 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20   the persistent 
3e00: 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72 69 61  state..    varia
3e10: 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20 20 20  ble mypath      
3e20: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74        {} ; # Pat
3e30: 68 20 6f 66 20 74 68 65 20 66 69 6c 65 27 73 20  h of the file's 
3e40: 72 63 73 20 61 72 63 68 69 76 65 2e 0a 20 20 20  rcs archive..   
3e50: 20 76 61 72 69 61 62 6c 65 20 6d 79 75 73 72 70   variable myusrp
3e60: 61 74 68 20 20 20 20 20 20 20 20 20 7b 7d 20 3b  ath         {} ;
3e70: 20 23 20 50 61 74 68 20 6f 66 20 74 68 65 20 66   # Path of the f
3e80: 69 6c 65 20 61 73 20 73 65 65 6e 20 62 79 20 75  ile as seen by u
3e90: 73 65 72 73 2e 0a 20 20 20 20 76 61 72 69 61 62  sers..    variab
3ea0: 6c 65 20 6d 79 65 78 65 63 75 74 61 62 6c 65 20  le myexecutable 
3eb0: 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c       0  ; # Bool
3ec0: 65 61 6e 20 66 6c 61 67 20 27 66 69 6c 65 20 65  ean flag 'file e
3ed0: 78 65 63 75 74 61 62 6c 65 27 2e 0a 20 20 20 20  xecutable'..    
3ee0: 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65  variable myproje
3ef0: 63 74 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20  ct         {} ; 
3f00: 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74  # Reference to t
3f10: 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63  he project objec
3f20: 74 0a 09 09 09 09 20 20 20 20 23 20 74 68 65 20  t.....    # the 
3f30: 66 69 6c 65 20 62 65 6c 6f 6e 67 73 20 74 6f 2e  file belongs to.
3f40: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
3f50: 72 65 76 20 2d 61 72 72 61 79 20 20 20 20 20 20  rev -array      
3f60: 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69  {} ; # Maps revi
3f70: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74  sion number to t
3f80: 68 65 0a 09 09 09 09 20 20 20 20 23 20 61 73 73  he.....    # ass
3f90: 6f 63 69 61 74 65 64 20 72 65 76 69 73 69 6f 6e  ociated revision
3fa0: 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 76 61 72   object..    var
3fb0: 69 61 62 6c 65 20 6d 79 72 65 76 69 73 69 6f 6e  iable myrevision
3fc0: 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53  s       {} ; # S
3fd0: 61 6d 65 20 61 73 20 6d 79 72 65 76 2c 20 62 75  ame as myrev, bu
3fe0: 74 20 61 20 6c 69 73 74 2c 0a 09 09 09 09 20 20  t a list,.....  
3ff0: 20 20 23 20 67 69 76 69 6e 67 20 75 73 20 74 68    # giving us th
4000: 65 20 6f 72 64 65 72 20 6f 66 0a 09 09 09 09 20  e order of..... 
4010: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a     # revisions..
4020: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 61      variable mya
4030: 69 64 20 20 20 20 20 20 2d 61 72 72 61 79 20 7b  id      -array {
4040: 7d 20 3b 20 23 20 4d 61 70 20 72 65 76 69 73 69  } ; # Map revisi
4050: 6f 6e 20 6e 75 6d 62 65 72 73 20 74 6f 20 74 68  on numbers to th
4060: 65 20 69 64 0a 09 09 09 09 20 20 20 20 23 20 6f  e id.....    # o
4070: 66 20 74 68 65 20 61 75 74 68 6f 72 20 77 68 6f  f the author who
4080: 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 09 09 20   committed..... 
4090: 20 20 20 23 20 69 74 2e 20 54 68 69 73 20 69 73     # it. This is
40a0: 20 6c 61 74 65 72 20 61 67 67 72 65 67 61 74 65   later aggregate
40b0: 64 0a 09 09 09 09 20 20 20 20 23 20 77 69 74 68  d.....    # with
40c0: 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 2c   commit message,
40d0: 20 62 72 61 6e 63 68 20 6e 61 6d 65 0a 09 09 09   branch name....
40e0: 09 20 20 20 20 23 20 61 6e 64 20 70 72 6f 6a 65  .    # and proje
40f0: 63 74 20 69 64 20 66 6f 72 20 61 20 6d 65 74 61  ct id for a meta
4100: 20 69 64 2e 0a 20 20 20 20 76 61 72 69 61 62 6c   id..    variabl
4110: 65 20 6d 79 68 65 61 64 72 65 76 6e 72 20 20 20  e myheadrevnr   
4120: 20 20 20 20 7b 7d 20 3b 20 23 20 48 65 61 64 20      {} ; # Head 
4130: 72 65 76 69 73 69 6f 6e 20 28 72 65 76 69 73 69  revision (revisi
4140: 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 20 20 20 76  on number).    v
4150: 61 72 69 61 62 6c 65 20 6d 79 70 72 69 6e 63 69  ariable myprinci
4160: 70 61 6c 20 20 20 20 20 20 20 7b 7d 20 3b 20 23  pal       {} ; #
4170: 20 50 72 69 6e 63 69 70 61 6c 20 62 72 61 6e 63   Principal branc
4180: 68 20 28 62 72 61 6e 63 68 20 6e 75 6d 62 65 72  h (branch number
4190: 29 2e 0a 09 09 09 09 20 20 20 20 23 20 43 6f 6e  )......    # Con
41a0: 74 72 61 72 79 20 74 6f 20 74 68 65 20 6e 61 6d  trary to the nam
41b0: 65 20 74 68 69 73 20 69 73 20 74 68 65 0a 09 09  e this is the...
41c0: 09 09 20 20 20 20 23 20 64 65 66 61 75 6c 74 20  ..    # default 
41d0: 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69  branch..    vari
41e0: 61 62 6c 65 20 6d 79 64 65 70 65 6e 64 65 6e 63  able mydependenc
41f0: 69 65 73 20 20 20 20 7b 7d 20 3b 20 23 20 44 69  ies    {} ; # Di
4200: 63 74 69 6f 6e 61 72 79 20 70 61 72 65 6e 74 20  ctionary parent 
4210: 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 09 09 20 20  -> child,.....  
4220: 20 20 23 20 72 65 63 6f 72 64 73 20 70 72 69 6d    # records prim
4230: 61 72 79 20 64 65 70 65 6e 64 65 6e 63 69 65 73  ary dependencies
4240: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4250: 79 69 6d 70 6f 72 74 65 64 20 20 20 20 20 20 20  yimported       
4260: 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20   0  ; # Boolean 
4270: 66 6c 61 67 2e 20 53 65 74 20 69 66 20 61 6e 64  flag. Set if and
4280: 20 6f 6e 6c 79 20 69 66 0a 09 09 09 09 20 20 20   only if.....   
4290: 20 23 20 72 65 76 20 31 2e 31 20 6f 66 20 74 68   # rev 1.1 of th
42a0: 65 20 66 69 6c 65 20 73 65 65 6d 69 6e 67 6c 79  e file seemingly
42b0: 0a 09 09 09 09 20 20 20 20 23 20 77 61 73 20 69  .....    # was i
42c0: 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61 64 20  mported instead 
42d0: 6f 66 20 61 64 64 65 64 0a 09 09 09 09 20 20 20  of added.....   
42e0: 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 20 20 20   # normally..   
42f0: 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74   variable myroot
4300: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b              {} ;
4310: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20   # Reference to 
4320: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a  the revision obj
4330: 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 68 6f  ect.....    # ho
4340: 6c 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20 72  lding the root r
4350: 65 76 69 73 69 6f 6e 2e 20 20 49 74 73 0a 09 09  evision.  Its...
4360: 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 20 75  ..    # number u
4370: 73 75 61 6c 6c 79 20 69 73 20 27 31 2e 31 27 2e  sually is '1.1'.
4380: 20 43 61 6e 20 62 65 0a 09 09 09 09 20 20 20 20   Can be.....    
4390: 23 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 75  # a different nu
43a0: 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20 6f 66  mber, because of
43b0: 0a 09 09 09 09 20 20 20 20 23 20 67 61 70 73 20  .....    # gaps 
43c0: 63 72 65 61 74 65 64 20 76 69 61 20 27 63 76 73  created via 'cvs
43d0: 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20 20 76  admin -o'..    v
43e0: 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68  ariable mybranch
43f0: 65 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23  es -array {} ; #
4400: 20 4d 61 70 73 20 62 72 61 6e 63 68 20 6e 75 6d   Maps branch num
4410: 62 65 72 20 74 6f 20 74 68 65 20 73 79 6d 62 6f  ber to the symbo
4420: 6c 0a 09 09 09 09 20 20 20 20 23 20 6f 62 6a 65  l.....    # obje
4430: 63 74 20 68 61 6e 64 6c 69 6e 67 20 74 68 65 20  ct handling the 
4440: 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69  branch..    vari
4450: 61 62 6c 65 20 6d 79 74 61 67 73 20 20 20 20 20  able mytags     
4460: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61  -array {} ; # Ma
4470: 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62  ps revision numb
4480: 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0a 09  er to the list..
4490: 09 09 09 20 20 20 20 23 20 6f 66 20 73 79 6d 62  ...    # of symb
44a0: 6f 6c 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 74  ol objects for t
44b0: 68 65 20 74 61 67 73 0a 09 09 09 09 20 20 20 20  he tags.....    
44c0: 23 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  # associated wit
44d0: 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a  h the revision..
44e0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 73      variable mys
44f0: 79 6d 62 6f 6c 73 20 20 20 20 20 20 20 20 20 7b  ymbols         {
4500: 7d 20 3b 20 23 20 53 65 74 20 6f 66 20 74 68 65  } ; # Set of the
4510: 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20 66 6f   symbol names fo
4520: 75 6e 64 20 69 6e 0a 09 09 09 09 20 20 20 20 23  und in.....    #
4530: 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20 20 20   this file...   
4540: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e   variable mybran
4550: 63 68 63 6e 74 20 30 20 3b 20 23 20 43 6f 75 6e  chcnt 0 ; # Coun
4560: 74 65 72 20 66 6f 72 20 62 72 61 6e 63 68 65 73  ter for branches
4570: 2c 20 74 6f 20 72 65 63 6f 72 64 20 74 68 65 69  , to record thei
4580: 72 0a 09 09 09 20 20 20 20 20 23 20 6f 72 64 65  r....     # orde
4590: 72 20 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e 2e  r of definition.
45a0: 20 54 68 69 73 20 61 6c 73 6f 20 64 65 66 69 6e   This also defin
45b0: 65 73 0a 09 09 09 20 20 20 20 20 23 20 74 68 65  es....     # the
45c0: 69 72 20 6f 72 64 65 72 20 6f 66 20 63 72 65 61  ir order of crea
45d0: 74 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20 74  tion, which is t
45e0: 68 65 0a 09 09 09 20 20 20 20 20 23 20 72 65 76  he....     # rev
45f0: 65 72 73 65 20 6f 66 20 64 65 66 69 6e 69 74 69  erse of definiti
4600: 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 73 6d 61 6c  on.  I.e. a smal
4610: 6c 65 72 0a 09 09 09 20 20 20 20 20 23 20 6e 75  ler....     # nu
4620: 6d 62 65 72 20 6d 65 61 6e 73 20 27 44 65 66 69  mber means 'Defi
4630: 6e 65 64 20 65 61 72 6c 69 65 72 27 2c 20 6d 65  ned earlier', me
4640: 61 6e 73 0a 09 09 09 20 20 20 20 20 23 20 27 43  ans....     # 'C
4650: 72 65 61 74 65 64 20 6c 61 74 65 72 27 2e 0a 0a  reated later'...
4660: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74      variable myt
4670: 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 44 69 72 65  runk {} ; # Dire
4680: 63 74 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20  ct reference to 
4690: 6d 79 70 72 6f 6a 65 63 74 20 2d 3e 20 74 72 75  myproject -> tru
46a0: 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  nk..    variable
46b0: 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 3b 20 23 20   myroots {} ; # 
46c0: 4c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 69 6e  List of roots in
46d0: 20 74 68 65 20 66 6f 72 65 73 74 20 6f 66 0a 09   the forest of..
46e0: 09 09 20 20 23 20 6c 6f 64 27 73 2e 20 4f 62 6a  ..  # lod's. Obj
46f0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 20 74  ect references t
4700: 6f 20 72 65 76 69 73 69 6f 6e 73 20 61 6e 64 0a  o revisions and.
4710: 09 09 09 20 20 23 20 62 72 61 6e 63 68 65 73 2e  ...  # branches.
4720: 20 54 68 65 20 6c 61 74 74 65 72 20 63 61 6e 20   The latter can 
4730: 61 70 70 65 61 72 20 77 68 65 6e 20 74 68 65 79  appear when they
4740: 0a 09 09 09 20 20 23 20 61 72 65 20 73 65 76 65  ....  # are seve
4750: 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20 70  red from their p
4760: 61 72 65 6e 74 2e 0a 0a 20 20 20 20 23 20 23 20  arent...    # # 
4770: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
4780: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
4790: 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72  ###.    ## Inter
47a0: 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20  nal methods..   
47b0: 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 72   method RecordBr
47c0: 61 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 72 61  anchCommits {bra
47d0: 6e 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 61 63  nches} {..foreac
47e0: 68 20 62 72 61 6e 63 68 72 65 76 6e 72 20 24 62  h branchrevnr $b
47f0: 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 69  ranches {..    i
4800: 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 73 65  f {[catch {...se
4810: 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20  t branch [$self 
4820: 52 65 76 32 42 72 61 6e 63 68 20 24 62 72 61 6e  Rev2Branch $bran
4830: 63 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 7d 5d  chrevnr]..    }]
4840: 7d 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68  } {...set branch
4850: 20 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c 61 62   [$self AddUnlab
4860: 65 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 76 20  eledBranch [rev 
4870: 32 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 63  2branchnr $branc
4880: 68 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a  hrevnr]]..    }.
4890: 0a 09 20 20 20 20 23 20 52 65 63 6f 72 64 20 74  ..    # Record t
48a0: 68 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 74 20  he commit, just 
48b0: 61 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62  as revision numb
48c0: 65 72 20 66 6f 72 0a 09 20 20 20 20 23 20 6e 6f  er for..    # no
48d0: 77 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 68 44  w. ProcesBranchD
48e0: 65 70 65 6e 64 65 6e 63 69 65 73 20 77 69 6c 6c  ependencies will
48f0: 20 65 78 74 65 6e 64 20 74 68 61 74 20 69 74 6f   extend that ito
4900: 20 61 0a 09 20 20 20 20 23 20 70 72 6f 70 65 72   a..    # proper
4910: 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
4920: 65 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68  e....    $branch
4930: 20 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20 24   setchildrevnr $
4940: 62 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d 0a 09  branchrevnr..}..
4950: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
4960: 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72 61    method Rev2Bra
4970: 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 20 20  nch {revnr} {.  
4980: 20 20 20 20 20 20 69 6e 74 65 67 72 69 74 79 20        integrity 
4990: 61 73 73 65 72 74 20 7b 21 5b 72 65 76 20 69 73  assert {![rev is
49a0: 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e  trunkrevnr $revn
49b0: 72 5d 7d 20 7b 45 78 70 65 63 74 65 64 20 61 20  r]} {Expected a 
49c0: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20  branch revision 
49d0: 6e 75 6d 62 65 72 7d 0a 09 72 65 74 75 72 6e 20  number}..return 
49e0: 24 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65 76  $mybranches([rev
49f0: 20 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76 6e   2branchnr $revn
4a00: 72 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  r]).    }..    m
4a10: 65 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c  ethod AddUnlabel
4a20: 65 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63 68  edBranch {branch
4a30: 6e 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24  nr} {..return [$
4a40: 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20 75  self AddBranch u
4a50: 6e 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63 68  nlabeled-$branch
4a60: 6e 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20  nr $branchnr].  
4a70: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
4a80: 41 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20  AddBranch {name 
4a90: 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20  branchnr} {..if 
4aa0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79  {[info exists my
4ab0: 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68  branches($branch
4ac0: 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67  nr)]} {..    log
4ad0: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49   write 1 file "I
4ae0: 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72 61  n '$mypath': Bra
4af0: 6e 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27 20  nch '$branchnr' 
4b00: 6e 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e 63  named '[$mybranc
4b10: 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20 6e  hes($branchnr) n
4b20: 61 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20  ame]'"..    log 
4b30: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 43 61  write 1 file "Ca
4b40: 6e 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e 64  nnot have second
4b50: 20 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69   name '$name', i
4b60: 67 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20 20  gnoring it"..   
4b70: 20 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20   return..}..set 
4b80: 62 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55 54  branch [sym %AUT
4b90: 4f 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e 63  O% branch $branc
4ba0: 68 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20  hnr [$myproject 
4bb0: 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d  getsymbol $name]
4bc0: 20 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e 63 68   $self]..$branch
4bd0: 20 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e   setposition [in
4be0: 63 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a  cr mybranchcnt].
4bf0: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 28  .set mybranches(
4c00: 24 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61 6e  $branchnr) $bran
4c10: 63 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61 6e  ch..return $bran
4c20: 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  ch.    }..    me
4c30: 74 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61 6d  thod AddTag {nam
4c40: 65 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20  e revnr} {..set 
4c50: 74 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25 20  tag [sym %AUTO% 
4c60: 74 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79 70  tag $revnr [$myp
4c70: 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c  roject getsymbol
4c80: 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09   $name] $self]..
4c90: 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28 24  lappend mytags($
4ca0: 72 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65 74  revnr) $tag..ret
4cb0: 75 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a 0a  urn $tag.    }..
4cc0: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72      method Recor
4cd0: 64 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63 69  dBasicDependenci
4ce0: 65 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20  es {revnr next} 
4cf0: 7b 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65 20  {..# Handle the 
4d00: 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 65  revision depende
4d10: 6e 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74 68  ncies. Record th
4d20: 65 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09  em for now, do..
4d30: 23 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20 74  # nothing with t
4d40: 68 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20  hem yet....# On 
4d50: 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27 6e  the trunk the 'n
4d60: 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e 74  ext' field point
4d70: 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75  s to the previou
4d80: 73 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20 69  s..# revision, i
4d90: 2e 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74 5f  .e. the _parent_
4da0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
4db0: 6f 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23  one. Example:..#
4dc0: 20 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20 31   1.6's next is 1
4dd0: 2e 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61  .5 (modulo cvs a
4de0: 64 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f  dmin -o)....# Co
4df0: 6e 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62 72  ntrarily on a br
4e00: 61 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27 20  anch the 'next' 
4e10: 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  field points to 
4e20: 74 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20 5f  the..# primary _
4e30: 63 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63 75  child_ of the cu
4e40: 72 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20  rrent revision. 
4e50: 41 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31  As example,..# 1
4e60: 2e 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27 20  .1.3.2's 'next' 
4e70: 77 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e  will be 1.1.3.3.
4e80: 0a 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27 20  ...# The 'next' 
4e90: 66 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20 61  field actually a
4ea0: 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 6f 20  lways refers to 
4eb0: 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 20  the revision..# 
4ec0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64  containing the d
4ed0: 65 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20 72  elta needed to r
4ee0: 65 74 72 69 65 76 65 20 74 68 61 74 20 72 65 76  etrieve that rev
4ef0: 69 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64  ision....# The d
4f00: 65 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65 64  ependencies need
4f10: 65 64 20 68 65 72 65 20 61 72 65 20 74 68 65 20  ed here are the 
4f20: 6c 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75 72  logical structur
4f30: 65 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68 69  e,..# parent/chi
4f40: 6c 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65 20  ld, and not the 
4f50: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64  implementation d
4f60: 65 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09  ependent delta..
4f70: 23 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66  # pointers....if
4f80: 20 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20 72   {$next eq ""} r
4f90: 65 74 75 72 6e 0a 09 23 20 20 20 20 20 20 20 20  eturn..#        
4fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4fb0: 20 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c    parent -> chil
4fc0: 64 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72  d..if {[rev istr
4fd0: 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d  unkrevnr $revnr]
4fe0: 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64  } {..    lappend
4ff0: 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20   mydependencies 
5000: 24 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d 20  $next $revnr..} 
5010: 65 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70 70  else {..    lapp
5020: 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69  end mydependenci
5030: 65 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74 0a  es $revnr $next.
5040: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
5050: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f  ..    method Pro
5060: 63 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 6e  cessPrimaryDepen
5070: 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f  dencies {} {..fo
5080: 72 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65 76  reach {parentrev
5090: 6e 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20 24  nr childrevnr} $
50a0: 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 7b  mydependencies {
50b0: 0a 09 20 20 20 20 73 65 74 20 70 61 72 65 6e 74  ..    set parent
50c0: 20 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74 72   $myrev($parentr
50d0: 65 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20 63  evnr)..    set c
50e0: 68 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63 68  hild  $myrev($ch
50f0: 69 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20 24  ildrevnr)..    $
5100: 70 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64 20  parent setchild 
5110: 24 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69  $child..    $chi
5120: 6c 64 20 73 65 74 70 61 72 65 6e 74 20 24 70 61  ld setparent $pa
5130: 72 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  rent..}..return.
5140: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
5150: 64 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44  d ProcessBranchD
5160: 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b  ependencies {} {
5170: 0a 09 66 6f 72 65 61 63 68 20 7b 62 72 61 6e 63  ..foreach {branc
5180: 68 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 72 72  hnr branch} [arr
5190: 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65  ay get mybranche
51a0: 73 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72 65  s] {..    set re
51b0: 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 61 72  vnr [$branch par
51c0: 65 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20  entrevnr]...    
51d0: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
51e0: 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d  s myrev($revnr)]
51f0: 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 20  } {...log write 
5200: 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70  1 file "In '$myp
5210: 61 74 68 27 3a 20 54 68 65 20 62 72 61 6e 63 68  ath': The branch
5220: 20 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d   '[$branch name]
5230: 27 20 72 65 66 65 72 65 6e 63 65 73 22 0a 09 09  ' references"...
5240: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65  log write 1 file
5250: 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69   "the bogus revi
5260: 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e  sion '$revnr' an
5270: 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65  d will be ignore
5280: 64 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 64 65  d."...$branch de
5290: 73 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79  stroy...unset my
52a0: 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68  branches($branch
52b0: 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20  nr)..    } else 
52c0: 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72  {...set rev $myr
52d0: 65 76 28 24 72 65 76 6e 72 29 0a 09 09 24 72 65  ev($revnr)...$re
52e0: 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 72 61  v addbranch $bra
52f0: 6e 63 68 0a 09 09 24 62 72 61 6e 63 68 20 73 65  nch...$branch se
5300: 74 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09 09  tparent $rev....
5310: 23 20 49 66 20 72 65 76 69 73 69 6f 6e 73 20 77  # If revisions w
5320: 65 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e  ere committed on
5330: 20 74 68 65 20 62 72 61 6e 63 68 20 77 65 20 73   the branch we s
5340: 74 6f 72 65 20 61 0a 09 09 23 20 72 65 66 65 72  tore a...# refer
5350: 65 6e 63 65 20 74 6f 20 74 68 65 20 62 72 61 6e  ence to the bran
5360: 63 68 20 74 68 65 72 65 2c 20 61 6e 64 20 66 75  ch there, and fu
5370: 72 74 68 65 72 20 64 65 63 6c 61 72 65 0a 09 09  rther declare...
5380: 23 20 74 68 65 20 66 69 72 73 74 20 63 68 69 6c  # the first chil
5390: 64 27 73 20 70 61 72 65 6e 74 20 74 6f 20 62 65  d's parent to be
53a0: 20 62 72 61 6e 63 68 27 73 20 70 61 72 65 6e 74   branch's parent
53b0: 2c 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 20 74  , and...# list t
53c0: 68 69 73 20 63 68 69 6c 64 20 69 6e 20 74 68 65  his child in the
53d0: 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e   parent revision
53e0: 2e 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e 63  .....if {[$branc
53f0: 68 20 68 61 73 63 68 69 6c 64 72 65 76 5d 7d 20  h haschildrev]} 
5400: 7b 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 6c  {...    set chil
5410: 64 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20  drevnr [$branch 
5420: 63 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20  childrevnr]...  
5430: 20 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79 72    set child $myr
5440: 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a  ev($childrevnr).
5450: 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65  ..    $branch se
5460: 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09  tchild $child...
5470: 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70  .    $child setp
5480: 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61  arentbranch $bra
5490: 6e 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c 64  nch...    $child
54a0: 20 73 65 74 70 61 72 65 6e 74 20 20 20 20 20 20   setparent      
54b0: 20 24 72 65 76 0a 09 09 20 20 20 20 24 72 65 76   $rev...    $rev
54c0: 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63   addchildonbranc
54d0: 68 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20  h $child...}..  
54e0: 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20    }..}..return. 
54f0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
5500: 20 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b 7d   SortBranches {}
5510: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76   {..foreach {rev
5520: 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67  nr rev} [array g
5530: 65 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65 76  et myrev] { $rev
5540: 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d 0a   sortbranches }.
5550: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
5560: 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73     method Proces
5570: 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65 73  sTagDependencies
5580: 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b   {} {..foreach {
5590: 72 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b  revnr taglist} [
55a0: 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73  array get mytags
55b0: 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b 69  ] {..    if {![i
55c0: 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76  nfo exists myrev
55d0: 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73  ($revnr)]} {...s
55e0: 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74  et n [llength $t
55f0: 61 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72  aglist]...log wr
5600: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27  ite 1 file "In '
5610: 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66 6f  $mypath': The fo
5620: 6c 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20  llowing [nsp $n 
5630: 74 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22 0a  tag] reference".
5640: 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69  ..log write 1 fi
5650: 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65  le "the bogus re
5660: 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20  vision '$revnr' 
5670: 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f  and will be igno
5680: 72 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68 20  red."...foreach 
5690: 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09  tag $taglist {..
56a0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31  .    log write 1
56b0: 20 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61 67   file "    [$tag
56c0: 20 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24 74   name]"...    $t
56d0: 61 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09  ag destroy...}..
56e0: 09 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24 72  .unset mytags($r
56f0: 65 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73  evnr)..    } els
5700: 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d  e {...set rev $m
5710: 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 66  yrev($revnr)...f
5720: 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c  oreach tag $tagl
5730: 69 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65 76  ist {...    $rev
5740: 20 61 64 64 74 61 67 20 20 20 20 24 74 61 67 0a   addtag    $tag.
5750: 09 09 20 20 20 20 24 74 61 67 20 73 65 74 74 61  ..    $tag setta
5760: 67 72 65 76 20 24 72 65 76 0a 09 09 7d 0a 09 20  grev $rev...}.. 
5770: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a     }..}..return.
5780: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
5790: 64 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52 6f  d DetermineTheRo
57a0: 6f 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a  otRevision {} {.
57b0: 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20 74  .# The root is t
57c0: 68 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20  he one revision 
57d0: 77 68 69 63 68 20 68 61 73 20 6e 6f 20 70 61 72  which has no par
57e0: 65 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 63 6b  ent. By..# check
57f0: 69 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e  ing all revision
5800: 73 20 77 65 20 65 6e 73 75 72 65 20 74 68 61 74  s we ensure that
5810: 20 77 65 20 63 61 6e 20 64 65 74 65 63 74 20 61   we can detect a
5820: 6e 64 0a 09 23 20 72 65 70 6f 72 74 20 74 68 65  nd..# report the
5830: 20 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c   case of multipl
5840: 65 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74  e roots. Without
5850: 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 0a 09   that we could..
5860: 23 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e  # simply take on
5870: 65 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 66  e revision and f
5880: 6f 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 6e 74  ollow the parent
5890: 20 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65   links to..# the
58a0: 69 72 20 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a  ir root (sic!)..
58b0: 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72  ..foreach {revnr
58c0: 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74   rev} [array get
58d0: 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20 69   myrev] {..    i
58e0: 66 20 7b 5b 24 72 65 76 20 68 61 73 70 61 72 65  f {[$rev haspare
58f0: 6e 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20  nt]} continue.. 
5900: 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73     integrity ass
5910: 65 72 74 20 7b 24 6d 79 72 6f 6f 74 20 65 71 20  ert {$myroot eq 
5920: 22 22 7d 20 7b 4d 75 6c 74 69 70 6c 65 20 72 6f  ""} {Multiple ro
5930: 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75  ot revisions fou
5940: 6e 64 7d 0a 09 20 20 20 20 73 65 74 20 6d 79 72  nd}..    set myr
5950: 6f 6f 74 20 24 72 65 76 0a 09 7d 0a 0a 09 23 20  oot $rev..}...# 
5960: 49 6e 20 74 68 65 20 66 75 74 75 72 65 20 77 65  In the future we
5970: 20 61 6c 73 6f 20 6e 65 65 64 20 61 20 6c 69 73   also need a lis
5980: 74 2c 20 61 73 20 62 72 61 6e 63 68 65 73 20 63  t, as branches c
5990: 61 6e 20 62 65 63 6f 6d 65 0a 09 23 20 73 65 76  an become..# sev
59a0: 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20  ered from their 
59b0: 70 61 72 65 6e 74 2c 20 6d 61 6b 69 6e 67 20 74  parent, making t
59c0: 68 65 6d 20 74 68 65 69 72 20 6f 77 6e 20 72 6f  hem their own ro
59d0: 6f 74 2e 0a 09 73 65 74 20 6d 79 72 6f 6f 74 73  ot...set myroots
59e0: 20 5b 6c 69 73 74 20 24 6d 79 72 6f 6f 74 5d 0a   [list $myroot].
59f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
5a00: 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d     method Determ
5a10: 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61  ineRevisionOpera
5a20: 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72 65  tions {} {..fore
5a30: 61 63 68 20 72 65 76 20 24 6d 79 72 65 76 69 73  ach rev $myrevis
5a40: 69 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 74 65  ions { $rev dete
5a50: 72 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20 7d  rmineoperation }
5a60: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
5a70: 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72      method Deter
5a80: 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65 6c  mineLinesOfDevel
5a90: 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 46  opment {} {..# F
5aa0: 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 74 68 69  or revisions thi
5ab0: 73 20 68 61 73 20 62 65 65 6e 20 64 6f 6e 65 20  s has been done 
5ac0: 61 6c 72 65 61 64 79 2c 20 69 6e 20 27 65 78 74  already, in 'ext
5ad0: 65 6e 64 27 2e 20 4e 6f 77 0a 09 23 20 77 65 20  end'. Now..# we 
5ae0: 64 6f 20 74 68 69 73 20 66 6f 72 20 74 68 65 20  do this for the 
5af0: 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67  branches and tag
5b00: 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20  s....foreach {_ 
5b10: 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67  branch} [array g
5b20: 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b  et mybranches] {
5b30: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65  ..    $branch se
5b40: 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c  tlod [$self GetL
5b50: 4f 44 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65  OD [$branch pare
5b60: 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09 66  ntrevnr]]..}...f
5b70: 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 73  oreach {_ taglis
5b80: 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79  t} [array get my
5b90: 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72  tags] {..    for
5ba0: 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73  each tag $taglis
5bb0: 74 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c 6f  t {...$tag setlo
5bc0: 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 20  d [$self GetLOD 
5bd0: 5b 24 74 61 67 20 74 61 67 72 65 76 6e 72 5d 5d  [$tag tagrevnr]]
5be0: 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75  ..    }..}..retu
5bf0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
5c00: 74 68 6f 64 20 47 65 74 4c 4f 44 20 7b 72 65 76  thod GetLOD {rev
5c10: 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20  nr} {..if {[rev 
5c20: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65  istrunkrevnr $re
5c30: 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74  vnr]} {..    ret
5c40: 75 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 7d 20  urn $mytrunk..} 
5c50: 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 74 75  else {..    retu
5c60: 72 6e 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72  rn [$self Rev2Br
5c70: 61 6e 63 68 20 24 72 65 76 6e 72 5d 0a 09 7d 0a  anch $revnr]..}.
5c80: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
5c90: 64 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b  d HandleNonTrunk
5ca0: 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b 7d  DefaultBranch {}
5cb0: 20 7b 0a 09 73 65 74 20 72 65 76 6c 69 73 74 20   {..set revlist 
5cc0: 5b 24 73 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b 44  [$self NonTrunkD
5cd0: 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73 5d  efaultRevisions]
5ce0: 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20  ..if {![llength 
5cf0: 24 72 65 76 6c 69 73 74 5d 7d 20 72 65 74 75 72  $revlist]} retur
5d00: 6e 0a 0a 09 24 73 65 6c 66 20 41 64 6a 75 73 74  n...$self Adjust
5d10: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42  NonTrunkDefaultB
5d20: 72 61 6e 63 68 20 24 72 65 76 6c 69 73 74 0a 09  ranch $revlist..
5d30: 24 73 65 6c 66 20 43 68 65 63 6b 4c 4f 44 73 0a  $self CheckLODs.
5d40: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
5d50: 20 20 20 6d 65 74 68 6f 64 20 4e 6f 6e 54 72 75     method NonTru
5d60: 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f  nkDefaultRevisio
5d70: 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20  ns {} {..# From 
5d80: 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f 6c 6c  cvs2svn the foll
5d90: 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 69 6f  owing explanatio
5da0: 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69 63 61  n (with modifica
5db0: 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75 72  tions..# for our
5dc0: 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 23   algorithm):...#
5dd0: 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68   Determine wheth
5de0: 65 72 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  er there are any
5df0: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
5e00: 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 76  lt branch..# rev
5e10: 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 49 66 20 61  isions....# If a
5e20: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
5e30: 6c 74 20 62 72 61 6e 63 68 20 69 73 20 64 65 74  lt branch is det
5e40: 65 72 6d 69 6e 65 64 20 74 6f 20 68 61 76 65 20  ermined to have 
5e50: 65 78 69 73 74 65 64 2c 0a 09 23 20 72 65 74 75  existed,..# retu
5e60: 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a  rn a list of obj
5e70: 65 63 74 73 20 66 6f 72 20 61 6c 6c 20 72 65 76  ects for all rev
5e80: 69 73 69 6f 6e 73 20 74 68 61 74 20 77 65 72 65  isions that were
5e90: 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74 72 75   once..# non-tru
5ea0: 6e 6b 20 64 65 66 61 75 6c 74 20 72 65 76 69 73  nk default revis
5eb0: 69 6f 6e 73 2c 20 69 6e 20 64 65 70 65 6e 64 65  ions, in depende
5ec0: 6e 63 79 20 6f 72 64 65 72 20 28 69 2e 65 2e 20  ncy order (i.e. 
5ed0: 72 6f 6f 74 0a 09 23 20 66 69 72 73 74 29 2e 0a  root..# first)..
5ee0: 0a 09 23 20 54 68 65 72 65 20 61 72 65 20 74 77  ..# There are tw
5ef0: 6f 20 63 61 73 65 73 20 74 6f 20 68 61 6e 64 6c  o cases to handl
5f00: 65 3a 0a 0a 09 23 20 4f 6e 65 20 63 61 73 65 20  e:...# One case 
5f10: 69 73 20 73 69 6d 70 6c 65 2e 20 20 54 68 65 20  is simple.  The 
5f20: 52 43 53 20 66 69 6c 65 20 6c 69 73 74 73 20 61  RCS file lists a
5f30: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a   default branch.
5f40: 09 23 20 65 78 70 6c 69 63 69 74 6c 79 20 69 6e  .# explicitly in
5f50: 20 69 74 73 20 68 65 61 64 65 72 2c 20 73 75 63   its header, suc
5f60: 68 20 61 73 20 27 31 2e 31 2e 31 27 2e 20 20 49  h as '1.1.1'.  I
5f70: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 65 0a  n this case, we.
5f80: 09 23 20 6b 6e 6f 77 20 74 68 61 74 20 65 76 65  .# know that eve
5f90: 72 79 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74  ry revision on t
5fa0: 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68  he vendor branch
5fb0: 20 69 73 20 74 6f 20 62 65 0a 09 23 20 74 72 65   is to be..# tre
5fc0: 61 74 65 64 20 61 73 20 68 65 61 64 20 6f 66 20  ated as head of 
5fd0: 74 72 75 6e 6b 20 61 74 20 74 68 61 74 20 70 6f  trunk at that po
5fe0: 69 6e 74 20 69 6e 20 74 69 6d 65 2e 0a 0a 09 23  int in time....#
5ff0: 20 42 75 74 20 74 68 65 72 65 27 73 20 61 6c 73   But there's als
6000: 6f 20 61 20 64 65 67 65 6e 65 72 61 74 65 20 63  o a degenerate c
6010: 61 73 65 2e 20 20 54 68 65 20 52 43 53 20 66 69  ase.  The RCS fi
6020: 6c 65 20 64 6f 65 73 20 6e 6f 74 0a 09 23 20 63  le does not..# c
6030: 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 20  urrently have a 
6040: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20  default branch, 
6050: 79 65 74 20 77 65 20 63 61 6e 20 64 65 64 75 63  yet we can deduc
6060: 65 20 74 68 61 74 20 66 6f 72 0a 09 23 20 73 6f  e that for..# so
6070: 6d 65 20 70 65 72 69 6f 64 20 69 6e 20 74 68 65  me period in the
6080: 20 70 61 73 74 20 69 74 20 70 72 6f 62 61 62 6c   past it probabl
6090: 79 20 2a 64 69 64 2a 20 68 61 76 65 20 6f 6e 65  y *did* have one
60a0: 2e 20 20 46 6f 72 0a 09 23 20 65 78 61 6d 70 6c  .  For..# exampl
60b0: 65 2c 20 74 68 65 20 66 69 6c 65 20 68 61 73 20  e, the file has 
60c0: 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73  vendor revisions
60d0: 20 31 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e 31 2e   1.1.1.1 -> 1.1.
60e0: 31 2e 39 36 2c 0a 09 23 20 61 6c 6c 20 6f 66 20  1.96,..# all of 
60f0: 77 68 69 63 68 20 61 72 65 20 64 61 74 65 64 20  which are dated 
6100: 62 65 66 6f 72 65 20 31 2e 32 2c 20 61 6e 64 20  before 1.2, and 
6110: 74 68 65 6e 20 69 74 20 68 61 73 20 31 2e 31 2e  then it has 1.1.
6120: 31 2e 39 37 0a 09 23 20 2d 3e 20 31 2e 31 2e 31  1.97..# -> 1.1.1
6130: 2e 31 30 30 20 64 61 74 65 64 20 61 66 74 65 72  .100 dated after
6140: 20 31 2e 32 2e 20 20 49 6e 20 74 68 69 73 20 63   1.2.  In this c
6150: 61 73 65 2c 20 77 65 20 73 68 6f 75 6c 64 0a 09  ase, we should..
6160: 23 20 72 65 63 6f 72 64 20 31 2e 31 2e 31 2e 39  # record 1.1.1.9
6170: 36 20 61 73 20 74 68 65 20 6c 61 73 74 20 76 65  6 as the last ve
6180: 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 20 74 6f  ndor revision to
6190: 20 68 61 76 65 20 62 65 65 6e 20 74 68 65 0a 09   have been the..
61a0: 23 20 68 65 61 64 20 6f 66 20 74 68 65 20 64 65  # head of the de
61b0: 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 0a 09  fault branch....
61c0: 69 66 20 7b 24 6d 79 70 72 69 6e 63 69 70 61 6c  if {$myprincipal
61d0: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23   ne ""} {..    #
61e0: 20 54 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20   There is still 
61f0: 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  a default branch
6200: 3b 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  ; that means tha
6210: 74 20 61 6c 6c 0a 09 20 20 20 20 23 20 72 65 76  t all..    # rev
6220: 69 73 69 6f 6e 73 20 6f 6e 20 74 68 61 74 20 62  isions on that b
6230: 72 61 6e 63 68 20 67 65 74 20 6d 61 72 6b 65 64  ranch get marked
6240: 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  ....    log writ
6250: 65 20 35 20 66 69 6c 65 20 22 46 6f 75 6e 64 20  e 5 file "Found 
6260: 65 78 70 6c 69 63 69 74 6c 79 20 6d 61 72 6b 65  explicitly marke
6270: 64 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65  d NTDB"...    se
6280: 74 20 72 6e 65 78 74 20 5b 24 6d 79 72 6f 6f 74  t rnext [$myroot
6290: 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 69 66 20   child]..    if 
62a0: 7b 24 72 6e 65 78 74 20 6e 65 20 22 22 7d 20 7b  {$rnext ne ""} {
62b0: 0a 09 09 74 72 6f 75 62 6c 65 20 66 61 74 61 6c  ...trouble fatal
62c0: 20 22 46 69 6c 65 20 77 69 74 68 20 64 65 66 61   "File with defa
62d0: 75 6c 74 20 62 72 61 6e 63 68 20 24 6d 79 70 72  ult branch $mypr
62e0: 69 6e 63 69 70 61 6c 20 61 6c 73 6f 20 68 61 73  incipal also has
62f0: 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6e 65 78   revision [$rnex
6300: 74 20 72 65 76 6e 72 5d 22 0a 09 09 72 65 74 75  t revnr]"...retu
6310: 72 6e 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  rn..    }...    
6320: 73 65 74 20 72 65 76 20 5b 24 6d 79 62 72 61 6e  set rev [$mybran
6330: 63 68 65 73 28 24 6d 79 70 72 69 6e 63 69 70 61  ches($myprincipa
6340: 6c 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 73  l) child]..    s
6350: 65 74 20 72 65 73 20 7b 7d 0a 0a 09 20 20 20 20  et res {}...    
6360: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22  while {$rev ne "
6370: 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72  "} {...lappend r
6380: 65 73 20 24 72 65 76 0a 09 09 73 65 74 20 72 65  es $rev...set re
6390: 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09  v [$rev child]..
63a0: 20 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75      }...    retu
63b0: 72 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65  rn $res...} else
63c0: 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 7d  if {$myimported}
63d0: 20 7b 0a 09 20 20 20 20 23 20 4e 6f 20 64 65 66   {..    # No def
63e0: 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 62 75 74  ault branch, but
63f0: 20 74 68 65 20 66 69 6c 65 20 61 70 70 65 61 72   the file appear
6400: 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 0a 09  s to have been..
6410: 20 20 20 20 23 20 69 6d 70 6f 72 74 65 64 2e 20      # imported. 
6420: 20 53 6f 20 6f 75 72 20 65 64 75 63 61 74 65 64   So our educated
6430: 20 67 75 65 73 73 20 69 73 20 74 68 61 74 20 61   guess is that a
6440: 6c 6c 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 20  ll revisions..  
6450: 20 20 23 20 6f 6e 20 74 68 65 20 27 31 2e 31 2e    # on the '1.1.
6460: 31 27 20 62 72 61 6e 63 68 20 77 69 74 68 20 74  1' branch with t
6470: 69 6d 65 73 74 61 6d 70 73 20 70 72 69 6f 72 20  imestamps prior 
6480: 74 6f 20 74 68 65 0a 09 20 20 20 20 23 20 74 69  to the..    # ti
6490: 6d 65 73 74 61 6d 70 20 6f 66 20 27 31 2e 32 27  mestamp of '1.2'
64a0: 20 77 65 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20   were non-trunk 
64b0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09  default branch..
64c0: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e      # revisions.
64d0: 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 72 65  ...    # This re
64e0: 61 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f 63 65 73  ally only proces
64f0: 73 65 73 20 73 74 61 6e 64 61 72 64 20 27 31 2e  ses standard '1.
6500: 31 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a 09 20 20  1.1.*'-style..  
6510: 20 20 23 20 76 65 6e 64 6f 72 20 72 65 76 69 73    # vendor revis
6520: 69 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f 75 6c 64  ions.  One could
6530: 20 63 6f 6e 63 65 69 76 61 62 6c 79 20 68 61 76   conceivably hav
6540: 65 20 61 20 66 69 6c 65 0a 09 20 20 20 20 23 20  e a file..    # 
6550: 77 68 6f 73 65 20 64 65 66 61 75 6c 74 20 62 72  whose default br
6560: 61 6e 63 68 20 69 73 20 31 2e 31 2e 33 20 6f 72  anch is 1.1.3 or
6570: 20 77 68 61 74 65 76 65 72 2c 20 6f 72 20 77 61   whatever, or wa
6580: 73 20 74 68 61 74 0a 09 20 20 20 20 23 20 61 74  s that..    # at
6590: 20 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e 20 74   some point in t
65a0: 69 6d 65 2c 20 77 69 74 68 20 76 65 6e 64 6f 72  ime, with vendor
65b0: 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 33   revisions 1.1.3
65c0: 2e 31 2c 0a 09 20 20 20 20 23 20 31 2e 31 2e 33  .1,..    # 1.1.3
65d0: 2e 32 2c 20 65 74 63 2e 20 20 42 75 74 20 77 69  .2, etc.  But wi
65e0: 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  th the default b
65f0: 72 61 6e 63 68 20 67 6f 6e 65 20 6e 6f 77 2c 0a  ranch gone now,.
6600: 09 20 20 20 20 23 20 77 65 27 64 20 68 61 76 65  .    # we'd have
6610: 20 6e 6f 20 62 61 73 69 73 20 66 6f 72 20 61 73   no basis for as
6620: 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20  suming that the 
6630: 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 0a 09 20 20  non-standard..  
6640: 20 20 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63    # vendor branc
6650: 68 20 68 61 64 20 65 76 65 72 20 62 65 65 6e 20  h had ever been 
6660: 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e  the default bran
6670: 63 68 20 61 6e 79 77 61 79 2e 0a 0a 09 20 20 20  ch anyway....   
6680: 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20   # Note that we 
6690: 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73  rely on comparis
66a0: 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  ons between the 
66b0: 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 20  timestamps..    
66c0: 23 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f  # of the revisio
66d0: 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72  ns on the vendor
66e0: 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61 74   branch and that
66f0: 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69 73   of..    # revis
6700: 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 68  ion 1.2, even th
6710: 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73 74 61  ough the timesta
6720: 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20 20  mps might be..  
6730: 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64 75    # incorrect du
6740: 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e  e to clock skew.
6750: 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 20    We could do a 
6760: 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23 20  slightly..    # 
6770: 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77 65  better job if we
6780: 20 75 73 65 64 20 74 68 65 20 63 68 61 6e 67 65   used the change
6790: 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c 20  set timestamps, 
67a0: 61 73 20 69 74 20 69 73 0a 09 20 20 20 20 23 20  as it is..    # 
67b0: 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74 68  possible that th
67c0: 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74  e dependencies t
67d0: 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20  hat went into.. 
67e0: 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e 67     # determining
67f0: 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d 70   those timestamp
6800: 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75 72  s are more accur
6810: 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20 23  ate.  But..    #
6820: 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71 75   that would requ
6830: 69 72 65 20 61 6e 20 65 78 74 72 61 20 70 61 73  ire an extra pas
6840: 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20  s or two....    
6850: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
6860: 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31  s mybranches(1.1
6870: 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b  .1)]} { return {
6880: 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72  } }...    log wr
6890: 69 74 65 20 35 20 66 69 6c 65 20 22 44 65 64 75  ite 5 file "Dedu
68a0: 63 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f 66  ced existence of
68b0: 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74   NTDB"...    set
68c0: 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 68   rev  [$mybranch
68d0: 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d  es(1.1.1) child]
68e0: 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 20 7b  ..    set res  {
68f0: 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70 20  }..    set stop 
6900: 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  [$myroot child].
6910: 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20  ..    if {$stop 
6920: 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 74  eq ""} {...# Get
6930: 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74   everything on t
6940: 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69 6c  he branch...whil
6950: 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b  e {$rev ne ""} {
6960: 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  ...    lappend r
6970: 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 65  es $rev...    se
6980: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c  t rev [$rev chil
6990: 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c  d]...}..    } el
69a0: 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74  se {...# Collect
69b0: 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74   everything on t
69c0: 68 65 20 62 72 61 6e 63 68 20 77 68 69 63 68 20  he branch which 
69d0: 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 09  seems to have...
69e0: 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64  # been committed
69f0: 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
6a00: 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20  t primary child 
6a10: 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 20  of the...# root 
6a20: 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20  revision....set 
6a30: 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 20  stopdate [$stop 
6a40: 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24  date]...while {$
6a50: 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20  rev ne ""} {... 
6a60: 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61 74     if {[$rev dat
6a70: 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d  e] >= $stopdate}
6a80: 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 70   break...    lap
6a90: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09  pend res $rev...
6aa0: 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65      set rev [$re
6ab0: 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20  v child]...}..  
6ac0: 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e    }...    return
6ad0: 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b   $res...} else {
6ae0: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a  ..    return {}.
6af0: 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  .}.    }..    # 
6b00: 47 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49 6e  General note: In
6b10: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
6b20: 65 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20 6d  ethods we only m
6b30: 6f 64 69 66 79 20 74 68 65 20 6c 69 6e 6b 73 0a  odify the links.
6b40: 20 20 20 20 23 20 62 65 74 77 65 65 6e 20 72 65      # between re
6b50: 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d 62  visions and symb
6b60: 6f 6c 73 20 74 6f 20 72 65 73 74 72 75 63 74 75  ols to restructu
6b70: 72 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a  re the revision.
6b80: 20 20 20 20 23 20 74 72 65 65 2e 20 57 65 20 64      # tree. We d
6b90: 6f 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 6f  o __not__ destro
6ba0: 79 20 74 68 65 20 6f 62 6a 65 63 74 73 2e 20 47  y the objects. G
6bb0: 69 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65 78  iven the complex
6bc0: 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 43 20   links.    # GC 
6bd0: 69 73 20 64 69 66 66 69 63 75 6c 74 20 61 74 20  is difficult at 
6be0: 74 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 20 69  this level. It i
6bf0: 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 74 6f  s much easier to
6c00: 20 64 72 6f 70 0a 20 20 20 20 23 20 65 76 65 72   drop.    # ever
6c10: 79 74 68 69 6e 67 20 77 68 65 6e 20 77 65 20 77  ything when we w
6c20: 65 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 69 73  e are done. This
6c30: 20 68 61 70 70 65 6e 73 20 69 6e 20 27 64 72 6f   happens in 'dro
6c40: 70 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 23 20  p', using.    # 
6c50: 74 68 65 20 73 74 61 74 65 20 76 61 72 69 61 62  the state variab
6c60: 6c 65 20 27 6d 79 72 65 76 27 2c 20 27 6d 79 62  le 'myrev', 'myb
6c70: 72 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 27 6d  ranches', and 'm
6c80: 79 74 61 67 73 27 2e 20 57 68 61 74 20 77 65 0a  ytags'. What we.
6c90: 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 70 65      # have to pe
6ca0: 72 73 69 73 74 2c 20 70 65 72 66 6f 72 6d 65 64  rsist, performed
6cb0: 20 62 79 20 27 70 65 72 73 69 73 74 27 2c 20 77   by 'persist', w
6cc0: 65 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a 20  e know will be. 
6cd0: 20 20 20 23 20 72 65 61 63 68 61 62 6c 65 20 74     # reachable t
6ce0: 68 72 6f 75 67 68 20 74 68 65 20 72 65 76 69 73  hrough the revis
6cf0: 69 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e 20 27  ions listed in '
6d00: 6d 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 68 65  myroots' and the
6d10: 69 72 0a 20 20 20 20 23 20 63 68 69 6c 64 72 65  ir.    # childre
6d20: 6e 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a 0a  n and symbols...
6d30: 20 20 20 20 6d 65 74 68 6f 64 20 41 64 6a 75 73      method Adjus
6d40: 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74  tNonTrunkDefault
6d50: 42 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 74 7d  Branch {revlist}
6d60: 20 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b 24 6d   {..set stop [$m
6d70: 79 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23 20  yroot child] ;# 
6d80: 72 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 20  rev '1.2'...log 
6d90: 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 41 64  write 5 file "Ad
6da0: 6a 75 73 74 69 6e 67 20 4e 54 44 42 20 63 6f 6e  justing NTDB con
6db0: 74 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c  taining [nsp [ll
6dc0: 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d 20  ength $revlist] 
6dd0: 72 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 46  revision]"...# F
6de0: 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20  rom cvs2svn the 
6df0: 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e  following explan
6e00: 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69  ation (with modi
6e10: 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72  fications..# for
6e20: 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a   our algorithm):
6e30: 0a 0a 09 23 20 41 64 6a 75 73 74 20 74 68 65 20  ...# Adjust the 
6e40: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
6e50: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f  t branch revisio
6e60: 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a  ns found in the.
6e70: 09 23 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a 09  .# 'revlist'....
6e80: 23 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 20 69  # 'myimported' i
6e90: 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67  s a boolean flag
6ea0: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
6eb0: 68 65 72 20 74 68 69 73 20 66 69 6c 65 0a 09 23  her this file..#
6ec0: 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65   appears to have
6ed0: 20 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c 20   been imported, 
6ee0: 77 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e 73  which also means
6ef0: 20 74 68 61 74 0a 09 23 20 72 65 76 69 73 69 6f   that..# revisio
6f00: 6e 20 31 2e 31 20 68 61 73 20 61 20 67 65 6e 65  n 1.1 has a gene
6f10: 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67  rated log messag
6f20: 65 20 74 68 61 74 20 6e 65 65 64 20 6e 6f 74 20  e that need not 
6f30: 62 65 0a 09 23 20 70 72 65 73 65 72 76 65 64 2e  be..# preserved.
6f40: 20 20 27 72 65 76 6c 69 73 74 27 20 69 73 20 61    'revlist' is a
6f50: 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 20   list of object 
6f60: 72 65 66 65 72 65 6e 63 65 73 20 66 6f 72 20 74  references for t
6f70: 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20  he..# revisions 
6f80: 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 64  that have been d
6f90: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
6fa0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
6fb0: 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69  t..# branch revi
6fc0: 73 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 20  sions....# Note 
6fd0: 74 68 61 74 20 74 68 65 20 66 69 72 73 74 20 72  that the first r
6fe0: 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 64  evision on the d
6ff0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73  efault branch is
7000: 0a 09 23 20 68 61 6e 64 6c 65 64 20 73 74 72 61  ..# handled stra
7010: 6e 67 65 6c 79 20 62 79 20 43 56 53 2e 20 20 49  ngely by CVS.  I
7020: 66 20 61 20 66 69 6c 65 20 69 73 20 69 6d 70 6f  f a file is impo
7030: 72 74 65 64 20 28 61 73 20 6f 70 70 6f 73 65 64  rted (as opposed
7040: 0a 09 23 20 74 6f 20 62 65 69 6e 67 20 61 64 64  ..# to being add
7050: 65 64 29 2c 20 43 56 53 20 63 72 65 61 74 65 73  ed), CVS creates
7060: 20 61 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 2c   a 1.1 revision,
7070: 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 61 0a   then creates a.
7080: 09 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68  .# vendor branch
7090: 20 31 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e 20   1.1.1 based on 
70a0: 31 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 74 65  1.1, then create
70b0: 73 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20 72  s a 1.1.1.1..# r
70c0: 65 76 69 73 69 6f 6e 20 74 68 61 74 20 69 73 20  evision that is 
70d0: 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 68 65  identical to the
70e0: 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 69   1.1 revision (i
70f0: 2e 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c 74  .e., its..# delt
7100: 61 74 65 78 74 20 69 73 20 65 6d 70 74 79 29 2e  atext is empty).
7110: 20 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 61 67    The log messag
7120: 65 20 74 68 61 74 20 74 68 65 20 75 73 65 72 20  e that the user 
7130: 74 79 70 65 64 0a 09 23 20 77 68 65 6e 20 69 6d  typed..# when im
7140: 70 6f 72 74 69 6e 67 20 69 73 20 73 74 6f 72 65  porting is store
7150: 64 20 77 69 74 68 20 74 68 65 20 31 2e 31 2e 31  d with the 1.1.1
7160: 2e 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 54 68  .1 revision.  Th
7170: 65 20 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f  e 1.1..# revisio
7180: 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e  n always contain
7190: 73 20 61 20 73 74 61 6e 64 61 72 64 2c 20 67 65  s a standard, ge
71a0: 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73  nerated log mess
71b0: 61 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 61 6c  age,..# 'Initial
71c0: 20 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a 09   revision\n'....
71d0: 23 20 57 68 65 6e 20 77 65 20 64 65 74 65 63 74  # When we detect
71e0: 20 61 20 73 74 72 61 69 67 68 74 66 6f 72 77 61   a straightforwa
71f0: 72 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20 74  rd import like t
7200: 68 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 23 20  his, we want..# 
7210: 74 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 79 20  to handle it by 
7220: 64 65 6c 65 74 69 6e 67 20 74 68 65 20 31 2e 31  deleting the 1.1
7230: 20 72 65 76 69 73 69 6f 6e 20 28 77 68 69 63 68   revision (which
7240: 20 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e 74   doesn't..# cont
7250: 61 69 6e 20 61 6e 79 20 75 73 65 66 75 6c 20 69  ain any useful i
7260: 6e 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20  nformation) and 
7270: 6d 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20 69  making 1.1.1.1 i
7280: 6e 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70 65  nto an..# indepe
7290: 6e 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74 68  ndent root in th
72a0: 65 20 66 69 6c 65 27 73 20 64 65 70 65 6e 64 65  e file's depende
72b0: 6e 63 79 20 74 72 65 65 2e 20 20 49 6e 20 53 56  ncy tree.  In SV
72c0: 4e 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77 69  N,..# 1.1.1.1 wi
72d0: 6c 6c 20 62 65 20 61 64 64 65 64 20 64 69 72 65  ll be added dire
72e0: 63 74 6c 79 20 74 6f 20 74 68 65 20 76 65 6e 64  ctly to the vend
72f0: 6f 72 20 62 72 61 6e 63 68 20 77 69 74 68 20 69  or branch with i
7300: 74 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 63 6f  ts..# initial co
7310: 6e 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e 20  ntent.  Then in 
7320: 61 20 73 70 65 63 69 61 6c 20 27 70 6f 73 74 2d  a special 'post-
7330: 63 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23 20  commit', the..# 
7340: 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e  1.1.1.1 revision
7350: 20 69 73 20 63 6f 70 69 65 64 20 62 61 63 6b 20   is copied back 
7360: 74 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 66  to trunk....# If
7370: 20 74 68 65 20 75 73 65 72 20 69 6d 70 6f 72 74   the user import
7380: 73 20 61 67 61 69 6e 20 74 6f 20 74 68 65 20 73  s again to the s
7390: 61 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  ame vendor branc
73a0: 68 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 20 63  h, then CVS..# c
73b0: 72 65 61 74 65 73 20 72 65 76 69 73 69 6f 6e 73  reates revisions
73c0: 20 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 2e   1.1.1.2, 1.1.1.
73d0: 33 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 20 76  3, etc. on the v
73e0: 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23  endor branch,..#
73f0: 20 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e 74   *without* count
7400: 65 72 70 61 72 74 73 20 69 6e 20 74 72 75 6e 6b  erparts in trunk
7410: 20 28 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68   (even though th
7420: 65 73 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23  ese revisions..#
7430: 20 65 66 66 65 63 74 69 76 65 6c 79 20 70 6c 61   effectively pla
7440: 79 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 74 72  y the role of tr
7450: 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e 20  unk revisions). 
7460: 20 53 6f 20 61 66 74 65 72 20 77 65 20 61 64 64   So after we add
7470: 0a 09 23 20 73 75 63 68 20 72 65 76 69 73 69 6f  ..# such revisio
7480: 6e 73 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72  ns to the vendor
7490: 20 62 72 61 6e 63 68 2c 20 77 65 20 61 6c 73 6f   branch, we also
74a0: 20 63 6f 70 79 20 74 68 65 6d 20 62 61 63 6b 20   copy them back 
74b0: 74 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20 70  to..# trunk in p
74c0: 6f 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 23  ost-commits....#
74d0: 20 57 65 20 6d 61 72 6b 20 74 68 65 20 72 65 76   We mark the rev
74e0: 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20  isions found in 
74f0: 27 72 65 76 6c 69 73 74 27 20 61 73 20 64 65 66  'revlist' as def
7500: 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72  ault branch..# r
7510: 65 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f 2c  evisions.  Also,
7520: 20 69 66 20 74 68 65 20 72 6f 6f 74 20 72 65 76   if the root rev
7530: 69 73 69 6f 6e 20 68 61 73 20 61 20 70 72 69 6d  ision has a prim
7540: 61 72 79 20 63 68 69 6c 64 0a 09 23 20 77 65 20  ary child..# we 
7550: 73 65 74 20 74 68 61 74 20 72 65 76 69 73 69 6f  set that revisio
7560: 6e 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20 74  n to depend on t
7570: 68 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 6e  he last non-trun
7580: 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61  k default..# bra
7590: 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 61 6e 64  nch revision and
75a0: 20 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 73 74   possibly adjust
75b0: 20 69 74 73 20 74 79 70 65 20 61 63 63 6f 72 64   its type accord
75c0: 69 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69 72  ingly....set fir
75d0: 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c  st [lindex $revl
75e0: 69 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 69  ist 0]...log wri
75f0: 74 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 66 69  te 6 file "<[$fi
7600: 72 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78 70  rst revnr]> [exp
7610: 72 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 3f  r {$myimported ?
7620: 20 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 22 6e   "imported" : "n
7630: 6f 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c 20  ot imported"}], 
7640: 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f  [$first operatio
7650: 6e 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69 72  n], [expr {[$fir
7660: 73 74 20 68 61 73 74 65 78 74 5d 20 3f 20 22 68  st hastext] ? "h
7670: 61 73 20 74 65 78 74 22 20 3a 20 22 6e 6f 20 74  as text" : "no t
7680: 65 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 6d  ext"}]"...if {$m
7690: 79 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 20 20  yimported &&..  
76a0: 20 20 5b 24 66 69 72 73 74 20 72 65 76 6e 72 5d    [$first revnr]
76b0: 20 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 26 26   eq "1.1.1.1" &&
76c0: 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20 6f 70  ..    [$first op
76d0: 65 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 68 61  eration] eq "cha
76e0: 6e 67 65 22 20 26 26 0a 09 20 20 20 20 21 5b 24  nge" &&..    ![$
76f0: 66 69 72 73 74 20 68 61 73 74 65 78 74 5d 7d 20  first hastext]} 
7700: 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 31  {...    set rev1
7710: 31 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74  1 [$first parent
7720: 5d 20 3b 20 23 20 41 73 73 65 72 74 3a 20 53 68  ] ; # Assert: Sh
7730: 6f 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e 0a  ould be myroot..
7740: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33  .    log write 3
7750: 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20   file "Removing 
7760: 69 72 72 65 6c 65 76 61 6e 74 20 72 65 76 69 73  irrelevant revis
7770: 69 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 76 6e  ion [$rev11 revn
7780: 72 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 74 20  r]"...    # Cut 
7790: 6f 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 72 6f  out the old myro
77a0: 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 20  ot revision.... 
77b0: 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f     ldelete myroo
77c0: 74 73 20 24 72 65 76 31 31 20 3b 20 23 20 4e 6f  ts $rev11 ; # No
77d0: 74 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f 6e  t a root any lon
77e0: 67 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 72 73  ger....    $firs
77f0: 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 20  t cutfromparent 
7800: 3b 20 23 20 53 65 76 65 72 20 72 65 76 69 73 69  ; # Sever revisi
7810: 6f 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 72  on from parent r
7820: 65 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69 66  evision...    if
7830: 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b   {$stop ne ""} {
7840: 0a 09 09 24 73 74 6f 70 20 63 75 74 66 72 6f 6d  ...$stop cutfrom
7850: 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64  parent...lappend
7860: 20 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 20 3b   myroots $stop ;
7870: 20 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66 74   # New root, aft
7880: 65 72 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68  er vendor branch
7890: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20  ..    }...    # 
78a0: 43 75 74 20 6f 75 74 20 74 68 65 20 76 65 6e 64  Cut out the vend
78b0: 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c  or branch symbol
78c0: 0a 0a 09 20 20 20 20 73 65 74 20 76 65 6e 64 6f  ...    set vendo
78d0: 72 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74  r [$first parent
78e0: 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 6e 74  branch]..    int
78f0: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 24  egrity assert {$
7900: 76 65 6e 64 6f 72 20 6e 65 20 22 22 7d 20 7b 46  vendor ne ""} {F
7910: 69 72 73 74 20 4e 54 44 42 20 72 65 76 69 73 69  irst NTDB revisi
7920: 6f 6e 20 68 61 73 20 6e 6f 20 62 72 61 6e 63 68  on has no branch
7930: 7d 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65 6e  }..    if {[$ven
7940: 64 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20 24  dor parent] eq $
7950: 72 65 76 31 31 7d 20 7b 0a 09 09 24 72 65 76 31  rev11} {...$rev1
7960: 31 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20  1 removebranch  
7970: 20 20 20 20 20 20 24 76 65 6e 64 6f 72 0a 09 09        $vendor...
7980: 24 72 65 76 31 31 20 72 65 6d 6f 76 65 63 68 69  $rev11 removechi
7990: 6c 64 6f 6e 62 72 61 6e 63 68 20 24 66 69 72 73  ldonbranch $firs
79a0: 74 0a 09 09 24 76 65 6e 64 6f 72 20 63 75 74 62  t...$vendor cutb
79b0: 72 61 6e 63 68 70 61 72 65 6e 74 20 20 20 20 3b  ranchparent    ;
79c0: 23 20 62 70 20 3d 20 72 65 76 31 31 2c 20 61 62  # bp = rev11, ab
79d0: 6f 75 74 20 74 6f 20 62 65 20 67 6f 6e 65 0a 09  out to be gone..
79e0: 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70  .$first cutfromp
79f0: 61 72 65 6e 74 62 72 61 6e 63 68 20 3b 23 20 70  arentbranch ;# p
7a00: 62 20 3d 20 76 65 6e 64 6f 72 2c 20 74 6f 20 62  b = vendor, to b
7a10: 65 20 61 20 64 65 74 61 63 68 65 64 20 4c 4f 44  e a detached LOD
7a20: 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f  ...lappend myroo
7a30: 74 73 20 24 66 69 72 73 74 0a 09 20 20 20 20 7d  ts $first..    }
7a40: 0a 0a 09 20 20 20 20 23 20 43 68 61 6e 67 65 20  ...    # Change 
7a50: 74 68 65 20 74 79 70 65 20 6f 66 20 66 69 72 73  the type of firs
7a60: 74 20 28 74 79 70 69 63 61 6c 6c 79 20 66 72 6f  t (typically fro
7a70: 6d 20 43 68 61 6e 67 65 20 74 6f 20 41 64 64 29  m Change to Add)
7a80: 3a 0a 09 20 20 20 20 24 66 69 72 73 74 20 72 65  :..    $first re
7a90: 74 79 70 65 20 61 64 64 0a 0a 09 20 20 20 20 23  type add...    #
7aa0: 20 4d 6f 76 65 20 61 6e 79 20 74 61 67 73 20 61   Move any tags a
7ab0: 6e 64 20 62 72 61 6e 63 68 65 73 20 66 72 6f 6d  nd branches from
7ac0: 20 74 68 65 20 6f 6c 64 20 74 6f 20 74 68 65 20   the old to the 
7ad0: 6e 65 77 20 72 6f 6f 74 2e 0a 09 20 20 20 20 24  new root...    $
7ae0: 72 65 76 31 31 20 6d 6f 76 65 73 79 6d 62 6f 6c  rev11 movesymbol
7af0: 73 74 6f 20 24 66 69 72 73 74 0a 09 7d 0a 0a 09  sto $first..}...
7b00: 23 20 4d 61 72 6b 20 61 6c 6c 20 74 68 65 20 73  # Mark all the s
7b10: 70 65 63 69 61 6c 20 72 65 76 69 73 69 6f 6e 73  pecial revisions
7b20: 20 61 73 20 73 75 63 68 0a 09 66 6f 72 65 61 63   as such..foreac
7b30: 68 20 72 65 76 20 24 72 65 76 6c 69 73 74 20 7b  h rev $revlist {
7b40: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
7b50: 33 20 66 69 6c 65 20 22 52 65 76 69 73 69 6f 6e  3 file "Revision
7b60: 20 6f 6e 20 64 65 66 61 75 6c 74 20 62 72 61 6e   on default bran
7b70: 63 68 3a 20 5b 24 72 65 76 20 72 65 76 6e 72 5d  ch: [$rev revnr]
7b80: 22 0a 09 20 20 20 20 24 72 65 76 20 73 65 74 6f  "..    $rev seto
7b90: 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 31  ndefaultbranch 1
7ba0: 0a 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f 70 20  ..}...if {$stop 
7bb0: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20  ne ""} {..    # 
7bc0: 52 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c 6f 67  Revision 1.2 log
7bd0: 69 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20 74  ically follows t
7be0: 68 65 20 69 6d 70 6f 72 74 65 64 20 72 65 76 69  he imported revi
7bf0: 73 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20 6e 6f  sions,..    # no
7c00: 74 20 31 2e 31 2e 20 20 41 63 63 6f 72 64 69 6e  t 1.1.  Accordin
7c10: 67 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69 74 20  gly, connect it 
7c20: 74 6f 20 74 68 65 20 6c 61 73 74 20 4e 54 44 42  to the last NTDB
7c30: 52 20 61 6e 64 0a 09 20 20 20 20 23 20 70 6f 73  R and..    # pos
7c40: 73 69 62 6c 79 20 63 68 61 6e 67 65 20 69 74 73  sibly change its
7c50: 20 74 79 70 65 2e 0a 0a 09 20 20 20 20 73 65 74   type....    set
7c60: 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20 24 72   last [lindex $r
7c70: 65 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20 20 20  evlist end]..   
7c80: 20 24 73 74 6f 70 20 73 65 74 64 65 66 61 75 6c   $stop setdefaul
7c90: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 24 6c  tbranchparent $l
7ca0: 61 73 74 20 3b 20 23 20 52 65 74 79 70 65 73 20  ast ; # Retypes 
7cb0: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f 6f  the revision too
7cc0: 2e 0a 09 20 20 20 20 24 6c 61 73 74 20 73 65 74  ...    $last set
7cd0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69  defaultbranchchi
7ce0: 6c 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09 72 65  ld  $stop..}..re
7cf0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
7d00: 6d 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f 44 73  method CheckLODs
7d10: 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b   {} {..foreach {
7d20: 5f 20 62 72 61 6e 63 68 7d 20 20 5b 61 72 72 61  _ branch}  [arra
7d30: 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73  y get mybranches
7d40: 5d 20 7b 20 24 62 72 61 6e 63 68 20 63 68 65 63  ] { $branch chec
7d50: 6b 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63 68 20  klod }..foreach 
7d60: 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72  {_ taglist} [arr
7d70: 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b  ay get mytags] {
7d80: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 61  ..    foreach ta
7d90: 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74 61  g $taglist { $ta
7da0: 67 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d 0a  g checklod }..}.
7db0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
7dc0: 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65     method Remove
7dd0: 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 74 69  IrrelevantDeleti
7de0: 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d  ons {} {..# From
7df0: 20 63 76 73 32 73 76 6e 3a 20 49 66 20 61 20 66   cvs2svn: If a f
7e00: 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e 20  ile is added on 
7e10: 61 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20 61  a branch, then a
7e20: 20 74 72 75 6e 6b 0a 09 23 20 72 65 76 69 73 69   trunk..# revisi
7e30: 6f 6e 20 69 73 20 61 64 64 65 64 20 61 74 20 74  on is added at t
7e40: 68 65 20 73 61 6d 65 20 74 69 6d 65 20 69 6e 20  he same time in 
7e50: 74 68 65 20 27 44 65 61 64 27 20 73 74 61 74 65  the 'Dead' state
7e60: 2e 0a 09 23 20 54 68 69 73 20 72 65 76 69 73 69  ...# This revisi
7e70: 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61 6e  on doesn't do an
7e80: 79 74 68 69 6e 67 20 75 73 65 66 75 6c 2c 20 73  ything useful, s
7e90: 6f 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a 09 66  o delete it....f
7ea0: 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79 72  oreach root $myr
7eb0: 6f 6f 74 73 20 7b 0a 09 20 20 20 20 69 66 20 7b  oots {..    if {
7ec0: 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 5d  [$root isneeded]
7ed0: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20  } continue..    
7ee0: 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c 65  log write 2 file
7ef0: 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 63   "Removing unnec
7f00: 65 73 73 61 72 79 20 64 65 61 64 20 72 65 76 69  essary dead revi
7f10: 73 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65 76 6e  sion [$root revn
7f20: 72 5d 22 0a 0a 09 20 20 20 20 23 20 52 65 6d 6f  r]"...    # Remo
7f30: 76 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61 6b 65  ve as root, make
7f40: 20 69 74 73 20 63 68 69 6c 64 20 6e 65 77 20 72   its child new r
7f50: 6f 6f 74 20 61 66 74 65 72 0a 09 20 20 20 20 23  oot after..    #
7f60: 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 69   disconnecting i
7f70: 74 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 73  t from the revis
7f80: 69 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67 20 61  ion just going a
7f90: 77 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65  way....    ldele
7fa0: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74  te myroots $root
7fb0: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74  ..    if {[$root
7fc0: 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a 09 09   haschild]} {...
7fd0: 73 65 74 20 63 68 69 6c 64 20 5b 24 72 6f 6f 74  set child [$root
7fe0: 20 63 68 69 6c 64 5d 0a 09 09 24 63 68 69 6c 64   child]...$child
7ff0: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09   cutfromparent..
8000: 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73  .lappend myroots
8010: 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a 0a   $child..    }..
8020: 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 74  .    # Cut out t
8030: 68 65 20 62 72 61 6e 63 68 65 73 20 73 70 61 77  he branches spaw
8040: 6e 65 64 20 62 79 20 74 68 65 20 72 65 76 69 73  ned by the revis
8050: 69 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20 20 23  ion to be..    #
8060: 20 64 65 6c 65 74 65 64 2e 20 49 66 20 74 68 65   deleted. If the
8070: 20 62 72 61 6e 63 68 20 68 61 73 20 72 65 76 69   branch has revi
8080: 73 69 6f 6e 73 20 74 68 65 79 20 73 68 6f 75 6c  sions they shoul
8090: 64 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20 23  d already..    #
80a0: 20 75 73 65 20 6f 70 65 72 61 74 69 6f 6e 20 27   use operation '
80b0: 61 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20 74 6f  add', no need to
80c0: 20 63 68 61 6e 67 65 20 74 68 61 74 2e 20 54 68   change that. Th
80d0: 65 20 66 69 72 73 74 0a 09 20 20 20 20 23 20 72  e first..    # r
80e0: 65 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63 68 20  evision on each 
80f0: 62 72 61 6e 63 68 20 62 65 63 6f 6d 65 73 20 61  branch becomes a
8100: 20 6e 65 77 20 61 6e 64 20 64 69 73 63 6f 6e 6e   new and disconn
8110: 65 63 74 65 64 0a 09 20 20 20 20 23 20 72 6f 6f  ected..    # roo
8120: 74 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61 63 68  t....    foreach
8130: 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62   branch [$root b
8140: 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 24 62 72  ranches] {...$br
8150: 61 6e 63 68 20 63 75 74 62 72 61 6e 63 68 70 61  anch cutbranchpa
8160: 72 65 6e 74 0a 09 09 69 66 20 7b 21 5b 24 62 72  rent...if {![$br
8170: 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20  anch haschild]} 
8180: 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 66  continue...set f
8190: 69 72 73 74 20 5b 24 62 72 61 6e 63 68 20 63 68  irst [$branch ch
81a0: 69 6c 64 5d 0a 09 09 24 66 69 72 73 74 20 63 75  ild]...$first cu
81b0: 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61  tfromparent...la
81c0: 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66  ppend myroots $f
81d0: 69 72 73 74 0a 09 20 20 20 20 7d 0a 09 20 20 20  irst..    }..   
81e0: 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c   $root removeall
81f0: 62 72 61 6e 63 68 65 73 0a 0a 09 20 20 20 20 23  branches...    #
8200: 20 54 61 67 67 69 6e 67 20 61 20 64 65 61 64 20   Tagging a dead 
8210: 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74  revision doesn't
8220: 20 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73 6f   do anything, so
8230: 20 72 65 6d 6f 76 65 0a 09 20 20 20 20 23 20 61   remove..    # a
8240: 6e 79 20 74 61 67 73 20 74 68 61 74 20 77 65 72  ny tags that wer
8250: 65 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 20  e set on it.... 
8260: 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61     $root removea
8270: 6c 6c 74 61 67 73 0a 0a 09 20 20 20 20 23 20 54  lltags...    # T
8280: 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61 70  his can only hap
8290: 70 65 6e 20 6f 6e 63 65 20 70 65 72 20 66 69 6c  pen once per fil
82a0: 65 2c 20 61 6e 64 20 77 65 20 6d 69 67 68 74 20  e, and we might 
82b0: 68 61 76 65 0a 09 20 20 20 20 23 20 6a 75 73 74  have..    # just
82c0: 20 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74 73   changed myroots
82d0: 2c 20 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f 6f  , so end the loo
82e0: 70 0a 09 20 20 20 20 62 72 65 61 6b 0a 09 7d 0a  p..    break..}.
82f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
8300: 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65     method Remove
8310: 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65 6c  InitialBranchDel
8320: 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46  etions {} {..# F
8330: 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20  rom cvs2svn: If 
8340: 74 68 65 20 66 69 72 73 74 20 72 65 76 69 73 69  the first revisi
8350: 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 69  on on a branch i
8360: 73 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73 73  s an..# unnecess
8370: 61 72 79 20 64 65 6c 65 74 65 2c 20 72 65 6d 6f  ary delete, remo
8380: 76 65 20 69 74 2e 0a 09 23 0a 09 23 20 49 66 20  ve it...#..# If 
8390: 61 20 66 69 6c 65 20 69 73 20 61 64 64 65 64 20  a file is added 
83a0: 6f 6e 20 61 20 62 72 61 6e 63 68 20 28 77 68 65  on a branch (whe
83b0: 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 61  ther or not it a
83c0: 6c 72 65 61 64 79 0a 09 23 20 65 78 69 73 74 65  lready..# existe
83d0: 64 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68 65  d on trunk), the
83e0: 6e 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 6f  n new versions o
83f0: 66 20 43 56 53 20 61 64 64 20 61 20 66 69 72 73  f CVS add a firs
8400: 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69  t..# branch revi
8410: 73 69 6f 6e 20 69 6e 20 74 68 65 20 27 64 65 61  sion in the 'dea
8420: 64 27 20 73 74 61 74 65 20 28 74 6f 20 69 6e 64  d' state (to ind
8430: 69 63 61 74 65 20 74 68 61 74 20 74 68 65 0a 09  icate that the..
8440: 23 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20 65  # file did not e
8450: 78 69 73 74 20 6f 6e 20 74 68 65 20 62 72 61 6e  xist on the bran
8460: 63 68 20 77 68 65 6e 20 74 68 65 20 62 72 61 6e  ch when the bran
8470: 63 68 20 77 61 73 0a 09 23 20 63 72 65 61 74 65  ch was..# create
8480: 64 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74  d) followed by t
8490: 68 65 20 73 65 63 6f 6e 64 20 62 72 61 6e 63 68  he second branch
84a0: 20 72 65 76 69 73 69 6f 6e 2c 20 77 68 69 63 68   revision, which
84b0: 20 69 73 20 61 6e 0a 09 23 20 61 64 64 2e 20 20   is an..# add.  
84c0: 57 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74 65  When we encounte
84d0: 72 20 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e  r this situation
84e0: 2c 20 77 65 20 73 65 76 65 72 20 74 68 65 20 62  , we sever the b
84f0: 72 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74 72  ranch..# from tr
8500: 75 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65 20 74  unk and delete t
8510: 68 65 20 66 69 72 73 74 20 62 72 61 6e 63 68 20  he first branch 
8520: 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 74  revision....# At
8530: 20 74 68 69 73 20 70 6f 69 6e 74 20 77 65 20 6d   this point we m
8540: 61 79 20 68 61 76 65 20 61 6c 72 65 61 64 79 20  ay have already 
8550: 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20 69  multiple roots i
8560: 6e 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77 65  n myroots,..# we
8570: 20 68 61 76 65 20 74 6f 20 70 72 6f 63 65 73 73   have to process
8580: 20 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72   them all....for
8590: 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66  each root [$self
85a0: 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d   LinesOfDevelopm
85b0: 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b  ent] {..    if {
85c0: 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 62  [$root isneededb
85d0: 72 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 69  ranchdel]} conti
85e0: 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  nue..    log wri
85f0: 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76  te 2 file "Remov
8600: 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20  ing unnecessary 
8610: 69 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20 64  initial branch d
8620: 65 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72 65 76  elete [$root rev
8630: 6e 72 5d 22 0a 0a 09 20 20 20 20 73 65 74 20 62  nr]"...    set b
8640: 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 72  ranch [$root par
8650: 65 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20  entbranch]..    
8660: 73 65 74 20 70 61 72 65 6e 74 20 5b 24 72 6f 6f  set parent [$roo
8670: 74 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 73  t parent]..    s
8680: 65 74 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f 74  et child  [$root
8690: 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c 64   child]...    ld
86a0: 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72  elete myroots $r
86b0: 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64  oot..    lappend
86c0: 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a   myroots $child.
86d0: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 75  ..    $branch cu
86e0: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 20  tbranchparent.. 
86f0: 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 63 68     $branch cutch
8700: 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20  ild..    $child 
8710: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 0a   cutfromparent..
8720: 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74  .    $branch set
8730: 63 68 69 6c 64 20 20 20 20 20 20 20 20 24 63 68  child        $ch
8740: 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20  ild..    $child 
8750: 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63 68   setparentbranch
8760: 20 24 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 24   $branch...    $
8770: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61  parent removebra
8780: 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e  nch        $bran
8790: 63 68 0a 09 20 20 20 20 24 70 61 72 65 6e 74 20  ch..    $parent 
87a0: 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61  removechildonbra
87b0: 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65  nch $root..}..re
87c0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
87d0: 6d 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66 44 65  method LinesOfDe
87e0: 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09  velopment {} {..
87f0: 23 20 44 65 74 65 72 6d 69 6e 65 20 61 6c 6c 20  # Determine all 
8800: 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70  lines of develop
8810: 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 66 69 6c  ment for the fil
8820: 65 2e 20 54 68 69 73 20 61 72 65 0a 09 23 20 74  e. This are..# t
8830: 68 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c 20  he known roots, 
8840: 61 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f 66 20  and the root of 
8850: 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 66 6f 75  all branches fou
8860: 6e 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c 69 6e  nd on the..# lin
8870: 65 20 6f 66 20 70 72 69 6d 61 72 79 20 63 68 69  e of primary chi
8880: 6c 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f 64  ldren....set lod
8890: 72 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65 61 63  roots {}..foreac
88a0: 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20  h root $myroots 
88b0: 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64 64  {..    $self Add
88c0: 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44  BranchedLinesOfD
88d0: 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f  evelopment lodro
88e0: 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 6c  ots $root..    l
88f0: 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20  append lodroots 
8900: 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e  $root..}..return
8910: 20 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20 20 7d   $lodroots.    }
8920: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64  ..    method Add
8930: 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44  BranchedLinesOfD
8940: 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20 72  evelopment {lv r
8950: 6f 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20 31 20  oot} {..upvar 1 
8960: 24 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09 77 68  $lv lodroots..wh
8970: 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22  ile {$root ne ""
8980: 7d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68  } {..    foreach
8990: 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62   branch [$root b
89a0: 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 66 20  ranches] {...if 
89b0: 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63 68  {![$branch hasch
89c0: 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09  ild]} continue..
89d0: 09 73 65 74 20 63 68 69 6c 64 20 5b 24 62 72 61  .set child [$bra
89e0: 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 23 20 52  nch child]...# R
89f0: 65 63 75 72 73 65 20 69 6e 74 6f 20 74 68 65 20  ecurse into the 
8a00: 62 72 61 6e 63 68 20 66 6f 72 20 64 65 65 70 65  branch for deepe
8a10: 72 20 62 72 61 6e 63 68 65 73 2e 0a 09 09 24 73  r branches....$s
8a20: 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64 4c  elf AddBranchedL
8a30: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e  inesOfDevelopmen
8a40: 74 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 6c  t lodroots $chil
8a50: 64 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f 64 72  d...lappend lodr
8a60: 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 20 20  oots $child..   
8a70: 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74   }..    set root
8a80: 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09   [$root child]..
8a90: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
8aa0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63 6c  .    method Excl
8ab0: 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72  udeNonTrunkInfor
8ac0: 6d 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 52  mation {} {..# R
8ad0: 65 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74 72  emove all non-tr
8ae0: 75 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20 72 65  unk branches, re
8af0: 76 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74 61 67  visions, and tag
8b00: 73 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65 65 70  s. We do..# keep
8b10: 20 74 68 65 20 74 61 67 73 20 77 68 69 63 68 20   the tags which 
8b20: 61 72 65 20 6f 6e 20 74 68 65 20 74 72 75 6e 6b  are on the trunk
8b30: 2e 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f 6f 74  ....set ntdbroot
8b40: 20 22 22 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f   ""..foreach roo
8b50: 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66  t [$self LinesOf
8b60: 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09  Development] {..
8b70: 20 20 20 20 23 20 4e 6f 74 65 3a 20 48 65 72 65      # Note: Here
8b80: 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68   the order of th
8b90: 65 20 72 6f 6f 74 73 20 69 73 20 69 6d 70 6f 72  e roots is impor
8ba0: 74 61 6e 74 2c 0a 09 20 20 20 20 23 20 69 2e 65  tant,..    # i.e
8bb0: 2e 20 74 68 61 74 20 77 65 20 67 65 74 20 74 68  . that we get th
8bc0: 65 6d 20 69 6e 20 64 65 70 74 68 20 66 69 72 73  em in depth firs
8bd0: 74 20 6f 72 64 65 72 2e 20 54 68 69 73 20 65 6e  t order. This en
8be0: 73 75 72 65 73 0a 09 20 20 20 20 23 20 74 68 61  sures..    # tha
8bf0: 74 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f 66  t the removal of
8c00: 20 61 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e   a branch happen
8c10: 73 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65  s only after the
8c20: 0a 09 20 20 20 20 23 20 62 72 61 6e 63 68 65 73  ..    # branches
8c30: 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69 74   spawned from it
8c40: 20 77 65 72 65 20 72 65 6d 6f 76 65 64 2e 20 4f   were removed. O
8c50: 74 68 65 72 77 69 73 65 20 74 68 65 0a 09 20 20  therwise the..  
8c60: 20 20 23 20 73 79 73 74 65 6d 20 6d 69 67 68 74    # system might
8c70: 20 74 72 79 20 74 6f 20 61 63 63 65 73 73 20 64   try to access d
8c80: 65 6c 65 74 65 64 20 6f 62 6a 65 63 74 73 2e 0a  eleted objects..
8c90: 0a 09 20 20 20 20 23 20 44 6f 20 6e 6f 74 20 65  ..    # Do not e
8ca0: 78 63 6c 75 64 65 20 74 68 65 20 74 72 75 6e 6b  xclude the trunk
8cb0: 2e 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24 72 6f  ...    if {[[$ro
8cc0: 6f 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e 6b 5d  ot lod] istrunk]
8cd0: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20  } continue..    
8ce0: 24 73 65 6c 66 20 45 78 63 6c 75 64 65 42 72 61  $self ExcludeBra
8cf0: 6e 63 68 20 24 72 6f 6f 74 20 6e 74 64 62 72 6f  nch $root ntdbro
8d00: 6f 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e 74 64  ot..}...if {$ntd
8d10: 62 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09  broot ne ""} {..
8d20: 20 20 20 20 24 73 65 6c 66 20 47 72 61 66 74 4e      $self GraftN
8d30: 54 44 42 32 54 72 75 6e 6b 20 24 6e 74 64 62 72  TDB2Trunk $ntdbr
8d40: 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  oot..}..return. 
8d50: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
8d60: 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20 7b   ExcludeBranch {
8d70: 72 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20 45 78  root nv} {..# Ex
8d80: 63 6c 75 64 65 20 74 68 65 20 62 72 61 6e 63 68  clude the branch
8d90: 2f 6c 6f 64 20 73 74 61 72 74 69 6e 67 20 61 74  /lod starting at
8da0: 20 72 6f 6f 74 2c 20 61 20 72 65 76 69 73 69 6f   root, a revisio
8db0: 6e 2e 0a 09 23 0a 09 23 20 49 66 20 74 68 65 20  n...#..# If the 
8dc0: 4c 4f 44 20 73 74 61 72 74 73 20 77 69 74 68 20  LOD starts with 
8dd0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
8de0: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f  t branch revisio
8df0: 6e 73 2c 0a 09 23 20 77 65 20 6c 65 61 76 65 20  ns,..# we leave 
8e00: 74 68 65 6d 20 69 6e 20 70 6c 61 63 65 20 61 6e  them in place an
8e10: 64 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 65 20  d do not delete 
8e20: 74 68 65 20 62 72 61 6e 63 68 2e 20 49 6e 20 74  the branch. In t
8e30: 68 61 74 0a 09 23 20 63 61 73 65 20 74 68 65 20  hat..# case the 
8e40: 63 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 68 65  command sets the
8e50: 20 76 61 72 69 61 62 6c 65 20 69 6e 20 4e 56 20   variable in NV 
8e60: 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 0a 09  so that we can..
8e70: 23 20 6c 61 74 65 72 20 72 65 77 6f 72 6b 20 74  # later rework t
8e80: 68 65 73 65 20 72 65 76 69 73 6f 6e 73 20 74 6f  hese revisons to
8e90: 20 62 65 20 70 75 72 65 6c 79 20 74 72 75 6e 6b   be purely trunk
8ea0: 2e 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 20 69  ....if {[$root i
8eb0: 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68  sondefaultbranch
8ec0: 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e 64  ]} {..    # Hand
8ed0: 6c 69 6e 67 20 61 20 4e 54 44 42 2e 20 54 68 69  ling a NTDB. Thi
8ee0: 73 20 62 72 61 6e 63 68 20 6d 61 79 20 63 6f 6e  s branch may con
8ef0: 73 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79 20 6f  sists not only o
8f00: 66 0a 09 20 20 20 20 23 20 4e 54 44 42 20 72 65  f..    # NTDB re
8f10: 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 61 6c 73  visions, but als
8f20: 6f 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42 2e  o some non-NTDB.
8f30: 20 54 68 65 20 6c 61 74 74 65 72 20 61 72 65 0a   The latter are.
8f40: 09 20 20 20 20 23 20 74 72 75 6c 79 20 6f 6e 20  .    # truly on 
8f50: 61 20 62 72 61 6e 63 68 20 61 6e 64 20 68 61 76  a branch and hav
8f60: 65 20 74 6f 20 62 65 20 65 78 63 6c 75 64 65 64  e to be excluded
8f70: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  . The following.
8f80: 09 20 20 20 20 23 20 6c 6f 6f 70 20 64 65 74 65  .    # loop dete
8f90: 72 6d 69 6e 65 73 20 69 66 20 74 68 65 72 65 20  rmines if there 
8fa0: 61 72 65 20 73 75 63 68 20 72 65 76 69 73 69 6f  are such revisio
8fb0: 6e 73 2e 0a 0a 09 20 20 20 20 75 70 76 61 72 20  ns....    upvar 
8fc0: 31 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74 0a 09  1 $nv ntdbroot..
8fd0: 20 20 20 20 73 65 74 20 6e 74 64 62 72 6f 6f 74      set ntdbroot
8fe0: 20 24 72 6f 6f 74 0a 09 20 20 20 20 24 72 6f 6f   $root..    $roo
8ff0: 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 62  t cutfromparentb
9000: 72 61 6e 63 68 0a 0a 09 20 20 20 20 73 65 74 20  ranch...    set 
9010: 72 65 76 20 24 72 6f 6f 74 0a 09 20 20 20 20 77  rev $root..    w
9020: 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22  hile {$rev ne ""
9030: 7d 20 7b 0a 09 09 24 72 65 76 20 72 65 6d 6f 76  } {...$rev remov
9040: 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09 23  eallbranches...#
9050: 20 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a   See note [x]...
9060: 09 09 69 66 20 7b 5b 24 72 65 76 20 69 73 6f 6e  ..if {[$rev ison
9070: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20  defaultbranch]} 
9080: 7b 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 20  {...    set rev 
9090: 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d  [$rev child]...}
90a0: 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 62 72   else {...    br
90b0: 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a  eak...}..    }..
90c0: 09 20 20 20 20 23 20 72 65 76 20 6e 6f 77 20 63  .    # rev now c
90d0: 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73  ontains the firs
90e0: 74 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76 69 73  t non-NTDB revis
90f0: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 0a 09 20  ion after the.. 
9100: 20 20 20 23 20 4e 54 44 42 2c 20 6f 72 20 69 73     # NTDB, or is
9110: 20 65 6d 70 74 79 20 69 66 20 74 68 65 72 65 20   empty if there 
9120: 69 73 20 6e 6f 20 73 75 63 68 2e 20 49 66 20 77  is no such. If w
9130: 65 20 68 61 76 65 20 73 6f 6d 65 0a 09 20 20 20  e have some..   
9140: 20 23 20 74 68 65 79 20 68 61 76 65 20 74 6f 20   # they have to 
9150: 72 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20 20 69  removed....    i
9160: 66 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 20  f {$rev ne ""}  
9170: 7b 0a 09 09 73 65 74 20 6c 61 73 74 6e 74 64 62  {...set lastntdb
9180: 20 5b 24 72 65 76 20 70 61 72 65 6e 74 5d 0a 09   [$rev parent]..
9190: 09 24 6c 61 73 74 6e 74 64 62 20 63 75 74 66 72  .$lastntdb cutfr
91a0: 6f 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c 65 20  omchild...while 
91b0: 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09  {$rev ne ""} {..
91c0: 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76 65  .    $rev remove
91d0: 61 6c 6c 74 61 67 73 0a 09 09 20 20 20 20 24 72  alltags...    $r
91e0: 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e  ev removeallbran
91f0: 63 68 65 73 0a 09 09 20 20 20 20 23 20 4e 6f 74  ches...    # Not
9200: 65 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20 73 74  e [x]: We may st
9210: 69 6c 6c 20 68 61 76 65 20 68 61 64 20 62 72 61  ill have had bra
9220: 6e 63 68 65 73 20 6f 6e 20 74 68 65 0a 09 09 20  nches on the... 
9230: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2e 20 42     # revision. B
9240: 72 61 6e 63 68 65 73 20 77 69 74 68 6f 75 74 20  ranches without 
9250: 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d 69 74  revisions commit
9260: 74 65 64 0a 09 09 20 20 20 20 23 20 6f 6e 20 74  ted...    # on t
9270: 68 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f 77 20  hem do not show 
9280: 75 70 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f  up in the list o
9290: 66 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09 20 20  f roots aka...  
92a0: 20 20 23 20 6c 69 6e 65 73 20 6f 66 20 64 65 76    # lines of dev
92b0: 65 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20 20 20  elopment....    
92c0: 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68  set rev [$rev ch
92d0: 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a  ild]...}..    }.
92e0: 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a  .    return..}..
92f0: 09 23 20 4e 6f 20 4e 54 44 42 20 73 74 75 66 66  .# No NTDB stuff
9300: 20 74 6f 20 64 65 61 6c 20 77 69 74 68 2e 20 46   to deal with. F
9310: 69 72 73 74 20 64 65 6c 65 74 65 20 74 68 65 20  irst delete the 
9320: 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a 09 23  branch object..#
9330: 20 69 74 73 65 6c 66 2c 20 61 66 74 65 72 20 63   itself, after c
9340: 75 74 74 69 6e 67 20 61 6c 6c 20 74 68 65 20 76  utting all the v
9350: 61 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74 69 6f  arious connectio
9360: 6e 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e 63 68  ns....set branch
9370: 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72   [$root parentbr
9380: 61 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72 61 6e  anch]..if {$bran
9390: 63 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20  ch ne ""} {..   
93a0: 20 73 65 74 20 62 72 61 6e 63 68 70 61 72 65 6e   set branchparen
93b0: 74 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e  t [$branch paren
93c0: 74 5d 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70  t]..    $branchp
93d0: 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 6e  arent removebran
93e0: 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e 63  ch        $branc
93f0: 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70 61  h..    $branchpa
9400: 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c 64  rent removechild
9410: 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09  onbranch $root..
9420: 7d 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69  }...# The root i
9430: 73 20 6e 6f 20 73 75 63 68 20 61 6e 79 20 6c 6f  s no such any lo
9440: 6e 67 65 72 20 65 69 74 68 65 72 2e 0a 09 6c 64  nger either...ld
9450: 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72  elete myroots $r
9460: 6f 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f 20 74  oot...# Now go t
9470: 68 72 6f 75 67 68 20 74 68 65 20 6c 69 6e 65 20  hrough the line 
9480: 61 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c 20 69  and remove all i
9490: 74 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09  ts revisions....
94a0: 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20  while {$root ne 
94b0: 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f 74  ""} {..    $root
94c0: 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09   removealltags..
94d0: 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65      $root remove
94e0: 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20 20 20  allbranches..   
94f0: 20 23 20 4e 6f 74 65 3a 20 53 65 65 20 74 68 65   # Note: See the
9500: 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20 20 20   note [x]....   
9510: 20 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a   # From cvs2svn:
9520: 20 49 66 20 74 68 69 73 20 69 73 20 74 68 65 20   If this is the 
9530: 6c 61 73 74 20 64 65 66 61 75 6c 74 20 72 65 76  last default rev
9540: 69 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20 20 20  ision on a..    
9550: 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61  # non-trunk defa
9560: 75 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c 6c 6f  ult branch follo
9570: 77 65 64 20 62 79 20 61 20 31 2e 32 20 72 65 76  wed by a 1.2 rev
9580: 69 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 74 68  ision,..    # th
9590: 65 6e 20 74 68 65 20 31 2e 32 20 72 65 76 69 73  en the 1.2 revis
95a0: 69 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e 20 74  ion depends on t
95b0: 68 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d 45 3a  his one.  FIXME:
95c0: 20 49 74 20 69 73 0a 09 20 20 20 20 23 20 71 75   It is..    # qu
95d0: 65 73 74 69 6f 6e 61 62 6c 65 20 77 68 65 74 68  estionable wheth
95e0: 65 72 20 74 68 69 73 20 68 61 6e 64 6c 69 6e 67  er this handling
95f0: 20 69 73 20 63 6f 72 72 65 63 74 2c 20 73 69 6e   is correct, sin
9600: 63 65 20 74 68 65 0a 09 20 20 20 20 23 20 6e 6f  ce the..    # no
9610: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20  n-trunk default 
9620: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73  branch revisions
9630: 20 61 66 66 65 63 74 20 74 72 75 6e 6b 20 61 6e   affect trunk an
9640: 64 0a 09 20 20 20 20 23 20 73 68 6f 75 6c 64 20  d..    # should 
9650: 74 68 65 72 65 66 6f 72 65 20 6e 6f 74 20 6a 75  therefore not ju
9660: 73 74 20 62 65 20 64 69 73 63 61 72 64 65 64 20  st be discarded 
9670: 65 76 65 6e 20 69 66 0a 09 20 20 20 20 23 20 2d  even if..    # -
9680: 2d 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09 20  -trunk-only.... 
9690: 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61     if {[$root ha
96a0: 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68  sdefaultbranchch
96b0: 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 74  ild]} {...set nt
96c0: 64 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20 64  dbchild [$root d
96d0: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c  efaultbranchchil
96e0: 64 5d 0a 09 09 69 6e 74 65 67 72 69 74 79 20 61  d]...integrity a
96f0: 73 73 65 72 74 20 7b 0a 09 09 20 20 20 20 5b 24  ssert {...    [$
9700: 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61 75 6c  ntdbchild defaul
9710: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d 20 65  tbranchparent] e
9720: 71 20 24 6e 74 64 62 63 68 69 6c 64 0a 09 09 7d  q $ntdbchild...}
9730: 20 7b 6e 74 64 62 20 2d 20 74 72 75 6e 6b 20 6c   {ntdb - trunk l
9740: 69 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 7d 0a 09  inkage broken}..
9750: 09 24 6e 74 64 62 63 68 69 6c 64 20 63 75 74 64  .$ntdbchild cutd
9760: 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65  efaultbranchpare
9770: 6e 74 0a 09 09 69 66 20 7b 5b 24 6e 74 64 62 63  nt...if {[$ntdbc
9780: 68 69 6c 64 20 68 61 73 70 61 72 65 6e 74 5d 7d  hild hasparent]}
9790: 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64   {...    lappend
97a0: 20 6d 79 72 6f 6f 74 73 20 5b 24 6e 74 64 62 63   myroots [$ntdbc
97b0: 68 69 6c 64 20 70 61 72 65 6e 74 5d 0a 09 09 7d  hild parent]...}
97c0: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73 65  ..    }...    se
97d0: 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68  t root [$root ch
97e0: 69 6c 64 5d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e  ild]..}...return
97f0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
9800: 6f 64 20 47 72 61 66 74 4e 54 44 42 32 54 72 75  od GraftNTDB2Tru
9810: 6e 6b 20 7b 72 6f 6f 74 7d 20 7b 0a 09 23 20 57  nk {root} {..# W
9820: 65 20 63 61 6e 20 6e 6f 77 20 67 72 61 66 74 20  e can now graft 
9830: 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65  the non-trunk de
9840: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76  fault branch rev
9850: 69 73 69 6f 6e 73 20 74 6f 0a 09 23 20 74 72 75  isions to..# tru
9860: 6e 6b 2e 20 54 68 65 79 20 73 68 6f 75 6c 64 20  nk. They should 
9870: 61 6c 72 65 61 64 79 20 62 65 20 61 6c 6f 6e 65  already be alone
9880: 20 6f 6e 20 61 20 43 56 53 42 72 61 6e 63 68 2d   on a CVSBranch-
9890: 6c 65 73 73 0a 09 23 20 62 72 61 6e 63 68 2e 0a  less..# branch..
98a0: 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65  ..integrity asse
98b0: 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73 70  rt {![$root hasp
98c0: 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 4e  arentbranch]} {N
98d0: 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68  TDB root still h
98e0: 61 73 20 69 74 73 20 62 72 61 6e 63 68 20 73 79  as its branch sy
98f0: 6d 62 6f 6c 7d 0a 09 69 6e 74 65 67 72 69 74 79  mbol}..integrity
9900: 20 61 73 73 65 72 74 20 7b 21 5b 24 72 6f 6f 74   assert {![$root
9910: 20 68 61 73 62 72 61 6e 63 68 65 73 5d 7d 20 20   hasbranches]}  
9920: 20 20 20 7b 4e 54 44 42 20 72 6f 6f 74 20 73 74     {NTDB root st
9930: 69 6c 6c 20 68 61 73 20 73 70 61 77 6e 65 64 20  ill has spawned 
9940: 62 72 61 6e 63 68 65 73 7d 0a 0a 09 73 65 74 20  branches}...set 
9950: 6c 61 73 74 20 24 72 6f 6f 74 0a 09 77 68 69 6c  last $root..whil
9960: 65 20 7b 5b 24 6c 61 73 74 20 68 61 73 63 68 69  e {[$last haschi
9970: 6c 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74 20 5b  ld]} {set last [
9980: 24 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a 0a 09  $last child]}...
9990: 69 66 20 7b 5b 24 6c 61 73 74 20 68 61 73 64 65  if {[$last hasde
99a0: 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64  faultbranchchild
99b0: 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 72  ]} {...    set r
99c0: 65 76 31 32 20 5b 24 6c 61 73 74 20 64 65 66 61  ev12 [$last defa
99d0: 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 0a  ultbranchchild].
99e0: 09 20 20 20 20 24 72 65 76 31 32 20 63 75 74 64  .    $rev12 cutd
99f0: 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65  efaultbranchpare
9a00: 6e 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20 63  nt..    $last  c
9a10: 75 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63  utdefaultbranchc
9a20: 68 69 6c 64 0a 0a 09 20 20 20 20 24 72 65 76 31  hild...    $rev1
9a30: 32 20 63 68 61 6e 67 65 70 61 72 65 6e 74 20 24  2 changeparent $
9a40: 6c 61 73 74 0a 09 20 20 20 20 24 6c 61 73 74 20  last..    $last 
9a50: 20 63 68 61 6e 67 65 63 68 69 6c 64 20 24 72 65   changechild $re
9a60: 76 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74  v12...    ldelet
9a70: 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31 32  e myroots $rev12
9a80: 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 61 6e  ...    # Note an
9a90: 64 20 72 65 6d 65 6d 62 65 72 20 74 68 61 74 20  d remember that 
9aa0: 74 68 65 20 74 79 70 65 20 6f 66 20 72 65 76 31  the type of rev1
9ab0: 32 20 77 61 73 20 61 6c 72 65 61 64 79 0a 09 20  2 was already.. 
9ac0: 20 20 20 23 20 61 64 6a 75 73 74 65 64 20 62 79     # adjusted by
9ad0: 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44   AdjustNonTrunkD
9ae0: 65 66 61 75 6c 74 42 72 61 6e 63 68 2c 20 73 6f  efaultBranch, so
9af0: 20 77 65 20 64 6f 6e 27 74 0a 09 20 20 20 20 23   we don't..    #
9b00: 20 68 61 76 65 20 74 6f 20 63 68 61 6e 67 65 20   have to change 
9b10: 69 74 73 20 74 79 70 65 20 68 65 72 65 2e 0a 09  its type here...
9b20: 7d 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74  }...while {$root
9b30: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 24   ne ""} {..    $
9b40: 72 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61 75 6c  root setondefaul
9b50: 74 62 72 61 6e 63 68 20 30 0a 09 20 20 20 20 24  tbranch 0..    $
9b60: 72 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d 79 74  root setlod $myt
9b70: 72 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65 61 63  runk..    foreac
9b80: 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 61 67  h tag [$root tag
9b90: 73 5d 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c  s] {...$tag setl
9ba0: 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20  od $mytrunk..   
9bb0: 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74   }..    set root
9bc0: 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09   [$root child]..
9bd0: 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  }..        retur
9be0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
9bf0: 68 6f 64 20 41 63 74 69 76 65 20 7b 7d 20 7b 0a  hod Active {} {.
9c00: 09 73 65 74 20 72 65 76 69 73 69 6f 6e 73 20 7b  .set revisions {
9c10: 7d 0a 09 73 65 74 20 73 79 6d 62 6f 6c 73 20 20  }..set symbols  
9c20: 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f   {}...foreach ro
9c30: 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f  ot [$self LinesO
9c40: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a  fDevelopment] {.
9c50: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20  .    if {[$root 
9c60: 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68 5d  hasparentbranch]
9c70: 7d 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d 62  } { lappend symb
9c80: 6f 6c 73 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e  ols [$root paren
9c90: 74 62 72 61 6e 63 68 5d 20 7d 0a 09 20 20 20 20  tbranch] }..    
9ca0: 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20  while {$root ne 
9cb0: 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20  ""} {...lappend 
9cc0: 72 65 76 69 73 69 6f 6e 73 20 24 72 6f 6f 74 0a  revisions $root.
9cd0: 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 20 20  ..foreach tag   
9ce0: 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 20 20   [$root tags]   
9cf0: 20 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d 62    { lappend symb
9d00: 6f 6c 73 20 24 74 61 67 20 20 20 20 7d 0a 09 09  ols $tag    }...
9d10: 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b  foreach branch [
9d20: 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20  $root branches] 
9d30: 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 74  {...    integrit
9d40: 79 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b 24  y assert {....[$
9d50: 62 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 20 65  branch parent] e
9d60: 71 20 24 72 6f 6f 74 0a 09 09 20 20 20 20 7d 20  q $root...    } 
9d70: 7b 42 61 63 6b 72 65 66 65 72 65 6e 63 65 20 62  {Backreference b
9d80: 72 61 6e 63 68 20 74 6f 20 69 74 73 20 72 6f 6f  ranch to its roo
9d90: 74 20 69 73 20 6d 69 73 73 69 6e 67 20 6f 72 20  t is missing or 
9da0: 77 72 6f 6e 67 7d 0a 09 09 20 20 20 20 6c 61 70  wrong}...    lap
9db0: 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 62 72  pend symbols $br
9dc0: 61 6e 63 68 0a 09 09 7d 0a 09 09 73 65 74 20 6c  anch...}...set l
9dd0: 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a 09  od [$root lod]..
9de0: 09 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74 72  .if {![$lod istr
9df0: 75 6e 6b 5d 7d 20 7b 0a 09 09 20 20 20 20 69 6e  unk]} {...    in
9e00: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b  tegrity assert {
9e10: 0a 09 09 09 5b 24 6c 6f 64 20 68 61 73 63 68 69  ....[$lod haschi
9e20: 6c 64 5d 0a 09 09 20 20 20 20 7d 20 7b 42 72 61  ld]...    } {Bra
9e30: 6e 63 68 20 69 73 20 4c 4f 44 20 73 79 6d 62 6f  nch is LOD symbo
9e40: 6c 20 77 69 74 68 6f 75 74 20 72 65 76 69 73 69  l without revisi
9e50: 6f 6e 73 7d 0a 09 09 20 20 20 20 6c 61 70 70 65  ons}...    lappe
9e60: 6e 64 20 73 79 6d 62 6f 6c 73 20 24 6c 6f 64 0a  nd symbols $lod.
9e70: 09 09 7d 0a 09 09 73 65 74 20 72 6f 6f 74 20 5b  ..}...set root [
9e80: 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20  $root child]..  
9e90: 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 20    }..}...return 
9ea0: 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 20 2d 75 6e  [list [lsort -un
9eb0: 69 71 75 65 20 2d 64 69 63 74 20 24 72 65 76 69  ique -dict $revi
9ec0: 73 69 6f 6e 73 5d 20 5b 6c 73 6f 72 74 20 2d 75  sions] [lsort -u
9ed0: 6e 69 71 75 65 20 2d 64 69 63 74 20 24 73 79 6d  nique -dict $sym
9ee0: 62 6f 6c 73 5d 5d 0a 20 20 20 20 7d 0a 0a 0a 20  bols]].    }... 
9ef0: 20 20 20 6d 65 74 68 6f 64 20 41 67 67 72 65 67     method Aggreg
9f00: 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 20 7b 7d  ateSymbolData {}
9f10: 20 7b 0a 09 23 20 4e 6f 77 20 74 68 61 74 20 74   {..# Now that t
9f20: 68 65 20 65 78 61 63 74 20 73 65 74 20 6f 66 20  he exact set of 
9f30: 72 65 76 69 73 69 6f 6e 73 20 28 61 6e 64 20 74  revisions (and t
9f40: 68 72 6f 75 67 68 20 74 68 61 74 0a 09 23 20 62  hrough that..# b
9f50: 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67 73  ranches and tags
9f60: 29 20 69 73 20 6b 6e 6f 77 6e 20 77 65 20 63 61  ) is known we ca
9f70: 6e 20 75 70 64 61 74 65 20 74 68 65 20 61 67 67  n update the agg
9f80: 72 65 67 61 74 65 0a 09 23 20 73 79 6d 62 6f 6c  regate..# symbol
9f90: 20 73 74 61 74 69 73 74 69 63 73 2e 0a 0a 09 66   statistics....f
9fa0: 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65  oreach root [$se
9fb0: 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f  lf LinesOfDevelo
9fc0: 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 73 65  pment] {..    se
9fd0: 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64  t lod [$root lod
9fe0: 5d 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20  ]...    # Note: 
9ff0: 49 66 20 74 68 65 20 4c 4f 44 20 69 73 20 74 68  If the LOD is th
a000: 65 20 74 72 75 6e 6b 20 74 68 65 20 63 6f 75 6e  e trunk the coun
a010: 74 2a 2c 20 65 74 63 2e 20 6d 65 74 68 6f 64 73  t*, etc. methods
a020: 0a 09 20 20 20 20 23 20 77 69 6c 6c 20 64 6f 20  ..    # will do 
a030: 6e 6f 74 68 69 6e 67 2c 20 61 73 20 69 74 20 69  nothing, as it i
a040: 73 20 61 6c 77 61 79 73 20 70 72 65 73 65 6e 74  s always present
a050: 20 28 63 61 6e 6e 6f 74 20 62 65 0a 09 20 20 20   (cannot be..   
a060: 20 23 20 65 78 63 6c 75 64 65 64 29 2c 20 61 6e   # excluded), an
a070: 64 20 69 73 20 61 6c 77 61 79 73 20 61 20 62 72  d is always a br
a080: 61 6e 63 68 20 74 6f 6f 2e 0a 0a 09 20 20 20 20  anch too....    
a090: 23 20 4c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c  # Lines of devel
a0a0: 6f 70 6d 65 6e 74 20 63 6f 75 6e 74 20 61 73 20  opment count as 
a0b0: 62 72 61 6e 63 68 65 73 20 61 6e 64 20 68 61 76  branches and hav
a0c0: 65 20 61 20 63 6f 6d 6d 69 74 0a 09 20 20 20 20  e a commit..    
a0d0: 23 20 6f 6e 20 74 68 65 6d 20 28 72 6f 6f 74 29  # on them (root)
a0e0: 2e 20 49 66 20 74 68 65 79 20 61 72 65 20 73 74  . If they are st
a0f0: 69 6c 6c 20 61 74 74 61 63 68 65 64 20 74 6f 20  ill attached to 
a100: 61 20 74 72 65 65 20 77 65 0a 09 20 20 20 20 23  a tree we..    #
a110: 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 74 65   have to compute
a120: 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 70 6f   and register po
a130: 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73 2e 0a  ssible parents..
a140: 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e 74  ..    $lod count
a150: 61 73 62 72 61 6e 63 68 0a 09 20 20 20 20 24 6c  asbranch..    $l
a160: 6f 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69 74 0a  od countacommit.
a170: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74  ..    if {[$root
a180: 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68   hasparentbranch
a190: 5d 7d 20 7b 0a 09 09 23 20 4e 6f 74 65 20 6c 6f  ]} {...# Note lo
a1a0: 64 20 3d 3d 20 5b 24 72 6f 6f 74 20 70 61 72 65  d == [$root pare
a1b0: 6e 74 62 72 61 6e 63 68 5d 0a 09 09 24 6c 6f 64  ntbranch]...$lod
a1c0: 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 73   possibleparents
a1d0: 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b  ..    } elseif {
a1e0: 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 20  ![$lod istrunk] 
a1f0: 26 26 20 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 65  && [$root isonde
a200: 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a  faultbranch]} {.
a210: 09 09 23 20 54 68 69 73 20 69 73 20 74 68 65 20  ..# This is the 
a220: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 6f 66  root revision of
a230: 20 61 20 64 65 74 61 63 68 65 64 20 4e 54 44 42   a detached NTDB
a240: 2e 20 57 65 0a 09 09 23 20 68 61 76 65 20 74 6f  . We...# have to
a250: 20 6d 61 6e 75 61 6c 6c 79 20 73 65 74 20 74 68   manually set th
a260: 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20  e only possible 
a270: 70 61 72 65 6e 74 20 66 6f 72 0a 09 09 23 20 74  parent for...# t
a280: 68 69 73 20 4c 4f 44 2c 20 74 68 65 20 74 72 75  his LOD, the tru
a290: 6e 6b 20 69 74 73 65 6c 66 2e 0a 0a 09 09 5b 24  nk itself.....[$
a2a0: 6c 6f 64 20 73 79 6d 62 6f 6c 5d 20 70 6f 73 73  lod symbol] poss
a2b0: 69 62 6c 65 70 61 72 65 6e 74 20 24 6d 79 74 72  ibleparent $mytr
a2c0: 75 6e 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20  unk..    }...   
a2d0: 20 23 20 46 6f 72 20 74 68 65 20 72 65 76 69 73   # For the revis
a2e0: 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 6e 65  ions in the line
a2f0: 20 77 65 20 72 65 67 69 73 74 65 72 20 74 68 65   we register the
a300: 69 72 20 62 72 61 6e 63 68 65 73 0a 09 20 20 20  ir branches..   
a310: 20 23 20 61 6e 64 20 74 61 67 73 20 61 73 20 62   # and tags as b
a320: 6c 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 65 20  lockers for the 
a330: 6c 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 65 20  lod, and update 
a340: 74 68 65 20 74 79 70 65 0a 09 20 20 20 20 23 20  the type..    # 
a350: 63 6f 75 6e 74 65 72 73 20 61 73 20 77 65 6c 6c  counters as well
a360: 2e 20 41 73 20 62 72 61 6e 63 68 20 73 79 6d 62  . As branch symb
a370: 6f 6c 73 20 77 69 74 68 6f 75 74 20 63 6f 6d 6d  ols without comm
a380: 69 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 74 68  its on..    # th
a390: 65 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 74 65  em are not liste
a3a0: 64 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 64 65  d as lines of de
a3b0: 76 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 68 61  velopment, we ha
a3c0: 76 65 20 74 6f 0a 09 20 20 20 20 23 20 63 6f 75  ve to..    # cou
a3d0: 6e 74 20 74 68 65 6d 20 68 65 72 65 20 61 73 20  nt them here as 
a3e0: 77 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e 20 62  well, as plain b
a3f0: 72 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 73 74  ranches. At last
a400: 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 65 20   we..    # have 
a410: 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20 72  to compute and r
a420: 65 67 69 73 74 65 72 20 74 68 65 20 70 6f 73 73  egister the poss
a430: 69 62 6c 65 20 70 61 72 65 6e 74 73 20 6f 66 20  ible parents of 
a440: 74 68 65 0a 09 20 20 20 20 23 20 74 61 67 73 2c  the..    # tags,
a450: 20 69 6e 20 63 61 73 65 20 74 68 65 79 20 61 72   in case they ar
a460: 65 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 74 65  e later converte
a470: 64 20 61 73 20 62 72 61 6e 63 68 65 73 2e 0a 0a  d as branches...
a480: 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f 6f  .    while {$roo
a490: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 6f 72  t ne ""} {...for
a4a0: 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f  each branch [$ro
a4b0: 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09  ot branches] {..
a4c0: 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65  .    $lod blocke
a4d0: 64 62 79 20 24 62 72 61 6e 63 68 0a 09 09 20 20  dby $branch...  
a4e0: 20 20 24 62 72 61 6e 63 68 20 70 6f 73 73 69 62    $branch possib
a4f0: 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20 20  leparents...    
a500: 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 73  if {[$branch has
a510: 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65  child]} continue
a520: 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 63  ...    $branch c
a530: 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 09 7d  ountasbranch...}
a540: 0a 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 20  ....foreach tag 
a550: 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09  [$root tags] {..
a560: 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65  .    $lod blocke
a570: 64 62 79 20 24 74 61 67 0a 09 09 20 20 20 20 24  dby $tag...    $
a580: 74 61 67 20 70 6f 73 73 69 62 6c 65 70 61 72 65  tag possiblepare
a590: 6e 74 73 0a 09 09 20 20 20 20 24 74 61 67 20 63  nts...    $tag c
a5a0: 6f 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a 0a 09  ountastag...}...
a5b0: 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74  .set root [$root
a5c0: 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 09   child]..    }..
a5d0: 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  }...return.    }
a5e0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
a5f0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
a600: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
a610: 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69    ## Configurati
a620: 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d  on..    pragma -
a630: 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e  hastypeinfo    n
a640: 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69  o  ; # no type i
a650: 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20  ntrospection.   
a660: 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f   pragma -hasinfo
a670: 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20          no  ; # 
a680: 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73  no object intros
a690: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67  pection.    prag
a6a0: 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68 6f  ma -hastypemetho
a6b0: 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65 20  ds no  ; # type 
a6c0: 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74 2e  is not relevant.
a6d0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
a6e0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
a6f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a  #############.}.
a700: 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
a710: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
a720: 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20 20  port::cvs {.    
a730: 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74  namespace export
a740: 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 73 70   file.    namesp
a750: 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 7b 0a  ace eval file {.
a760: 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 72 65  .# Import not re
a770: 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 79 20  quired, already 
a780: 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 61 63  a child namespac
a790: 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 65 20  e...# namespace 
a7a0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73  import ::vc::fos
a7b0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
a7c0: 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 20 6e  ::file::rev..# n
a7d0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
a7e0: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
a7f0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a  port::cvs::file:
a800: 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 65 20  :sym..namespace 
a810: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f  import ::vc::too
a820: 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d  ls::misc::*..nam
a830: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
a840: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62  vc::tools::troub
a850: 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d  le..namespace im
a860: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73  port ::vc::tools
a870: 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 63 65  ::log..namespace
a880: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
a890: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
a8a0: 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70  s::state..namesp
a8b0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
a8c0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
a8d0: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a  :cvs::integrity.
a8e0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
a8f0: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  t ::vc::fossil::
a900: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 67 74 63  import::cvs::gtc
a910: 6f 72 65 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23  ore.    }.}..# #
a920: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
a930: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
a940: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
a950: 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65  ##########.## Re
a960: 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f  ady..package pro
a970: 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a  vide vc::fossil:
a980: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69  :import::cvs::fi
a990: 6c 65 20 31 2e 30 0a 72 65 74 75 72 6e 0a        le 1.0.return.