Hex Artifact Content
Not logged in

Artifact 5721cadfcc1ec2ad857b156ebf22d45d3a21d437:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [08f8085700] - Added progress feedback to the file import, and moved the log output to level 8. by aku on 2007-12-06 03:54:15.

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: 66 69 6c 65 20 64 65 6c 65 74 65 20 24 78 20 7d  file delete $x }
2260: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 70 61 74 68  ...foreach {path
2270: 20 72 69 64 7d 20 24 72 65 76 6d 61 70 20 7b 0a   rid} $revmap {.
2280: 09 20 20 20 20 73 65 74 20 75 75 69 64 20 24 69  .    set uuid $i
2290: 64 6d 61 70 28 24 70 61 74 68 29 0a 09 20 20 20  dmap($path)..   
22a0: 20 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49   state run {...I
22b0: 4e 53 45 52 54 20 49 4e 54 4f 20 72 65 76 75 75  NSERT INTO revuu
22c0: 69 64 20 28 72 69 64 2c 20 20 75 75 69 64 29 0a  id (rid,  uuid).
22d0: 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 20  ..VALUES        
22e0: 20 20 20 20 20 20 28 24 72 69 64 2c 20 24 75 75        ($rid, $uu
22f0: 69 64 29 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72  id)..    }..}..r
2300: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
2310: 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 20 7b   method Expand {
2320: 64 69 72 7d 20 7b 0a 09 73 65 74 20 65 78 20 5b  dir} {..set ex [
2330: 73 74 72 75 63 74 3a 3a 67 72 61 70 68 20 65 78  struct::graph ex
2340: 5d 20 3b 20 23 20 45 78 70 61 6e 73 69 6f 6e 20  ] ; # Expansion 
2350: 67 72 61 70 68 2e 0a 09 73 65 74 20 7a 70 20 5b  graph...set zp [
2360: 73 74 72 75 63 74 3a 3a 67 72 61 70 68 20 7a 70  struct::graph zp
2370: 5d 20 3b 20 23 20 5a 69 70 2f 49 6d 70 6f 72 74  ] ; # Zip/Import
2380: 20 67 72 61 70 68 2e 0a 0a 09 63 6c 6f 73 65 20   graph....close 
2390: 5b 6f 70 65 6e 20 24 64 69 72 2f 72 5f 5f 65 6d  [open $dir/r__em
23a0: 70 74 79 5f 5f 20 77 5d 3b 23 20 42 61 73 65 20  pty__ w];# Base 
23b0: 66 6f 72 20 64 65 74 61 63 68 65 64 20 72 6f 6f  for detached roo
23c0: 74 73 20 6f 6e 20 62 72 61 6e 63 68 65 73 2e 0a  ts on branches..
23d0: 0a 09 23 20 50 68 61 73 65 20 49 3a 20 50 75 6c  ..# Phase I: Pul
23e0: 6c 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20  l the revisions 
23f0: 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 61 6e 64 20  from memory and 
2400: 66 69 6c 6c 20 74 68 65 20 67 72 61 70 68 73 0a  fill the graphs.
2410: 09 23 20 20 20 20 20 20 20 20 20 20 77 69 74 68  .#          with
2420: 20 74 68 65 6d 2e 2e 2e 0a 0a 09 73 65 74 20 65   them......set e
2430: 61 72 63 73 20 20 20 7b 7d 20 3b 20 23 20 41 72  arcs   {} ; # Ar
2440: 63 73 20 66 6f 72 20 65 78 70 61 6e 73 69 6f 6e  cs for expansion
2450: 20 67 72 61 70 68 0a 09 73 65 74 20 7a 61 72 63   graph..set zarc
2460: 73 20 20 20 7b 7d 20 3b 20 23 20 41 72 63 73 20  s   {} ; # Arcs 
2470: 66 6f 72 20 7a 69 70 20 67 72 61 70 68 0a 09 73  for zip graph..s
2480: 65 74 20 72 65 76 6d 61 70 20 20 7b 7d 20 3b 20  et revmap  {} ; 
2490: 23 20 70 61 74 68 20 2d 3e 20 72 69 64 20 6d 61  # path -> rid ma
24a0: 70 20 74 6f 20 6c 61 74 65 72 20 6d 65 72 67 65  p to later merge
24b0: 20 75 75 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f   uuid informatio
24c0: 6e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 69 64  n...foreach {rid
24d0: 20 72 65 76 6e 72 20 70 61 72 65 6e 74 20 63 68   revnr parent ch
24e0: 69 6c 64 20 63 6f 66 66 20 63 6c 65 6e 7d 20 5b  ild coff clen} [
24f0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20  state run {..   
2500: 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 52   SELECT R.rid, R
2510: 2e 72 65 76 2c 20 52 2e 70 61 72 65 6e 74 2c 20  .rev, R.parent, 
2520: 52 2e 63 68 69 6c 64 2c 20 52 2e 63 6f 66 66 2c  R.child, R.coff,
2530: 20 52 2e 63 6c 65 6e 0a 09 20 20 20 20 46 52 4f   R.clen..    FRO
2540: 4d 20 20 20 72 65 76 69 73 69 6f 6e 20 52 0a 09  M   revision R..
2550: 20 20 20 20 57 48 45 52 45 20 20 52 2e 66 69 64      WHERE  R.fid
2560: 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20 7b 0a 09   = $myid..}] {..
2570: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 76 6d      lappend revm
2580: 61 70 20 72 24 72 65 76 6e 72 20 24 72 69 64 0a  ap r$revnr $rid.
2590: 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64 65 20 69  ..    $zp node i
25a0: 6e 73 65 72 74 20 24 72 69 64 0a 09 20 20 20 20  nsert $rid..    
25b0: 24 7a 70 20 6e 6f 64 65 20 73 65 74 20 20 20 20  $zp node set    
25c0: 24 72 69 64 20 72 65 76 6e 72 20 24 72 65 76 6e  $rid revnr $revn
25d0: 72 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64 65 20  r..    $zp node 
25e0: 73 65 74 20 20 20 20 24 72 69 64 20 6c 61 62 65  set    $rid labe
25f0: 6c 20 3c 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20  l <$revnr>...   
2600: 20 69 66 20 7b 24 63 68 69 6c 64 20 6e 65 20 22   if {$child ne "
2610: 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 7a  "} {...lappend z
2620: 61 72 63 73 20 24 63 68 69 6c 64 20 24 72 69 64  arcs $child $rid
2630: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 24 65  ..    }...    $e
2640: 78 20 6e 6f 64 65 20 69 6e 73 65 72 74 20 24 72  x node insert $r
2650: 69 64 0a 09 20 20 20 20 24 65 78 20 6e 6f 64 65  id..    $ex node
2660: 20 73 65 74 20 20 20 20 24 72 69 64 20 74 65 78   set    $rid tex
2670: 74 20 20 5b 6c 69 73 74 20 24 63 6f 66 66 20 24  t  [list $coff $
2680: 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65 78 20 6e  clen]..    $ex n
2690: 6f 64 65 20 73 65 74 20 20 20 20 24 72 69 64 20  ode set    $rid 
26a0: 72 65 76 6e 72 20 24 72 65 76 6e 72 0a 09 20 20  revnr $revnr..  
26b0: 20 20 24 65 78 20 6e 6f 64 65 20 73 65 74 20 20    $ex node set  
26c0: 20 20 24 72 69 64 20 6c 61 62 65 6c 20 3c 24 72    $rid label <$r
26d0: 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69 66 20 7b  evnr>...    if {
26e0: 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e  [rev istrunkrevn
26f0: 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 09 23  r $revnr]} {...#
2700: 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b 2c 20 74   On the trunk, t
2710: 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69 73 20  his revision is 
2720: 61 20 64 65 6c 74 61 20 62 61 73 65 64 20 6f 6e  a delta based on
2730: 20 74 68 65 0a 09 09 23 20 63 68 69 6c 64 2e 20   the...# child. 
2740: 54 68 61 74 20 6d 61 6b 65 73 20 74 68 65 20 63  That makes the c
2750: 68 69 6c 64 20 6f 75 72 20 70 72 65 64 65 63 65  hild our predece
2760: 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b 24 63 68  ssor.....if {$ch
2770: 69 6c 64 20 65 71 20 22 22 7d 20 63 6f 6e 74 69  ild eq ""} conti
2780: 6e 75 65 0a 09 09 6c 61 70 70 65 6e 64 20 65 61  nue...lappend ea
2790: 72 63 73 20 24 63 68 69 6c 64 20 24 72 69 64 0a  rcs $child $rid.
27a0: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09  .    } else {...
27b0: 23 20 4f 6e 20 61 20 62 72 61 6e 63 68 20 74 68  # On a branch th
27c0: 69 73 20 72 65 76 69 73 69 6f 6e 20 69 73 20 61  is revision is a
27d0: 20 64 65 6c 74 61 20 62 61 73 65 64 20 6f 6e 20   delta based on 
27e0: 74 68 65 0a 09 09 23 20 70 61 72 65 6e 74 2e 20  the...# parent. 
27f0: 54 68 61 74 20 6d 61 6b 65 73 20 74 68 65 20 70  That makes the p
2800: 61 72 65 6e 74 20 6f 75 72 20 70 72 65 64 65 63  arent our predec
2810: 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b 24 70  essor.....if {$p
2820: 61 72 65 6e 74 20 65 71 20 22 22 7d 20 7b 0a 09  arent eq ""} {..
2830: 09 20 20 20 20 23 20 44 65 74 61 63 68 65 64 20  .    # Detached 
2840: 62 72 61 6e 63 68 20 72 6f 6f 74 2c 20 74 68 69  branch root, thi
2850: 73 20 69 73 20 61 20 70 61 74 63 68 20 62 61 73  s is a patch bas
2860: 65 64 20 6f 6e 0a 09 09 20 20 20 20 23 20 74 68  ed on...    # th
2870: 65 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a  e empty string..
2880: 09 09 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73  ..    $ex node s
2890: 65 74 20 24 72 69 64 20 5f 5f 62 61 73 65 5f 5f  et $rid __base__
28a0: 20 72 5f 5f 65 6d 70 74 79 5f 5f 20 0a 09 09 20   r__empty__ ... 
28b0: 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09 09 7d 0a     continue...}.
28c0: 09 09 6c 61 70 70 65 6e 64 20 65 61 72 63 73 20  ..lappend earcs 
28d0: 24 70 61 72 65 6e 74 20 24 72 69 64 0a 09 20 20  $parent $rid..  
28e0: 20 20 7d 0a 09 7d 0a 0a 09 23 20 50 68 61 73 65    }..}...# Phase
28f0: 20 49 49 3a 20 49 6e 73 65 72 74 20 74 68 65 20   II: Insert the 
2900: 61 63 63 75 6d 75 6c 61 74 65 64 20 64 65 70 65  accumulated depe
2910: 6e 64 65 6e 63 69 65 73 0a 0a 09 66 6f 72 65 61  ndencies...forea
2920: 63 68 20 7b 66 72 6f 6d 20 74 6f 7d 20 24 65 61  ch {from to} $ea
2930: 72 63 73 20 7b 20 24 65 78 20 61 72 63 20 69 6e  rcs { $ex arc in
2940: 73 65 72 74 20 24 66 72 6f 6d 20 24 74 6f 20 7d  sert $from $to }
2950: 0a 09 66 6f 72 65 61 63 68 20 7b 66 72 6f 6d 20  ..foreach {from 
2960: 74 6f 7d 20 24 7a 61 72 63 73 20 7b 20 24 7a 70  to} $zarcs { $zp
2970: 20 61 72 63 20 69 6e 73 65 72 74 20 24 66 72 6f   arc insert $fro
2980: 6d 20 24 74 6f 20 7d 0a 0a 09 23 20 50 68 61 73  m $to }...# Phas
2990: 65 20 49 49 49 3a 20 54 72 61 76 65 72 73 65 20  e III: Traverse 
29a0: 74 68 65 20 67 72 61 70 68 73 2c 20 65 78 70 61  the graphs, expa
29b0: 6e 64 20 74 68 65 20 66 69 6c 65 2c 20 61 6e 64  nd the file, and
29c0: 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 20 67  ..#            g
29d0: 65 6e 65 72 61 74 65 20 69 6d 70 6f 72 74 20 69  enerate import i
29e0: 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a 0a 09 73  nstructions....s
29f0: 65 74 20 61 72 63 68 69 76 65 20 5b 66 69 6c 65  et archive [file
2a00: 20 6a 6f 69 6e 20 5b 24 6d 79 70 72 6f 6a 65 63   join [$myprojec
2a10: 74 20 66 75 6c 6c 70 61 74 68 5d 20 24 6d 79 70  t fullpath] $myp
2a20: 61 74 68 5d 0a 09 73 65 74 20 61 63 20 20 20 20  ath]..set ac    
2a30: 20 20 5b 6f 70 65 6e 20 24 61 72 63 68 69 76 65    [open $archive
2a40: 20 72 5d 0a 09 66 63 6f 6e 66 69 67 75 72 65 20   r]..fconfigure 
2a50: 24 61 63 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e  $ac -translation
2a60: 20 62 69 6e 61 72 79 0a 0a 09 23 20 46 69 72 73   binary...# Firs
2a70: 74 20 74 72 61 76 65 72 73 65 20 74 68 65 20 65  t traverse the e
2a80: 78 70 61 6e 73 69 6f 6e 20 67 72 61 70 68 2c 20  xpansion graph, 
2a90: 74 68 69 73 20 67 69 76 65 73 20 75 73 20 74 68  this gives us th
2aa0: 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 69  e..# revisions i
2ab0: 6e 20 74 68 65 20 6f 72 64 65 72 20 77 65 20 68  n the order we h
2ac0: 61 76 65 20 74 6f 20 65 78 70 61 6e 64 20 74 68  ave to expand th
2ad0: 65 6d 2c 20 77 68 69 63 68 20 77 65 20 64 6f 2e  em, which we do.
2ae0: 0a 0a 09 73 65 74 20 6d 61 78 20 5b 6c 6c 65 6e  ...set max [llen
2af0: 67 74 68 20 5b 24 65 78 20 6e 6f 64 65 73 5d 5d  gth [$ex nodes]]
2b00: 0a 09 73 65 74 20 6d 79 69 6d 70 6f 72 74 20 30  ..set myimport 0
2b10: 0a 0a 09 67 74 63 6f 72 65 20 64 61 74 61 63 6d  ...gtcore datacm
2b20: 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78  d   [mymethod Ex
2b30: 70 61 6e 64 44 61 74 61 5d 0a 09 67 74 63 6f 72  pandData]..gtcor
2b40: 65 20 66 6f 72 6d 61 74 63 6d 64 20 5b 6d 79 6d  e formatcmd [mym
2b50: 65 74 68 6f 64 20 45 78 70 61 6e 64 46 6f 72 6d  ethod ExpandForm
2b60: 61 74 5d 0a 09 67 74 63 6f 72 65 20 73 6f 72 74  at]..gtcore sort
2b70: 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20  cmd   [mymethod 
2b80: 45 78 70 61 6e 64 53 6f 72 74 5d 0a 09 67 74 63  ExpandSort]..gtc
2b90: 6f 72 65 20 73 61 76 65 63 6d 64 20 20 20 5b 6d  ore savecmd   [m
2ba0: 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 31 20  ymethod Expand1 
2bb0: 24 61 63 20 24 64 69 72 20 24 6d 61 78 5d 0a 0a  $ac $dir $max]..
2bc0: 09 67 74 63 6f 72 65 20 74 72 61 76 65 72 73 65  .gtcore traverse
2bd0: 20 24 65 78 20 3b 20 23 20 54 68 65 20 67 72 61   $ex ; # The gra
2be0: 70 68 20 69 73 20 67 6f 6e 65 20 61 66 74 65 72  ph is gone after
2bf0: 20 74 68 65 20 63 61 6c 6c 0a 09 63 6c 6f 73 65   the call..close
2c00: 20 24 61 63 0a 0a 09 23 20 4e 6f 77 20 74 72 61   $ac...# Now tra
2c10: 76 65 72 73 65 20 74 68 65 20 69 6d 70 6f 72 74  verse the import
2c20: 20 67 72 61 70 68 2c 20 74 68 69 73 20 62 75 69   graph, this bui
2c30: 6c 64 73 20 74 68 65 20 69 6e 73 74 72 75 63 74  lds the instruct
2c40: 69 6f 6e 0a 09 23 20 6d 61 70 20 66 6f 72 20 74  ion..# map for t
2c50: 68 65 20 66 6f 73 73 69 6c 20 64 65 6c 74 61 73  he fossil deltas
2c60: 2e 0a 0a 09 67 74 63 6f 72 65 20 64 61 74 61 63  ....gtcore datac
2c70: 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45  md   [mymethod E
2c80: 78 70 61 6e 64 44 61 74 61 5d 0a 09 67 74 63 6f  xpandData]..gtco
2c90: 72 65 20 66 6f 72 6d 61 74 63 6d 64 20 5b 6d 79  re formatcmd [my
2ca0: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 46 6f 72  method ExpandFor
2cb0: 6d 61 74 5d 0a 09 67 74 63 6f 72 65 20 73 6f 72  mat]..gtcore sor
2cc0: 74 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64  tcmd   [mymethod
2cd0: 20 45 78 70 61 6e 64 53 6f 72 74 5d 0a 09 67 74   ExpandSort]..gt
2ce0: 63 6f 72 65 20 73 61 76 65 63 6d 64 20 20 20 5b  core savecmd   [
2cf0: 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 32  mymethod Expand2
2d00: 5d 0a 0a 09 73 65 74 20 6d 79 69 6d 70 6f 72 74  ]...set myimport
2d10: 20 7b 7d 0a 09 67 74 63 6f 72 65 20 74 72 61 76   {}..gtcore trav
2d20: 65 72 73 65 20 24 7a 70 20 3b 20 23 20 54 68 65  erse $zp ; # The
2d30: 20 67 72 61 70 68 20 69 73 20 67 6f 6e 65 20 61   graph is gone a
2d40: 66 74 65 72 20 74 68 65 20 63 61 6c 6c 0a 09 73  fter the call..s
2d50: 65 74 20 66 69 6c 65 6d 61 70 20 24 6d 79 69 6d  et filemap $myim
2d60: 70 6f 72 74 0a 09 75 6e 73 65 74 20 6d 79 69 6d  port..unset myim
2d70: 70 6f 72 74 0a 0a 09 23 20 41 6e 64 20 62 61 63  port...# And bac
2d80: 6b 20 74 6f 20 69 6d 70 6f 72 74 20 63 6f 6e 74  k to import cont
2d90: 72 6f 6c 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69  rol...return [li
2da0: 73 74 20 24 66 69 6c 65 6d 61 70 20 24 72 65 76  st $filemap $rev
2db0: 6d 61 70 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  map].    }..    
2dc0: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74  method ExpandDat
2dd0: 61 20 20 20 7b 67 72 61 70 68 20 6e 6f 64 65 7d  a   {graph node}
2de0: 20 7b 20 72 65 74 75 72 6e 20 5b 24 67 72 61 70   { return [$grap
2df0: 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65  h node get $node
2e00: 20 72 65 76 6e 72 5d 20 7d 0a 20 20 20 20 6d 65   revnr] }.    me
2e10: 74 68 6f 64 20 45 78 70 61 6e 64 46 6f 72 6d 61  thod ExpandForma
2e20: 74 20 7b 67 72 61 70 68 20 69 74 65 6d 7d 20 7b  t {graph item} {
2e30: 20 72 65 74 75 72 6e 20 3c 5b 6c 69 6e 64 65 78   return <[lindex
2e40: 20 24 69 74 65 6d 20 31 5d 3e 20 7d 20 3b 20 23   $item 1]> } ; #
2e50: 20 72 65 76 6e 72 0a 20 20 20 20 6d 65 74 68 6f   revnr.    metho
2e60: 64 20 45 78 70 61 6e 64 53 6f 72 74 20 20 20 7b  d ExpandSort   {
2e70: 67 72 61 70 68 20 63 61 6e 64 69 64 61 74 65 73  graph candidates
2e80: 7d 20 7b 0a 09 23 20 63 61 6e 64 69 64 61 74 65  } {..# candidate
2e90: 73 20 3d 20 6c 69 73 74 28 69 74 65 6d 29 2c 20  s = list(item), 
2ea0: 69 74 65 6d 20 3d 20 6c 69 73 74 28 6e 6f 64 65  item = list(node
2eb0: 20 72 65 76 6e 72 29 0a 09 23 20 53 6f 72 74 20   revnr)..# Sort 
2ec0: 62 79 20 6e 6f 64 65 20 61 6e 64 20 72 65 76 6e  by node and revn
2ed0: 72 20 2d 3e 20 54 72 75 6e 6b 20 72 65 76 69 73  r -> Trunk revis
2ee0: 69 6f 6e 73 20 63 6f 6d 65 20 66 69 72 73 74 2e  ions come first.
2ef0: 0a 09 72 65 74 75 72 6e 20 5b 6c 73 6f 72 74 20  ..return [lsort 
2f00: 2d 69 6e 64 65 78 20 31 20 2d 64 69 63 74 20 5b  -index 1 -dict [
2f10: 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 30 20 2d  lsort -index 0 -
2f20: 64 69 63 74 20 24 63 61 6e 64 69 64 61 74 65 73  dict $candidates
2f30: 5d 5d 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 74  ]].    }.    met
2f40: 68 6f 64 20 45 78 70 61 6e 64 31 20 7b 63 68 61  hod Expand1 {cha
2f50: 6e 20 64 69 72 20 6d 61 78 20 67 72 61 70 68 20  n dir max graph 
2f60: 6e 6f 64 65 7d 20 7b 0a 09 6c 6f 67 20 70 72 6f  node} {..log pro
2f70: 67 72 65 73 73 20 33 20 66 69 6c 65 20 24 6d 79  gress 3 file $my
2f80: 69 6d 70 6f 72 74 20 24 6d 61 78 20 3b 20 69 6e  import $max ; in
2f90: 63 72 20 6d 79 69 6d 70 6f 72 74 0a 0a 09 73 65  cr myimport...se
2fa0: 74 20 72 65 76 6e 72 20 20 20 20 20 20 20 20 20  t revnr         
2fb0: 20 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67    [$graph node g
2fc0: 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 0a  et $node revnr].
2fd0: 09 73 65 74 20 66 6e 61 6d 65 20 20 20 20 20 20  .set fname      
2fe0: 20 20 20 20 72 24 72 65 76 6e 72 0a 09 73 74 72      r$revnr..str
2ff0: 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e  uct::list assign
3000: 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65   [$graph node ge
3010: 74 20 24 6e 6f 64 65 20 74 65 78 74 5d 20 6f 66  t $node text] of
3020: 66 73 65 74 20 6c 65 6e 67 74 68 0a 0a 09 69 66  fset length...if
3030: 20 7b 24 6c 65 6e 67 74 68 20 3c 20 30 7d 20 7b   {$length < 0} {
3040: 0a 09 20 20 20 20 73 65 74 20 64 61 74 61 20 22  ..    set data "
3050: 22 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20  "..} else {..   
3060: 20 73 65 65 6b 20 24 63 68 61 6e 20 24 6f 66 66   seek $chan $off
3070: 73 65 74 20 73 74 61 72 74 0a 09 20 20 20 20 73  set start..    s
3080: 65 74 20 64 61 74 61 20 5b 73 74 72 69 6e 67 20  et data [string 
3090: 6d 61 70 20 7b 40 40 20 40 7d 20 5b 72 65 61 64  map {@@ @} [read
30a0: 20 24 63 68 61 6e 20 24 6c 65 6e 67 74 68 5d 5d   $chan $length]]
30b0: 0a 09 7d 0a 0a 09 69 66 20 7b 21 5b 24 67 72 61  ..}...if {![$gra
30c0: 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 69 73 74  ph node keyexist
30d0: 73 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f  s $node __base__
30e0: 5d 7d 20 7b 0a 09 20 20 20 20 23 20 46 75 6c 6c  ]} {..    # Full
30f0: 20 74 65 78 74 20 6e 6f 64 65 2e 20 47 65 74 20   text node. Get 
3100: 74 68 65 20 64 61 74 61 2c 20 64 65 63 6f 64 65  the data, decode
3110: 20 69 74 2c 20 61 6e 64 20 73 61 76 65 2e 0a 0a   it, and save...
3120: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38  .    log write 8
3130: 20 66 69 6c 65 20 7b 45 78 70 61 6e 64 69 6e 67   file {Expanding
3140: 20 3c 24 72 65 76 6e 72 3e 2c 20 66 75 6c 6c 20   <$revnr>, full 
3150: 74 65 78 74 7d 0a 0a 09 20 20 20 20 66 69 6c 65  text}...    file
3160: 75 74 69 6c 3a 3a 77 72 69 74 65 46 69 6c 65 20  util::writeFile 
3170: 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e  -translation bin
3180: 61 72 79 20 24 64 69 72 2f 24 66 6e 61 6d 65 20  ary $dir/$fname 
3190: 24 64 61 74 61 0a 09 7d 20 65 6c 73 65 20 7b 0a  $data..} else {.
31a0: 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e 6f 64  .    # Delta nod
31b0: 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73 20 74  e. __base__ is t
31c0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
31d0: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 09  ile containing..
31e0: 20 20 20 20 23 20 74 68 65 20 62 61 73 65 6c 69      # the baseli
31f0: 6e 65 2e 20 54 68 65 20 70 61 74 63 68 20 69 73  ne. The patch is
3200: 20 61 74 20 74 68 65 20 73 70 65 63 69 66 69 65   at the specifie
3210: 64 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 0a 09 20  d location of.. 
3220: 20 20 20 23 20 74 68 65 20 61 72 63 68 69 76 65     # the archive
3230: 20 66 69 6c 65 2e 0a 0a 09 20 20 20 20 73 65 74   file....    set
3240: 20 66 62 61 73 65 20 5b 24 67 72 61 70 68 20 6e   fbase [$graph n
3250: 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20 5f 5f  ode get $node __
3260: 62 61 73 65 5f 5f 5d 0a 09 20 20 20 20 6c 6f 67  base__]..    log
3270: 20 77 72 69 74 65 20 38 20 66 69 6c 65 20 7b 45   write 8 file {E
3280: 78 70 61 6e 64 69 6e 67 20 3c 24 72 65 76 6e 72  xpanding <$revnr
3290: 3e 2c 20 69 73 20 64 65 6c 74 61 20 6f 66 20 3c  >, is delta of <
32a0: 24 66 62 61 73 65 3e 7d 0a 0a 09 20 20 20 20 73  $fbase>}...    s
32b0: 65 74 20 62 61 73 65 20 5b 66 69 6c 65 75 74 69  et base [fileuti
32c0: 6c 3a 3a 63 61 74 20 2d 74 72 61 6e 73 6c 61 74  l::cat -translat
32d0: 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72 2f  ion binary $dir/
32e0: 24 66 62 61 73 65 5d 0a 0a 09 20 20 20 20 23 20  $fbase]...    # 
32f0: 57 72 69 74 69 6e 67 20 74 68 65 20 70 61 74 63  Writing the patc
3300: 68 20 74 6f 20 64 69 73 6b 20 69 73 20 6a 75 73  h to disk is jus
3310: 74 20 66 6f 72 20 62 65 74 74 65 72 0a 09 20 20  t for better..  
3320: 20 20 23 20 64 65 62 75 67 67 69 6e 67 2e 20 49    # debugging. I
3330: 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20 6f 74  t is not used ot
3340: 68 65 72 77 69 73 65 2e 0a 09 20 20 20 20 66 69  herwise...    fi
3350: 6c 65 75 74 69 6c 3a 3a 77 72 69 74 65 46 69 6c  leutil::writeFil
3360: 65 20 24 64 69 72 2f 72 70 61 74 63 68 20 24 64  e $dir/rpatch $d
3370: 61 74 61 0a 09 20 20 20 20 66 69 6c 65 75 74 69  ata..    fileuti
3380: 6c 3a 3a 77 72 69 74 65 46 69 6c 65 20 2d 74 72  l::writeFile -tr
3390: 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79  anslation binary
33a0: 20 24 64 69 72 2f 24 66 6e 61 6d 65 20 5c 0a 09   $dir/$fname \..
33b0: 09 5b 41 70 70 6c 79 20 24 62 61 73 65 20 24 64  .[Apply $base $d
33c0: 61 74 61 5d 0a 09 7d 0a 0a 09 23 20 50 6f 73 74  ata]..}...# Post
33d0: 20 74 6f 20 61 6c 6c 20 73 75 63 63 65 73 73 6f   to all successo
33e0: 72 73 20 74 68 61 74 20 74 68 65 20 6a 75 73 74  rs that the just
33f0: 20 67 65 6e 65 72 61 74 65 64 20 66 69 6c 65 20   generated file 
3400: 69 73 20 74 68 65 69 72 0a 09 23 20 62 61 73 65  is their..# base
3410: 6c 69 6e 65 2e 0a 0a 09 66 6f 72 65 61 63 68 20  line....foreach 
3420: 6f 75 74 20 5b 24 67 72 61 70 68 20 6e 6f 64 65  out [$graph node
3430: 73 20 2d 6f 75 74 20 24 6e 6f 64 65 5d 20 7b 0a  s -out $node] {.
3440: 09 20 20 20 20 24 67 72 61 70 68 20 6e 6f 64 65  .    $graph node
3450: 20 73 65 74 20 24 6f 75 74 20 5f 5f 62 61 73 65   set $out __base
3460: 5f 5f 20 24 66 6e 61 6d 65 0a 09 7d 0a 09 72 65  __ $fname..}..re
3470: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
3480: 70 72 6f 63 20 41 70 70 6c 79 20 7b 62 61 73 65  proc Apply {base
3490: 20 64 65 6c 74 61 7d 20 7b 0a 09 23 20 62 61 73   delta} {..# bas
34a0: 65 20 20 3d 20 62 61 73 65 20 74 65 78 74 2e 0a  e  = base text..
34b0: 09 23 20 64 65 6c 74 61 20 3d 20 64 65 6c 74 61  .# delta = delta
34c0: 20 69 6e 20 72 63 73 20 66 6f 72 6d 61 74 2e 0a   in rcs format..
34d0: 09 23 0a 09 23 20 42 6f 74 68 20 73 74 72 69 6e  .#..# Both strin
34e0: 67 73 20 61 72 65 20 75 6e 65 6e 63 6f 64 65 64  gs are unencoded
34f0: 2c 20 69 2e 65 2e 20 74 68 69 6e 67 73 20 6c 69  , i.e. things li
3500: 6b 65 20 40 40 2c 20 65 74 63 2e 20 68 61 76 65  ke @@, etc. have
3510: 0a 09 23 20 61 6c 72 65 61 64 79 20 62 65 65 6e  ..# already been
3520: 20 72 65 70 6c 61 63 65 64 20 77 69 74 68 20 74   replaced with t
3530: 68 65 69 72 20 70 72 6f 70 65 72 20 63 68 61 72  heir proper char
3540: 61 63 74 65 72 73 2e 0a 09 23 0a 09 23 20 52 65  acters...#..# Re
3550: 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68  turn value is th
3560: 65 20 70 61 74 63 68 65 64 20 74 65 78 74 2e 0a  e patched text..
3570: 0a 09 73 65 74 20 62 61 73 65 20 5b 73 70 6c 69  ..set base [spli
3580: 74 20 24 62 61 73 65 20 5c 6e 5d 0a 09 73 65 74  t $base \n]..set
3590: 20 62 6c 65 6e 20 5b 6c 6c 65 6e 67 74 68 20 24   blen [llength $
35a0: 62 61 73 65 5d 0a 09 73 65 74 20 6f 6f 66 66 20  base]..set ooff 
35b0: 30 0a 09 73 65 74 20 72 65 73 20 22 22 0a 0a 09  0..set res ""...
35c0: 73 65 74 20 6c 69 6e 65 73 20 20 5b 73 70 6c 69  set lines  [spli
35d0: 74 20 24 64 65 6c 74 61 20 5c 6e 5d 0a 09 73 65  t $delta \n]..se
35e0: 74 20 6e 6c 69 6e 65 73 20 5b 6c 6c 65 6e 67 74  t nlines [llengt
35f0: 68 20 24 6c 69 6e 65 73 5d 0a 0a 09 66 6f 72 20  h $lines]...for 
3600: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20  {set i 0} {$i < 
3610: 24 6e 6c 69 6e 65 73 7d 20 7b 7d 20 7b 0a 09 20  $nlines} {} {.. 
3620: 20 20 20 69 66 20 7b 21 5b 72 65 67 65 78 70 20     if {![regexp 
3630: 7b 5e 28 5b 61 64 5d 29 28 5c 64 2b 29 5c 73 28  {^([ad])(\d+)\s(
3640: 5c 64 2b 29 24 7d 20 5b 6c 69 6e 64 65 78 20 24  \d+)$} [lindex $
3650: 6c 69 6e 65 73 20 24 69 5d 20 2d 3e 20 63 6d 64  lines $i] -> cmd
3660: 20 73 6c 20 63 6e 5d 7d 20 7b 0a 09 09 74 72 6f   sl cn]} {...tro
3670: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 42  uble internal "B
3680: 61 64 20 65 64 20 63 6f 6d 6d 61 6e 64 20 27 5b  ad ed command '[
3690: 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69  lindex $lines $i
36a0: 5d 27 22 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20  ]'"..    }...   
36b0: 20 69 6e 63 72 20 69 0a 09 20 20 20 20 73 65 74   incr i..    set
36c0: 20 65 6c 20 5b 65 78 70 72 20 7b 24 73 6c 20 2b   el [expr {$sl +
36d0: 20 24 63 6e 7d 5d 0a 0a 09 20 20 20 20 73 77 69   $cn}]...    swi
36e0: 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 63  tch -exact -- $c
36f0: 6d 64 20 7b 0a 09 09 64 20 7b 0a 09 09 20 20 20  md {...d {...   
3700: 20 69 6e 63 72 20 73 6c 20 2d 31 0a 09 09 20 20   incr sl -1...  
3710: 20 20 69 6e 63 72 20 65 6c 20 2d 31 0a 09 09 20    incr el -1... 
3720: 20 20 20 69 66 20 7b 24 73 6c 20 3c 20 24 6f 6f     if {$sl < $oo
3730: 66 66 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e  ff} { trouble in
3740: 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e  ternal {Deletion
3750: 20 62 65 66 6f 72 65 20 6c 61 73 74 20 65 64 69   before last edi
3760: 74 7d 20 7d 0a 09 09 20 20 20 20 69 66 20 7b 24  t} }...    if {$
3770: 73 6c 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72  sl > $blen} { tr
3780: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b  ouble internal {
3790: 44 65 6c 65 74 69 6f 6e 20 70 61 73 74 20 66 69  Deletion past fi
37a0: 6c 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20 20 20  le end} }...    
37b0: 69 66 20 7b 24 65 6c 20 3e 20 24 62 6c 65 6e 7d  if {$el > $blen}
37c0: 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72   { trouble inter
37d0: 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e 20 62 65  nal {Deletion be
37e0: 79 6f 6e 64 20 66 69 6c 65 20 65 6e 64 7d 20 7d  yond file end} }
37f0: 0a 09 09 20 20 20 20 66 6f 72 65 61 63 68 20 78  ...    foreach x
3800: 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65 20 24   [lrange $base $
3810: 6f 6f 66 66 20 24 73 6c 5d 20 7b 20 6c 61 70 70  ooff $sl] { lapp
3820: 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 09 20  end res $x }... 
3830: 20 20 20 73 65 74 20 20 6f 6f 66 66 20 24 65 6c     set  ooff $el
3840: 0a 09 09 7d 0a 09 09 61 20 7b 0a 09 09 20 20 20  ...}...a {...   
3850: 20 69 66 20 7b 24 73 6c 20 3c 20 24 6f 6f 66 66   if {$sl < $ooff
3860: 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65  } { trouble inte
3870: 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20 62 65 66  rnal {Insert bef
3880: 6f 72 65 20 6c 61 73 74 20 65 64 69 74 7d 20 7d  ore last edit} }
3890: 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c 20 3e  ...    if {$sl >
38a0: 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c   $blen} { troubl
38b0: 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49 6e 73 65  e internal {Inse
38c0: 72 74 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64  rt past file end
38d0: 7d 20 7d 0a 0a 09 09 20 20 20 20 66 6f 72 65 61  } }....    forea
38e0: 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 62 61  ch x [lrange $ba
38f0: 73 65 20 24 6f 6f 66 66 20 24 73 6c 5d 20 20 20  se $ooff $sl]   
3900: 20 20 20 20 20 20 20 20 20 20 7b 20 6c 61 70 70            { lapp
3910: 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 09 20  end res $x }... 
3920: 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c 72     foreach x [lr
3930: 61 6e 67 65 20 24 6c 69 6e 65 73 20 24 69 20 5b  ange $lines $i [
3940: 65 78 70 72 20 7b 24 69 20 2b 20 24 63 6e 7d 5d  expr {$i + $cn}]
3950: 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20  ] { lappend res 
3960: 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74 20 6f  $x }...    set o
3970: 6f 66 66 20 24 73 6c 0a 09 09 20 20 20 20 69 6e  off $sl...    in
3980: 63 72 20 69 20 24 63 6e 0a 09 09 7d 0a 09 20 20  cr i $cn...}..  
3990: 20 20 7d 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20    }..}..foreach 
39a0: 78 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65 20  x [lrange $base 
39b0: 24 6f 6f 66 66 20 65 6e 64 5d 20 7b 20 6c 61 70  $ooff end] { lap
39c0: 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 72  pend res $x }..r
39d0: 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 24 72 65 73  eturn [join $res
39e0: 20 5c 6e 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20   \n].    }..    
39f0: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 32 20 7b  method Expand2 {
3a00: 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a 09 73  graph node} {..s
3a10: 65 74 20 72 65 76 6e 72 20 5b 24 67 72 61 70 68  et revnr [$graph
3a20: 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20   node get $node 
3a30: 72 65 76 6e 72 5d 0a 0a 09 23 20 46 69 72 73 74  revnr]...# First
3a40: 20 69 6d 70 6f 72 74 20 74 68 65 20 66 69 6c 65   import the file
3a50: 2e 0a 09 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70  ...lappend myimp
3a60: 6f 72 74 20 5b 6c 69 73 74 20 41 20 72 24 72 65  ort [list A r$re
3a70: 76 6e 72 20 7b 7d 5d 0a 0a 09 69 66 20 7b 5b 24  vnr {}]...if {[$
3a80: 67 72 61 70 68 20 6e 6f 64 65 20 6b 65 79 65 78  graph node keyex
3a90: 69 73 74 73 20 24 6e 6f 64 65 20 5f 5f 62 61 73  ists $node __bas
3aa0: 65 5f 5f 5d 7d 20 7b 0a 09 20 20 20 20 23 20 44  e__]} {..    # D
3ab0: 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 73  elta node. __bas
3ac0: 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65 20  e__ is the name 
3ad0: 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74  of the file cont
3ae0: 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74 68  aining..    # th
3af0: 65 20 62 61 73 65 6c 69 6e 65 2e 20 47 65 6e 65  e baseline. Gene
3b00: 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  rate instruction
3b10: 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 64 65 6c   to make the del
3b20: 74 61 20 61 73 0a 09 20 20 20 20 23 20 77 65 6c  ta as..    # wel
3b30: 6c 2e 0a 0a 09 20 20 20 20 73 65 74 20 66 62 61  l....    set fba
3b40: 73 65 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20  se [$graph node 
3b50: 67 65 74 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65  get $node __base
3b60: 5f 5f 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e 64  __]..    lappend
3b70: 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 73 74 20   myimport [list 
3b80: 44 20 72 24 72 65 76 6e 72 20 72 24 66 62 61 73  D r$revnr r$fbas
3b90: 65 5d 0a 09 7d 0a 0a 09 23 20 50 6f 73 74 20 74  e]..}...# Post t
3ba0: 6f 20 61 6c 6c 20 73 75 63 63 65 73 73 6f 72 73  o all successors
3bb0: 20 74 68 61 74 20 74 68 65 20 6a 75 73 74 20 67   that the just g
3bc0: 65 6e 65 72 61 74 65 64 20 66 69 6c 65 20 69 73  enerated file is
3bd0: 20 74 68 65 69 72 0a 09 23 20 62 61 73 65 6c 69   their..# baseli
3be0: 6e 65 2e 20 45 78 63 65 70 74 69 6f 6e 3a 20 54  ne. Exception: T
3bf0: 68 6f 73 65 20 77 68 69 63 68 20 61 76 65 20 61  hose which ave a
3c00: 6c 72 65 61 64 79 20 61 20 62 61 73 65 6c 69 6e  lready a baselin
3c10: 65 20 73 65 74 2e 0a 09 23 20 54 6f 67 65 74 68  e set...# Togeth
3c20: 65 72 20 77 69 74 68 20 74 68 65 20 73 6f 72 74  er with the sort
3c30: 69 6e 67 20 6f 66 20 74 72 75 6e 6b 20 72 65 76  ing of trunk rev
3c40: 69 73 69 6f 6e 73 20 66 69 72 73 74 20 74 68 65  isions first the
3c50: 20 74 72 75 6e 6b 0a 09 23 20 73 68 6f 75 6c 64   trunk..# should
3c60: 20 6f 6e 65 20 75 6e 69 6e 74 65 72 75 70 74 65   one uninterupte
3c70: 64 20 6c 69 6e 65 2c 20 77 69 74 68 20 62 72 61  d line, with bra
3c80: 6e 63 68 20 72 6f 6f 74 73 20 5f 6e 6f 74 5f 20  nch roots _not_ 
3c90: 64 65 6c 74 61 0a 09 23 20 63 6f 6d 70 72 65 73  delta..# compres
3ca0: 73 65 64 20 70 65 72 20 74 68 65 69 72 20 62 72  sed per their br
3cb0: 61 6e 63 68 65 73 2e 0a 0a 09 66 6f 72 65 61 63  anches....foreac
3cc0: 68 20 6f 75 74 20 5b 24 67 72 61 70 68 20 6e 6f  h out [$graph no
3cd0: 64 65 73 20 2d 6f 75 74 20 24 6e 6f 64 65 5d 20  des -out $node] 
3ce0: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 67 72 61  {..    if {[$gra
3cf0: 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 69 73 74  ph node keyexist
3d00: 73 20 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 5d  s $out __base__]
3d10: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20  } continue..    
3d20: 24 67 72 61 70 68 20 6e 6f 64 65 20 73 65 74 20  $graph node set 
3d30: 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 20 24 72  $out __base__ $r
3d40: 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  evnr..}..return.
3d50: 20 20 20 20 7d 0a 0a 20 20 20 20 76 61 72 69 61      }..    varia
3d60: 62 6c 65 20 6d 79 69 6d 70 6f 72 74 0a 0a 20 20  ble myimport..  
3d70: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
3d80: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
3d90: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
3da0: 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69   State..    vari
3db0: 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20 20 20  able myid       
3dc0: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 46 69         {} ; # Fi
3dd0: 6c 65 20 69 64 20 69 6e 20 74 68 65 20 70 65 72  le id in the per
3de0: 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a 20  sistent state.. 
3df0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 61     variable mypa
3e00: 74 68 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d  th            {}
3e10: 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68 65   ; # Path of the
3e20: 20 66 69 6c 65 27 73 20 72 63 73 20 61 72 63 68   file's rcs arch
3e30: 69 76 65 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  ive..    variabl
3e40: 65 20 6d 79 75 73 72 70 61 74 68 20 20 20 20 20  e myusrpath     
3e50: 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 68 20      {} ; # Path 
3e60: 6f 66 20 74 68 65 20 66 69 6c 65 20 61 73 20 73  of the file as s
3e70: 65 65 6e 20 62 79 20 75 73 65 72 73 2e 0a 20 20  een by users..  
3e80: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 65 78 65    variable myexe
3e90: 63 75 74 61 62 6c 65 20 20 20 20 20 20 30 20 20  cutable      0  
3ea0: 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67  ; # Boolean flag
3eb0: 20 27 66 69 6c 65 20 65 78 65 63 75 74 61 62 6c   'file executabl
3ec0: 65 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  e'..    variable
3ed0: 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20 20 20   myproject      
3ee0: 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65     {} ; # Refere
3ef0: 6e 63 65 20 74 6f 20 74 68 65 20 70 72 6f 6a 65  nce to the proje
3f00: 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 20  ct object.....  
3f10: 20 20 23 20 74 68 65 20 66 69 6c 65 20 62 65 6c    # the file bel
3f20: 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76 61 72  ongs to..    var
3f30: 69 61 62 6c 65 20 6d 79 72 65 76 20 2d 61 72 72  iable myrev -arr
3f40: 61 79 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 4d  ay      {} ; # M
3f50: 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d  aps revision num
3f60: 62 65 72 20 74 6f 20 74 68 65 0a 09 09 09 09 20  ber to the..... 
3f70: 20 20 20 23 20 61 73 73 6f 63 69 61 74 65 64 20     # associated 
3f80: 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2e  revision object.
3f90: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
3fa0: 72 65 76 69 73 69 6f 6e 73 20 20 20 20 20 20 20  revisions       
3fb0: 7b 7d 20 3b 20 23 20 53 61 6d 65 20 61 73 20 6d  {} ; # Same as m
3fc0: 79 72 65 76 2c 20 62 75 74 20 61 20 6c 69 73 74  yrev, but a list
3fd0: 2c 0a 09 09 09 09 20 20 20 20 23 20 67 69 76 69  ,.....    # givi
3fe0: 6e 67 20 75 73 20 74 68 65 20 6f 72 64 65 72 20  ng us the order 
3ff0: 6f 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76  of.....    # rev
4000: 69 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61 72 69  isions..    vari
4010: 61 62 6c 65 20 6d 79 61 69 64 20 20 20 20 20 20  able myaid      
4020: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61  -array {} ; # Ma
4030: 70 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65  p revision numbe
4040: 72 73 20 74 6f 20 74 68 65 20 69 64 0a 09 09 09  rs to the id....
4050: 09 20 20 20 20 23 20 6f 66 20 74 68 65 20 61 75  .    # of the au
4060: 74 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69 74 74  thor who committ
4070: 65 64 0a 09 09 09 09 20 20 20 20 23 20 69 74 2e  ed.....    # it.
4080: 20 54 68 69 73 20 69 73 20 6c 61 74 65 72 20 61   This is later a
4090: 67 67 72 65 67 61 74 65 64 0a 09 09 09 09 20 20  ggregated.....  
40a0: 20 20 23 20 77 69 74 68 20 63 6f 6d 6d 69 74 20    # with commit 
40b0: 6d 65 73 73 61 67 65 2c 20 62 72 61 6e 63 68 20  message, branch 
40c0: 6e 61 6d 65 0a 09 09 09 09 20 20 20 20 23 20 61  name.....    # a
40d0: 6e 64 20 70 72 6f 6a 65 63 74 20 69 64 20 66 6f  nd project id fo
40e0: 72 20 61 20 6d 65 74 61 20 69 64 2e 0a 20 20 20  r a meta id..   
40f0: 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65 61 64   variable myhead
4100: 72 65 76 6e 72 20 20 20 20 20 20 20 7b 7d 20 3b  revnr       {} ;
4110: 20 23 20 48 65 61 64 20 72 65 76 69 73 69 6f 6e   # Head revision
4120: 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65   (revision numbe
4130: 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  r).    variable 
4140: 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20 20 20  myprincipal     
4150: 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63 69 70    {} ; # Princip
4160: 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61 6e 63  al branch (branc
4170: 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09 09 20  h number)...... 
4180: 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20 74 6f     # Contrary to
4190: 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73 20 69   the name this i
41a0: 73 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 20  s the.....    # 
41b0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a  default branch..
41c0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64      variable myd
41d0: 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20 20 7b  ependencies    {
41e0: 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61 72 79  } ; # Dictionary
41f0: 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64   parent -> child
4200: 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65 63 6f  ,.....    # reco
4210: 72 64 73 20 70 72 69 6d 61 72 79 20 64 65 70 65  rds primary depe
4220: 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20 76 61  ndencies..    va
4230: 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74 65  riable myimporte
4240: 64 20 20 20 20 20 20 20 20 30 20 20 3b 20 23 20  d        0  ; # 
4250: 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 53 65  Boolean flag. Se
4260: 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  t if and only if
4270: 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 20 31  .....    # rev 1
4280: 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65 20 73  .1 of the file s
4290: 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20 20 20  eemingly.....   
42a0: 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65 64 20   # was imported 
42b0: 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64 65 64  instead of added
42c0: 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72 6d 61  .....    # norma
42d0: 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  lly..    variabl
42e0: 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20 20 20  e myroot        
42f0: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72      {} ; # Refer
4300: 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65 76 69  ence to the revi
4310: 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09 09 09  sion object.....
4320: 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20 74 68      # holding th
4330: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e  e root revision.
4340: 20 20 49 74 73 0a 09 09 09 09 20 20 20 20 23 20    Its.....    # 
4350: 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79 20 69  number usually i
4360: 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62 65 0a  s '1.1'. Can be.
4370: 09 09 09 09 20 20 20 20 23 20 61 20 64 69 66 66  ....    # a diff
4380: 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 62 65  erent number, be
4390: 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20 20 20  cause of.....   
43a0: 20 23 20 67 61 70 73 20 63 72 65 61 74 65 64 20   # gaps created 
43b0: 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20 2d 6f  via 'cvsadmin -o
43c0: 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  '..    variable 
43d0: 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72 72 61  mybranches -arra
43e0: 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 62 72  y {} ; # Maps br
43f0: 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f 20 74  anch number to t
4400: 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09 20 20  he symbol.....  
4410: 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c    # object handl
4420: 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 2e 0a  ing the branch..
4430: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74      variable myt
4440: 61 67 73 20 20 20 20 20 2d 61 72 72 61 79 20 7b  ags     -array {
4450: 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 73  } ; # Maps revis
4460: 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  ion number to th
4470: 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20 20 23  e list.....    #
4480: 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a 65 63   of symbol objec
4490: 74 73 20 66 6f 72 20 74 68 65 20 74 61 67 73 0a  ts for the tags.
44a0: 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63 69  ....    # associ
44b0: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 72 65  ated with the re
44c0: 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69  vision..    vari
44d0: 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73 20 20  able mysymbols  
44e0: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 65         {} ; # Se
44f0: 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20  t of the symbol 
4500: 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e 0a 09  names found in..
4510: 09 09 09 20 20 20 20 23 20 74 68 69 73 20 66 69  ...    # this fi
4520: 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  le...    variabl
4530: 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20 30 20  e mybranchcnt 0 
4540: 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f 72 20  ; # Counter for 
4550: 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72 65 63  branches, to rec
4560: 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20 20 20  ord their....   
4570: 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64 65 66    # order of def
4580: 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20 61 6c  inition. This al
4590: 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09 20 20  so defines....  
45a0: 20 20 20 23 20 74 68 65 69 72 20 6f 72 64 65 72     # their order
45b0: 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20 77 68   of creation, wh
45c0: 69 63 68 20 69 73 20 74 68 65 0a 09 09 09 20 20  ich is the....  
45d0: 20 20 20 23 20 72 65 76 65 72 73 65 20 6f 66 20     # reverse of 
45e0: 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 2e 65  definition.  I.e
45f0: 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09 09 20  . a smaller.... 
4600: 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d 65 61      # number mea
4610: 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61 72 6c  ns 'Defined earl
4620: 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09 09 20  ier', means.... 
4630: 20 20 20 20 23 20 27 43 72 65 61 74 65 64 20 6c      # 'Created l
4640: 61 74 65 72 27 2e 0a 0a 20 20 20 20 76 61 72 69  ater'...    vari
4650: 61 62 6c 65 20 6d 79 74 72 75 6e 6b 20 7b 7d 20  able mytrunk {} 
4660: 3b 20 23 20 44 69 72 65 63 74 20 72 65 66 65 72  ; # Direct refer
4670: 65 6e 63 65 20 74 6f 20 6d 79 70 72 6f 6a 65 63  ence to myprojec
4680: 74 20 2d 3e 20 74 72 75 6e 6b 2e 0a 20 20 20 20  t -> trunk..    
4690: 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74 73  variable myroots
46a0: 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20   {} ; # List of 
46b0: 72 6f 6f 74 73 20 69 6e 20 74 68 65 20 66 6f 72  roots in the for
46c0: 65 73 74 20 6f 66 0a 09 09 09 20 20 23 20 6c 6f  est of....  # lo
46d0: 64 27 73 2e 20 4f 62 6a 65 63 74 20 72 65 66 65  d's. Object refe
46e0: 72 65 6e 63 65 73 20 74 6f 20 72 65 76 69 73 69  rences to revisi
46f0: 6f 6e 73 20 61 6e 64 0a 09 09 09 20 20 23 20 62  ons and....  # b
4700: 72 61 6e 63 68 65 73 2e 20 54 68 65 20 6c 61 74  ranches. The lat
4710: 74 65 72 20 63 61 6e 20 61 70 70 65 61 72 20 77  ter can appear w
4720: 68 65 6e 20 74 68 65 79 0a 09 09 09 20 20 23 20  hen they....  # 
4730: 61 72 65 20 73 65 76 65 72 65 64 20 66 72 6f 6d  are severed from
4740: 20 74 68 65 69 72 20 70 61 72 65 6e 74 2e 0a 0a   their parent...
4750: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
4760: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
4770: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20  ###########.    
4780: 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68  ## Internal meth
4790: 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ods..    method 
47a0: 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d  RecordBranchComm
47b0: 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b  its {branches} {
47c0: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68  ..foreach branch
47d0: 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65 73 20  revnr $branches 
47e0: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61 74 63  {..    if {[catc
47f0: 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68  h {...set branch
4800: 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e   [$self Rev2Bran
4810: 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d  ch $branchrevnr]
4820: 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 73 65  ..    }]} {...se
4830: 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20  t branch [$self 
4840: 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e  AddUnlabeledBran
4850: 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63 68 6e  ch [rev 2branchn
4860: 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 5d  r $branchrevnr]]
4870: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20  ..    }...    # 
4880: 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d 6d 69  Record the commi
4890: 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76 69 73  t, just as revis
48a0: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 0a 09  ion number for..
48b0: 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f 63 65      # now. Proce
48c0: 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63  sBranchDependenc
48d0: 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e 64 20  ies will extend 
48e0: 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20 20 20  that ito a..    
48f0: 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63 74 20  # proper object 
4900: 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20 20 20  reference....   
4910: 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c   $branch setchil
4920: 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68 72 65  drevnr $branchre
4930: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  vnr..}..return. 
4940: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
4950: 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72 65 76   Rev2Branch {rev
4960: 6e 72 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 6e  nr} {.        in
4970: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b  tegrity assert {
4980: 21 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76  ![rev istrunkrev
4990: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 45 78 70  nr $revnr]} {Exp
49a0: 65 63 74 65 64 20 61 20 62 72 61 6e 63 68 20 72  ected a branch r
49b0: 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 7d 0a  evision number}.
49c0: 09 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63  .return $mybranc
49d0: 68 65 73 28 5b 72 65 76 20 32 62 72 61 6e 63 68  hes([rev 2branch
49e0: 6e 72 20 24 72 65 76 6e 72 5d 29 0a 20 20 20 20  nr $revnr]).    
49f0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64  }..    method Ad
4a00: 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63 68  dUnlabeledBranch
4a10: 20 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 72   {branchnr} {..r
4a20: 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 41 64 64  eturn [$self Add
4a30: 42 72 61 6e 63 68 20 75 6e 6c 61 62 65 6c 65 64  Branch unlabeled
4a40: 2d 24 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e  -$branchnr $bran
4a50: 63 68 6e 72 5d 0a 20 20 20 20 7d 0a 0a 20 20 20  chnr].    }..   
4a60: 20 6d 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63   method AddBranc
4a70: 68 20 7b 6e 61 6d 65 20 62 72 61 6e 63 68 6e 72  h {name branchnr
4a80: 7d 20 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65  } {..if {[info e
4a90: 78 69 73 74 73 20 6d 79 62 72 61 6e 63 68 65 73  xists mybranches
4aa0: 28 24 62 72 61 6e 63 68 6e 72 29 5d 7d 20 7b 0a  ($branchnr)]} {.
4ab0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31  .    log write 1
4ac0: 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61   file "In '$mypa
4ad0: 74 68 27 3a 20 42 72 61 6e 63 68 20 27 24 62 72  th': Branch '$br
4ae0: 61 6e 63 68 6e 72 27 20 6e 61 6d 65 64 20 27 5b  anchnr' named '[
4af0: 24 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 61  $mybranches($bra
4b00: 6e 63 68 6e 72 29 20 6e 61 6d 65 5d 27 22 0a 09  nchnr) name]'"..
4b10: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20      log write 1 
4b20: 66 69 6c 65 20 22 43 61 6e 6e 6f 74 20 68 61 76  file "Cannot hav
4b30: 65 20 73 65 63 6f 6e 64 20 6e 61 6d 65 20 27 24  e second name '$
4b40: 6e 61 6d 65 27 2c 20 69 67 6e 6f 72 69 6e 67 20  name', ignoring 
4b50: 69 74 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a  it"..    return.
4b60: 09 7d 0a 09 73 65 74 20 62 72 61 6e 63 68 20 5b  .}..set branch [
4b70: 73 79 6d 20 25 41 55 54 4f 25 20 62 72 61 6e 63  sym %AUTO% branc
4b80: 68 20 24 62 72 61 6e 63 68 6e 72 20 5b 24 6d 79  h $branchnr [$my
4b90: 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f  project getsymbo
4ba0: 6c 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a  l $name] $self].
4bb0: 09 24 62 72 61 6e 63 68 20 73 65 74 70 6f 73 69  .$branch setposi
4bc0: 74 69 6f 6e 20 5b 69 6e 63 72 20 6d 79 62 72 61  tion [incr mybra
4bd0: 6e 63 68 63 6e 74 5d 0a 09 73 65 74 20 6d 79 62  nchcnt]..set myb
4be0: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e  ranches($branchn
4bf0: 72 29 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75  r) $branch..retu
4c00: 72 6e 20 24 62 72 61 6e 63 68 0a 20 20 20 20 7d  rn $branch.    }
4c10: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64  ..    method Add
4c20: 54 61 67 20 7b 6e 61 6d 65 20 72 65 76 6e 72 7d  Tag {name revnr}
4c30: 20 7b 0a 09 73 65 74 20 74 61 67 20 5b 73 79 6d   {..set tag [sym
4c40: 20 25 41 55 54 4f 25 20 74 61 67 20 24 72 65 76   %AUTO% tag $rev
4c50: 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67  nr [$myproject g
4c60: 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20  etsymbol $name] 
4c70: 24 73 65 6c 66 5d 0a 09 6c 61 70 70 65 6e 64 20  $self]..lappend 
4c80: 6d 79 74 61 67 73 28 24 72 65 76 6e 72 29 20 24  mytags($revnr) $
4c90: 74 61 67 0a 09 72 65 74 75 72 6e 20 24 74 61 67  tag..return $tag
4ca0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
4cb0: 6f 64 20 52 65 63 6f 72 64 42 61 73 69 63 44 65  od RecordBasicDe
4cc0: 70 65 6e 64 65 6e 63 69 65 73 20 7b 72 65 76 6e  pendencies {revn
4cd0: 72 20 6e 65 78 74 7d 20 7b 0a 09 23 20 48 61 6e  r next} {..# Han
4ce0: 64 6c 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e  dle the revision
4cf0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 52   dependencies. R
4d00: 65 63 6f 72 64 20 74 68 65 6d 20 66 6f 72 20 6e  ecord them for n
4d10: 6f 77 2c 20 64 6f 0a 09 23 20 6e 6f 74 68 69 6e  ow, do..# nothin
4d20: 67 20 77 69 74 68 20 74 68 65 6d 20 79 65 74 2e  g with them yet.
4d30: 0a 0a 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e  ...# On the trun
4d40: 6b 20 74 68 65 20 27 6e 65 78 74 27 20 66 69 65  k the 'next' fie
4d50: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
4d60: 20 70 72 65 76 69 6f 75 73 0a 09 23 20 72 65 76   previous..# rev
4d70: 69 73 69 6f 6e 2c 20 69 2e 65 2e 20 74 68 65 20  ision, i.e. the 
4d80: 5f 70 61 72 65 6e 74 5f 20 6f 66 20 74 68 65 20  _parent_ of the 
4d90: 63 75 72 72 65 6e 74 20 6f 6e 65 2e 20 45 78 61  current one. Exa
4da0: 6d 70 6c 65 3a 0a 09 23 20 31 2e 36 27 73 20 6e  mple:..# 1.6's n
4db0: 65 78 74 20 69 73 20 31 2e 35 20 28 6d 6f 64 75  ext is 1.5 (modu
4dc0: 6c 6f 20 63 76 73 20 61 64 6d 69 6e 20 2d 6f 29  lo cvs admin -o)
4dd0: 2e 0a 0a 09 23 20 43 6f 6e 74 72 61 72 69 6c 79  ....# Contrarily
4de0: 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 74 68 65   on a branch the
4df0: 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f   'next' field po
4e00: 69 6e 74 73 20 74 6f 20 74 68 65 0a 09 23 20 70  ints to the..# p
4e10: 72 69 6d 61 72 79 20 5f 63 68 69 6c 64 5f 20 6f  rimary _child_ o
4e20: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 65  f the current re
4e30: 76 69 73 69 6f 6e 2e 20 41 73 20 65 78 61 6d 70  vision. As examp
4e40: 6c 65 2c 0a 09 23 20 31 2e 31 2e 33 2e 32 27 73  le,..# 1.1.3.2's
4e50: 20 27 6e 65 78 74 27 20 77 69 6c 6c 20 62 65 20   'next' will be 
4e60: 31 2e 31 2e 33 2e 33 2e 0a 0a 09 23 20 54 68 65  1.1.3.3....# The
4e70: 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20 61 63   'next' field ac
4e80: 74 75 61 6c 6c 79 20 61 6c 77 61 79 73 20 72 65  tually always re
4e90: 66 65 72 73 20 74 6f 20 74 68 65 20 72 65 76 69  fers to the revi
4ea0: 73 69 6f 6e 0a 09 23 20 63 6f 6e 74 61 69 6e 69  sion..# containi
4eb0: 6e 67 20 74 68 65 20 64 65 6c 74 61 20 6e 65 65  ng the delta nee
4ec0: 64 65 64 20 74 6f 20 72 65 74 72 69 65 76 65 20  ded to retrieve 
4ed0: 74 68 61 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a  that revision...
4ee0: 09 23 20 54 68 65 20 64 65 70 65 6e 64 65 6e 63  .# The dependenc
4ef0: 69 65 73 20 6e 65 65 64 65 64 20 68 65 72 65 20  ies needed here 
4f00: 61 72 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  are the logical 
4f10: 73 74 72 75 63 74 75 72 65 2c 0a 09 23 20 70 61  structure,..# pa
4f20: 72 65 6e 74 2f 63 68 69 6c 64 2c 20 61 6e 64 20  rent/child, and 
4f30: 6e 6f 74 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e  not the implemen
4f40: 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74  tation dependent
4f50: 20 64 65 6c 74 61 0a 09 23 20 70 6f 69 6e 74 65   delta..# pointe
4f60: 72 73 2e 0a 0a 09 69 66 20 7b 24 6e 65 78 74 20  rs....if {$next 
4f70: 65 71 20 22 22 7d 20 72 65 74 75 72 6e 0a 09 23  eq ""} return..#
4f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4f90: 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74            parent
4fa0: 20 2d 3e 20 63 68 69 6c 64 0a 09 69 66 20 7b 5b   -> child..if {[
4fb0: 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72  rev istrunkrevnr
4fc0: 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20   $revnr]} {..   
4fd0: 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 70 65 6e   lappend mydepen
4fe0: 64 65 6e 63 69 65 73 20 24 6e 65 78 74 20 24 72  dencies $next $r
4ff0: 65 76 6e 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  evnr..} else {..
5000: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 64 65      lappend myde
5010: 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65 76 6e  pendencies $revn
5020: 72 20 24 6e 65 78 74 0a 09 7d 0a 09 72 65 74 75  r $next..}..retu
5030: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
5040: 74 68 6f 64 20 50 72 6f 63 65 73 73 50 72 69 6d  thod ProcessPrim
5050: 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65 73 20  aryDependencies 
5060: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 70  {} {..foreach {p
5070: 61 72 65 6e 74 72 65 76 6e 72 20 63 68 69 6c 64  arentrevnr child
5080: 72 65 76 6e 72 7d 20 24 6d 79 64 65 70 65 6e 64  revnr} $mydepend
5090: 65 6e 63 69 65 73 20 7b 0a 09 20 20 20 20 73 65  encies {..    se
50a0: 74 20 70 61 72 65 6e 74 20 24 6d 79 72 65 76 28  t parent $myrev(
50b0: 24 70 61 72 65 6e 74 72 65 76 6e 72 29 0a 09 20  $parentrevnr).. 
50c0: 20 20 20 73 65 74 20 63 68 69 6c 64 20 20 24 6d     set child  $m
50d0: 79 72 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72  yrev($childrevnr
50e0: 29 0a 09 20 20 20 20 24 70 61 72 65 6e 74 20 73  )..    $parent s
50f0: 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 09  etchild $child..
5100: 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 61      $child setpa
5110: 72 65 6e 74 20 24 70 61 72 65 6e 74 0a 09 7d 0a  rent $parent..}.
5120: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
5130: 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73     method Proces
5140: 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63  sBranchDependenc
5150: 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63  ies {} {..foreac
5160: 68 20 7b 62 72 61 6e 63 68 6e 72 20 62 72 61 6e  h {branchnr bran
5170: 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d  ch} [array get m
5180: 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 20 20  ybranches] {..  
5190: 20 20 73 65 74 20 72 65 76 6e 72 20 5b 24 62 72    set revnr [$br
51a0: 61 6e 63 68 20 70 61 72 65 6e 74 72 65 76 6e 72  anch parentrevnr
51b0: 5d 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e  ]...    if {![in
51c0: 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28  fo exists myrev(
51d0: 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 6c 6f  $revnr)]} {...lo
51e0: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22  g write 1 file "
51f0: 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 54 68  In '$mypath': Th
5200: 65 20 62 72 61 6e 63 68 20 27 5b 24 62 72 61 6e  e branch '[$bran
5210: 63 68 20 6e 61 6d 65 5d 27 20 72 65 66 65 72 65  ch name]' refere
5220: 6e 63 65 73 22 0a 09 09 6c 6f 67 20 77 72 69 74  nces"...log writ
5230: 65 20 31 20 66 69 6c 65 20 22 74 68 65 20 62 6f  e 1 file "the bo
5240: 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27 24 72  gus revision '$r
5250: 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c 20 62  evnr' and will b
5260: 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09 24 62  e ignored."...$b
5270: 72 61 6e 63 68 20 64 65 73 74 72 6f 79 0a 09 09  ranch destroy...
5280: 75 6e 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73  unset mybranches
5290: 28 24 62 72 61 6e 63 68 6e 72 29 0a 09 20 20 20  ($branchnr)..   
52a0: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20   } else {...set 
52b0: 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 76 6e  rev $myrev($revn
52c0: 72 29 0a 09 09 24 72 65 76 20 61 64 64 62 72 61  r)...$rev addbra
52d0: 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09 24 62  nch $branch...$b
52e0: 72 61 6e 63 68 20 73 65 74 70 61 72 65 6e 74 20  ranch setparent 
52f0: 24 72 65 76 0a 0a 09 09 23 20 49 66 20 72 65 76  $rev....# If rev
5300: 69 73 69 6f 6e 73 20 77 65 72 65 20 63 6f 6d 6d  isions were comm
5310: 69 74 74 65 64 20 6f 6e 20 74 68 65 20 62 72 61  itted on the bra
5320: 6e 63 68 20 77 65 20 73 74 6f 72 65 20 61 0a 09  nch we store a..
5330: 09 23 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20  .# reference to 
5340: 74 68 65 20 62 72 61 6e 63 68 20 74 68 65 72 65  the branch there
5350: 2c 20 61 6e 64 20 66 75 72 74 68 65 72 20 64 65  , and further de
5360: 63 6c 61 72 65 0a 09 09 23 20 74 68 65 20 66 69  clare...# the fi
5370: 72 73 74 20 63 68 69 6c 64 27 73 20 70 61 72 65  rst child's pare
5380: 6e 74 20 74 6f 20 62 65 20 62 72 61 6e 63 68 27  nt to be branch'
5390: 73 20 70 61 72 65 6e 74 2c 20 61 6e 64 0a 09 09  s parent, and...
53a0: 23 20 6c 69 73 74 20 74 68 69 73 20 63 68 69 6c  # list this chil
53b0: 64 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  d in the parent 
53c0: 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 09 69 66 20  revision.....if 
53d0: 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 63 68 69  {[$branch haschi
53e0: 6c 64 72 65 76 5d 7d 20 7b 0a 09 09 20 20 20 20  ldrev]} {...    
53f0: 73 65 74 20 63 68 69 6c 64 72 65 76 6e 72 20 5b  set childrevnr [
5400: 24 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 76  $branch childrev
5410: 6e 72 5d 0a 09 09 20 20 20 20 73 65 74 20 63 68  nr]...    set ch
5420: 69 6c 64 20 24 6d 79 72 65 76 28 24 63 68 69 6c  ild $myrev($chil
5430: 64 72 65 76 6e 72 29 0a 09 09 20 20 20 20 24 62  drevnr)...    $b
5440: 72 61 6e 63 68 20 73 65 74 63 68 69 6c 64 20 24  ranch setchild $
5450: 63 68 69 6c 64 0a 0a 09 09 20 20 20 20 24 63 68  child....    $ch
5460: 69 6c 64 20 73 65 74 70 61 72 65 6e 74 62 72 61  ild setparentbra
5470: 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09 20 20  nch $branch...  
5480: 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 72 65    $child setpare
5490: 6e 74 20 20 20 20 20 20 20 24 72 65 76 0a 09 09  nt       $rev...
54a0: 20 20 20 20 24 72 65 76 20 61 64 64 63 68 69 6c      $rev addchil
54b0: 64 6f 6e 62 72 61 6e 63 68 20 24 63 68 69 6c 64  donbranch $child
54c0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  ...}..    }..}..
54d0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
54e0: 20 20 6d 65 74 68 6f 64 20 53 6f 72 74 42 72 61    method SortBra
54f0: 6e 63 68 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65  nches {} {..fore
5500: 61 63 68 20 7b 72 65 76 6e 72 20 72 65 76 7d 20  ach {revnr rev} 
5510: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 72 65 76  [array get myrev
5520: 5d 20 7b 20 24 72 65 76 20 73 6f 72 74 62 72 61  ] { $rev sortbra
5530: 6e 63 68 65 73 20 7d 0a 09 72 65 74 75 72 6e 0a  nches }..return.
5540: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
5550: 64 20 50 72 6f 63 65 73 73 54 61 67 44 65 70 65  d ProcessTagDepe
5560: 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66  ndencies {} {..f
5570: 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 74 61  oreach {revnr ta
5580: 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65  glist} [array ge
5590: 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20  t mytags] {..   
55a0: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
55b0: 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29  ts myrev($revnr)
55c0: 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 20 5b 6c 6c  ]} {...set n [ll
55d0: 65 6e 67 74 68 20 24 74 61 67 6c 69 73 74 5d 0a  ength $taglist].
55e0: 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69  ..log write 1 fi
55f0: 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27  le "In '$mypath'
5600: 3a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  : The following 
5610: 5b 6e 73 70 20 24 6e 20 74 61 67 5d 20 72 65 66  [nsp $n tag] ref
5620: 65 72 65 6e 63 65 22 0a 09 09 6c 6f 67 20 77 72  erence"...log wr
5630: 69 74 65 20 31 20 66 69 6c 65 20 22 74 68 65 20  ite 1 file "the 
5640: 62 6f 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27  bogus revision '
5650: 24 72 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c  $revnr' and will
5660: 20 62 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09   be ignored."...
5670: 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67  foreach tag $tag
5680: 6c 69 73 74 20 7b 0a 09 09 20 20 20 20 6c 6f 67  list {...    log
5690: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 20   write 1 file " 
56a0: 20 20 20 5b 24 74 61 67 20 6e 61 6d 65 5d 22 0a     [$tag name]".
56b0: 09 09 20 20 20 20 24 74 61 67 20 64 65 73 74 72  ..    $tag destr
56c0: 6f 79 0a 09 09 7d 0a 09 09 75 6e 73 65 74 20 6d  oy...}...unset m
56d0: 79 74 61 67 73 28 24 72 65 76 6e 72 29 0a 09 20  ytags($revnr).. 
56e0: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65     } else {...se
56f0: 74 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 65  t rev $myrev($re
5700: 76 6e 72 29 0a 09 09 66 6f 72 65 61 63 68 20 74  vnr)...foreach t
5710: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09  ag $taglist {...
5720: 20 20 20 20 24 72 65 76 20 61 64 64 74 61 67 20      $rev addtag 
5730: 20 20 20 24 74 61 67 0a 09 09 20 20 20 20 24 74     $tag...    $t
5740: 61 67 20 73 65 74 74 61 67 72 65 76 20 24 72 65  ag settagrev $re
5750: 76 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a  v...}..    }..}.
5760: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
5770: 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d     method Determ
5780: 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 73 69  ineTheRootRevisi
5790: 6f 6e 20 7b 7d 20 7b 0a 09 23 20 54 68 65 20 72  on {} {..# The r
57a0: 6f 6f 74 20 69 73 20 74 68 65 20 6f 6e 65 20 72  oot is the one r
57b0: 65 76 69 73 69 6f 6e 20 77 68 69 63 68 20 68 61  evision which ha
57c0: 73 20 6e 6f 20 70 61 72 65 6e 74 2e 20 42 79 0a  s no parent. By.
57d0: 09 23 20 63 68 65 63 6b 69 6e 67 20 61 6c 6c 20  .# checking all 
57e0: 72 65 76 69 73 69 6f 6e 73 20 77 65 20 65 6e 73  revisions we ens
57f0: 75 72 65 20 74 68 61 74 20 77 65 20 63 61 6e 20  ure that we can 
5800: 64 65 74 65 63 74 20 61 6e 64 0a 09 23 20 72 65  detect and..# re
5810: 70 6f 72 74 20 74 68 65 20 63 61 73 65 20 6f 66  port the case of
5820: 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 2e   multiple roots.
5830: 20 57 69 74 68 6f 75 74 20 74 68 61 74 20 77 65   Without that we
5840: 20 63 6f 75 6c 64 0a 09 23 20 73 69 6d 70 6c 79   could..# simply
5850: 20 74 61 6b 65 20 6f 6e 65 20 72 65 76 69 73 69   take one revisi
5860: 6f 6e 20 61 6e 64 20 66 6f 6c 6c 6f 77 20 74 68  on and follow th
5870: 65 20 70 61 72 65 6e 74 20 6c 69 6e 6b 73 20 74  e parent links t
5880: 6f 0a 09 23 20 74 68 65 69 72 20 72 6f 6f 74 20  o..# their root 
5890: 28 73 69 63 21 29 2e 0a 0a 09 66 6f 72 65 61 63  (sic!)....foreac
58a0: 68 20 7b 72 65 76 6e 72 20 72 65 76 7d 20 5b 61  h {revnr rev} [a
58b0: 72 72 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20  rray get myrev] 
58c0: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 65 76  {..    if {[$rev
58d0: 20 68 61 73 70 61 72 65 6e 74 5d 7d 20 63 6f 6e   hasparent]} con
58e0: 74 69 6e 75 65 0a 09 20 20 20 20 69 6e 74 65 67  tinue..    integ
58f0: 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 6d 79  rity assert {$my
5900: 72 6f 6f 74 20 65 71 20 22 22 7d 20 7b 4d 75 6c  root eq ""} {Mul
5910: 74 69 70 6c 65 20 72 6f 6f 74 20 72 65 76 69 73  tiple root revis
5920: 69 6f 6e 73 20 66 6f 75 6e 64 7d 0a 09 20 20 20  ions found}..   
5930: 20 73 65 74 20 6d 79 72 6f 6f 74 20 24 72 65 76   set myroot $rev
5940: 0a 09 7d 0a 0a 09 23 20 49 6e 20 74 68 65 20 66  ..}...# In the f
5950: 75 74 75 72 65 20 77 65 20 61 6c 73 6f 20 6e 65  uture we also ne
5960: 65 64 20 61 20 6c 69 73 74 2c 20 61 73 20 62 72  ed a list, as br
5970: 61 6e 63 68 65 73 20 63 61 6e 20 62 65 63 6f 6d  anches can becom
5980: 65 0a 09 23 20 73 65 76 65 72 65 64 20 66 72 6f  e..# severed fro
5990: 6d 20 74 68 65 69 72 20 70 61 72 65 6e 74 2c 20  m their parent, 
59a0: 6d 61 6b 69 6e 67 20 74 68 65 6d 20 74 68 65 69  making them thei
59b0: 72 20 6f 77 6e 20 72 6f 6f 74 2e 0a 09 73 65 74  r own root...set
59c0: 20 6d 79 72 6f 6f 74 73 20 5b 6c 69 73 74 20 24   myroots [list $
59d0: 6d 79 72 6f 6f 74 5d 0a 09 72 65 74 75 72 6e 0a  myroot]..return.
59e0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
59f0: 64 20 44 65 74 65 72 6d 69 6e 65 52 65 76 69 73  d DetermineRevis
5a00: 69 6f 6e 4f 70 65 72 61 74 69 6f 6e 73 20 7b 7d  ionOperations {}
5a10: 20 7b 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20   {..foreach rev 
5a20: 24 6d 79 72 65 76 69 73 69 6f 6e 73 20 7b 20 24  $myrevisions { $
5a30: 72 65 76 20 64 65 74 65 72 6d 69 6e 65 6f 70 65  rev determineope
5a40: 72 61 74 69 6f 6e 20 7d 0a 09 72 65 74 75 72 6e  ration }..return
5a50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
5a60: 6f 64 20 44 65 74 65 72 6d 69 6e 65 4c 69 6e 65  od DetermineLine
5a70: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b  sOfDevelopment {
5a80: 7d 20 7b 0a 09 23 20 46 6f 72 20 72 65 76 69 73  } {..# For revis
5a90: 69 6f 6e 73 20 74 68 69 73 20 68 61 73 20 62 65  ions this has be
5aa0: 65 6e 20 64 6f 6e 65 20 61 6c 72 65 61 64 79 2c  en done already,
5ab0: 20 69 6e 20 27 65 78 74 65 6e 64 27 2e 20 4e 6f   in 'extend'. No
5ac0: 77 0a 09 23 20 77 65 20 64 6f 20 74 68 69 73 20  w..# we do this 
5ad0: 66 6f 72 20 74 68 65 20 62 72 61 6e 63 68 65 73  for the branches
5ae0: 20 61 6e 64 20 74 61 67 73 2e 0a 0a 09 66 6f 72   and tags....for
5af0: 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20  each {_ branch} 
5b00: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62 72 61  [array get mybra
5b10: 6e 63 68 65 73 5d 20 7b 0a 09 20 20 20 20 24 62  nches] {..    $b
5b20: 72 61 6e 63 68 20 73 65 74 6c 6f 64 20 5b 24 73  ranch setlod [$s
5b30: 65 6c 66 20 47 65 74 4c 4f 44 20 5b 24 62 72 61  elf GetLOD [$bra
5b40: 6e 63 68 20 70 61 72 65 6e 74 72 65 76 6e 72 5d  nch parentrevnr]
5b50: 5d 0a 09 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b  ]..}...foreach {
5b60: 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61  _ taglist} [arra
5b70: 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a  y get mytags] {.
5b80: 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 61 67  .    foreach tag
5b90: 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 24 74   $taglist {...$t
5ba0: 61 67 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66  ag setlod [$self
5bb0: 20 47 65 74 4c 4f 44 20 5b 24 74 61 67 20 74 61   GetLOD [$tag ta
5bc0: 67 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a  grevnr]]..    }.
5bd0: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
5be0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 47 65 74  ..    method Get
5bf0: 4c 4f 44 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 69  LOD {revnr} {..i
5c00: 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72  f {[rev istrunkr
5c10: 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a  evnr $revnr]} {.
5c20: 09 20 20 20 20 72 65 74 75 72 6e 20 24 6d 79 74  .    return $myt
5c30: 72 75 6e 6b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  runk..} else {..
5c40: 20 20 20 20 72 65 74 75 72 6e 20 5b 24 73 65 6c      return [$sel
5c50: 66 20 52 65 76 32 42 72 61 6e 63 68 20 24 72 65  f Rev2Branch $re
5c60: 76 6e 72 5d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20  vnr]..}.    }.. 
5c70: 20 20 20 6d 65 74 68 6f 64 20 48 61 6e 64 6c 65     method Handle
5c80: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42  NonTrunkDefaultB
5c90: 72 61 6e 63 68 20 7b 7d 20 7b 0a 09 73 65 74 20  ranch {} {..set 
5ca0: 72 65 76 6c 69 73 74 20 5b 24 73 65 6c 66 20 4e  revlist [$self N
5cb0: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 65  onTrunkDefaultRe
5cc0: 76 69 73 69 6f 6e 73 5d 0a 09 69 66 20 7b 21 5b  visions]..if {![
5cd0: 6c 6c 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74  llength $revlist
5ce0: 5d 7d 20 72 65 74 75 72 6e 0a 0a 09 24 73 65 6c  ]} return...$sel
5cf0: 66 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b  f AdjustNonTrunk
5d00: 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 24 72  DefaultBranch $r
5d10: 65 76 6c 69 73 74 0a 09 24 73 65 6c 66 20 43 68  evlist..$self Ch
5d20: 65 63 6b 4c 4f 44 73 0a 09 72 65 74 75 72 6e 0a  eckLODs..return.
5d30: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
5d40: 64 20 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c  d NonTrunkDefaul
5d50: 74 52 65 76 69 73 69 6f 6e 73 20 7b 7d 20 7b 0a  tRevisions {} {.
5d60: 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 20  .# From cvs2svn 
5d70: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78  the following ex
5d80: 70 6c 61 6e 61 74 69 6f 6e 20 28 77 69 74 68 20  planation (with 
5d90: 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 0a 09 23  modifications..#
5da0: 20 66 6f 72 20 6f 75 72 20 61 6c 67 6f 72 69 74   for our algorit
5db0: 68 6d 29 3a 0a 0a 09 23 20 44 65 74 65 72 6d 69  hm):...# Determi
5dc0: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 72 65  ne whether there
5dd0: 20 61 72 65 20 61 6e 79 20 6e 6f 6e 2d 74 72 75   are any non-tru
5de0: 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  nk default branc
5df0: 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a  h..# revisions..
5e00: 0a 09 23 20 49 66 20 61 20 6e 6f 6e 2d 74 72 75  ..# If a non-tru
5e10: 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  nk default branc
5e20: 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  h is determined 
5e30: 74 6f 20 68 61 76 65 20 65 78 69 73 74 65 64 2c  to have existed,
5e40: 0a 09 23 20 72 65 74 75 72 6e 20 61 20 6c 69 73  ..# return a lis
5e50: 74 20 6f 66 20 6f 62 6a 65 63 74 73 20 66 6f 72  t of objects for
5e60: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 74   all revisions t
5e70: 68 61 74 20 77 65 72 65 20 6f 6e 63 65 0a 09 23  hat were once..#
5e80: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
5e90: 6c 74 20 72 65 76 69 73 69 6f 6e 73 2c 20 69 6e  lt revisions, in
5ea0: 20 64 65 70 65 6e 64 65 6e 63 79 20 6f 72 64 65   dependency orde
5eb0: 72 20 28 69 2e 65 2e 20 72 6f 6f 74 0a 09 23 20  r (i.e. root..# 
5ec0: 66 69 72 73 74 29 2e 0a 0a 09 23 20 54 68 65 72  first)....# Ther
5ed0: 65 20 61 72 65 20 74 77 6f 20 63 61 73 65 73 20  e are two cases 
5ee0: 74 6f 20 68 61 6e 64 6c 65 3a 0a 0a 09 23 20 4f  to handle:...# O
5ef0: 6e 65 20 63 61 73 65 20 69 73 20 73 69 6d 70 6c  ne case is simpl
5f00: 65 2e 20 20 54 68 65 20 52 43 53 20 66 69 6c 65  e.  The RCS file
5f10: 20 6c 69 73 74 73 20 61 20 64 65 66 61 75 6c 74   lists a default
5f20: 20 62 72 61 6e 63 68 0a 09 23 20 65 78 70 6c 69   branch..# expli
5f30: 63 69 74 6c 79 20 69 6e 20 69 74 73 20 68 65 61  citly in its hea
5f40: 64 65 72 2c 20 73 75 63 68 20 61 73 20 27 31 2e  der, such as '1.
5f50: 31 2e 31 27 2e 20 20 49 6e 20 74 68 69 73 20 63  1.1'.  In this c
5f60: 61 73 65 2c 20 77 65 0a 09 23 20 6b 6e 6f 77 20  ase, we..# know 
5f70: 74 68 61 74 20 65 76 65 72 79 20 72 65 76 69 73  that every revis
5f80: 69 6f 6e 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f  ion on the vendo
5f90: 72 20 62 72 61 6e 63 68 20 69 73 20 74 6f 20 62  r branch is to b
5fa0: 65 0a 09 23 20 74 72 65 61 74 65 64 20 61 73 20  e..# treated as 
5fb0: 68 65 61 64 20 6f 66 20 74 72 75 6e 6b 20 61 74  head of trunk at
5fc0: 20 74 68 61 74 20 70 6f 69 6e 74 20 69 6e 20 74   that point in t
5fd0: 69 6d 65 2e 0a 0a 09 23 20 42 75 74 20 74 68 65  ime....# But the
5fe0: 72 65 27 73 20 61 6c 73 6f 20 61 20 64 65 67 65  re's also a dege
5ff0: 6e 65 72 61 74 65 20 63 61 73 65 2e 20 20 54 68  nerate case.  Th
6000: 65 20 52 43 53 20 66 69 6c 65 20 64 6f 65 73 20  e RCS file does 
6010: 6e 6f 74 0a 09 23 20 63 75 72 72 65 6e 74 6c 79  not..# currently
6020: 20 68 61 76 65 20 61 20 64 65 66 61 75 6c 74 20   have a default 
6030: 62 72 61 6e 63 68 2c 20 79 65 74 20 77 65 20 63  branch, yet we c
6040: 61 6e 20 64 65 64 75 63 65 20 74 68 61 74 20 66  an deduce that f
6050: 6f 72 0a 09 23 20 73 6f 6d 65 20 70 65 72 69 6f  or..# some perio
6060: 64 20 69 6e 20 74 68 65 20 70 61 73 74 20 69 74  d in the past it
6070: 20 70 72 6f 62 61 62 6c 79 20 2a 64 69 64 2a 20   probably *did* 
6080: 68 61 76 65 20 6f 6e 65 2e 20 20 46 6f 72 0a 09  have one.  For..
6090: 23 20 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66  # example, the f
60a0: 69 6c 65 20 68 61 73 20 76 65 6e 64 6f 72 20 72  ile has vendor r
60b0: 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 31  evisions 1.1.1.1
60c0: 20 2d 3e 20 31 2e 31 2e 31 2e 39 36 2c 0a 09 23   -> 1.1.1.96,..#
60d0: 20 61 6c 6c 20 6f 66 20 77 68 69 63 68 20 61 72   all of which ar
60e0: 65 20 64 61 74 65 64 20 62 65 66 6f 72 65 20 31  e dated before 1
60f0: 2e 32 2c 20 61 6e 64 20 74 68 65 6e 20 69 74 20  .2, and then it 
6100: 68 61 73 20 31 2e 31 2e 31 2e 39 37 0a 09 23 20  has 1.1.1.97..# 
6110: 2d 3e 20 31 2e 31 2e 31 2e 31 30 30 20 64 61 74  -> 1.1.1.100 dat
6120: 65 64 20 61 66 74 65 72 20 31 2e 32 2e 20 20 49  ed after 1.2.  I
6130: 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 65 20  n this case, we 
6140: 73 68 6f 75 6c 64 0a 09 23 20 72 65 63 6f 72 64  should..# record
6150: 20 31 2e 31 2e 31 2e 39 36 20 61 73 20 74 68 65   1.1.1.96 as the
6160: 20 6c 61 73 74 20 76 65 6e 64 6f 72 20 72 65 76   last vendor rev
6170: 69 73 69 6f 6e 20 74 6f 20 68 61 76 65 20 62 65  ision to have be
6180: 65 6e 20 74 68 65 0a 09 23 20 68 65 61 64 20 6f  en the..# head o
6190: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72  f the default br
61a0: 61 6e 63 68 2e 0a 0a 09 69 66 20 7b 24 6d 79 70  anch....if {$myp
61b0: 72 69 6e 63 69 70 61 6c 20 6e 65 20 22 22 7d 20  rincipal ne ""} 
61c0: 7b 0a 09 20 20 20 20 23 20 54 68 65 72 65 20 69  {..    # There i
61d0: 73 20 73 74 69 6c 6c 20 61 20 64 65 66 61 75 6c  s still a defaul
61e0: 74 20 62 72 61 6e 63 68 3b 20 74 68 61 74 20 6d  t branch; that m
61f0: 65 61 6e 73 20 74 68 61 74 20 61 6c 6c 0a 09 20  eans that all.. 
6200: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 20 6f     # revisions o
6210: 6e 20 74 68 61 74 20 62 72 61 6e 63 68 20 67 65  n that branch ge
6220: 74 20 6d 61 72 6b 65 64 2e 0a 0a 09 20 20 20 20  t marked....    
6230: 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69 6c 65  log write 5 file
6240: 20 22 46 6f 75 6e 64 20 65 78 70 6c 69 63 69 74   "Found explicit
6250: 6c 79 20 6d 61 72 6b 65 64 20 4e 54 44 42 22 0a  ly marked NTDB".
6260: 0a 09 20 20 20 20 73 65 74 20 72 6e 65 78 74 20  ..    set rnext 
6270: 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  [$myroot child].
6280: 09 20 20 20 20 69 66 20 7b 24 72 6e 65 78 74 20  .    if {$rnext 
6290: 6e 65 20 22 22 7d 20 7b 0a 09 09 74 72 6f 75 62  ne ""} {...troub
62a0: 6c 65 20 66 61 74 61 6c 20 22 46 69 6c 65 20 77  le fatal "File w
62b0: 69 74 68 20 64 65 66 61 75 6c 74 20 62 72 61 6e  ith default bran
62c0: 63 68 20 24 6d 79 70 72 69 6e 63 69 70 61 6c 20  ch $myprincipal 
62d0: 61 6c 73 6f 20 68 61 73 20 72 65 76 69 73 69 6f  also has revisio
62e0: 6e 20 5b 24 72 6e 65 78 74 20 72 65 76 6e 72 5d  n [$rnext revnr]
62f0: 22 0a 09 09 72 65 74 75 72 6e 0a 09 20 20 20 20  "...return..    
6300: 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 20  }...    set rev 
6310: 5b 24 6d 79 62 72 61 6e 63 68 65 73 28 24 6d 79  [$mybranches($my
6320: 70 72 69 6e 63 69 70 61 6c 29 20 63 68 69 6c 64  principal) child
6330: 5d 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 7b  ]..    set res {
6340: 7d 0a 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24  }...    while {$
6350: 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c  rev ne ""} {...l
6360: 61 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a  append res $rev.
6370: 09 09 73 65 74 20 72 65 76 20 5b 24 72 65 76 20  ..set rev [$rev 
6380: 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 0a 09  child]..    }...
6390: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a      return $res.
63a0: 0a 09 7d 20 65 6c 73 65 69 66 20 7b 24 6d 79 69  ..} elseif {$myi
63b0: 6d 70 6f 72 74 65 64 7d 20 7b 0a 09 20 20 20 20  mported} {..    
63c0: 23 20 4e 6f 20 64 65 66 61 75 6c 74 20 62 72 61  # No default bra
63d0: 6e 63 68 2c 20 62 75 74 20 74 68 65 20 66 69 6c  nch, but the fil
63e0: 65 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 76  e appears to hav
63f0: 65 20 62 65 65 6e 0a 09 20 20 20 20 23 20 69 6d  e been..    # im
6400: 70 6f 72 74 65 64 2e 20 20 53 6f 20 6f 75 72 20  ported.  So our 
6410: 65 64 75 63 61 74 65 64 20 67 75 65 73 73 20 69  educated guess i
6420: 73 20 74 68 61 74 20 61 6c 6c 20 72 65 76 69 73  s that all revis
6430: 69 6f 6e 73 0a 09 20 20 20 20 23 20 6f 6e 20 74  ions..    # on t
6440: 68 65 20 27 31 2e 31 2e 31 27 20 62 72 61 6e 63  he '1.1.1' branc
6450: 68 20 77 69 74 68 20 74 69 6d 65 73 74 61 6d 70  h with timestamp
6460: 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65 0a 09  s prior to the..
6470: 20 20 20 20 23 20 74 69 6d 65 73 74 61 6d 70 20      # timestamp 
6480: 6f 66 20 27 31 2e 32 27 20 77 65 72 65 20 6e 6f  of '1.2' were no
6490: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20  n-trunk default 
64a0: 62 72 61 6e 63 68 0a 09 20 20 20 20 23 20 72 65  branch..    # re
64b0: 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 20 20 20 23  visions....    #
64c0: 20 54 68 69 73 20 72 65 61 6c 6c 79 20 6f 6e 6c   This really onl
64d0: 79 20 70 72 6f 63 65 73 73 65 73 20 73 74 61 6e  y processes stan
64e0: 64 61 72 64 20 27 31 2e 31 2e 31 2e 2a 27 2d 73  dard '1.1.1.*'-s
64f0: 74 79 6c 65 0a 09 20 20 20 20 23 20 76 65 6e 64  tyle..    # vend
6500: 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e 20 20 4f  or revisions.  O
6510: 6e 65 20 63 6f 75 6c 64 20 63 6f 6e 63 65 69 76  ne could conceiv
6520: 61 62 6c 79 20 68 61 76 65 20 61 20 66 69 6c 65  ably have a file
6530: 0a 09 20 20 20 20 23 20 77 68 6f 73 65 20 64 65  ..    # whose de
6540: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 20  fault branch is 
6550: 31 2e 31 2e 33 20 6f 72 20 77 68 61 74 65 76 65  1.1.3 or whateve
6560: 72 2c 20 6f 72 20 77 61 73 20 74 68 61 74 0a 09  r, or was that..
6570: 20 20 20 20 23 20 61 74 20 73 6f 6d 65 20 70 6f      # at some po
6580: 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 77 69 74  int in time, wit
6590: 68 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f  h vendor revisio
65a0: 6e 73 20 31 2e 31 2e 33 2e 31 2c 0a 09 20 20 20  ns 1.1.3.1,..   
65b0: 20 23 20 31 2e 31 2e 33 2e 32 2c 20 65 74 63 2e   # 1.1.3.2, etc.
65c0: 20 20 42 75 74 20 77 69 74 68 20 74 68 65 20 64    But with the d
65d0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 67 6f  efault branch go
65e0: 6e 65 20 6e 6f 77 2c 0a 09 20 20 20 20 23 20 77  ne now,..    # w
65f0: 65 27 64 20 68 61 76 65 20 6e 6f 20 62 61 73 69  e'd have no basi
6600: 73 20 66 6f 72 20 61 73 73 75 6d 69 6e 67 20 74  s for assuming t
6610: 68 61 74 20 74 68 65 20 6e 6f 6e 2d 73 74 61 6e  hat the non-stan
6620: 64 61 72 64 0a 09 20 20 20 20 23 20 76 65 6e 64  dard..    # vend
6630: 6f 72 20 62 72 61 6e 63 68 20 68 61 64 20 65 76  or branch had ev
6640: 65 72 20 62 65 65 6e 20 74 68 65 20 64 65 66 61  er been the defa
6650: 75 6c 74 20 62 72 61 6e 63 68 20 61 6e 79 77 61  ult branch anywa
6660: 79 2e 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20  y....    # Note 
6670: 74 68 61 74 20 77 65 20 72 65 6c 79 20 6f 6e 20  that we rely on 
6680: 63 6f 6d 70 61 72 69 73 6f 6e 73 20 62 65 74 77  comparisons betw
6690: 65 65 6e 20 74 68 65 20 74 69 6d 65 73 74 61 6d  een the timestam
66a0: 70 73 0a 09 20 20 20 20 23 20 6f 66 20 74 68 65  ps..    # of the
66b0: 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68   revisions on th
66c0: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20  e vendor branch 
66d0: 61 6e 64 20 74 68 61 74 20 6f 66 0a 09 20 20 20  and that of..   
66e0: 20 23 20 72 65 76 69 73 69 6f 6e 20 31 2e 32 2c   # revision 1.2,
66f0: 20 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65   even though the
6700: 20 74 69 6d 65 73 74 61 6d 70 73 20 6d 69 67 68   timestamps migh
6710: 74 20 62 65 0a 09 20 20 20 20 23 20 69 6e 63 6f  t be..    # inco
6720: 72 72 65 63 74 20 64 75 65 20 74 6f 20 63 6c 6f  rrect due to clo
6730: 63 6b 20 73 6b 65 77 2e 20 20 57 65 20 63 6f 75  ck skew.  We cou
6740: 6c 64 20 64 6f 20 61 20 73 6c 69 67 68 74 6c 79  ld do a slightly
6750: 0a 09 20 20 20 20 23 20 62 65 74 74 65 72 20 6a  ..    # better j
6760: 6f 62 20 69 66 20 77 65 20 75 73 65 64 20 74 68  ob if we used th
6770: 65 20 63 68 61 6e 67 65 73 65 74 20 74 69 6d 65  e changeset time
6780: 73 74 61 6d 70 73 2c 20 61 73 20 69 74 20 69 73  stamps, as it is
6790: 0a 09 20 20 20 20 23 20 70 6f 73 73 69 62 6c 65  ..    # possible
67a0: 20 74 68 61 74 20 74 68 65 20 64 65 70 65 6e 64   that the depend
67b0: 65 6e 63 69 65 73 20 74 68 61 74 20 77 65 6e 74  encies that went
67c0: 20 69 6e 74 6f 0a 09 20 20 20 20 23 20 64 65 74   into..    # det
67d0: 65 72 6d 69 6e 69 6e 67 20 74 68 6f 73 65 20 74  ermining those t
67e0: 69 6d 65 73 74 61 6d 70 73 20 61 72 65 20 6d 6f  imestamps are mo
67f0: 72 65 20 61 63 63 75 72 61 74 65 2e 20 20 42 75  re accurate.  Bu
6800: 74 0a 09 20 20 20 20 23 20 74 68 61 74 20 77 6f  t..    # that wo
6810: 75 6c 64 20 72 65 71 75 69 72 65 20 61 6e 20 65  uld require an e
6820: 78 74 72 61 20 70 61 73 73 20 6f 72 20 74 77 6f  xtra pass or two
6830: 2e 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e  ....    if {![in
6840: 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72 61 6e  fo exists mybran
6850: 63 68 65 73 28 31 2e 31 2e 31 29 5d 7d 20 7b 20  ches(1.1.1)]} { 
6860: 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 0a 09 20 20  return {} }...  
6870: 20 20 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69    log write 5 fi
6880: 6c 65 20 22 44 65 64 75 63 65 64 20 65 78 69 73  le "Deduced exis
6890: 74 65 6e 63 65 20 6f 66 20 4e 54 44 42 22 0a 0a  tence of NTDB"..
68a0: 09 20 20 20 20 73 65 74 20 72 65 76 20 20 5b 24  .    set rev  [$
68b0: 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 2e 31  mybranches(1.1.1
68c0: 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 65  ) child]..    se
68d0: 74 20 72 65 73 20 20 7b 7d 0a 09 20 20 20 20 73  t res  {}..    s
68e0: 65 74 20 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74  et stop [$myroot
68f0: 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 69 66   child]...    if
6900: 20 7b 24 73 74 6f 70 20 65 71 20 22 22 7d 20 7b   {$stop eq ""} {
6910: 0a 09 09 23 20 47 65 74 20 65 76 65 72 79 74 68  ...# Get everyth
6920: 69 6e 67 20 6f 6e 20 74 68 65 20 62 72 61 6e 63  ing on the branc
6930: 68 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 76 20  h...while {$rev 
6940: 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 6c  ne ""} {...    l
6950: 61 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a  append res $rev.
6960: 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24  ..    set rev [$
6970: 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09  rev child]...}..
6980: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23      } else {...#
6990: 20 43 6f 6c 6c 65 63 74 20 65 76 65 72 79 74 68   Collect everyth
69a0: 69 6e 67 20 6f 6e 20 74 68 65 20 62 72 61 6e 63  ing on the branc
69b0: 68 20 77 68 69 63 68 20 73 65 65 6d 73 20 74 6f  h which seems to
69c0: 20 68 61 76 65 0a 09 09 23 20 62 65 65 6e 20 63   have...# been c
69d0: 6f 6d 6d 69 74 74 65 64 20 62 65 66 6f 72 65 20  ommitted before 
69e0: 74 68 65 20 66 69 72 73 74 20 70 72 69 6d 61 72  the first primar
69f0: 79 20 63 68 69 6c 64 20 6f 66 20 74 68 65 0a 09  y child of the..
6a00: 09 23 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e  .# root revision
6a10: 2e 0a 09 09 73 65 74 20 73 74 6f 70 64 61 74 65  ....set stopdate
6a20: 20 5b 24 73 74 6f 70 20 64 61 74 65 5d 0a 09 09   [$stop date]...
6a30: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22  while {$rev ne "
6a40: 22 7d 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 5b  "} {...    if {[
6a50: 24 72 65 76 20 64 61 74 65 5d 20 3e 3d 20 24 73  $rev date] >= $s
6a60: 74 6f 70 64 61 74 65 7d 20 62 72 65 61 6b 0a 09  topdate} break..
6a70: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73  .    lappend res
6a80: 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 74 20   $rev...    set 
6a90: 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d  rev [$rev child]
6aa0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20  ...}..    }...  
6ab0: 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09    return $res...
6ac0: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65  } else {..    re
6ad0: 74 75 72 6e 20 7b 7d 0a 09 7d 0a 20 20 20 20 7d  turn {}..}.    }
6ae0: 0a 0a 20 20 20 20 23 20 47 65 6e 65 72 61 6c 20  ..    # General 
6af0: 6e 6f 74 65 3a 20 49 6e 20 74 68 65 20 66 6f 6c  note: In the fol
6b00: 6c 6f 77 69 6e 67 20 6d 65 74 68 6f 64 73 20 77  lowing methods w
6b10: 65 20 6f 6e 6c 79 20 6d 6f 64 69 66 79 20 74 68  e only modify th
6b20: 65 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 62 65  e links.    # be
6b30: 74 77 65 65 6e 20 72 65 76 69 73 69 6f 6e 73 20  tween revisions 
6b40: 61 6e 64 20 73 79 6d 62 6f 6c 73 20 74 6f 20 72  and symbols to r
6b50: 65 73 74 72 75 63 74 75 72 65 20 74 68 65 20 72  estructure the r
6b60: 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 74 72  evision.    # tr
6b70: 65 65 2e 20 57 65 20 64 6f 20 5f 5f 6e 6f 74 5f  ee. We do __not_
6b80: 5f 20 64 65 73 74 72 6f 79 20 74 68 65 20 6f 62  _ destroy the ob
6b90: 6a 65 63 74 73 2e 20 47 69 76 65 6e 20 74 68 65  jects. Given the
6ba0: 20 63 6f 6d 70 6c 65 78 20 6c 69 6e 6b 73 0a 20   complex links. 
6bb0: 20 20 20 23 20 47 43 20 69 73 20 64 69 66 66 69     # GC is diffi
6bc0: 63 75 6c 74 20 61 74 20 74 68 69 73 20 6c 65 76  cult at this lev
6bd0: 65 6c 2e 20 49 74 20 69 73 20 6d 75 63 68 20 65  el. It is much e
6be0: 61 73 69 65 72 20 74 6f 20 64 72 6f 70 0a 20 20  asier to drop.  
6bf0: 20 20 23 20 65 76 65 72 79 74 68 69 6e 67 20 77    # everything w
6c00: 68 65 6e 20 77 65 20 77 65 20 61 72 65 20 64 6f  hen we we are do
6c10: 6e 65 2e 20 54 68 69 73 20 68 61 70 70 65 6e 73  ne. This happens
6c20: 20 69 6e 20 27 64 72 6f 70 27 2c 20 75 73 69 6e   in 'drop', usin
6c30: 67 0a 20 20 20 20 23 20 74 68 65 20 73 74 61 74  g.    # the stat
6c40: 65 20 76 61 72 69 61 62 6c 65 20 27 6d 79 72 65  e variable 'myre
6c50: 76 27 2c 20 27 6d 79 62 72 61 6e 63 68 65 73 27  v', 'mybranches'
6c60: 2c 20 61 6e 64 20 27 6d 79 74 61 67 73 27 2e 20  , and 'mytags'. 
6c70: 57 68 61 74 20 77 65 0a 20 20 20 20 23 20 68 61  What we.    # ha
6c80: 76 65 20 74 6f 20 70 65 72 73 69 73 74 2c 20 70  ve to persist, p
6c90: 65 72 66 6f 72 6d 65 64 20 62 79 20 27 70 65 72  erformed by 'per
6ca0: 73 69 73 74 27 2c 20 77 65 20 6b 6e 6f 77 20 77  sist', we know w
6cb0: 69 6c 6c 20 62 65 0a 20 20 20 20 23 20 72 65 61  ill be.    # rea
6cc0: 63 68 61 62 6c 65 20 74 68 72 6f 75 67 68 20 74  chable through t
6cd0: 68 65 20 72 65 76 69 73 69 6f 6e 73 20 6c 69 73  he revisions lis
6ce0: 74 65 64 20 69 6e 20 27 6d 79 72 6f 6f 74 73 27  ted in 'myroots'
6cf0: 20 61 6e 64 20 74 68 65 69 72 0a 20 20 20 20 23   and their.    #
6d00: 20 63 68 69 6c 64 72 65 6e 20 61 6e 64 20 73 79   children and sy
6d10: 6d 62 6f 6c 73 2e 0a 0a 20 20 20 20 6d 65 74 68  mbols...    meth
6d20: 6f 64 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e  od AdjustNonTrun
6d30: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b  kDefaultBranch {
6d40: 72 65 76 6c 69 73 74 7d 20 7b 0a 09 73 65 74 20  revlist} {..set 
6d50: 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74 20 63 68  stop [$myroot ch
6d60: 69 6c 64 5d 20 3b 23 20 72 65 76 20 27 31 2e 32  ild] ;# rev '1.2
6d70: 27 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 35 20  '...log write 5 
6d80: 66 69 6c 65 20 22 41 64 6a 75 73 74 69 6e 67 20  file "Adjusting 
6d90: 4e 54 44 42 20 63 6f 6e 74 61 69 6e 69 6e 67 20  NTDB containing 
6da0: 5b 6e 73 70 20 5b 6c 6c 65 6e 67 74 68 20 24 72  [nsp [llength $r
6db0: 65 76 6c 69 73 74 5d 20 72 65 76 69 73 69 6f 6e  evlist] revision
6dc0: 5d 22 0a 0a 09 23 20 46 72 6f 6d 20 63 76 73 32  ]"...# From cvs2
6dd0: 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  svn the followin
6de0: 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 77  g explanation (w
6df0: 69 74 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e  ith modification
6e00: 73 0a 09 23 20 66 6f 72 20 6f 75 72 20 61 6c 67  s..# for our alg
6e10: 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20 41 64 6a  orithm):...# Adj
6e20: 75 73 74 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e  ust the non-trun
6e30: 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  k default branch
6e40: 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64   revisions found
6e50: 20 69 6e 20 74 68 65 0a 09 23 20 27 72 65 76 6c   in the..# 'revl
6e60: 69 73 74 27 2e 0a 0a 09 23 20 27 6d 79 69 6d 70  ist'....# 'myimp
6e70: 6f 72 74 65 64 27 20 69 73 20 61 20 62 6f 6f 6c  orted' is a bool
6e80: 65 61 6e 20 66 6c 61 67 20 69 6e 64 69 63 61 74  ean flag indicat
6e90: 69 6e 67 20 77 68 65 74 68 65 72 20 74 68 69 73  ing whether this
6ea0: 20 66 69 6c 65 0a 09 23 20 61 70 70 65 61 72 73   file..# appears
6eb0: 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20 69 6d   to have been im
6ec0: 70 6f 72 74 65 64 2c 20 77 68 69 63 68 20 61 6c  ported, which al
6ed0: 73 6f 20 6d 65 61 6e 73 20 74 68 61 74 0a 09 23  so means that..#
6ee0: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 20 68 61   revision 1.1 ha
6ef0: 73 20 61 20 67 65 6e 65 72 61 74 65 64 20 6c 6f  s a generated lo
6f00: 67 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 6e  g message that n
6f10: 65 65 64 20 6e 6f 74 20 62 65 0a 09 23 20 70 72  eed not be..# pr
6f20: 65 73 65 72 76 65 64 2e 20 20 27 72 65 76 6c 69  eserved.  'revli
6f30: 73 74 27 20 69 73 20 61 20 6c 69 73 74 20 6f 66  st' is a list of
6f40: 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   object referenc
6f50: 65 73 20 66 6f 72 20 74 68 65 0a 09 23 20 72 65  es for the..# re
6f60: 76 69 73 69 6f 6e 73 20 74 68 61 74 20 68 61 76  visions that hav
6f70: 65 20 62 65 65 6e 20 64 65 74 65 72 6d 69 6e 65  e been determine
6f80: 64 20 74 6f 20 62 65 20 6e 6f 6e 2d 74 72 75 6e  d to be non-trun
6f90: 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61  k default..# bra
6fa0: 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a  nch revisions...
6fb0: 09 23 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  .# Note that the
6fc0: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20   first revision 
6fd0: 6f 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 62  on the default b
6fe0: 72 61 6e 63 68 20 69 73 0a 09 23 20 68 61 6e 64  ranch is..# hand
6ff0: 6c 65 64 20 73 74 72 61 6e 67 65 6c 79 20 62 79  led strangely by
7000: 20 43 56 53 2e 20 20 49 66 20 61 20 66 69 6c 65   CVS.  If a file
7010: 20 69 73 20 69 6d 70 6f 72 74 65 64 20 28 61 73   is imported (as
7020: 20 6f 70 70 6f 73 65 64 0a 09 23 20 74 6f 20 62   opposed..# to b
7030: 65 69 6e 67 20 61 64 64 65 64 29 2c 20 43 56 53  eing added), CVS
7040: 20 63 72 65 61 74 65 73 20 61 20 31 2e 31 20 72   creates a 1.1 r
7050: 65 76 69 73 69 6f 6e 2c 20 74 68 65 6e 20 63 72  evision, then cr
7060: 65 61 74 65 73 20 61 0a 09 23 20 76 65 6e 64 6f  eates a..# vendo
7070: 72 20 62 72 61 6e 63 68 20 31 2e 31 2e 31 20 62  r branch 1.1.1 b
7080: 61 73 65 64 20 6f 6e 20 31 2e 31 2c 20 74 68 65  ased on 1.1, the
7090: 6e 20 63 72 65 61 74 65 73 20 61 20 31 2e 31 2e  n creates a 1.1.
70a0: 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20  1.1..# revision 
70b0: 74 68 61 74 20 69 73 20 69 64 65 6e 74 69 63 61  that is identica
70c0: 6c 20 74 6f 20 74 68 65 20 31 2e 31 20 72 65 76  l to the 1.1 rev
70d0: 69 73 69 6f 6e 20 28 69 2e 65 2e 2c 20 69 74 73  ision (i.e., its
70e0: 0a 09 23 20 64 65 6c 74 61 74 65 78 74 20 69 73  ..# deltatext is
70f0: 20 65 6d 70 74 79 29 2e 20 20 54 68 65 20 6c 6f   empty).  The lo
7100: 67 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 74  g message that t
7110: 68 65 20 75 73 65 72 20 74 79 70 65 64 0a 09 23  he user typed..#
7120: 20 77 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67 20   when importing 
7130: 69 73 20 73 74 6f 72 65 64 20 77 69 74 68 20 74  is stored with t
7140: 68 65 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73  he 1.1.1.1 revis
7150: 69 6f 6e 2e 20 20 54 68 65 20 31 2e 31 0a 09 23  ion.  The 1.1..#
7160: 20 72 65 76 69 73 69 6f 6e 20 61 6c 77 61 79 73   revision always
7170: 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 74 61 6e   contains a stan
7180: 64 61 72 64 2c 20 67 65 6e 65 72 61 74 65 64 20  dard, generated 
7190: 6c 6f 67 20 6d 65 73 73 61 67 65 2c 0a 09 23 20  log message,..# 
71a0: 27 49 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f  'Initial revisio
71b0: 6e 5c 6e 27 2e 0a 0a 09 23 20 57 68 65 6e 20 77  n\n'....# When w
71c0: 65 20 64 65 74 65 63 74 20 61 20 73 74 72 61 69  e detect a strai
71d0: 67 68 74 66 6f 72 77 61 72 64 20 69 6d 70 6f 72  ghtforward impor
71e0: 74 20 6c 69 6b 65 20 74 68 69 73 2c 20 77 65 20  t like this, we 
71f0: 77 61 6e 74 0a 09 23 20 74 6f 20 68 61 6e 64 6c  want..# to handl
7200: 65 20 69 74 20 62 79 20 64 65 6c 65 74 69 6e 67  e it by deleting
7210: 20 74 68 65 20 31 2e 31 20 72 65 76 69 73 69 6f   the 1.1 revisio
7220: 6e 20 28 77 68 69 63 68 20 64 6f 65 73 6e 27 74  n (which doesn't
7230: 0a 09 23 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20  ..# contain any 
7240: 75 73 65 66 75 6c 20 69 6e 66 6f 72 6d 61 74 69  useful informati
7250: 6f 6e 29 20 61 6e 64 20 6d 61 6b 69 6e 67 20 31  on) and making 1
7260: 2e 31 2e 31 2e 31 20 69 6e 74 6f 20 61 6e 0a 09  .1.1.1 into an..
7270: 23 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 72 6f  # independent ro
7280: 6f 74 20 69 6e 20 74 68 65 20 66 69 6c 65 27 73  ot in the file's
7290: 20 64 65 70 65 6e 64 65 6e 63 79 20 74 72 65 65   dependency tree
72a0: 2e 20 20 49 6e 20 53 56 4e 2c 0a 09 23 20 31 2e  .  In SVN,..# 1.
72b0: 31 2e 31 2e 31 20 77 69 6c 6c 20 62 65 20 61 64  1.1.1 will be ad
72c0: 64 65 64 20 64 69 72 65 63 74 6c 79 20 74 6f 20  ded directly to 
72d0: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  the vendor branc
72e0: 68 20 77 69 74 68 20 69 74 73 0a 09 23 20 69 6e  h with its..# in
72f0: 69 74 69 61 6c 20 63 6f 6e 74 65 6e 74 2e 20 20  itial content.  
7300: 54 68 65 6e 20 69 6e 20 61 20 73 70 65 63 69 61  Then in a specia
7310: 6c 20 27 70 6f 73 74 2d 63 6f 6d 6d 69 74 27 2c  l 'post-commit',
7320: 20 74 68 65 0a 09 23 20 31 2e 31 2e 31 2e 31 20   the..# 1.1.1.1 
7330: 72 65 76 69 73 69 6f 6e 20 69 73 20 63 6f 70 69  revision is copi
7340: 65 64 20 62 61 63 6b 20 74 6f 20 74 72 75 6e 6b  ed back to trunk
7350: 2e 0a 0a 09 23 20 49 66 20 74 68 65 20 75 73 65  ....# If the use
7360: 72 20 69 6d 70 6f 72 74 73 20 61 67 61 69 6e 20  r imports again 
7370: 74 6f 20 74 68 65 20 73 61 6d 65 20 76 65 6e 64  to the same vend
7380: 6f 72 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20  or branch, then 
7390: 43 56 53 0a 09 23 20 63 72 65 61 74 65 73 20 72  CVS..# creates r
73a0: 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 32  evisions 1.1.1.2
73b0: 2c 20 31 2e 31 2e 31 2e 33 2c 20 65 74 63 2e 20  , 1.1.1.3, etc. 
73c0: 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72  on the vendor br
73d0: 61 6e 63 68 2c 0a 09 23 20 2a 77 69 74 68 6f 75  anch,..# *withou
73e0: 74 2a 20 63 6f 75 6e 74 65 72 70 61 72 74 73 20  t* counterparts 
73f0: 69 6e 20 74 72 75 6e 6b 20 28 65 76 65 6e 20 74  in trunk (even t
7400: 68 6f 75 67 68 20 74 68 65 73 65 20 72 65 76 69  hough these revi
7410: 73 69 6f 6e 73 0a 09 23 20 65 66 66 65 63 74 69  sions..# effecti
7420: 76 65 6c 79 20 70 6c 61 79 20 74 68 65 20 72 6f  vely play the ro
7430: 6c 65 20 6f 66 20 74 72 75 6e 6b 20 72 65 76 69  le of trunk revi
7440: 73 69 6f 6e 73 29 2e 20 20 53 6f 20 61 66 74 65  sions).  So afte
7450: 72 20 77 65 20 61 64 64 0a 09 23 20 73 75 63 68  r we add..# such
7460: 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 20 74 68   revisions to th
7470: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c  e vendor branch,
7480: 20 77 65 20 61 6c 73 6f 20 63 6f 70 79 20 74 68   we also copy th
7490: 65 6d 20 62 61 63 6b 20 74 6f 0a 09 23 20 74 72  em back to..# tr
74a0: 75 6e 6b 20 69 6e 20 70 6f 73 74 2d 63 6f 6d 6d  unk in post-comm
74b0: 69 74 73 2e 0a 0a 09 23 20 57 65 20 6d 61 72 6b  its....# We mark
74c0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 66   the revisions f
74d0: 6f 75 6e 64 20 69 6e 20 27 72 65 76 6c 69 73 74  ound in 'revlist
74e0: 27 20 61 73 20 64 65 66 61 75 6c 74 20 62 72 61  ' as default bra
74f0: 6e 63 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73  nch..# revisions
7500: 2e 20 20 41 6c 73 6f 2c 20 69 66 20 74 68 65 20  .  Also, if the 
7510: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 68 61  root revision ha
7520: 73 20 61 20 70 72 69 6d 61 72 79 20 63 68 69 6c  s a primary chil
7530: 64 0a 09 23 20 77 65 20 73 65 74 20 74 68 61 74  d..# we set that
7540: 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 64 65 70   revision to dep
7550: 65 6e 64 20 6f 6e 20 74 68 65 20 6c 61 73 74 20  end on the last 
7560: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
7570: 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69  t..# branch revi
7580: 73 69 6f 6e 20 61 6e 64 20 70 6f 73 73 69 62 6c  sion and possibl
7590: 79 20 61 64 6a 75 73 74 20 69 74 73 20 74 79 70  y adjust its typ
75a0: 65 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a  e accordingly...
75b0: 09 73 65 74 20 66 69 72 73 74 20 5b 6c 69 6e 64  .set first [lind
75c0: 65 78 20 24 72 65 76 6c 69 73 74 20 30 5d 0a 0a  ex $revlist 0]..
75d0: 09 6c 6f 67 20 77 72 69 74 65 20 36 20 66 69 6c  .log write 6 fil
75e0: 65 20 22 3c 5b 24 66 69 72 73 74 20 72 65 76 6e  e "<[$first revn
75f0: 72 5d 3e 20 5b 65 78 70 72 20 7b 24 6d 79 69 6d  r]> [expr {$myim
7600: 70 6f 72 74 65 64 20 3f 20 22 69 6d 70 6f 72 74  ported ? "import
7610: 65 64 22 20 3a 20 22 6e 6f 74 20 69 6d 70 6f 72  ed" : "not impor
7620: 74 65 64 22 7d 5d 2c 20 5b 24 66 69 72 73 74 20  ted"}], [$first 
7630: 6f 70 65 72 61 74 69 6f 6e 5d 2c 20 5b 65 78 70  operation], [exp
7640: 72 20 7b 5b 24 66 69 72 73 74 20 68 61 73 74 65  r {[$first haste
7650: 78 74 5d 20 3f 20 22 68 61 73 20 74 65 78 74 22  xt] ? "has text"
7660: 20 3a 20 22 6e 6f 20 74 65 78 74 22 7d 5d 22 0a   : "no text"}]".
7670: 0a 09 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65  ..if {$myimporte
7680: 64 20 26 26 0a 09 20 20 20 20 5b 24 66 69 72 73  d &&..    [$firs
7690: 74 20 72 65 76 6e 72 5d 20 65 71 20 22 31 2e 31  t revnr] eq "1.1
76a0: 2e 31 2e 31 22 20 26 26 0a 09 20 20 20 20 5b 24  .1.1" &&..    [$
76b0: 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d  first operation]
76c0: 20 65 71 20 22 63 68 61 6e 67 65 22 20 26 26 0a   eq "change" &&.
76d0: 09 20 20 20 20 21 5b 24 66 69 72 73 74 20 68 61  .    ![$first ha
76e0: 73 74 65 78 74 5d 7d 20 7b 0a 0a 09 20 20 20 20  stext]} {...    
76f0: 73 65 74 20 72 65 76 31 31 20 5b 24 66 69 72 73  set rev11 [$firs
7700: 74 20 70 61 72 65 6e 74 5d 20 3b 20 23 20 41 73  t parent] ; # As
7710: 73 65 72 74 3a 20 53 68 6f 75 6c 64 20 62 65 20  sert: Should be 
7720: 6d 79 72 6f 6f 74 2e 0a 09 20 20 20 20 6c 6f 67  myroot...    log
7730: 20 77 72 69 74 65 20 33 20 66 69 6c 65 20 22 52   write 3 file "R
7740: 65 6d 6f 76 69 6e 67 20 69 72 72 65 6c 65 76 61  emoving irreleva
7750: 6e 74 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 65  nt revision [$re
7760: 76 31 31 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20  v11 revnr]"...  
7770: 20 20 23 20 43 75 74 20 6f 75 74 20 74 68 65 20    # Cut out the 
7780: 6f 6c 64 20 6d 79 72 6f 6f 74 20 72 65 76 69 73  old myroot revis
7790: 69 6f 6e 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65  ion....    ldele
77a0: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31  te myroots $rev1
77b0: 31 20 3b 20 23 20 4e 6f 74 20 61 20 72 6f 6f 74  1 ; # Not a root
77c0: 20 61 6e 79 20 6c 6f 6e 67 65 72 2e 0a 0a 09 20   any longer.... 
77d0: 20 20 20 24 66 69 72 73 74 20 63 75 74 66 72 6f     $first cutfro
77e0: 6d 70 61 72 65 6e 74 20 3b 20 23 20 53 65 76 65  mparent ; # Seve
77f0: 72 20 72 65 76 69 73 69 6f 6e 20 66 72 6f 6d 20  r revision from 
7800: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e  parent revision.
7810: 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20  ..    if {$stop 
7820: 6e 65 20 22 22 7d 20 7b 0a 09 09 24 73 74 6f 70  ne ""} {...$stop
7830: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09   cutfromparent..
7840: 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73  .lappend myroots
7850: 20 24 73 74 6f 70 20 3b 20 23 20 4e 65 77 20 72   $stop ; # New r
7860: 6f 6f 74 2c 20 61 66 74 65 72 20 76 65 6e 64 6f  oot, after vendo
7870: 72 20 62 72 61 6e 63 68 0a 09 20 20 20 20 7d 0a  r branch..    }.
7880: 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 20  ..    # Cut out 
7890: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  the vendor branc
78a0: 68 20 73 79 6d 62 6f 6c 0a 0a 09 20 20 20 20 73  h symbol...    s
78b0: 65 74 20 76 65 6e 64 6f 72 20 5b 24 66 69 72 73  et vendor [$firs
78c0: 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a  t parentbranch].
78d0: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61  .    integrity a
78e0: 73 73 65 72 74 20 7b 24 76 65 6e 64 6f 72 20 6e  ssert {$vendor n
78f0: 65 20 22 22 7d 20 7b 46 69 72 73 74 20 4e 54 44  e ""} {First NTD
7900: 42 20 72 65 76 69 73 69 6f 6e 20 68 61 73 20 6e  B revision has n
7910: 6f 20 62 72 61 6e 63 68 7d 0a 09 20 20 20 20 69  o branch}..    i
7920: 66 20 7b 5b 24 76 65 6e 64 6f 72 20 70 61 72 65  f {[$vendor pare
7930: 6e 74 5d 20 65 71 20 24 72 65 76 31 31 7d 20 7b  nt] eq $rev11} {
7940: 0a 09 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65  ...$rev11 remove
7950: 62 72 61 6e 63 68 20 20 20 20 20 20 20 20 24 76  branch        $v
7960: 65 6e 64 6f 72 0a 09 09 24 72 65 76 31 31 20 72  endor...$rev11 r
7970: 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e  emovechildonbran
7980: 63 68 20 24 66 69 72 73 74 0a 09 09 24 76 65 6e  ch $first...$ven
7990: 64 6f 72 20 63 75 74 63 68 69 6c 64 0a 09 09 24  dor cutchild...$
79a0: 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72  first cutfrompar
79b0: 65 6e 74 62 72 61 6e 63 68 0a 09 09 6c 61 70 70  entbranch...lapp
79c0: 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 72  end myroots $fir
79d0: 73 74 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  st..    }...    
79e0: 23 20 43 68 61 6e 67 65 20 74 68 65 20 74 79 70  # Change the typ
79f0: 65 20 6f 66 20 66 69 72 73 74 20 28 74 79 70 69  e of first (typi
7a00: 63 61 6c 6c 79 20 66 72 6f 6d 20 43 68 61 6e 67  cally from Chang
7a10: 65 20 74 6f 20 41 64 64 29 3a 0a 09 20 20 20 20  e to Add):..    
7a20: 24 66 69 72 73 74 20 72 65 74 79 70 65 20 61 64  $first retype ad
7a30: 64 0a 0a 09 20 20 20 20 23 20 4d 6f 76 65 20 61  d...    # Move a
7a40: 6e 79 20 74 61 67 73 20 61 6e 64 20 62 72 61 6e  ny tags and bran
7a50: 63 68 65 73 20 66 72 6f 6d 20 74 68 65 20 6f 6c  ches from the ol
7a60: 64 20 74 6f 20 74 68 65 20 6e 65 77 20 72 6f 6f  d to the new roo
7a70: 74 2e 0a 09 20 20 20 20 24 72 65 76 31 31 20 6d  t...    $rev11 m
7a80: 6f 76 65 73 79 6d 62 6f 6c 73 74 6f 20 24 66 69  ovesymbolsto $fi
7a90: 72 73 74 0a 09 7d 0a 0a 09 23 20 4d 61 72 6b 20  rst..}...# Mark 
7aa0: 61 6c 6c 20 74 68 65 20 73 70 65 63 69 61 6c 20  all the special 
7ab0: 72 65 76 69 73 69 6f 6e 73 20 61 73 20 73 75 63  revisions as suc
7ac0: 68 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24  h..foreach rev $
7ad0: 72 65 76 6c 69 73 74 20 7b 0a 09 20 20 20 20 6c  revlist {..    l
7ae0: 6f 67 20 77 72 69 74 65 20 33 20 66 69 6c 65 20  og write 3 file 
7af0: 22 52 65 76 69 73 69 6f 6e 20 6f 6e 20 64 65 66  "Revision on def
7b00: 61 75 6c 74 20 62 72 61 6e 63 68 3a 20 5b 24 72  ault branch: [$r
7b10: 65 76 20 72 65 76 6e 72 5d 22 0a 09 20 20 20 20  ev revnr]"..    
7b20: 24 72 65 76 20 73 65 74 6f 6e 64 65 66 61 75 6c  $rev setondefaul
7b30: 74 62 72 61 6e 63 68 20 31 0a 09 7d 0a 0a 09 69  tbranch 1..}...i
7b40: 66 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20  f {$stop ne ""} 
7b50: 7b 0a 09 20 20 20 20 23 20 52 65 76 69 73 69 6f  {..    # Revisio
7b60: 6e 20 31 2e 32 20 6c 6f 67 69 63 61 6c 6c 79 20  n 1.2 logically 
7b70: 66 6f 6c 6c 6f 77 73 20 74 68 65 20 69 6d 70 6f  follows the impo
7b80: 72 74 65 64 20 72 65 76 69 73 69 6f 6e 73 2c 0a  rted revisions,.
7b90: 09 20 20 20 20 23 20 6e 6f 74 20 31 2e 31 2e 20  .    # not 1.1. 
7ba0: 20 41 63 63 6f 72 64 69 6e 67 6c 79 2c 20 63 6f   Accordingly, co
7bb0: 6e 6e 65 63 74 20 69 74 20 74 6f 20 74 68 65 20  nnect it to the 
7bc0: 6c 61 73 74 20 4e 54 44 42 52 20 61 6e 64 0a 09  last NTDBR and..
7bd0: 20 20 20 20 23 20 70 6f 73 73 69 62 6c 79 20 63      # possibly c
7be0: 68 61 6e 67 65 20 69 74 73 20 74 79 70 65 2e 0a  hange its type..
7bf0: 0a 09 20 20 20 20 73 65 74 20 6c 61 73 74 20 5b  ..    set last [
7c00: 6c 69 6e 64 65 78 20 24 72 65 76 6c 69 73 74 20  lindex $revlist 
7c10: 65 6e 64 5d 0a 09 20 20 20 20 24 73 74 6f 70 20  end]..    $stop 
7c20: 73 65 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68  setdefaultbranch
7c30: 70 61 72 65 6e 74 20 24 6c 61 73 74 20 3b 20 23  parent $last ; #
7c40: 20 52 65 74 79 70 65 73 20 74 68 65 20 72 65 76   Retypes the rev
7c50: 69 73 69 6f 6e 20 74 6f 6f 2e 0a 09 20 20 20 20  ision too...    
7c60: 24 6c 61 73 74 20 73 65 74 64 65 66 61 75 6c 74  $last setdefault
7c70: 62 72 61 6e 63 68 63 68 69 6c 64 20 20 24 73 74  branchchild  $st
7c80: 6f 70 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  op..}..return.  
7c90: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
7ca0: 43 68 65 63 6b 4c 4f 44 73 20 7b 7d 20 7b 0a 09  CheckLODs {} {..
7cb0: 66 6f 72 65 61 63 68 20 7b 5f 20 62 72 61 6e 63  foreach {_ branc
7cc0: 68 7d 20 20 5b 61 72 72 61 79 20 67 65 74 20 6d  h}  [array get m
7cd0: 79 62 72 61 6e 63 68 65 73 5d 20 7b 20 24 62 72  ybranches] { $br
7ce0: 61 6e 63 68 20 63 68 65 63 6b 6c 6f 64 20 7d 0a  anch checklod }.
7cf0: 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c  .foreach {_ tagl
7d00: 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20  ist} [array get 
7d10: 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66  mytags] {..    f
7d20: 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c  oreach tag $tagl
7d30: 69 73 74 20 7b 20 24 74 61 67 20 63 68 65 63 6b  ist { $tag check
7d40: 6c 6f 64 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e  lod }..}..return
7d50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
7d60: 6f 64 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 76  od RemoveIrrelev
7d70: 61 6e 74 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20  antDeletions {} 
7d80: 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76  {..# From cvs2sv
7d90: 6e 3a 20 49 66 20 61 20 66 69 6c 65 20 69 73 20  n: If a file is 
7da0: 61 64 64 65 64 20 6f 6e 20 61 20 62 72 61 6e 63  added on a branc
7db0: 68 2c 20 74 68 65 6e 20 61 20 74 72 75 6e 6b 0a  h, then a trunk.
7dc0: 09 23 20 72 65 76 69 73 69 6f 6e 20 69 73 20 61  .# revision is a
7dd0: 64 64 65 64 20 61 74 20 74 68 65 20 73 61 6d 65  dded at the same
7de0: 20 74 69 6d 65 20 69 6e 20 74 68 65 20 27 44 65   time in the 'De
7df0: 61 64 27 20 73 74 61 74 65 2e 0a 09 23 20 54 68  ad' state...# Th
7e00: 69 73 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 73  is revision does
7e10: 6e 27 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 20  n't do anything 
7e20: 75 73 65 66 75 6c 2c 20 73 6f 20 64 65 6c 65 74  useful, so delet
7e30: 65 20 69 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20  e it....foreach 
7e40: 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a  root $myroots {.
7e50: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20  .    if {[$root 
7e60: 69 73 6e 65 65 64 65 64 5d 7d 20 63 6f 6e 74 69  isneeded]} conti
7e70: 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  nue..    log wri
7e80: 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76  te 2 file "Remov
7e90: 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20  ing unnecessary 
7ea0: 64 65 61 64 20 72 65 76 69 73 69 6f 6e 20 5b 24  dead revision [$
7eb0: 72 6f 6f 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20  root revnr]"... 
7ec0: 20 20 20 23 20 52 65 6d 6f 76 65 20 61 73 20 72     # Remove as r
7ed0: 6f 6f 74 2c 20 6d 61 6b 65 20 69 74 73 20 63 68  oot, make its ch
7ee0: 69 6c 64 20 6e 65 77 20 72 6f 6f 74 20 61 66 74  ild new root aft
7ef0: 65 72 0a 09 20 20 20 20 23 20 64 69 73 63 6f 6e  er..    # discon
7f00: 6e 65 63 74 69 6e 67 20 69 74 20 66 72 6f 6d 20  necting it from 
7f10: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6a 75 73  the revision jus
7f20: 74 20 67 6f 69 6e 67 20 61 77 61 79 2e 0a 0a 09  t going away....
7f30: 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f      ldelete myro
7f40: 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 69  ots $root..    i
7f50: 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 63 68 69  f {[$root haschi
7f60: 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 63 68 69  ld]} {...set chi
7f70: 6c 64 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d  ld [$root child]
7f80: 0a 09 09 24 63 68 69 6c 64 20 63 75 74 66 72 6f  ...$child cutfro
7f90: 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e  mparent...lappen
7fa0: 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64  d myroots $child
7fb0: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20  ..    }...    # 
7fc0: 43 75 74 20 6f 75 74 20 74 68 65 20 62 72 61 6e  Cut out the bran
7fd0: 63 68 65 73 20 73 70 61 77 6e 65 64 20 62 79 20  ches spawned by 
7fe0: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f 20  the revision to 
7ff0: 62 65 0a 09 20 20 20 20 23 20 64 65 6c 65 74 65  be..    # delete
8000: 64 2e 20 49 66 20 74 68 65 20 62 72 61 6e 63 68  d. If the branch
8010: 20 68 61 73 20 72 65 76 69 73 69 6f 6e 73 20 74   has revisions t
8020: 68 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61  hey should alrea
8030: 64 79 0a 09 20 20 20 20 23 20 75 73 65 20 6f 70  dy..    # use op
8040: 65 72 61 74 69 6f 6e 20 27 61 64 64 27 2c 20 6e  eration 'add', n
8050: 6f 20 6e 65 65 64 20 74 6f 20 63 68 61 6e 67 65  o need to change
8060: 20 74 68 61 74 2e 20 54 68 65 20 66 69 72 73 74   that. The first
8070: 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e  ..    # revision
8080: 20 6f 6e 20 65 61 63 68 20 62 72 61 6e 63 68 20   on each branch 
8090: 62 65 63 6f 6d 65 73 20 61 20 6e 65 77 20 61 6e  becomes a new an
80a0: 64 20 64 69 73 63 6f 6e 6e 65 63 74 65 64 0a 09  d disconnected..
80b0: 20 20 20 20 23 20 72 6f 6f 74 2e 0a 0a 09 20 20      # root....  
80c0: 20 20 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68    foreach branch
80d0: 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73   [$root branches
80e0: 5d 20 7b 0a 09 09 24 62 72 61 6e 63 68 20 63 75  ] {...$branch cu
80f0: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 09  tbranchparent...
8100: 69 66 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 61  if {![$branch ha
8110: 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75  schild]} continu
8120: 65 0a 09 09 73 65 74 20 66 69 72 73 74 20 5b 24  e...set first [$
8130: 62 72 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09  branch child]...
8140: 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61  $first cutfrompa
8150: 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d  rent...lappend m
8160: 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a 09 20  yroots $first.. 
8170: 20 20 20 7d 0a 09 20 20 20 20 24 72 6f 6f 74 20     }..    $root 
8180: 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65  removeallbranche
8190: 73 0a 0a 09 20 20 20 20 23 20 54 61 67 67 69 6e  s...    # Taggin
81a0: 67 20 61 20 64 65 61 64 20 72 65 76 69 73 69 6f  g a dead revisio
81b0: 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61 6e 79  n doesn't do any
81c0: 74 68 69 6e 67 2c 20 73 6f 20 72 65 6d 6f 76 65  thing, so remove
81d0: 0a 09 20 20 20 20 23 20 61 6e 79 20 74 61 67 73  ..    # any tags
81e0: 20 74 68 61 74 20 77 65 72 65 20 73 65 74 20 6f   that were set o
81f0: 6e 20 69 74 2e 0a 0a 09 20 20 20 20 24 72 6f 6f  n it....    $roo
8200: 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a  t removealltags.
8210: 0a 09 20 20 20 20 23 20 54 68 69 73 20 63 61 6e  ..    # This can
8220: 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 6f 6e 63   only happen onc
8230: 65 20 70 65 72 20 66 69 6c 65 2c 20 61 6e 64 20  e per file, and 
8240: 77 65 20 6d 69 67 68 74 20 68 61 76 65 0a 09 20  we might have.. 
8250: 20 20 20 23 20 6a 75 73 74 20 63 68 61 6e 67 65     # just change
8260: 64 20 6d 79 72 6f 6f 74 73 2c 20 73 6f 20 65 6e  d myroots, so en
8270: 64 20 74 68 65 20 6c 6f 6f 70 0a 09 20 20 20 20  d the loop..    
8280: 62 72 65 61 6b 0a 09 7d 0a 09 72 65 74 75 72 6e  break..}..return
8290: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
82a0: 6f 64 20 52 65 6d 6f 76 65 49 6e 69 74 69 61 6c  od RemoveInitial
82b0: 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e 73 20  BranchDeletions 
82c0: 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73  {} {..# From cvs
82d0: 32 73 76 6e 3a 20 49 66 20 74 68 65 20 66 69 72  2svn: If the fir
82e0: 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61  st revision on a
82f0: 20 62 72 61 6e 63 68 20 69 73 20 61 6e 0a 09 23   branch is an..#
8300: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 64 65 6c   unnecessary del
8310: 65 74 65 2c 20 72 65 6d 6f 76 65 20 69 74 2e 0a  ete, remove it..
8320: 09 23 0a 09 23 20 49 66 20 61 20 66 69 6c 65 20  .#..# If a file 
8330: 69 73 20 61 64 64 65 64 20 6f 6e 20 61 20 62 72  is added on a br
8340: 61 6e 63 68 20 28 77 68 65 74 68 65 72 20 6f 72  anch (whether or
8350: 20 6e 6f 74 20 69 74 20 61 6c 72 65 61 64 79 0a   not it already.
8360: 09 23 20 65 78 69 73 74 65 64 20 6f 6e 20 74 72  .# existed on tr
8370: 75 6e 6b 29 2c 20 74 68 65 6e 20 6e 65 77 20 76  unk), then new v
8380: 65 72 73 69 6f 6e 73 20 6f 66 20 43 56 53 20 61  ersions of CVS a
8390: 64 64 20 61 20 66 69 72 73 74 0a 09 23 20 62 72  dd a first..# br
83a0: 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 69 6e  anch revision in
83b0: 20 74 68 65 20 27 64 65 61 64 27 20 73 74 61 74   the 'dead' stat
83c0: 65 20 28 74 6f 20 69 6e 64 69 63 61 74 65 20 74  e (to indicate t
83d0: 68 61 74 20 74 68 65 0a 09 23 20 66 69 6c 65 20  hat the..# file 
83e0: 64 69 64 20 6e 6f 74 20 65 78 69 73 74 20 6f 6e  did not exist on
83f0: 20 74 68 65 20 62 72 61 6e 63 68 20 77 68 65 6e   the branch when
8400: 20 74 68 65 20 62 72 61 6e 63 68 20 77 61 73 0a   the branch was.
8410: 09 23 20 63 72 65 61 74 65 64 29 20 66 6f 6c 6c  .# created) foll
8420: 6f 77 65 64 20 62 79 20 74 68 65 20 73 65 63 6f  owed by the seco
8430: 6e 64 20 62 72 61 6e 63 68 20 72 65 76 69 73 69  nd branch revisi
8440: 6f 6e 2c 20 77 68 69 63 68 20 69 73 20 61 6e 0a  on, which is an.
8450: 09 23 20 61 64 64 2e 20 20 57 68 65 6e 20 77 65  .# add.  When we
8460: 20 65 6e 63 6f 75 6e 74 65 72 20 74 68 69 73 20   encounter this 
8470: 73 69 74 75 61 74 69 6f 6e 2c 20 77 65 20 73 65  situation, we se
8480: 76 65 72 20 74 68 65 20 62 72 61 6e 63 68 0a 09  ver the branch..
8490: 23 20 66 72 6f 6d 20 74 72 75 6e 6b 20 61 6e 64  # from trunk and
84a0: 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 72 73   delete the firs
84b0: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f  t branch revisio
84c0: 6e 2e 0a 0a 09 23 20 41 74 20 74 68 69 73 20 70  n....# At this p
84d0: 6f 69 6e 74 20 77 65 20 6d 61 79 20 68 61 76 65  oint we may have
84e0: 20 61 6c 72 65 61 64 79 20 6d 75 6c 74 69 70 6c   already multipl
84f0: 65 20 72 6f 6f 74 73 20 69 6e 20 6d 79 72 6f 6f  e roots in myroo
8500: 74 73 2c 0a 09 23 20 77 65 20 68 61 76 65 20 74  ts,..# we have t
8510: 6f 20 70 72 6f 63 65 73 73 20 74 68 65 6d 20 61  o process them a
8520: 6c 6c 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f  ll....foreach ro
8530: 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f  ot [$self LinesO
8540: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a  fDevelopment] {.
8550: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20  .    if {[$root 
8560: 69 73 6e 65 65 64 65 64 62 72 61 6e 63 68 64 65  isneededbranchde
8570: 6c 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  l]} continue..  
8580: 20 20 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69    log write 2 fi
8590: 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e  le "Removing unn
85a0: 65 63 65 73 73 61 72 79 20 69 6e 69 74 69 61 6c  ecessary initial
85b0: 20 62 72 61 6e 63 68 20 64 65 6c 65 74 65 20 5b   branch delete [
85c0: 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22 0a 0a 09  $root revnr]"...
85d0: 20 20 20 20 73 65 74 20 62 72 61 6e 63 68 20 5b      set branch [
85e0: 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e  $root parentbran
85f0: 63 68 5d 0a 09 20 20 20 20 73 65 74 20 70 61 72  ch]..    set par
8600: 65 6e 74 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e  ent [$root paren
8610: 74 5d 0a 09 20 20 20 20 73 65 74 20 63 68 69 6c  t]..    set chil
8620: 64 20 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d  d  [$root child]
8630: 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 20 6d  ...    ldelete m
8640: 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20  yroots $root..  
8650: 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74    lappend myroot
8660: 73 20 24 63 68 69 6c 64 0a 0a 09 20 20 20 20 24  s $child...    $
8670: 62 72 61 6e 63 68 20 63 75 74 62 72 61 6e 63 68  branch cutbranch
8680: 70 61 72 65 6e 74 0a 09 20 20 20 20 24 62 72 61  parent..    $bra
8690: 6e 63 68 20 63 75 74 63 68 69 6c 64 0a 09 20 20  nch cutchild..  
86a0: 20 20 24 63 68 69 6c 64 20 20 63 75 74 66 72 6f    $child  cutfro
86b0: 6d 70 61 72 65 6e 74 0a 0a 09 20 20 20 20 24 62  mparent...    $b
86c0: 72 61 6e 63 68 20 73 65 74 63 68 69 6c 64 20 20  ranch setchild  
86d0: 20 20 20 20 20 20 24 63 68 69 6c 64 0a 09 20 20        $child..  
86e0: 20 20 24 63 68 69 6c 64 20 20 73 65 74 70 61 72    $child  setpar
86f0: 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e 63  entbranch $branc
8700: 68 0a 0a 09 20 20 20 20 24 70 61 72 65 6e 74 20  h...    $parent 
8710: 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 20  removebranch    
8720: 20 20 20 20 24 62 72 61 6e 63 68 0a 09 20 20 20      $branch..   
8730: 20 24 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 63   $parent removec
8740: 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f  hildonbranch $ro
8750: 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  ot..}..return.  
8760: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
8770: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
8780: 6e 74 20 7b 7d 20 7b 0a 09 23 20 44 65 74 65 72  nt {} {..# Deter
8790: 6d 69 6e 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f  mine all lines o
87a0: 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f  f development fo
87b0: 72 20 74 68 65 20 66 69 6c 65 2e 20 54 68 69 73  r the file. This
87c0: 20 61 72 65 0a 09 23 20 74 68 65 20 6b 6e 6f 77   are..# the know
87d0: 6e 20 72 6f 6f 74 73 2c 20 61 6e 64 20 74 68 65  n roots, and the
87e0: 20 72 6f 6f 74 20 6f 66 20 61 6c 6c 20 62 72 61   root of all bra
87f0: 6e 63 68 65 73 20 66 6f 75 6e 64 20 6f 6e 20 74  nches found on t
8800: 68 65 0a 09 23 20 6c 69 6e 65 20 6f 66 20 70 72  he..# line of pr
8810: 69 6d 61 72 79 20 63 68 69 6c 64 72 65 6e 2e 0a  imary children..
8820: 0a 09 73 65 74 20 6c 6f 64 72 6f 6f 74 73 20 7b  ..set lodroots {
8830: 7d 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20  }..foreach root 
8840: 24 6d 79 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20  $myroots {..    
8850: 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65  $self AddBranche
8860: 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d  dLinesOfDevelopm
8870: 65 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f  ent lodroots $ro
8880: 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20  ot..    lappend 
8890: 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09  lodroots $root..
88a0: 7d 0a 09 72 65 74 75 72 6e 20 24 6c 6f 64 72 6f  }..return $lodro
88b0: 6f 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  ots.    }..    m
88c0: 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63 68 65  ethod AddBranche
88d0: 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d  dLinesOfDevelopm
88e0: 65 6e 74 20 7b 6c 76 20 72 6f 6f 74 7d 20 7b 0a  ent {lv root} {.
88f0: 09 75 70 76 61 72 20 31 20 24 6c 76 20 6c 6f 64  .upvar 1 $lv lod
8900: 72 6f 6f 74 73 0a 09 77 68 69 6c 65 20 7b 24 72  roots..while {$r
8910: 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20  oot ne ""} {..  
8920: 20 20 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68    foreach branch
8930: 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73   [$root branches
8940: 5d 20 7b 0a 09 09 69 66 20 7b 21 5b 24 62 72 61  ] {...if {![$bra
8950: 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63  nch haschild]} c
8960: 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 63 68  ontinue...set ch
8970: 69 6c 64 20 5b 24 62 72 61 6e 63 68 20 63 68 69  ild [$branch chi
8980: 6c 64 5d 0a 09 09 23 20 52 65 63 75 72 73 65 20  ld]...# Recurse 
8990: 69 6e 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20  into the branch 
89a0: 66 6f 72 20 64 65 65 70 65 72 20 62 72 61 6e 63  for deeper branc
89b0: 68 65 73 2e 0a 09 09 24 73 65 6c 66 20 41 64 64  hes....$self Add
89c0: 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44  BranchedLinesOfD
89d0: 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f  evelopment lodro
89e0: 6f 74 73 20 24 63 68 69 6c 64 0a 09 09 6c 61 70  ots $child...lap
89f0: 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 24 63  pend lodroots $c
8a00: 68 69 6c 64 0a 09 20 20 20 20 7d 0a 09 20 20 20  hild..    }..   
8a10: 20 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74   set root [$root
8a20: 20 63 68 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75   child]..}..retu
8a30: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
8a40: 74 68 6f 64 20 45 78 63 6c 75 64 65 4e 6f 6e 54  thod ExcludeNonT
8a50: 72 75 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  runkInformation 
8a60: 7b 7d 20 7b 0a 09 23 20 52 65 6d 6f 76 65 20 61  {} {..# Remove a
8a70: 6c 6c 20 6e 6f 6e 2d 74 72 75 6e 6b 20 62 72 61  ll non-trunk bra
8a80: 6e 63 68 65 73 2c 20 72 65 76 69 73 69 6f 6e 73  nches, revisions
8a90: 2c 20 61 6e 64 20 74 61 67 73 2e 20 57 65 20 64  , and tags. We d
8aa0: 6f 0a 09 23 20 6b 65 65 70 20 74 68 65 20 74 61  o..# keep the ta
8ab0: 67 73 20 77 68 69 63 68 20 61 72 65 20 6f 6e 20  gs which are on 
8ac0: 74 68 65 20 74 72 75 6e 6b 2e 0a 0a 09 73 65 74  the trunk....set
8ad0: 20 6e 74 64 62 72 6f 6f 74 20 22 22 0a 09 66 6f   ntdbroot ""..fo
8ae0: 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c  reach root [$sel
8af0: 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70  f LinesOfDevelop
8b00: 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 23 20 4e  ment] {..    # N
8b10: 6f 74 65 3a 20 48 65 72 65 20 74 68 65 20 6f 72  ote: Here the or
8b20: 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6f 74 73  der of the roots
8b30: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2c 0a 09   is important,..
8b40: 20 20 20 20 23 20 69 2e 65 2e 20 74 68 61 74 20      # i.e. that 
8b50: 77 65 20 67 65 74 20 74 68 65 6d 20 69 6e 20 64  we get them in d
8b60: 65 70 74 68 20 66 69 72 73 74 20 6f 72 64 65 72  epth first order
8b70: 2e 20 54 68 69 73 20 65 6e 73 75 72 65 73 0a 09  . This ensures..
8b80: 20 20 20 20 23 20 74 68 61 74 20 74 68 65 20 72      # that the r
8b90: 65 6d 6f 76 61 6c 20 6f 66 20 61 20 62 72 61 6e  emoval of a bran
8ba0: 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20  ch happens only 
8bb0: 61 66 74 65 72 20 74 68 65 0a 09 20 20 20 20 23  after the..    #
8bc0: 20 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65   branches spawne
8bd0: 64 20 66 72 6f 6d 20 69 74 20 77 65 72 65 20 72  d from it were r
8be0: 65 6d 6f 76 65 64 2e 20 4f 74 68 65 72 77 69 73  emoved. Otherwis
8bf0: 65 20 74 68 65 0a 09 20 20 20 20 23 20 73 79 73  e the..    # sys
8c00: 74 65 6d 20 6d 69 67 68 74 20 74 72 79 20 74 6f  tem might try to
8c10: 20 61 63 63 65 73 73 20 64 65 6c 65 74 65 64 20   access deleted 
8c20: 6f 62 6a 65 63 74 73 2e 0a 0a 09 20 20 20 20 23  objects....    #
8c30: 20 44 6f 20 6e 6f 74 20 65 78 63 6c 75 64 65 20   Do not exclude 
8c40: 74 68 65 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20  the trunk...    
8c50: 69 66 20 7b 5b 5b 24 72 6f 6f 74 20 6c 6f 64 5d  if {[[$root lod]
8c60: 20 69 73 74 72 75 6e 6b 5d 7d 20 63 6f 6e 74 69   istrunk]} conti
8c70: 6e 75 65 0a 09 20 20 20 20 24 73 65 6c 66 20 45  nue..    $self E
8c80: 78 63 6c 75 64 65 42 72 61 6e 63 68 20 24 72 6f  xcludeBranch $ro
8c90: 6f 74 20 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 0a  ot ntdbroot..}..
8ca0: 09 69 66 20 7b 24 6e 74 64 62 72 6f 6f 74 20 6e  .if {$ntdbroot n
8cb0: 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 73 65  e ""} {..    $se
8cc0: 6c 66 20 47 72 61 66 74 4e 54 44 42 32 54 72 75  lf GraftNTDB2Tru
8cd0: 6e 6b 20 24 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a  nk $ntdbroot..}.
8ce0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
8cf0: 20 20 20 6d 65 74 68 6f 64 20 45 78 63 6c 75 64     method Exclud
8d00: 65 42 72 61 6e 63 68 20 7b 72 6f 6f 74 20 6e 76  eBranch {root nv
8d10: 7d 20 7b 0a 09 23 20 45 78 63 6c 75 64 65 20 74  } {..# Exclude t
8d20: 68 65 20 62 72 61 6e 63 68 2f 6c 6f 64 20 73 74  he branch/lod st
8d30: 61 72 74 69 6e 67 20 61 74 20 72 6f 6f 74 2c 20  arting at root, 
8d40: 61 20 72 65 76 69 73 69 6f 6e 2e 0a 09 23 0a 09  a revision...#..
8d50: 23 20 49 66 20 74 68 65 20 4c 4f 44 20 73 74 61  # If the LOD sta
8d60: 72 74 73 20 77 69 74 68 20 6e 6f 6e 2d 74 72 75  rts with non-tru
8d70: 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  nk default branc
8d80: 68 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 23 20  h revisions,..# 
8d90: 77 65 20 6c 65 61 76 65 20 74 68 65 6d 20 69 6e  we leave them in
8da0: 20 70 6c 61 63 65 20 61 6e 64 20 64 6f 20 6e 6f   place and do no
8db0: 74 20 64 65 6c 65 74 65 20 74 68 65 20 62 72 61  t delete the bra
8dc0: 6e 63 68 2e 20 49 6e 20 74 68 61 74 0a 09 23 20  nch. In that..# 
8dd0: 63 61 73 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64  case the command
8de0: 20 73 65 74 73 20 74 68 65 20 76 61 72 69 61 62   sets the variab
8df0: 6c 65 20 69 6e 20 4e 56 20 73 6f 20 74 68 61 74  le in NV so that
8e00: 20 77 65 20 63 61 6e 0a 09 23 20 6c 61 74 65 72   we can..# later
8e10: 20 72 65 77 6f 72 6b 20 74 68 65 73 65 20 72 65   rework these re
8e20: 76 69 73 6f 6e 73 20 74 6f 20 62 65 20 70 75 72  visons to be pur
8e30: 65 6c 79 20 74 72 75 6e 6b 2e 0a 0a 09 69 66 20  ely trunk....if 
8e40: 7b 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 65 66 61  {[$root isondefa
8e50: 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 20  ultbranch]} {.. 
8e60: 20 20 20 23 20 48 61 6e 64 6c 69 6e 67 20 61 20     # Handling a 
8e70: 4e 54 44 42 2e 20 54 68 69 73 20 62 72 61 6e 63  NTDB. This branc
8e80: 68 20 6d 61 79 20 63 6f 6e 73 69 73 74 73 20 6e  h may consists n
8e90: 6f 74 20 6f 6e 6c 79 20 6f 66 0a 09 20 20 20 20  ot only of..    
8ea0: 23 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 73  # NTDB revisions
8eb0: 2c 20 62 75 74 20 61 6c 73 6f 20 73 6f 6d 65 20  , but also some 
8ec0: 6e 6f 6e 2d 4e 54 44 42 2e 20 54 68 65 20 6c 61  non-NTDB. The la
8ed0: 74 74 65 72 20 61 72 65 0a 09 20 20 20 20 23 20  tter are..    # 
8ee0: 74 72 75 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63  truly on a branc
8ef0: 68 20 61 6e 64 20 68 61 76 65 20 74 6f 20 62 65  h and have to be
8f00: 20 65 78 63 6c 75 64 65 64 2e 20 54 68 65 20 66   excluded. The f
8f10: 6f 6c 6c 6f 77 69 6e 67 0a 09 20 20 20 20 23 20  ollowing..    # 
8f20: 6c 6f 6f 70 20 64 65 74 65 72 6d 69 6e 65 73 20  loop determines 
8f30: 69 66 20 74 68 65 72 65 20 61 72 65 20 73 75 63  if there are suc
8f40: 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 20  h revisions.... 
8f50: 20 20 20 75 70 76 61 72 20 31 20 24 6e 76 20 6e     upvar 1 $nv n
8f60: 74 64 62 72 6f 6f 74 0a 09 20 20 20 20 73 65 74  tdbroot..    set
8f70: 20 6e 74 64 62 72 6f 6f 74 20 24 72 6f 6f 74 0a   ntdbroot $root.
8f80: 09 20 20 20 20 24 72 6f 6f 74 20 63 75 74 66 72  .    $root cutfr
8f90: 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 0a 0a  omparentbranch..
8fa0: 09 20 20 20 20 73 65 74 20 72 65 76 20 24 72 6f  .    set rev $ro
8fb0: 6f 74 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24  ot..    while {$
8fc0: 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 24  rev ne ""} {...$
8fd0: 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61  rev removeallbra
8fe0: 6e 63 68 65 73 0a 09 09 23 20 53 65 65 20 6e 6f  nches...# See no
8ff0: 74 65 20 5b 78 5d 2e 0a 0a 09 09 69 66 20 7b 5b  te [x].....if {[
9000: 24 72 65 76 20 69 73 6f 6e 64 65 66 61 75 6c 74  $rev isondefault
9010: 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 20 20 20  branch]} {...   
9020: 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63   set rev [$rev c
9030: 68 69 6c 64 5d 0a 09 09 7d 20 65 6c 73 65 20 7b  hild]...} else {
9040: 0a 09 09 20 20 20 20 62 72 65 61 6b 0a 09 09 7d  ...    break...}
9050: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20  ..    }...    # 
9060: 72 65 76 20 6e 6f 77 20 63 6f 6e 74 61 69 6e 73  rev now contains
9070: 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e   the first non-N
9080: 54 44 42 20 72 65 76 69 73 69 6f 6e 20 61 66 74  TDB revision aft
9090: 65 72 20 74 68 65 0a 09 20 20 20 20 23 20 4e 54  er the..    # NT
90a0: 44 42 2c 20 6f 72 20 69 73 20 65 6d 70 74 79 20  DB, or is empty 
90b0: 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  if there is no s
90c0: 75 63 68 2e 20 49 66 20 77 65 20 68 61 76 65 20  uch. If we have 
90d0: 73 6f 6d 65 0a 09 20 20 20 20 23 20 74 68 65 79  some..    # they
90e0: 20 68 61 76 65 20 74 6f 20 72 65 6d 6f 76 65 64   have to removed
90f0: 2e 0a 0a 09 20 20 20 20 69 66 20 7b 24 72 65 76  ....    if {$rev
9100: 20 6e 65 20 22 22 7d 20 20 7b 0a 09 09 73 65 74   ne ""}  {...set
9110: 20 6c 61 73 74 6e 74 64 62 20 5b 24 72 65 76 20   lastntdb [$rev 
9120: 70 61 72 65 6e 74 5d 0a 09 09 24 6c 61 73 74 6e  parent]...$lastn
9130: 74 64 62 20 63 75 74 66 72 6f 6d 63 68 69 6c 64  tdb cutfromchild
9140: 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 76 20 6e  ...while {$rev n
9150: 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 24 72  e ""} {...    $r
9160: 65 76 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73  ev removealltags
9170: 0a 09 09 20 20 20 20 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: 20 20 20 20 23 20 4e 6f 74 65 20 5b 78 5d 3a 20      # Note [x]: 
91a0: 57 65 20 6d 61 79 20 73 74 69 6c 6c 20 68 61 76  We may still hav
91b0: 65 20 68 61 64 20 62 72 61 6e 63 68 65 73 20 6f  e had branches o
91c0: 6e 20 74 68 65 0a 09 09 20 20 20 20 23 20 72 65  n the...    # re
91d0: 76 69 73 69 6f 6e 2e 20 42 72 61 6e 63 68 65 73  vision. Branches
91e0: 20 77 69 74 68 6f 75 74 20 72 65 76 69 73 69 6f   without revisio
91f0: 6e 73 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 20  ns committed... 
9200: 20 20 20 23 20 6f 6e 20 74 68 65 6d 20 64 6f 20     # on them do 
9210: 6e 6f 74 20 73 68 6f 77 20 75 70 20 69 6e 20 74  not show up in t
9220: 68 65 20 6c 69 73 74 20 6f 66 20 72 6f 6f 74 73  he list of roots
9230: 20 61 6b 61 0a 09 09 20 20 20 20 23 20 6c 69 6e   aka...    # lin
9240: 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e  es of developmen
9250: 74 2e 0a 09 09 20 20 20 20 73 65 74 20 72 65 76  t....    set rev
9260: 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09   [$rev child]...
9270: 7d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 72 65  }..    }..    re
9280: 74 75 72 6e 0a 09 7d 0a 0a 09 23 20 4e 6f 20 4e  turn..}...# No N
9290: 54 44 42 20 73 74 75 66 66 20 74 6f 20 64 65 61  TDB stuff to dea
92a0: 6c 20 77 69 74 68 2e 20 46 69 72 73 74 20 64 65  l with. First de
92b0: 6c 65 74 65 20 74 68 65 20 62 72 61 6e 63 68 20  lete the branch 
92c0: 6f 62 6a 65 63 74 0a 09 23 20 69 74 73 65 6c 66  object..# itself
92d0: 2c 20 61 66 74 65 72 20 63 75 74 74 69 6e 67 20  , after cutting 
92e0: 61 6c 6c 20 74 68 65 20 76 61 72 69 6f 75 73 20  all the various 
92f0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0a 0a 09 73  connections....s
9300: 65 74 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74  et branch [$root
9310: 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09   parentbranch]..
9320: 69 66 20 7b 24 62 72 61 6e 63 68 20 6e 65 20 22  if {$branch ne "
9330: 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 62 72  "} {..    set br
9340: 61 6e 63 68 70 61 72 65 6e 74 20 5b 24 62 72 61  anchparent [$bra
9350: 6e 63 68 20 70 61 72 65 6e 74 5d 0a 09 20 20 20  nch parent]..   
9360: 20 24 62 72 61 6e 63 68 70 61 72 65 6e 74 20 72   $branchparent r
9370: 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 20 20  emovebranch     
9380: 20 20 20 24 62 72 61 6e 63 68 0a 09 20 20 20 20     $branch..    
9390: 24 62 72 61 6e 63 68 70 61 72 65 6e 74 20 72 65  $branchparent re
93a0: 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63  movechildonbranc
93b0: 68 20 24 72 6f 6f 74 0a 09 7d 0a 0a 09 23 20 54  h $root..}...# T
93c0: 68 65 20 72 6f 6f 74 20 69 73 20 6e 6f 20 73 75  he root is no su
93d0: 63 68 20 61 6e 79 20 6c 6f 6e 67 65 72 20 65 69  ch any longer ei
93e0: 74 68 65 72 2e 0a 09 6c 64 65 6c 65 74 65 20 6d  ther...ldelete m
93f0: 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 0a 09 23  yroots $root...#
9400: 20 4e 6f 77 20 67 6f 20 74 68 72 6f 75 67 68 20   Now go through 
9410: 74 68 65 20 6c 69 6e 65 20 61 6e 64 20 72 65 6d  the line and rem
9420: 6f 76 65 20 61 6c 6c 20 69 74 73 20 72 65 76 69  ove all its revi
9430: 73 69 6f 6e 73 2e 0a 0a 09 77 68 69 6c 65 20 7b  sions....while {
9440: 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09  $root ne ""} {..
9450: 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65      $root remove
9460: 61 6c 6c 74 61 67 73 0a 09 20 20 20 20 24 72 6f  alltags..    $ro
9470: 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e  ot removeallbran
9480: 63 68 65 73 0a 09 20 20 20 20 23 20 4e 6f 74 65  ches..    # Note
9490: 3a 20 53 65 65 20 74 68 65 20 6e 6f 74 65 20 5b  : See the note [
94a0: 78 5d 2e 0a 0a 09 20 20 20 20 23 20 46 72 6f 6d  x]....    # From
94b0: 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74 68 69   cvs2svn: If thi
94c0: 73 20 69 73 20 74 68 65 20 6c 61 73 74 20 64 65  s is the last de
94d0: 66 61 75 6c 74 20 72 65 76 69 73 69 6f 6e 20 6f  fault revision o
94e0: 6e 20 61 0a 09 20 20 20 20 23 20 6e 6f 6e 2d 74  n a..    # non-t
94f0: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61  runk default bra
9500: 6e 63 68 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  nch followed by 
9510: 61 20 31 2e 32 20 72 65 76 69 73 69 6f 6e 2c 0a  a 1.2 revision,.
9520: 09 20 20 20 20 23 20 74 68 65 6e 20 74 68 65 20  .    # then the 
9530: 31 2e 32 20 72 65 76 69 73 69 6f 6e 20 64 65 70  1.2 revision dep
9540: 65 6e 64 73 20 6f 6e 20 74 68 69 73 20 6f 6e 65  ends on this one
9550: 2e 20 20 46 49 58 4d 45 3a 20 49 74 20 69 73 0a  .  FIXME: It is.
9560: 09 20 20 20 20 23 20 71 75 65 73 74 69 6f 6e 61  .    # questiona
9570: 62 6c 65 20 77 68 65 74 68 65 72 20 74 68 69 73  ble whether this
9580: 20 68 61 6e 64 6c 69 6e 67 20 69 73 20 63 6f 72   handling is cor
9590: 72 65 63 74 2c 20 73 69 6e 63 65 20 74 68 65 0a  rect, since the.
95a0: 09 20 20 20 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b  .    # non-trunk
95b0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
95c0: 72 65 76 69 73 69 6f 6e 73 20 61 66 66 65 63 74  revisions affect
95d0: 20 74 72 75 6e 6b 20 61 6e 64 0a 09 20 20 20 20   trunk and..    
95e0: 23 20 73 68 6f 75 6c 64 20 74 68 65 72 65 66 6f  # should therefo
95f0: 72 65 20 6e 6f 74 20 6a 75 73 74 20 62 65 20 64  re not just be d
9600: 69 73 63 61 72 64 65 64 20 65 76 65 6e 20 69 66  iscarded even if
9610: 0a 09 20 20 20 20 23 20 2d 2d 74 72 75 6e 6b 2d  ..    # --trunk-
9620: 6f 6e 6c 79 2e 0a 0a 09 20 20 20 20 69 66 20 7b  only....    if {
9630: 5b 24 72 6f 6f 74 20 68 61 73 64 65 66 61 75 6c  [$root hasdefaul
9640: 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 7d 20 7b  tbranchchild]} {
9650: 0a 09 09 73 65 74 20 6e 74 64 62 63 68 69 6c 64  ...set ntdbchild
9660: 20 5b 24 72 6f 6f 74 20 64 65 66 61 75 6c 74 62   [$root defaultb
9670: 72 61 6e 63 68 63 68 69 6c 64 5d 0a 09 09 69 6e  ranchchild]...in
9680: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b  tegrity assert {
9690: 0a 09 09 20 20 20 20 5b 24 6e 74 64 62 63 68 69  ...    [$ntdbchi
96a0: 6c 64 20 64 65 66 61 75 6c 74 62 72 61 6e 63 68  ld defaultbranch
96b0: 70 61 72 65 6e 74 5d 20 65 71 20 24 6e 74 64 62  parent] eq $ntdb
96c0: 63 68 69 6c 64 0a 09 09 7d 20 7b 6e 74 64 62 20  child...} {ntdb 
96d0: 2d 20 74 72 75 6e 6b 20 6c 69 6e 6b 61 67 65 20  - trunk linkage 
96e0: 62 72 6f 6b 65 6e 7d 0a 09 09 24 6e 74 64 62 63  broken}...$ntdbc
96f0: 68 69 6c 64 20 63 75 74 64 65 66 61 75 6c 74 62  hild cutdefaultb
9700: 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 09 69 66  ranchparent...if
9710: 20 7b 5b 24 6e 74 64 62 63 68 69 6c 64 20 68 61   {[$ntdbchild ha
9720: 73 70 61 72 65 6e 74 5d 7d 20 7b 0a 09 09 20 20  sparent]} {...  
9730: 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74    lappend myroot
9740: 73 20 5b 24 6e 74 64 62 63 68 69 6c 64 20 70 61  s [$ntdbchild pa
9750: 72 65 6e 74 5d 0a 09 09 7d 0a 09 20 20 20 20 7d  rent]...}..    }
9760: 0a 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74 20  ...    set root 
9770: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d  [$root child]..}
9780: 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  ...return.    }.
9790: 0a 20 20 20 20 6d 65 74 68 6f 64 20 47 72 61 66  .    method Graf
97a0: 74 4e 54 44 42 32 54 72 75 6e 6b 20 7b 72 6f 6f  tNTDB2Trunk {roo
97b0: 74 7d 20 7b 0a 09 23 20 57 65 20 63 61 6e 20 6e  t} {..# We can n
97c0: 6f 77 20 67 72 61 66 74 20 74 68 65 20 6e 6f 6e  ow graft the non
97d0: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62  -trunk default b
97e0: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 20  ranch revisions 
97f0: 74 6f 0a 09 23 20 74 72 75 6e 6b 2e 20 54 68 65  to..# trunk. The
9800: 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64 79  y should already
9810: 20 62 65 20 61 6c 6f 6e 65 20 6f 6e 20 61 20 43   be alone on a C
9820: 56 53 42 72 61 6e 63 68 2d 6c 65 73 73 0a 09 23  VSBranch-less..#
9830: 20 62 72 61 6e 63 68 2e 0a 0a 09 69 6e 74 65 67   branch....integ
9840: 72 69 74 79 20 61 73 73 65 72 74 20 7b 21 5b 24  rity assert {![$
9850: 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 62 72  root hasparentbr
9860: 61 6e 63 68 5d 7d 20 7b 4e 54 44 42 20 72 6f 6f  anch]} {NTDB roo
9870: 74 20 73 74 69 6c 6c 20 68 61 73 20 69 74 73 20  t still has its 
9880: 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 7d 0a 09  branch symbol}..
9890: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74  integrity assert
98a0: 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73 62 72 61   {![$root hasbra
98b0: 6e 63 68 65 73 5d 7d 20 20 20 20 20 7b 4e 54 44  nches]}     {NTD
98c0: 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73  B root still has
98d0: 20 73 70 61 77 6e 65 64 20 62 72 61 6e 63 68 65   spawned branche
98e0: 73 7d 0a 0a 09 73 65 74 20 6c 61 73 74 20 24 72  s}...set last $r
98f0: 6f 6f 74 0a 09 77 68 69 6c 65 20 7b 5b 24 6c 61  oot..while {[$la
9900: 73 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 73  st haschild]} {s
9910: 65 74 20 6c 61 73 74 20 5b 24 6c 61 73 74 20 63  et last [$last c
9920: 68 69 6c 64 5d 7d 0a 0a 09 69 66 20 7b 5b 24 6c  hild]}...if {[$l
9930: 61 73 74 20 68 61 73 64 65 66 61 75 6c 74 62 72  ast hasdefaultbr
9940: 61 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 0a 09  anchchild]} {...
9950: 20 20 20 20 73 65 74 20 72 65 76 31 32 20 5b 24      set rev12 [$
9960: 6c 61 73 74 20 64 65 66 61 75 6c 74 62 72 61 6e  last defaultbran
9970: 63 68 63 68 69 6c 64 5d 0a 09 20 20 20 20 24 72  chchild]..    $r
9980: 65 76 31 32 20 63 75 74 64 65 66 61 75 6c 74 62  ev12 cutdefaultb
9990: 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 20 20 20  ranchparent..   
99a0: 20 24 6c 61 73 74 20 20 63 75 74 64 65 66 61 75   $last  cutdefau
99b0: 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 0a 0a 09  ltbranchchild...
99c0: 20 20 20 20 24 72 65 76 31 32 20 63 68 61 6e 67      $rev12 chang
99d0: 65 70 61 72 65 6e 74 20 24 6c 61 73 74 0a 09 20  eparent $last.. 
99e0: 20 20 20 24 6c 61 73 74 20 20 63 68 61 6e 67 65     $last  change
99f0: 63 68 69 6c 64 20 24 72 65 76 31 32 0a 0a 09 20  child $rev12... 
9a00: 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f     ldelete myroo
9a10: 74 73 20 24 72 65 76 31 32 0a 0a 09 20 20 20 20  ts $rev12...    
9a20: 23 20 4e 6f 74 65 20 61 6e 64 20 72 65 6d 65 6d  # Note and remem
9a30: 62 65 72 20 74 68 61 74 20 74 68 65 20 74 79 70  ber that the typ
9a40: 65 20 6f 66 20 72 65 76 31 32 20 77 61 73 20 61  e of rev12 was a
9a50: 6c 72 65 61 64 79 0a 09 20 20 20 20 23 20 61 64  lready..    # ad
9a60: 6a 75 73 74 65 64 20 62 79 20 41 64 6a 75 73 74  justed by Adjust
9a70: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42  NonTrunkDefaultB
9a80: 72 61 6e 63 68 2c 20 73 6f 20 77 65 20 64 6f 6e  ranch, so we don
9a90: 27 74 0a 09 20 20 20 20 23 20 68 61 76 65 20 74  't..    # have t
9aa0: 6f 20 63 68 61 6e 67 65 20 69 74 73 20 74 79 70  o change its typ
9ab0: 65 20 68 65 72 65 2e 0a 09 7d 0a 0a 09 77 68 69  e here...}...whi
9ac0: 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d  le {$root ne ""}
9ad0: 20 7b 0a 09 20 20 20 20 24 72 6f 6f 74 20 73 65   {..    $root se
9ae0: 74 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68  tondefaultbranch
9af0: 20 30 0a 09 20 20 20 20 24 72 6f 6f 74 20 73 65   0..    $root se
9b00: 74 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20  tlod $mytrunk.. 
9b10: 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 5b     foreach tag [
9b20: 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09  $root tags] {...
9b30: 24 74 61 67 20 73 65 74 6c 6f 64 20 24 6d 79 74  $tag setlod $myt
9b40: 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 09 20 20 20  runk..    }..   
9b50: 20 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74   set root [$root
9b60: 20 63 68 69 6c 64 5d 0a 09 7d 0a 0a 20 20 20 20   child]..}..    
9b70: 20 20 20 20 72 65 74 75 72 6e 0a 20 20 20 20 7d      return.    }
9b80: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 63 74  ..    method Act
9b90: 69 76 65 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65  ive {} {..set re
9ba0: 76 69 73 69 6f 6e 73 20 7b 7d 0a 09 73 65 74 20  visions {}..set 
9bb0: 73 79 6d 62 6f 6c 73 20 20 20 7b 7d 0a 0a 09 66  symbols   {}...f
9bc0: 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65  oreach root [$se
9bd0: 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f  lf LinesOfDevelo
9be0: 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66  pment] {..    if
9bf0: 20 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65   {[$root haspare
9c00: 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 20 6c 61 70  ntbranch]} { lap
9c10: 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 5b 24 72  pend symbols [$r
9c20: 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68  oot parentbranch
9c30: 5d 20 7d 0a 09 20 20 20 20 77 68 69 6c 65 20 7b  ] }..    while {
9c40: 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09  $root ne ""} {..
9c50: 09 6c 61 70 70 65 6e 64 20 72 65 76 69 73 69 6f  .lappend revisio
9c60: 6e 73 20 24 72 6f 6f 74 0a 09 09 66 6f 72 65 61  ns $root...forea
9c70: 63 68 20 74 61 67 20 20 20 20 5b 24 72 6f 6f 74  ch tag    [$root
9c80: 20 74 61 67 73 5d 20 20 20 20 20 7b 20 6c 61 70   tags]     { lap
9c90: 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 74 61  pend symbols $ta
9ca0: 67 20 20 20 20 7d 0a 09 09 66 6f 72 65 61 63 68  g    }...foreach
9cb0: 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62   branch [$root b
9cc0: 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 20 20 20  ranches] {...   
9cd0: 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72   integrity asser
9ce0: 74 20 7b 0a 09 09 09 5b 24 62 72 61 6e 63 68 20  t {....[$branch 
9cf0: 70 61 72 65 6e 74 5d 20 65 71 20 24 72 6f 6f 74  parent] eq $root
9d00: 0a 09 09 20 20 20 20 7d 20 7b 42 61 63 6b 72 65  ...    } {Backre
9d10: 66 65 72 65 6e 63 65 20 62 72 61 6e 63 68 20 74  ference branch t
9d20: 6f 20 69 74 73 20 72 6f 6f 74 20 69 73 20 6d 69  o its root is mi
9d30: 73 73 69 6e 67 20 6f 72 20 77 72 6f 6e 67 7d 0a  ssing or wrong}.
9d40: 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 73 79  ..    lappend sy
9d50: 6d 62 6f 6c 73 20 24 62 72 61 6e 63 68 0a 09 09  mbols $branch...
9d60: 7d 0a 09 09 73 65 74 20 6c 6f 64 20 5b 24 72 6f  }...set lod [$ro
9d70: 6f 74 20 6c 6f 64 5d 0a 09 09 69 66 20 7b 21 5b  ot lod]...if {![
9d80: 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 7d 20 7b  $lod istrunk]} {
9d90: 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 74 79  ...    integrity
9da0: 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b 24 6c   assert {....[$l
9db0: 6f 64 20 68 61 73 63 68 69 6c 64 5d 0a 09 09 20  od haschild]... 
9dc0: 20 20 20 7d 20 7b 42 72 61 6e 63 68 20 69 73 20     } {Branch is 
9dd0: 4c 4f 44 20 73 79 6d 62 6f 6c 20 77 69 74 68 6f  LOD symbol witho
9de0: 75 74 20 72 65 76 69 73 69 6f 6e 73 7d 0a 09 09  ut revisions}...
9df0: 20 20 20 20 6c 61 70 70 65 6e 64 20 73 79 6d 62      lappend symb
9e00: 6f 6c 73 20 24 6c 6f 64 0a 09 09 7d 0a 09 09 73  ols $lod...}...s
9e10: 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63  et root [$root c
9e20: 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a  hild]..    }..}.
9e30: 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b  ..return [list [
9e40: 6c 73 6f 72 74 20 2d 75 6e 69 71 75 65 20 2d 64  lsort -unique -d
9e50: 69 63 74 20 24 72 65 76 69 73 69 6f 6e 73 5d 20  ict $revisions] 
9e60: 5b 6c 73 6f 72 74 20 2d 75 6e 69 71 75 65 20 2d  [lsort -unique -
9e70: 64 69 63 74 20 24 73 79 6d 62 6f 6c 73 5d 5d 0a  dict $symbols]].
9e80: 20 20 20 20 7d 0a 0a 0a 20 20 20 20 6d 65 74 68      }...    meth
9e90: 6f 64 20 41 67 67 72 65 67 61 74 65 53 79 6d 62  od AggregateSymb
9ea0: 6f 6c 44 61 74 61 20 7b 7d 20 7b 0a 09 23 20 4e  olData {} {..# N
9eb0: 6f 77 20 74 68 61 74 20 74 68 65 20 65 78 61 63  ow that the exac
9ec0: 74 20 73 65 74 20 6f 66 20 72 65 76 69 73 69 6f  t set of revisio
9ed0: 6e 73 20 28 61 6e 64 20 74 68 72 6f 75 67 68 20  ns (and through 
9ee0: 74 68 61 74 0a 09 23 20 62 72 61 6e 63 68 65 73  that..# branches
9ef0: 20 61 6e 64 20 74 61 67 73 29 20 69 73 20 6b 6e   and tags) is kn
9f00: 6f 77 6e 20 77 65 20 63 61 6e 20 75 70 64 61 74  own we can updat
9f10: 65 20 74 68 65 20 61 67 67 72 65 67 61 74 65 0a  e the aggregate.
9f20: 09 23 20 73 79 6d 62 6f 6c 20 73 74 61 74 69 73  .# symbol statis
9f30: 74 69 63 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20  tics....foreach 
9f40: 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65  root [$self Line
9f50: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20  sOfDevelopment] 
9f60: 7b 0a 09 20 20 20 20 73 65 74 20 6c 6f 64 20 5b  {..    set lod [
9f70: 24 72 6f 6f 74 20 6c 6f 64 5d 0a 0a 09 20 20 20  $root lod]...   
9f80: 20 23 20 4e 6f 74 65 3a 20 49 66 20 74 68 65 20   # Note: If the 
9f90: 4c 4f 44 20 69 73 20 74 68 65 20 74 72 75 6e 6b  LOD is the trunk
9fa0: 20 74 68 65 20 63 6f 75 6e 74 2a 2c 20 65 74 63   the count*, etc
9fb0: 2e 20 6d 65 74 68 6f 64 73 0a 09 20 20 20 20 23  . methods..    #
9fc0: 20 77 69 6c 6c 20 64 6f 20 6e 6f 74 68 69 6e 67   will do nothing
9fd0: 2c 20 61 73 20 69 74 20 69 73 20 61 6c 77 61 79  , as it is alway
9fe0: 73 20 70 72 65 73 65 6e 74 20 28 63 61 6e 6e 6f  s present (canno
9ff0: 74 20 62 65 0a 09 20 20 20 20 23 20 65 78 63 6c  t be..    # excl
a000: 75 64 65 64 29 2c 20 61 6e 64 20 69 73 20 61 6c  uded), and is al
a010: 77 61 79 73 20 61 20 62 72 61 6e 63 68 20 74 6f  ways a branch to
a020: 6f 2e 0a 0a 09 20 20 20 20 23 20 4c 69 6e 65 73  o....    # Lines
a030: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20   of development 
a040: 63 6f 75 6e 74 20 61 73 20 62 72 61 6e 63 68 65  count as branche
a050: 73 20 61 6e 64 20 68 61 76 65 20 61 20 63 6f 6d  s and have a com
a060: 6d 69 74 0a 09 20 20 20 20 23 20 6f 6e 20 74 68  mit..    # on th
a070: 65 6d 20 28 72 6f 6f 74 29 2e 20 49 66 20 74 68  em (root). If th
a080: 65 79 20 61 72 65 20 73 74 69 6c 6c 20 61 74 74  ey are still att
a090: 61 63 68 65 64 20 74 6f 20 61 20 74 72 65 65 20  ached to a tree 
a0a0: 77 65 0a 09 20 20 20 20 23 20 68 61 76 65 20 74  we..    # have t
a0b0: 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20 72 65  o compute and re
a0c0: 67 69 73 74 65 72 20 70 6f 73 73 69 62 6c 65 20  gister possible 
a0d0: 70 61 72 65 6e 74 73 2e 0a 0a 09 20 20 20 20 24  parents....    $
a0e0: 6c 6f 64 20 63 6f 75 6e 74 61 73 62 72 61 6e 63  lod countasbranc
a0f0: 68 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e  h..    $lod coun
a100: 74 61 63 6f 6d 6d 69 74 0a 0a 09 20 20 20 20 69  tacommit...    i
a110: 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61 72  f {[$root haspar
a120: 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09  entbranch]} {...
a130: 23 20 4e 6f 74 65 20 6c 6f 64 20 3d 3d 20 5b 24  # Note lod == [$
a140: 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63  root parentbranc
a150: 68 5d 0a 09 09 24 6c 6f 64 20 70 6f 73 73 69 62  h]...$lod possib
a160: 6c 65 70 61 72 65 6e 74 73 0a 09 20 20 20 20 7d  leparents..    }
a170: 20 65 6c 73 65 69 66 20 7b 21 5b 24 6c 6f 64 20   elseif {![$lod 
a180: 69 73 74 72 75 6e 6b 5d 20 26 26 20 5b 24 72 6f  istrunk] && [$ro
a190: 6f 74 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72  ot isondefaultbr
a1a0: 61 6e 63 68 5d 7d 20 7b 0a 09 09 23 20 54 68 69  anch]} {...# Thi
a1b0: 73 20 69 73 20 74 68 65 20 72 6f 6f 74 20 72 65  s is the root re
a1c0: 76 69 73 69 6f 6e 20 6f 66 20 61 20 64 65 74 61  vision of a deta
a1d0: 63 68 65 64 20 4e 54 44 42 2e 20 57 65 0a 09 09  ched NTDB. We...
a1e0: 23 20 68 61 76 65 20 74 6f 20 6d 61 6e 75 61 6c  # have to manual
a1f0: 6c 79 20 73 65 74 20 74 68 65 20 6f 6e 6c 79 20  ly set the only 
a200: 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 20  possible parent 
a210: 66 6f 72 0a 09 09 23 20 74 68 69 73 20 4c 4f 44  for...# this LOD
a220: 2c 20 74 68 65 20 74 72 75 6e 6b 20 69 74 73 65  , the trunk itse
a230: 6c 66 2e 0a 0a 09 09 5b 24 6c 6f 64 20 73 79 6d  lf.....[$lod sym
a240: 62 6f 6c 5d 20 70 6f 73 73 69 62 6c 65 70 61 72  bol] possiblepar
a250: 65 6e 74 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20  ent $mytrunk..  
a260: 20 20 7d 0a 0a 09 20 20 20 20 23 20 46 6f 72 20    }...    # For 
a270: 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 69 6e  the revisions in
a280: 20 74 68 65 20 6c 69 6e 65 20 77 65 20 72 65 67   the line we reg
a290: 69 73 74 65 72 20 74 68 65 69 72 20 62 72 61 6e  ister their bran
a2a0: 63 68 65 73 0a 09 20 20 20 20 23 20 61 6e 64 20  ches..    # and 
a2b0: 74 61 67 73 20 61 73 20 62 6c 6f 63 6b 65 72 73  tags as blockers
a2c0: 20 66 6f 72 20 74 68 65 20 6c 6f 64 2c 20 61 6e   for the lod, an
a2d0: 64 20 75 70 64 61 74 65 20 74 68 65 20 74 79 70  d update the typ
a2e0: 65 0a 09 20 20 20 20 23 20 63 6f 75 6e 74 65 72  e..    # counter
a2f0: 73 20 61 73 20 77 65 6c 6c 2e 20 41 73 20 62 72  s as well. As br
a300: 61 6e 63 68 20 73 79 6d 62 6f 6c 73 20 77 69 74  anch symbols wit
a310: 68 6f 75 74 20 63 6f 6d 6d 69 74 73 20 6f 6e 0a  hout commits on.
a320: 09 20 20 20 20 23 20 74 68 65 6d 20 61 72 65 20  .    # them are 
a330: 6e 6f 74 20 6c 69 73 74 65 64 20 61 73 20 6c 69  not listed as li
a340: 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65  nes of developme
a350: 6e 74 2c 20 77 65 20 68 61 76 65 20 74 6f 0a 09  nt, we have to..
a360: 20 20 20 20 23 20 63 6f 75 6e 74 20 74 68 65 6d      # count them
a370: 20 68 65 72 65 20 61 73 20 77 65 6c 6c 2c 20 61   here as well, a
a380: 73 20 70 6c 61 69 6e 20 62 72 61 6e 63 68 65 73  s plain branches
a390: 2e 20 41 74 20 6c 61 73 74 20 77 65 0a 09 20 20  . At last we..  
a3a0: 20 20 23 20 68 61 76 65 20 74 6f 20 63 6f 6d 70    # have to comp
a3b0: 75 74 65 20 61 6e 64 20 72 65 67 69 73 74 65 72  ute and register
a3c0: 20 74 68 65 20 70 6f 73 73 69 62 6c 65 20 70 61   the possible pa
a3d0: 72 65 6e 74 73 20 6f 66 20 74 68 65 0a 09 20 20  rents of the..  
a3e0: 20 20 23 20 74 61 67 73 2c 20 69 6e 20 63 61 73    # tags, in cas
a3f0: 65 20 74 68 65 79 20 61 72 65 20 6c 61 74 65 72  e they are later
a400: 20 63 6f 6e 76 65 72 74 65 64 20 61 73 20 62 72   converted as br
a410: 61 6e 63 68 65 73 2e 0a 0a 09 20 20 20 20 77 68  anches....    wh
a420: 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22  ile {$root ne ""
a430: 7d 20 7b 0a 09 09 66 6f 72 65 61 63 68 20 62 72  } {...foreach br
a440: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e  anch [$root bran
a450: 63 68 65 73 5d 20 7b 0a 09 09 20 20 20 20 24 6c  ches] {...    $l
a460: 6f 64 20 62 6c 6f 63 6b 65 64 62 79 20 24 62 72  od blockedby $br
a470: 61 6e 63 68 0a 09 09 20 20 20 20 24 62 72 61 6e  anch...    $bran
a480: 63 68 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e  ch possibleparen
a490: 74 73 0a 09 09 20 20 20 20 69 66 20 7b 5b 24 62  ts...    if {[$b
a4a0: 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d  ranch haschild]}
a4b0: 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20 20 20   continue...    
a4c0: 24 62 72 61 6e 63 68 20 63 6f 75 6e 74 61 73 62  $branch countasb
a4d0: 72 61 6e 63 68 0a 09 09 7d 0a 0a 09 09 66 6f 72  ranch...}....for
a4e0: 65 61 63 68 20 74 61 67 20 5b 24 72 6f 6f 74 20  each tag [$root 
a4f0: 74 61 67 73 5d 20 7b 0a 09 09 20 20 20 20 24 6c  tags] {...    $l
a500: 6f 64 20 62 6c 6f 63 6b 65 64 62 79 20 24 74 61  od blockedby $ta
a510: 67 0a 09 09 20 20 20 20 24 74 61 67 20 70 6f 73  g...    $tag pos
a520: 73 69 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 20  sibleparents... 
a530: 20 20 20 24 74 61 67 20 63 6f 75 6e 74 61 73 74     $tag countast
a540: 61 67 0a 09 09 7d 0a 0a 09 09 73 65 74 20 72 6f  ag...}....set ro
a550: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d  ot [$root child]
a560: 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74  ..    }..}...ret
a570: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
a580: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
a590: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
a5a0: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f  ######.    ## Co
a5b0: 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20  nfiguration..   
a5c0: 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65   pragma -hastype
a5d0: 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20  info    no  ; # 
a5e0: 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65  no type introspe
a5f0: 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61  ction.    pragma
a600: 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20   -hasinfo       
a610: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65   no  ; # no obje
a620: 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e  ct introspection
a630: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73  .    pragma -has
a640: 74 79 70 65 6d 65 74 68 6f 64 73 20 6e 6f 20 20  typemethods no  
a650: 3b 20 23 20 74 79 70 65 20 69 73 20 6e 6f 74 20  ; # type is not 
a660: 72 65 6c 65 76 61 6e 74 2e 0a 0a 20 20 20 20 23  relevant...    #
a670: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
a680: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
a690: 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70  ######.}..namesp
a6a0: 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66  ace eval ::vc::f
a6b0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
a6c0: 76 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61  vs {.    namespa
a6d0: 63 65 20 65 78 70 6f 72 74 20 66 69 6c 65 0a 20  ce export file. 
a6e0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
a6f0: 6c 20 66 69 6c 65 20 7b 0a 09 23 20 49 6d 70 6f  l file {..# Impo
a700: 72 74 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2c  rt not required,
a710: 20 61 6c 72 65 61 64 79 20 61 20 63 68 69 6c 64   already a child
a720: 20 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23 20 6e   namespace...# n
a730: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
a740: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
a750: 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a  port::cvs::file:
a760: 3a 72 65 76 0a 09 23 20 6e 61 6d 65 73 70 61 63  :rev..# namespac
a770: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
a780: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
a790: 76 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 0a 09 6e  vs::file::sym..n
a7a0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
a7b0: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73  ::vc::tools::mis
a7c0: 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20  c::*..namespace 
a7d0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f  import ::vc::too
a7e0: 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 6d  ls::trouble..nam
a7f0: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
a800: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09  vc::tools::log..
a810: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
a820: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
a830: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74  mport::cvs::stat
a840: 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  e..namespace imp
a850: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  ort ::vc::fossil
a860: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69  ::import::cvs::i
a870: 6e 74 65 67 72 69 74 79 0a 09 6e 61 6d 65 73 70  ntegrity..namesp
a880: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
a890: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
a8a0: 3a 63 76 73 3a 3a 67 74 63 6f 72 65 0a 20 20 20  :cvs::gtcore.   
a8b0: 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23   }.}..# # ## ###
a8c0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
a8d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23  ############# ##
a8e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a8f0: 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61  ###.## Ready..pa
a900: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 63  ckage provide vc
a910: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
a920: 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a  ::cvs::file 1.0.
a930: 72 65 74 75 72 6e 0a                             return.