Hex Artifact Content
Not logged in

Artifact 8326ac9a4b8281bb416dad28f0989e72a616a6c4:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [e5ae612c8d] - Added high-verbosity (level 11) logging to trace the application of rcs patches. by aku on 2008-01-31 07:14:20.

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 6c 6f 67 20 77 72 69 74 65 20 31 31  ]...log write 11
3620: 20 66 69 6c 65 20 7b 42 61 73 65 20 20 6c 69 6e   file {Base  lin
3630: 65 73 20 3d 20 24 62 6c 65 6e 7d 0a 09 6c 6f 67  es = $blen}..log
3640: 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b   write 11 file {
3650: 44 65 6c 74 61 20 6c 69 6e 65 73 20 3d 20 24 6e  Delta lines = $n
3660: 6c 69 6e 65 73 7d 0a 0a 09 66 6f 72 20 7b 73 65  lines}...for {se
3670: 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e 6c  t i 0} {$i < $nl
3680: 69 6e 65 73 7d 20 7b 7d 20 7b 0a 09 20 20 20 20  ines} {} {..    
3690: 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c  log write 11 fil
36a0: 65 20 7b 20 20 20 20 40 20 24 69 20 3d 20 5b 6c  e {    @ $i = [l
36b0: 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69 5d  index $lines $i]
36c0: 7d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  }..    log write
36d0: 20 31 31 20 66 69 6c 65 20 7b 20 6f 6f 66 66 20   11 file { ooff 
36e0: 24 6f 6f 66 66 7d 0a 0a 09 20 20 20 20 69 66 20  $ooff}...    if 
36f0: 7b 21 5b 72 65 67 65 78 70 20 7b 5e 28 5b 61 64  {![regexp {^([ad
3700: 5d 29 28 5c 64 2b 29 5c 73 28 5c 64 2b 29 24 7d  ])(\d+)\s(\d+)$}
3710: 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20   [lindex $lines 
3720: 24 69 5d 20 2d 3e 20 63 6d 64 20 73 6c 20 63 6e  $i] -> cmd sl cn
3730: 5d 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 69  ]} {...trouble i
3740: 6e 74 65 72 6e 61 6c 20 22 42 61 64 20 65 64 20  nternal "Bad ed 
3750: 63 6f 6d 6d 61 6e 64 20 27 5b 6c 69 6e 64 65 78  command '[lindex
3760: 20 24 6c 69 6e 65 73 20 24 69 5d 27 22 0a 09 20   $lines $i]'".. 
3770: 20 20 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77     }...    log w
3780: 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 20  rite 11 file {  
3790: 63 6d 64 20 24 63 6d 64 7d 0a 09 20 20 20 20 6c  cmd $cmd}..    l
37a0: 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65  og write 11 file
37b0: 20 7b 20 20 20 73 6c 20 24 73 6c 7d 0a 09 20 20   {   sl $sl}..  
37c0: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66    log write 11 f
37d0: 69 6c 65 20 7b 20 20 20 63 6e 20 24 63 6e 7d 0a  ile {   cn $cn}.
37e0: 0a 09 20 20 20 20 69 6e 63 72 20 69 0a 09 20 20  ..    incr i..  
37f0: 20 20 73 65 74 20 65 6c 20 5b 65 78 70 72 20 7b    set el [expr {
3800: 24 73 6c 20 2b 20 24 63 6e 7d 5d 0a 0a 09 20 20  $sl + $cn}]...  
3810: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66    log write 11 f
3820: 69 6c 65 20 7b 20 20 20 65 6c 20 24 65 6c 7d 0a  ile {   el $el}.
3830: 0a 09 20 20 20 20 73 77 69 74 63 68 20 2d 65 78  ..    switch -ex
3840: 61 63 74 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09  act -- $cmd {...
3850: 64 20 7b 0a 09 09 20 20 20 20 69 6e 63 72 20 73  d {...    incr s
3860: 6c 20 2d 31 0a 09 09 20 20 20 20 69 6e 63 72 20  l -1...    incr 
3870: 65 6c 20 2d 31 0a 09 09 20 20 20 20 69 66 20 7b  el -1...    if {
3880: 24 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74  $sl < $ooff} { t
3890: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20  rouble internal 
38a0: 7b 44 65 6c 65 74 69 6f 6e 20 62 65 66 6f 72 65  {Deletion before
38b0: 20 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 09   last edit} }...
38c0: 20 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 62      if {$sl > $b
38d0: 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69  len} { trouble i
38e0: 6e 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 6f  nternal {Deletio
38f0: 6e 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64 7d  n past file end}
3900: 20 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 65 6c   }...    if {$el
3910: 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75   > $blen} { trou
3920: 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65  ble internal {De
3930: 6c 65 74 69 6f 6e 20 62 65 79 6f 6e 64 20 66 69  letion beyond fi
3940: 6c 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20 20 20  le end} }...    
3950: 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67  foreach x [lrang
3960: 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 24 73  e $base $ooff $s
3970: 6c 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73  l] { lappend res
3980: 20 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74 20   $x }...    set 
3990: 20 6f 6f 66 66 20 24 65 6c 0a 09 09 7d 0a 09 09   ooff $el...}...
39a0: 61 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 24 73  a {...    if {$s
39b0: 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72 6f  l < $ooff} { tro
39c0: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49  uble internal {I
39d0: 6e 73 65 72 74 20 62 65 66 6f 72 65 20 6c 61 73  nsert before las
39e0: 74 20 65 64 69 74 7d 20 7d 0a 09 09 20 20 20 20  t edit} }...    
39f0: 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c 65 6e 7d  if {$sl > $blen}
3a00: 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72   { trouble inter
3a10: 6e 61 6c 20 7b 49 6e 73 65 72 74 20 70 61 73 74  nal {Insert past
3a20: 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 0a 09 09   file end} }....
3a30: 20 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c      foreach x [l
3a40: 72 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66  range $base $oof
3a50: 66 20 24 73 6c 5d 20 20 20 20 20 20 20 20 20 20  f $sl]          
3a60: 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73     { lappend res
3a70: 20 24 78 20 7d 0a 09 09 20 20 20 20 66 6f 72 65   $x }...    fore
3a80: 61 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 6c  ach x [lrange $l
3a90: 69 6e 65 73 20 24 69 20 5b 65 78 70 72 20 7b 24  ines $i [expr {$
3aa0: 69 20 2b 20 24 63 6e 7d 5d 5d 20 7b 20 6c 61 70  i + $cn}]] { lap
3ab0: 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 09  pend res $x }...
3ac0: 20 20 20 20 73 65 74 20 6f 6f 66 66 20 24 73 6c      set ooff $sl
3ad0: 0a 09 09 20 20 20 20 69 6e 63 72 20 69 20 24 63  ...    incr i $c
3ae0: 6e 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a  n...}..    }..}.
3af0: 09 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e  .foreach x [lran
3b00: 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 65  ge $base $ooff e
3b10: 6e 64 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65  nd] { lappend re
3b20: 73 20 24 78 20 7d 0a 09 72 65 74 75 72 6e 20 5b  s $x }..return [
3b30: 6a 6f 69 6e 20 24 72 65 73 20 5c 6e 5d 0a 20 20  join $res \n].  
3b40: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
3b50: 45 78 70 61 6e 64 32 20 7b 67 72 61 70 68 20 6e  Expand2 {graph n
3b60: 6f 64 65 7d 20 7b 0a 09 73 65 74 20 72 65 76 6e  ode} {..set revn
3b70: 72 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67  r [$graph node g
3b80: 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 0a  et $node revnr].
3b90: 0a 09 23 20 46 69 72 73 74 20 69 6d 70 6f 72 74  ..# First import
3ba0: 20 74 68 65 20 66 69 6c 65 2e 0a 09 6c 61 70 70   the file...lapp
3bb0: 65 6e 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69  end myimport [li
3bc0: 73 74 20 41 20 72 24 72 65 76 6e 72 20 7b 7d 5d  st A r$revnr {}]
3bd0: 0a 0a 09 69 66 20 7b 5b 24 67 72 61 70 68 20 6e  ...if {[$graph n
3be0: 6f 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6e  ode keyexists $n
3bf0: 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b  ode __base__]} {
3c00: 0a 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e 6f  ..    # Delta no
3c10: 64 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73 20  de. __base__ is 
3c20: 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the 
3c30: 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a  file containing.
3c40: 09 20 20 20 20 23 20 74 68 65 20 62 61 73 65 6c  .    # the basel
3c50: 69 6e 65 2e 20 47 65 6e 65 72 61 74 65 20 69 6e  ine. Generate in
3c60: 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 6d 61 6b  struction to mak
3c70: 65 20 74 68 65 20 64 65 6c 74 61 20 61 73 0a 09  e the delta as..
3c80: 20 20 20 20 23 20 77 65 6c 6c 2e 0a 0a 09 20 20      # well....  
3c90: 20 20 73 65 74 20 66 62 61 73 65 20 5b 24 67 72    set fbase [$gr
3ca0: 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f  aph node get $no
3cb0: 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09 20 20  de __base__]..  
3cc0: 20 20 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70 6f    lappend myimpo
3cd0: 72 74 20 5b 6c 69 73 74 20 44 20 72 24 72 65 76  rt [list D r$rev
3ce0: 6e 72 20 72 24 66 62 61 73 65 5d 0a 09 7d 0a 0a  nr r$fbase]..}..
3cf0: 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 73  .# Post to all s
3d00: 75 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 74  uccessors that t
3d10: 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 65  he just generate
3d20: 64 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 0a  d file is their.
3d30: 09 23 20 62 61 73 65 6c 69 6e 65 2e 20 45 78 63  .# baseline. Exc
3d40: 65 70 74 69 6f 6e 3a 20 54 68 6f 73 65 20 77 68  eption: Those wh
3d50: 69 63 68 20 61 76 65 20 61 6c 72 65 61 64 79 20  ich ave already 
3d60: 61 20 62 61 73 65 6c 69 6e 65 20 73 65 74 2e 0a  a baseline set..
3d70: 09 23 20 54 6f 67 65 74 68 65 72 20 77 69 74 68  .# Together with
3d80: 20 74 68 65 20 73 6f 72 74 69 6e 67 20 6f 66 20   the sorting of 
3d90: 74 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20  trunk revisions 
3da0: 66 69 72 73 74 20 74 68 65 20 74 72 75 6e 6b 0a  first the trunk.
3db0: 09 23 20 73 68 6f 75 6c 64 20 6f 6e 65 20 75 6e  .# should one un
3dc0: 69 6e 74 65 72 75 70 74 65 64 20 6c 69 6e 65 2c  interupted line,
3dd0: 20 77 69 74 68 20 62 72 61 6e 63 68 20 72 6f 6f   with branch roo
3de0: 74 73 20 5f 6e 6f 74 5f 20 64 65 6c 74 61 0a 09  ts _not_ delta..
3df0: 23 20 63 6f 6d 70 72 65 73 73 65 64 20 70 65 72  # compressed per
3e00: 20 74 68 65 69 72 20 62 72 61 6e 63 68 65 73 2e   their branches.
3e10: 0a 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20 5b  ...foreach out [
3e20: 24 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75  $graph nodes -ou
3e30: 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20  t $node] {..    
3e40: 69 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f 64 65  if {[$graph node
3e50: 20 6b 65 79 65 78 69 73 74 73 20 24 6f 75 74 20   keyexists $out 
3e60: 5f 5f 62 61 73 65 5f 5f 5d 7d 20 63 6f 6e 74 69  __base__]} conti
3e70: 6e 75 65 0a 09 20 20 20 20 24 67 72 61 70 68 20  nue..    $graph 
3e80: 6e 6f 64 65 20 73 65 74 20 24 6f 75 74 20 5f 5f  node set $out __
3e90: 62 61 73 65 5f 5f 20 24 72 65 76 6e 72 0a 09 7d  base__ $revnr..}
3ea0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
3eb0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69      variable myi
3ec0: 6d 70 6f 72 74 0a 0a 20 20 20 20 23 20 23 20 23  mport..    # # #
3ed0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
3ee0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
3ef0: 23 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a  ##.    ## State.
3f00: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
3f10: 69 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20  id              
3f20: 7b 7d 20 3b 20 23 20 46 69 6c 65 20 69 64 20 69  {} ; # File id i
3f30: 6e 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74  n the persistent
3f40: 20 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72 69   state..    vari
3f50: 61 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20 20  able mypath     
3f60: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61         {} ; # Pa
3f70: 74 68 20 6f 66 20 74 68 65 20 66 69 6c 65 27 73  th of the file's
3f80: 20 72 63 73 20 61 72 63 68 69 76 65 2e 0a 20 20   rcs archive..  
3f90: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 75 73 72    variable myusr
3fa0: 70 61 74 68 20 20 20 20 20 20 20 20 20 7b 7d 20  path         {} 
3fb0: 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68 65 20  ; # Path of the 
3fc0: 66 69 6c 65 20 61 73 20 73 65 65 6e 20 62 79 20  file as seen by 
3fd0: 75 73 65 72 73 2e 0a 20 20 20 20 76 61 72 69 61  users..    varia
3fe0: 62 6c 65 20 6d 79 65 78 65 63 75 74 61 62 6c 65  ble myexecutable
3ff0: 20 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f        0  ; # Boo
4000: 6c 65 61 6e 20 66 6c 61 67 20 27 66 69 6c 65 20  lean flag 'file 
4010: 65 78 65 63 75 74 61 62 6c 65 27 2e 0a 20 20 20  executable'..   
4020: 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a   variable myproj
4030: 65 63 74 20 20 20 20 20 20 20 20 20 7b 7d 20 3b  ect         {} ;
4040: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20   # Reference to 
4050: 74 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65  the project obje
4060: 63 74 0a 09 09 09 09 20 20 20 20 23 20 74 68 65  ct.....    # the
4070: 20 66 69 6c 65 20 62 65 6c 6f 6e 67 73 20 74 6f   file belongs to
4080: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4090: 79 72 65 76 20 2d 61 72 72 61 79 20 20 20 20 20  yrev -array     
40a0: 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76   {} ; # Maps rev
40b0: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20  ision number to 
40c0: 74 68 65 0a 09 09 09 09 20 20 20 20 23 20 61 73  the.....    # as
40d0: 73 6f 63 69 61 74 65 64 20 72 65 76 69 73 69 6f  sociated revisio
40e0: 6e 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 76 61  n object..    va
40f0: 72 69 61 62 6c 65 20 6d 79 72 65 76 69 73 69 6f  riable myrevisio
4100: 6e 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  ns       {} ; # 
4110: 53 61 6d 65 20 61 73 20 6d 79 72 65 76 2c 20 62  Same as myrev, b
4120: 75 74 20 61 20 6c 69 73 74 2c 0a 09 09 09 09 20  ut a list,..... 
4130: 20 20 20 23 20 67 69 76 69 6e 67 20 75 73 20 74     # giving us t
4140: 68 65 20 6f 72 64 65 72 20 6f 66 0a 09 09 09 09  he order of.....
4150: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e      # revisions.
4160: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
4170: 61 69 64 20 20 20 20 20 20 2d 61 72 72 61 79 20  aid      -array 
4180: 7b 7d 20 3b 20 23 20 4d 61 70 20 72 65 76 69 73  {} ; # Map revis
4190: 69 6f 6e 20 6e 75 6d 62 65 72 73 20 74 6f 20 74  ion numbers to t
41a0: 68 65 20 69 64 0a 09 09 09 09 20 20 20 20 23 20  he id.....    # 
41b0: 6f 66 20 74 68 65 20 61 75 74 68 6f 72 20 77 68  of the author wh
41c0: 6f 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 09 09  o committed.....
41d0: 20 20 20 20 23 20 69 74 2e 20 54 68 69 73 20 69      # it. This i
41e0: 73 20 6c 61 74 65 72 20 61 67 67 72 65 67 61 74  s later aggregat
41f0: 65 64 0a 09 09 09 09 20 20 20 20 23 20 77 69 74  ed.....    # wit
4200: 68 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65  h commit message
4210: 2c 20 62 72 61 6e 63 68 20 6e 61 6d 65 0a 09 09  , branch name...
4220: 09 09 20 20 20 20 23 20 61 6e 64 20 70 72 6f 6a  ..    # and proj
4230: 65 63 74 20 69 64 20 66 6f 72 20 61 20 6d 65 74  ect id for a met
4240: 61 20 69 64 2e 0a 20 20 20 20 76 61 72 69 61 62  a id..    variab
4250: 6c 65 20 6d 79 68 65 61 64 72 65 76 6e 72 20 20  le myheadrevnr  
4260: 20 20 20 20 20 7b 7d 20 3b 20 23 20 48 65 61 64       {} ; # Head
4270: 20 72 65 76 69 73 69 6f 6e 20 28 72 65 76 69 73   revision (revis
4280: 69 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 20 20 20  ion number).    
4290: 76 61 72 69 61 62 6c 65 20 6d 79 70 72 69 6e 63  variable myprinc
42a0: 69 70 61 6c 20 20 20 20 20 20 20 7b 7d 20 3b 20  ipal       {} ; 
42b0: 23 20 50 72 69 6e 63 69 70 61 6c 20 62 72 61 6e  # Principal bran
42c0: 63 68 20 28 62 72 61 6e 63 68 20 6e 75 6d 62 65  ch (branch numbe
42d0: 72 29 2e 0a 09 09 09 09 20 20 20 20 23 20 43 6f  r)......    # Co
42e0: 6e 74 72 61 72 79 20 74 6f 20 74 68 65 20 6e 61  ntrary to the na
42f0: 6d 65 20 74 68 69 73 20 69 73 20 74 68 65 0a 09  me this is the..
4300: 09 09 09 20 20 20 20 23 20 64 65 66 61 75 6c 74  ...    # default
4310: 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72   branch..    var
4320: 69 61 62 6c 65 20 6d 79 64 65 70 65 6e 64 65 6e  iable mydependen
4330: 63 69 65 73 20 20 20 20 7b 7d 20 3b 20 23 20 44  cies    {} ; # D
4340: 69 63 74 69 6f 6e 61 72 79 20 70 61 72 65 6e 74  ictionary parent
4350: 20 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 09 09 20   -> child,..... 
4360: 20 20 20 23 20 72 65 63 6f 72 64 73 20 70 72 69     # records pri
4370: 6d 61 72 79 20 64 65 70 65 6e 64 65 6e 63 69 65  mary dependencie
4380: 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  s..    variable 
4390: 6d 79 69 6d 70 6f 72 74 65 64 20 20 20 20 20 20  myimported      
43a0: 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e    0  ; # Boolean
43b0: 20 66 6c 61 67 2e 20 53 65 74 20 69 66 20 61 6e   flag. Set if an
43c0: 64 20 6f 6e 6c 79 20 69 66 0a 09 09 09 09 20 20  d only if.....  
43d0: 20 20 23 20 72 65 76 20 31 2e 31 20 6f 66 20 74    # rev 1.1 of t
43e0: 68 65 20 66 69 6c 65 20 73 65 65 6d 69 6e 67 6c  he file seemingl
43f0: 79 0a 09 09 09 09 20 20 20 20 23 20 77 61 73 20  y.....    # was 
4400: 69 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61 64  imported instead
4410: 20 6f 66 20 61 64 64 65 64 0a 09 09 09 09 20 20   of added.....  
4420: 20 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 20 20    # normally..  
4430: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f    variable myroo
4440: 74 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20  t            {} 
4450: 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f  ; # Reference to
4460: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62   the revision ob
4470: 6a 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 68  ject.....    # h
4480: 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20  olding the root 
4490: 72 65 76 69 73 69 6f 6e 2e 20 20 49 74 73 0a 09  revision.  Its..
44a0: 09 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 20  ...    # number 
44b0: 75 73 75 61 6c 6c 79 20 69 73 20 27 31 2e 31 27  usually is '1.1'
44c0: 2e 20 43 61 6e 20 62 65 0a 09 09 09 09 20 20 20  . Can be.....   
44d0: 20 23 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e   # a different n
44e0: 75 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20 6f  umber, because o
44f0: 66 0a 09 09 09 09 20 20 20 20 23 20 67 61 70 73  f.....    # gaps
4500: 20 63 72 65 61 74 65 64 20 76 69 61 20 27 63 76   created via 'cv
4510: 73 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20 20  sadmin -o'..    
4520: 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63  variable mybranc
4530: 68 65 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20  hes -array {} ; 
4540: 23 20 4d 61 70 73 20 62 72 61 6e 63 68 20 6e 75  # Maps branch nu
4550: 6d 62 65 72 20 74 6f 20 74 68 65 20 73 79 6d 62  mber to the symb
4560: 6f 6c 0a 09 09 09 09 20 20 20 20 23 20 6f 62 6a  ol.....    # obj
4570: 65 63 74 20 68 61 6e 64 6c 69 6e 67 20 74 68 65  ect handling the
4580: 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72   branch..    var
4590: 69 61 62 6c 65 20 6d 79 74 61 67 73 20 20 20 20  iable mytags    
45a0: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d   -array {} ; # M
45b0: 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d  aps revision num
45c0: 62 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0a  ber to the list.
45d0: 09 09 09 09 20 20 20 20 23 20 6f 66 20 73 79 6d  ....    # of sym
45e0: 62 6f 6c 20 6f 62 6a 65 63 74 73 20 66 6f 72 20  bol objects for 
45f0: 74 68 65 20 74 61 67 73 0a 09 09 09 09 20 20 20  the tags.....   
4600: 20 23 20 61 73 73 6f 63 69 61 74 65 64 20 77 69   # associated wi
4610: 74 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e  th the revision.
4620: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
4630: 73 79 6d 62 6f 6c 73 20 20 20 20 20 20 20 20 20  symbols         
4640: 7b 7d 20 3b 20 23 20 53 65 74 20 6f 66 20 74 68  {} ; # Set of th
4650: 65 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20 66  e symbol names f
4660: 6f 75 6e 64 20 69 6e 0a 09 09 09 09 20 20 20 20  ound in.....    
4670: 23 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20 20  # this file...  
4680: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61    variable mybra
4690: 6e 63 68 63 6e 74 20 30 20 3b 20 23 20 43 6f 75  nchcnt 0 ; # Cou
46a0: 6e 74 65 72 20 66 6f 72 20 62 72 61 6e 63 68 65  nter for branche
46b0: 73 2c 20 74 6f 20 72 65 63 6f 72 64 20 74 68 65  s, to record the
46c0: 69 72 0a 09 09 09 20 20 20 20 20 23 20 6f 72 64  ir....     # ord
46d0: 65 72 20 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e  er of definition
46e0: 2e 20 54 68 69 73 20 61 6c 73 6f 20 64 65 66 69  . This also defi
46f0: 6e 65 73 0a 09 09 09 20 20 20 20 20 23 20 74 68  nes....     # th
4700: 65 69 72 20 6f 72 64 65 72 20 6f 66 20 63 72 65  eir order of cre
4710: 61 74 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20  ation, which is 
4720: 74 68 65 0a 09 09 09 20 20 20 20 20 23 20 72 65  the....     # re
4730: 76 65 72 73 65 20 6f 66 20 64 65 66 69 6e 69 74  verse of definit
4740: 69 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 73 6d 61  ion.  I.e. a sma
4750: 6c 6c 65 72 0a 09 09 09 20 20 20 20 20 23 20 6e  ller....     # n
4760: 75 6d 62 65 72 20 6d 65 61 6e 73 20 27 44 65 66  umber means 'Def
4770: 69 6e 65 64 20 65 61 72 6c 69 65 72 27 2c 20 6d  ined earlier', m
4780: 65 61 6e 73 0a 09 09 09 20 20 20 20 20 23 20 27  eans....     # '
4790: 43 72 65 61 74 65 64 20 6c 61 74 65 72 27 2e 0a  Created later'..
47a0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
47b0: 74 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 44 69 72  trunk {} ; # Dir
47c0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 74 6f  ect reference to
47d0: 20 6d 79 70 72 6f 6a 65 63 74 20 2d 3e 20 74 72   myproject -> tr
47e0: 75 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  unk..    variabl
47f0: 65 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 3b 20 23  e myroots {} ; #
4800: 20 4c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 69   List of roots i
4810: 6e 20 74 68 65 20 66 6f 72 65 73 74 20 6f 66 0a  n the forest of.
4820: 09 09 09 20 20 23 20 6c 6f 64 27 73 2e 20 4f 62  ...  # lod's. Ob
4830: 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 20  ject references 
4840: 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 61 6e 64  to revisions and
4850: 0a 09 09 09 20 20 23 20 62 72 61 6e 63 68 65 73  ....  # branches
4860: 2e 20 54 68 65 20 6c 61 74 74 65 72 20 63 61 6e  . The latter can
4870: 20 61 70 70 65 61 72 20 77 68 65 6e 20 74 68 65   appear when the
4880: 79 0a 09 09 09 20 20 23 20 61 72 65 20 73 65 76  y....  # are sev
4890: 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20  ered from their 
48a0: 70 61 72 65 6e 74 2e 0a 0a 20 20 20 20 23 20 23  parent...    # #
48b0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
48c0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
48d0: 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65  ####.    ## Inte
48e0: 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20  rnal methods..  
48f0: 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42    method RecordB
4900: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 72  ranchCommits {br
4910: 61 6e 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 61  anches} {..forea
4920: 63 68 20 62 72 61 6e 63 68 72 65 76 6e 72 20 24  ch branchrevnr $
4930: 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20  branches {..    
4940: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 73  if {[catch {...s
4950: 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66  et branch [$self
4960: 20 52 65 76 32 42 72 61 6e 63 68 20 24 62 72 61   Rev2Branch $bra
4970: 6e 63 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 7d  nchrevnr]..    }
4980: 5d 7d 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63  ]} {...set branc
4990: 68 20 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c 61  h [$self AddUnla
49a0: 62 65 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 76  beledBranch [rev
49b0: 20 32 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e   2branchnr $bran
49c0: 63 68 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d  chrevnr]]..    }
49d0: 0a 0a 09 20 20 20 20 23 20 52 65 63 6f 72 64 20  ...    # Record 
49e0: 74 68 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 74  the commit, just
49f0: 20 61 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d   as revision num
4a00: 62 65 72 20 66 6f 72 0a 09 20 20 20 20 23 20 6e  ber for..    # n
4a10: 6f 77 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 68  ow. ProcesBranch
4a20: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 77 69 6c  Dependencies wil
4a30: 6c 20 65 78 74 65 6e 64 20 74 68 61 74 20 69 74  l extend that it
4a40: 6f 20 61 0a 09 20 20 20 20 23 20 70 72 6f 70 65  o a..    # prope
4a50: 72 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  r object referen
4a60: 63 65 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e 63  ce....    $branc
4a70: 68 20 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20  h setchildrevnr 
4a80: 24 62 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d 0a  $branchrevnr..}.
4a90: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
4aa0: 20 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72     method Rev2Br
4ab0: 61 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 20  anch {revnr} {. 
4ac0: 20 20 20 20 20 20 20 69 6e 74 65 67 72 69 74 79         integrity
4ad0: 20 61 73 73 65 72 74 20 7b 21 5b 72 65 76 20 69   assert {![rev i
4ae0: 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76  strunkrevnr $rev
4af0: 6e 72 5d 7d 20 7b 45 78 70 65 63 74 65 64 20 61  nr]} {Expected a
4b00: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e   branch revision
4b10: 20 6e 75 6d 62 65 72 7d 0a 09 72 65 74 75 72 6e   number}..return
4b20: 20 24 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65   $mybranches([re
4b30: 76 20 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76  v 2branchnr $rev
4b40: 6e 72 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20  nr]).    }..    
4b50: 6d 65 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65  method AddUnlabe
4b60: 6c 65 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63  ledBranch {branc
4b70: 68 6e 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b  hnr} {..return [
4b80: 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20  $self AddBranch 
4b90: 75 6e 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63  unlabeled-$branc
4ba0: 68 6e 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20  hnr $branchnr]. 
4bb0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
4bc0: 20 41 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65   AddBranch {name
4bd0: 20 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66   branchnr} {..if
4be0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d   {[info exists m
4bf0: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63  ybranches($branc
4c00: 68 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f  hnr)]} {..    lo
4c10: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22  g write 1 file "
4c20: 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72  In '$mypath': Br
4c30: 61 6e 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27  anch '$branchnr'
4c40: 20 6e 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e   named '[$mybran
4c50: 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20  ches($branchnr) 
4c60: 6e 61 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67  name]'"..    log
4c70: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 43   write 1 file "C
4c80: 61 6e 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e  annot have secon
4c90: 64 20 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20  d name '$name', 
4ca0: 69 67 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20  ignoring it"..  
4cb0: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74    return..}..set
4cc0: 20 62 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55   branch [sym %AU
4cd0: 54 4f 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e  TO% branch $bran
4ce0: 63 68 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74  chnr [$myproject
4cf0: 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65   getsymbol $name
4d00: 5d 20 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e 63  ] $self]..$branc
4d10: 68 20 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69  h setposition [i
4d20: 6e 63 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d  ncr mybranchcnt]
4d30: 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73  ..set mybranches
4d40: 28 24 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61  ($branchnr) $bra
4d50: 6e 63 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61  nch..return $bra
4d60: 6e 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  nch.    }..    m
4d70: 65 74 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61  ethod AddTag {na
4d80: 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74  me revnr} {..set
4d90: 20 74 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25   tag [sym %AUTO%
4da0: 20 74 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79   tag $revnr [$my
4db0: 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f  project getsymbo
4dc0: 6c 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a  l $name] $self].
4dd0: 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28  .lappend mytags(
4de0: 24 72 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65  $revnr) $tag..re
4df0: 74 75 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a  turn $tag.    }.
4e00: 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f  .    method Reco
4e10: 72 64 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63  rdBasicDependenc
4e20: 69 65 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d  ies {revnr next}
4e30: 20 7b 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65   {..# Handle the
4e40: 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64   revision depend
4e50: 65 6e 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74  encies. Record t
4e60: 68 65 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a  hem for now, do.
4e70: 09 23 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20  .# nothing with 
4e80: 74 68 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e  them yet....# On
4e90: 20 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27   the trunk the '
4ea0: 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e  next' field poin
4eb0: 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
4ec0: 75 73 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20  us..# revision, 
4ed0: 69 2e 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74  i.e. the _parent
4ee0: 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  _ of the current
4ef0: 20 6f 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09   one. Example:..
4f00: 23 20 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20  # 1.6's next is 
4f10: 31 2e 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20  1.5 (modulo cvs 
4f20: 61 64 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43  admin -o)....# C
4f30: 6f 6e 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62  ontrarily on a b
4f40: 72 61 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27  ranch the 'next'
4f50: 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
4f60: 20 74 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20   the..# primary 
4f70: 5f 63 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63  _child_ of the c
4f80: 75 72 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e  urrent revision.
4f90: 20 41 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20   As example,..# 
4fa0: 31 2e 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27  1.1.3.2's 'next'
4fb0: 20 77 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33   will be 1.1.3.3
4fc0: 2e 0a 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27  ....# The 'next'
4fd0: 20 66 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20   field actually 
4fe0: 61 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 6f  always refers to
4ff0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23   the revision..#
5000: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
5010: 64 65 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20  delta needed to 
5020: 72 65 74 72 69 65 76 65 20 74 68 61 74 20 72 65  retrieve that re
5030: 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20  vision....# The 
5040: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65  dependencies nee
5050: 64 65 64 20 68 65 72 65 20 61 72 65 20 74 68 65  ded here are the
5060: 20 6c 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75   logical structu
5070: 72 65 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68  re,..# parent/ch
5080: 69 6c 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65  ild, and not the
5090: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
50a0: 64 65 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a  dependent delta.
50b0: 09 23 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69  .# pointers....i
50c0: 66 20 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20  f {$next eq ""} 
50d0: 72 65 74 75 72 6e 0a 09 23 20 20 20 20 20 20 20  return..#       
50e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
50f0: 20 20 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69     parent -> chi
5100: 6c 64 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74  ld..if {[rev ist
5110: 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72  runkrevnr $revnr
5120: 5d 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e  ]} {..    lappen
5130: 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73  d mydependencies
5140: 20 24 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d   $next $revnr..}
5150: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70   else {..    lap
5160: 70 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63  pend mydependenc
5170: 69 65 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74  ies $revnr $next
5180: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
5190: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72  }..    method Pr
51a0: 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65 70 65  ocessPrimaryDepe
51b0: 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66  ndencies {} {..f
51c0: 6f 72 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65  oreach {parentre
51d0: 76 6e 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20  vnr childrevnr} 
51e0: 24 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20  $mydependencies 
51f0: 7b 0a 09 20 20 20 20 73 65 74 20 70 61 72 65 6e  {..    set paren
5200: 74 20 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74  t $myrev($parent
5210: 72 65 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20  revnr)..    set 
5220: 63 68 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63  child  $myrev($c
5230: 68 69 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20  hildrevnr)..    
5240: 24 70 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64  $parent setchild
5250: 20 24 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68   $child..    $ch
5260: 69 6c 64 20 73 65 74 70 61 72 65 6e 74 20 24 70  ild setparent $p
5270: 61 72 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e  arent..}..return
5280: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
5290: 6f 64 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68  od ProcessBranch
52a0: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20  Dependencies {} 
52b0: 7b 0a 09 66 6f 72 65 61 63 68 20 7b 62 72 61 6e  {..foreach {bran
52c0: 63 68 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 72  chnr branch} [ar
52d0: 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68  ray get mybranch
52e0: 65 73 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72  es] {..    set r
52f0: 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 61  evnr [$branch pa
5300: 72 65 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20  rentrevnr]...   
5310: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
5320: 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29  ts myrev($revnr)
5330: 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65  ]} {...log write
5340: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79   1 file "In '$my
5350: 70 61 74 68 27 3a 20 54 68 65 20 62 72 61 6e 63  path': The branc
5360: 68 20 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65  h '[$branch name
5370: 5d 27 20 72 65 66 65 72 65 6e 63 65 73 22 0a 09  ]' references"..
5380: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c  .log write 1 fil
5390: 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 76  e "the bogus rev
53a0: 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61  ision '$revnr' a
53b0: 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72  nd will be ignor
53c0: 65 64 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 64  ed."...$branch d
53d0: 65 73 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d  estroy...unset m
53e0: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63  ybranches($branc
53f0: 68 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65  hnr)..    } else
5400: 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79   {...set rev $my
5410: 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 24 72  rev($revnr)...$r
5420: 65 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 72  ev addbranch $br
5430: 61 6e 63 68 0a 09 09 24 62 72 61 6e 63 68 20 73  anch...$branch s
5440: 65 74 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09  etparent $rev...
5450: 09 23 20 49 66 20 72 65 76 69 73 69 6f 6e 73 20  .# If revisions 
5460: 77 65 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f  were committed o
5470: 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 65 20  n the branch we 
5480: 73 74 6f 72 65 20 61 0a 09 09 23 20 72 65 66 65  store a...# refe
5490: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 62 72 61  rence to the bra
54a0: 6e 63 68 20 74 68 65 72 65 2c 20 61 6e 64 20 66  nch there, and f
54b0: 75 72 74 68 65 72 20 64 65 63 6c 61 72 65 0a 09  urther declare..
54c0: 09 23 20 74 68 65 20 66 69 72 73 74 20 63 68 69  .# the first chi
54d0: 6c 64 27 73 20 70 61 72 65 6e 74 20 74 6f 20 62  ld's parent to b
54e0: 65 20 62 72 61 6e 63 68 27 73 20 70 61 72 65 6e  e branch's paren
54f0: 74 2c 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 20  t, and...# list 
5500: 74 68 69 73 20 63 68 69 6c 64 20 69 6e 20 74 68  this child in th
5510: 65 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f  e parent revisio
5520: 6e 2e 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e  n.....if {[$bran
5530: 63 68 20 68 61 73 63 68 69 6c 64 72 65 76 5d 7d  ch haschildrev]}
5540: 20 7b 0a 09 09 20 20 20 20 73 65 74 20 63 68 69   {...    set chi
5550: 6c 64 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68  ldrevnr [$branch
5560: 20 63 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20   childrevnr]... 
5570: 20 20 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79     set child $my
5580: 72 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29  rev($childrevnr)
5590: 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 73  ...    $branch s
55a0: 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a  etchild $child..
55b0: 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74  ..    $child set
55c0: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72  parentbranch $br
55d0: 61 6e 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c  anch...    $chil
55e0: 64 20 73 65 74 70 61 72 65 6e 74 20 20 20 20 20  d setparent     
55f0: 20 20 24 72 65 76 0a 09 09 20 20 20 20 24 72 65    $rev...    $re
5600: 76 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e  v addchildonbran
5610: 63 68 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20  ch $child...}.. 
5620: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a     }..}..return.
5630: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
5640: 64 20 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b  d SortBranches {
5650: 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65  } {..foreach {re
5660: 76 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20  vnr rev} [array 
5670: 67 65 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65  get myrev] { $re
5680: 76 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d  v sortbranches }
5690: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
56a0: 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65      method Proce
56b0: 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65  ssTagDependencie
56c0: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20  s {} {..foreach 
56d0: 7b 72 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20  {revnr taglist} 
56e0: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67  [array get mytag
56f0: 73 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b  s] {..    if {![
5700: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65  info exists myre
5710: 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09  v($revnr)]} {...
5720: 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24  set n [llength $
5730: 74 61 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77  taglist]...log w
5740: 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20  rite 1 file "In 
5750: 27 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66  '$mypath': The f
5760: 6f 6c 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e  ollowing [nsp $n
5770: 20 74 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22   tag] reference"
5780: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66  ...log write 1 f
5790: 69 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 72  ile "the bogus r
57a0: 65 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27  evision '$revnr'
57b0: 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e   and will be ign
57c0: 6f 72 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68  ored."...foreach
57d0: 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a   tag $taglist {.
57e0: 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
57f0: 31 20 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61  1 file "    [$ta
5800: 67 20 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24  g name]"...    $
5810: 74 61 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a  tag destroy...}.
5820: 09 09 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24  ..unset mytags($
5830: 72 65 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c  revnr)..    } el
5840: 73 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24  se {...set rev $
5850: 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09  myrev($revnr)...
5860: 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67  foreach tag $tag
5870: 6c 69 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65  list {...    $re
5880: 76 20 61 64 64 74 61 67 20 20 20 20 24 74 61 67  v addtag    $tag
5890: 0a 09 09 20 20 20 20 24 74 61 67 20 73 65 74 74  ...    $tag sett
58a0: 61 67 72 65 76 20 24 72 65 76 0a 09 09 7d 0a 09  agrev $rev...}..
58b0: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e      }..}..return
58c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
58d0: 6f 64 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52  od DetermineTheR
58e0: 6f 6f 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b  ootRevision {} {
58f0: 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20  ..# The root is 
5900: 74 68 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e  the one revision
5910: 20 77 68 69 63 68 20 68 61 73 20 6e 6f 20 70 61   which has no pa
5920: 72 65 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 63  rent. By..# chec
5930: 6b 69 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 6f  king all revisio
5940: 6e 73 20 77 65 20 65 6e 73 75 72 65 20 74 68 61  ns we ensure tha
5950: 74 20 77 65 20 63 61 6e 20 64 65 74 65 63 74 20  t we can detect 
5960: 61 6e 64 0a 09 23 20 72 65 70 6f 72 74 20 74 68  and..# report th
5970: 65 20 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 70  e case of multip
5980: 6c 65 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f 75  le roots. Withou
5990: 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 0a  t that we could.
59a0: 09 23 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 6f  .# simply take o
59b0: 6e 65 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20  ne revision and 
59c0: 66 6f 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 6e  follow the paren
59d0: 74 20 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 68  t links to..# th
59e0: 65 69 72 20 72 6f 6f 74 20 28 73 69 63 21 29 2e  eir root (sic!).
59f0: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e  ...foreach {revn
5a00: 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65  r rev} [array ge
5a10: 74 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20  t myrev] {..    
5a20: 69 66 20 7b 5b 24 72 65 76 20 68 61 73 70 61 72  if {[$rev haspar
5a30: 65 6e 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09  ent]} continue..
5a40: 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73      integrity as
5a50: 73 65 72 74 20 7b 24 6d 79 72 6f 6f 74 20 65 71  sert {$myroot eq
5a60: 20 22 22 7d 20 7b 4d 75 6c 74 69 70 6c 65 20 72   ""} {Multiple r
5a70: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66 6f  oot revisions fo
5a80: 75 6e 64 7d 0a 09 20 20 20 20 73 65 74 20 6d 79  und}..    set my
5a90: 72 6f 6f 74 20 24 72 65 76 0a 09 7d 0a 0a 09 23  root $rev..}...#
5aa0: 20 49 6e 20 74 68 65 20 66 75 74 75 72 65 20 77   In the future w
5ab0: 65 20 61 6c 73 6f 20 6e 65 65 64 20 61 20 6c 69  e also need a li
5ac0: 73 74 2c 20 61 73 20 62 72 61 6e 63 68 65 73 20  st, as branches 
5ad0: 63 61 6e 20 62 65 63 6f 6d 65 0a 09 23 20 73 65  can become..# se
5ae0: 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72  vered from their
5af0: 20 70 61 72 65 6e 74 2c 20 6d 61 6b 69 6e 67 20   parent, making 
5b00: 74 68 65 6d 20 74 68 65 69 72 20 6f 77 6e 20 72  them their own r
5b10: 6f 6f 74 2e 0a 09 73 65 74 20 6d 79 72 6f 6f 74  oot...set myroot
5b20: 73 20 5b 6c 69 73 74 20 24 6d 79 72 6f 6f 74 5d  s [list $myroot]
5b30: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
5b40: 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72      method Deter
5b50: 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72  mineRevisionOper
5b60: 61 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72  ations {} {..for
5b70: 65 61 63 68 20 72 65 76 20 24 6d 79 72 65 76 69  each rev $myrevi
5b80: 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 74  sions { $rev det
5b90: 65 72 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20  ermineoperation 
5ba0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
5bb0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65  .    method Dete
5bc0: 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65  rmineLinesOfDeve
5bd0: 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20  lopment {} {..# 
5be0: 46 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 74 68  For revisions th
5bf0: 69 73 20 68 61 73 20 62 65 65 6e 20 64 6f 6e 65  is has been done
5c00: 20 61 6c 72 65 61 64 79 2c 20 69 6e 20 27 65 78   already, in 'ex
5c10: 74 65 6e 64 27 2e 20 4e 6f 77 0a 09 23 20 77 65  tend'. Now..# we
5c20: 20 64 6f 20 74 68 69 73 20 66 6f 72 20 74 68 65   do this for the
5c30: 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61   branches and ta
5c40: 67 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f  gs....foreach {_
5c50: 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20   branch} [array 
5c60: 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20  get mybranches] 
5c70: 7b 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73  {..    $branch s
5c80: 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74  etlod [$self Get
5c90: 4c 4f 44 20 5b 24 62 72 61 6e 63 68 20 70 61 72  LOD [$branch par
5ca0: 65 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09  entrevnr]]..}...
5cb0: 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69  foreach {_ tagli
5cc0: 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d  st} [array get m
5cd0: 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f  ytags] {..    fo
5ce0: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69  reach tag $tagli
5cf0: 73 74 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c  st {...$tag setl
5d00: 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44  od [$self GetLOD
5d10: 20 5b 24 74 61 67 20 74 61 67 72 65 76 6e 72 5d   [$tag tagrevnr]
5d20: 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74  ]..    }..}..ret
5d30: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
5d40: 65 74 68 6f 64 20 47 65 74 4c 4f 44 20 7b 72 65  ethod GetLOD {re
5d50: 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76  vnr} {..if {[rev
5d60: 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72   istrunkrevnr $r
5d70: 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65  evnr]} {..    re
5d80: 74 75 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 7d  turn $mytrunk..}
5d90: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 74   else {..    ret
5da0: 75 72 6e 20 5b 24 73 65 6c 66 20 52 65 76 32 42  urn [$self Rev2B
5db0: 72 61 6e 63 68 20 24 72 65 76 6e 72 5d 0a 09 7d  ranch $revnr]..}
5dc0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
5dd0: 6f 64 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e  od HandleNonTrun
5de0: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b  kDefaultBranch {
5df0: 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 69 73 74  } {..set revlist
5e00: 20 5b 24 73 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b   [$self NonTrunk
5e10: 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73  DefaultRevisions
5e20: 5d 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68  ]..if {![llength
5e30: 20 24 72 65 76 6c 69 73 74 5d 7d 20 72 65 74 75   $revlist]} retu
5e40: 72 6e 0a 0a 09 24 73 65 6c 66 20 41 64 6a 75 73  rn...$self Adjus
5e50: 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74  tNonTrunkDefault
5e60: 42 72 61 6e 63 68 20 24 72 65 76 6c 69 73 74 0a  Branch $revlist.
5e70: 09 24 73 65 6c 66 20 43 68 65 63 6b 4c 4f 44 73  .$self CheckLODs
5e80: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
5e90: 20 20 20 20 6d 65 74 68 6f 64 20 4e 6f 6e 54 72      method NonTr
5ea0: 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69  unkDefaultRevisi
5eb0: 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d  ons {} {..# From
5ec0: 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f 6c   cvs2svn the fol
5ed0: 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 69  lowing explanati
5ee0: 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69 63  on (with modific
5ef0: 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75  ations..# for ou
5f00: 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09  r algorithm):...
5f10: 23 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  # Determine whet
5f20: 68 65 72 20 74 68 65 72 65 20 61 72 65 20 61 6e  her there are an
5f30: 79 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61  y non-trunk defa
5f40: 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65  ult branch..# re
5f50: 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 49 66 20  visions....# If 
5f60: 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61  a non-trunk defa
5f70: 75 6c 74 20 62 72 61 6e 63 68 20 69 73 20 64 65  ult branch is de
5f80: 74 65 72 6d 69 6e 65 64 20 74 6f 20 68 61 76 65  termined to have
5f90: 20 65 78 69 73 74 65 64 2c 0a 09 23 20 72 65 74   existed,..# ret
5fa0: 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 6f 62  urn a list of ob
5fb0: 6a 65 63 74 73 20 66 6f 72 20 61 6c 6c 20 72 65  jects for all re
5fc0: 76 69 73 69 6f 6e 73 20 74 68 61 74 20 77 65 72  visions that wer
5fd0: 65 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74 72  e once..# non-tr
5fe0: 75 6e 6b 20 64 65 66 61 75 6c 74 20 72 65 76 69  unk default revi
5ff0: 73 69 6f 6e 73 2c 20 69 6e 20 64 65 70 65 6e 64  sions, in depend
6000: 65 6e 63 79 20 6f 72 64 65 72 20 28 69 2e 65 2e  ency order (i.e.
6010: 20 72 6f 6f 74 0a 09 23 20 66 69 72 73 74 29 2e   root..# first).
6020: 0a 0a 09 23 20 54 68 65 72 65 20 61 72 65 20 74  ...# There are t
6030: 77 6f 20 63 61 73 65 73 20 74 6f 20 68 61 6e 64  wo cases to hand
6040: 6c 65 3a 0a 0a 09 23 20 4f 6e 65 20 63 61 73 65  le:...# One case
6050: 20 69 73 20 73 69 6d 70 6c 65 2e 20 20 54 68 65   is simple.  The
6060: 20 52 43 53 20 66 69 6c 65 20 6c 69 73 74 73 20   RCS file lists 
6070: 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  a default branch
6080: 0a 09 23 20 65 78 70 6c 69 63 69 74 6c 79 20 69  ..# explicitly i
6090: 6e 20 69 74 73 20 68 65 61 64 65 72 2c 20 73 75  n its header, su
60a0: 63 68 20 61 73 20 27 31 2e 31 2e 31 27 2e 20 20  ch as '1.1.1'.  
60b0: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 65  In this case, we
60c0: 0a 09 23 20 6b 6e 6f 77 20 74 68 61 74 20 65 76  ..# know that ev
60d0: 65 72 79 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20  ery revision on 
60e0: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  the vendor branc
60f0: 68 20 69 73 20 74 6f 20 62 65 0a 09 23 20 74 72  h is to be..# tr
6100: 65 61 74 65 64 20 61 73 20 68 65 61 64 20 6f 66  eated as head of
6110: 20 74 72 75 6e 6b 20 61 74 20 74 68 61 74 20 70   trunk at that p
6120: 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e 0a 0a 09  oint in time....
6130: 23 20 42 75 74 20 74 68 65 72 65 27 73 20 61 6c  # But there's al
6140: 73 6f 20 61 20 64 65 67 65 6e 65 72 61 74 65 20  so a degenerate 
6150: 63 61 73 65 2e 20 20 54 68 65 20 52 43 53 20 66  case.  The RCS f
6160: 69 6c 65 20 64 6f 65 73 20 6e 6f 74 0a 09 23 20  ile does not..# 
6170: 63 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61  currently have a
6180: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c   default branch,
6190: 20 79 65 74 20 77 65 20 63 61 6e 20 64 65 64 75   yet we can dedu
61a0: 63 65 20 74 68 61 74 20 66 6f 72 0a 09 23 20 73  ce that for..# s
61b0: 6f 6d 65 20 70 65 72 69 6f 64 20 69 6e 20 74 68  ome period in th
61c0: 65 20 70 61 73 74 20 69 74 20 70 72 6f 62 61 62  e past it probab
61d0: 6c 79 20 2a 64 69 64 2a 20 68 61 76 65 20 6f 6e  ly *did* have on
61e0: 65 2e 20 20 46 6f 72 0a 09 23 20 65 78 61 6d 70  e.  For..# examp
61f0: 6c 65 2c 20 74 68 65 20 66 69 6c 65 20 68 61 73  le, the file has
6200: 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e   vendor revision
6210: 73 20 31 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e 31  s 1.1.1.1 -> 1.1
6220: 2e 31 2e 39 36 2c 0a 09 23 20 61 6c 6c 20 6f 66  .1.96,..# all of
6230: 20 77 68 69 63 68 20 61 72 65 20 64 61 74 65 64   which are dated
6240: 20 62 65 66 6f 72 65 20 31 2e 32 2c 20 61 6e 64   before 1.2, and
6250: 20 74 68 65 6e 20 69 74 20 68 61 73 20 31 2e 31   then it has 1.1
6260: 2e 31 2e 39 37 0a 09 23 20 2d 3e 20 31 2e 31 2e  .1.97..# -> 1.1.
6270: 31 2e 31 30 30 20 64 61 74 65 64 20 61 66 74 65  1.100 dated afte
6280: 72 20 31 2e 32 2e 20 20 49 6e 20 74 68 69 73 20  r 1.2.  In this 
6290: 63 61 73 65 2c 20 77 65 20 73 68 6f 75 6c 64 0a  case, we should.
62a0: 09 23 20 72 65 63 6f 72 64 20 31 2e 31 2e 31 2e  .# record 1.1.1.
62b0: 39 36 20 61 73 20 74 68 65 20 6c 61 73 74 20 76  96 as the last v
62c0: 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 20 74  endor revision t
62d0: 6f 20 68 61 76 65 20 62 65 65 6e 20 74 68 65 0a  o have been the.
62e0: 09 23 20 68 65 61 64 20 6f 66 20 74 68 65 20 64  .# head of the d
62f0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 0a  efault branch...
6300: 09 69 66 20 7b 24 6d 79 70 72 69 6e 63 69 70 61  .if {$myprincipa
6310: 6c 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20  l ne ""} {..    
6320: 23 20 54 68 65 72 65 20 69 73 20 73 74 69 6c 6c  # There is still
6330: 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63   a default branc
6340: 68 3b 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  h; that means th
6350: 61 74 20 61 6c 6c 0a 09 20 20 20 20 23 20 72 65  at all..    # re
6360: 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 61 74 20  visions on that 
6370: 62 72 61 6e 63 68 20 67 65 74 20 6d 61 72 6b 65  branch get marke
6380: 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  d....    log wri
6390: 74 65 20 35 20 66 69 6c 65 20 22 46 6f 75 6e 64  te 5 file "Found
63a0: 20 65 78 70 6c 69 63 69 74 6c 79 20 6d 61 72 6b   explicitly mark
63b0: 65 64 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73  ed NTDB"...    s
63c0: 65 74 20 72 6e 65 78 74 20 5b 24 6d 79 72 6f 6f  et rnext [$myroo
63d0: 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 69 66  t child]..    if
63e0: 20 7b 24 72 6e 65 78 74 20 6e 65 20 22 22 7d 20   {$rnext ne ""} 
63f0: 7b 0a 09 09 74 72 6f 75 62 6c 65 20 66 61 74 61  {...trouble fata
6400: 6c 20 22 46 69 6c 65 20 77 69 74 68 20 64 65 66  l "File with def
6410: 61 75 6c 74 20 62 72 61 6e 63 68 20 24 6d 79 70  ault branch $myp
6420: 72 69 6e 63 69 70 61 6c 20 61 6c 73 6f 20 68 61  rincipal also ha
6430: 73 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6e 65  s revision [$rne
6440: 78 74 20 72 65 76 6e 72 5d 22 0a 09 09 72 65 74  xt revnr]"...ret
6450: 75 72 6e 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20  urn..    }...   
6460: 20 73 65 74 20 72 65 76 20 5b 24 6d 79 62 72 61   set rev [$mybra
6470: 6e 63 68 65 73 28 24 6d 79 70 72 69 6e 63 69 70  nches($myprincip
6480: 61 6c 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20  al) child]..    
6490: 73 65 74 20 72 65 73 20 7b 7d 0a 0a 09 20 20 20  set res {}...   
64a0: 20 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20   while {$rev ne 
64b0: 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20  ""} {...lappend 
64c0: 72 65 73 20 24 72 65 76 0a 09 09 73 65 74 20 72  res $rev...set r
64d0: 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a  ev [$rev child].
64e0: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74  .    }...    ret
64f0: 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73  urn $res...} els
6500: 65 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64  eif {$myimported
6510: 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 20 64 65  } {..    # No de
6520: 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 62 75  fault branch, bu
6530: 74 20 74 68 65 20 66 69 6c 65 20 61 70 70 65 61  t the file appea
6540: 72 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 0a  rs to have been.
6550: 09 20 20 20 20 23 20 69 6d 70 6f 72 74 65 64 2e  .    # imported.
6560: 20 20 53 6f 20 6f 75 72 20 65 64 75 63 61 74 65    So our educate
6570: 64 20 67 75 65 73 73 20 69 73 20 74 68 61 74 20  d guess is that 
6580: 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 0a 09 20  all revisions.. 
6590: 20 20 20 23 20 6f 6e 20 74 68 65 20 27 31 2e 31     # on the '1.1
65a0: 2e 31 27 20 62 72 61 6e 63 68 20 77 69 74 68 20  .1' branch with 
65b0: 74 69 6d 65 73 74 61 6d 70 73 20 70 72 69 6f 72  timestamps prior
65c0: 20 74 6f 20 74 68 65 0a 09 20 20 20 20 23 20 74   to the..    # t
65d0: 69 6d 65 73 74 61 6d 70 20 6f 66 20 27 31 2e 32  imestamp of '1.2
65e0: 27 20 77 65 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b  ' were non-trunk
65f0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a   default branch.
6600: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73  .    # revisions
6610: 2e 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 72  ....    # This r
6620: 65 61 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f 63 65  eally only proce
6630: 73 73 65 73 20 73 74 61 6e 64 61 72 64 20 27 31  sses standard '1
6640: 2e 31 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a 09 20  .1.1.*'-style.. 
6650: 20 20 20 23 20 76 65 6e 64 6f 72 20 72 65 76 69     # vendor revi
6660: 73 69 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f 75 6c  sions.  One coul
6670: 64 20 63 6f 6e 63 65 69 76 61 62 6c 79 20 68 61  d conceivably ha
6680: 76 65 20 61 20 66 69 6c 65 0a 09 20 20 20 20 23  ve a file..    #
6690: 20 77 68 6f 73 65 20 64 65 66 61 75 6c 74 20 62   whose default b
66a0: 72 61 6e 63 68 20 69 73 20 31 2e 31 2e 33 20 6f  ranch is 1.1.3 o
66b0: 72 20 77 68 61 74 65 76 65 72 2c 20 6f 72 20 77  r whatever, or w
66c0: 61 73 20 74 68 61 74 0a 09 20 20 20 20 23 20 61  as that..    # a
66d0: 74 20 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e 20  t some point in 
66e0: 74 69 6d 65 2c 20 77 69 74 68 20 76 65 6e 64 6f  time, with vendo
66f0: 72 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e  r revisions 1.1.
6700: 33 2e 31 2c 0a 09 20 20 20 20 23 20 31 2e 31 2e  3.1,..    # 1.1.
6710: 33 2e 32 2c 20 65 74 63 2e 20 20 42 75 74 20 77  3.2, etc.  But w
6720: 69 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 20  ith the default 
6730: 62 72 61 6e 63 68 20 67 6f 6e 65 20 6e 6f 77 2c  branch gone now,
6740: 0a 09 20 20 20 20 23 20 77 65 27 64 20 68 61 76  ..    # we'd hav
6750: 65 20 6e 6f 20 62 61 73 69 73 20 66 6f 72 20 61  e no basis for a
6760: 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65  ssuming that the
6770: 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 0a 09 20   non-standard.. 
6780: 20 20 20 23 20 76 65 6e 64 6f 72 20 62 72 61 6e     # vendor bran
6790: 63 68 20 68 61 64 20 65 76 65 72 20 62 65 65 6e  ch had ever been
67a0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61   the default bra
67b0: 6e 63 68 20 61 6e 79 77 61 79 2e 0a 0a 09 20 20  nch anyway....  
67c0: 20 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65    # Note that we
67d0: 20 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69   rely on compari
67e0: 73 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65  sons between the
67f0: 20 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20   timestamps..   
6800: 20 23 20 6f 66 20 74 68 65 20 72 65 76 69 73 69   # of the revisi
6810: 6f 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f  ons on the vendo
6820: 72 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61  r branch and tha
6830: 74 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69  t of..    # revi
6840: 73 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74  sion 1.2, even t
6850: 68 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73 74  hough the timest
6860: 61 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20  amps might be.. 
6870: 20 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64     # incorrect d
6880: 75 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77  ue to clock skew
6890: 2e 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61  .  We could do a
68a0: 20 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23   slightly..    #
68b0: 20 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77   better job if w
68c0: 65 20 75 73 65 64 20 74 68 65 20 63 68 61 6e 67  e used the chang
68d0: 65 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c  eset timestamps,
68e0: 20 61 73 20 69 74 20 69 73 0a 09 20 20 20 20 23   as it is..    #
68f0: 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74   possible that t
6900: 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20  he dependencies 
6910: 74 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09  that went into..
6920: 20 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e      # determinin
6930: 67 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d  g those timestam
6940: 70 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75  ps are more accu
6950: 72 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20  rate.  But..    
6960: 23 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71  # that would req
6970: 75 69 72 65 20 61 6e 20 65 78 74 72 61 20 70 61  uire an extra pa
6980: 73 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20  ss or two....   
6990: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
69a0: 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e  ts mybranches(1.
69b0: 31 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20  1.1)]} { return 
69c0: 7b 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77  {} }...    log w
69d0: 72 69 74 65 20 35 20 66 69 6c 65 20 22 44 65 64  rite 5 file "Ded
69e0: 75 63 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f  uced existence o
69f0: 66 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65  f NTDB"...    se
6a00: 74 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63  t rev  [$mybranc
6a10: 68 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64  hes(1.1.1) child
6a20: 5d 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 20  ]..    set res  
6a30: 7b 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70  {}..    set stop
6a40: 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d   [$myroot child]
6a50: 0a 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70  ...    if {$stop
6a60: 20 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65   eq ""} {...# Ge
6a70: 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20  t everything on 
6a80: 74 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69  the branch...whi
6a90: 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20  le {$rev ne ""} 
6aa0: 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20  {...    lappend 
6ab0: 72 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73  res $rev...    s
6ac0: 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69  et rev [$rev chi
6ad0: 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65  ld]...}..    } e
6ae0: 6c 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63  lse {...# Collec
6af0: 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20  t everything on 
6b00: 74 68 65 20 62 72 61 6e 63 68 20 77 68 69 63 68  the branch which
6b10: 20 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09   seems to have..
6b20: 09 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65  .# been committe
6b30: 64 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72  d before the fir
6b40: 73 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64  st primary child
6b50: 20 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74   of the...# root
6b60: 20 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74   revision....set
6b70: 20 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70   stopdate [$stop
6b80: 20 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b   date]...while {
6b90: 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09  $rev ne ""} {...
6ba0: 20 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61      if {[$rev da
6bb0: 74 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65  te] >= $stopdate
6bc0: 7d 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61  } break...    la
6bd0: 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09  ppend res $rev..
6be0: 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72  .    set rev [$r
6bf0: 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20  ev child]...}.. 
6c00: 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72     }...    retur
6c10: 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20  n $res...} else 
6c20: 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d  {..    return {}
6c30: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  ..}.    }..    #
6c40: 20 47 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49   General note: I
6c50: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
6c60: 6d 65 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20  methods we only 
6c70: 6d 6f 64 69 66 79 20 74 68 65 20 6c 69 6e 6b 73  modify the links
6c80: 0a 20 20 20 20 23 20 62 65 74 77 65 65 6e 20 72  .    # between r
6c90: 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d  evisions and sym
6ca0: 62 6f 6c 73 20 74 6f 20 72 65 73 74 72 75 63 74  bols to restruct
6cb0: 75 72 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e  ure the revision
6cc0: 0a 20 20 20 20 23 20 74 72 65 65 2e 20 57 65 20  .    # tree. We 
6cd0: 64 6f 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72  do __not__ destr
6ce0: 6f 79 20 74 68 65 20 6f 62 6a 65 63 74 73 2e 20  oy the objects. 
6cf0: 47 69 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65  Given the comple
6d00: 78 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 43  x links.    # GC
6d10: 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 61 74   is difficult at
6d20: 20 74 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 20   this level. It 
6d30: 69 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 74  is much easier t
6d40: 6f 20 64 72 6f 70 0a 20 20 20 20 23 20 65 76 65  o drop.    # eve
6d50: 72 79 74 68 69 6e 67 20 77 68 65 6e 20 77 65 20  rything when we 
6d60: 77 65 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 69  we are done. Thi
6d70: 73 20 68 61 70 70 65 6e 73 20 69 6e 20 27 64 72  s happens in 'dr
6d80: 6f 70 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 23  op', using.    #
6d90: 20 74 68 65 20 73 74 61 74 65 20 76 61 72 69 61   the state varia
6da0: 62 6c 65 20 27 6d 79 72 65 76 27 2c 20 27 6d 79  ble 'myrev', 'my
6db0: 62 72 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 27  branches', and '
6dc0: 6d 79 74 61 67 73 27 2e 20 57 68 61 74 20 77 65  mytags'. What we
6dd0: 0a 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 70  .    # have to p
6de0: 65 72 73 69 73 74 2c 20 70 65 72 66 6f 72 6d 65  ersist, performe
6df0: 64 20 62 79 20 27 70 65 72 73 69 73 74 27 2c 20  d by 'persist', 
6e00: 77 65 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a  we know will be.
6e10: 20 20 20 20 23 20 72 65 61 63 68 61 62 6c 65 20      # reachable 
6e20: 74 68 72 6f 75 67 68 20 74 68 65 20 72 65 76 69  through the revi
6e30: 73 69 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e 20  sions listed in 
6e40: 27 6d 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 68  'myroots' and th
6e50: 65 69 72 0a 20 20 20 20 23 20 63 68 69 6c 64 72  eir.    # childr
6e60: 65 6e 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a  en and symbols..
6e70: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 6a 75  .    method Adju
6e80: 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c  stNonTrunkDefaul
6e90: 74 42 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 74  tBranch {revlist
6ea0: 7d 20 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b 24  } {..set stop [$
6eb0: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23  myroot child] ;#
6ec0: 20 72 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67   rev '1.2'...log
6ed0: 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 41   write 5 file "A
6ee0: 64 6a 75 73 74 69 6e 67 20 4e 54 44 42 20 63 6f  djusting NTDB co
6ef0: 6e 74 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c  ntaining [nsp [l
6f00: 6c 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d  length $revlist]
6f10: 20 72 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20   revision]"...# 
6f20: 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65  From cvs2svn the
6f30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61   following expla
6f40: 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64  nation (with mod
6f50: 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f  ifications..# fo
6f60: 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29  r our algorithm)
6f70: 3a 0a 0a 09 23 20 41 64 6a 75 73 74 20 74 68 65  :...# Adjust the
6f80: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
6f90: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69  lt branch revisi
6fa0: 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ons found in the
6fb0: 0a 09 23 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a  ..# 'revlist'...
6fc0: 09 23 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 20  .# 'myimported' 
6fd0: 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
6fe0: 67 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  g indicating whe
6ff0: 74 68 65 72 20 74 68 69 73 20 66 69 6c 65 0a 09  ther this file..
7000: 23 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 76  # appears to hav
7010: 65 20 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c  e been imported,
7020: 20 77 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e   which also mean
7030: 73 20 74 68 61 74 0a 09 23 20 72 65 76 69 73 69  s that..# revisi
7040: 6f 6e 20 31 2e 31 20 68 61 73 20 61 20 67 65 6e  on 1.1 has a gen
7050: 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61  erated log messa
7060: 67 65 20 74 68 61 74 20 6e 65 65 64 20 6e 6f 74  ge that need not
7070: 20 62 65 0a 09 23 20 70 72 65 73 65 72 76 65 64   be..# preserved
7080: 2e 20 20 27 72 65 76 6c 69 73 74 27 20 69 73 20  .  'revlist' is 
7090: 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74  a list of object
70a0: 20 72 65 66 65 72 65 6e 63 65 73 20 66 6f 72 20   references for 
70b0: 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73  the..# revisions
70c0: 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   that have been 
70d0: 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65  determined to be
70e0: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
70f0: 6c 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76  lt..# branch rev
7100: 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65  isions....# Note
7110: 20 74 68 61 74 20 74 68 65 20 66 69 72 73 74 20   that the first 
7120: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20  revision on the 
7130: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69  default branch i
7140: 73 0a 09 23 20 68 61 6e 64 6c 65 64 20 73 74 72  s..# handled str
7150: 61 6e 67 65 6c 79 20 62 79 20 43 56 53 2e 20 20  angely by CVS.  
7160: 49 66 20 61 20 66 69 6c 65 20 69 73 20 69 6d 70  If a file is imp
7170: 6f 72 74 65 64 20 28 61 73 20 6f 70 70 6f 73 65  orted (as oppose
7180: 64 0a 09 23 20 74 6f 20 62 65 69 6e 67 20 61 64  d..# to being ad
7190: 64 65 64 29 2c 20 43 56 53 20 63 72 65 61 74 65  ded), CVS create
71a0: 73 20 61 20 31 2e 31 20 72 65 76 69 73 69 6f 6e  s a 1.1 revision
71b0: 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 61  , then creates a
71c0: 0a 09 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  ..# vendor branc
71d0: 68 20 31 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e  h 1.1.1 based on
71e0: 20 31 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 74   1.1, then creat
71f0: 65 73 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20  es a 1.1.1.1..# 
7200: 72 65 76 69 73 69 6f 6e 20 74 68 61 74 20 69 73  revision that is
7210: 20 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 68   identical to th
7220: 65 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 28  e 1.1 revision (
7230: 69 2e 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c  i.e., its..# del
7240: 74 61 74 65 78 74 20 69 73 20 65 6d 70 74 79 29  tatext is empty)
7250: 2e 20 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 61  .  The log messa
7260: 67 65 20 74 68 61 74 20 74 68 65 20 75 73 65 72  ge that the user
7270: 20 74 79 70 65 64 0a 09 23 20 77 68 65 6e 20 69   typed..# when i
7280: 6d 70 6f 72 74 69 6e 67 20 69 73 20 73 74 6f 72  mporting is stor
7290: 65 64 20 77 69 74 68 20 74 68 65 20 31 2e 31 2e  ed with the 1.1.
72a0: 31 2e 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 54  1.1 revision.  T
72b0: 68 65 20 31 2e 31 0a 09 23 20 72 65 76 69 73 69  he 1.1..# revisi
72c0: 6f 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69  on always contai
72d0: 6e 73 20 61 20 73 74 61 6e 64 61 72 64 2c 20 67  ns a standard, g
72e0: 65 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73  enerated log mes
72f0: 73 61 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 61  sage,..# 'Initia
7300: 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a  l revision\n'...
7310: 09 23 20 57 68 65 6e 20 77 65 20 64 65 74 65 63  .# When we detec
7320: 74 20 61 20 73 74 72 61 69 67 68 74 66 6f 72 77  t a straightforw
7330: 61 72 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20  ard import like 
7340: 74 68 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 23  this, we want..#
7350: 20 74 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 79   to handle it by
7360: 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 31 2e   deleting the 1.
7370: 31 20 72 65 76 69 73 69 6f 6e 20 28 77 68 69 63  1 revision (whic
7380: 68 20 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e  h doesn't..# con
7390: 74 61 69 6e 20 61 6e 79 20 75 73 65 66 75 6c 20  tain any useful 
73a0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64  information) and
73b0: 20 6d 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20   making 1.1.1.1 
73c0: 69 6e 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70  into an..# indep
73d0: 65 6e 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74  endent root in t
73e0: 68 65 20 66 69 6c 65 27 73 20 64 65 70 65 6e 64  he file's depend
73f0: 65 6e 63 79 20 74 72 65 65 2e 20 20 49 6e 20 53  ency tree.  In S
7400: 56 4e 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77  VN,..# 1.1.1.1 w
7410: 69 6c 6c 20 62 65 20 61 64 64 65 64 20 64 69 72  ill be added dir
7420: 65 63 74 6c 79 20 74 6f 20 74 68 65 20 76 65 6e  ectly to the ven
7430: 64 6f 72 20 62 72 61 6e 63 68 20 77 69 74 68 20  dor branch with 
7440: 69 74 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 63  its..# initial c
7450: 6f 6e 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e  ontent.  Then in
7460: 20 61 20 73 70 65 63 69 61 6c 20 27 70 6f 73 74   a special 'post
7470: 2d 63 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23  -commit', the..#
7480: 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f   1.1.1.1 revisio
7490: 6e 20 69 73 20 63 6f 70 69 65 64 20 62 61 63 6b  n is copied back
74a0: 20 74 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49   to trunk....# I
74b0: 66 20 74 68 65 20 75 73 65 72 20 69 6d 70 6f 72  f the user impor
74c0: 74 73 20 61 67 61 69 6e 20 74 6f 20 74 68 65 20  ts again to the 
74d0: 73 61 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 6e  same vendor bran
74e0: 63 68 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 20  ch, then CVS..# 
74f0: 63 72 65 61 74 65 73 20 72 65 76 69 73 69 6f 6e  creates revision
7500: 73 20 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31  s 1.1.1.2, 1.1.1
7510: 2e 33 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 20  .3, etc. on the 
7520: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09  vendor branch,..
7530: 23 20 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e  # *without* coun
7540: 74 65 72 70 61 72 74 73 20 69 6e 20 74 72 75 6e  terparts in trun
7550: 6b 20 28 65 76 65 6e 20 74 68 6f 75 67 68 20 74  k (even though t
7560: 68 65 73 65 20 72 65 76 69 73 69 6f 6e 73 0a 09  hese revisions..
7570: 23 20 65 66 66 65 63 74 69 76 65 6c 79 20 70 6c  # effectively pl
7580: 61 79 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 74  ay the role of t
7590: 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e  runk revisions).
75a0: 20 20 53 6f 20 61 66 74 65 72 20 77 65 20 61 64    So after we ad
75b0: 64 0a 09 23 20 73 75 63 68 20 72 65 76 69 73 69  d..# such revisi
75c0: 6f 6e 73 20 74 6f 20 74 68 65 20 76 65 6e 64 6f  ons to the vendo
75d0: 72 20 62 72 61 6e 63 68 2c 20 77 65 20 61 6c 73  r branch, we als
75e0: 6f 20 63 6f 70 79 20 74 68 65 6d 20 62 61 63 6b  o copy them back
75f0: 20 74 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20   to..# trunk in 
7600: 70 6f 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09  post-commits....
7610: 23 20 57 65 20 6d 61 72 6b 20 74 68 65 20 72 65  # We mark the re
7620: 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e  visions found in
7630: 20 27 72 65 76 6c 69 73 74 27 20 61 73 20 64 65   'revlist' as de
7640: 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20  fault branch..# 
7650: 72 65 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f  revisions.  Also
7660: 2c 20 69 66 20 74 68 65 20 72 6f 6f 74 20 72 65  , if the root re
7670: 76 69 73 69 6f 6e 20 68 61 73 20 61 20 70 72 69  vision has a pri
7680: 6d 61 72 79 20 63 68 69 6c 64 0a 09 23 20 77 65  mary child..# we
7690: 20 73 65 74 20 74 68 61 74 20 72 65 76 69 73 69   set that revisi
76a0: 6f 6e 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20  on to depend on 
76b0: 74 68 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75  the last non-tru
76c0: 6e 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72  nk default..# br
76d0: 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 61 6e  anch revision an
76e0: 64 20 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 73  d possibly adjus
76f0: 74 20 69 74 73 20 74 79 70 65 20 61 63 63 6f 72  t its type accor
7700: 64 69 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69  dingly....set fi
7710: 72 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76  rst [lindex $rev
7720: 6c 69 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72  list 0]...log wr
7730: 69 74 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 66  ite 6 file "<[$f
7740: 69 72 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78  irst revnr]> [ex
7750: 70 72 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20  pr {$myimported 
7760: 3f 20 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 22  ? "imported" : "
7770: 6e 6f 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c  not imported"}],
7780: 20 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 69   [$first operati
7790: 6f 6e 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69  on], [expr {[$fi
77a0: 72 73 74 20 68 61 73 74 65 78 74 5d 20 3f 20 22  rst hastext] ? "
77b0: 68 61 73 20 74 65 78 74 22 20 3a 20 22 6e 6f 20  has text" : "no 
77c0: 74 65 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24  text"}]"...if {$
77d0: 6d 79 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 20  myimported &&.. 
77e0: 20 20 20 5b 24 66 69 72 73 74 20 72 65 76 6e 72     [$first revnr
77f0: 5d 20 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 26  ] eq "1.1.1.1" &
7800: 26 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20 6f  &..    [$first o
7810: 70 65 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 68  peration] eq "ch
7820: 61 6e 67 65 22 20 26 26 0a 09 20 20 20 20 21 5b  ange" &&..    ![
7830: 24 66 69 72 73 74 20 68 61 73 74 65 78 74 5d 7d  $first hastext]}
7840: 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76   {...    set rev
7850: 31 31 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e  11 [$first paren
7860: 74 5d 20 3b 20 23 20 41 73 73 65 72 74 3a 20 53  t] ; # Assert: S
7870: 68 6f 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e  hould be myroot.
7880: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
7890: 33 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67  3 file "Removing
78a0: 20 69 72 72 65 6c 65 76 61 6e 74 20 72 65 76 69   irrelevant revi
78b0: 73 69 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 76  sion [$rev11 rev
78c0: 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 74  nr]"...    # Cut
78d0: 20 6f 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 72   out the old myr
78e0: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09  oot revision....
78f0: 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f      ldelete myro
7900: 6f 74 73 20 24 72 65 76 31 31 20 3b 20 23 20 4e  ots $rev11 ; # N
7910: 6f 74 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f  ot a root any lo
7920: 6e 67 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 72  nger....    $fir
7930: 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74  st cutfromparent
7940: 20 3b 20 23 20 53 65 76 65 72 20 72 65 76 69 73   ; # Sever revis
7950: 69 6f 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 20  ion from parent 
7960: 72 65 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69  revision...    i
7970: 66 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20  f {$stop ne ""} 
7980: 7b 0a 09 09 24 73 74 6f 70 20 63 75 74 66 72 6f  {...$stop cutfro
7990: 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e  mparent...lappen
79a0: 64 20 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 20  d myroots $stop 
79b0: 3b 20 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66  ; # New root, af
79c0: 74 65 72 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  ter vendor branc
79d0: 68 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23  h..    }...    #
79e0: 20 43 75 74 20 6f 75 74 20 74 68 65 20 76 65 6e   Cut out the ven
79f0: 64 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f  dor branch symbo
7a00: 6c 0a 0a 09 20 20 20 20 73 65 74 20 76 65 6e 64  l...    set vend
7a10: 6f 72 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e  or [$first paren
7a20: 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 6e  tbranch]..    in
7a30: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b  tegrity assert {
7a40: 24 76 65 6e 64 6f 72 20 6e 65 20 22 22 7d 20 7b  $vendor ne ""} {
7a50: 46 69 72 73 74 20 4e 54 44 42 20 72 65 76 69 73  First NTDB revis
7a60: 69 6f 6e 20 68 61 73 20 6e 6f 20 62 72 61 6e 63  ion has no branc
7a70: 68 7d 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65  h}..    if {[$ve
7a80: 6e 64 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20  ndor parent] eq 
7a90: 24 72 65 76 31 31 7d 20 7b 0a 09 09 24 72 65 76  $rev11} {...$rev
7aa0: 31 31 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20  11 removebranch 
7ab0: 20 20 20 20 20 20 20 24 76 65 6e 64 6f 72 0a 09         $vendor..
7ac0: 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 63 68  .$rev11 removech
7ad0: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 66 69 72  ildonbranch $fir
7ae0: 73 74 0a 09 09 24 76 65 6e 64 6f 72 20 63 75 74  st...$vendor cut
7af0: 62 72 61 6e 63 68 70 61 72 65 6e 74 20 20 20 20  branchparent    
7b00: 3b 23 20 62 70 20 3d 20 72 65 76 31 31 2c 20 61  ;# bp = rev11, a
7b10: 62 6f 75 74 20 74 6f 20 62 65 20 67 6f 6e 65 0a  bout to be gone.
7b20: 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d  ..$first cutfrom
7b30: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 3b 23 20  parentbranch ;# 
7b40: 70 62 20 3d 20 76 65 6e 64 6f 72 2c 20 74 6f 20  pb = vendor, to 
7b50: 62 65 20 61 20 64 65 74 61 63 68 65 64 20 4c 4f  be a detached LO
7b60: 44 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f  D...lappend myro
7b70: 6f 74 73 20 24 66 69 72 73 74 0a 09 20 20 20 20  ots $first..    
7b80: 7d 0a 0a 09 20 20 20 20 23 20 43 68 61 6e 67 65  }...    # Change
7b90: 20 74 68 65 20 74 79 70 65 20 6f 66 20 66 69 72   the type of fir
7ba0: 73 74 20 28 74 79 70 69 63 61 6c 6c 79 20 66 72  st (typically fr
7bb0: 6f 6d 20 43 68 61 6e 67 65 20 74 6f 20 41 64 64  om Change to Add
7bc0: 29 3a 0a 09 20 20 20 20 24 66 69 72 73 74 20 72  ):..    $first r
7bd0: 65 74 79 70 65 20 61 64 64 0a 0a 09 20 20 20 20  etype add...    
7be0: 23 20 4d 6f 76 65 20 61 6e 79 20 74 61 67 73 20  # Move any tags 
7bf0: 61 6e 64 20 62 72 61 6e 63 68 65 73 20 66 72 6f  and branches fro
7c00: 6d 20 74 68 65 20 6f 6c 64 20 74 6f 20 74 68 65  m the old to the
7c10: 20 6e 65 77 20 72 6f 6f 74 2e 0a 09 20 20 20 20   new root...    
7c20: 24 72 65 76 31 31 20 6d 6f 76 65 73 79 6d 62 6f  $rev11 movesymbo
7c30: 6c 73 74 6f 20 24 66 69 72 73 74 0a 09 7d 0a 0a  lsto $first..}..
7c40: 09 23 20 4d 61 72 6b 20 61 6c 6c 20 74 68 65 20  .# Mark all the 
7c50: 73 70 65 63 69 61 6c 20 72 65 76 69 73 69 6f 6e  special revision
7c60: 73 20 61 73 20 73 75 63 68 0a 09 66 6f 72 65 61  s as such..forea
7c70: 63 68 20 72 65 76 20 24 72 65 76 6c 69 73 74 20  ch rev $revlist 
7c80: 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  {..    log write
7c90: 20 33 20 66 69 6c 65 20 22 52 65 76 69 73 69 6f   3 file "Revisio
7ca0: 6e 20 6f 6e 20 64 65 66 61 75 6c 74 20 62 72 61  n on default bra
7cb0: 6e 63 68 3a 20 5b 24 72 65 76 20 72 65 76 6e 72  nch: [$rev revnr
7cc0: 5d 22 0a 09 20 20 20 20 24 72 65 76 20 73 65 74  ]"..    $rev set
7cd0: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20  ondefaultbranch 
7ce0: 31 0a 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f 70  1..}...if {$stop
7cf0: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23   ne ""} {..    #
7d00: 20 52 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c 6f   Revision 1.2 lo
7d10: 67 69 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20  gically follows 
7d20: 74 68 65 20 69 6d 70 6f 72 74 65 64 20 72 65 76  the imported rev
7d30: 69 73 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20 6e  isions,..    # n
7d40: 6f 74 20 31 2e 31 2e 20 20 41 63 63 6f 72 64 69  ot 1.1.  Accordi
7d50: 6e 67 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69 74  ngly, connect it
7d60: 20 74 6f 20 74 68 65 20 6c 61 73 74 20 4e 54 44   to the last NTD
7d70: 42 52 20 61 6e 64 0a 09 20 20 20 20 23 20 70 6f  BR and..    # po
7d80: 73 73 69 62 6c 79 20 63 68 61 6e 67 65 20 69 74  ssibly change it
7d90: 73 20 74 79 70 65 2e 0a 0a 09 20 20 20 20 73 65  s type....    se
7da0: 74 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20 24  t last [lindex $
7db0: 72 65 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20 20  revlist end]..  
7dc0: 20 20 24 73 74 6f 70 20 73 65 74 64 65 66 61 75    $stop setdefau
7dd0: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 24  ltbranchparent $
7de0: 6c 61 73 74 20 3b 20 23 20 52 65 74 79 70 65 73  last ; # Retypes
7df0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f   the revision to
7e00: 6f 2e 0a 09 20 20 20 20 24 6c 61 73 74 20 73 65  o...    $last se
7e10: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68  tdefaultbranchch
7e20: 69 6c 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09 72  ild  $stop..}..r
7e30: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
7e40: 20 6d 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f 44   method CheckLOD
7e50: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20  s {} {..foreach 
7e60: 7b 5f 20 62 72 61 6e 63 68 7d 20 20 5b 61 72 72  {_ branch}  [arr
7e70: 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65  ay get mybranche
7e80: 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 63 68 65  s] { $branch che
7e90: 63 6b 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63 68  cklod }..foreach
7ea0: 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72   {_ taglist} [ar
7eb0: 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20  ray get mytags] 
7ec0: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74  {..    foreach t
7ed0: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74  ag $taglist { $t
7ee0: 61 67 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d  ag checklod }..}
7ef0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
7f00: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76      method Remov
7f10: 65 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 74  eIrrelevantDelet
7f20: 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f  ions {} {..# Fro
7f30: 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 61 20  m cvs2svn: If a 
7f40: 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e  file is added on
7f50: 20 61 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20   a branch, then 
7f60: 61 20 74 72 75 6e 6b 0a 09 23 20 72 65 76 69 73  a trunk..# revis
7f70: 69 6f 6e 20 69 73 20 61 64 64 65 64 20 61 74 20  ion is added at 
7f80: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 69 6e  the same time in
7f90: 20 74 68 65 20 27 44 65 61 64 27 20 73 74 61 74   the 'Dead' stat
7fa0: 65 2e 0a 09 23 20 54 68 69 73 20 72 65 76 69 73  e...# This revis
7fb0: 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61  ion doesn't do a
7fc0: 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 2c 20  nything useful, 
7fd0: 73 6f 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a 09  so delete it....
7fe0: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79  foreach root $my
7ff0: 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 69 66 20  roots {..    if 
8000: 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64  {[$root isneeded
8010: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20  ]} continue..   
8020: 20 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c   log write 2 fil
8030: 65 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e 65  e "Removing unne
8040: 63 65 73 73 61 72 79 20 64 65 61 64 20 72 65 76  cessary dead rev
8050: 69 73 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65 76  ision [$root rev
8060: 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 52 65 6d  nr]"...    # Rem
8070: 6f 76 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61 6b  ove as root, mak
8080: 65 20 69 74 73 20 63 68 69 6c 64 20 6e 65 77 20  e its child new 
8090: 72 6f 6f 74 20 61 66 74 65 72 0a 09 20 20 20 20  root after..    
80a0: 23 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20  # disconnecting 
80b0: 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69  it from the revi
80c0: 73 69 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67 20  sion just going 
80d0: 61 77 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65 6c  away....    ldel
80e0: 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f  ete myroots $roo
80f0: 74 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f  t..    if {[$roo
8100: 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a 09  t haschild]} {..
8110: 09 73 65 74 20 63 68 69 6c 64 20 5b 24 72 6f 6f  .set child [$roo
8120: 74 20 63 68 69 6c 64 5d 0a 09 09 24 63 68 69 6c  t child]...$chil
8130: 64 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a  d cutfromparent.
8140: 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74  ..lappend myroot
8150: 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a  s $child..    }.
8160: 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 20  ..    # Cut out 
8170: 74 68 65 20 62 72 61 6e 63 68 65 73 20 73 70 61  the branches spa
8180: 77 6e 65 64 20 62 79 20 74 68 65 20 72 65 76 69  wned by the revi
8190: 73 69 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20 20  sion to be..    
81a0: 23 20 64 65 6c 65 74 65 64 2e 20 49 66 20 74 68  # deleted. If th
81b0: 65 20 62 72 61 6e 63 68 20 68 61 73 20 72 65 76  e branch has rev
81c0: 69 73 69 6f 6e 73 20 74 68 65 79 20 73 68 6f 75  isions they shou
81d0: 6c 64 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20  ld already..    
81e0: 23 20 75 73 65 20 6f 70 65 72 61 74 69 6f 6e 20  # use operation 
81f0: 27 61 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20 74  'add', no need t
8200: 6f 20 63 68 61 6e 67 65 20 74 68 61 74 2e 20 54  o change that. T
8210: 68 65 20 66 69 72 73 74 0a 09 20 20 20 20 23 20  he first..    # 
8220: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63 68  revision on each
8230: 20 62 72 61 6e 63 68 20 62 65 63 6f 6d 65 73 20   branch becomes 
8240: 61 20 6e 65 77 20 61 6e 64 20 64 69 73 63 6f 6e  a new and discon
8250: 6e 65 63 74 65 64 0a 09 20 20 20 20 23 20 72 6f  nected..    # ro
8260: 6f 74 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61 63  ot....    foreac
8270: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20  h branch [$root 
8280: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 24 62  branches] {...$b
8290: 72 61 6e 63 68 20 63 75 74 62 72 61 6e 63 68 70  ranch cutbranchp
82a0: 61 72 65 6e 74 0a 09 09 69 66 20 7b 21 5b 24 62  arent...if {![$b
82b0: 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d  ranch haschild]}
82c0: 20 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20   continue...set 
82d0: 66 69 72 73 74 20 5b 24 62 72 61 6e 63 68 20 63  first [$branch c
82e0: 68 69 6c 64 5d 0a 09 09 24 66 69 72 73 74 20 63  hild]...$first c
82f0: 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c  utfromparent...l
8300: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24  append myroots $
8310: 66 69 72 73 74 0a 09 20 20 20 20 7d 0a 09 20 20  first..    }..  
8320: 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c    $root removeal
8330: 6c 62 72 61 6e 63 68 65 73 0a 0a 09 20 20 20 20  lbranches...    
8340: 23 20 54 61 67 67 69 6e 67 20 61 20 64 65 61 64  # Tagging a dead
8350: 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27   revision doesn'
8360: 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73  t do anything, s
8370: 6f 20 72 65 6d 6f 76 65 0a 09 20 20 20 20 23 20  o remove..    # 
8380: 61 6e 79 20 74 61 67 73 20 74 68 61 74 20 77 65  any tags that we
8390: 72 65 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09  re set on it....
83a0: 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65      $root remove
83b0: 61 6c 6c 74 61 67 73 0a 0a 09 20 20 20 20 23 20  alltags...    # 
83c0: 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61  This can only ha
83d0: 70 70 65 6e 20 6f 6e 63 65 20 70 65 72 20 66 69  ppen once per fi
83e0: 6c 65 2c 20 61 6e 64 20 77 65 20 6d 69 67 68 74  le, and we might
83f0: 20 68 61 76 65 0a 09 20 20 20 20 23 20 6a 75 73   have..    # jus
8400: 74 20 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74  t changed myroot
8410: 73 2c 20 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f  s, so end the lo
8420: 6f 70 0a 09 20 20 20 20 62 72 65 61 6b 0a 09 7d  op..    break..}
8430: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
8440: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76      method Remov
8450: 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65  eInitialBranchDe
8460: 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20  letions {} {..# 
8470: 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66  From cvs2svn: If
8480: 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69 73   the first revis
8490: 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20  ion on a branch 
84a0: 69 73 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73  is an..# unneces
84b0: 73 61 72 79 20 64 65 6c 65 74 65 2c 20 72 65 6d  sary delete, rem
84c0: 6f 76 65 20 69 74 2e 0a 09 23 0a 09 23 20 49 66  ove it...#..# If
84d0: 20 61 20 66 69 6c 65 20 69 73 20 61 64 64 65 64   a file is added
84e0: 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 28 77 68   on a branch (wh
84f0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20  ether or not it 
8500: 61 6c 72 65 61 64 79 0a 09 23 20 65 78 69 73 74  already..# exist
8510: 65 64 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68  ed on trunk), th
8520: 65 6e 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20  en new versions 
8530: 6f 66 20 43 56 53 20 61 64 64 20 61 20 66 69 72  of CVS add a fir
8540: 73 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76  st..# branch rev
8550: 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 27 64 65  ision in the 'de
8560: 61 64 27 20 73 74 61 74 65 20 28 74 6f 20 69 6e  ad' state (to in
8570: 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 0a  dicate that the.
8580: 09 23 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20  .# file did not 
8590: 65 78 69 73 74 20 6f 6e 20 74 68 65 20 62 72 61  exist on the bra
85a0: 6e 63 68 20 77 68 65 6e 20 74 68 65 20 62 72 61  nch when the bra
85b0: 6e 63 68 20 77 61 73 0a 09 23 20 63 72 65 61 74  nch was..# creat
85c0: 65 64 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ed) followed by 
85d0: 74 68 65 20 73 65 63 6f 6e 64 20 62 72 61 6e 63  the second branc
85e0: 68 20 72 65 76 69 73 69 6f 6e 2c 20 77 68 69 63  h revision, whic
85f0: 68 20 69 73 20 61 6e 0a 09 23 20 61 64 64 2e 20  h is an..# add. 
8600: 20 57 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74   When we encount
8610: 65 72 20 74 68 69 73 20 73 69 74 75 61 74 69 6f  er this situatio
8620: 6e 2c 20 77 65 20 73 65 76 65 72 20 74 68 65 20  n, we sever the 
8630: 62 72 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74  branch..# from t
8640: 72 75 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65 20  runk and delete 
8650: 74 68 65 20 66 69 72 73 74 20 62 72 61 6e 63 68  the first branch
8660: 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41   revision....# A
8670: 74 20 74 68 69 73 20 70 6f 69 6e 74 20 77 65 20  t this point we 
8680: 6d 61 79 20 68 61 76 65 20 61 6c 72 65 61 64 79  may have already
8690: 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20   multiple roots 
86a0: 69 6e 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77  in myroots,..# w
86b0: 65 20 68 61 76 65 20 74 6f 20 70 72 6f 63 65 73  e have to proces
86c0: 73 20 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f  s them all....fo
86d0: 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c  reach root [$sel
86e0: 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70  f LinesOfDevelop
86f0: 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20  ment] {..    if 
8700: 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64  {[$root isneeded
8710: 62 72 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74  branchdel]} cont
8720: 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72  inue..    log wr
8730: 69 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f  ite 2 file "Remo
8740: 76 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79  ving unnecessary
8750: 20 69 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20   initial branch 
8760: 64 65 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72 65  delete [$root re
8770: 76 6e 72 5d 22 0a 0a 09 20 20 20 20 73 65 74 20  vnr]"...    set 
8780: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61  branch [$root pa
8790: 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20  rentbranch]..   
87a0: 20 73 65 74 20 70 61 72 65 6e 74 20 5b 24 72 6f   set parent [$ro
87b0: 6f 74 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20  ot parent]..    
87c0: 73 65 74 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f  set child  [$roo
87d0: 74 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c  t child]...    l
87e0: 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24  delete myroots $
87f0: 72 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e  root..    lappen
8800: 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64  d myroots $child
8810: 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 63  ...    $branch c
8820: 75 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09  utbranchparent..
8830: 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 63      $branch cutc
8840: 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64  hild..    $child
8850: 20 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a    cutfromparent.
8860: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65  ..    $branch se
8870: 74 63 68 69 6c 64 20 20 20 20 20 20 20 20 24 63  tchild        $c
8880: 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64  hild..    $child
8890: 20 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63    setparentbranc
88a0: 68 20 24 62 72 61 6e 63 68 0a 0a 09 20 20 20 20  h $branch...    
88b0: 24 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72  $parent removebr
88c0: 61 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61  anch        $bra
88d0: 6e 63 68 0a 09 20 20 20 20 24 70 61 72 65 6e 74  nch..    $parent
88e0: 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72   removechildonbr
88f0: 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09 72  anch $root..}..r
8900: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
8910: 20 6d 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66 44   method LinesOfD
8920: 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a  evelopment {} {.
8930: 09 23 20 44 65 74 65 72 6d 69 6e 65 20 61 6c 6c  .# Determine all
8940: 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f   lines of develo
8950: 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 66 69  pment for the fi
8960: 6c 65 2e 20 54 68 69 73 20 61 72 65 0a 09 23 20  le. This are..# 
8970: 74 68 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c  the known roots,
8980: 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f 66   and the root of
8990: 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 66 6f   all branches fo
89a0: 75 6e 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c 69  und on the..# li
89b0: 6e 65 20 6f 66 20 70 72 69 6d 61 72 79 20 63 68  ne of primary ch
89c0: 69 6c 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f  ildren....set lo
89d0: 64 72 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65 61  droots {}..forea
89e0: 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73  ch root $myroots
89f0: 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64   {..    $self Ad
8a00: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66  dBranchedLinesOf
8a10: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72  Development lodr
8a20: 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20  oots $root..    
8a30: 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73  lappend lodroots
8a40: 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72   $root..}..retur
8a50: 6e 20 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20 20  n $lodroots.    
8a60: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64  }..    method Ad
8a70: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66  dBranchedLinesOf
8a80: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20  Development {lv 
8a90: 72 6f 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20 31  root} {..upvar 1
8aa0: 20 24 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09 77   $lv lodroots..w
8ab0: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22  hile {$root ne "
8ac0: 22 7d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63  "} {..    foreac
8ad0: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20  h branch [$root 
8ae0: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 66  branches] {...if
8af0: 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63   {![$branch hasc
8b00: 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  hild]} continue.
8b10: 09 09 73 65 74 20 63 68 69 6c 64 20 5b 24 62 72  ..set child [$br
8b20: 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 23 20  anch child]...# 
8b30: 52 65 63 75 72 73 65 20 69 6e 74 6f 20 74 68 65  Recurse into the
8b40: 20 62 72 61 6e 63 68 20 66 6f 72 20 64 65 65 70   branch for deep
8b50: 65 72 20 62 72 61 6e 63 68 65 73 2e 0a 09 09 24  er branches....$
8b60: 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64  self AddBranched
8b70: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
8b80: 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69  nt lodroots $chi
8b90: 6c 64 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f 64  ld...lappend lod
8ba0: 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 20  roots $child..  
8bb0: 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f    }..    set roo
8bc0: 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  t [$root child].
8bd0: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
8be0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63  ..    method Exc
8bf0: 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f  ludeNonTrunkInfo
8c00: 72 6d 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20  rmation {} {..# 
8c10: 52 65 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74  Remove all non-t
8c20: 72 75 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20 72  runk branches, r
8c30: 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74 61  evisions, and ta
8c40: 67 73 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65 65  gs. We do..# kee
8c50: 70 20 74 68 65 20 74 61 67 73 20 77 68 69 63 68  p the tags which
8c60: 20 61 72 65 20 6f 6e 20 74 68 65 20 74 72 75 6e   are on the trun
8c70: 6b 2e 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f 6f  k....set ntdbroo
8c80: 74 20 22 22 0a 09 66 6f 72 65 61 63 68 20 72 6f  t ""..foreach ro
8c90: 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f  ot [$self LinesO
8ca0: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a  fDevelopment] {.
8cb0: 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 48 65 72  .    # Note: Her
8cc0: 65 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  e the order of t
8cd0: 68 65 20 72 6f 6f 74 73 20 69 73 20 69 6d 70 6f  he roots is impo
8ce0: 72 74 61 6e 74 2c 0a 09 20 20 20 20 23 20 69 2e  rtant,..    # i.
8cf0: 65 2e 20 74 68 61 74 20 77 65 20 67 65 74 20 74  e. that we get t
8d00: 68 65 6d 20 69 6e 20 64 65 70 74 68 20 66 69 72  hem in depth fir
8d10: 73 74 20 6f 72 64 65 72 2e 20 54 68 69 73 20 65  st order. This e
8d20: 6e 73 75 72 65 73 0a 09 20 20 20 20 23 20 74 68  nsures..    # th
8d30: 61 74 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f  at the removal o
8d40: 66 20 61 20 62 72 61 6e 63 68 20 68 61 70 70 65  f a branch happe
8d50: 6e 73 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68  ns only after th
8d60: 65 0a 09 20 20 20 20 23 20 62 72 61 6e 63 68 65  e..    # branche
8d70: 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69  s spawned from i
8d80: 74 20 77 65 72 65 20 72 65 6d 6f 76 65 64 2e 20  t were removed. 
8d90: 4f 74 68 65 72 77 69 73 65 20 74 68 65 0a 09 20  Otherwise the.. 
8da0: 20 20 20 23 20 73 79 73 74 65 6d 20 6d 69 67 68     # system migh
8db0: 74 20 74 72 79 20 74 6f 20 61 63 63 65 73 73 20  t try to access 
8dc0: 64 65 6c 65 74 65 64 20 6f 62 6a 65 63 74 73 2e  deleted objects.
8dd0: 0a 0a 09 20 20 20 20 23 20 44 6f 20 6e 6f 74 20  ...    # Do not 
8de0: 65 78 63 6c 75 64 65 20 74 68 65 20 74 72 75 6e  exclude the trun
8df0: 6b 2e 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24 72  k...    if {[[$r
8e00: 6f 6f 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e 6b  oot lod] istrunk
8e10: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20  ]} continue..   
8e20: 20 24 73 65 6c 66 20 45 78 63 6c 75 64 65 42 72   $self ExcludeBr
8e30: 61 6e 63 68 20 24 72 6f 6f 74 20 6e 74 64 62 72  anch $root ntdbr
8e40: 6f 6f 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e 74  oot..}...if {$nt
8e50: 64 62 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a  dbroot ne ""} {.
8e60: 09 20 20 20 20 24 73 65 6c 66 20 47 72 61 66 74  .    $self Graft
8e70: 4e 54 44 42 32 54 72 75 6e 6b 20 24 6e 74 64 62  NTDB2Trunk $ntdb
8e80: 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  root..}..return.
8e90: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
8ea0: 64 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20  d ExcludeBranch 
8eb0: 7b 72 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20 45  {root nv} {..# E
8ec0: 78 63 6c 75 64 65 20 74 68 65 20 62 72 61 6e 63  xclude the branc
8ed0: 68 2f 6c 6f 64 20 73 74 61 72 74 69 6e 67 20 61  h/lod starting a
8ee0: 74 20 72 6f 6f 74 2c 20 61 20 72 65 76 69 73 69  t root, a revisi
8ef0: 6f 6e 2e 0a 09 23 0a 09 23 20 49 66 20 74 68 65  on...#..# If the
8f00: 20 4c 4f 44 20 73 74 61 72 74 73 20 77 69 74 68   LOD starts with
8f10: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
8f20: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69  lt branch revisi
8f30: 6f 6e 73 2c 0a 09 23 20 77 65 20 6c 65 61 76 65  ons,..# we leave
8f40: 20 74 68 65 6d 20 69 6e 20 70 6c 61 63 65 20 61   them in place a
8f50: 6e 64 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 65  nd do not delete
8f60: 20 74 68 65 20 62 72 61 6e 63 68 2e 20 49 6e 20   the branch. In 
8f70: 74 68 61 74 0a 09 23 20 63 61 73 65 20 74 68 65  that..# case the
8f80: 20 63 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 68   command sets th
8f90: 65 20 76 61 72 69 61 62 6c 65 20 69 6e 20 4e 56  e variable in NV
8fa0: 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 0a   so that we can.
8fb0: 09 23 20 6c 61 74 65 72 20 72 65 77 6f 72 6b 20  .# later rework 
8fc0: 74 68 65 73 65 20 72 65 76 69 73 6f 6e 73 20 74  these revisons t
8fd0: 6f 20 62 65 20 70 75 72 65 6c 79 20 74 72 75 6e  o be purely trun
8fe0: 6b 2e 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 20  k....if {[$root 
8ff0: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63  isondefaultbranc
9000: 68 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e  h]} {..    # Han
9010: 64 6c 69 6e 67 20 61 20 4e 54 44 42 2e 20 54 68  dling a NTDB. Th
9020: 69 73 20 62 72 61 6e 63 68 20 6d 61 79 20 63 6f  is branch may co
9030: 6e 73 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79 20  nsists not only 
9040: 6f 66 0a 09 20 20 20 20 23 20 4e 54 44 42 20 72  of..    # NTDB r
9050: 65 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 61 6c  evisions, but al
9060: 73 6f 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42  so some non-NTDB
9070: 2e 20 54 68 65 20 6c 61 74 74 65 72 20 61 72 65  . The latter are
9080: 0a 09 20 20 20 20 23 20 74 72 75 6c 79 20 6f 6e  ..    # truly on
9090: 20 61 20 62 72 61 6e 63 68 20 61 6e 64 20 68 61   a branch and ha
90a0: 76 65 20 74 6f 20 62 65 20 65 78 63 6c 75 64 65  ve to be exclude
90b0: 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  d. The following
90c0: 0a 09 20 20 20 20 23 20 6c 6f 6f 70 20 64 65 74  ..    # loop det
90d0: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 72 65  ermines if there
90e0: 20 61 72 65 20 73 75 63 68 20 72 65 76 69 73 69   are such revisi
90f0: 6f 6e 73 2e 0a 0a 09 20 20 20 20 75 70 76 61 72  ons....    upvar
9100: 20 31 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74 0a   1 $nv ntdbroot.
9110: 09 20 20 20 20 73 65 74 20 6e 74 64 62 72 6f 6f  .    set ntdbroo
9120: 74 20 24 72 6f 6f 74 0a 09 20 20 20 20 24 72 6f  t $root..    $ro
9130: 6f 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74  ot cutfromparent
9140: 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 73 65 74  branch...    set
9150: 20 72 65 76 20 24 72 6f 6f 74 0a 09 20 20 20 20   rev $root..    
9160: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22  while {$rev ne "
9170: 22 7d 20 7b 0a 09 09 24 72 65 76 20 72 65 6d 6f  "} {...$rev remo
9180: 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09  veallbranches...
9190: 23 20 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a  # See note [x]..
91a0: 0a 09 09 69 66 20 7b 5b 24 72 65 76 20 69 73 6f  ...if {[$rev iso
91b0: 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d  ndefaultbranch]}
91c0: 20 7b 0a 09 09 20 20 20 20 73 65 74 20 72 65 76   {...    set rev
91d0: 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09   [$rev child]...
91e0: 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 62  } else {...    b
91f0: 72 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a  reak...}..    }.
9200: 0a 09 20 20 20 20 23 20 72 65 76 20 6e 6f 77 20  ..    # rev now 
9210: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
9220: 73 74 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76 69  st non-NTDB revi
9230: 73 69 6f 6e 20 61 66 74 65 72 20 74 68 65 0a 09  sion after the..
9240: 20 20 20 20 23 20 4e 54 44 42 2c 20 6f 72 20 69      # NTDB, or i
9250: 73 20 65 6d 70 74 79 20 69 66 20 74 68 65 72 65  s empty if there
9260: 20 69 73 20 6e 6f 20 73 75 63 68 2e 20 49 66 20   is no such. If 
9270: 77 65 20 68 61 76 65 20 73 6f 6d 65 0a 09 20 20  we have some..  
9280: 20 20 23 20 74 68 65 79 20 68 61 76 65 20 74 6f    # they have to
9290: 20 72 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20 20   removed....    
92a0: 69 66 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20  if {$rev ne ""} 
92b0: 20 7b 0a 09 09 73 65 74 20 6c 61 73 74 6e 74 64   {...set lastntd
92c0: 62 20 5b 24 72 65 76 20 70 61 72 65 6e 74 5d 0a  b [$rev parent].
92d0: 09 09 24 6c 61 73 74 6e 74 64 62 20 63 75 74 66  ..$lastntdb cutf
92e0: 72 6f 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c 65  romchild...while
92f0: 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a   {$rev ne ""} {.
9300: 09 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76  ..    $rev remov
9310: 65 61 6c 6c 74 61 67 73 0a 09 09 20 20 20 20 24  ealltags...    $
9320: 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61  rev removeallbra
9330: 6e 63 68 65 73 0a 09 09 20 20 20 20 23 20 4e 6f  nches...    # No
9340: 74 65 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20 73  te [x]: We may s
9350: 74 69 6c 6c 20 68 61 76 65 20 68 61 64 20 62 72  till have had br
9360: 61 6e 63 68 65 73 20 6f 6e 20 74 68 65 0a 09 09  anches on the...
9370: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2e 20      # revision. 
9380: 42 72 61 6e 63 68 65 73 20 77 69 74 68 6f 75 74  Branches without
9390: 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d 69   revisions commi
93a0: 74 74 65 64 0a 09 09 20 20 20 20 23 20 6f 6e 20  tted...    # on 
93b0: 74 68 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f 77  them do not show
93c0: 20 75 70 20 69 6e 20 74 68 65 20 6c 69 73 74 20   up in the list 
93d0: 6f 66 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09 20  of roots aka... 
93e0: 20 20 20 23 20 6c 69 6e 65 73 20 6f 66 20 64 65     # lines of de
93f0: 76 65 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20 20  velopment....   
9400: 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63   set rev [$rev c
9410: 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d  hild]...}..    }
9420: 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a  ..    return..}.
9430: 0a 09 23 20 4e 6f 20 4e 54 44 42 20 73 74 75 66  ..# No NTDB stuf
9440: 66 20 74 6f 20 64 65 61 6c 20 77 69 74 68 2e 20  f to deal with. 
9450: 46 69 72 73 74 20 64 65 6c 65 74 65 20 74 68 65  First delete the
9460: 20 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a 09   branch object..
9470: 23 20 69 74 73 65 6c 66 2c 20 61 66 74 65 72 20  # itself, after 
9480: 63 75 74 74 69 6e 67 20 61 6c 6c 20 74 68 65 20  cutting all the 
9490: 76 61 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74 69  various connecti
94a0: 6f 6e 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e 63  ons....set branc
94b0: 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62  h [$root parentb
94c0: 72 61 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72 61  ranch]..if {$bra
94d0: 6e 63 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20  nch ne ""} {..  
94e0: 20 20 73 65 74 20 62 72 61 6e 63 68 70 61 72 65    set branchpare
94f0: 6e 74 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65  nt [$branch pare
9500: 6e 74 5d 0a 09 20 20 20 20 24 62 72 61 6e 63 68  nt]..    $branch
9510: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61  parent removebra
9520: 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e  nch        $bran
9530: 63 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70  ch..    $branchp
9540: 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c  arent removechil
9550: 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a  donbranch $root.
9560: 09 7d 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20  .}...# The root 
9570: 69 73 20 6e 6f 20 73 75 63 68 20 61 6e 79 20 6c  is no such any l
9580: 6f 6e 67 65 72 20 65 69 74 68 65 72 2e 0a 09 6c  onger either...l
9590: 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24  delete myroots $
95a0: 72 6f 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f 20  root...# Now go 
95b0: 74 68 72 6f 75 67 68 20 74 68 65 20 6c 69 6e 65  through the line
95c0: 20 61 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c 20   and remove all 
95d0: 69 74 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a  its revisions...
95e0: 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65  .while {$root ne
95f0: 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f   ""} {..    $roo
9600: 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a  t removealltags.
9610: 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76  .    $root remov
9620: 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20 20  eallbranches..  
9630: 20 20 23 20 4e 6f 74 65 3a 20 53 65 65 20 74 68    # Note: See th
9640: 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20 20  e note [x]....  
9650: 20 20 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e    # From cvs2svn
9660: 3a 20 49 66 20 74 68 69 73 20 69 73 20 74 68 65  : If this is the
9670: 20 6c 61 73 74 20 64 65 66 61 75 6c 74 20 72 65   last default re
9680: 76 69 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20 20  vision on a..   
9690: 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66   # non-trunk def
96a0: 61 75 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c 6c  ault branch foll
96b0: 6f 77 65 64 20 62 79 20 61 20 31 2e 32 20 72 65  owed by a 1.2 re
96c0: 76 69 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 74  vision,..    # t
96d0: 68 65 6e 20 74 68 65 20 31 2e 32 20 72 65 76 69  hen the 1.2 revi
96e0: 73 69 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e 20  sion depends on 
96f0: 74 68 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d 45  this one.  FIXME
9700: 3a 20 49 74 20 69 73 0a 09 20 20 20 20 23 20 71  : It is..    # q
9710: 75 65 73 74 69 6f 6e 61 62 6c 65 20 77 68 65 74  uestionable whet
9720: 68 65 72 20 74 68 69 73 20 68 61 6e 64 6c 69 6e  her this handlin
9730: 67 20 69 73 20 63 6f 72 72 65 63 74 2c 20 73 69  g is correct, si
9740: 6e 63 65 20 74 68 65 0a 09 20 20 20 20 23 20 6e  nce the..    # n
9750: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
9760: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e   branch revision
9770: 73 20 61 66 66 65 63 74 20 74 72 75 6e 6b 20 61  s affect trunk a
9780: 6e 64 0a 09 20 20 20 20 23 20 73 68 6f 75 6c 64  nd..    # should
9790: 20 74 68 65 72 65 66 6f 72 65 20 6e 6f 74 20 6a   therefore not j
97a0: 75 73 74 20 62 65 20 64 69 73 63 61 72 64 65 64  ust be discarded
97b0: 20 65 76 65 6e 20 69 66 0a 09 20 20 20 20 23 20   even if..    # 
97c0: 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09  --trunk-only....
97d0: 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68      if {[$root h
97e0: 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63  asdefaultbranchc
97f0: 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 6e  hild]} {...set n
9800: 74 64 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20  tdbchild [$root 
9810: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69  defaultbranchchi
9820: 6c 64 5d 0a 09 09 69 6e 74 65 67 72 69 74 79 20  ld]...integrity 
9830: 61 73 73 65 72 74 20 7b 0a 09 09 20 20 20 20 5b  assert {...    [
9840: 24 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61 75  $ntdbchild defau
9850: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d 20  ltbranchparent] 
9860: 65 71 20 24 6e 74 64 62 63 68 69 6c 64 0a 09 09  eq $ntdbchild...
9870: 7d 20 7b 6e 74 64 62 20 2d 20 74 72 75 6e 6b 20  } {ntdb - trunk 
9880: 6c 69 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 7d 0a  linkage broken}.
9890: 09 09 24 6e 74 64 62 63 68 69 6c 64 20 63 75 74  ..$ntdbchild cut
98a0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72  defaultbranchpar
98b0: 65 6e 74 0a 09 09 69 66 20 7b 5b 24 6e 74 64 62  ent...if {[$ntdb
98c0: 63 68 69 6c 64 20 68 61 73 70 61 72 65 6e 74 5d  child hasparent]
98d0: 7d 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e  } {...    lappen
98e0: 64 20 6d 79 72 6f 6f 74 73 20 5b 24 6e 74 64 62  d myroots [$ntdb
98f0: 63 68 69 6c 64 20 70 61 72 65 6e 74 5d 0a 09 09  child parent]...
9900: 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73  }..    }...    s
9910: 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63  et root [$root c
9920: 68 69 6c 64 5d 0a 09 7d 0a 0a 09 72 65 74 75 72  hild]..}...retur
9930: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
9940: 68 6f 64 20 47 72 61 66 74 4e 54 44 42 32 54 72  hod GraftNTDB2Tr
9950: 75 6e 6b 20 7b 72 6f 6f 74 7d 20 7b 0a 09 23 20  unk {root} {..# 
9960: 57 65 20 63 61 6e 20 6e 6f 77 20 67 72 61 66 74  We can now graft
9970: 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64   the non-trunk d
9980: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65  efault branch re
9990: 76 69 73 69 6f 6e 73 20 74 6f 0a 09 23 20 74 72  visions to..# tr
99a0: 75 6e 6b 2e 20 54 68 65 79 20 73 68 6f 75 6c 64  unk. They should
99b0: 20 61 6c 72 65 61 64 79 20 62 65 20 61 6c 6f 6e   already be alon
99c0: 65 20 6f 6e 20 61 20 43 56 53 42 72 61 6e 63 68  e on a CVSBranch
99d0: 2d 6c 65 73 73 0a 09 23 20 62 72 61 6e 63 68 2e  -less..# branch.
99e0: 0a 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73  ...integrity ass
99f0: 65 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73  ert {![$root has
9a00: 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b  parentbranch]} {
9a10: 4e 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20  NTDB root still 
9a20: 68 61 73 20 69 74 73 20 62 72 61 6e 63 68 20 73  has its branch s
9a30: 79 6d 62 6f 6c 7d 0a 09 69 6e 74 65 67 72 69 74  ymbol}..integrit
9a40: 79 20 61 73 73 65 72 74 20 7b 21 5b 24 72 6f 6f  y assert {![$roo
9a50: 74 20 68 61 73 62 72 61 6e 63 68 65 73 5d 7d 20  t hasbranches]} 
9a60: 20 20 20 20 7b 4e 54 44 42 20 72 6f 6f 74 20 73      {NTDB root s
9a70: 74 69 6c 6c 20 68 61 73 20 73 70 61 77 6e 65 64  till has spawned
9a80: 20 62 72 61 6e 63 68 65 73 7d 0a 0a 09 73 65 74   branches}...set
9a90: 20 6c 61 73 74 20 24 72 6f 6f 74 0a 09 77 68 69   last $root..whi
9aa0: 6c 65 20 7b 5b 24 6c 61 73 74 20 68 61 73 63 68  le {[$last hasch
9ab0: 69 6c 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74 20  ild]} {set last 
9ac0: 5b 24 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a 0a  [$last child]}..
9ad0: 09 69 66 20 7b 5b 24 6c 61 73 74 20 68 61 73 64  .if {[$last hasd
9ae0: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c  efaultbranchchil
9af0: 64 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20  d]} {...    set 
9b00: 72 65 76 31 32 20 5b 24 6c 61 73 74 20 64 65 66  rev12 [$last def
9b10: 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d  aultbranchchild]
9b20: 0a 09 20 20 20 20 24 72 65 76 31 32 20 63 75 74  ..    $rev12 cut
9b30: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72  defaultbranchpar
9b40: 65 6e 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20  ent..    $last  
9b50: 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68  cutdefaultbranch
9b60: 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 72 65 76  child...    $rev
9b70: 31 32 20 63 68 61 6e 67 65 70 61 72 65 6e 74 20  12 changeparent 
9b80: 24 6c 61 73 74 0a 09 20 20 20 20 24 6c 61 73 74  $last..    $last
9b90: 20 20 63 68 61 6e 67 65 63 68 69 6c 64 20 24 72    changechild $r
9ba0: 65 76 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c 65  ev12...    ldele
9bb0: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31  te myroots $rev1
9bc0: 32 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 61  2...    # Note a
9bd0: 6e 64 20 72 65 6d 65 6d 62 65 72 20 74 68 61 74  nd remember that
9be0: 20 74 68 65 20 74 79 70 65 20 6f 66 20 72 65 76   the type of rev
9bf0: 31 32 20 77 61 73 20 61 6c 72 65 61 64 79 0a 09  12 was already..
9c00: 20 20 20 20 23 20 61 64 6a 75 73 74 65 64 20 62      # adjusted b
9c10: 79 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b  y AdjustNonTrunk
9c20: 44 65 66 61 75 6c 74 42 72 61 6e 63 68 2c 20 73  DefaultBranch, s
9c30: 6f 20 77 65 20 64 6f 6e 27 74 0a 09 20 20 20 20  o we don't..    
9c40: 23 20 68 61 76 65 20 74 6f 20 63 68 61 6e 67 65  # have to change
9c50: 20 69 74 73 20 74 79 70 65 20 68 65 72 65 2e 0a   its type here..
9c60: 09 7d 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f  .}...while {$roo
9c70: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20  t ne ""} {..    
9c80: 24 72 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61 75  $root setondefau
9c90: 6c 74 62 72 61 6e 63 68 20 30 0a 09 20 20 20 20  ltbranch 0..    
9ca0: 24 72 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d 79  $root setlod $my
9cb0: 74 72 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65 61  trunk..    forea
9cc0: 63 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 61  ch tag [$root ta
9cd0: 67 73 5d 20 7b 0a 09 09 24 74 61 67 20 73 65 74  gs] {...$tag set
9ce0: 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20  lod $mytrunk..  
9cf0: 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f    }..    set roo
9d00: 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  t [$root child].
9d10: 09 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75  .}..        retu
9d20: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
9d30: 74 68 6f 64 20 41 63 74 69 76 65 20 7b 7d 20 7b  thod Active {} {
9d40: 0a 09 73 65 74 20 72 65 76 69 73 69 6f 6e 73 20  ..set revisions 
9d50: 7b 7d 0a 09 73 65 74 20 73 79 6d 62 6f 6c 73 20  {}..set symbols 
9d60: 20 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 72    {}...foreach r
9d70: 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73  oot [$self Lines
9d80: 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b  OfDevelopment] {
9d90: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74  ..    if {[$root
9da0: 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68   hasparentbranch
9db0: 5d 7d 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d  ]} { lappend sym
9dc0: 62 6f 6c 73 20 5b 24 72 6f 6f 74 20 70 61 72 65  bols [$root pare
9dd0: 6e 74 62 72 61 6e 63 68 5d 20 7d 0a 09 20 20 20  ntbranch] }..   
9de0: 20 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65   while {$root ne
9df0: 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64   ""} {...lappend
9e00: 20 72 65 76 69 73 69 6f 6e 73 20 24 72 6f 6f 74   revisions $root
9e10: 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 20  ...foreach tag  
9e20: 20 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 20    [$root tags]  
9e30: 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d     { lappend sym
9e40: 62 6f 6c 73 20 24 74 61 67 20 20 20 20 7d 0a 09  bols $tag    }..
9e50: 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20  .foreach branch 
9e60: 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d  [$root branches]
9e70: 20 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69   {...    integri
9e80: 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b  ty assert {....[
9e90: 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 20  $branch parent] 
9ea0: 65 71 20 24 72 6f 6f 74 0a 09 09 20 20 20 20 7d  eq $root...    }
9eb0: 20 7b 42 61 63 6b 72 65 66 65 72 65 6e 63 65 20   {Backreference 
9ec0: 62 72 61 6e 63 68 20 74 6f 20 69 74 73 20 72 6f  branch to its ro
9ed0: 6f 74 20 69 73 20 6d 69 73 73 69 6e 67 20 6f 72  ot is missing or
9ee0: 20 77 72 6f 6e 67 7d 0a 09 09 20 20 20 20 6c 61   wrong}...    la
9ef0: 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 62  ppend symbols $b
9f00: 72 61 6e 63 68 0a 09 09 7d 0a 09 09 73 65 74 20  ranch...}...set 
9f10: 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a  lod [$root lod].
9f20: 09 09 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74  ..if {![$lod ist
9f30: 72 75 6e 6b 5d 7d 20 7b 0a 09 09 20 20 20 20 69  runk]} {...    i
9f40: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20  ntegrity assert 
9f50: 7b 0a 09 09 09 5b 24 6c 6f 64 20 68 61 73 63 68  {....[$lod hasch
9f60: 69 6c 64 5d 0a 09 09 20 20 20 20 7d 20 7b 42 72  ild]...    } {Br
9f70: 61 6e 63 68 20 69 73 20 4c 4f 44 20 73 79 6d 62  anch is LOD symb
9f80: 6f 6c 20 77 69 74 68 6f 75 74 20 72 65 76 69 73  ol without revis
9f90: 69 6f 6e 73 7d 0a 09 09 20 20 20 20 6c 61 70 70  ions}...    lapp
9fa0: 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 6c 6f 64  end symbols $lod
9fb0: 0a 09 09 7d 0a 09 09 73 65 74 20 72 6f 6f 74 20  ...}...set root 
9fc0: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20  [$root child].. 
9fd0: 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e     }..}...return
9fe0: 20 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 20 2d 75   [list [lsort -u
9ff0: 6e 69 71 75 65 20 2d 64 69 63 74 20 24 72 65 76  nique -dict $rev
a000: 69 73 69 6f 6e 73 5d 20 5b 6c 73 6f 72 74 20 2d  isions] [lsort -
a010: 75 6e 69 71 75 65 20 2d 64 69 63 74 20 24 73 79  unique -dict $sy
a020: 6d 62 6f 6c 73 5d 5d 0a 20 20 20 20 7d 0a 0a 0a  mbols]].    }...
a030: 20 20 20 20 6d 65 74 68 6f 64 20 41 67 67 72 65      method Aggre
a040: 67 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 20 7b  gateSymbolData {
a050: 7d 20 7b 0a 09 23 20 4e 6f 77 20 74 68 61 74 20  } {..# Now that 
a060: 74 68 65 20 65 78 61 63 74 20 73 65 74 20 6f 66  the exact set of
a070: 20 72 65 76 69 73 69 6f 6e 73 20 28 61 6e 64 20   revisions (and 
a080: 74 68 72 6f 75 67 68 20 74 68 61 74 0a 09 23 20  through that..# 
a090: 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67  branches and tag
a0a0: 73 29 20 69 73 20 6b 6e 6f 77 6e 20 77 65 20 63  s) is known we c
a0b0: 61 6e 20 75 70 64 61 74 65 20 74 68 65 20 61 67  an update the ag
a0c0: 67 72 65 67 61 74 65 0a 09 23 20 73 79 6d 62 6f  gregate..# symbo
a0d0: 6c 20 73 74 61 74 69 73 74 69 63 73 2e 0a 0a 09  l statistics....
a0e0: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73  foreach root [$s
a0f0: 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c  elf LinesOfDevel
a100: 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 73  opment] {..    s
a110: 65 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f  et lod [$root lo
a120: 64 5d 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a  d]...    # Note:
a130: 20 49 66 20 74 68 65 20 4c 4f 44 20 69 73 20 74   If the LOD is t
a140: 68 65 20 74 72 75 6e 6b 20 74 68 65 20 63 6f 75  he trunk the cou
a150: 6e 74 2a 2c 20 65 74 63 2e 20 6d 65 74 68 6f 64  nt*, etc. method
a160: 73 0a 09 20 20 20 20 23 20 77 69 6c 6c 20 64 6f  s..    # will do
a170: 20 6e 6f 74 68 69 6e 67 2c 20 61 73 20 69 74 20   nothing, as it 
a180: 69 73 20 61 6c 77 61 79 73 20 70 72 65 73 65 6e  is always presen
a190: 74 20 28 63 61 6e 6e 6f 74 20 62 65 0a 09 20 20  t (cannot be..  
a1a0: 20 20 23 20 65 78 63 6c 75 64 65 64 29 2c 20 61    # excluded), a
a1b0: 6e 64 20 69 73 20 61 6c 77 61 79 73 20 61 20 62  nd is always a b
a1c0: 72 61 6e 63 68 20 74 6f 6f 2e 0a 0a 09 20 20 20  ranch too....   
a1d0: 20 23 20 4c 69 6e 65 73 20 6f 66 20 64 65 76 65   # Lines of deve
a1e0: 6c 6f 70 6d 65 6e 74 20 63 6f 75 6e 74 20 61 73  lopment count as
a1f0: 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 68 61   branches and ha
a200: 76 65 20 61 20 63 6f 6d 6d 69 74 0a 09 20 20 20  ve a commit..   
a210: 20 23 20 6f 6e 20 74 68 65 6d 20 28 72 6f 6f 74   # on them (root
a220: 29 2e 20 49 66 20 74 68 65 79 20 61 72 65 20 73  ). If they are s
a230: 74 69 6c 6c 20 61 74 74 61 63 68 65 64 20 74 6f  till attached to
a240: 20 61 20 74 72 65 65 20 77 65 0a 09 20 20 20 20   a tree we..    
a250: 23 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 74  # have to comput
a260: 65 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 70  e and register p
a270: 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73 2e  ossible parents.
a280: 0a 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e  ...    $lod coun
a290: 74 61 73 62 72 61 6e 63 68 0a 09 20 20 20 20 24  tasbranch..    $
a2a0: 6c 6f 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69 74  lod countacommit
a2b0: 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f  ...    if {[$roo
a2c0: 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63  t hasparentbranc
a2d0: 68 5d 7d 20 7b 0a 09 09 23 20 4e 6f 74 65 20 6c  h]} {...# Note l
a2e0: 6f 64 20 3d 3d 20 5b 24 72 6f 6f 74 20 70 61 72  od == [$root par
a2f0: 65 6e 74 62 72 61 6e 63 68 5d 0a 09 09 24 6c 6f  entbranch]...$lo
a300: 64 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74  d possibleparent
a310: 73 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20  s..    } elseif 
a320: 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d  {![$lod istrunk]
a330: 20 26 26 20 5b 24 72 6f 6f 74 20 69 73 6f 6e 64   && [$root isond
a340: 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b  efaultbranch]} {
a350: 0a 09 09 23 20 54 68 69 73 20 69 73 20 74 68 65  ...# This is the
a360: 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 6f   root revision o
a370: 66 20 61 20 64 65 74 61 63 68 65 64 20 4e 54 44  f a detached NTD
a380: 42 2e 20 57 65 0a 09 09 23 20 68 61 76 65 20 74  B. We...# have t
a390: 6f 20 6d 61 6e 75 61 6c 6c 79 20 73 65 74 20 74  o manually set t
a3a0: 68 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65  he only possible
a3b0: 20 70 61 72 65 6e 74 20 66 6f 72 0a 09 09 23 20   parent for...# 
a3c0: 74 68 69 73 20 4c 4f 44 2c 20 74 68 65 20 74 72  this LOD, the tr
a3d0: 75 6e 6b 20 69 74 73 65 6c 66 2e 0a 0a 09 09 5b  unk itself.....[
a3e0: 24 6c 6f 64 20 73 79 6d 62 6f 6c 5d 20 70 6f 73  $lod symbol] pos
a3f0: 73 69 62 6c 65 70 61 72 65 6e 74 20 24 6d 79 74  sibleparent $myt
a400: 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 20  runk..    }...  
a410: 20 20 23 20 46 6f 72 20 74 68 65 20 72 65 76 69    # For the revi
a420: 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 6e  sions in the lin
a430: 65 20 77 65 20 72 65 67 69 73 74 65 72 20 74 68  e we register th
a440: 65 69 72 20 62 72 61 6e 63 68 65 73 0a 09 20 20  eir branches..  
a450: 20 20 23 20 61 6e 64 20 74 61 67 73 20 61 73 20    # and tags as 
a460: 62 6c 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 65  blockers for the
a470: 20 6c 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 65   lod, and update
a480: 20 74 68 65 20 74 79 70 65 0a 09 20 20 20 20 23   the type..    #
a490: 20 63 6f 75 6e 74 65 72 73 20 61 73 20 77 65 6c   counters as wel
a4a0: 6c 2e 20 41 73 20 62 72 61 6e 63 68 20 73 79 6d  l. As branch sym
a4b0: 62 6f 6c 73 20 77 69 74 68 6f 75 74 20 63 6f 6d  bols without com
a4c0: 6d 69 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 74  mits on..    # t
a4d0: 68 65 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 74  hem are not list
a4e0: 65 64 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 64  ed as lines of d
a4f0: 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 68  evelopment, we h
a500: 61 76 65 20 74 6f 0a 09 20 20 20 20 23 20 63 6f  ave to..    # co
a510: 75 6e 74 20 74 68 65 6d 20 68 65 72 65 20 61 73  unt them here as
a520: 20 77 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e 20   well, as plain 
a530: 62 72 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 73  branches. At las
a540: 74 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 65  t we..    # have
a550: 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20   to compute and 
a560: 72 65 67 69 73 74 65 72 20 74 68 65 20 70 6f 73  register the pos
a570: 73 69 62 6c 65 20 70 61 72 65 6e 74 73 20 6f 66  sible parents of
a580: 20 74 68 65 0a 09 20 20 20 20 23 20 74 61 67 73   the..    # tags
a590: 2c 20 69 6e 20 63 61 73 65 20 74 68 65 79 20 61  , in case they a
a5a0: 72 65 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 74  re later convert
a5b0: 65 64 20 61 73 20 62 72 61 6e 63 68 65 73 2e 0a  ed as branches..
a5c0: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f  ..    while {$ro
a5d0: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 6f  ot ne ""} {...fo
a5e0: 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72  reach branch [$r
a5f0: 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a  oot branches] {.
a600: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b  ..    $lod block
a610: 65 64 62 79 20 24 62 72 61 6e 63 68 0a 09 09 20  edby $branch... 
a620: 20 20 20 24 62 72 61 6e 63 68 20 70 6f 73 73 69     $branch possi
a630: 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20  bleparents...   
a640: 20 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61   if {[$branch ha
a650: 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75  schild]} continu
a660: 65 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20  e...    $branch 
a670: 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 09  countasbranch...
a680: 7d 0a 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67  }....foreach tag
a690: 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a   [$root tags] {.
a6a0: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b  ..    $lod block
a6b0: 65 64 62 79 20 24 74 61 67 0a 09 09 20 20 20 20  edby $tag...    
a6c0: 24 74 61 67 20 70 6f 73 73 69 62 6c 65 70 61 72  $tag possiblepar
a6d0: 65 6e 74 73 0a 09 09 20 20 20 20 24 74 61 67 20  ents...    $tag 
a6e0: 63 6f 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a 0a  countastag...}..
a6f0: 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f  ..set root [$roo
a700: 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a  t child]..    }.
a710: 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  .}...return.    
a720: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  }..    # # ## ##
a730: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
a740: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
a750: 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74     ## Configurat
a760: 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20  ion..    pragma 
a770: 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20  -hastypeinfo    
a780: 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20  no  ; # no type 
a790: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20  introspection.  
a7a0: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66    pragma -hasinf
a7b0: 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23  o        no  ; #
a7c0: 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f   no object intro
a7d0: 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61  spection.    pra
a7e0: 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68  gma -hastypemeth
a7f0: 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65  ods no  ; # type
a800: 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74   is not relevant
a810: 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  ...    # # ## ##
a820: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
a830: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d   #############.}
a840: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
a850: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
a860: 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20  mport::cvs {.   
a870: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72   namespace expor
a880: 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 73  t file.    names
a890: 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 7b  pace eval file {
a8a0: 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 72  ..# Import not r
a8b0: 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 79  equired, already
a8c0: 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 61   a child namespa
a8d0: 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 65  ce...# namespace
a8e0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
a8f0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
a900: 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 20  s::file::rev..# 
a910: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
a920: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
a930: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65  mport::cvs::file
a940: 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 65  ::sym..namespace
a950: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f   import ::vc::to
a960: 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61  ols::misc::*..na
a970: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
a980: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75  :vc::tools::trou
a990: 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69  ble..namespace i
a9a0: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c  mport ::vc::tool
a9b0: 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 63  s::log..namespac
a9c0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
a9d0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
a9e0: 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73  vs::state..names
a9f0: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63  pace import ::vc
aa00: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
aa10: 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79  ::cvs::integrity
aa20: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  ..namespace impo
aa30: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  rt ::vc::fossil:
aa40: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 67 74  :import::cvs::gt
aa50: 63 6f 72 65 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20  core.    }.}..# 
aa60: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
aa70: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
aa80: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
aa90: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52  ###########.## R
aaa0: 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72  eady..package pr
aab0: 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c  ovide vc::fossil
aac0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66  ::import::cvs::f
aad0: 69 6c 65 20 31 2e 30 0a 72 65 74 75 72 6e 0a     ile 1.0.return.