Hex Artifact Content
Not logged in

Artifact 44f7ae687cb0fc07949bf6dc8caab7ea50985dd3:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [bf0b70d5e0] - Fixed handling of empty revisions. by aku on 2007-12-06 03:48:25.

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 67 74 63 6f 72 65 20 64 61 74 61 63 6d  ...gtcore datacm
2af0: 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78  d   [mymethod Ex
2b00: 70 61 6e 64 44 61 74 61 5d 0a 09 67 74 63 6f 72  pandData]..gtcor
2b10: 65 20 66 6f 72 6d 61 74 63 6d 64 20 5b 6d 79 6d  e formatcmd [mym
2b20: 65 74 68 6f 64 20 45 78 70 61 6e 64 46 6f 72 6d  ethod ExpandForm
2b30: 61 74 5d 0a 09 67 74 63 6f 72 65 20 73 6f 72 74  at]..gtcore sort
2b40: 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20  cmd   [mymethod 
2b50: 45 78 70 61 6e 64 53 6f 72 74 5d 0a 09 67 74 63  ExpandSort]..gtc
2b60: 6f 72 65 20 73 61 76 65 63 6d 64 20 20 20 5b 6d  ore savecmd   [m
2b70: 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 31 20  ymethod Expand1 
2b80: 24 61 63 20 24 64 69 72 5d 0a 0a 09 67 74 63 6f  $ac $dir]...gtco
2b90: 72 65 20 74 72 61 76 65 72 73 65 20 24 65 78 20  re traverse $ex 
2ba0: 3b 20 23 20 54 68 65 20 67 72 61 70 68 20 69 73  ; # The graph is
2bb0: 20 67 6f 6e 65 20 61 66 74 65 72 20 74 68 65 20   gone after the 
2bc0: 63 61 6c 6c 0a 09 63 6c 6f 73 65 20 24 61 63 0a  call..close $ac.
2bd0: 0a 09 23 20 4e 6f 77 20 74 72 61 76 65 72 73 65  ..# Now traverse
2be0: 20 74 68 65 20 69 6d 70 6f 72 74 20 67 72 61 70   the import grap
2bf0: 68 2c 20 74 68 69 73 20 62 75 69 6c 64 73 20 74  h, this builds t
2c00: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 09  he instruction..
2c10: 23 20 6d 61 70 20 66 6f 72 20 74 68 65 20 66 6f  # map for the fo
2c20: 73 73 69 6c 20 64 65 6c 74 61 73 2e 0a 0a 09 67  ssil deltas....g
2c30: 74 63 6f 72 65 20 64 61 74 61 63 6d 64 20 20 20  tcore datacmd   
2c40: 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64  [mymethod Expand
2c50: 44 61 74 61 5d 0a 09 67 74 63 6f 72 65 20 66 6f  Data]..gtcore fo
2c60: 72 6d 61 74 63 6d 64 20 5b 6d 79 6d 65 74 68 6f  rmatcmd [mymetho
2c70: 64 20 45 78 70 61 6e 64 46 6f 72 6d 61 74 5d 0a  d ExpandFormat].
2c80: 09 67 74 63 6f 72 65 20 73 6f 72 74 63 6d 64 20  .gtcore sortcmd 
2c90: 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61    [mymethod Expa
2ca0: 6e 64 53 6f 72 74 5d 0a 09 67 74 63 6f 72 65 20  ndSort]..gtcore 
2cb0: 73 61 76 65 63 6d 64 20 20 20 5b 6d 79 6d 65 74  savecmd   [mymet
2cc0: 68 6f 64 20 45 78 70 61 6e 64 32 5d 0a 0a 09 73  hod Expand2]...s
2cd0: 65 74 20 6d 79 69 6d 70 6f 72 74 20 7b 7d 0a 09  et myimport {}..
2ce0: 67 74 63 6f 72 65 20 74 72 61 76 65 72 73 65 20  gtcore traverse 
2cf0: 24 7a 70 20 3b 20 23 20 54 68 65 20 67 72 61 70  $zp ; # The grap
2d00: 68 20 69 73 20 67 6f 6e 65 20 61 66 74 65 72 20  h is gone after 
2d10: 74 68 65 20 63 61 6c 6c 0a 09 73 65 74 20 66 69  the call..set fi
2d20: 6c 65 6d 61 70 20 24 6d 79 69 6d 70 6f 72 74 0a  lemap $myimport.
2d30: 09 75 6e 73 65 74 20 6d 79 69 6d 70 6f 72 74 0a  .unset myimport.
2d40: 0a 09 23 20 41 6e 64 20 62 61 63 6b 20 74 6f 20  ..# And back to 
2d50: 69 6d 70 6f 72 74 20 63 6f 6e 74 72 6f 6c 0a 0a  import control..
2d60: 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 66  .return [list $f
2d70: 69 6c 65 6d 61 70 20 24 72 65 76 6d 61 70 5d 0a  ilemap $revmap].
2d80: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
2d90: 64 20 45 78 70 61 6e 64 44 61 74 61 20 20 20 7b  d ExpandData   {
2da0: 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 20 72 65  graph node} { re
2db0: 74 75 72 6e 20 5b 24 67 72 61 70 68 20 6e 6f 64  turn [$graph nod
2dc0: 65 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76 6e  e get $node revn
2dd0: 72 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  r] }.    method 
2de0: 45 78 70 61 6e 64 46 6f 72 6d 61 74 20 7b 67 72  ExpandFormat {gr
2df0: 61 70 68 20 69 74 65 6d 7d 20 7b 20 72 65 74 75  aph item} { retu
2e00: 72 6e 20 3c 5b 6c 69 6e 64 65 78 20 24 69 74 65  rn <[lindex $ite
2e10: 6d 20 31 5d 3e 20 7d 20 3b 20 23 20 72 65 76 6e  m 1]> } ; # revn
2e20: 72 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70  r.    method Exp
2e30: 61 6e 64 53 6f 72 74 20 20 20 7b 67 72 61 70 68  andSort   {graph
2e40: 20 63 61 6e 64 69 64 61 74 65 73 7d 20 7b 0a 09   candidates} {..
2e50: 23 20 63 61 6e 64 69 64 61 74 65 73 20 3d 20 6c  # candidates = l
2e60: 69 73 74 28 69 74 65 6d 29 2c 20 69 74 65 6d 20  ist(item), item 
2e70: 3d 20 6c 69 73 74 28 6e 6f 64 65 20 72 65 76 6e  = list(node revn
2e80: 72 29 0a 09 23 20 53 6f 72 74 20 62 79 20 6e 6f  r)..# Sort by no
2e90: 64 65 20 61 6e 64 20 72 65 76 6e 72 20 2d 3e 20  de and revnr -> 
2ea0: 54 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20  Trunk revisions 
2eb0: 63 6f 6d 65 20 66 69 72 73 74 2e 0a 09 72 65 74  come first...ret
2ec0: 75 72 6e 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65  urn [lsort -inde
2ed0: 78 20 31 20 2d 64 69 63 74 20 5b 6c 73 6f 72 74  x 1 -dict [lsort
2ee0: 20 2d 69 6e 64 65 78 20 30 20 2d 64 69 63 74 20   -index 0 -dict 
2ef0: 24 63 61 6e 64 69 64 61 74 65 73 5d 5d 0a 20 20  $candidates]].  
2f00: 20 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 45    }.    method E
2f10: 78 70 61 6e 64 31 20 7b 63 68 61 6e 20 64 69 72  xpand1 {chan dir
2f20: 20 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a 09   graph node} {..
2f30: 73 65 74 20 72 65 76 6e 72 20 20 20 20 20 20 20  set revnr       
2f40: 20 20 20 20 5b 24 67 72 61 70 68 20 6e 6f 64 65      [$graph node
2f50: 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72   get $node revnr
2f60: 5d 0a 09 73 65 74 20 66 6e 61 6d 65 20 20 20 20  ]..set fname    
2f70: 20 20 20 20 20 20 72 24 72 65 76 6e 72 0a 09 73        r$revnr..s
2f80: 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69  truct::list assi
2f90: 67 6e 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20  gn [$graph node 
2fa0: 67 65 74 20 24 6e 6f 64 65 20 74 65 78 74 5d 20  get $node text] 
2fb0: 6f 66 66 73 65 74 20 6c 65 6e 67 74 68 0a 0a 09  offset length...
2fc0: 69 66 20 7b 24 6c 65 6e 67 74 68 20 3c 20 30 7d  if {$length < 0}
2fd0: 20 7b 0a 09 20 20 20 20 73 65 74 20 64 61 74 61   {..    set data
2fe0: 20 22 22 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20   ""..} else {.. 
2ff0: 20 20 20 73 65 65 6b 20 24 63 68 61 6e 20 24 6f     seek $chan $o
3000: 66 66 73 65 74 20 73 74 61 72 74 0a 09 20 20 20  ffset start..   
3010: 20 73 65 74 20 64 61 74 61 20 5b 73 74 72 69 6e   set data [strin
3020: 67 20 6d 61 70 20 7b 40 40 20 40 7d 20 5b 72 65  g map {@@ @} [re
3030: 61 64 20 24 63 68 61 6e 20 24 6c 65 6e 67 74 68  ad $chan $length
3040: 5d 5d 0a 09 7d 0a 0a 09 69 66 20 7b 21 5b 24 67  ]]..}...if {![$g
3050: 72 61 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 69  raph node keyexi
3060: 73 74 73 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65  sts $node __base
3070: 5f 5f 5d 7d 20 7b 0a 09 20 20 20 20 23 20 46 75  __]} {..    # Fu
3080: 6c 6c 20 74 65 78 74 20 6e 6f 64 65 2e 20 47 65  ll text node. Ge
3090: 74 20 74 68 65 20 64 61 74 61 2c 20 64 65 63 6f  t the data, deco
30a0: 64 65 20 69 74 2c 20 61 6e 64 20 73 61 76 65 2e  de it, and save.
30b0: 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  ...    log write
30c0: 20 32 20 66 69 6c 65 20 7b 45 78 70 61 6e 64 69   2 file {Expandi
30d0: 6e 67 20 3c 24 72 65 76 6e 72 3e 2c 20 66 75 6c  ng <$revnr>, ful
30e0: 6c 20 74 65 78 74 7d 0a 0a 09 20 20 20 20 66 69  l text}...    fi
30f0: 6c 65 75 74 69 6c 3a 3a 77 72 69 74 65 46 69 6c  leutil::writeFil
3100: 65 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62  e -translation b
3110: 69 6e 61 72 79 20 24 64 69 72 2f 24 66 6e 61 6d  inary $dir/$fnam
3120: 65 20 24 64 61 74 61 0a 09 7d 20 65 6c 73 65 20  e $data..} else 
3130: 7b 0a 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e  {..    # Delta n
3140: 6f 64 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73  ode. __base__ is
3150: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
3160: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
3170: 0a 09 20 20 20 20 23 20 74 68 65 20 62 61 73 65  ..    # the base
3180: 6c 69 6e 65 2e 20 54 68 65 20 70 61 74 63 68 20  line. The patch 
3190: 69 73 20 61 74 20 74 68 65 20 73 70 65 63 69 66  is at the specif
31a0: 69 65 64 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 0a  ied location of.
31b0: 09 20 20 20 20 23 20 74 68 65 20 61 72 63 68 69  .    # the archi
31c0: 76 65 20 66 69 6c 65 2e 0a 0a 09 20 20 20 20 73  ve file....    s
31d0: 65 74 20 66 62 61 73 65 20 5b 24 67 72 61 70 68  et fbase [$graph
31e0: 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20   node get $node 
31f0: 5f 5f 62 61 73 65 5f 5f 5d 0a 09 20 20 20 20 6c  __base__]..    l
3200: 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c 65 20  og write 2 file 
3210: 7b 45 78 70 61 6e 64 69 6e 67 20 3c 24 72 65 76  {Expanding <$rev
3220: 6e 72 3e 2c 20 69 73 20 64 65 6c 74 61 20 6f 66  nr>, is delta of
3230: 20 3c 24 66 62 61 73 65 3e 7d 0a 0a 09 20 20 20   <$fbase>}...   
3240: 20 73 65 74 20 62 61 73 65 20 5b 66 69 6c 65 75   set base [fileu
3250: 74 69 6c 3a 3a 63 61 74 20 2d 74 72 61 6e 73 6c  til::cat -transl
3260: 61 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69  ation binary $di
3270: 72 2f 24 66 62 61 73 65 5d 0a 0a 09 20 20 20 20  r/$fbase]...    
3280: 23 20 57 72 69 74 69 6e 67 20 74 68 65 20 70 61  # Writing the pa
3290: 74 63 68 20 74 6f 20 64 69 73 6b 20 69 73 20 6a  tch to disk is j
32a0: 75 73 74 20 66 6f 72 20 62 65 74 74 65 72 0a 09  ust for better..
32b0: 20 20 20 20 23 20 64 65 62 75 67 67 69 6e 67 2e      # debugging.
32c0: 20 49 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20   It is not used 
32d0: 6f 74 68 65 72 77 69 73 65 2e 0a 09 20 20 20 20  otherwise...    
32e0: 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74 65 46  fileutil::writeF
32f0: 69 6c 65 20 24 64 69 72 2f 72 70 61 74 63 68 20  ile $dir/rpatch 
3300: 24 64 61 74 61 0a 09 20 20 20 20 66 69 6c 65 75  $data..    fileu
3310: 74 69 6c 3a 3a 77 72 69 74 65 46 69 6c 65 20 2d  til::writeFile -
3320: 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61  translation bina
3330: 72 79 20 24 64 69 72 2f 24 66 6e 61 6d 65 20 5c  ry $dir/$fname \
3340: 0a 09 09 5b 41 70 70 6c 79 20 24 62 61 73 65 20  ...[Apply $base 
3350: 24 64 61 74 61 5d 0a 09 7d 0a 0a 09 23 20 50 6f  $data]..}...# Po
3360: 73 74 20 74 6f 20 61 6c 6c 20 73 75 63 63 65 73  st to all succes
3370: 73 6f 72 73 20 74 68 61 74 20 74 68 65 20 6a 75  sors that the ju
3380: 73 74 20 67 65 6e 65 72 61 74 65 64 20 66 69 6c  st generated fil
3390: 65 20 69 73 20 74 68 65 69 72 0a 09 23 20 62 61  e is their..# ba
33a0: 73 65 6c 69 6e 65 2e 0a 0a 09 66 6f 72 65 61 63  seline....foreac
33b0: 68 20 6f 75 74 20 5b 24 67 72 61 70 68 20 6e 6f  h out [$graph no
33c0: 64 65 73 20 2d 6f 75 74 20 24 6e 6f 64 65 5d 20  des -out $node] 
33d0: 7b 0a 09 20 20 20 20 24 67 72 61 70 68 20 6e 6f  {..    $graph no
33e0: 64 65 20 73 65 74 20 24 6f 75 74 20 5f 5f 62 61  de set $out __ba
33f0: 73 65 5f 5f 20 24 66 6e 61 6d 65 0a 09 7d 0a 09  se__ $fname..}..
3400: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
3410: 20 20 70 72 6f 63 20 41 70 70 6c 79 20 7b 62 61    proc Apply {ba
3420: 73 65 20 64 65 6c 74 61 7d 20 7b 0a 09 23 20 62  se delta} {..# b
3430: 61 73 65 20 20 3d 20 62 61 73 65 20 74 65 78 74  ase  = base text
3440: 2e 0a 09 23 20 64 65 6c 74 61 20 3d 20 64 65 6c  ...# delta = del
3450: 74 61 20 69 6e 20 72 63 73 20 66 6f 72 6d 61 74  ta in rcs format
3460: 2e 0a 09 23 0a 09 23 20 42 6f 74 68 20 73 74 72  ...#..# Both str
3470: 69 6e 67 73 20 61 72 65 20 75 6e 65 6e 63 6f 64  ings are unencod
3480: 65 64 2c 20 69 2e 65 2e 20 74 68 69 6e 67 73 20  ed, i.e. things 
3490: 6c 69 6b 65 20 40 40 2c 20 65 74 63 2e 20 68 61  like @@, etc. ha
34a0: 76 65 0a 09 23 20 61 6c 72 65 61 64 79 20 62 65  ve..# already be
34b0: 65 6e 20 72 65 70 6c 61 63 65 64 20 77 69 74 68  en replaced with
34c0: 20 74 68 65 69 72 20 70 72 6f 70 65 72 20 63 68   their proper ch
34d0: 61 72 61 63 74 65 72 73 2e 0a 09 23 0a 09 23 20  aracters...#..# 
34e0: 52 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20  Return value is 
34f0: 74 68 65 20 70 61 74 63 68 65 64 20 74 65 78 74  the patched text
3500: 2e 0a 0a 09 73 65 74 20 62 61 73 65 20 5b 73 70  ....set base [sp
3510: 6c 69 74 20 24 62 61 73 65 20 5c 6e 5d 0a 09 73  lit $base \n]..s
3520: 65 74 20 62 6c 65 6e 20 5b 6c 6c 65 6e 67 74 68  et blen [llength
3530: 20 24 62 61 73 65 5d 0a 09 73 65 74 20 6f 6f 66   $base]..set oof
3540: 66 20 30 0a 09 73 65 74 20 72 65 73 20 22 22 0a  f 0..set res "".
3550: 0a 09 73 65 74 20 6c 69 6e 65 73 20 20 5b 73 70  ..set lines  [sp
3560: 6c 69 74 20 24 64 65 6c 74 61 20 5c 6e 5d 0a 09  lit $delta \n]..
3570: 73 65 74 20 6e 6c 69 6e 65 73 20 5b 6c 6c 65 6e  set nlines [llen
3580: 67 74 68 20 24 6c 69 6e 65 73 5d 0a 0a 09 66 6f  gth $lines]...fo
3590: 72 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20  r {set i 0} {$i 
35a0: 3c 20 24 6e 6c 69 6e 65 73 7d 20 7b 7d 20 7b 0a  < $nlines} {} {.
35b0: 09 20 20 20 20 69 66 20 7b 21 5b 72 65 67 65 78  .    if {![regex
35c0: 70 20 7b 5e 28 5b 61 64 5d 29 28 5c 64 2b 29 5c  p {^([ad])(\d+)\
35d0: 73 28 5c 64 2b 29 24 7d 20 5b 6c 69 6e 64 65 78  s(\d+)$} [lindex
35e0: 20 24 6c 69 6e 65 73 20 24 69 5d 20 2d 3e 20 63   $lines $i] -> c
35f0: 6d 64 20 73 6c 20 63 6e 5d 7d 20 7b 0a 09 09 74  md sl cn]} {...t
3600: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20  rouble internal 
3610: 22 42 61 64 20 65 64 20 63 6f 6d 6d 61 6e 64 20  "Bad ed command 
3620: 27 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20  '[lindex $lines 
3630: 24 69 5d 27 22 0a 09 20 20 20 20 7d 0a 0a 09 20  $i]'"..    }... 
3640: 20 20 20 69 6e 63 72 20 69 0a 09 20 20 20 20 73     incr i..    s
3650: 65 74 20 65 6c 20 5b 65 78 70 72 20 7b 24 73 6c  et el [expr {$sl
3660: 20 2b 20 24 63 6e 7d 5d 0a 0a 09 20 20 20 20 73   + $cn}]...    s
3670: 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20  witch -exact -- 
3680: 24 63 6d 64 20 7b 0a 09 09 64 20 7b 0a 09 09 20  $cmd {...d {... 
3690: 20 20 20 69 6e 63 72 20 73 6c 20 2d 31 0a 09 09     incr sl -1...
36a0: 20 20 20 20 69 6e 63 72 20 65 6c 20 2d 31 0a 09      incr el -1..
36b0: 09 20 20 20 20 69 66 20 7b 24 73 6c 20 3c 20 24  .    if {$sl < $
36c0: 6f 6f 66 66 7d 20 7b 20 74 72 6f 75 62 6c 65 20  ooff} { trouble 
36d0: 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69  internal {Deleti
36e0: 6f 6e 20 62 65 66 6f 72 65 20 6c 61 73 74 20 65  on before last e
36f0: 64 69 74 7d 20 7d 0a 09 09 20 20 20 20 69 66 20  dit} }...    if 
3700: 7b 24 73 6c 20 3e 20 24 62 6c 65 6e 7d 20 7b 20  {$sl > $blen} { 
3710: 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c  trouble internal
3720: 20 7b 44 65 6c 65 74 69 6f 6e 20 70 61 73 74 20   {Deletion past 
3730: 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20  file end} }...  
3740: 20 20 69 66 20 7b 24 65 6c 20 3e 20 24 62 6c 65    if {$el > $ble
3750: 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74  n} { trouble int
3760: 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e 20  ernal {Deletion 
3770: 62 65 79 6f 6e 64 20 66 69 6c 65 20 65 6e 64 7d  beyond file end}
3780: 20 7d 0a 09 09 20 20 20 20 66 6f 72 65 61 63 68   }...    foreach
3790: 20 78 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65   x [lrange $base
37a0: 20 24 6f 6f 66 66 20 24 73 6c 5d 20 7b 20 6c 61   $ooff $sl] { la
37b0: 70 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09  ppend res $x }..
37c0: 09 20 20 20 20 73 65 74 20 20 6f 6f 66 66 20 24  .    set  ooff $
37d0: 65 6c 0a 09 09 7d 0a 09 09 61 20 7b 0a 09 09 20  el...}...a {... 
37e0: 20 20 20 69 66 20 7b 24 73 6c 20 3c 20 24 6f 6f     if {$sl < $oo
37f0: 66 66 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e  ff} { trouble in
3800: 74 65 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20 62  ternal {Insert b
3810: 65 66 6f 72 65 20 6c 61 73 74 20 65 64 69 74 7d  efore last edit}
3820: 20 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c   }...    if {$sl
3830: 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75   > $blen} { trou
3840: 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49 6e  ble internal {In
3850: 73 65 72 74 20 70 61 73 74 20 66 69 6c 65 20 65  sert past file e
3860: 6e 64 7d 20 7d 0a 0a 09 09 20 20 20 20 66 6f 72  nd} }....    for
3870: 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24  each x [lrange $
3880: 62 61 73 65 20 24 6f 6f 66 66 20 24 73 6c 5d 20  base $ooff $sl] 
3890: 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 6c 61              { la
38a0: 70 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09  ppend res $x }..
38b0: 09 20 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b  .    foreach x [
38c0: 6c 72 61 6e 67 65 20 24 6c 69 6e 65 73 20 24 69  lrange $lines $i
38d0: 20 5b 65 78 70 72 20 7b 24 69 20 2b 20 24 63 6e   [expr {$i + $cn
38e0: 7d 5d 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65  }]] { lappend re
38f0: 73 20 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74  s $x }...    set
3900: 20 6f 6f 66 66 20 24 73 6c 0a 09 09 20 20 20 20   ooff $sl...    
3910: 69 6e 63 72 20 69 20 24 63 6e 0a 09 09 7d 0a 09  incr i $cn...}..
3920: 20 20 20 20 7d 0a 09 7d 0a 09 66 6f 72 65 61 63      }..}..foreac
3930: 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 62 61 73  h x [lrange $bas
3940: 65 20 24 6f 6f 66 66 20 65 6e 64 5d 20 7b 20 6c  e $ooff end] { l
3950: 61 70 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a  append res $x }.
3960: 09 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 24 72  .return [join $r
3970: 65 73 20 5c 6e 5d 0a 20 20 20 20 7d 0a 0a 20 20  es \n].    }..  
3980: 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 32    method Expand2
3990: 20 7b 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a   {graph node} {.
39a0: 09 73 65 74 20 72 65 76 6e 72 20 5b 24 67 72 61  .set revnr [$gra
39b0: 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64  ph node get $nod
39c0: 65 20 72 65 76 6e 72 5d 0a 0a 09 23 20 46 69 72  e revnr]...# Fir
39d0: 73 74 20 69 6d 70 6f 72 74 20 74 68 65 20 66 69  st import the fi
39e0: 6c 65 2e 0a 09 6c 61 70 70 65 6e 64 20 6d 79 69  le...lappend myi
39f0: 6d 70 6f 72 74 20 5b 6c 69 73 74 20 41 20 72 24  mport [list A r$
3a00: 72 65 76 6e 72 20 7b 7d 5d 0a 0a 09 69 66 20 7b  revnr {}]...if {
3a10: 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 6b 65 79  [$graph node key
3a20: 65 78 69 73 74 73 20 24 6e 6f 64 65 20 5f 5f 62  exists $node __b
3a30: 61 73 65 5f 5f 5d 7d 20 7b 0a 09 20 20 20 20 23  ase__]} {..    #
3a40: 20 44 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62   Delta node. __b
3a50: 61 73 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d  ase__ is the nam
3a60: 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f  e of the file co
3a70: 6e 74 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 20  ntaining..    # 
3a80: 74 68 65 20 62 61 73 65 6c 69 6e 65 2e 20 47 65  the baseline. Ge
3a90: 6e 65 72 61 74 65 20 69 6e 73 74 72 75 63 74 69  nerate instructi
3aa0: 6f 6e 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 64  on to make the d
3ab0: 65 6c 74 61 20 61 73 0a 09 20 20 20 20 23 20 77  elta as..    # w
3ac0: 65 6c 6c 2e 0a 0a 09 20 20 20 20 73 65 74 20 66  ell....    set f
3ad0: 62 61 73 65 20 5b 24 67 72 61 70 68 20 6e 6f 64  base [$graph nod
3ae0: 65 20 67 65 74 20 24 6e 6f 64 65 20 5f 5f 62 61  e get $node __ba
3af0: 73 65 5f 5f 5d 0a 09 20 20 20 20 6c 61 70 70 65  se__]..    lappe
3b00: 6e 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 73  nd myimport [lis
3b10: 74 20 44 20 72 24 72 65 76 6e 72 20 72 24 66 62  t D r$revnr r$fb
3b20: 61 73 65 5d 0a 09 7d 0a 0a 09 23 20 50 6f 73 74  ase]..}...# Post
3b30: 20 74 6f 20 61 6c 6c 20 73 75 63 63 65 73 73 6f   to all successo
3b40: 72 73 20 74 68 61 74 20 74 68 65 20 6a 75 73 74  rs that the just
3b50: 20 67 65 6e 65 72 61 74 65 64 20 66 69 6c 65 20   generated file 
3b60: 69 73 20 74 68 65 69 72 0a 09 23 20 62 61 73 65  is their..# base
3b70: 6c 69 6e 65 2e 20 45 78 63 65 70 74 69 6f 6e 3a  line. Exception:
3b80: 20 54 68 6f 73 65 20 77 68 69 63 68 20 61 76 65   Those which ave
3b90: 20 61 6c 72 65 61 64 79 20 61 20 62 61 73 65 6c   already a basel
3ba0: 69 6e 65 20 73 65 74 2e 0a 09 23 20 54 6f 67 65  ine set...# Toge
3bb0: 74 68 65 72 20 77 69 74 68 20 74 68 65 20 73 6f  ther with the so
3bc0: 72 74 69 6e 67 20 6f 66 20 74 72 75 6e 6b 20 72  rting of trunk r
3bd0: 65 76 69 73 69 6f 6e 73 20 66 69 72 73 74 20 74  evisions first t
3be0: 68 65 20 74 72 75 6e 6b 0a 09 23 20 73 68 6f 75  he trunk..# shou
3bf0: 6c 64 20 6f 6e 65 20 75 6e 69 6e 74 65 72 75 70  ld one uninterup
3c00: 74 65 64 20 6c 69 6e 65 2c 20 77 69 74 68 20 62  ted line, with b
3c10: 72 61 6e 63 68 20 72 6f 6f 74 73 20 5f 6e 6f 74  ranch roots _not
3c20: 5f 20 64 65 6c 74 61 0a 09 23 20 63 6f 6d 70 72  _ delta..# compr
3c30: 65 73 73 65 64 20 70 65 72 20 74 68 65 69 72 20  essed per their 
3c40: 62 72 61 6e 63 68 65 73 2e 0a 0a 09 66 6f 72 65  branches....fore
3c50: 61 63 68 20 6f 75 74 20 5b 24 67 72 61 70 68 20  ach out [$graph 
3c60: 6e 6f 64 65 73 20 2d 6f 75 74 20 24 6e 6f 64 65  nodes -out $node
3c70: 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 67  ] {..    if {[$g
3c80: 72 61 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 69  raph node keyexi
3c90: 73 74 73 20 24 6f 75 74 20 5f 5f 62 61 73 65 5f  sts $out __base_
3ca0: 5f 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  _]} continue..  
3cb0: 20 20 24 67 72 61 70 68 20 6e 6f 64 65 20 73 65    $graph node se
3cc0: 74 20 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 20  t $out __base__ 
3cd0: 24 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72  $revnr..}..retur
3ce0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 76 61 72  n.    }..    var
3cf0: 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74 0a 0a  iable myimport..
3d00: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
3d10: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
3d20: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20  ###########.    
3d30: 23 23 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61  ## State..    va
3d40: 72 69 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20  riable myid     
3d50: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20           {} ; # 
3d60: 46 69 6c 65 20 69 64 20 69 6e 20 74 68 65 20 70  File id in the p
3d70: 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e  ersistent state.
3d80: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
3d90: 70 61 74 68 20 20 20 20 20 20 20 20 20 20 20 20  path            
3da0: 7b 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74  {} ; # Path of t
3db0: 68 65 20 66 69 6c 65 27 73 20 72 63 73 20 61 72  he file's rcs ar
3dc0: 63 68 69 76 65 2e 0a 20 20 20 20 76 61 72 69 61  chive..    varia
3dd0: 62 6c 65 20 6d 79 75 73 72 70 61 74 68 20 20 20  ble myusrpath   
3de0: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74        {} ; # Pat
3df0: 68 20 6f 66 20 74 68 65 20 66 69 6c 65 20 61 73  h of the file as
3e00: 20 73 65 65 6e 20 62 79 20 75 73 65 72 73 2e 0a   seen by users..
3e10: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 65      variable mye
3e20: 78 65 63 75 74 61 62 6c 65 20 20 20 20 20 20 30  xecutable      0
3e30: 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c    ; # Boolean fl
3e40: 61 67 20 27 66 69 6c 65 20 65 78 65 63 75 74 61  ag 'file executa
3e50: 62 6c 65 27 2e 0a 20 20 20 20 76 61 72 69 61 62  ble'..    variab
3e60: 6c 65 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20  le myproject    
3e70: 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65       {} ; # Refe
3e80: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 70 72 6f  rence to the pro
3e90: 6a 65 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 09  ject object.....
3ea0: 20 20 20 20 23 20 74 68 65 20 66 69 6c 65 20 62      # the file b
3eb0: 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76  elongs to..    v
3ec0: 61 72 69 61 62 6c 65 20 6d 79 72 65 76 20 2d 61  ariable myrev -a
3ed0: 72 72 61 79 20 20 20 20 20 20 7b 7d 20 3b 20 23  rray      {} ; #
3ee0: 20 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e   Maps revision n
3ef0: 75 6d 62 65 72 20 74 6f 20 74 68 65 0a 09 09 09  umber to the....
3f00: 09 20 20 20 20 23 20 61 73 73 6f 63 69 61 74 65  .    # associate
3f10: 64 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63  d revision objec
3f20: 74 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  t..    variable 
3f30: 6d 79 72 65 76 69 73 69 6f 6e 73 20 20 20 20 20  myrevisions     
3f40: 20 20 7b 7d 20 3b 20 23 20 53 61 6d 65 20 61 73    {} ; # Same as
3f50: 20 6d 79 72 65 76 2c 20 62 75 74 20 61 20 6c 69   myrev, but a li
3f60: 73 74 2c 0a 09 09 09 09 20 20 20 20 23 20 67 69  st,.....    # gi
3f70: 76 69 6e 67 20 75 73 20 74 68 65 20 6f 72 64 65  ving us the orde
3f80: 72 20 6f 66 0a 09 09 09 09 20 20 20 20 23 20 72  r of.....    # r
3f90: 65 76 69 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61  evisions..    va
3fa0: 72 69 61 62 6c 65 20 6d 79 61 69 64 20 20 20 20  riable myaid    
3fb0: 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20    -array {} ; # 
3fc0: 4d 61 70 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d  Map revision num
3fd0: 62 65 72 73 20 74 6f 20 74 68 65 20 69 64 0a 09  bers to the id..
3fe0: 09 09 09 20 20 20 20 23 20 6f 66 20 74 68 65 20  ...    # of the 
3ff0: 61 75 74 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69  author who commi
4000: 74 74 65 64 0a 09 09 09 09 20 20 20 20 23 20 69  tted.....    # i
4010: 74 2e 20 54 68 69 73 20 69 73 20 6c 61 74 65 72  t. This is later
4020: 20 61 67 67 72 65 67 61 74 65 64 0a 09 09 09 09   aggregated.....
4030: 20 20 20 20 23 20 77 69 74 68 20 63 6f 6d 6d 69      # with commi
4040: 74 20 6d 65 73 73 61 67 65 2c 20 62 72 61 6e 63  t message, branc
4050: 68 20 6e 61 6d 65 0a 09 09 09 09 20 20 20 20 23  h name.....    #
4060: 20 61 6e 64 20 70 72 6f 6a 65 63 74 20 69 64 20   and project id 
4070: 66 6f 72 20 61 20 6d 65 74 61 20 69 64 2e 0a 20  for a meta id.. 
4080: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65     variable myhe
4090: 61 64 72 65 76 6e 72 20 20 20 20 20 20 20 7b 7d  adrevnr       {}
40a0: 20 3b 20 23 20 48 65 61 64 20 72 65 76 69 73 69   ; # Head revisi
40b0: 6f 6e 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d  on (revision num
40c0: 62 65 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c  ber).    variabl
40d0: 65 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20  e myprincipal   
40e0: 20 20 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63      {} ; # Princ
40f0: 69 70 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61  ipal branch (bra
4100: 6e 63 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09  nch number).....
4110: 09 20 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20  .    # Contrary 
4120: 74 6f 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73  to the name this
4130: 20 69 73 20 74 68 65 0a 09 09 09 09 20 20 20 20   is the.....    
4140: 23 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  # default branch
4150: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4160: 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20  ydependencies   
4170: 20 7b 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61   {} ; # Dictiona
4180: 72 79 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69  ry parent -> chi
4190: 6c 64 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65  ld,.....    # re
41a0: 63 6f 72 64 73 20 70 72 69 6d 61 72 79 20 64 65  cords primary de
41b0: 70 65 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20  pendencies..    
41c0: 76 61 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72  variable myimpor
41d0: 74 65 64 20 20 20 20 20 20 20 20 30 20 20 3b 20  ted        0  ; 
41e0: 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20  # Boolean flag. 
41f0: 53 65 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  Set if and only 
4200: 69 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76  if.....    # rev
4210: 20 31 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65   1.1 of the file
4220: 20 73 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20   seemingly..... 
4230: 20 20 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65     # was importe
4240: 64 20 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64  d instead of add
4250: 65 64 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72  ed.....    # nor
4260: 6d 61 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61  mally..    varia
4270: 62 6c 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20  ble myroot      
4280: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66        {} ; # Ref
4290: 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65  erence to the re
42a0: 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09  vision object...
42b0: 09 09 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20  ..    # holding 
42c0: 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f  the root revisio
42d0: 6e 2e 20 20 49 74 73 0a 09 09 09 09 20 20 20 20  n.  Its.....    
42e0: 23 20 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79  # number usually
42f0: 20 69 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62   is '1.1'. Can b
4300: 65 0a 09 09 09 09 20 20 20 20 23 20 61 20 64 69  e.....    # a di
4310: 66 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20  fferent number, 
4320: 62 65 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20  because of..... 
4330: 20 20 20 23 20 67 61 70 73 20 63 72 65 61 74 65     # gaps create
4340: 64 20 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20  d via 'cvsadmin 
4350: 2d 6f 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  -o'..    variabl
4360: 65 20 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72  e mybranches -ar
4370: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20  ray {} ; # Maps 
4380: 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f  branch number to
4390: 20 74 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09   the symbol.....
43a0: 20 20 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e      # object han
43b0: 64 6c 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68  dling the branch
43c0: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
43d0: 79 74 61 67 73 20 20 20 20 20 2d 61 72 72 61 79  ytags     -array
43e0: 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76   {} ; # Maps rev
43f0: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20  ision number to 
4400: 74 68 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20  the list.....   
4410: 20 23 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a   # of symbol obj
4420: 65 63 74 73 20 66 6f 72 20 74 68 65 20 74 61 67  ects for the tag
4430: 73 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 6f  s.....    # asso
4440: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20  ciated with the 
4450: 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61  revision..    va
4460: 72 69 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73  riable mysymbols
4470: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20           {} ; # 
4480: 53 65 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f  Set of the symbo
4490: 6c 20 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e  l names found in
44a0: 0a 09 09 09 09 20 20 20 20 23 20 74 68 69 73 20  .....    # this 
44b0: 66 69 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61  file...    varia
44c0: 62 6c 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20  ble mybranchcnt 
44d0: 30 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f  0 ; # Counter fo
44e0: 72 20 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72  r branches, to r
44f0: 65 63 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20  ecord their.... 
4500: 20 20 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64      # order of d
4510: 65 66 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20  efinition. This 
4520: 61 6c 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09  also defines....
4530: 20 20 20 20 20 23 20 74 68 65 69 72 20 6f 72 64       # their ord
4540: 65 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20  er of creation, 
4550: 77 68 69 63 68 20 69 73 20 74 68 65 0a 09 09 09  which is the....
4560: 20 20 20 20 20 23 20 72 65 76 65 72 73 65 20 6f       # reverse o
4570: 66 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49  f definition.  I
4580: 2e 65 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09  .e. a smaller...
4590: 09 20 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d  .     # number m
45a0: 65 61 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61  eans 'Defined ea
45b0: 72 6c 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09  rlier', means...
45c0: 09 20 20 20 20 20 23 20 27 43 72 65 61 74 65 64  .     # 'Created
45d0: 20 6c 61 74 65 72 27 2e 0a 0a 20 20 20 20 76 61   later'...    va
45e0: 72 69 61 62 6c 65 20 6d 79 74 72 75 6e 6b 20 7b  riable mytrunk {
45f0: 7d 20 3b 20 23 20 44 69 72 65 63 74 20 72 65 66  } ; # Direct ref
4600: 65 72 65 6e 63 65 20 74 6f 20 6d 79 70 72 6f 6a  erence to myproj
4610: 65 63 74 20 2d 3e 20 74 72 75 6e 6b 2e 0a 20 20  ect -> trunk..  
4620: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f    variable myroo
4630: 74 73 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f  ts {} ; # List o
4640: 66 20 72 6f 6f 74 73 20 69 6e 20 74 68 65 20 66  f roots in the f
4650: 6f 72 65 73 74 20 6f 66 0a 09 09 09 20 20 23 20  orest of....  # 
4660: 6c 6f 64 27 73 2e 20 4f 62 6a 65 63 74 20 72 65  lod's. Object re
4670: 66 65 72 65 6e 63 65 73 20 74 6f 20 72 65 76 69  ferences to revi
4680: 73 69 6f 6e 73 20 61 6e 64 0a 09 09 09 20 20 23  sions and....  #
4690: 20 62 72 61 6e 63 68 65 73 2e 20 54 68 65 20 6c   branches. The l
46a0: 61 74 74 65 72 20 63 61 6e 20 61 70 70 65 61 72  atter can appear
46b0: 20 77 68 65 6e 20 74 68 65 79 0a 09 09 09 20 20   when they....  
46c0: 23 20 61 72 65 20 73 65 76 65 72 65 64 20 66 72  # are severed fr
46d0: 6f 6d 20 74 68 65 69 72 20 70 61 72 65 6e 74 2e  om their parent.
46e0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
46f0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
4700: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
4710: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65    ## Internal me
4720: 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f  thods..    metho
4730: 64 20 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f  d RecordBranchCo
4740: 6d 6d 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d  mmits {branches}
4750: 20 7b 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e   {..foreach bran
4760: 63 68 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65  chrevnr $branche
4770: 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61  s {..    if {[ca
4780: 74 63 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e  tch {...set bran
4790: 63 68 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72  ch [$self Rev2Br
47a0: 61 6e 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e  anch $branchrevn
47b0: 72 5d 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09  r]..    }]} {...
47c0: 73 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c  set branch [$sel
47d0: 66 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72  f AddUnlabeledBr
47e0: 61 6e 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63  anch [rev 2branc
47f0: 68 6e 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72  hnr $branchrevnr
4800: 5d 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  ]]..    }...    
4810: 23 20 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d  # Record the com
4820: 6d 69 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76  mit, just as rev
4830: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  ision number for
4840: 0a 09 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f  ..    # now. Pro
4850: 63 65 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65  cesBranchDepende
4860: 6e 63 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e  ncies will exten
4870: 64 20 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20  d that ito a..  
4880: 20 20 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63    # proper objec
4890: 74 20 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20  t reference.... 
48a0: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68     $branch setch
48b0: 69 6c 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68  ildrevnr $branch
48c0: 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e  revnr..}..return
48d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
48e0: 6f 64 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72  od Rev2Branch {r
48f0: 65 76 6e 72 7d 20 7b 0a 20 20 20 20 20 20 20 20  evnr} {.        
4900: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74  integrity assert
4910: 20 7b 21 5b 72 65 76 20 69 73 74 72 75 6e 6b 72   {![rev istrunkr
4920: 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 45  evnr $revnr]} {E
4930: 78 70 65 63 74 65 64 20 61 20 62 72 61 6e 63 68  xpected a branch
4940: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72   revision number
4950: 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 62 72 61  }..return $mybra
4960: 6e 63 68 65 73 28 5b 72 65 76 20 32 62 72 61 6e  nches([rev 2bran
4970: 63 68 6e 72 20 24 72 65 76 6e 72 5d 29 0a 20 20  chnr $revnr]).  
4980: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
4990: 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e  AddUnlabeledBran
49a0: 63 68 20 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a  ch {branchnr} {.
49b0: 09 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20 41  .return [$self A
49c0: 64 64 42 72 61 6e 63 68 20 75 6e 6c 61 62 65 6c  ddBranch unlabel
49d0: 65 64 2d 24 62 72 61 6e 63 68 6e 72 20 24 62 72  ed-$branchnr $br
49e0: 61 6e 63 68 6e 72 5d 0a 20 20 20 20 7d 0a 0a 20  anchnr].    }.. 
49f0: 20 20 20 6d 65 74 68 6f 64 20 41 64 64 42 72 61     method AddBra
4a00: 6e 63 68 20 7b 6e 61 6d 65 20 62 72 61 6e 63 68  nch {name branch
4a10: 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f  nr} {..if {[info
4a20: 20 65 78 69 73 74 73 20 6d 79 62 72 61 6e 63 68   exists mybranch
4a30: 65 73 28 24 62 72 61 6e 63 68 6e 72 29 5d 7d 20  es($branchnr)]} 
4a40: 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  {..    log write
4a50: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79   1 file "In '$my
4a60: 70 61 74 68 27 3a 20 42 72 61 6e 63 68 20 27 24  path': Branch '$
4a70: 62 72 61 6e 63 68 6e 72 27 20 6e 61 6d 65 64 20  branchnr' named 
4a80: 27 5b 24 6d 79 62 72 61 6e 63 68 65 73 28 24 62  '[$mybranches($b
4a90: 72 61 6e 63 68 6e 72 29 20 6e 61 6d 65 5d 27 22  ranchnr) name]'"
4aa0: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
4ab0: 31 20 66 69 6c 65 20 22 43 61 6e 6e 6f 74 20 68  1 file "Cannot h
4ac0: 61 76 65 20 73 65 63 6f 6e 64 20 6e 61 6d 65 20  ave second name 
4ad0: 27 24 6e 61 6d 65 27 2c 20 69 67 6e 6f 72 69 6e  '$name', ignorin
4ae0: 67 20 69 74 22 0a 09 20 20 20 20 72 65 74 75 72  g it"..    retur
4af0: 6e 0a 09 7d 0a 09 73 65 74 20 62 72 61 6e 63 68  n..}..set branch
4b00: 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 62 72 61   [sym %AUTO% bra
4b10: 6e 63 68 20 24 62 72 61 6e 63 68 6e 72 20 5b 24  nch $branchnr [$
4b20: 6d 79 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d  myproject getsym
4b30: 62 6f 6c 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66  bol $name] $self
4b40: 5d 0a 09 24 62 72 61 6e 63 68 20 73 65 74 70 6f  ]..$branch setpo
4b50: 73 69 74 69 6f 6e 20 5b 69 6e 63 72 20 6d 79 62  sition [incr myb
4b60: 72 61 6e 63 68 63 6e 74 5d 0a 09 73 65 74 20 6d  ranchcnt]..set m
4b70: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63  ybranches($branc
4b80: 68 6e 72 29 20 24 62 72 61 6e 63 68 0a 09 72 65  hnr) $branch..re
4b90: 74 75 72 6e 20 24 62 72 61 6e 63 68 0a 20 20 20  turn $branch.   
4ba0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41   }..    method A
4bb0: 64 64 54 61 67 20 7b 6e 61 6d 65 20 72 65 76 6e  ddTag {name revn
4bc0: 72 7d 20 7b 0a 09 73 65 74 20 74 61 67 20 5b 73  r} {..set tag [s
4bd0: 79 6d 20 25 41 55 54 4f 25 20 74 61 67 20 24 72  ym %AUTO% tag $r
4be0: 65 76 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74  evnr [$myproject
4bf0: 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65   getsymbol $name
4c00: 5d 20 24 73 65 6c 66 5d 0a 09 6c 61 70 70 65 6e  ] $self]..lappen
4c10: 64 20 6d 79 74 61 67 73 28 24 72 65 76 6e 72 29  d mytags($revnr)
4c20: 20 24 74 61 67 0a 09 72 65 74 75 72 6e 20 24 74   $tag..return $t
4c30: 61 67 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  ag.    }..    me
4c40: 74 68 6f 64 20 52 65 63 6f 72 64 42 61 73 69 63  thod RecordBasic
4c50: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 72 65  Dependencies {re
4c60: 76 6e 72 20 6e 65 78 74 7d 20 7b 0a 09 23 20 48  vnr next} {..# H
4c70: 61 6e 64 6c 65 20 74 68 65 20 72 65 76 69 73 69  andle the revisi
4c80: 6f 6e 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e  on dependencies.
4c90: 20 52 65 63 6f 72 64 20 74 68 65 6d 20 66 6f 72   Record them for
4ca0: 20 6e 6f 77 2c 20 64 6f 0a 09 23 20 6e 6f 74 68   now, do..# noth
4cb0: 69 6e 67 20 77 69 74 68 20 74 68 65 6d 20 79 65  ing with them ye
4cc0: 74 2e 0a 0a 09 23 20 4f 6e 20 74 68 65 20 74 72  t....# On the tr
4cd0: 75 6e 6b 20 74 68 65 20 27 6e 65 78 74 27 20 66  unk the 'next' f
4ce0: 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
4cf0: 68 65 20 70 72 65 76 69 6f 75 73 0a 09 23 20 72  he previous..# r
4d00: 65 76 69 73 69 6f 6e 2c 20 69 2e 65 2e 20 74 68  evision, i.e. th
4d10: 65 20 5f 70 61 72 65 6e 74 5f 20 6f 66 20 74 68  e _parent_ of th
4d20: 65 20 63 75 72 72 65 6e 74 20 6f 6e 65 2e 20 45  e current one. E
4d30: 78 61 6d 70 6c 65 3a 0a 09 23 20 31 2e 36 27 73  xample:..# 1.6's
4d40: 20 6e 65 78 74 20 69 73 20 31 2e 35 20 28 6d 6f   next is 1.5 (mo
4d50: 64 75 6c 6f 20 63 76 73 20 61 64 6d 69 6e 20 2d  dulo cvs admin -
4d60: 6f 29 2e 0a 0a 09 23 20 43 6f 6e 74 72 61 72 69  o)....# Contrari
4d70: 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 74  ly on a branch t
4d80: 68 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20  he 'next' field 
4d90: 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 09 23  points to the..#
4da0: 20 70 72 69 6d 61 72 79 20 5f 63 68 69 6c 64 5f   primary _child_
4db0: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
4dc0: 72 65 76 69 73 69 6f 6e 2e 20 41 73 20 65 78 61  revision. As exa
4dd0: 6d 70 6c 65 2c 0a 09 23 20 31 2e 31 2e 33 2e 32  mple,..# 1.1.3.2
4de0: 27 73 20 27 6e 65 78 74 27 20 77 69 6c 6c 20 62  's 'next' will b
4df0: 65 20 31 2e 31 2e 33 2e 33 2e 0a 0a 09 23 20 54  e 1.1.3.3....# T
4e00: 68 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20  he 'next' field 
4e10: 61 63 74 75 61 6c 6c 79 20 61 6c 77 61 79 73 20  actually always 
4e20: 72 65 66 65 72 73 20 74 6f 20 74 68 65 20 72 65  refers to the re
4e30: 76 69 73 69 6f 6e 0a 09 23 20 63 6f 6e 74 61 69  vision..# contai
4e40: 6e 69 6e 67 20 74 68 65 20 64 65 6c 74 61 20 6e  ning the delta n
4e50: 65 65 64 65 64 20 74 6f 20 72 65 74 72 69 65 76  eeded to retriev
4e60: 65 20 74 68 61 74 20 72 65 76 69 73 69 6f 6e 2e  e that revision.
4e70: 0a 0a 09 23 20 54 68 65 20 64 65 70 65 6e 64 65  ...# The depende
4e80: 6e 63 69 65 73 20 6e 65 65 64 65 64 20 68 65 72  ncies needed her
4e90: 65 20 61 72 65 20 74 68 65 20 6c 6f 67 69 63 61  e are the logica
4ea0: 6c 20 73 74 72 75 63 74 75 72 65 2c 0a 09 23 20  l structure,..# 
4eb0: 70 61 72 65 6e 74 2f 63 68 69 6c 64 2c 20 61 6e  parent/child, an
4ec0: 64 20 6e 6f 74 20 74 68 65 20 69 6d 70 6c 65 6d  d not the implem
4ed0: 65 6e 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65  entation depende
4ee0: 6e 74 20 64 65 6c 74 61 0a 09 23 20 70 6f 69 6e  nt delta..# poin
4ef0: 74 65 72 73 2e 0a 0a 09 69 66 20 7b 24 6e 65 78  ters....if {$nex
4f00: 74 20 65 71 20 22 22 7d 20 72 65 74 75 72 6e 0a  t eq ""} return.
4f10: 09 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .#              
4f20: 20 20 20 20 20 20 20 20 20 20 20 20 70 61 72 65              pare
4f30: 6e 74 20 2d 3e 20 63 68 69 6c 64 0a 09 69 66 20  nt -> child..if 
4f40: 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76  {[rev istrunkrev
4f50: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20  nr $revnr]} {.. 
4f60: 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 70     lappend mydep
4f70: 65 6e 64 65 6e 63 69 65 73 20 24 6e 65 78 74 20  endencies $next 
4f80: 24 72 65 76 6e 72 0a 09 7d 20 65 6c 73 65 20 7b  $revnr..} else {
4f90: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79  ..    lappend my
4fa0: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65  dependencies $re
4fb0: 76 6e 72 20 24 6e 65 78 74 0a 09 7d 0a 09 72 65  vnr $next..}..re
4fc0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
4fd0: 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 50 72  method ProcessPr
4fe0: 69 6d 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65  imaryDependencie
4ff0: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20  s {} {..foreach 
5000: 7b 70 61 72 65 6e 74 72 65 76 6e 72 20 63 68 69  {parentrevnr chi
5010: 6c 64 72 65 76 6e 72 7d 20 24 6d 79 64 65 70 65  ldrevnr} $mydepe
5020: 6e 64 65 6e 63 69 65 73 20 7b 0a 09 20 20 20 20  ndencies {..    
5030: 73 65 74 20 70 61 72 65 6e 74 20 24 6d 79 72 65  set parent $myre
5040: 76 28 24 70 61 72 65 6e 74 72 65 76 6e 72 29 0a  v($parentrevnr).
5050: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 20  .    set child  
5060: 24 6d 79 72 65 76 28 24 63 68 69 6c 64 72 65 76  $myrev($childrev
5070: 6e 72 29 0a 09 20 20 20 20 24 70 61 72 65 6e 74  nr)..    $parent
5080: 20 73 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64   setchild $child
5090: 0a 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74  ..    $child set
50a0: 70 61 72 65 6e 74 20 24 70 61 72 65 6e 74 0a 09  parent $parent..
50b0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
50c0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63  .    method Proc
50d0: 65 73 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65  essBranchDepende
50e0: 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65  ncies {} {..fore
50f0: 61 63 68 20 7b 62 72 61 6e 63 68 6e 72 20 62 72  ach {branchnr br
5100: 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74  anch} [array get
5110: 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09   mybranches] {..
5120: 20 20 20 20 73 65 74 20 72 65 76 6e 72 20 5b 24      set revnr [$
5130: 62 72 61 6e 63 68 20 70 61 72 65 6e 74 72 65 76  branch parentrev
5140: 6e 72 5d 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b  nr]...    if {![
5150: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65  info exists myre
5160: 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09  v($revnr)]} {...
5170: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65  log write 1 file
5180: 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20   "In '$mypath': 
5190: 54 68 65 20 62 72 61 6e 63 68 20 27 5b 24 62 72  The branch '[$br
51a0: 61 6e 63 68 20 6e 61 6d 65 5d 27 20 72 65 66 65  anch name]' refe
51b0: 72 65 6e 63 65 73 22 0a 09 09 6c 6f 67 20 77 72  rences"...log wr
51c0: 69 74 65 20 31 20 66 69 6c 65 20 22 74 68 65 20  ite 1 file "the 
51d0: 62 6f 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27  bogus revision '
51e0: 24 72 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c  $revnr' and will
51f0: 20 62 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09   be ignored."...
5200: 24 62 72 61 6e 63 68 20 64 65 73 74 72 6f 79 0a  $branch destroy.
5210: 09 09 75 6e 73 65 74 20 6d 79 62 72 61 6e 63 68  ..unset mybranch
5220: 65 73 28 24 62 72 61 6e 63 68 6e 72 29 0a 09 20  es($branchnr).. 
5230: 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65     } else {...se
5240: 74 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 65  t rev $myrev($re
5250: 76 6e 72 29 0a 09 09 24 72 65 76 20 61 64 64 62  vnr)...$rev addb
5260: 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09  ranch $branch...
5270: 24 62 72 61 6e 63 68 20 73 65 74 70 61 72 65 6e  $branch setparen
5280: 74 20 24 72 65 76 0a 0a 09 09 23 20 49 66 20 72  t $rev....# If r
5290: 65 76 69 73 69 6f 6e 73 20 77 65 72 65 20 63 6f  evisions were co
52a0: 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 62  mmitted on the b
52b0: 72 61 6e 63 68 20 77 65 20 73 74 6f 72 65 20 61  ranch we store a
52c0: 0a 09 09 23 20 72 65 66 65 72 65 6e 63 65 20 74  ...# reference t
52d0: 6f 20 74 68 65 20 62 72 61 6e 63 68 20 74 68 65  o the branch the
52e0: 72 65 2c 20 61 6e 64 20 66 75 72 74 68 65 72 20  re, and further 
52f0: 64 65 63 6c 61 72 65 0a 09 09 23 20 74 68 65 20  declare...# the 
5300: 66 69 72 73 74 20 63 68 69 6c 64 27 73 20 70 61  first child's pa
5310: 72 65 6e 74 20 74 6f 20 62 65 20 62 72 61 6e 63  rent to be branc
5320: 68 27 73 20 70 61 72 65 6e 74 2c 20 61 6e 64 0a  h's parent, and.
5330: 09 09 23 20 6c 69 73 74 20 74 68 69 73 20 63 68  ..# list this ch
5340: 69 6c 64 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ild in the paren
5350: 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 09 69  t revision.....i
5360: 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 63  f {[$branch hasc
5370: 68 69 6c 64 72 65 76 5d 7d 20 7b 0a 09 09 20 20  hildrev]} {...  
5380: 20 20 73 65 74 20 63 68 69 6c 64 72 65 76 6e 72    set childrevnr
5390: 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 72   [$branch childr
53a0: 65 76 6e 72 5d 0a 09 09 20 20 20 20 73 65 74 20  evnr]...    set 
53b0: 63 68 69 6c 64 20 24 6d 79 72 65 76 28 24 63 68  child $myrev($ch
53c0: 69 6c 64 72 65 76 6e 72 29 0a 09 09 20 20 20 20  ildrevnr)...    
53d0: 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c 64  $branch setchild
53e0: 20 24 63 68 69 6c 64 0a 0a 09 09 20 20 20 20 24   $child....    $
53f0: 63 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74 62  child setparentb
5400: 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09  ranch $branch...
5410: 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 61      $child setpa
5420: 72 65 6e 74 20 20 20 20 20 20 20 24 72 65 76 0a  rent       $rev.
5430: 09 09 20 20 20 20 24 72 65 76 20 61 64 64 63 68  ..    $rev addch
5440: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 63 68 69  ildonbranch $chi
5450: 6c 64 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d  ld...}..    }..}
5460: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
5470: 20 20 20 20 6d 65 74 68 6f 64 20 53 6f 72 74 42      method SortB
5480: 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a 09 66 6f  ranches {} {..fo
5490: 72 65 61 63 68 20 7b 72 65 76 6e 72 20 72 65 76  reach {revnr rev
54a0: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 72  } [array get myr
54b0: 65 76 5d 20 7b 20 24 72 65 76 20 73 6f 72 74 62  ev] { $rev sortb
54c0: 72 61 6e 63 68 65 73 20 7d 0a 09 72 65 74 75 72  ranches }..retur
54d0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
54e0: 68 6f 64 20 50 72 6f 63 65 73 73 54 61 67 44 65  hod ProcessTagDe
54f0: 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a  pendencies {} {.
5500: 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20  .foreach {revnr 
5510: 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20  taglist} [array 
5520: 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20  get mytags] {.. 
5530: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
5540: 69 73 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e  ists myrev($revn
5550: 72 29 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 20 5b  r)]} {...set n [
5560: 6c 6c 65 6e 67 74 68 20 24 74 61 67 6c 69 73 74  llength $taglist
5570: 5d 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20  ]...log write 1 
5580: 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74  file "In '$mypat
5590: 68 27 3a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  h': The followin
55a0: 67 20 5b 6e 73 70 20 24 6e 20 74 61 67 5d 20 72  g [nsp $n tag] r
55b0: 65 66 65 72 65 6e 63 65 22 0a 09 09 6c 6f 67 20  eference"...log 
55c0: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 74 68  write 1 file "th
55d0: 65 20 62 6f 67 75 73 20 72 65 76 69 73 69 6f 6e  e bogus revision
55e0: 20 27 24 72 65 76 6e 72 27 20 61 6e 64 20 77 69   '$revnr' and wi
55f0: 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e 22 0a  ll be ignored.".
5600: 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 24 74  ..foreach tag $t
5610: 61 67 6c 69 73 74 20 7b 0a 09 09 20 20 20 20 6c  aglist {...    l
5620: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20  og write 1 file 
5630: 22 20 20 20 20 5b 24 74 61 67 20 6e 61 6d 65 5d  "    [$tag name]
5640: 22 0a 09 09 20 20 20 20 24 74 61 67 20 64 65 73  "...    $tag des
5650: 74 72 6f 79 0a 09 09 7d 0a 09 09 75 6e 73 65 74  troy...}...unset
5660: 20 6d 79 74 61 67 73 28 24 72 65 76 6e 72 29 0a   mytags($revnr).
5670: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09  .    } else {...
5680: 73 65 74 20 72 65 76 20 24 6d 79 72 65 76 28 24  set rev $myrev($
5690: 72 65 76 6e 72 29 0a 09 09 66 6f 72 65 61 63 68  revnr)...foreach
56a0: 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a   tag $taglist {.
56b0: 09 09 20 20 20 20 24 72 65 76 20 61 64 64 74 61  ..    $rev addta
56c0: 67 20 20 20 20 24 74 61 67 0a 09 09 20 20 20 20  g    $tag...    
56d0: 24 74 61 67 20 73 65 74 74 61 67 72 65 76 20 24  $tag settagrev $
56e0: 72 65 76 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09  rev...}..    }..
56f0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
5700: 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65  .    method Dete
5710: 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69  rmineTheRootRevi
5720: 73 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 54 68 65  sion {} {..# The
5730: 20 72 6f 6f 74 20 69 73 20 74 68 65 20 6f 6e 65   root is the one
5740: 20 72 65 76 69 73 69 6f 6e 20 77 68 69 63 68 20   revision which 
5750: 68 61 73 20 6e 6f 20 70 61 72 65 6e 74 2e 20 42  has no parent. B
5760: 79 0a 09 23 20 63 68 65 63 6b 69 6e 67 20 61 6c  y..# checking al
5770: 6c 20 72 65 76 69 73 69 6f 6e 73 20 77 65 20 65  l revisions we e
5780: 6e 73 75 72 65 20 74 68 61 74 20 77 65 20 63 61  nsure that we ca
5790: 6e 20 64 65 74 65 63 74 20 61 6e 64 0a 09 23 20  n detect and..# 
57a0: 72 65 70 6f 72 74 20 74 68 65 20 63 61 73 65 20  report the case 
57b0: 6f 66 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74  of multiple root
57c0: 73 2e 20 57 69 74 68 6f 75 74 20 74 68 61 74 20  s. Without that 
57d0: 77 65 20 63 6f 75 6c 64 0a 09 23 20 73 69 6d 70  we could..# simp
57e0: 6c 79 20 74 61 6b 65 20 6f 6e 65 20 72 65 76 69  ly take one revi
57f0: 73 69 6f 6e 20 61 6e 64 20 66 6f 6c 6c 6f 77 20  sion and follow 
5800: 74 68 65 20 70 61 72 65 6e 74 20 6c 69 6e 6b 73  the parent links
5810: 20 74 6f 0a 09 23 20 74 68 65 69 72 20 72 6f 6f   to..# their roo
5820: 74 20 28 73 69 63 21 29 2e 0a 0a 09 66 6f 72 65  t (sic!)....fore
5830: 61 63 68 20 7b 72 65 76 6e 72 20 72 65 76 7d 20  ach {revnr rev} 
5840: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 72 65 76  [array get myrev
5850: 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72  ] {..    if {[$r
5860: 65 76 20 68 61 73 70 61 72 65 6e 74 5d 7d 20 63  ev hasparent]} c
5870: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 69 6e 74  ontinue..    int
5880: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 24  egrity assert {$
5890: 6d 79 72 6f 6f 74 20 65 71 20 22 22 7d 20 7b 4d  myroot eq ""} {M
58a0: 75 6c 74 69 70 6c 65 20 72 6f 6f 74 20 72 65 76  ultiple root rev
58b0: 69 73 69 6f 6e 73 20 66 6f 75 6e 64 7d 0a 09 20  isions found}.. 
58c0: 20 20 20 73 65 74 20 6d 79 72 6f 6f 74 20 24 72     set myroot $r
58d0: 65 76 0a 09 7d 0a 0a 09 23 20 49 6e 20 74 68 65  ev..}...# In the
58e0: 20 66 75 74 75 72 65 20 77 65 20 61 6c 73 6f 20   future we also 
58f0: 6e 65 65 64 20 61 20 6c 69 73 74 2c 20 61 73 20  need a list, as 
5900: 62 72 61 6e 63 68 65 73 20 63 61 6e 20 62 65 63  branches can bec
5910: 6f 6d 65 0a 09 23 20 73 65 76 65 72 65 64 20 66  ome..# severed f
5920: 72 6f 6d 20 74 68 65 69 72 20 70 61 72 65 6e 74  rom their parent
5930: 2c 20 6d 61 6b 69 6e 67 20 74 68 65 6d 20 74 68  , making them th
5940: 65 69 72 20 6f 77 6e 20 72 6f 6f 74 2e 0a 09 73  eir own root...s
5950: 65 74 20 6d 79 72 6f 6f 74 73 20 5b 6c 69 73 74  et myroots [list
5960: 20 24 6d 79 72 6f 6f 74 5d 0a 09 72 65 74 75 72   $myroot]..retur
5970: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
5980: 68 6f 64 20 44 65 74 65 72 6d 69 6e 65 52 65 76  hod DetermineRev
5990: 69 73 69 6f 6e 4f 70 65 72 61 74 69 6f 6e 73 20  isionOperations 
59a0: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 72 65  {} {..foreach re
59b0: 76 20 24 6d 79 72 65 76 69 73 69 6f 6e 73 20 7b  v $myrevisions {
59c0: 20 24 72 65 76 20 64 65 74 65 72 6d 69 6e 65 6f   $rev determineo
59d0: 70 65 72 61 74 69 6f 6e 20 7d 0a 09 72 65 74 75  peration }..retu
59e0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
59f0: 74 68 6f 64 20 44 65 74 65 72 6d 69 6e 65 4c 69  thod DetermineLi
5a00: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74  nesOfDevelopment
5a10: 20 7b 7d 20 7b 0a 09 23 20 46 6f 72 20 72 65 76   {} {..# For rev
5a20: 69 73 69 6f 6e 73 20 74 68 69 73 20 68 61 73 20  isions this has 
5a30: 62 65 65 6e 20 64 6f 6e 65 20 61 6c 72 65 61 64  been done alread
5a40: 79 2c 20 69 6e 20 27 65 78 74 65 6e 64 27 2e 20  y, in 'extend'. 
5a50: 4e 6f 77 0a 09 23 20 77 65 20 64 6f 20 74 68 69  Now..# we do thi
5a60: 73 20 66 6f 72 20 74 68 65 20 62 72 61 6e 63 68  s for the branch
5a70: 65 73 20 61 6e 64 20 74 61 67 73 2e 0a 0a 09 66  es and tags....f
5a80: 6f 72 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 68  oreach {_ branch
5a90: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62  } [array get myb
5aa0: 72 61 6e 63 68 65 73 5d 20 7b 0a 09 20 20 20 20  ranches] {..    
5ab0: 24 62 72 61 6e 63 68 20 73 65 74 6c 6f 64 20 5b  $branch setlod [
5ac0: 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 5b 24 62  $self GetLOD [$b
5ad0: 72 61 6e 63 68 20 70 61 72 65 6e 74 72 65 76 6e  ranch parentrevn
5ae0: 72 5d 5d 0a 09 7d 0a 0a 09 66 6f 72 65 61 63 68  r]]..}...foreach
5af0: 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72   {_ taglist} [ar
5b00: 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20  ray get mytags] 
5b10: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74  {..    foreach t
5b20: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09  ag $taglist {...
5b30: 24 74 61 67 20 73 65 74 6c 6f 64 20 5b 24 73 65  $tag setlod [$se
5b40: 6c 66 20 47 65 74 4c 4f 44 20 5b 24 74 61 67 20  lf GetLOD [$tag 
5b50: 74 61 67 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20  tagrevnr]]..    
5b60: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  }..}..return.   
5b70: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 47   }..    method G
5b80: 65 74 4c 4f 44 20 7b 72 65 76 6e 72 7d 20 7b 0a  etLOD {revnr} {.
5b90: 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e  .if {[rev istrun
5ba0: 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20  krevnr $revnr]} 
5bb0: 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 24 6d  {..    return $m
5bc0: 79 74 72 75 6e 6b 0a 09 7d 20 65 6c 73 65 20 7b  ytrunk..} else {
5bd0: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 5b 24 73  ..    return [$s
5be0: 65 6c 66 20 52 65 76 32 42 72 61 6e 63 68 20 24  elf Rev2Branch $
5bf0: 72 65 76 6e 72 5d 0a 09 7d 0a 20 20 20 20 7d 0a  revnr]..}.    }.
5c00: 0a 20 20 20 20 6d 65 74 68 6f 64 20 48 61 6e 64  .    method Hand
5c10: 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c  leNonTrunkDefaul
5c20: 74 42 72 61 6e 63 68 20 7b 7d 20 7b 0a 09 73 65  tBranch {} {..se
5c30: 74 20 72 65 76 6c 69 73 74 20 5b 24 73 65 6c 66  t revlist [$self
5c40: 20 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74   NonTrunkDefault
5c50: 52 65 76 69 73 69 6f 6e 73 5d 0a 09 69 66 20 7b  Revisions]..if {
5c60: 21 5b 6c 6c 65 6e 67 74 68 20 24 72 65 76 6c 69  ![llength $revli
5c70: 73 74 5d 7d 20 72 65 74 75 72 6e 0a 0a 09 24 73  st]} return...$s
5c80: 65 6c 66 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75  elf AdjustNonTru
5c90: 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20  nkDefaultBranch 
5ca0: 24 72 65 76 6c 69 73 74 0a 09 24 73 65 6c 66 20  $revlist..$self 
5cb0: 43 68 65 63 6b 4c 4f 44 73 0a 09 72 65 74 75 72  CheckLODs..retur
5cc0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
5cd0: 68 6f 64 20 4e 6f 6e 54 72 75 6e 6b 44 65 66 61  hod NonTrunkDefa
5ce0: 75 6c 74 52 65 76 69 73 69 6f 6e 73 20 7b 7d 20  ultRevisions {} 
5cf0: 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76  {..# From cvs2sv
5d00: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
5d10: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 77 69 74  explanation (wit
5d20: 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 0a  h modifications.
5d30: 09 23 20 66 6f 72 20 6f 75 72 20 61 6c 67 6f 72  .# for our algor
5d40: 69 74 68 6d 29 3a 0a 0a 09 23 20 44 65 74 65 72  ithm):...# Deter
5d50: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
5d60: 72 65 20 61 72 65 20 61 6e 79 20 6e 6f 6e 2d 74  re are any non-t
5d70: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61  runk default bra
5d80: 6e 63 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73  nch..# revisions
5d90: 2e 0a 0a 09 23 20 49 66 20 61 20 6e 6f 6e 2d 74  ....# If a non-t
5da0: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61  runk default bra
5db0: 6e 63 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65  nch is determine
5dc0: 64 20 74 6f 20 68 61 76 65 20 65 78 69 73 74 65  d to have existe
5dd0: 64 2c 0a 09 23 20 72 65 74 75 72 6e 20 61 20 6c  d,..# return a l
5de0: 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 73 20 66  ist of objects f
5df0: 6f 72 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73  or all revisions
5e00: 20 74 68 61 74 20 77 65 72 65 20 6f 6e 63 65 0a   that were once.
5e10: 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66  .# non-trunk def
5e20: 61 75 6c 74 20 72 65 76 69 73 69 6f 6e 73 2c 20  ault revisions, 
5e30: 69 6e 20 64 65 70 65 6e 64 65 6e 63 79 20 6f 72  in dependency or
5e40: 64 65 72 20 28 69 2e 65 2e 20 72 6f 6f 74 0a 09  der (i.e. root..
5e50: 23 20 66 69 72 73 74 29 2e 0a 0a 09 23 20 54 68  # first)....# Th
5e60: 65 72 65 20 61 72 65 20 74 77 6f 20 63 61 73 65  ere are two case
5e70: 73 20 74 6f 20 68 61 6e 64 6c 65 3a 0a 0a 09 23  s to handle:...#
5e80: 20 4f 6e 65 20 63 61 73 65 20 69 73 20 73 69 6d   One case is sim
5e90: 70 6c 65 2e 20 20 54 68 65 20 52 43 53 20 66 69  ple.  The RCS fi
5ea0: 6c 65 20 6c 69 73 74 73 20 61 20 64 65 66 61 75  le lists a defau
5eb0: 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 65 78 70  lt branch..# exp
5ec0: 6c 69 63 69 74 6c 79 20 69 6e 20 69 74 73 20 68  licitly in its h
5ed0: 65 61 64 65 72 2c 20 73 75 63 68 20 61 73 20 27  eader, such as '
5ee0: 31 2e 31 2e 31 27 2e 20 20 49 6e 20 74 68 69 73  1.1.1'.  In this
5ef0: 20 63 61 73 65 2c 20 77 65 0a 09 23 20 6b 6e 6f   case, we..# kno
5f00: 77 20 74 68 61 74 20 65 76 65 72 79 20 72 65 76  w that every rev
5f10: 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 76 65 6e  ision on the ven
5f20: 64 6f 72 20 62 72 61 6e 63 68 20 69 73 20 74 6f  dor branch is to
5f30: 20 62 65 0a 09 23 20 74 72 65 61 74 65 64 20 61   be..# treated a
5f40: 73 20 68 65 61 64 20 6f 66 20 74 72 75 6e 6b 20  s head of trunk 
5f50: 61 74 20 74 68 61 74 20 70 6f 69 6e 74 20 69 6e  at that point in
5f60: 20 74 69 6d 65 2e 0a 0a 09 23 20 42 75 74 20 74   time....# But t
5f70: 68 65 72 65 27 73 20 61 6c 73 6f 20 61 20 64 65  here's also a de
5f80: 67 65 6e 65 72 61 74 65 20 63 61 73 65 2e 20 20  generate case.  
5f90: 54 68 65 20 52 43 53 20 66 69 6c 65 20 64 6f 65  The RCS file doe
5fa0: 73 20 6e 6f 74 0a 09 23 20 63 75 72 72 65 6e 74  s not..# current
5fb0: 6c 79 20 68 61 76 65 20 61 20 64 65 66 61 75 6c  ly have a defaul
5fc0: 74 20 62 72 61 6e 63 68 2c 20 79 65 74 20 77 65  t branch, yet we
5fd0: 20 63 61 6e 20 64 65 64 75 63 65 20 74 68 61 74   can deduce that
5fe0: 20 66 6f 72 0a 09 23 20 73 6f 6d 65 20 70 65 72   for..# some per
5ff0: 69 6f 64 20 69 6e 20 74 68 65 20 70 61 73 74 20  iod in the past 
6000: 69 74 20 70 72 6f 62 61 62 6c 79 20 2a 64 69 64  it probably *did
6010: 2a 20 68 61 76 65 20 6f 6e 65 2e 20 20 46 6f 72  * have one.  For
6020: 0a 09 23 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  ..# example, the
6030: 20 66 69 6c 65 20 68 61 73 20 76 65 6e 64 6f 72   file has vendor
6040: 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31   revisions 1.1.1
6050: 2e 31 20 2d 3e 20 31 2e 31 2e 31 2e 39 36 2c 0a  .1 -> 1.1.1.96,.
6060: 09 23 20 61 6c 6c 20 6f 66 20 77 68 69 63 68 20  .# all of which 
6070: 61 72 65 20 64 61 74 65 64 20 62 65 66 6f 72 65  are dated before
6080: 20 31 2e 32 2c 20 61 6e 64 20 74 68 65 6e 20 69   1.2, and then i
6090: 74 20 68 61 73 20 31 2e 31 2e 31 2e 39 37 0a 09  t has 1.1.1.97..
60a0: 23 20 2d 3e 20 31 2e 31 2e 31 2e 31 30 30 20 64  # -> 1.1.1.100 d
60b0: 61 74 65 64 20 61 66 74 65 72 20 31 2e 32 2e 20  ated after 1.2. 
60c0: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77   In this case, w
60d0: 65 20 73 68 6f 75 6c 64 0a 09 23 20 72 65 63 6f  e should..# reco
60e0: 72 64 20 31 2e 31 2e 31 2e 39 36 20 61 73 20 74  rd 1.1.1.96 as t
60f0: 68 65 20 6c 61 73 74 20 76 65 6e 64 6f 72 20 72  he last vendor r
6100: 65 76 69 73 69 6f 6e 20 74 6f 20 68 61 76 65 20  evision to have 
6110: 62 65 65 6e 20 74 68 65 0a 09 23 20 68 65 61 64  been the..# head
6120: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
6130: 62 72 61 6e 63 68 2e 0a 0a 09 69 66 20 7b 24 6d  branch....if {$m
6140: 79 70 72 69 6e 63 69 70 61 6c 20 6e 65 20 22 22  yprincipal ne ""
6150: 7d 20 7b 0a 09 20 20 20 20 23 20 54 68 65 72 65  } {..    # There
6160: 20 69 73 20 73 74 69 6c 6c 20 61 20 64 65 66 61   is still a defa
6170: 75 6c 74 20 62 72 61 6e 63 68 3b 20 74 68 61 74  ult branch; that
6180: 20 6d 65 61 6e 73 20 74 68 61 74 20 61 6c 6c 0a   means that all.
6190: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73  .    # revisions
61a0: 20 6f 6e 20 74 68 61 74 20 62 72 61 6e 63 68 20   on that branch 
61b0: 67 65 74 20 6d 61 72 6b 65 64 2e 0a 0a 09 20 20  get marked....  
61c0: 20 20 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69    log write 5 fi
61d0: 6c 65 20 22 46 6f 75 6e 64 20 65 78 70 6c 69 63  le "Found explic
61e0: 69 74 6c 79 20 6d 61 72 6b 65 64 20 4e 54 44 42  itly marked NTDB
61f0: 22 0a 0a 09 20 20 20 20 73 65 74 20 72 6e 65 78  "...    set rnex
6200: 74 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64  t [$myroot child
6210: 5d 0a 09 20 20 20 20 69 66 20 7b 24 72 6e 65 78  ]..    if {$rnex
6220: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 74 72 6f  t ne ""} {...tro
6230: 75 62 6c 65 20 66 61 74 61 6c 20 22 46 69 6c 65  uble fatal "File
6240: 20 77 69 74 68 20 64 65 66 61 75 6c 74 20 62 72   with default br
6250: 61 6e 63 68 20 24 6d 79 70 72 69 6e 63 69 70 61  anch $myprincipa
6260: 6c 20 61 6c 73 6f 20 68 61 73 20 72 65 76 69 73  l also has revis
6270: 69 6f 6e 20 5b 24 72 6e 65 78 74 20 72 65 76 6e  ion [$rnext revn
6280: 72 5d 22 0a 09 09 72 65 74 75 72 6e 0a 09 20 20  r]"...return..  
6290: 20 20 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 65    }...    set re
62a0: 76 20 5b 24 6d 79 62 72 61 6e 63 68 65 73 28 24  v [$mybranches($
62b0: 6d 79 70 72 69 6e 63 69 70 61 6c 29 20 63 68 69  myprincipal) chi
62c0: 6c 64 5d 0a 09 20 20 20 20 73 65 74 20 72 65 73  ld]..    set res
62d0: 20 7b 7d 0a 0a 09 20 20 20 20 77 68 69 6c 65 20   {}...    while 
62e0: 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09  {$rev ne ""} {..
62f0: 09 6c 61 70 70 65 6e 64 20 72 65 73 20 24 72 65  .lappend res $re
6300: 76 0a 09 09 73 65 74 20 72 65 76 20 5b 24 72 65  v...set rev [$re
6310: 76 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a  v child]..    }.
6320: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 24 72 65  ..    return $re
6330: 73 0a 0a 09 7d 20 65 6c 73 65 69 66 20 7b 24 6d  s...} elseif {$m
6340: 79 69 6d 70 6f 72 74 65 64 7d 20 7b 0a 09 20 20  yimported} {..  
6350: 20 20 23 20 4e 6f 20 64 65 66 61 75 6c 74 20 62    # No default b
6360: 72 61 6e 63 68 2c 20 62 75 74 20 74 68 65 20 66  ranch, but the f
6370: 69 6c 65 20 61 70 70 65 61 72 73 20 74 6f 20 68  ile appears to h
6380: 61 76 65 20 62 65 65 6e 0a 09 20 20 20 20 23 20  ave been..    # 
6390: 69 6d 70 6f 72 74 65 64 2e 20 20 53 6f 20 6f 75  imported.  So ou
63a0: 72 20 65 64 75 63 61 74 65 64 20 67 75 65 73 73  r educated guess
63b0: 20 69 73 20 74 68 61 74 20 61 6c 6c 20 72 65 76   is that all rev
63c0: 69 73 69 6f 6e 73 0a 09 20 20 20 20 23 20 6f 6e  isions..    # on
63d0: 20 74 68 65 20 27 31 2e 31 2e 31 27 20 62 72 61   the '1.1.1' bra
63e0: 6e 63 68 20 77 69 74 68 20 74 69 6d 65 73 74 61  nch with timesta
63f0: 6d 70 73 20 70 72 69 6f 72 20 74 6f 20 74 68 65  mps prior to the
6400: 0a 09 20 20 20 20 23 20 74 69 6d 65 73 74 61 6d  ..    # timestam
6410: 70 20 6f 66 20 27 31 2e 32 27 20 77 65 72 65 20  p of '1.2' were 
6420: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
6430: 74 20 62 72 61 6e 63 68 0a 09 20 20 20 20 23 20  t branch..    # 
6440: 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 20 20  revisions....   
6450: 20 23 20 54 68 69 73 20 72 65 61 6c 6c 79 20 6f   # This really o
6460: 6e 6c 79 20 70 72 6f 63 65 73 73 65 73 20 73 74  nly processes st
6470: 61 6e 64 61 72 64 20 27 31 2e 31 2e 31 2e 2a 27  andard '1.1.1.*'
6480: 2d 73 74 79 6c 65 0a 09 20 20 20 20 23 20 76 65  -style..    # ve
6490: 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e 20  ndor revisions. 
64a0: 20 4f 6e 65 20 63 6f 75 6c 64 20 63 6f 6e 63 65   One could conce
64b0: 69 76 61 62 6c 79 20 68 61 76 65 20 61 20 66 69  ivably have a fi
64c0: 6c 65 0a 09 20 20 20 20 23 20 77 68 6f 73 65 20  le..    # whose 
64d0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69  default branch i
64e0: 73 20 31 2e 31 2e 33 20 6f 72 20 77 68 61 74 65  s 1.1.3 or whate
64f0: 76 65 72 2c 20 6f 72 20 77 61 73 20 74 68 61 74  ver, or was that
6500: 0a 09 20 20 20 20 23 20 61 74 20 73 6f 6d 65 20  ..    # at some 
6510: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20 77  point in time, w
6520: 69 74 68 20 76 65 6e 64 6f 72 20 72 65 76 69 73  ith vendor revis
6530: 69 6f 6e 73 20 31 2e 31 2e 33 2e 31 2c 0a 09 20  ions 1.1.3.1,.. 
6540: 20 20 20 23 20 31 2e 31 2e 33 2e 32 2c 20 65 74     # 1.1.3.2, et
6550: 63 2e 20 20 42 75 74 20 77 69 74 68 20 74 68 65  c.  But with the
6560: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
6570: 67 6f 6e 65 20 6e 6f 77 2c 0a 09 20 20 20 20 23  gone now,..    #
6580: 20 77 65 27 64 20 68 61 76 65 20 6e 6f 20 62 61   we'd have no ba
6590: 73 69 73 20 66 6f 72 20 61 73 73 75 6d 69 6e 67  sis for assuming
65a0: 20 74 68 61 74 20 74 68 65 20 6e 6f 6e 2d 73 74   that the non-st
65b0: 61 6e 64 61 72 64 0a 09 20 20 20 20 23 20 76 65  andard..    # ve
65c0: 6e 64 6f 72 20 62 72 61 6e 63 68 20 68 61 64 20  ndor branch had 
65d0: 65 76 65 72 20 62 65 65 6e 20 74 68 65 20 64 65  ever been the de
65e0: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 61 6e 79  fault branch any
65f0: 77 61 79 2e 0a 0a 09 20 20 20 20 23 20 4e 6f 74  way....    # Not
6600: 65 20 74 68 61 74 20 77 65 20 72 65 6c 79 20 6f  e that we rely o
6610: 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 62 65  n comparisons be
6620: 74 77 65 65 6e 20 74 68 65 20 74 69 6d 65 73 74  tween the timest
6630: 61 6d 70 73 0a 09 20 20 20 20 23 20 6f 66 20 74  amps..    # of t
6640: 68 65 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20  he revisions on 
6650: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  the vendor branc
6660: 68 20 61 6e 64 20 74 68 61 74 20 6f 66 0a 09 20  h and that of.. 
6670: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 31 2e     # revision 1.
6680: 32 2c 20 65 76 65 6e 20 74 68 6f 75 67 68 20 74  2, even though t
6690: 68 65 20 74 69 6d 65 73 74 61 6d 70 73 20 6d 69  he timestamps mi
66a0: 67 68 74 20 62 65 0a 09 20 20 20 20 23 20 69 6e  ght be..    # in
66b0: 63 6f 72 72 65 63 74 20 64 75 65 20 74 6f 20 63  correct due to c
66c0: 6c 6f 63 6b 20 73 6b 65 77 2e 20 20 57 65 20 63  lock skew.  We c
66d0: 6f 75 6c 64 20 64 6f 20 61 20 73 6c 69 67 68 74  ould do a slight
66e0: 6c 79 0a 09 20 20 20 20 23 20 62 65 74 74 65 72  ly..    # better
66f0: 20 6a 6f 62 20 69 66 20 77 65 20 75 73 65 64 20   job if we used 
6700: 74 68 65 20 63 68 61 6e 67 65 73 65 74 20 74 69  the changeset ti
6710: 6d 65 73 74 61 6d 70 73 2c 20 61 73 20 69 74 20  mestamps, as it 
6720: 69 73 0a 09 20 20 20 20 23 20 70 6f 73 73 69 62  is..    # possib
6730: 6c 65 20 74 68 61 74 20 74 68 65 20 64 65 70 65  le that the depe
6740: 6e 64 65 6e 63 69 65 73 20 74 68 61 74 20 77 65  ndencies that we
6750: 6e 74 20 69 6e 74 6f 0a 09 20 20 20 20 23 20 64  nt into..    # d
6760: 65 74 65 72 6d 69 6e 69 6e 67 20 74 68 6f 73 65  etermining those
6770: 20 74 69 6d 65 73 74 61 6d 70 73 20 61 72 65 20   timestamps are 
6780: 6d 6f 72 65 20 61 63 63 75 72 61 74 65 2e 20 20  more accurate.  
6790: 42 75 74 0a 09 20 20 20 20 23 20 74 68 61 74 20  But..    # that 
67a0: 77 6f 75 6c 64 20 72 65 71 75 69 72 65 20 61 6e  would require an
67b0: 20 65 78 74 72 61 20 70 61 73 73 20 6f 72 20 74   extra pass or t
67c0: 77 6f 2e 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b  wo....    if {![
67d0: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72  info exists mybr
67e0: 61 6e 63 68 65 73 28 31 2e 31 2e 31 29 5d 7d 20  anches(1.1.1)]} 
67f0: 7b 20 72 65 74 75 72 6e 20 7b 7d 20 7d 0a 0a 09  { return {} }...
6800: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 35 20      log write 5 
6810: 66 69 6c 65 20 22 44 65 64 75 63 65 64 20 65 78  file "Deduced ex
6820: 69 73 74 65 6e 63 65 20 6f 66 20 4e 54 44 42 22  istence of NTDB"
6830: 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 20 20  ...    set rev  
6840: 5b 24 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31  [$mybranches(1.1
6850: 2e 31 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20  .1) child]..    
6860: 73 65 74 20 72 65 73 20 20 7b 7d 0a 09 20 20 20  set res  {}..   
6870: 20 73 65 74 20 73 74 6f 70 20 5b 24 6d 79 72 6f   set stop [$myro
6880: 6f 74 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20  ot child]...    
6890: 69 66 20 7b 24 73 74 6f 70 20 65 71 20 22 22 7d  if {$stop eq ""}
68a0: 20 7b 0a 09 09 23 20 47 65 74 20 65 76 65 72 79   {...# Get every
68b0: 74 68 69 6e 67 20 6f 6e 20 74 68 65 20 62 72 61  thing on the bra
68c0: 6e 63 68 0a 09 09 77 68 69 6c 65 20 7b 24 72 65  nch...while {$re
68d0: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20  v ne ""} {...   
68e0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 72 65   lappend res $re
68f0: 76 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 20  v...    set rev 
6900: 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d  [$rev child]...}
6910: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09  ..    } else {..
6920: 09 23 20 43 6f 6c 6c 65 63 74 20 65 76 65 72 79  .# Collect every
6930: 74 68 69 6e 67 20 6f 6e 20 74 68 65 20 62 72 61  thing on the bra
6940: 6e 63 68 20 77 68 69 63 68 20 73 65 65 6d 73 20  nch which seems 
6950: 74 6f 20 68 61 76 65 0a 09 09 23 20 62 65 65 6e  to have...# been
6960: 20 63 6f 6d 6d 69 74 74 65 64 20 62 65 66 6f 72   committed befor
6970: 65 20 74 68 65 20 66 69 72 73 74 20 70 72 69 6d  e the first prim
6980: 61 72 79 20 63 68 69 6c 64 20 6f 66 20 74 68 65  ary child of the
6990: 0a 09 09 23 20 72 6f 6f 74 20 72 65 76 69 73 69  ...# root revisi
69a0: 6f 6e 2e 0a 09 09 73 65 74 20 73 74 6f 70 64 61  on....set stopda
69b0: 74 65 20 5b 24 73 74 6f 70 20 64 61 74 65 5d 0a  te [$stop date].
69c0: 09 09 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65  ..while {$rev ne
69d0: 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 69 66 20   ""} {...    if 
69e0: 7b 5b 24 72 65 76 20 64 61 74 65 5d 20 3e 3d 20  {[$rev date] >= 
69f0: 24 73 74 6f 70 64 61 74 65 7d 20 62 72 65 61 6b  $stopdate} break
6a00: 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  ...    lappend r
6a10: 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 65  es $rev...    se
6a20: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c  t rev [$rev chil
6a30: 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09  d]...}..    }...
6a40: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a      return $res.
6a50: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20  ..} else {..    
6a60: 72 65 74 75 72 6e 20 7b 7d 0a 09 7d 0a 20 20 20  return {}..}.   
6a70: 20 7d 0a 0a 20 20 20 20 23 20 47 65 6e 65 72 61   }..    # Genera
6a80: 6c 20 6e 6f 74 65 3a 20 49 6e 20 74 68 65 20 66  l note: In the f
6a90: 6f 6c 6c 6f 77 69 6e 67 20 6d 65 74 68 6f 64 73  ollowing methods
6aa0: 20 77 65 20 6f 6e 6c 79 20 6d 6f 64 69 66 79 20   we only modify 
6ab0: 74 68 65 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20  the links.    # 
6ac0: 62 65 74 77 65 65 6e 20 72 65 76 69 73 69 6f 6e  between revision
6ad0: 73 20 61 6e 64 20 73 79 6d 62 6f 6c 73 20 74 6f  s and symbols to
6ae0: 20 72 65 73 74 72 75 63 74 75 72 65 20 74 68 65   restructure the
6af0: 20 72 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20   revision.    # 
6b00: 74 72 65 65 2e 20 57 65 20 64 6f 20 5f 5f 6e 6f  tree. We do __no
6b10: 74 5f 5f 20 64 65 73 74 72 6f 79 20 74 68 65 20  t__ destroy the 
6b20: 6f 62 6a 65 63 74 73 2e 20 47 69 76 65 6e 20 74  objects. Given t
6b30: 68 65 20 63 6f 6d 70 6c 65 78 20 6c 69 6e 6b 73  he complex links
6b40: 0a 20 20 20 20 23 20 47 43 20 69 73 20 64 69 66  .    # GC is dif
6b50: 66 69 63 75 6c 74 20 61 74 20 74 68 69 73 20 6c  ficult at this l
6b60: 65 76 65 6c 2e 20 49 74 20 69 73 20 6d 75 63 68  evel. It is much
6b70: 20 65 61 73 69 65 72 20 74 6f 20 64 72 6f 70 0a   easier to drop.
6b80: 20 20 20 20 23 20 65 76 65 72 79 74 68 69 6e 67      # everything
6b90: 20 77 68 65 6e 20 77 65 20 77 65 20 61 72 65 20   when we we are 
6ba0: 64 6f 6e 65 2e 20 54 68 69 73 20 68 61 70 70 65  done. This happe
6bb0: 6e 73 20 69 6e 20 27 64 72 6f 70 27 2c 20 75 73  ns in 'drop', us
6bc0: 69 6e 67 0a 20 20 20 20 23 20 74 68 65 20 73 74  ing.    # the st
6bd0: 61 74 65 20 76 61 72 69 61 62 6c 65 20 27 6d 79  ate variable 'my
6be0: 72 65 76 27 2c 20 27 6d 79 62 72 61 6e 63 68 65  rev', 'mybranche
6bf0: 73 27 2c 20 61 6e 64 20 27 6d 79 74 61 67 73 27  s', and 'mytags'
6c00: 2e 20 57 68 61 74 20 77 65 0a 20 20 20 20 23 20  . What we.    # 
6c10: 68 61 76 65 20 74 6f 20 70 65 72 73 69 73 74 2c  have to persist,
6c20: 20 70 65 72 66 6f 72 6d 65 64 20 62 79 20 27 70   performed by 'p
6c30: 65 72 73 69 73 74 27 2c 20 77 65 20 6b 6e 6f 77  ersist', we know
6c40: 20 77 69 6c 6c 20 62 65 0a 20 20 20 20 23 20 72   will be.    # r
6c50: 65 61 63 68 61 62 6c 65 20 74 68 72 6f 75 67 68  eachable through
6c60: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 6c   the revisions l
6c70: 69 73 74 65 64 20 69 6e 20 27 6d 79 72 6f 6f 74  isted in 'myroot
6c80: 73 27 20 61 6e 64 20 74 68 65 69 72 0a 20 20 20  s' and their.   
6c90: 20 23 20 63 68 69 6c 64 72 65 6e 20 61 6e 64 20   # children and 
6ca0: 73 79 6d 62 6f 6c 73 2e 0a 0a 20 20 20 20 6d 65  symbols...    me
6cb0: 74 68 6f 64 20 41 64 6a 75 73 74 4e 6f 6e 54 72  thod AdjustNonTr
6cc0: 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68  unkDefaultBranch
6cd0: 20 7b 72 65 76 6c 69 73 74 7d 20 7b 0a 09 73 65   {revlist} {..se
6ce0: 74 20 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74 20  t stop [$myroot 
6cf0: 63 68 69 6c 64 5d 20 3b 23 20 72 65 76 20 27 31  child] ;# rev '1
6d00: 2e 32 27 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20  .2'...log write 
6d10: 35 20 66 69 6c 65 20 22 41 64 6a 75 73 74 69 6e  5 file "Adjustin
6d20: 67 20 4e 54 44 42 20 63 6f 6e 74 61 69 6e 69 6e  g NTDB containin
6d30: 67 20 5b 6e 73 70 20 5b 6c 6c 65 6e 67 74 68 20  g [nsp [llength 
6d40: 24 72 65 76 6c 69 73 74 5d 20 72 65 76 69 73 69  $revlist] revisi
6d50: 6f 6e 5d 22 0a 0a 09 23 20 46 72 6f 6d 20 63 76  on]"...# From cv
6d60: 73 32 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f 77  s2svn the follow
6d70: 69 6e 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20  ing explanation 
6d80: 28 77 69 74 68 20 6d 6f 64 69 66 69 63 61 74 69  (with modificati
6d90: 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75 72 20 61  ons..# for our a
6da0: 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20 41  lgorithm):...# A
6db0: 64 6a 75 73 74 20 74 68 65 20 6e 6f 6e 2d 74 72  djust the non-tr
6dc0: 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e  unk default bran
6dd0: 63 68 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75  ch revisions fou
6de0: 6e 64 20 69 6e 20 74 68 65 0a 09 23 20 27 72 65  nd in the..# 're
6df0: 76 6c 69 73 74 27 2e 0a 0a 09 23 20 27 6d 79 69  vlist'....# 'myi
6e00: 6d 70 6f 72 74 65 64 27 20 69 73 20 61 20 62 6f  mported' is a bo
6e10: 6f 6c 65 61 6e 20 66 6c 61 67 20 69 6e 64 69 63  olean flag indic
6e20: 61 74 69 6e 67 20 77 68 65 74 68 65 72 20 74 68  ating whether th
6e30: 69 73 20 66 69 6c 65 0a 09 23 20 61 70 70 65 61  is file..# appea
6e40: 72 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20  rs to have been 
6e50: 69 6d 70 6f 72 74 65 64 2c 20 77 68 69 63 68 20  imported, which 
6e60: 61 6c 73 6f 20 6d 65 61 6e 73 20 74 68 61 74 0a  also means that.
6e70: 09 23 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 20  .# revision 1.1 
6e80: 68 61 73 20 61 20 67 65 6e 65 72 61 74 65 64 20  has a generated 
6e90: 6c 6f 67 20 6d 65 73 73 61 67 65 20 74 68 61 74  log message that
6ea0: 20 6e 65 65 64 20 6e 6f 74 20 62 65 0a 09 23 20   need not be..# 
6eb0: 70 72 65 73 65 72 76 65 64 2e 20 20 27 72 65 76  preserved.  'rev
6ec0: 6c 69 73 74 27 20 69 73 20 61 20 6c 69 73 74 20  list' is a list 
6ed0: 6f 66 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  of object refere
6ee0: 6e 63 65 73 20 66 6f 72 20 74 68 65 0a 09 23 20  nces for the..# 
6ef0: 72 65 76 69 73 69 6f 6e 73 20 74 68 61 74 20 68  revisions that h
6f00: 61 76 65 20 62 65 65 6e 20 64 65 74 65 72 6d 69  ave been determi
6f10: 6e 65 64 20 74 6f 20 62 65 20 6e 6f 6e 2d 74 72  ned to be non-tr
6f20: 75 6e 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62  unk default..# b
6f30: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 2e  ranch revisions.
6f40: 0a 0a 09 23 20 4e 6f 74 65 20 74 68 61 74 20 74  ...# Note that t
6f50: 68 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f  he first revisio
6f60: 6e 20 6f 6e 20 74 68 65 20 64 65 66 61 75 6c 74  n on the default
6f70: 20 62 72 61 6e 63 68 20 69 73 0a 09 23 20 68 61   branch is..# ha
6f80: 6e 64 6c 65 64 20 73 74 72 61 6e 67 65 6c 79 20  ndled strangely 
6f90: 62 79 20 43 56 53 2e 20 20 49 66 20 61 20 66 69  by CVS.  If a fi
6fa0: 6c 65 20 69 73 20 69 6d 70 6f 72 74 65 64 20 28  le is imported (
6fb0: 61 73 20 6f 70 70 6f 73 65 64 0a 09 23 20 74 6f  as opposed..# to
6fc0: 20 62 65 69 6e 67 20 61 64 64 65 64 29 2c 20 43   being added), C
6fd0: 56 53 20 63 72 65 61 74 65 73 20 61 20 31 2e 31  VS creates a 1.1
6fe0: 20 72 65 76 69 73 69 6f 6e 2c 20 74 68 65 6e 20   revision, then 
6ff0: 63 72 65 61 74 65 73 20 61 0a 09 23 20 76 65 6e  creates a..# ven
7000: 64 6f 72 20 62 72 61 6e 63 68 20 31 2e 31 2e 31  dor branch 1.1.1
7010: 20 62 61 73 65 64 20 6f 6e 20 31 2e 31 2c 20 74   based on 1.1, t
7020: 68 65 6e 20 63 72 65 61 74 65 73 20 61 20 31 2e  hen creates a 1.
7030: 31 2e 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f  1.1.1..# revisio
7040: 6e 20 74 68 61 74 20 69 73 20 69 64 65 6e 74 69  n that is identi
7050: 63 61 6c 20 74 6f 20 74 68 65 20 31 2e 31 20 72  cal to the 1.1 r
7060: 65 76 69 73 69 6f 6e 20 28 69 2e 65 2e 2c 20 69  evision (i.e., i
7070: 74 73 0a 09 23 20 64 65 6c 74 61 74 65 78 74 20  ts..# deltatext 
7080: 69 73 20 65 6d 70 74 79 29 2e 20 20 54 68 65 20  is empty).  The 
7090: 6c 6f 67 20 6d 65 73 73 61 67 65 20 74 68 61 74  log message that
70a0: 20 74 68 65 20 75 73 65 72 20 74 79 70 65 64 0a   the user typed.
70b0: 09 23 20 77 68 65 6e 20 69 6d 70 6f 72 74 69 6e  .# when importin
70c0: 67 20 69 73 20 73 74 6f 72 65 64 20 77 69 74 68  g is stored with
70d0: 20 74 68 65 20 31 2e 31 2e 31 2e 31 20 72 65 76   the 1.1.1.1 rev
70e0: 69 73 69 6f 6e 2e 20 20 54 68 65 20 31 2e 31 0a  ision.  The 1.1.
70f0: 09 23 20 72 65 76 69 73 69 6f 6e 20 61 6c 77 61  .# revision alwa
7100: 79 73 20 63 6f 6e 74 61 69 6e 73 20 61 20 73 74  ys contains a st
7110: 61 6e 64 61 72 64 2c 20 67 65 6e 65 72 61 74 65  andard, generate
7120: 64 20 6c 6f 67 20 6d 65 73 73 61 67 65 2c 0a 09  d log message,..
7130: 23 20 27 49 6e 69 74 69 61 6c 20 72 65 76 69 73  # 'Initial revis
7140: 69 6f 6e 5c 6e 27 2e 0a 0a 09 23 20 57 68 65 6e  ion\n'....# When
7150: 20 77 65 20 64 65 74 65 63 74 20 61 20 73 74 72   we detect a str
7160: 61 69 67 68 74 66 6f 72 77 61 72 64 20 69 6d 70  aightforward imp
7170: 6f 72 74 20 6c 69 6b 65 20 74 68 69 73 2c 20 77  ort like this, w
7180: 65 20 77 61 6e 74 0a 09 23 20 74 6f 20 68 61 6e  e want..# to han
7190: 64 6c 65 20 69 74 20 62 79 20 64 65 6c 65 74 69  dle it by deleti
71a0: 6e 67 20 74 68 65 20 31 2e 31 20 72 65 76 69 73  ng the 1.1 revis
71b0: 69 6f 6e 20 28 77 68 69 63 68 20 64 6f 65 73 6e  ion (which doesn
71c0: 27 74 0a 09 23 20 63 6f 6e 74 61 69 6e 20 61 6e  't..# contain an
71d0: 79 20 75 73 65 66 75 6c 20 69 6e 66 6f 72 6d 61  y useful informa
71e0: 74 69 6f 6e 29 20 61 6e 64 20 6d 61 6b 69 6e 67  tion) and making
71f0: 20 31 2e 31 2e 31 2e 31 20 69 6e 74 6f 20 61 6e   1.1.1.1 into an
7200: 0a 09 23 20 69 6e 64 65 70 65 6e 64 65 6e 74 20  ..# independent 
7210: 72 6f 6f 74 20 69 6e 20 74 68 65 20 66 69 6c 65  root in the file
7220: 27 73 20 64 65 70 65 6e 64 65 6e 63 79 20 74 72  's dependency tr
7230: 65 65 2e 20 20 49 6e 20 53 56 4e 2c 0a 09 23 20  ee.  In SVN,..# 
7240: 31 2e 31 2e 31 2e 31 20 77 69 6c 6c 20 62 65 20  1.1.1.1 will be 
7250: 61 64 64 65 64 20 64 69 72 65 63 74 6c 79 20 74  added directly t
7260: 6f 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61  o the vendor bra
7270: 6e 63 68 20 77 69 74 68 20 69 74 73 0a 09 23 20  nch with its..# 
7280: 69 6e 69 74 69 61 6c 20 63 6f 6e 74 65 6e 74 2e  initial content.
7290: 20 20 54 68 65 6e 20 69 6e 20 61 20 73 70 65 63    Then in a spec
72a0: 69 61 6c 20 27 70 6f 73 74 2d 63 6f 6d 6d 69 74  ial 'post-commit
72b0: 27 2c 20 74 68 65 0a 09 23 20 31 2e 31 2e 31 2e  ', the..# 1.1.1.
72c0: 31 20 72 65 76 69 73 69 6f 6e 20 69 73 20 63 6f  1 revision is co
72d0: 70 69 65 64 20 62 61 63 6b 20 74 6f 20 74 72 75  pied back to tru
72e0: 6e 6b 2e 0a 0a 09 23 20 49 66 20 74 68 65 20 75  nk....# If the u
72f0: 73 65 72 20 69 6d 70 6f 72 74 73 20 61 67 61 69  ser imports agai
7300: 6e 20 74 6f 20 74 68 65 20 73 61 6d 65 20 76 65  n to the same ve
7310: 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20 74 68 65  ndor branch, the
7320: 6e 20 43 56 53 0a 09 23 20 63 72 65 61 74 65 73  n CVS..# creates
7330: 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31   revisions 1.1.1
7340: 2e 32 2c 20 31 2e 31 2e 31 2e 33 2c 20 65 74 63  .2, 1.1.1.3, etc
7350: 2e 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20  . on the vendor 
7360: 62 72 61 6e 63 68 2c 0a 09 23 20 2a 77 69 74 68  branch,..# *with
7370: 6f 75 74 2a 20 63 6f 75 6e 74 65 72 70 61 72 74  out* counterpart
7380: 73 20 69 6e 20 74 72 75 6e 6b 20 28 65 76 65 6e  s in trunk (even
7390: 20 74 68 6f 75 67 68 20 74 68 65 73 65 20 72 65   though these re
73a0: 76 69 73 69 6f 6e 73 0a 09 23 20 65 66 66 65 63  visions..# effec
73b0: 74 69 76 65 6c 79 20 70 6c 61 79 20 74 68 65 20  tively play the 
73c0: 72 6f 6c 65 20 6f 66 20 74 72 75 6e 6b 20 72 65  role of trunk re
73d0: 76 69 73 69 6f 6e 73 29 2e 20 20 53 6f 20 61 66  visions).  So af
73e0: 74 65 72 20 77 65 20 61 64 64 0a 09 23 20 73 75  ter we add..# su
73f0: 63 68 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 20  ch revisions to 
7400: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  the vendor branc
7410: 68 2c 20 77 65 20 61 6c 73 6f 20 63 6f 70 79 20  h, we also copy 
7420: 74 68 65 6d 20 62 61 63 6b 20 74 6f 0a 09 23 20  them back to..# 
7430: 74 72 75 6e 6b 20 69 6e 20 70 6f 73 74 2d 63 6f  trunk in post-co
7440: 6d 6d 69 74 73 2e 0a 0a 09 23 20 57 65 20 6d 61  mmits....# We ma
7450: 72 6b 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73  rk the revisions
7460: 20 66 6f 75 6e 64 20 69 6e 20 27 72 65 76 6c 69   found in 'revli
7470: 73 74 27 20 61 73 20 64 65 66 61 75 6c 74 20 62  st' as default b
7480: 72 61 6e 63 68 0a 09 23 20 72 65 76 69 73 69 6f  ranch..# revisio
7490: 6e 73 2e 20 20 41 6c 73 6f 2c 20 69 66 20 74 68  ns.  Also, if th
74a0: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20  e root revision 
74b0: 68 61 73 20 61 20 70 72 69 6d 61 72 79 20 63 68  has a primary ch
74c0: 69 6c 64 0a 09 23 20 77 65 20 73 65 74 20 74 68  ild..# we set th
74d0: 61 74 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 64  at revision to d
74e0: 65 70 65 6e 64 20 6f 6e 20 74 68 65 20 6c 61 73  epend on the las
74f0: 74 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61  t non-trunk defa
7500: 75 6c 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65  ult..# branch re
7510: 76 69 73 69 6f 6e 20 61 6e 64 20 70 6f 73 73 69  vision and possi
7520: 62 6c 79 20 61 64 6a 75 73 74 20 69 74 73 20 74  bly adjust its t
7530: 79 70 65 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e  ype accordingly.
7540: 0a 0a 09 73 65 74 20 66 69 72 73 74 20 5b 6c 69  ...set first [li
7550: 6e 64 65 78 20 24 72 65 76 6c 69 73 74 20 30 5d  ndex $revlist 0]
7560: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 36 20 66  ...log write 6 f
7570: 69 6c 65 20 22 3c 5b 24 66 69 72 73 74 20 72 65  ile "<[$first re
7580: 76 6e 72 5d 3e 20 5b 65 78 70 72 20 7b 24 6d 79  vnr]> [expr {$my
7590: 69 6d 70 6f 72 74 65 64 20 3f 20 22 69 6d 70 6f  imported ? "impo
75a0: 72 74 65 64 22 20 3a 20 22 6e 6f 74 20 69 6d 70  rted" : "not imp
75b0: 6f 72 74 65 64 22 7d 5d 2c 20 5b 24 66 69 72 73  orted"}], [$firs
75c0: 74 20 6f 70 65 72 61 74 69 6f 6e 5d 2c 20 5b 65  t operation], [e
75d0: 78 70 72 20 7b 5b 24 66 69 72 73 74 20 68 61 73  xpr {[$first has
75e0: 74 65 78 74 5d 20 3f 20 22 68 61 73 20 74 65 78  text] ? "has tex
75f0: 74 22 20 3a 20 22 6e 6f 20 74 65 78 74 22 7d 5d  t" : "no text"}]
7600: 22 0a 0a 09 69 66 20 7b 24 6d 79 69 6d 70 6f 72  "...if {$myimpor
7610: 74 65 64 20 26 26 0a 09 20 20 20 20 5b 24 66 69  ted &&..    [$fi
7620: 72 73 74 20 72 65 76 6e 72 5d 20 65 71 20 22 31  rst revnr] eq "1
7630: 2e 31 2e 31 2e 31 22 20 26 26 0a 09 20 20 20 20  .1.1.1" &&..    
7640: 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f  [$first operatio
7650: 6e 5d 20 65 71 20 22 63 68 61 6e 67 65 22 20 26  n] eq "change" &
7660: 26 0a 09 20 20 20 20 21 5b 24 66 69 72 73 74 20  &..    ![$first 
7670: 68 61 73 74 65 78 74 5d 7d 20 7b 0a 0a 09 20 20  hastext]} {...  
7680: 20 20 73 65 74 20 72 65 76 31 31 20 5b 24 66 69    set rev11 [$fi
7690: 72 73 74 20 70 61 72 65 6e 74 5d 20 3b 20 23 20  rst parent] ; # 
76a0: 41 73 73 65 72 74 3a 20 53 68 6f 75 6c 64 20 62  Assert: Should b
76b0: 65 20 6d 79 72 6f 6f 74 2e 0a 09 20 20 20 20 6c  e myroot...    l
76c0: 6f 67 20 77 72 69 74 65 20 33 20 66 69 6c 65 20  og write 3 file 
76d0: 22 52 65 6d 6f 76 69 6e 67 20 69 72 72 65 6c 65  "Removing irrele
76e0: 76 61 6e 74 20 72 65 76 69 73 69 6f 6e 20 5b 24  vant revision [$
76f0: 72 65 76 31 31 20 72 65 76 6e 72 5d 22 0a 0a 09  rev11 revnr]"...
7700: 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 74 68      # Cut out th
7710: 65 20 6f 6c 64 20 6d 79 72 6f 6f 74 20 72 65 76  e old myroot rev
7720: 69 73 69 6f 6e 2e 0a 0a 09 20 20 20 20 6c 64 65  ision....    lde
7730: 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65  lete myroots $re
7740: 76 31 31 20 3b 20 23 20 4e 6f 74 20 61 20 72 6f  v11 ; # Not a ro
7750: 6f 74 20 61 6e 79 20 6c 6f 6e 67 65 72 2e 0a 0a  ot any longer...
7760: 09 20 20 20 20 24 66 69 72 73 74 20 63 75 74 66  .    $first cutf
7770: 72 6f 6d 70 61 72 65 6e 74 20 3b 20 23 20 53 65  romparent ; # Se
7780: 76 65 72 20 72 65 76 69 73 69 6f 6e 20 66 72 6f  ver revision fro
7790: 6d 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f  m parent revisio
77a0: 6e 2e 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f  n...    if {$sto
77b0: 70 20 6e 65 20 22 22 7d 20 7b 0a 09 09 24 73 74  p ne ""} {...$st
77c0: 6f 70 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74  op cutfromparent
77d0: 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f  ...lappend myroo
77e0: 74 73 20 24 73 74 6f 70 20 3b 20 23 20 4e 65 77  ts $stop ; # New
77f0: 20 72 6f 6f 74 2c 20 61 66 74 65 72 20 76 65 6e   root, after ven
7800: 64 6f 72 20 62 72 61 6e 63 68 0a 09 20 20 20 20  dor branch..    
7810: 7d 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75  }...    # Cut ou
7820: 74 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61  t the vendor bra
7830: 6e 63 68 20 73 79 6d 62 6f 6c 0a 0a 09 20 20 20  nch symbol...   
7840: 20 73 65 74 20 76 65 6e 64 6f 72 20 5b 24 66 69   set vendor [$fi
7850: 72 73 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68  rst parentbranch
7860: 5d 0a 09 20 20 20 20 69 6e 74 65 67 72 69 74 79  ]..    integrity
7870: 20 61 73 73 65 72 74 20 7b 24 76 65 6e 64 6f 72   assert {$vendor
7880: 20 6e 65 20 22 22 7d 20 7b 46 69 72 73 74 20 4e   ne ""} {First N
7890: 54 44 42 20 72 65 76 69 73 69 6f 6e 20 68 61 73  TDB revision has
78a0: 20 6e 6f 20 62 72 61 6e 63 68 7d 0a 09 20 20 20   no branch}..   
78b0: 20 69 66 20 7b 5b 24 76 65 6e 64 6f 72 20 70 61   if {[$vendor pa
78c0: 72 65 6e 74 5d 20 65 71 20 24 72 65 76 31 31 7d  rent] eq $rev11}
78d0: 20 7b 0a 09 09 24 72 65 76 31 31 20 72 65 6d 6f   {...$rev11 remo
78e0: 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 20  vebranch        
78f0: 24 76 65 6e 64 6f 72 0a 09 09 24 72 65 76 31 31  $vendor...$rev11
7900: 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72   removechildonbr
7910: 61 6e 63 68 20 24 66 69 72 73 74 0a 09 09 24 76  anch $first...$v
7920: 65 6e 64 6f 72 20 63 75 74 63 68 69 6c 64 0a 09  endor cutchild..
7930: 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70  .$first cutfromp
7940: 61 72 65 6e 74 62 72 61 6e 63 68 0a 09 09 6c 61  arentbranch...la
7950: 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66  ppend myroots $f
7960: 69 72 73 74 0a 09 20 20 20 20 7d 0a 0a 09 20 20  irst..    }...  
7970: 20 20 23 20 43 68 61 6e 67 65 20 74 68 65 20 74    # Change the t
7980: 79 70 65 20 6f 66 20 66 69 72 73 74 20 28 74 79  ype of first (ty
7990: 70 69 63 61 6c 6c 79 20 66 72 6f 6d 20 43 68 61  pically from Cha
79a0: 6e 67 65 20 74 6f 20 41 64 64 29 3a 0a 09 20 20  nge to Add):..  
79b0: 20 20 24 66 69 72 73 74 20 72 65 74 79 70 65 20    $first retype 
79c0: 61 64 64 0a 0a 09 20 20 20 20 23 20 4d 6f 76 65  add...    # Move
79d0: 20 61 6e 79 20 74 61 67 73 20 61 6e 64 20 62 72   any tags and br
79e0: 61 6e 63 68 65 73 20 66 72 6f 6d 20 74 68 65 20  anches from the 
79f0: 6f 6c 64 20 74 6f 20 74 68 65 20 6e 65 77 20 72  old to the new r
7a00: 6f 6f 74 2e 0a 09 20 20 20 20 24 72 65 76 31 31  oot...    $rev11
7a10: 20 6d 6f 76 65 73 79 6d 62 6f 6c 73 74 6f 20 24   movesymbolsto $
7a20: 66 69 72 73 74 0a 09 7d 0a 0a 09 23 20 4d 61 72  first..}...# Mar
7a30: 6b 20 61 6c 6c 20 74 68 65 20 73 70 65 63 69 61  k all the specia
7a40: 6c 20 72 65 76 69 73 69 6f 6e 73 20 61 73 20 73  l revisions as s
7a50: 75 63 68 0a 09 66 6f 72 65 61 63 68 20 72 65 76  uch..foreach rev
7a60: 20 24 72 65 76 6c 69 73 74 20 7b 0a 09 20 20 20   $revlist {..   
7a70: 20 6c 6f 67 20 77 72 69 74 65 20 33 20 66 69 6c   log write 3 fil
7a80: 65 20 22 52 65 76 69 73 69 6f 6e 20 6f 6e 20 64  e "Revision on d
7a90: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 3a 20 5b  efault branch: [
7aa0: 24 72 65 76 20 72 65 76 6e 72 5d 22 0a 09 20 20  $rev revnr]"..  
7ab0: 20 20 24 72 65 76 20 73 65 74 6f 6e 64 65 66 61    $rev setondefa
7ac0: 75 6c 74 62 72 61 6e 63 68 20 31 0a 09 7d 0a 0a  ultbranch 1..}..
7ad0: 09 69 66 20 7b 24 73 74 6f 70 20 6e 65 20 22 22  .if {$stop ne ""
7ae0: 7d 20 7b 0a 09 20 20 20 20 23 20 52 65 76 69 73  } {..    # Revis
7af0: 69 6f 6e 20 31 2e 32 20 6c 6f 67 69 63 61 6c 6c  ion 1.2 logicall
7b00: 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20 69 6d  y follows the im
7b10: 70 6f 72 74 65 64 20 72 65 76 69 73 69 6f 6e 73  ported revisions
7b20: 2c 0a 09 20 20 20 20 23 20 6e 6f 74 20 31 2e 31  ,..    # not 1.1
7b30: 2e 20 20 41 63 63 6f 72 64 69 6e 67 6c 79 2c 20  .  Accordingly, 
7b40: 63 6f 6e 6e 65 63 74 20 69 74 20 74 6f 20 74 68  connect it to th
7b50: 65 20 6c 61 73 74 20 4e 54 44 42 52 20 61 6e 64  e last NTDBR and
7b60: 0a 09 20 20 20 20 23 20 70 6f 73 73 69 62 6c 79  ..    # possibly
7b70: 20 63 68 61 6e 67 65 20 69 74 73 20 74 79 70 65   change its type
7b80: 2e 0a 0a 09 20 20 20 20 73 65 74 20 6c 61 73 74  ....    set last
7b90: 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c 69 73   [lindex $revlis
7ba0: 74 20 65 6e 64 5d 0a 09 20 20 20 20 24 73 74 6f  t end]..    $sto
7bb0: 70 20 73 65 74 64 65 66 61 75 6c 74 62 72 61 6e  p setdefaultbran
7bc0: 63 68 70 61 72 65 6e 74 20 24 6c 61 73 74 20 3b  chparent $last ;
7bd0: 20 23 20 52 65 74 79 70 65 73 20 74 68 65 20 72   # Retypes the r
7be0: 65 76 69 73 69 6f 6e 20 74 6f 6f 2e 0a 09 20 20  evision too...  
7bf0: 20 20 24 6c 61 73 74 20 73 65 74 64 65 66 61 75    $last setdefau
7c00: 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 20 20 24  ltbranchchild  $
7c10: 73 74 6f 70 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  stop..}..return.
7c20: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
7c30: 64 20 43 68 65 63 6b 4c 4f 44 73 20 7b 7d 20 7b  d CheckLODs {} {
7c40: 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62 72 61  ..foreach {_ bra
7c50: 6e 63 68 7d 20 20 5b 61 72 72 61 79 20 67 65 74  nch}  [array get
7c60: 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 20 24   mybranches] { $
7c70: 62 72 61 6e 63 68 20 63 68 65 63 6b 6c 6f 64 20  branch checklod 
7c80: 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61  }..foreach {_ ta
7c90: 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65  glist} [array ge
7ca0: 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20  t mytags] {..   
7cb0: 20 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61   foreach tag $ta
7cc0: 67 6c 69 73 74 20 7b 20 24 74 61 67 20 63 68 65  glist { $tag che
7cd0: 63 6b 6c 6f 64 20 7d 0a 09 7d 0a 09 72 65 74 75  cklod }..}..retu
7ce0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
7cf0: 74 68 6f 64 20 52 65 6d 6f 76 65 49 72 72 65 6c  thod RemoveIrrel
7d00: 65 76 61 6e 74 44 65 6c 65 74 69 6f 6e 73 20 7b  evantDeletions {
7d10: 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 32  } {..# From cvs2
7d20: 73 76 6e 3a 20 49 66 20 61 20 66 69 6c 65 20 69  svn: If a file i
7d30: 73 20 61 64 64 65 64 20 6f 6e 20 61 20 62 72 61  s added on a bra
7d40: 6e 63 68 2c 20 74 68 65 6e 20 61 20 74 72 75 6e  nch, then a trun
7d50: 6b 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 69 73  k..# revision is
7d60: 20 61 64 64 65 64 20 61 74 20 74 68 65 20 73 61   added at the sa
7d70: 6d 65 20 74 69 6d 65 20 69 6e 20 74 68 65 20 27  me time in the '
7d80: 44 65 61 64 27 20 73 74 61 74 65 2e 0a 09 23 20  Dead' state...# 
7d90: 54 68 69 73 20 72 65 76 69 73 69 6f 6e 20 64 6f  This revision do
7da0: 65 73 6e 27 74 20 64 6f 20 61 6e 79 74 68 69 6e  esn't do anythin
7db0: 67 20 75 73 65 66 75 6c 2c 20 73 6f 20 64 65 6c  g useful, so del
7dc0: 65 74 65 20 69 74 2e 0a 0a 09 66 6f 72 65 61 63  ete it....foreac
7dd0: 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20  h root $myroots 
7de0: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f  {..    if {[$roo
7df0: 74 20 69 73 6e 65 65 64 65 64 5d 7d 20 63 6f 6e  t isneeded]} con
7e00: 74 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77  tinue..    log w
7e10: 72 69 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d  rite 2 file "Rem
7e20: 6f 76 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72  oving unnecessar
7e30: 79 20 64 65 61 64 20 72 65 76 69 73 69 6f 6e 20  y dead revision 
7e40: 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22 0a 0a  [$root revnr]"..
7e50: 09 20 20 20 20 23 20 52 65 6d 6f 76 65 20 61 73  .    # Remove as
7e60: 20 72 6f 6f 74 2c 20 6d 61 6b 65 20 69 74 73 20   root, make its 
7e70: 63 68 69 6c 64 20 6e 65 77 20 72 6f 6f 74 20 61  child new root a
7e80: 66 74 65 72 0a 09 20 20 20 20 23 20 64 69 73 63  fter..    # disc
7e90: 6f 6e 6e 65 63 74 69 6e 67 20 69 74 20 66 72 6f  onnecting it fro
7ea0: 6d 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6a  m the revision j
7eb0: 75 73 74 20 67 6f 69 6e 67 20 61 77 61 79 2e 0a  ust going away..
7ec0: 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79  ..    ldelete my
7ed0: 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20  roots $root..   
7ee0: 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 63   if {[$root hasc
7ef0: 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 63  hild]} {...set c
7f00: 68 69 6c 64 20 5b 24 72 6f 6f 74 20 63 68 69 6c  hild [$root chil
7f10: 64 5d 0a 09 09 24 63 68 69 6c 64 20 63 75 74 66  d]...$child cutf
7f20: 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70  romparent...lapp
7f30: 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69  end myroots $chi
7f40: 6c 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  ld..    }...    
7f50: 23 20 43 75 74 20 6f 75 74 20 74 68 65 20 62 72  # Cut out the br
7f60: 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 62  anches spawned b
7f70: 79 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74  y the revision t
7f80: 6f 20 62 65 0a 09 20 20 20 20 23 20 64 65 6c 65  o be..    # dele
7f90: 74 65 64 2e 20 49 66 20 74 68 65 20 62 72 61 6e  ted. If the bran
7fa0: 63 68 20 68 61 73 20 72 65 76 69 73 69 6f 6e 73  ch has revisions
7fb0: 20 74 68 65 79 20 73 68 6f 75 6c 64 20 61 6c 72   they should alr
7fc0: 65 61 64 79 0a 09 20 20 20 20 23 20 75 73 65 20  eady..    # use 
7fd0: 6f 70 65 72 61 74 69 6f 6e 20 27 61 64 64 27 2c  operation 'add',
7fe0: 20 6e 6f 20 6e 65 65 64 20 74 6f 20 63 68 61 6e   no need to chan
7ff0: 67 65 20 74 68 61 74 2e 20 54 68 65 20 66 69 72  ge that. The fir
8000: 73 74 0a 09 20 20 20 20 23 20 72 65 76 69 73 69  st..    # revisi
8010: 6f 6e 20 6f 6e 20 65 61 63 68 20 62 72 61 6e 63  on on each branc
8020: 68 20 62 65 63 6f 6d 65 73 20 61 20 6e 65 77 20  h becomes a new 
8030: 61 6e 64 20 64 69 73 63 6f 6e 6e 65 63 74 65 64  and disconnected
8040: 0a 09 20 20 20 20 23 20 72 6f 6f 74 2e 0a 0a 09  ..    # root....
8050: 20 20 20 20 66 6f 72 65 61 63 68 20 62 72 61 6e      foreach bran
8060: 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68  ch [$root branch
8070: 65 73 5d 20 7b 0a 09 09 24 62 72 61 6e 63 68 20  es] {...$branch 
8080: 63 75 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a  cutbranchparent.
8090: 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63 68 20  ..if {![$branch 
80a0: 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69  haschild]} conti
80b0: 6e 75 65 0a 09 09 73 65 74 20 66 69 72 73 74 20  nue...set first 
80c0: 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 5d 0a  [$branch child].
80d0: 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d  ..$first cutfrom
80e0: 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64  parent...lappend
80f0: 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a   myroots $first.
8100: 09 20 20 20 20 7d 0a 09 20 20 20 20 24 72 6f 6f  .    }..    $roo
8110: 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63  t removeallbranc
8120: 68 65 73 0a 0a 09 20 20 20 20 23 20 54 61 67 67  hes...    # Tagg
8130: 69 6e 67 20 61 20 64 65 61 64 20 72 65 76 69 73  ing a dead revis
8140: 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61  ion doesn't do a
8150: 6e 79 74 68 69 6e 67 2c 20 73 6f 20 72 65 6d 6f  nything, so remo
8160: 76 65 0a 09 20 20 20 20 23 20 61 6e 79 20 74 61  ve..    # any ta
8170: 67 73 20 74 68 61 74 20 77 65 72 65 20 73 65 74  gs that were set
8180: 20 6f 6e 20 69 74 2e 0a 0a 09 20 20 20 20 24 72   on it....    $r
8190: 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67  oot removealltag
81a0: 73 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 63  s...    # This c
81b0: 61 6e 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 6f  an only happen o
81c0: 6e 63 65 20 70 65 72 20 66 69 6c 65 2c 20 61 6e  nce per file, an
81d0: 64 20 77 65 20 6d 69 67 68 74 20 68 61 76 65 0a  d we might have.
81e0: 09 20 20 20 20 23 20 6a 75 73 74 20 63 68 61 6e  .    # just chan
81f0: 67 65 64 20 6d 79 72 6f 6f 74 73 2c 20 73 6f 20  ged myroots, so 
8200: 65 6e 64 20 74 68 65 20 6c 6f 6f 70 0a 09 20 20  end the loop..  
8210: 20 20 62 72 65 61 6b 0a 09 7d 0a 09 72 65 74 75    break..}..retu
8220: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
8230: 74 68 6f 64 20 52 65 6d 6f 76 65 49 6e 69 74 69  thod RemoveIniti
8240: 61 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e  alBranchDeletion
8250: 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63  s {} {..# From c
8260: 76 73 32 73 76 6e 3a 20 49 66 20 74 68 65 20 66  vs2svn: If the f
8270: 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e  irst revision on
8280: 20 61 20 62 72 61 6e 63 68 20 69 73 20 61 6e 0a   a branch is an.
8290: 09 23 20 75 6e 6e 65 63 65 73 73 61 72 79 20 64  .# unnecessary d
82a0: 65 6c 65 74 65 2c 20 72 65 6d 6f 76 65 20 69 74  elete, remove it
82b0: 2e 0a 09 23 0a 09 23 20 49 66 20 61 20 66 69 6c  ...#..# If a fil
82c0: 65 20 69 73 20 61 64 64 65 64 20 6f 6e 20 61 20  e is added on a 
82d0: 62 72 61 6e 63 68 20 28 77 68 65 74 68 65 72 20  branch (whether 
82e0: 6f 72 20 6e 6f 74 20 69 74 20 61 6c 72 65 61 64  or not it alread
82f0: 79 0a 09 23 20 65 78 69 73 74 65 64 20 6f 6e 20  y..# existed on 
8300: 74 72 75 6e 6b 29 2c 20 74 68 65 6e 20 6e 65 77  trunk), then new
8310: 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 43 56 53   versions of CVS
8320: 20 61 64 64 20 61 20 66 69 72 73 74 0a 09 23 20   add a first..# 
8330: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20  branch revision 
8340: 69 6e 20 74 68 65 20 27 64 65 61 64 27 20 73 74  in the 'dead' st
8350: 61 74 65 20 28 74 6f 20 69 6e 64 69 63 61 74 65  ate (to indicate
8360: 20 74 68 61 74 20 74 68 65 0a 09 23 20 66 69 6c   that the..# fil
8370: 65 20 64 69 64 20 6e 6f 74 20 65 78 69 73 74 20  e did not exist 
8380: 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 68  on the branch wh
8390: 65 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 61  en the branch wa
83a0: 73 0a 09 23 20 63 72 65 61 74 65 64 29 20 66 6f  s..# created) fo
83b0: 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20 73 65  llowed by the se
83c0: 63 6f 6e 64 20 62 72 61 6e 63 68 20 72 65 76 69  cond branch revi
83d0: 73 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20 61  sion, which is a
83e0: 6e 0a 09 23 20 61 64 64 2e 20 20 57 68 65 6e 20  n..# add.  When 
83f0: 77 65 20 65 6e 63 6f 75 6e 74 65 72 20 74 68 69  we encounter thi
8400: 73 20 73 69 74 75 61 74 69 6f 6e 2c 20 77 65 20  s situation, we 
8410: 73 65 76 65 72 20 74 68 65 20 62 72 61 6e 63 68  sever the branch
8420: 0a 09 23 20 66 72 6f 6d 20 74 72 75 6e 6b 20 61  ..# from trunk a
8430: 6e 64 20 64 65 6c 65 74 65 20 74 68 65 20 66 69  nd delete the fi
8440: 72 73 74 20 62 72 61 6e 63 68 20 72 65 76 69 73  rst branch revis
8450: 69 6f 6e 2e 0a 0a 09 23 20 41 74 20 74 68 69 73  ion....# At this
8460: 20 70 6f 69 6e 74 20 77 65 20 6d 61 79 20 68 61   point we may ha
8470: 76 65 20 61 6c 72 65 61 64 79 20 6d 75 6c 74 69  ve already multi
8480: 70 6c 65 20 72 6f 6f 74 73 20 69 6e 20 6d 79 72  ple roots in myr
8490: 6f 6f 74 73 2c 0a 09 23 20 77 65 20 68 61 76 65  oots,..# we have
84a0: 20 74 6f 20 70 72 6f 63 65 73 73 20 74 68 65 6d   to process them
84b0: 20 61 6c 6c 2e 0a 0a 09 66 6f 72 65 61 63 68 20   all....foreach 
84c0: 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65  root [$self Line
84d0: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20  sOfDevelopment] 
84e0: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f  {..    if {[$roo
84f0: 74 20 69 73 6e 65 65 64 65 64 62 72 61 6e 63 68  t isneededbranch
8500: 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09  del]} continue..
8510: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 32 20      log write 2 
8520: 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 75  file "Removing u
8530: 6e 6e 65 63 65 73 73 61 72 79 20 69 6e 69 74 69  nnecessary initi
8540: 61 6c 20 62 72 61 6e 63 68 20 64 65 6c 65 74 65  al branch delete
8550: 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22 0a   [$root revnr]".
8560: 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e 63 68  ..    set branch
8570: 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72   [$root parentbr
8580: 61 6e 63 68 5d 0a 09 20 20 20 20 73 65 74 20 70  anch]..    set p
8590: 61 72 65 6e 74 20 5b 24 72 6f 6f 74 20 70 61 72  arent [$root par
85a0: 65 6e 74 5d 0a 09 20 20 20 20 73 65 74 20 63 68  ent]..    set ch
85b0: 69 6c 64 20 20 5b 24 72 6f 6f 74 20 63 68 69 6c  ild  [$root chil
85c0: 64 5d 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65  d]...    ldelete
85d0: 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09   myroots $root..
85e0: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 6f      lappend myro
85f0: 6f 74 73 20 24 63 68 69 6c 64 0a 0a 09 20 20 20  ots $child...   
8600: 20 24 62 72 61 6e 63 68 20 63 75 74 62 72 61 6e   $branch cutbran
8610: 63 68 70 61 72 65 6e 74 0a 09 20 20 20 20 24 62  chparent..    $b
8620: 72 61 6e 63 68 20 63 75 74 63 68 69 6c 64 0a 09  ranch cutchild..
8630: 20 20 20 20 24 63 68 69 6c 64 20 20 63 75 74 66      $child  cutf
8640: 72 6f 6d 70 61 72 65 6e 74 0a 0a 09 20 20 20 20  romparent...    
8650: 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c 64  $branch setchild
8660: 20 20 20 20 20 20 20 20 24 63 68 69 6c 64 0a 09          $child..
8670: 20 20 20 20 24 63 68 69 6c 64 20 20 73 65 74 70      $child  setp
8680: 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61  arentbranch $bra
8690: 6e 63 68 0a 0a 09 20 20 20 20 24 70 61 72 65 6e  nch...    $paren
86a0: 74 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20  t removebranch  
86b0: 20 20 20 20 20 20 24 62 72 61 6e 63 68 0a 09 20        $branch.. 
86c0: 20 20 20 24 70 61 72 65 6e 74 20 72 65 6d 6f 76     $parent remov
86d0: 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24  echildonbranch $
86e0: 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  root..}..return.
86f0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
8700: 64 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70  d LinesOfDevelop
8710: 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 44 65 74  ment {} {..# Det
8720: 65 72 6d 69 6e 65 20 61 6c 6c 20 6c 69 6e 65 73  ermine all lines
8730: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20   of development 
8740: 66 6f 72 20 74 68 65 20 66 69 6c 65 2e 20 54 68  for the file. Th
8750: 69 73 20 61 72 65 0a 09 23 20 74 68 65 20 6b 6e  is are..# the kn
8760: 6f 77 6e 20 72 6f 6f 74 73 2c 20 61 6e 64 20 74  own roots, and t
8770: 68 65 20 72 6f 6f 74 20 6f 66 20 61 6c 6c 20 62  he root of all b
8780: 72 61 6e 63 68 65 73 20 66 6f 75 6e 64 20 6f 6e  ranches found on
8790: 20 74 68 65 0a 09 23 20 6c 69 6e 65 20 6f 66 20   the..# line of 
87a0: 70 72 69 6d 61 72 79 20 63 68 69 6c 64 72 65 6e  primary children
87b0: 2e 0a 0a 09 73 65 74 20 6c 6f 64 72 6f 6f 74 73  ....set lodroots
87c0: 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f   {}..foreach roo
87d0: 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a 09 20 20  t $myroots {..  
87e0: 20 20 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63    $self AddBranc
87f0: 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f  hedLinesOfDevelo
8800: 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24  pment lodroots $
8810: 72 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e  root..    lappen
8820: 64 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74  d lodroots $root
8830: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6c 6f 64  ..}..return $lod
8840: 72 6f 6f 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20  roots.    }..   
8850: 20 6d 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63   method AddBranc
8860: 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f  hedLinesOfDevelo
8870: 70 6d 65 6e 74 20 7b 6c 76 20 72 6f 6f 74 7d 20  pment {lv root} 
8880: 7b 0a 09 75 70 76 61 72 20 31 20 24 6c 76 20 6c  {..upvar 1 $lv l
8890: 6f 64 72 6f 6f 74 73 0a 09 77 68 69 6c 65 20 7b  odroots..while {
88a0: 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09  $root ne ""} {..
88b0: 20 20 20 20 66 6f 72 65 61 63 68 20 62 72 61 6e      foreach bran
88c0: 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68  ch [$root branch
88d0: 65 73 5d 20 7b 0a 09 09 69 66 20 7b 21 5b 24 62  es] {...if {![$b
88e0: 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d  ranch haschild]}
88f0: 20 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20   continue...set 
8900: 63 68 69 6c 64 20 5b 24 62 72 61 6e 63 68 20 63  child [$branch c
8910: 68 69 6c 64 5d 0a 09 09 23 20 52 65 63 75 72 73  hild]...# Recurs
8920: 65 20 69 6e 74 6f 20 74 68 65 20 62 72 61 6e 63  e into the branc
8930: 68 20 66 6f 72 20 64 65 65 70 65 72 20 62 72 61  h for deeper bra
8940: 6e 63 68 65 73 2e 0a 09 09 24 73 65 6c 66 20 41  nches....$self A
8950: 64 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f  ddBranchedLinesO
8960: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64  fDevelopment lod
8970: 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 09 6c  roots $child...l
8980: 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20  append lodroots 
8990: 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a 09 20  $child..    }.. 
89a0: 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f     set root [$ro
89b0: 6f 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 09 72 65  ot child]..}..re
89c0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
89d0: 6d 65 74 68 6f 64 20 45 78 63 6c 75 64 65 4e 6f  method ExcludeNo
89e0: 6e 54 72 75 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f  nTrunkInformatio
89f0: 6e 20 7b 7d 20 7b 0a 09 23 20 52 65 6d 6f 76 65  n {} {..# Remove
8a00: 20 61 6c 6c 20 6e 6f 6e 2d 74 72 75 6e 6b 20 62   all non-trunk b
8a10: 72 61 6e 63 68 65 73 2c 20 72 65 76 69 73 69 6f  ranches, revisio
8a20: 6e 73 2c 20 61 6e 64 20 74 61 67 73 2e 20 57 65  ns, and tags. We
8a30: 20 64 6f 0a 09 23 20 6b 65 65 70 20 74 68 65 20   do..# keep the 
8a40: 74 61 67 73 20 77 68 69 63 68 20 61 72 65 20 6f  tags which are o
8a50: 6e 20 74 68 65 20 74 72 75 6e 6b 2e 0a 0a 09 73  n the trunk....s
8a60: 65 74 20 6e 74 64 62 72 6f 6f 74 20 22 22 0a 09  et ntdbroot ""..
8a70: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73  foreach root [$s
8a80: 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c  elf LinesOfDevel
8a90: 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 23  opment] {..    #
8aa0: 20 4e 6f 74 65 3a 20 48 65 72 65 20 74 68 65 20   Note: Here the 
8ab0: 6f 72 64 65 72 20 6f 66 20 74 68 65 20 72 6f 6f  order of the roo
8ac0: 74 73 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2c  ts is important,
8ad0: 0a 09 20 20 20 20 23 20 69 2e 65 2e 20 74 68 61  ..    # i.e. tha
8ae0: 74 20 77 65 20 67 65 74 20 74 68 65 6d 20 69 6e  t we get them in
8af0: 20 64 65 70 74 68 20 66 69 72 73 74 20 6f 72 64   depth first ord
8b00: 65 72 2e 20 54 68 69 73 20 65 6e 73 75 72 65 73  er. This ensures
8b10: 0a 09 20 20 20 20 23 20 74 68 61 74 20 74 68 65  ..    # that the
8b20: 20 72 65 6d 6f 76 61 6c 20 6f 66 20 61 20 62 72   removal of a br
8b30: 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e 6c  anch happens onl
8b40: 79 20 61 66 74 65 72 20 74 68 65 0a 09 20 20 20  y after the..   
8b50: 20 23 20 62 72 61 6e 63 68 65 73 20 73 70 61 77   # branches spaw
8b60: 6e 65 64 20 66 72 6f 6d 20 69 74 20 77 65 72 65  ned from it were
8b70: 20 72 65 6d 6f 76 65 64 2e 20 4f 74 68 65 72 77   removed. Otherw
8b80: 69 73 65 20 74 68 65 0a 09 20 20 20 20 23 20 73  ise the..    # s
8b90: 79 73 74 65 6d 20 6d 69 67 68 74 20 74 72 79 20  ystem might try 
8ba0: 74 6f 20 61 63 63 65 73 73 20 64 65 6c 65 74 65  to access delete
8bb0: 64 20 6f 62 6a 65 63 74 73 2e 0a 0a 09 20 20 20  d objects....   
8bc0: 20 23 20 44 6f 20 6e 6f 74 20 65 78 63 6c 75 64   # Do not exclud
8bd0: 65 20 74 68 65 20 74 72 75 6e 6b 2e 0a 09 20 20  e the trunk...  
8be0: 20 20 69 66 20 7b 5b 5b 24 72 6f 6f 74 20 6c 6f    if {[[$root lo
8bf0: 64 5d 20 69 73 74 72 75 6e 6b 5d 7d 20 63 6f 6e  d] istrunk]} con
8c00: 74 69 6e 75 65 0a 09 20 20 20 20 24 73 65 6c 66  tinue..    $self
8c10: 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20 24   ExcludeBranch $
8c20: 72 6f 6f 74 20 6e 74 64 62 72 6f 6f 74 0a 09 7d  root ntdbroot..}
8c30: 0a 0a 09 69 66 20 7b 24 6e 74 64 62 72 6f 6f 74  ...if {$ntdbroot
8c40: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 24   ne ""} {..    $
8c50: 73 65 6c 66 20 47 72 61 66 74 4e 54 44 42 32 54  self GraftNTDB2T
8c60: 72 75 6e 6b 20 24 6e 74 64 62 72 6f 6f 74 0a 09  runk $ntdbroot..
8c70: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
8c80: 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63 6c  .    method Excl
8c90: 75 64 65 42 72 61 6e 63 68 20 7b 72 6f 6f 74 20  udeBranch {root 
8ca0: 6e 76 7d 20 7b 0a 09 23 20 45 78 63 6c 75 64 65  nv} {..# Exclude
8cb0: 20 74 68 65 20 62 72 61 6e 63 68 2f 6c 6f 64 20   the branch/lod 
8cc0: 73 74 61 72 74 69 6e 67 20 61 74 20 72 6f 6f 74  starting at root
8cd0: 2c 20 61 20 72 65 76 69 73 69 6f 6e 2e 0a 09 23  , a revision...#
8ce0: 0a 09 23 20 49 66 20 74 68 65 20 4c 4f 44 20 73  ..# If the LOD s
8cf0: 74 61 72 74 73 20 77 69 74 68 20 6e 6f 6e 2d 74  tarts with non-t
8d00: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61  runk default bra
8d10: 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09  nch revisions,..
8d20: 23 20 77 65 20 6c 65 61 76 65 20 74 68 65 6d 20  # we leave them 
8d30: 69 6e 20 70 6c 61 63 65 20 61 6e 64 20 64 6f 20  in place and do 
8d40: 6e 6f 74 20 64 65 6c 65 74 65 20 74 68 65 20 62  not delete the b
8d50: 72 61 6e 63 68 2e 20 49 6e 20 74 68 61 74 0a 09  ranch. In that..
8d60: 23 20 63 61 73 65 20 74 68 65 20 63 6f 6d 6d 61  # case the comma
8d70: 6e 64 20 73 65 74 73 20 74 68 65 20 76 61 72 69  nd sets the vari
8d80: 61 62 6c 65 20 69 6e 20 4e 56 20 73 6f 20 74 68  able in NV so th
8d90: 61 74 20 77 65 20 63 61 6e 0a 09 23 20 6c 61 74  at we can..# lat
8da0: 65 72 20 72 65 77 6f 72 6b 20 74 68 65 73 65 20  er rework these 
8db0: 72 65 76 69 73 6f 6e 73 20 74 6f 20 62 65 20 70  revisons to be p
8dc0: 75 72 65 6c 79 20 74 72 75 6e 6b 2e 0a 0a 09 69  urely trunk....i
8dd0: 66 20 7b 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 65  f {[$root isonde
8de0: 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a  faultbranch]} {.
8df0: 09 20 20 20 20 23 20 48 61 6e 64 6c 69 6e 67 20  .    # Handling 
8e00: 61 20 4e 54 44 42 2e 20 54 68 69 73 20 62 72 61  a NTDB. This bra
8e10: 6e 63 68 20 6d 61 79 20 63 6f 6e 73 69 73 74 73  nch may consists
8e20: 20 6e 6f 74 20 6f 6e 6c 79 20 6f 66 0a 09 20 20   not only of..  
8e30: 20 20 23 20 4e 54 44 42 20 72 65 76 69 73 69 6f    # NTDB revisio
8e40: 6e 73 2c 20 62 75 74 20 61 6c 73 6f 20 73 6f 6d  ns, but also som
8e50: 65 20 6e 6f 6e 2d 4e 54 44 42 2e 20 54 68 65 20  e non-NTDB. The 
8e60: 6c 61 74 74 65 72 20 61 72 65 0a 09 20 20 20 20  latter are..    
8e70: 23 20 74 72 75 6c 79 20 6f 6e 20 61 20 62 72 61  # truly on a bra
8e80: 6e 63 68 20 61 6e 64 20 68 61 76 65 20 74 6f 20  nch and have to 
8e90: 62 65 20 65 78 63 6c 75 64 65 64 2e 20 54 68 65  be excluded. The
8ea0: 20 66 6f 6c 6c 6f 77 69 6e 67 0a 09 20 20 20 20   following..    
8eb0: 23 20 6c 6f 6f 70 20 64 65 74 65 72 6d 69 6e 65  # loop determine
8ec0: 73 20 69 66 20 74 68 65 72 65 20 61 72 65 20 73  s if there are s
8ed0: 75 63 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a  uch revisions...
8ee0: 09 20 20 20 20 75 70 76 61 72 20 31 20 24 6e 76  .    upvar 1 $nv
8ef0: 20 6e 74 64 62 72 6f 6f 74 0a 09 20 20 20 20 73   ntdbroot..    s
8f00: 65 74 20 6e 74 64 62 72 6f 6f 74 20 24 72 6f 6f  et ntdbroot $roo
8f10: 74 0a 09 20 20 20 20 24 72 6f 6f 74 20 63 75 74  t..    $root cut
8f20: 66 72 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63 68  fromparentbranch
8f30: 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 20 24  ...    set rev $
8f40: 72 6f 6f 74 0a 09 20 20 20 20 77 68 69 6c 65 20  root..    while 
8f50: 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09  {$rev ne ""} {..
8f60: 09 24 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62  .$rev removeallb
8f70: 72 61 6e 63 68 65 73 0a 09 09 23 20 53 65 65 20  ranches...# See 
8f80: 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 09 69 66 20  note [x].....if 
8f90: 7b 5b 24 72 65 76 20 69 73 6f 6e 64 65 66 61 75  {[$rev isondefau
8fa0: 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 20  ltbranch]} {... 
8fb0: 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76     set rev [$rev
8fc0: 20 63 68 69 6c 64 5d 0a 09 09 7d 20 65 6c 73 65   child]...} else
8fd0: 20 7b 0a 09 09 20 20 20 20 62 72 65 61 6b 0a 09   {...    break..
8fe0: 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  .}..    }...    
8ff0: 23 20 72 65 76 20 6e 6f 77 20 63 6f 6e 74 61 69  # rev now contai
9000: 6e 73 20 74 68 65 20 66 69 72 73 74 20 6e 6f 6e  ns the first non
9010: 2d 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 20 61  -NTDB revision a
9020: 66 74 65 72 20 74 68 65 0a 09 20 20 20 20 23 20  fter the..    # 
9030: 4e 54 44 42 2c 20 6f 72 20 69 73 20 65 6d 70 74  NTDB, or is empt
9040: 79 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  y if there is no
9050: 20 73 75 63 68 2e 20 49 66 20 77 65 20 68 61 76   such. If we hav
9060: 65 20 73 6f 6d 65 0a 09 20 20 20 20 23 20 74 68  e some..    # th
9070: 65 79 20 68 61 76 65 20 74 6f 20 72 65 6d 6f 76  ey have to remov
9080: 65 64 2e 0a 0a 09 20 20 20 20 69 66 20 7b 24 72  ed....    if {$r
9090: 65 76 20 6e 65 20 22 22 7d 20 20 7b 0a 09 09 73  ev ne ""}  {...s
90a0: 65 74 20 6c 61 73 74 6e 74 64 62 20 5b 24 72 65  et lastntdb [$re
90b0: 76 20 70 61 72 65 6e 74 5d 0a 09 09 24 6c 61 73  v parent]...$las
90c0: 74 6e 74 64 62 20 63 75 74 66 72 6f 6d 63 68 69  tntdb cutfromchi
90d0: 6c 64 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 76  ld...while {$rev
90e0: 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20   ne ""} {...    
90f0: 24 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 74 61  $rev removeallta
9100: 67 73 0a 09 09 20 20 20 20 24 72 65 76 20 72 65  gs...    $rev re
9110: 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a  moveallbranches.
9120: 09 09 20 20 20 20 23 20 4e 6f 74 65 20 5b 78 5d  ..    # Note [x]
9130: 3a 20 57 65 20 6d 61 79 20 73 74 69 6c 6c 20 68  : We may still h
9140: 61 76 65 20 68 61 64 20 62 72 61 6e 63 68 65 73  ave had branches
9150: 20 6f 6e 20 74 68 65 0a 09 09 20 20 20 20 23 20   on the...    # 
9160: 72 65 76 69 73 69 6f 6e 2e 20 42 72 61 6e 63 68  revision. Branch
9170: 65 73 20 77 69 74 68 6f 75 74 20 72 65 76 69 73  es without revis
9180: 69 6f 6e 73 20 63 6f 6d 6d 69 74 74 65 64 0a 09  ions committed..
9190: 09 20 20 20 20 23 20 6f 6e 20 74 68 65 6d 20 64  .    # on them d
91a0: 6f 20 6e 6f 74 20 73 68 6f 77 20 75 70 20 69 6e  o not show up in
91b0: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 72 6f 6f   the list of roo
91c0: 74 73 20 61 6b 61 0a 09 09 20 20 20 20 23 20 6c  ts aka...    # l
91d0: 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d  ines of developm
91e0: 65 6e 74 2e 0a 09 09 20 20 20 20 73 65 74 20 72  ent....    set r
91f0: 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a  ev [$rev child].
9200: 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  ..}..    }..    
9210: 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 23 20 4e 6f  return..}...# No
9220: 20 4e 54 44 42 20 73 74 75 66 66 20 74 6f 20 64   NTDB stuff to d
9230: 65 61 6c 20 77 69 74 68 2e 20 46 69 72 73 74 20  eal with. First 
9240: 64 65 6c 65 74 65 20 74 68 65 20 62 72 61 6e 63  delete the branc
9250: 68 20 6f 62 6a 65 63 74 0a 09 23 20 69 74 73 65  h object..# itse
9260: 6c 66 2c 20 61 66 74 65 72 20 63 75 74 74 69 6e  lf, after cuttin
9270: 67 20 61 6c 6c 20 74 68 65 20 76 61 72 69 6f 75  g all the variou
9280: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0a 0a  s connections...
9290: 09 73 65 74 20 62 72 61 6e 63 68 20 5b 24 72 6f  .set branch [$ro
92a0: 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d  ot parentbranch]
92b0: 0a 09 69 66 20 7b 24 62 72 61 6e 63 68 20 6e 65  ..if {$branch ne
92c0: 20 22 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20   ""} {..    set 
92d0: 62 72 61 6e 63 68 70 61 72 65 6e 74 20 5b 24 62  branchparent [$b
92e0: 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 0a 09 20  ranch parent].. 
92f0: 20 20 20 24 62 72 61 6e 63 68 70 61 72 65 6e 74     $branchparent
9300: 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20   removebranch   
9310: 20 20 20 20 20 24 62 72 61 6e 63 68 0a 09 20 20       $branch..  
9320: 20 20 24 62 72 61 6e 63 68 70 61 72 65 6e 74 20    $branchparent 
9330: 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61  removechildonbra
9340: 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 0a 09 23  nch $root..}...#
9350: 20 54 68 65 20 72 6f 6f 74 20 69 73 20 6e 6f 20   The root is no 
9360: 73 75 63 68 20 61 6e 79 20 6c 6f 6e 67 65 72 20  such any longer 
9370: 65 69 74 68 65 72 2e 0a 09 6c 64 65 6c 65 74 65  either...ldelete
9380: 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 0a   myroots $root..
9390: 09 23 20 4e 6f 77 20 67 6f 20 74 68 72 6f 75 67  .# Now go throug
93a0: 68 20 74 68 65 20 6c 69 6e 65 20 61 6e 64 20 72  h the line and r
93b0: 65 6d 6f 76 65 20 61 6c 6c 20 69 74 73 20 72 65  emove all its re
93c0: 76 69 73 69 6f 6e 73 2e 0a 0a 09 77 68 69 6c 65  visions....while
93d0: 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b   {$root ne ""} {
93e0: 0a 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f  ..    $root remo
93f0: 76 65 61 6c 6c 74 61 67 73 0a 09 20 20 20 20 24  vealltags..    $
9400: 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72  root removeallbr
9410: 61 6e 63 68 65 73 0a 09 20 20 20 20 23 20 4e 6f  anches..    # No
9420: 74 65 3a 20 53 65 65 20 74 68 65 20 6e 6f 74 65  te: See the note
9430: 20 5b 78 5d 2e 0a 0a 09 20 20 20 20 23 20 46 72   [x]....    # Fr
9440: 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74  om cvs2svn: If t
9450: 68 69 73 20 69 73 20 74 68 65 20 6c 61 73 74 20  his is the last 
9460: 64 65 66 61 75 6c 74 20 72 65 76 69 73 69 6f 6e  default revision
9470: 20 6f 6e 20 61 0a 09 20 20 20 20 23 20 6e 6f 6e   on a..    # non
9480: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62  -trunk default b
9490: 72 61 6e 63 68 20 66 6f 6c 6c 6f 77 65 64 20 62  ranch followed b
94a0: 79 20 61 20 31 2e 32 20 72 65 76 69 73 69 6f 6e  y a 1.2 revision
94b0: 2c 0a 09 20 20 20 20 23 20 74 68 65 6e 20 74 68  ,..    # then th
94c0: 65 20 31 2e 32 20 72 65 76 69 73 69 6f 6e 20 64  e 1.2 revision d
94d0: 65 70 65 6e 64 73 20 6f 6e 20 74 68 69 73 20 6f  epends on this o
94e0: 6e 65 2e 20 20 46 49 58 4d 45 3a 20 49 74 20 69  ne.  FIXME: It i
94f0: 73 0a 09 20 20 20 20 23 20 71 75 65 73 74 69 6f  s..    # questio
9500: 6e 61 62 6c 65 20 77 68 65 74 68 65 72 20 74 68  nable whether th
9510: 69 73 20 68 61 6e 64 6c 69 6e 67 20 69 73 20 63  is handling is c
9520: 6f 72 72 65 63 74 2c 20 73 69 6e 63 65 20 74 68  orrect, since th
9530: 65 0a 09 20 20 20 20 23 20 6e 6f 6e 2d 74 72 75  e..    # non-tru
9540: 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  nk default branc
9550: 68 20 72 65 76 69 73 69 6f 6e 73 20 61 66 66 65  h revisions affe
9560: 63 74 20 74 72 75 6e 6b 20 61 6e 64 0a 09 20 20  ct trunk and..  
9570: 20 20 23 20 73 68 6f 75 6c 64 20 74 68 65 72 65    # should there
9580: 66 6f 72 65 20 6e 6f 74 20 6a 75 73 74 20 62 65  fore not just be
9590: 20 64 69 73 63 61 72 64 65 64 20 65 76 65 6e 20   discarded even 
95a0: 69 66 0a 09 20 20 20 20 23 20 2d 2d 74 72 75 6e  if..    # --trun
95b0: 6b 2d 6f 6e 6c 79 2e 0a 0a 09 20 20 20 20 69 66  k-only....    if
95c0: 20 7b 5b 24 72 6f 6f 74 20 68 61 73 64 65 66 61   {[$root hasdefa
95d0: 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 7d  ultbranchchild]}
95e0: 20 7b 0a 09 09 73 65 74 20 6e 74 64 62 63 68 69   {...set ntdbchi
95f0: 6c 64 20 5b 24 72 6f 6f 74 20 64 65 66 61 75 6c  ld [$root defaul
9600: 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 0a 09 09  tbranchchild]...
9610: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74  integrity assert
9620: 20 7b 0a 09 09 20 20 20 20 5b 24 6e 74 64 62 63   {...    [$ntdbc
9630: 68 69 6c 64 20 64 65 66 61 75 6c 74 62 72 61 6e  hild defaultbran
9640: 63 68 70 61 72 65 6e 74 5d 20 65 71 20 24 6e 74  chparent] eq $nt
9650: 64 62 63 68 69 6c 64 0a 09 09 7d 20 7b 6e 74 64  dbchild...} {ntd
9660: 62 20 2d 20 74 72 75 6e 6b 20 6c 69 6e 6b 61 67  b - trunk linkag
9670: 65 20 62 72 6f 6b 65 6e 7d 0a 09 09 24 6e 74 64  e broken}...$ntd
9680: 62 63 68 69 6c 64 20 63 75 74 64 65 66 61 75 6c  bchild cutdefaul
9690: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 09  tbranchparent...
96a0: 69 66 20 7b 5b 24 6e 74 64 62 63 68 69 6c 64 20  if {[$ntdbchild 
96b0: 68 61 73 70 61 72 65 6e 74 5d 7d 20 7b 0a 09 09  hasparent]} {...
96c0: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 72 6f      lappend myro
96d0: 6f 74 73 20 5b 24 6e 74 64 62 63 68 69 6c 64 20  ots [$ntdbchild 
96e0: 70 61 72 65 6e 74 5d 0a 09 09 7d 0a 09 20 20 20  parent]...}..   
96f0: 20 7d 0a 0a 09 20 20 20 20 73 65 74 20 72 6f 6f   }...    set roo
9700: 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  t [$root child].
9710: 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  .}...return.    
9720: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 47 72  }..    method Gr
9730: 61 66 74 4e 54 44 42 32 54 72 75 6e 6b 20 7b 72  aftNTDB2Trunk {r
9740: 6f 6f 74 7d 20 7b 0a 09 23 20 57 65 20 63 61 6e  oot} {..# We can
9750: 20 6e 6f 77 20 67 72 61 66 74 20 74 68 65 20 6e   now graft the n
9760: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
9770: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e   branch revision
9780: 73 20 74 6f 0a 09 23 20 74 72 75 6e 6b 2e 20 54  s to..# trunk. T
9790: 68 65 79 20 73 68 6f 75 6c 64 20 61 6c 72 65 61  hey should alrea
97a0: 64 79 20 62 65 20 61 6c 6f 6e 65 20 6f 6e 20 61  dy be alone on a
97b0: 20 43 56 53 42 72 61 6e 63 68 2d 6c 65 73 73 0a   CVSBranch-less.
97c0: 09 23 20 62 72 61 6e 63 68 2e 0a 0a 09 69 6e 74  .# branch....int
97d0: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 21  egrity assert {!
97e0: 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74  [$root hasparent
97f0: 62 72 61 6e 63 68 5d 7d 20 7b 4e 54 44 42 20 72  branch]} {NTDB r
9800: 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73 20 69 74  oot still has it
9810: 73 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 7d  s branch symbol}
9820: 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65  ..integrity asse
9830: 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73 62  rt {![$root hasb
9840: 72 61 6e 63 68 65 73 5d 7d 20 20 20 20 20 7b 4e  ranches]}     {N
9850: 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68  TDB root still h
9860: 61 73 20 73 70 61 77 6e 65 64 20 62 72 61 6e 63  as spawned branc
9870: 68 65 73 7d 0a 0a 09 73 65 74 20 6c 61 73 74 20  hes}...set last 
9880: 24 72 6f 6f 74 0a 09 77 68 69 6c 65 20 7b 5b 24  $root..while {[$
9890: 6c 61 73 74 20 68 61 73 63 68 69 6c 64 5d 7d 20  last haschild]} 
98a0: 7b 73 65 74 20 6c 61 73 74 20 5b 24 6c 61 73 74  {set last [$last
98b0: 20 63 68 69 6c 64 5d 7d 0a 0a 09 69 66 20 7b 5b   child]}...if {[
98c0: 24 6c 61 73 74 20 68 61 73 64 65 66 61 75 6c 74  $last hasdefault
98d0: 62 72 61 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a  branchchild]} {.
98e0: 0a 09 20 20 20 20 73 65 74 20 72 65 76 31 32 20  ..    set rev12 
98f0: 5b 24 6c 61 73 74 20 64 65 66 61 75 6c 74 62 72  [$last defaultbr
9900: 61 6e 63 68 63 68 69 6c 64 5d 0a 09 20 20 20 20  anchchild]..    
9910: 24 72 65 76 31 32 20 63 75 74 64 65 66 61 75 6c  $rev12 cutdefaul
9920: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 20  tbranchparent.. 
9930: 20 20 20 24 6c 61 73 74 20 20 63 75 74 64 65 66     $last  cutdef
9940: 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 0a  aultbranchchild.
9950: 0a 09 20 20 20 20 24 72 65 76 31 32 20 63 68 61  ..    $rev12 cha
9960: 6e 67 65 70 61 72 65 6e 74 20 24 6c 61 73 74 0a  ngeparent $last.
9970: 09 20 20 20 20 24 6c 61 73 74 20 20 63 68 61 6e  .    $last  chan
9980: 67 65 63 68 69 6c 64 20 24 72 65 76 31 32 0a 0a  gechild $rev12..
9990: 09 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72  .    ldelete myr
99a0: 6f 6f 74 73 20 24 72 65 76 31 32 0a 0a 09 20 20  oots $rev12...  
99b0: 20 20 23 20 4e 6f 74 65 20 61 6e 64 20 72 65 6d    # Note and rem
99c0: 65 6d 62 65 72 20 74 68 61 74 20 74 68 65 20 74  ember that the t
99d0: 79 70 65 20 6f 66 20 72 65 76 31 32 20 77 61 73  ype of rev12 was
99e0: 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20 23 20   already..    # 
99f0: 61 64 6a 75 73 74 65 64 20 62 79 20 41 64 6a 75  adjusted by Adju
9a00: 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c  stNonTrunkDefaul
9a10: 74 42 72 61 6e 63 68 2c 20 73 6f 20 77 65 20 64  tBranch, so we d
9a20: 6f 6e 27 74 0a 09 20 20 20 20 23 20 68 61 76 65  on't..    # have
9a30: 20 74 6f 20 63 68 61 6e 67 65 20 69 74 73 20 74   to change its t
9a40: 79 70 65 20 68 65 72 65 2e 0a 09 7d 0a 0a 09 77  ype here...}...w
9a50: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22  hile {$root ne "
9a60: 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f 74 20  "} {..    $root 
9a70: 73 65 74 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e  setondefaultbran
9a80: 63 68 20 30 0a 09 20 20 20 20 24 72 6f 6f 74 20  ch 0..    $root 
9a90: 73 65 74 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a  setlod $mytrunk.
9aa0: 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 61 67  .    foreach tag
9ab0: 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a   [$root tags] {.
9ac0: 09 09 24 74 61 67 20 73 65 74 6c 6f 64 20 24 6d  ..$tag setlod $m
9ad0: 79 74 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 09 20  ytrunk..    }.. 
9ae0: 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f     set root [$ro
9af0: 6f 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 0a 20 20  ot child]..}..  
9b00: 20 20 20 20 20 20 72 65 74 75 72 6e 0a 20 20 20        return.   
9b10: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41   }..    method A
9b20: 63 74 69 76 65 20 7b 7d 20 7b 0a 09 73 65 74 20  ctive {} {..set 
9b30: 72 65 76 69 73 69 6f 6e 73 20 7b 7d 0a 09 73 65  revisions {}..se
9b40: 74 20 73 79 6d 62 6f 6c 73 20 20 20 7b 7d 0a 0a  t symbols   {}..
9b50: 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24  .foreach root [$
9b60: 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65  self LinesOfDeve
9b70: 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20  lopment] {..    
9b80: 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 70 61  if {[$root haspa
9b90: 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 20 6c  rentbranch]} { l
9ba0: 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 5b  append symbols [
9bb0: 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e  $root parentbran
9bc0: 63 68 5d 20 7d 0a 09 20 20 20 20 77 68 69 6c 65  ch] }..    while
9bd0: 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b   {$root ne ""} {
9be0: 0a 09 09 6c 61 70 70 65 6e 64 20 72 65 76 69 73  ...lappend revis
9bf0: 69 6f 6e 73 20 24 72 6f 6f 74 0a 09 09 66 6f 72  ions $root...for
9c00: 65 61 63 68 20 74 61 67 20 20 20 20 5b 24 72 6f  each tag    [$ro
9c10: 6f 74 20 74 61 67 73 5d 20 20 20 20 20 7b 20 6c  ot tags]     { l
9c20: 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24  append symbols $
9c30: 74 61 67 20 20 20 20 7d 0a 09 09 66 6f 72 65 61  tag    }...forea
9c40: 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74  ch branch [$root
9c50: 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 20   branches] {... 
9c60: 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73     integrity ass
9c70: 65 72 74 20 7b 0a 09 09 09 5b 24 62 72 61 6e 63  ert {....[$branc
9c80: 68 20 70 61 72 65 6e 74 5d 20 65 71 20 24 72 6f  h parent] eq $ro
9c90: 6f 74 0a 09 09 20 20 20 20 7d 20 7b 42 61 63 6b  ot...    } {Back
9ca0: 72 65 66 65 72 65 6e 63 65 20 62 72 61 6e 63 68  reference branch
9cb0: 20 74 6f 20 69 74 73 20 72 6f 6f 74 20 69 73 20   to its root is 
9cc0: 6d 69 73 73 69 6e 67 20 6f 72 20 77 72 6f 6e 67  missing or wrong
9cd0: 7d 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20  }...    lappend 
9ce0: 73 79 6d 62 6f 6c 73 20 24 62 72 61 6e 63 68 0a  symbols $branch.
9cf0: 09 09 7d 0a 09 09 73 65 74 20 6c 6f 64 20 5b 24  ..}...set lod [$
9d00: 72 6f 6f 74 20 6c 6f 64 5d 0a 09 09 69 66 20 7b  root lod]...if {
9d10: 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 7d  ![$lod istrunk]}
9d20: 20 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69   {...    integri
9d30: 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b  ty assert {....[
9d40: 24 6c 6f 64 20 68 61 73 63 68 69 6c 64 5d 0a 09  $lod haschild]..
9d50: 09 20 20 20 20 7d 20 7b 42 72 61 6e 63 68 20 69  .    } {Branch i
9d60: 73 20 4c 4f 44 20 73 79 6d 62 6f 6c 20 77 69 74  s LOD symbol wit
9d70: 68 6f 75 74 20 72 65 76 69 73 69 6f 6e 73 7d 0a  hout revisions}.
9d80: 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 73 79  ..    lappend sy
9d90: 6d 62 6f 6c 73 20 24 6c 6f 64 0a 09 09 7d 0a 09  mbols $lod...}..
9da0: 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74  .set root [$root
9db0: 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 09   child]..    }..
9dc0: 7d 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 74  }...return [list
9dd0: 20 5b 6c 73 6f 72 74 20 2d 75 6e 69 71 75 65 20   [lsort -unique 
9de0: 2d 64 69 63 74 20 24 72 65 76 69 73 69 6f 6e 73  -dict $revisions
9df0: 5d 20 5b 6c 73 6f 72 74 20 2d 75 6e 69 71 75 65  ] [lsort -unique
9e00: 20 2d 64 69 63 74 20 24 73 79 6d 62 6f 6c 73 5d   -dict $symbols]
9e10: 5d 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20 6d 65  ].    }...    me
9e20: 74 68 6f 64 20 41 67 67 72 65 67 61 74 65 53 79  thod AggregateSy
9e30: 6d 62 6f 6c 44 61 74 61 20 7b 7d 20 7b 0a 09 23  mbolData {} {..#
9e40: 20 4e 6f 77 20 74 68 61 74 20 74 68 65 20 65 78   Now that the ex
9e50: 61 63 74 20 73 65 74 20 6f 66 20 72 65 76 69 73  act set of revis
9e60: 69 6f 6e 73 20 28 61 6e 64 20 74 68 72 6f 75 67  ions (and throug
9e70: 68 20 74 68 61 74 0a 09 23 20 62 72 61 6e 63 68  h that..# branch
9e80: 65 73 20 61 6e 64 20 74 61 67 73 29 20 69 73 20  es and tags) is 
9e90: 6b 6e 6f 77 6e 20 77 65 20 63 61 6e 20 75 70 64  known we can upd
9ea0: 61 74 65 20 74 68 65 20 61 67 67 72 65 67 61 74  ate the aggregat
9eb0: 65 0a 09 23 20 73 79 6d 62 6f 6c 20 73 74 61 74  e..# symbol stat
9ec0: 69 73 74 69 63 73 2e 0a 0a 09 66 6f 72 65 61 63  istics....foreac
9ed0: 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69  h root [$self Li
9ee0: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74  nesOfDevelopment
9ef0: 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 6c 6f 64  ] {..    set lod
9f00: 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a 0a 09 20   [$root lod]... 
9f10: 20 20 20 23 20 4e 6f 74 65 3a 20 49 66 20 74 68     # Note: If th
9f20: 65 20 4c 4f 44 20 69 73 20 74 68 65 20 74 72 75  e LOD is the tru
9f30: 6e 6b 20 74 68 65 20 63 6f 75 6e 74 2a 2c 20 65  nk the count*, e
9f40: 74 63 2e 20 6d 65 74 68 6f 64 73 0a 09 20 20 20  tc. methods..   
9f50: 20 23 20 77 69 6c 6c 20 64 6f 20 6e 6f 74 68 69   # will do nothi
9f60: 6e 67 2c 20 61 73 20 69 74 20 69 73 20 61 6c 77  ng, as it is alw
9f70: 61 79 73 20 70 72 65 73 65 6e 74 20 28 63 61 6e  ays present (can
9f80: 6e 6f 74 20 62 65 0a 09 20 20 20 20 23 20 65 78  not be..    # ex
9f90: 63 6c 75 64 65 64 29 2c 20 61 6e 64 20 69 73 20  cluded), and is 
9fa0: 61 6c 77 61 79 73 20 61 20 62 72 61 6e 63 68 20  always a branch 
9fb0: 74 6f 6f 2e 0a 0a 09 20 20 20 20 23 20 4c 69 6e  too....    # Lin
9fc0: 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e  es of developmen
9fd0: 74 20 63 6f 75 6e 74 20 61 73 20 62 72 61 6e 63  t count as branc
9fe0: 68 65 73 20 61 6e 64 20 68 61 76 65 20 61 20 63  hes and have a c
9ff0: 6f 6d 6d 69 74 0a 09 20 20 20 20 23 20 6f 6e 20  ommit..    # on 
a000: 74 68 65 6d 20 28 72 6f 6f 74 29 2e 20 49 66 20  them (root). If 
a010: 74 68 65 79 20 61 72 65 20 73 74 69 6c 6c 20 61  they are still a
a020: 74 74 61 63 68 65 64 20 74 6f 20 61 20 74 72 65  ttached to a tre
a030: 65 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 65  e we..    # have
a040: 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20   to compute and 
a050: 72 65 67 69 73 74 65 72 20 70 6f 73 73 69 62 6c  register possibl
a060: 65 20 70 61 72 65 6e 74 73 2e 0a 0a 09 20 20 20  e parents....   
a070: 20 24 6c 6f 64 20 63 6f 75 6e 74 61 73 62 72 61   $lod countasbra
a080: 6e 63 68 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f  nch..    $lod co
a090: 75 6e 74 61 63 6f 6d 6d 69 74 0a 0a 09 20 20 20  untacommit...   
a0a0: 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 70   if {[$root hasp
a0b0: 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 0a  arentbranch]} {.
a0c0: 09 09 23 20 4e 6f 74 65 20 6c 6f 64 20 3d 3d 20  ..# Note lod == 
a0d0: 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61  [$root parentbra
a0e0: 6e 63 68 5d 0a 09 09 24 6c 6f 64 20 70 6f 73 73  nch]...$lod poss
a0f0: 69 62 6c 65 70 61 72 65 6e 74 73 0a 09 20 20 20  ibleparents..   
a100: 20 7d 20 65 6c 73 65 69 66 20 7b 21 5b 24 6c 6f   } elseif {![$lo
a110: 64 20 69 73 74 72 75 6e 6b 5d 20 26 26 20 5b 24  d istrunk] && [$
a120: 72 6f 6f 74 20 69 73 6f 6e 64 65 66 61 75 6c 74  root isondefault
a130: 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 23 20 54  branch]} {...# T
a140: 68 69 73 20 69 73 20 74 68 65 20 72 6f 6f 74 20  his is the root 
a150: 72 65 76 69 73 69 6f 6e 20 6f 66 20 61 20 64 65  revision of a de
a160: 74 61 63 68 65 64 20 4e 54 44 42 2e 20 57 65 0a  tached NTDB. We.
a170: 09 09 23 20 68 61 76 65 20 74 6f 20 6d 61 6e 75  ..# have to manu
a180: 61 6c 6c 79 20 73 65 74 20 74 68 65 20 6f 6e 6c  ally set the onl
a190: 79 20 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e  y possible paren
a1a0: 74 20 66 6f 72 0a 09 09 23 20 74 68 69 73 20 4c  t for...# this L
a1b0: 4f 44 2c 20 74 68 65 20 74 72 75 6e 6b 20 69 74  OD, the trunk it
a1c0: 73 65 6c 66 2e 0a 0a 09 09 5b 24 6c 6f 64 20 73  self.....[$lod s
a1d0: 79 6d 62 6f 6c 5d 20 70 6f 73 73 69 62 6c 65 70  ymbol] possiblep
a1e0: 61 72 65 6e 74 20 24 6d 79 74 72 75 6e 6b 0a 09  arent $mytrunk..
a1f0: 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 46 6f      }...    # Fo
a200: 72 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20  r the revisions 
a210: 69 6e 20 74 68 65 20 6c 69 6e 65 20 77 65 20 72  in the line we r
a220: 65 67 69 73 74 65 72 20 74 68 65 69 72 20 62 72  egister their br
a230: 61 6e 63 68 65 73 0a 09 20 20 20 20 23 20 61 6e  anches..    # an
a240: 64 20 74 61 67 73 20 61 73 20 62 6c 6f 63 6b 65  d tags as blocke
a250: 72 73 20 66 6f 72 20 74 68 65 20 6c 6f 64 2c 20  rs for the lod, 
a260: 61 6e 64 20 75 70 64 61 74 65 20 74 68 65 20 74  and update the t
a270: 79 70 65 0a 09 20 20 20 20 23 20 63 6f 75 6e 74  ype..    # count
a280: 65 72 73 20 61 73 20 77 65 6c 6c 2e 20 41 73 20  ers as well. As 
a290: 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 73 20 77  branch symbols w
a2a0: 69 74 68 6f 75 74 20 63 6f 6d 6d 69 74 73 20 6f  ithout commits o
a2b0: 6e 0a 09 20 20 20 20 23 20 74 68 65 6d 20 61 72  n..    # them ar
a2c0: 65 20 6e 6f 74 20 6c 69 73 74 65 64 20 61 73 20  e not listed as 
a2d0: 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70  lines of develop
a2e0: 6d 65 6e 74 2c 20 77 65 20 68 61 76 65 20 74 6f  ment, we have to
a2f0: 0a 09 20 20 20 20 23 20 63 6f 75 6e 74 20 74 68  ..    # count th
a300: 65 6d 20 68 65 72 65 20 61 73 20 77 65 6c 6c 2c  em here as well,
a310: 20 61 73 20 70 6c 61 69 6e 20 62 72 61 6e 63 68   as plain branch
a320: 65 73 2e 20 41 74 20 6c 61 73 74 20 77 65 0a 09  es. At last we..
a330: 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 63 6f      # have to co
a340: 6d 70 75 74 65 20 61 6e 64 20 72 65 67 69 73 74  mpute and regist
a350: 65 72 20 74 68 65 20 70 6f 73 73 69 62 6c 65 20  er the possible 
a360: 70 61 72 65 6e 74 73 20 6f 66 20 74 68 65 0a 09  parents of the..
a370: 20 20 20 20 23 20 74 61 67 73 2c 20 69 6e 20 63      # tags, in c
a380: 61 73 65 20 74 68 65 79 20 61 72 65 20 6c 61 74  ase they are lat
a390: 65 72 20 63 6f 6e 76 65 72 74 65 64 20 61 73 20  er converted as 
a3a0: 62 72 61 6e 63 68 65 73 2e 0a 0a 09 20 20 20 20  branches....    
a3b0: 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20  while {$root ne 
a3c0: 22 22 7d 20 7b 0a 09 09 66 6f 72 65 61 63 68 20  ""} {...foreach 
a3d0: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72  branch [$root br
a3e0: 61 6e 63 68 65 73 5d 20 7b 0a 09 09 20 20 20 20  anches] {...    
a3f0: 24 6c 6f 64 20 62 6c 6f 63 6b 65 64 62 79 20 24  $lod blockedby $
a400: 62 72 61 6e 63 68 0a 09 09 20 20 20 20 24 62 72  branch...    $br
a410: 61 6e 63 68 20 70 6f 73 73 69 62 6c 65 70 61 72  anch possiblepar
a420: 65 6e 74 73 0a 09 09 20 20 20 20 69 66 20 7b 5b  ents...    if {[
a430: 24 62 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64  $branch haschild
a440: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 20 20  ]} continue...  
a450: 20 20 24 62 72 61 6e 63 68 20 63 6f 75 6e 74 61    $branch counta
a460: 73 62 72 61 6e 63 68 0a 09 09 7d 0a 0a 09 09 66  sbranch...}....f
a470: 6f 72 65 61 63 68 20 74 61 67 20 5b 24 72 6f 6f  oreach tag [$roo
a480: 74 20 74 61 67 73 5d 20 7b 0a 09 09 20 20 20 20  t tags] {...    
a490: 24 6c 6f 64 20 62 6c 6f 63 6b 65 64 62 79 20 24  $lod blockedby $
a4a0: 74 61 67 0a 09 09 20 20 20 20 24 74 61 67 20 70  tag...    $tag p
a4b0: 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 73 0a 09  ossibleparents..
a4c0: 09 20 20 20 20 24 74 61 67 20 63 6f 75 6e 74 61  .    $tag counta
a4d0: 73 74 61 67 0a 09 09 7d 0a 0a 09 09 73 65 74 20  stag...}....set 
a4e0: 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c  root [$root chil
a4f0: 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72  d]..    }..}...r
a500: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
a510: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
a520: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
a530: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20  ########.    ## 
a540: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20  Configuration.. 
a550: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79     pragma -hasty
a560: 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20  peinfo    no  ; 
a570: 23 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73  # no type intros
a580: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67  pection.    prag
a590: 6d 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20  ma -hasinfo     
a5a0: 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62     no  ; # no ob
a5b0: 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69  ject introspecti
a5c0: 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68  on.    pragma -h
a5d0: 61 73 74 79 70 65 6d 65 74 68 6f 64 73 20 6e 6f  astypemethods no
a5e0: 20 20 3b 20 23 20 74 79 70 65 20 69 73 20 6e 6f    ; # type is no
a5f0: 74 20 72 65 6c 65 76 61 6e 74 2e 0a 0a 20 20 20  t relevant...   
a600: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
a610: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
a620: 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65  ########.}..name
a630: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a  space eval ::vc:
a640: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
a650: 3a 63 76 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73  :cvs {.    names
a660: 70 61 63 65 20 65 78 70 6f 72 74 20 66 69 6c 65  pace export file
a670: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  .    namespace e
a680: 76 61 6c 20 66 69 6c 65 20 7b 0a 09 23 20 49 6d  val file {..# Im
a690: 70 6f 72 74 20 6e 6f 74 20 72 65 71 75 69 72 65  port not require
a6a0: 64 2c 20 61 6c 72 65 61 64 79 20 61 20 63 68 69  d, already a chi
a6b0: 6c 64 20 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23  ld namespace...#
a6c0: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72   namespace impor
a6d0: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  t ::vc::fossil::
a6e0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c  import::cvs::fil
a6f0: 65 3a 3a 72 65 76 0a 09 23 20 6e 61 6d 65 73 70  e::rev..# namesp
a700: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
a710: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
a720: 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 0a  :cvs::file::sym.
a730: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
a740: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d  t ::vc::tools::m
a750: 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63  isc::*..namespac
a760: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74  e import ::vc::t
a770: 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e  ools::trouble..n
a780: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
a790: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67  ::vc::tools::log
a7a0: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  ..namespace impo
a7b0: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  rt ::vc::fossil:
a7c0: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74  :import::cvs::st
a7d0: 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69  ate..namespace i
a7e0: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73  mport ::vc::foss
a7f0: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
a800: 3a 69 6e 74 65 67 72 69 74 79 0a 09 6e 61 6d 65  :integrity..name
a810: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
a820: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
a830: 74 3a 3a 63 76 73 3a 3a 67 74 63 6f 72 65 0a 20  t::cvs::gtcore. 
a840: 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23     }.}..# # ## #
a850: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
a860: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20  # ############# 
a870: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
a880: 23 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a  #####.## Ready..
a890: 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20  package provide 
a8a0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
a8b0: 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e  rt::cvs::file 1.
a8c0: 30 0a 72 65 74 75 72 6e 0a                       0.return.