Hex Artifact Content
Not logged in

Artifact 9ff9d6eaa4f688948440d099ebde7d980d06f7b4:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [83d75a6c23] - Modified filtering pass to drop the blobs of excluded revisions, for them we can be sure that we will not need them later, as whole branches are dropped. Modified the file import to use the new blob information to setup the expansion graph. This fixes the trouble we had with archive files in bwidget. They are now properly expanded. by aku on 2008-02-03 00:45:57.

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 62 6c 6f 62 73 74 6f 72 65 20 20 3b 20  s::blobstore  ; 
0400: 23 20 42 6c 6f 62 20 73 74 6f 72 61 67 65 2e 0a  # Blob storage..
0410: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0420: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0430: 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 72  rt::cvs::file::r
0440: 65 76 20 20 3b 20 23 20 43 56 53 20 70 65 72 20  ev  ; # CVS per 
0450: 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 73 2e 0a  file revisions..
0460: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0470: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0480: 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 73  rt::cvs::file::s
0490: 79 6d 20 20 3b 20 23 20 43 56 53 20 70 65 72 20  ym  ; # CVS per 
04a0: 66 69 6c 65 20 73 79 6d 62 6f 6c 73 2e 0a 70 61  file symbols..pa
04b0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63  ckage require vc
04c0: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
04d0: 3a 3a 63 76 73 3a 3a 73 74 61 74 65 20 20 20 20  ::cvs::state    
04e0: 20 20 3b 20 23 20 53 74 61 74 65 20 73 74 6f 72    ; # State stor
04f0: 61 67 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71  age..package req
0500: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a  uire vc::fossil:
0510: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e  :import::cvs::in
0520: 74 65 67 72 69 74 79 20 20 3b 20 23 20 53 74 61  tegrity  ; # Sta
0530: 74 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  te integrity che
0540: 63 6b 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 71  cks..package req
0550: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a  uire vc::fossil:
0560: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 67 74  :import::cvs::gt
0570: 63 6f 72 65 20 20 20 20 20 3b 20 23 20 47 72 61  core     ; # Gra
0580: 70 68 20 74 72 61 76 65 72 73 61 6c 20 63 6f 72  ph traversal cor
0590: 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  e..package requi
05a0: 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72  re vc::tools::tr
05b0: 6f 75 62 6c 65 20 20 20 20 20 20 20 20 20 20 20  ouble           
05c0: 20 20 20 20 20 20 20 3b 20 23 20 45 72 72 6f 72         ; # Error
05d0: 20 72 65 70 6f 72 74 69 6e 67 2e 0a 70 61 63 6b   reporting..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 6c 6f 67 20 20 20 20 20 20  tools::log      
0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0610: 3b 20 23 20 55 73 65 72 20 66 65 65 64 62 61 63  ; # User feedbac
0620: 6b 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72  k.package requir
0630: 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73  e vc::tools::mis
0640: 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c               
0650: 20 20 20 20 20 20 3b 20 23 20 54 65 78 74 20 66        ; # Text f
0660: 6f 72 6d 61 74 74 69 6e 67 0a 0a 23 20 23 20 23  ormatting..# # #
0670: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
0680: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
0690: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
06a0: 23 23 23 23 23 23 23 23 0a 23 23 0a 0a 73 6e 69  ########.##..sni
06b0: 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f  t::type ::vc::fo
06c0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
06d0: 73 3a 3a 66 69 6c 65 20 7b 0a 20 20 20 20 23 20  s::file {.    # 
06e0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
06f0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0700: 23 23 23 23 23 0a 20 20 20 20 23 23 20 50 75 62  #####.    ## Pub
0710: 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 63 6f 6e  lic API..    con
0720: 73 74 72 75 63 74 6f 72 20 7b 69 64 20 70 61 74  structor {id pat
0730: 68 20 75 73 72 70 61 74 68 20 65 78 65 63 75 74  h usrpath execut
0740: 61 62 6c 65 20 70 72 6f 6a 65 63 74 7d 20 7b 0a  able project} {.
0750: 09 73 65 74 20 6d 79 69 64 20 20 20 20 20 20 20  .set myid       
0760: 20 20 24 69 64 0a 09 73 65 74 20 6d 79 70 61 74    $id..set mypat
0770: 68 20 20 20 20 20 20 20 24 70 61 74 68 0a 09 73  h       $path..s
0780: 65 74 20 6d 79 75 73 72 70 61 74 68 20 20 20 20  et myusrpath    
0790: 24 75 73 72 70 61 74 68 0a 09 73 65 74 20 6d 79  $usrpath..set my
07a0: 65 78 65 63 75 74 61 62 6c 65 20 24 65 78 65 63  executable $exec
07b0: 75 74 61 62 6c 65 0a 09 73 65 74 20 6d 79 70 72  utable..set mypr
07c0: 6f 6a 65 63 74 20 20 20 20 24 70 72 6f 6a 65 63  oject    $projec
07d0: 74 0a 09 73 65 74 20 6d 79 74 72 75 6e 6b 20 20  t..set mytrunk  
07e0: 20 20 20 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20      [$myproject 
07f0: 74 72 75 6e 6b 5d 0a 09 73 65 74 20 6d 79 62 6c  trunk]..set mybl
0800: 6f 62 20 20 20 20 20 20 20 5b 62 6c 6f 62 73 74  ob       [blobst
0810: 6f 72 65 20 24 7b 73 65 6c 66 6e 73 7d 3a 3a 25  ore ${selfns}::%
0820: 41 55 54 4f 25 20 24 69 64 5d 0a 09 72 65 74 75  AUTO% $id]..retu
0830: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
0840: 74 68 6f 64 20 73 65 74 69 64 20 7b 69 64 7d 20  thod setid {id} 
0850: 7b 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73  {..integrity ass
0860: 65 72 74 20 7b 24 6d 79 69 64 20 65 71 20 22 22  ert {$myid eq ""
0870: 7d 20 7b 46 69 6c 65 20 27 24 6d 79 70 61 74 68  } {File '$mypath
0880: 27 20 61 6c 72 65 61 64 79 20 68 61 73 20 61 6e  ' already has an
0890: 20 69 64 2c 20 27 24 6d 79 69 64 27 7d 0a 09 73   id, '$myid'}..s
08a0: 65 74 20 6d 79 69 64 20 24 69 64 0a 09 24 6d 79  et myid $id..$my
08b0: 62 6c 6f 62 20 73 65 74 69 64 20 24 69 64 0a 09  blob setid $id..
08c0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
08d0: 20 20 6d 65 74 68 6f 64 20 69 64 20 20 20 20 20    method id     
08e0: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79   {} { return $my
08f0: 69 64 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  id }.    method 
0900: 70 61 74 68 20 20 20 20 7b 7d 20 7b 20 72 65 74  path    {} { ret
0910: 75 72 6e 20 24 6d 79 70 61 74 68 20 7d 0a 20 20  urn $mypath }.  
0920: 20 20 6d 65 74 68 6f 64 20 75 73 72 70 61 74 68    method usrpath
0930: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79   {} { return $my
0940: 75 73 72 70 61 74 68 20 7d 0a 20 20 20 20 6d 65  usrpath }.    me
0950: 74 68 6f 64 20 70 72 6f 6a 65 63 74 20 7b 7d 20  thod project {} 
0960: 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 72 6f 6a  { return $myproj
0970: 65 63 74 20 7d 0a 0a 20 20 20 20 64 65 6c 65 67  ect }..    deleg
0980: 61 74 65 20 6d 65 74 68 6f 64 20 63 6f 6d 6d 69  ate method commi
0990: 74 6d 65 73 73 61 67 65 6f 66 20 74 6f 20 6d 79  tmessageof to my
09a0: 70 72 6f 6a 65 63 74 0a 0a 20 20 20 20 23 20 23  project..    # #
09b0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
09c0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
09d0: 23 23 23 23 0a 20 20 20 20 23 23 20 4d 65 74 68  ####.    ## Meth
09e0: 6f 64 73 20 72 65 71 75 69 72 65 64 20 66 6f 72  ods required for
09f0: 20 74 68 65 20 63 6c 61 73 73 20 74 6f 20 62 65   the class to be
0a00: 20 61 20 73 69 6e 6b 20 6f 66 20 74 68 65 20 72   a sink of the r
0a10: 63 73 20 70 61 72 73 65 72 0a 0a 20 20 20 20 23  cs parser..    #
0a20: 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 7b 7d 20  method begin {} 
0a30: 7b 70 75 74 73 20 62 65 67 69 6e 7d 0a 20 20 20  {puts begin}.   
0a40: 20 23 6d 65 74 68 6f 64 20 73 65 74 68 65 61 64   #method sethead
0a50: 20 7b 68 7d 20 7b 70 75 74 73 20 68 65 61 64 3d   {h} {puts head=
0a60: 24 68 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20  $h}.    #method 
0a70: 73 65 74 70 72 69 6e 63 69 70 61 6c 62 72 61 6e  setprincipalbran
0a80: 63 68 20 7b 62 7d 20 7b 70 75 74 73 20 70 62 3d  ch {b} {puts pb=
0a90: 24 62 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20  $b}.    #method 
0aa0: 64 65 66 74 61 67 20 7b 73 20 72 7d 20 7b 70 75  deftag {s r} {pu
0ab0: 74 73 20 24 73 3d 24 72 7d 0a 20 20 20 20 23 6d  ts $s=$r}.    #m
0ac0: 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d 65 6e 74  ethod setcomment
0ad0: 20 7b 63 7d 20 7b 70 75 74 73 20 63 6f 6d 6d 65   {c} {puts comme
0ae0: 6e 74 3d 24 63 7d 0a 20 20 20 20 23 6d 65 74 68  nt=$c}.    #meth
0af0: 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20  od admindone {} 
0b00: 7b 70 75 74 73 20 61 64 6d 69 6e 64 6f 6e 65 7d  {puts admindone}
0b10: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66  .    #method def
0b20: 20 7b 72 65 76 20 64 61 74 65 20 61 75 74 68 6f   {rev date autho
0b30: 72 20 73 74 61 74 65 20 6e 65 78 74 20 62 72 61  r state next bra
0b40: 6e 63 68 65 73 7d 20 7b 70 75 74 73 20 22 64 65  nches} {puts "de
0b50: 66 20 24 72 65 76 20 24 64 61 74 65 20 24 61 75  f $rev $date $au
0b60: 74 68 6f 72 20 24 73 74 61 74 65 20 24 6e 65 78  thor $state $nex
0b70: 74 20 24 62 72 61 6e 63 68 65 73 22 7d 0a 20 20  t $branches"}.  
0b80: 20 20 23 6d 65 74 68 6f 64 20 64 65 66 64 6f 6e    #method defdon
0b90: 65 20 7b 7d 20 7b 70 75 74 73 20 64 65 66 2d 64  e {} {puts def-d
0ba0: 6f 6e 65 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64  one}.    #method
0bb0: 20 73 65 74 64 65 73 63 20 7b 64 7d 20 7b 70 75   setdesc {d} {pu
0bc0: 74 73 20 64 65 73 63 3d 24 64 7d 0a 20 20 20 20  ts desc=$d}.    
0bd0: 23 6d 65 74 68 6f 64 20 65 78 74 65 6e 64 20 7b  #method extend {
0be0: 72 65 76 20 63 6f 6d 6d 69 74 6d 73 67 20 64 65  rev commitmsg de
0bf0: 6c 74 61 72 61 6e 67 65 7d 20 7b 70 75 74 73 20  ltarange} {puts 
0c00: 22 65 78 74 65 6e 64 20 24 63 6f 6d 6d 69 74 6d  "extend $commitm
0c10: 73 67 20 24 64 65 6c 74 61 72 61 6e 67 65 22 7d  sg $deltarange"}
0c20: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64 6f 6e  .    #method don
0c30: 65 20 7b 7d 20 7b 70 75 74 73 20 64 6f 6e 65 7d  e {} {puts done}
0c40: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
0c50: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
0c60: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
0c70: 20 20 23 23 20 50 65 72 73 69 73 74 65 6e 63 65    ## Persistence
0c80: 20 28 70 61 73 73 20 49 49 29 0a 0a 20 20 20 20   (pass II)..    
0c90: 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74 20 7b  method persist {
0ca0: 7d 20 7b 0a 09 23 20 46 69 72 73 74 20 63 6f 6c  } {..# First col
0cb0: 6c 65 63 74 20 74 68 65 20 72 65 61 63 68 61 62  lect the reachab
0cc0: 6c 65 20 72 65 76 69 73 69 6f 6e 73 20 61 6e 64  le revisions and
0cd0: 20 73 79 6d 62 6f 6c 73 2c 20 74 68 65 6e 0a 09   symbols, then..
0ce0: 23 20 61 73 73 69 67 6e 20 69 64 27 73 20 74 6f  # assign id's to
0cf0: 20 61 6c 6c 2e 20 54 68 65 79 20 61 72 65 20 73   all. They are s
0d00: 6f 72 74 65 64 20 73 6f 20 74 68 61 74 20 77 65  orted so that we
0d10: 20 77 69 6c 6c 20 68 61 76 65 20 69 64 73 0a 09   will have ids..
0d20: 23 20 77 68 69 63 68 20 73 6f 72 74 20 69 6e 20  # which sort in 
0d30: 6f 72 64 65 72 20 6f 66 20 63 72 65 61 74 69 6f  order of creatio
0d40: 6e 2e 20 54 68 65 6e 20 77 65 20 63 61 6e 20 73  n. Then we can s
0d50: 61 76 65 20 74 68 65 6d 2e 20 54 68 69 73 0a 09  ave them. This..
0d60: 23 20 69 73 20 64 6f 6e 65 20 62 6f 74 74 6f 6d  # is done bottom
0d70: 20 75 70 2e 20 52 65 76 69 73 69 6f 6e 73 2c 20   up. Revisions, 
0d80: 74 68 65 6e 20 73 79 6d 62 6f 6c 73 2e 20 5f 5f  then symbols. __
0d90: 4e 4f 54 45 5f 5f 20 54 68 69 73 0a 09 23 20 77  NOTE__ This..# w
0da0: 6f 72 6b 73 20 6f 6e 6c 79 20 62 65 63 61 75 73  orks only becaus
0db0: 65 20 73 71 6c 69 74 65 20 69 73 20 6e 6f 74 20  e sqlite is not 
0dc0: 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e  checking foreign
0dd0: 20 6b 65 79 0a 09 23 20 72 65 66 65 72 65 6e 63   key..# referenc
0de0: 65 73 20 64 75 72 69 6e 67 20 69 6e 73 65 72 74  es during insert
0df0: 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 74 6f  . This allows to
0e00: 20 68 61 76 65 20 64 61 6e 67 6c 69 6e 67 0a 09   have dangling..
0e10: 23 20 72 65 66 65 72 65 6e 63 65 73 20 77 68 69  # references whi
0e20: 63 68 20 61 72 65 20 66 69 78 65 64 20 6c 61 74  ch are fixed lat
0e30: 65 72 2e 20 54 68 65 20 6c 6f 6e 67 65 73 74 20  er. The longest 
0e40: 64 61 6e 67 6c 69 6e 67 0a 09 23 20 72 65 66 65  dangling..# refe
0e50: 72 65 6e 63 65 73 20 61 72 65 20 66 6f 72 20 74  rences are for t
0e60: 68 65 20 70 72 6f 6a 65 63 74 20 6c 65 76 65 6c  he project level
0e70: 20 73 79 6d 62 6f 6c 73 2c 20 74 68 65 73 65 20   symbols, these 
0e80: 77 65 20 64 6f 0a 09 23 20 6e 6f 74 20 73 61 76  we do..# not sav
0e90: 65 20 68 65 72 65 2c 20 62 75 74 20 61 74 20 74  e here, but at t
0ea0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61  he end of the pa
0eb0: 73 73 2e 20 57 68 61 74 20 77 65 20 6e 65 65 64  ss. What we need
0ec0: 20 61 72 65 0a 09 23 20 74 68 65 20 69 64 73 2c   are..# the ids,
0ed0: 20 68 65 6e 63 65 20 74 68 65 20 74 77 6f 20 70   hence the two p
0ee0: 68 61 73 65 73 2e 0a 0a 09 73 74 72 75 63 74 3a  hases....struct:
0ef0: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 24 73  :list assign [$s
0f00: 65 6c 66 20 41 63 74 69 76 65 5d 20 72 65 76 69  elf Active] revi
0f10: 73 69 6f 6e 73 20 73 79 6d 62 6f 6c 73 0a 09 66  sions symbols..f
0f20: 6f 72 65 61 63 68 20 72 65 76 20 24 72 65 76 69  oreach rev $revi
0f30: 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 66  sions { $rev def
0f40: 69 64 20 7d 0a 09 66 6f 72 65 61 63 68 20 73 79  id }..foreach sy
0f50: 6d 20 24 73 79 6d 62 6f 6c 73 20 20 20 7b 20 24  m $symbols   { $
0f60: 73 79 6d 20 64 65 66 69 64 20 7d 0a 0a 09 73 74  sym defid }...st
0f70: 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ate transaction 
0f80: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 72  {..    foreach r
0f90: 65 76 20 24 72 65 76 69 73 69 6f 6e 73 20 7b 20  ev $revisions { 
0fa0: 24 72 65 76 20 70 65 72 73 69 73 74 20 7d 0a 09  $rev persist }..
0fb0: 20 20 20 20 66 6f 72 65 61 63 68 20 73 79 6d 20      foreach sym 
0fc0: 24 73 79 6d 62 6f 6c 73 20 20 20 7b 20 24 73 79  $symbols   { $sy
0fd0: 6d 20 70 65 72 73 69 73 74 20 7d 0a 09 20 20 20  m persist }..   
0fe0: 20 24 6d 79 62 6c 6f 62 20 70 65 72 73 69 73 74   $myblob persist
0ff0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
1000: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 72  }..    method dr
1010: 6f 70 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68  op {} {..foreach
1020: 20 7b 5f 20 72 65 76 7d 20 20 20 20 5b 61 72 72   {_ rev}    [arr
1030: 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20 20 20  ay get myrev]   
1040: 20 20 20 7b 20 24 72 65 76 20 64 65 73 74 72 6f     { $rev destro
1050: 79 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20  y }..foreach {_ 
1060: 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67  branch} [array g
1070: 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b  et mybranches] {
1080: 20 24 62 72 61 6e 63 68 20 64 65 73 74 72 6f 79   $branch destroy
1090: 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 74   }..foreach {_ t
10a0: 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67  aglist} [array g
10b0: 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20  et mytags] {..  
10c0: 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 24 74    foreach tag $t
10d0: 61 67 6c 69 73 74 20 7b 20 24 74 61 67 20 64 65  aglist { $tag de
10e0: 73 74 72 6f 79 20 7d 0a 09 7d 0a 09 72 65 74 75  stroy }..}..retu
10f0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  rn.    }..    # 
1100: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
1110: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
1120: 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6d 70  #####.    ## Imp
1130: 6c 65 6d 65 6e 74 20 74 68 65 20 73 69 6e 6b 0a  lement the sink.
1140: 0a 20 20 20 20 6d 65 74 68 6f 64 20 62 65 67 69  .    method begi
1150: 6e 20 7b 7d 20 7b 23 69 67 6e 6f 72 65 7d 0a 0a  n {} {#ignore}..
1160: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 68 65      method sethe
1170: 61 64 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 73 65  ad {revnr} {..se
1180: 74 20 6d 79 68 65 61 64 72 65 76 6e 72 20 24 72  t myheadrevnr $r
1190: 65 76 6e 72 0a 09 72 65 74 75 72 6e 0a 20 20 20  evnr..return.   
11a0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73   }..    method s
11b0: 65 74 70 72 69 6e 63 69 70 61 6c 62 72 61 6e 63  etprincipalbranc
11c0: 68 20 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09  h {branchnr} {..
11d0: 73 65 74 20 6d 79 70 72 69 6e 63 69 70 61 6c 20  set myprincipal 
11e0: 24 62 72 61 6e 63 68 6e 72 0a 09 72 65 74 75 72  $branchnr..retur
11f0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
1200: 68 6f 64 20 64 65 66 74 61 67 20 7b 6e 61 6d 65  hod deftag {name
1210: 20 72 65 76 6e 72 7d 20 7b 0a 09 23 20 46 55 54   revnr} {..# FUT
1220: 55 52 45 3a 20 50 65 72 66 6f 72 6d 20 73 79 6d  URE: Perform sym
1230: 62 6f 6c 20 74 72 61 6e 73 66 6f 72 6d 61 74 69  bol transformati
1240: 6f 6e 20 68 65 72 65 2e 0a 0a 09 69 66 20 7b 5b  on here....if {[
1250: 73 74 72 75 63 74 3a 3a 73 65 74 20 63 6f 6e 74  struct::set cont
1260: 61 69 6e 73 20 24 6d 79 73 79 6d 62 6f 6c 73 20  ains $mysymbols 
1270: 24 6e 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 74  $name]} {..    t
1280: 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 4d 75  rouble fatal "Mu
1290: 6c 74 69 70 6c 65 20 64 65 66 69 6e 69 74 69 6f  ltiple definitio
12a0: 6e 73 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c  ns of the symbol
12b0: 20 27 24 6e 61 6d 65 27 20 69 6e 20 27 24 6d 79   '$name' in '$my
12c0: 70 61 74 68 27 22 0a 09 20 20 20 20 72 65 74 75  path'"..    retu
12d0: 72 6e 0a 09 7d 0a 0a 09 73 74 72 75 63 74 3a 3a  rn..}...struct::
12e0: 73 65 74 20 61 64 64 20 6d 79 73 79 6d 62 6f 6c  set add mysymbol
12f0: 73 20 24 6e 61 6d 65 0a 0a 09 69 66 20 7b 5b 72  s $name...if {[r
1300: 65 76 20 69 73 62 72 61 6e 63 68 72 65 76 6e 72  ev isbranchrevnr
1310: 20 24 72 65 76 6e 72 20 2d 3e 20 62 72 61 6e 63   $revnr -> branc
1320: 68 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65  hnr]} {..    $se
1330: 6c 66 20 41 64 64 42 72 61 6e 63 68 20 24 6e 61  lf AddBranch $na
1340: 6d 65 20 24 62 72 61 6e 63 68 6e 72 0a 09 7d 20  me $branchnr..} 
1350: 65 6c 73 65 20 7b 0a 09 20 20 20 20 24 73 65 6c  else {..    $sel
1360: 66 20 41 64 64 54 61 67 20 24 6e 61 6d 65 20 24  f AddTag $name $
1370: 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e  revnr..}..return
1380: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
1390: 6f 64 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63  od setcomment {c
13a0: 7d 20 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20  } {# ignore}..  
13b0: 20 20 6d 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f    method admindo
13c0: 6e 65 20 7b 7d 20 7b 0a 09 23 20 57 65 20 64 6f  ne {} {..# We do
13d0: 20 6e 6f 74 68 69 6e 67 20 61 74 20 74 68 65 20   nothing at the 
13e0: 62 6f 75 6e 64 61 72 79 20 6f 66 20 61 64 6d 69  boundary of admi
13f0: 6e 20 61 6e 64 20 72 65 76 69 73 69 6f 6e 20 64  n and revision d
1400: 61 74 61 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  ata.    }..    m
1410: 65 74 68 6f 64 20 64 65 66 20 7b 72 65 76 6e 72  ethod def {revnr
1420: 20 64 61 74 65 20 61 75 74 68 6f 72 20 73 74 61   date author sta
1430: 74 65 20 6e 65 78 74 20 62 72 61 6e 63 68 65 73  te next branches
1440: 7d 20 7b 0a 09 24 73 65 6c 66 20 52 65 63 6f 72  } {..$self Recor
1450: 64 42 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 24  dBranchCommits $
1460: 62 72 61 6e 63 68 65 73 0a 0a 09 69 66 20 7b 5b  branches...if {[
1470: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65  info exists myre
1480: 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 20  v($revnr)]} {.. 
1490: 20 20 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c     trouble fatal
14a0: 20 22 46 69 6c 65 20 24 6d 79 70 61 74 68 20 63   "File $mypath c
14b0: 6f 6e 74 61 69 6e 73 20 64 75 70 6c 69 63 61 74  ontains duplicat
14c0: 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 66 6f  e definitions fo
14d0: 72 20 72 65 76 69 73 69 6f 6e 20 24 72 65 76 6e  r revision $revn
14e0: 72 2e 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a  r."..    return.
14f0: 09 7d 0a 0a 09 73 65 74 20 6d 79 61 69 64 28 24  .}...set myaid($
1500: 72 65 76 6e 72 29 20 5b 24 6d 79 70 72 6f 6a 65  revnr) [$myproje
1510: 63 74 20 64 65 66 61 75 74 68 6f 72 20 24 61 75  ct defauthor $au
1520: 74 68 6f 72 5d 0a 09 73 65 74 20 6d 79 72 65 76  thor]..set myrev
1530: 28 24 72 65 76 6e 72 29 20 5b 72 65 76 20 25 41  ($revnr) [rev %A
1540: 55 54 4f 25 20 24 72 65 76 6e 72 20 24 64 61 74  UTO% $revnr $dat
1550: 65 20 24 73 74 61 74 65 20 24 73 65 6c 66 5d 0a  e $state $self].
1560: 0a 09 24 6d 79 62 6c 6f 62 20 61 64 64 20 24 72  ..$myblob add $r
1570: 65 76 6e 72 20 24 6d 79 72 65 76 28 24 72 65 76  evnr $myrev($rev
1580: 6e 72 29 0a 0a 09 69 66 20 7b 24 6e 65 78 74 20  nr)...if {$next 
1590: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20  ne ""} {..    # 
15a0: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 20  parent revision 
15b0: 4e 45 58 54 20 69 73 20 61 20 64 65 6c 74 61 20  NEXT is a delta 
15c0: 6f 66 20 63 75 72 72 65 6e 74 2e 0a 09 20 20 20  of current...   
15d0: 20 24 6d 79 62 6c 6f 62 20 64 65 6c 74 61 20 24   $myblob delta $
15e0: 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d 0a 09  next $revnr..}..
15f0: 66 6f 72 65 61 63 68 20 62 20 24 62 72 61 6e 63  foreach b $branc
1600: 68 65 73 20 7b 0a 09 20 20 20 20 23 20 62 72 61  hes {..    # bra
1610: 6e 63 68 20 63 68 69 6c 64 20 72 65 76 69 73 69  nch child revisi
1620: 6f 6e 20 42 20 69 73 20 61 20 64 65 6c 74 61 20  on B is a delta 
1630: 6f 66 20 63 75 72 72 65 6e 74 2e 0a 09 20 20 20  of current...   
1640: 20 24 6d 79 62 6c 6f 62 20 64 65 6c 74 61 20 24   $myblob delta $
1650: 62 20 24 72 65 76 6e 72 0a 09 7d 0a 0a 09 24 73  b $revnr..}...$s
1660: 65 6c 66 20 52 65 63 6f 72 64 42 61 73 69 63 44  elf RecordBasicD
1670: 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65 76  ependencies $rev
1680: 6e 72 20 24 6e 65 78 74 0a 09 72 65 74 75 72 6e  nr $next..return
1690: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
16a0: 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d 20 7b 0a  od defdone {} {.
16b0: 09 23 20 54 68 69 73 20 69 73 20 61 6c 6c 20 64  .# This is all d
16c0: 6f 6e 65 20 61 66 74 65 72 20 74 68 65 20 72 65  one after the re
16d0: 76 69 73 69 6f 6e 20 74 72 65 65 20 68 61 73 20  vision tree has 
16e0: 62 65 65 6e 20 65 78 74 72 61 63 74 65 64 0a 09  been extracted..
16f0: 23 20 66 72 6f 6d 20 74 68 65 20 66 69 6c 65 2c  # from the file,
1700: 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6d 6d   before the comm
1710: 69 74 20 6d 65 73 61 67 65 73 20 61 6e 64 20 64  it mesages and d
1720: 65 6c 74 61 20 74 65 78 74 73 20 61 72 65 0a 09  elta texts are..
1730: 23 20 70 72 6f 63 65 73 73 65 64 2e 0a 0a 09 24  # processed....$
1740: 73 65 6c 66 20 50 72 6f 63 65 73 73 50 72 69 6d  self ProcessPrim
1750: 61 72 79 44 65 70 65 6e 64 65 6e 63 69 65 73 0a  aryDependencies.
1760: 09 24 73 65 6c 66 20 50 72 6f 63 65 73 73 42 72  .$self ProcessBr
1770: 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 65 73  anchDependencies
1780: 0a 09 24 73 65 6c 66 20 53 6f 72 74 42 72 61 6e  ..$self SortBran
1790: 63 68 65 73 0a 09 24 73 65 6c 66 20 50 72 6f 63  ches..$self Proc
17a0: 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69  essTagDependenci
17b0: 65 73 0a 09 24 73 65 6c 66 20 44 65 74 65 72 6d  es..$self Determ
17c0: 69 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 73 69  ineTheRootRevisi
17d0: 6f 6e 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  on..return.    }
17e0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
17f0: 64 65 73 63 20 7b 64 7d 20 7b 23 20 69 67 6e 6f  desc {d} {# igno
1800: 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  re}..    method 
1810: 65 78 74 65 6e 64 20 7b 72 65 76 6e 72 20 63 6f  extend {revnr co
1820: 6d 6d 69 74 6d 73 67 20 74 65 78 74 72 61 6e 67  mmitmsg textrang
1830: 65 7d 20 7b 0a 09 73 65 74 20 63 6d 69 64 20 5b  e} {..set cmid [
1840: 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 66 63 6d  $myproject defcm
1850: 65 73 73 61 67 65 20 5b 73 74 72 69 6e 67 20 74  essage [string t
1860: 72 69 6d 20 24 63 6f 6d 6d 69 74 6d 73 67 5d 5d  rim $commitmsg]]
1870: 0a 0a 09 73 65 74 20 72 65 76 20 24 6d 79 72 65  ...set rev $myre
1880: 76 28 24 72 65 76 6e 72 29 0a 0a 09 69 66 20 7b  v($revnr)...if {
1890: 5b 24 72 65 76 20 68 61 73 6d 65 74 61 5d 7d 20  [$rev hasmeta]} 
18a0: 7b 0a 09 20 20 20 20 23 20 41 70 70 61 72 65 6e  {..    # Apparen
18b0: 74 6c 79 20 72 65 70 6f 73 69 74 6f 72 69 65 73  tly repositories
18c0: 20 65 78 69 73 74 20 69 6e 20 77 68 69 63 68 20   exist in which 
18d0: 74 68 65 20 64 65 6c 74 61 20 64 61 74 61 0a 09  the delta data..
18e0: 20 20 20 20 23 20 66 6f 72 20 72 65 76 69 73 69      # for revisi
18f0: 6f 6e 20 31 2e 31 20 69 73 20 70 72 6f 76 69 64  on 1.1 is provid
1900: 65 64 20 73 65 76 65 72 61 6c 20 74 69 6d 65 73  ed several times
1910: 2c 20 61 74 20 6c 65 61 73 74 0a 09 20 20 20 20  , at least..    
1920: 23 20 74 77 69 63 65 2e 20 54 68 65 20 61 63 74  # twice. The act
1930: 75 61 6c 20 63 61 75 73 65 20 6f 66 20 74 68 69  ual cause of thi
1940: 73 20 64 75 70 6c 69 63 61 74 69 6f 6e 20 69 73  s duplication is
1950: 20 6e 6f 74 0a 09 20 20 20 20 23 20 6b 6e 6f 77   not..    # know
1960: 6e 2e 20 53 70 65 63 75 6c 61 74 69 6f 6e 20 63  n. Speculation c
1970: 65 6e 74 65 72 73 20 6f 6e 20 52 43 53 2f 43 56  enters on RCS/CV
1980: 53 20 62 75 67 73 2c 20 6f 72 20 66 72 6f 6d 0a  S bugs, or from.
1990: 09 20 20 20 20 23 20 6d 61 6e 75 61 6c 20 65 64  .    # manual ed
19a0: 69 74 73 20 6f 66 20 74 68 65 20 72 65 70 6f 73  its of the repos
19b0: 69 74 6f 72 79 20 77 68 69 63 68 20 62 6f 72 6b  itory which bork
19c0: 65 64 20 74 68 65 0a 09 20 20 20 20 23 20 69 6e  ed the..    # in
19d0: 74 65 72 6e 61 6c 73 2e 20 57 68 61 74 65 76 65  ternals. Whateve
19e0: 72 20 74 68 65 20 63 61 75 73 65 2c 20 74 65 73  r the cause, tes
19f0: 74 69 6e 67 20 73 68 6f 77 65 64 20 74 68 61 74  ting showed that
1a00: 20 62 6f 74 68 0a 09 20 20 20 20 23 20 63 76 73   both..    # cvs
1a10: 20 61 6e 64 20 72 63 73 20 75 73 65 20 74 68 65   and rcs use the
1a20: 20 66 69 72 73 74 20 64 65 66 69 6e 69 74 69 6f   first definitio
1a30: 6e 20 77 68 65 6e 20 70 65 72 66 6f 72 6d 69 6e  n when performin
1a40: 67 20 61 0a 09 20 20 20 20 23 20 63 68 65 63 6b  g a..    # check
1a50: 6f 75 74 2c 20 61 6e 64 20 77 65 20 66 6f 6c 6c  out, and we foll
1a60: 6f 77 20 74 68 65 69 72 20 6c 65 61 64 2e 20 53  ow their lead. S
1a70: 69 64 65 20 6e 6f 74 65 73 3a 20 27 63 76 73 0a  ide notes: 'cvs.
1a80: 09 20 20 20 20 23 20 6c 6f 67 27 20 66 61 69 6c  .    # log' fail
1a90: 73 20 6f 6e 20 73 75 63 68 20 61 20 66 69 6c 65  s on such a file
1aa0: 2c 20 61 6e 64 20 27 63 76 73 20 72 6c 6f 67 27  , and 'cvs rlog'
1ab0: 20 70 72 69 6e 74 73 20 74 68 65 20 6c 6f 67 0a   prints the log.
1ac0: 09 20 20 20 20 23 20 6d 65 73 73 61 67 65 20 66  .    # message f
1ad0: 72 6f 6d 20 74 68 65 20 66 69 72 73 74 20 64 65  rom the first de
1ae0: 6c 74 61 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68  lta, ignoring th
1af0: 65 20 73 65 63 6f 6e 64 2e 0a 0a 09 20 20 20 20  e second....    
1b00: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65  log write 1 file
1b10: 20 22 49 6e 20 66 69 6c 65 20 24 6d 79 70 61 74   "In file $mypat
1b20: 68 20 3a 20 44 75 70 6c 69 63 61 74 65 20 64 65  h : Duplicate de
1b30: 6c 74 61 20 64 61 74 61 20 66 6f 72 20 72 65 76  lta data for rev
1b40: 69 73 69 6f 6e 20 24 72 65 76 6e 72 22 0a 09 20  ision $revnr".. 
1b50: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66     log write 1 f
1b60: 69 6c 65 20 22 49 67 6e 6f 72 69 6e 67 20 74 68  ile "Ignoring th
1b70: 65 20 64 75 70 6c 69 63 61 74 65 22 0a 09 20 20  e duplicate"..  
1b80: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 23 20    return..}...# 
1b90: 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6c 69  Determine the li
1ba0: 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e  ne of developmen
1bb0: 74 20 66 6f 72 20 74 68 65 20 72 65 76 69 73 69  t for the revisi
1bc0: 6f 6e 20 28 70 72 6f 6a 65 63 74 0a 09 23 20 6c  on (project..# l
1bd0: 65 76 65 6c 29 2e 20 54 68 69 73 20 67 69 76 65  evel). This give
1be0: 73 20 75 73 20 74 68 65 20 62 72 61 6e 63 68 69  s us the branchi
1bf0: 64 20 74 6f 6f 2c 20 72 65 71 75 69 72 65 64 20  d too, required 
1c00: 66 6f 72 20 74 68 65 0a 09 23 20 6d 65 74 61 20  for the..# meta 
1c10: 64 61 74 61 20 67 72 6f 75 70 20 74 68 65 20 72  data group the r
1c20: 65 76 69 73 69 6f 6e 20 69 73 20 69 6e 2e 20 28  evision is in. (
1c30: 4e 6f 74 65 3a 20 42 79 20 70 75 74 74 69 6e 67  Note: By putting
1c40: 20 62 6f 74 68 0a 09 23 20 62 72 61 6e 63 68 2f   both..# branch/
1c50: 6c 6f 64 20 61 6e 64 20 70 72 6f 6a 65 63 74 20  lod and project 
1c60: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 74 6f  information into
1c70: 20 74 68 65 20 67 72 6f 75 70 20 77 65 20 65 6e   the group we en
1c80: 73 75 72 65 0a 09 23 20 74 68 61 74 20 61 6e 79  sure..# that any
1c90: 20 63 72 6f 73 73 2d 70 72 6f 6a 65 63 74 20 61   cross-project a
1ca0: 6e 64 20 63 72 6f 73 73 2d 62 72 61 6e 63 68 20  nd cross-branch 
1cb0: 63 6f 6d 6d 69 74 73 20 61 72 65 0a 09 23 20 73  commits are..# s
1cc0: 65 70 61 72 61 74 65 64 20 69 6e 74 6f 20 6d 75  eparated into mu
1cd0: 6c 74 69 70 6c 65 20 63 6f 6d 6d 69 74 73 2c 20  ltiple commits, 
1ce0: 6f 6e 65 20 69 6e 20 65 61 63 68 20 6f 66 20 74  one in each of t
1cf0: 68 65 20 70 72 6f 6a 65 63 74 73 0a 09 23 20 61  he projects..# a
1d00: 6e 64 2f 6f 72 20 62 72 61 6e 63 68 65 73 29 2e  nd/or branches).
1d10: 0a 0a 09 73 65 74 20 6c 6f 64 20 5b 24 73 65 6c  ...set lod [$sel
1d20: 66 20 47 65 74 4c 4f 44 20 24 72 65 76 6e 72 5d  f GetLOD $revnr]
1d30: 0a 0a 09 24 72 65 76 20 73 65 74 6d 65 74 61 20  ...$rev setmeta 
1d40: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 64 65 66 6d  [$myproject defm
1d50: 65 74 61 20 5b 24 6c 6f 64 20 69 64 5d 20 24 6d  eta [$lod id] $m
1d60: 79 61 69 64 28 24 72 65 76 6e 72 29 20 24 63 6d  yaid($revnr) $cm
1d70: 69 64 5d 0a 09 24 72 65 76 20 73 65 74 74 65 78  id]..$rev settex
1d80: 74 20 24 74 65 78 74 72 61 6e 67 65 0a 09 24 72  t $textrange..$r
1d90: 65 76 20 73 65 74 6c 6f 64 20 20 24 6c 6f 64 0a  ev setlod  $lod.
1da0: 0a 09 24 6d 79 62 6c 6f 62 20 65 78 74 65 6e 64  ..$myblob extend
1db0: 20 24 72 65 76 6e 72 20 24 74 65 78 74 72 61 6e   $revnr $textran
1dc0: 67 65 0a 0a 09 23 20 49 66 20 74 68 69 73 20 69  ge...# If this i
1dd0: 73 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 2c 20  s revision 1.1, 
1de0: 77 65 20 68 61 76 65 20 74 6f 20 64 65 74 65 72  we have to deter
1df0: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
1e00: 0a 09 23 20 66 69 6c 65 20 73 65 65 6d 73 20 74  ..# file seems t
1e10: 6f 20 68 61 76 65 20 62 65 65 6e 20 63 72 65 61  o have been crea
1e20: 74 65 64 20 74 68 72 6f 75 67 68 20 27 63 76 73  ted through 'cvs
1e30: 20 61 64 64 27 20 69 6e 73 74 65 61 64 20 6f 66   add' instead of
1e40: 0a 09 23 20 27 63 76 73 20 69 6d 70 6f 72 74 27  ..# 'cvs import'
1e50: 2e 20 54 68 69 73 20 63 61 6e 20 62 65 20 64 6f  . This can be do
1e60: 6e 65 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 61 74  ne by looking at
1e70: 20 74 68 65 20 75 6e 2d 0a 09 23 20 61 64 75 6c   the un-..# adul
1e80: 74 65 72 61 74 65 64 20 63 6f 6d 6d 69 74 20 6d  terated commit m
1e90: 65 73 73 61 67 65 2c 20 61 73 20 43 56 53 20 75  essage, as CVS u
1ea0: 73 65 73 20 61 20 68 61 72 64 77 69 72 65 64 20  ses a hardwired 
1eb0: 6d 61 67 69 63 0a 09 23 20 6d 65 73 73 61 67 65  magic..# message
1ec0: 20 66 6f 72 20 74 68 65 20 6c 61 74 74 65 72 2c   for the latter,
1ed0: 20 69 2e 65 2e 20 22 49 6e 69 74 69 61 6c 20 72   i.e. "Initial r
1ee0: 65 76 69 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a 09  evision\n", no..
1ef0: 23 20 70 65 72 69 6f 64 2e 20 20 28 54 68 69 73  # period.  (This
1f00: 20 66 61 63 74 20 61 6c 73 6f 20 68 65 6c 70 73   fact also helps
1f10: 20 75 73 20 77 68 65 6e 20 74 68 65 20 74 69 6d   us when the tim
1f20: 65 20 63 6f 6d 65 73 20 74 6f 0a 09 23 20 64 65  e comes to..# de
1f30: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
1f40: 74 68 69 73 20 66 69 6c 65 20 6d 69 67 68 74 20  this file might 
1f50: 68 61 76 65 20 68 61 64 20 61 20 64 65 66 61 75  have had a defau
1f60: 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 69 6e 20  lt branch..# in 
1f70: 74 68 65 20 70 61 73 74 2e 29 0a 0a 09 69 66 20  the past.)...if 
1f80: 7b 24 72 65 76 6e 72 20 65 71 20 22 31 2e 31 22  {$revnr eq "1.1"
1f90: 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69  } {..    set myi
1fa0: 6d 70 6f 72 74 65 64 20 5b 65 78 70 72 20 7b 24  mported [expr {$
1fb0: 63 6f 6d 6d 69 74 6d 73 67 20 65 71 20 22 49 6e  commitmsg eq "In
1fc0: 69 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e  itial revision\n
1fd0: 22 7d 5d 0a 09 7d 0a 0a 09 23 20 48 65 72 65 20  "}]..}...# Here 
1fe0: 77 65 20 61 6c 73 6f 20 6b 65 65 70 20 74 72 61  we also keep tra
1ff0: 63 6b 20 6f 66 20 74 68 65 20 6f 72 64 65 72 20  ck of the order 
2000: 69 6e 20 77 68 69 63 68 20 74 68 65 20 72 65 76  in which the rev
2010: 69 73 69 6f 6e 73 0a 09 23 20 77 65 72 65 20 61  isions..# were a
2020: 64 64 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65  dded to the file
2030: 2e 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79 72 65  ....lappend myre
2040: 76 69 73 69 6f 6e 73 20 24 72 65 76 0a 09 72 65  visions $rev..re
2050: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
2060: 6d 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b  method done {} {
2070: 0a 09 23 20 43 6f 6d 70 6c 65 74 65 20 74 68 65  ..# Complete the
2080: 20 72 65 76 69 73 69 6f 6e 73 2c 20 62 72 61 6e   revisions, bran
2090: 63 68 65 73 2c 20 61 6e 64 20 74 61 67 73 2e 20  ches, and tags. 
20a0: 54 68 69 73 20 69 6e 63 6c 75 64 65 73 0a 09 23  This includes..#
20b0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6e   looking for a n
20c0: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
20d0: 20 62 72 61 6e 63 68 2c 20 6d 61 72 6b 69 6e 67   branch, marking
20e0: 20 69 74 73 20 6d 65 6d 62 65 72 73 0a 09 23 20   its members..# 
20f0: 61 6e 64 20 6c 69 6e 6b 69 6e 67 20 74 68 65 6d  and linking them
2100: 20 69 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2c   into the trunk,
2110: 20 70 6f 73 73 69 62 6c 79 20 65 78 63 6c 75 64   possibly exclud
2120: 69 6e 67 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b  ing..# non-trunk
2130: 20 64 61 74 61 2c 20 61 6e 64 20 63 6f 6c 6c 65   data, and colle
2140: 63 74 69 6e 67 20 61 67 67 72 65 67 61 74 65 20  cting aggregate 
2150: 73 79 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63  symbol statistic
2160: 73 2e 0a 0a 09 24 73 65 6c 66 20 44 65 74 65 72  s....$self Deter
2170: 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72  mineRevisionOper
2180: 61 74 69 6f 6e 73 0a 09 24 73 65 6c 66 20 44 65  ations..$self De
2190: 74 65 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65  termineLinesOfDe
21a0: 76 65 6c 6f 70 6d 65 6e 74 0a 09 24 73 65 6c 66  velopment..$self
21b0: 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44   HandleNonTrunkD
21c0: 65 66 61 75 6c 74 42 72 61 6e 63 68 0a 09 24 73  efaultBranch..$s
21d0: 65 6c 66 20 52 65 6d 6f 76 65 49 72 72 65 6c 65  elf RemoveIrrele
21e0: 76 61 6e 74 44 65 6c 65 74 69 6f 6e 73 0a 09 24  vantDeletions..$
21f0: 73 65 6c 66 20 52 65 6d 6f 76 65 49 6e 69 74 69  self RemoveIniti
2200: 61 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e  alBranchDeletion
2210: 73 0a 0a 09 69 66 20 7b 5b 24 6d 79 70 72 6f 6a  s...if {[$myproj
2220: 65 63 74 20 74 72 75 6e 6b 6f 6e 6c 79 5d 7d 20  ect trunkonly]} 
2230: 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 45 78 63  {..    $self Exc
2240: 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f  ludeNonTrunkInfo
2250: 72 6d 61 74 69 6f 6e 0a 09 7d 0a 0a 09 24 73 65  rmation..}...$se
2260: 6c 66 20 41 67 67 72 65 67 61 74 65 53 79 6d 62  lf AggregateSymb
2270: 6f 6c 44 61 74 61 0a 09 72 65 74 75 72 6e 0a 20  olData..return. 
2280: 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23     }..    # # ##
2290: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
22a0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
22b0: 23 0a 20 20 20 20 23 23 20 50 61 73 73 20 58 49  #.    ## Pass XI
22c0: 49 20 28 49 6d 70 6f 72 74 29 2e 0a 0a 20 20 20  I (Import)...   
22d0: 20 6d 65 74 68 6f 64 20 70 75 73 68 74 6f 20 7b   method pushto {
22e0: 72 65 70 6f 73 69 74 6f 72 79 7d 20 7b 0a 09 73  repository} {..s
22f0: 65 74 20 77 73 20 5b 24 72 65 70 6f 73 69 74 6f  et ws [$reposito
2300: 72 79 20 77 6f 72 6b 73 70 61 63 65 5d 0a 09 73  ry workspace]..s
2310: 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69  truct::list assi
2320: 67 6e 20 5b 24 73 65 6c 66 20 45 78 70 61 6e 64  gn [$self Expand
2330: 20 24 77 73 5d 20 66 69 6c 65 6d 61 70 20 72 65   $ws] filemap re
2340: 76 6d 61 70 0a 09 23 20 66 69 6c 65 6d 61 70 20  vmap..# filemap 
2350: 3d 20 64 69 63 74 20 28 70 61 74 68 20 2d 3e 20  = dict (path -> 
2360: 75 75 69 64 29 0a 09 23 20 72 65 76 6d 61 70 20  uuid)..# revmap 
2370: 20 3d 20 64 69 63 74 20 28 70 61 74 68 20 2d 3e   = dict (path ->
2380: 20 72 69 64 29 0a 0a 09 61 72 72 61 79 20 73 65   rid)...array se
2390: 74 20 69 64 6d 61 70 20 5b 24 72 65 70 6f 73 69  t idmap [$reposi
23a0: 74 6f 72 79 20 69 6d 70 6f 72 74 66 69 6c 65 73  tory importfiles
23b0: 20 24 66 69 6c 65 6d 61 70 5d 0a 0a 09 23 20 57   $filemap]...# W
23c0: 69 70 65 20 77 6f 72 6b 73 70 61 63 65 20 63 6c  ipe workspace cl
23d0: 65 61 6e 20 6f 66 20 74 68 65 20 69 6d 70 6f 72  ean of the impor
23e0: 74 65 64 20 66 69 6c 65 73 2e 0a 09 66 6f 72 65  ted files...fore
23f0: 61 63 68 20 78 20 5b 67 6c 6f 62 20 2d 64 69 72  ach x [glob -dir
2400: 65 63 74 6f 72 79 20 24 77 73 20 72 2a 5d 20 7b  ectory $ws r*] {
2410: 20 3a 3a 66 69 6c 65 20 64 65 6c 65 74 65 20 24   ::file delete $
2420: 78 20 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 70  x }...foreach {p
2430: 61 74 68 20 72 69 64 7d 20 24 72 65 76 6d 61 70  ath rid} $revmap
2440: 20 7b 0a 09 20 20 20 20 73 65 74 20 75 75 69 64   {..    set uuid
2450: 20 24 69 64 6d 61 70 28 24 70 61 74 68 29 0a 09   $idmap($path)..
2460: 20 20 20 20 73 74 61 74 65 20 72 75 6e 20 7b 0a      state run {.
2470: 09 09 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 65  ..INSERT INTO re
2480: 76 75 75 69 64 20 28 72 69 64 2c 20 20 75 75 69  vuuid (rid,  uui
2490: 64 29 0a 09 09 56 41 4c 55 45 53 20 20 20 20 20  d)...VALUES     
24a0: 20 20 20 20 20 20 20 20 20 28 24 72 69 64 2c 20           ($rid, 
24b0: 24 75 75 69 64 29 0a 09 20 20 20 20 7d 0a 09 7d  $uuid)..    }..}
24c0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
24d0: 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e      method Expan
24e0: 64 20 7b 64 69 72 7d 20 7b 0a 09 73 65 74 20 65  d {dir} {..set e
24f0: 78 20 5b 73 74 72 75 63 74 3a 3a 67 72 61 70 68  x [struct::graph
2500: 20 65 78 5d 20 3b 20 23 20 45 78 70 61 6e 73 69   ex] ; # Expansi
2510: 6f 6e 20 67 72 61 70 68 2e 0a 09 73 65 74 20 7a  on graph...set z
2520: 70 20 5b 73 74 72 75 63 74 3a 3a 67 72 61 70 68  p [struct::graph
2530: 20 7a 70 5d 20 3b 20 23 20 5a 69 70 2f 49 6d 70   zp] ; # Zip/Imp
2540: 6f 72 74 20 67 72 61 70 68 2e 0a 0a 09 63 6c 6f  ort graph....clo
2550: 73 65 20 5b 6f 70 65 6e 20 24 64 69 72 2f 72 5f  se [open $dir/r_
2560: 5f 65 6d 70 74 79 5f 5f 20 77 5d 3b 23 20 42 61  _empty__ w];# Ba
2570: 73 65 20 66 6f 72 20 64 65 74 61 63 68 65 64 20  se for detached 
2580: 72 6f 6f 74 73 20 6f 6e 20 62 72 61 6e 63 68 65  roots on branche
2590: 73 2e 0a 0a 09 23 20 50 68 61 73 65 20 49 3a 20  s....# Phase I: 
25a0: 50 75 6c 6c 20 74 68 65 20 72 65 76 69 73 69 6f  Pull the revisio
25b0: 6e 73 20 66 72 6f 6d 20 6d 65 6d 6f 72 79 20 61  ns from memory a
25c0: 6e 64 20 66 69 6c 6c 20 74 68 65 20 67 72 61 70  nd fill the grap
25d0: 68 73 0a 09 23 20 20 20 20 20 20 20 20 20 20 77  hs..#          w
25e0: 69 74 68 20 74 68 65 6d 2e 2e 2e 0a 0a 09 73 65  ith them......se
25f0: 74 20 65 61 72 63 73 20 20 20 7b 7d 20 3b 20 23  t earcs   {} ; #
2600: 20 41 72 63 73 20 66 6f 72 20 65 78 70 61 6e 73   Arcs for expans
2610: 69 6f 6e 20 67 72 61 70 68 0a 09 73 65 74 20 7a  ion graph..set z
2620: 61 72 63 73 20 20 20 7b 7d 20 3b 20 23 20 41 72  arcs   {} ; # Ar
2630: 63 73 20 66 6f 72 20 7a 69 70 20 67 72 61 70 68  cs for zip graph
2640: 0a 09 73 65 74 20 72 65 76 6d 61 70 20 20 7b 7d  ..set revmap  {}
2650: 20 3b 20 23 20 70 61 74 68 20 2d 3e 20 72 69 64   ; # path -> rid
2660: 20 6d 61 70 20 74 6f 20 6c 61 74 65 72 20 6d 65   map to later me
2670: 72 67 65 20 75 75 69 64 20 69 6e 66 6f 72 6d 61  rge uuid informa
2680: 74 69 6f 6e 0a 0a 09 66 6f 72 65 61 63 68 20 7b  tion...foreach {
2690: 72 69 64 20 72 65 76 6e 72 20 70 61 72 65 6e 74  rid revnr parent
26a0: 20 63 68 69 6c 64 20 63 6f 66 66 20 63 6c 65 6e   child coff clen
26b0: 20 63 69 64 20 63 70 61 72 65 6e 74 7d 20 5b 73   cid cparent} [s
26c0: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20  tate run {..    
26d0: 53 45 4c 45 43 54 20 42 2e 72 69 64 2c 20 52 2e  SELECT B.rid, R.
26e0: 72 65 76 2c 20 52 2e 70 61 72 65 6e 74 2c 20 52  rev, R.parent, R
26f0: 2e 63 68 69 6c 64 2c 20 42 2e 63 6f 66 66 2c 20  .child, B.coff, 
2700: 42 2e 63 6c 65 6e 2c 20 42 2e 62 69 64 2c 20 42  B.clen, B.bid, B
2710: 2e 70 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20  .pid..    FROM  
2720: 20 20 20 20 20 20 20 20 20 20 62 6c 6f 62 20 42            blob B
2730: 0a 09 20 20 20 20 4c 45 46 54 20 4f 55 54 45 52  ..    LEFT OUTER
2740: 20 4a 4f 49 4e 20 72 65 76 69 73 69 6f 6e 20 52   JOIN revision R
2750: 0a 09 20 20 20 20 4f 4e 20 20 20 20 20 20 20 20  ..    ON        
2760: 20 20 20 20 20 20 42 2e 72 69 64 20 3d 20 52 2e        B.rid = R.
2770: 72 69 64 0a 09 20 20 20 20 57 48 45 52 45 20 20  rid..    WHERE  
2780: 42 2e 66 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d  B.fid = $myid..}
2790: 5d 20 7b 0a 09 20 20 20 20 23 20 4d 61 69 6e 20  ] {..    # Main 
27a0: 64 61 74 61 20 61 72 65 20 62 6c 6f 62 73 2c 20  data are blobs, 
27b0: 6d 6f 73 74 20 77 69 6c 6c 20 68 61 76 65 20 72  most will have r
27c0: 65 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 6e 6f  evisions, but no
27d0: 74 0a 09 20 20 20 20 23 20 61 6c 6c 2e 20 54 68  t..    # all. Th
27e0: 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 61 70  e expansion grap
27f0: 68 20 69 73 20 62 6c 6f 62 20 62 61 73 65 64 2c  h is blob based,
2800: 20 77 68 65 72 65 61 73 20 74 68 65 0a 09 20 20   whereas the..  
2810: 20 20 23 20 72 65 63 6f 6d 70 72 65 73 73 69 6f    # recompressio
2820: 6e 20 67 72 61 70 68 20 69 73 20 72 65 76 69 73  n graph is revis
2830: 69 6f 6e 20 62 61 73 65 64 2e 0a 0a 09 20 20 20  ion based....   
2840: 20 69 66 20 7b 24 72 65 76 6e 72 20 6e 65 20 22   if {$revnr ne "
2850: 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72  "} {...lappend r
2860: 65 76 6d 61 70 20 72 24 72 65 76 6e 72 20 24 72  evmap r$revnr $r
2870: 69 64 0a 0a 09 09 24 7a 70 20 6e 6f 64 65 20 69  id....$zp node i
2880: 6e 73 65 72 74 20 24 72 69 64 0a 09 09 24 7a 70  nsert $rid...$zp
2890: 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 72 69   node set    $ri
28a0: 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a 09  d revnr $revnr..
28b0: 09 24 7a 70 20 6e 6f 64 65 20 73 65 74 20 20 20  .$zp node set   
28c0: 20 24 72 69 64 20 6c 61 62 65 6c 20 3c 24 72 65   $rid label <$re
28d0: 76 6e 72 3e 0a 0a 09 09 69 66 20 7b 24 63 68 69  vnr>....if {$chi
28e0: 6c 64 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20  ld ne ""} {...  
28f0: 20 20 6c 61 70 70 65 6e 64 20 7a 61 72 63 73 20    lappend zarcs 
2900: 24 63 68 69 6c 64 20 24 72 69 64 0a 09 09 7d 0a  $child $rid...}.
2910: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09  .    } else {...
2920: 23 20 57 65 20 66 61 6b 65 20 61 20 72 65 76 6e  # We fake a revn
2930: 72 20 66 6f 72 20 74 68 65 20 62 6c 6f 62 73 20  r for the blobs 
2940: 77 68 69 63 68 20 68 61 76 65 20 6e 6f 0a 09 09  which have no...
2950: 23 20 72 65 76 69 73 69 6f 6e 2c 20 66 6f 72 20  # revision, for 
2960: 75 73 65 20 69 6e 20 74 68 65 20 65 78 70 61 6e  use in the expan
2970: 73 69 6f 6e 20 67 72 61 70 68 2e 0a 09 09 73 65  sion graph....se
2980: 74 20 72 65 76 6e 72 20 67 68 6f 73 74 24 63 69  t revnr ghost$ci
2990: 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23  d..    }...    #
29a0: 20 4e 6f 77 20 74 68 65 20 65 78 70 61 6e 73 69   Now the expansi
29b0: 6f 6e 20 67 72 61 70 68 2e 0a 0a 09 20 20 20 20  on graph....    
29c0: 24 65 78 20 6e 6f 64 65 20 69 6e 73 65 72 74 20  $ex node insert 
29d0: 24 63 69 64 0a 09 20 20 20 20 24 65 78 20 6e 6f  $cid..    $ex no
29e0: 64 65 20 73 65 74 20 20 20 20 24 63 69 64 20 74  de set    $cid t
29f0: 65 78 74 20 20 5b 6c 69 73 74 20 24 63 6f 66 66  ext  [list $coff
2a00: 20 24 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65 78   $clen]..    $ex
2a10: 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 63 69   node set    $ci
2a20: 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a 09  d revnr $revnr..
2a30: 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 65 74      $ex node set
2a40: 20 20 20 20 24 63 69 64 20 6c 61 62 65 6c 20 3c      $cid label <
2a50: 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69 66  $revnr>...    if
2a60: 20 7b 24 63 70 61 72 65 6e 74 20 6e 65 20 22 22   {$cparent ne ""
2a70: 7d 20 7b 0a 09 09 23 20 54 68 65 20 65 78 70 61  } {...# The expa
2a80: 6e 73 69 6f 6e 20 61 72 63 73 20 67 6f 20 66 72  nsion arcs go fr
2a90: 6f 6d 20 62 61 73 65 6c 69 6e 65 20 74 6f 20 64  om baseline to d
2aa0: 65 6c 74 61 0a 09 09 23 20 64 65 73 63 65 6e 64  elta...# descend
2ab0: 61 6e 74 2c 20 62 61 73 65 64 20 6f 6e 20 74 68  ant, based on th
2ac0: 65 20 62 6c 6f 62 20 69 6e 66 6f 72 6d 61 74 69  e blob informati
2ad0: 6f 6e 2e 0a 09 09 6c 61 70 70 65 6e 64 20 65 61  on....lappend ea
2ae0: 72 63 73 20 24 63 70 61 72 65 6e 74 20 24 63 69  rcs $cparent $ci
2af0: 64 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 20  d..    }..}...# 
2b00: 50 68 61 73 65 20 49 49 3a 20 49 6e 73 65 72 74  Phase II: Insert
2b10: 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 65 64   the accumulated
2b20: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 0a 09   dependencies...
2b30: 66 6f 72 65 61 63 68 20 7b 66 72 6f 6d 20 74 6f  foreach {from to
2b40: 7d 20 24 65 61 72 63 73 20 7b 20 24 65 78 20 61  } $earcs { $ex a
2b50: 72 63 20 69 6e 73 65 72 74 20 24 66 72 6f 6d 20  rc insert $from 
2b60: 24 74 6f 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b  $to }..foreach {
2b70: 66 72 6f 6d 20 74 6f 7d 20 24 7a 61 72 63 73 20  from to} $zarcs 
2b80: 7b 20 24 7a 70 20 61 72 63 20 69 6e 73 65 72 74  { $zp arc insert
2b90: 20 24 66 72 6f 6d 20 24 74 6f 20 7d 0a 0a 09 23   $from $to }...#
2ba0: 20 50 68 61 73 65 20 49 49 49 3a 20 54 72 61 76   Phase III: Trav
2bb0: 65 72 73 65 20 74 68 65 20 67 72 61 70 68 73 2c  erse the graphs,
2bc0: 20 65 78 70 61 6e 64 20 74 68 65 20 66 69 6c 65   expand the file
2bd0: 2c 20 61 6e 64 0a 09 23 20 20 20 20 20 20 20 20  , and..#        
2be0: 20 20 20 20 67 65 6e 65 72 61 74 65 20 69 6d 70      generate imp
2bf0: 6f 72 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ort instructions
2c00: 2e 0a 0a 09 73 65 74 20 61 72 63 68 69 76 65 20  ....set archive 
2c10: 5b 3a 3a 66 69 6c 65 20 6a 6f 69 6e 20 5b 24 6d  [::file join [$m
2c20: 79 70 72 6f 6a 65 63 74 20 66 75 6c 6c 70 61 74  yproject fullpat
2c30: 68 5d 20 24 6d 79 70 61 74 68 5d 0a 09 73 65 74  h] $mypath]..set
2c40: 20 61 63 20 20 20 20 20 20 5b 6f 70 65 6e 20 24   ac      [open $
2c50: 61 72 63 68 69 76 65 20 72 5d 0a 09 66 63 6f 6e  archive r]..fcon
2c60: 66 69 67 75 72 65 20 24 61 63 20 2d 74 72 61 6e  figure $ac -tran
2c70: 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a 0a  slation binary..
2c80: 09 23 20 46 69 72 73 74 20 74 72 61 76 65 72 73  .# First travers
2c90: 65 20 74 68 65 20 65 78 70 61 6e 73 69 6f 6e 20  e the expansion 
2ca0: 67 72 61 70 68 2c 20 74 68 69 73 20 67 69 76 65  graph, this give
2cb0: 73 20 75 73 20 74 68 65 0a 09 23 20 72 65 76 69  s us the..# revi
2cc0: 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6f 72 64  sions in the ord
2cd0: 65 72 20 77 65 20 68 61 76 65 20 74 6f 20 65 78  er we have to ex
2ce0: 70 61 6e 64 20 74 68 65 6d 2c 20 77 68 69 63 68  pand them, which
2cf0: 20 77 65 20 64 6f 2e 0a 0a 09 73 65 74 20 6d 61   we do....set ma
2d00: 78 20 5b 6c 6c 65 6e 67 74 68 20 5b 24 65 78 20  x [llength [$ex 
2d10: 6e 6f 64 65 73 5d 5d 0a 09 73 65 74 20 6d 79 69  nodes]]..set myi
2d20: 6d 70 6f 72 74 20 30 0a 0a 09 67 74 63 6f 72 65  mport 0...gtcore
2d30: 20 64 61 74 61 63 6d 64 20 20 20 5b 6d 79 6d 65   datacmd   [myme
2d40: 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74 61 5d  thod ExpandData]
2d50: 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d 61 74 63  ..gtcore formatc
2d60: 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70  md [mymethod Exp
2d70: 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67 74 63 6f  andFormat]..gtco
2d80: 72 65 20 73 6f 72 74 63 6d 64 20 20 20 5b 6d 79  re sortcmd   [my
2d90: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53 6f 72  method ExpandSor
2da0: 74 5d 0a 09 67 74 63 6f 72 65 20 73 61 76 65 63  t]..gtcore savec
2db0: 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45  md   [mymethod E
2dc0: 78 70 61 6e 64 31 20 24 61 63 20 24 64 69 72 20  xpand1 $ac $dir 
2dd0: 24 6d 61 78 5d 0a 0a 09 67 74 63 6f 72 65 20 74  $max]...gtcore t
2de0: 72 61 76 65 72 73 65 20 24 65 78 20 7b 45 78 70  raverse $ex {Exp
2df0: 61 6e 64 69 6e 67 20 72 65 76 69 73 69 6f 6e 73  anding revisions
2e00: 2e 2e 2e 7d 0a 09 63 6c 6f 73 65 20 24 61 63 0a  ...}..close $ac.
2e10: 0a 09 23 20 4e 6f 77 20 74 72 61 76 65 72 73 65  ..# Now traverse
2e20: 20 74 68 65 20 69 6d 70 6f 72 74 20 67 72 61 70   the import grap
2e30: 68 2c 20 74 68 69 73 20 62 75 69 6c 64 73 20 74  h, this builds t
2e40: 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 09  he instruction..
2e50: 23 20 6d 61 70 20 66 6f 72 20 74 68 65 20 66 6f  # map for the fo
2e60: 73 73 69 6c 20 64 65 6c 74 61 73 2e 0a 0a 09 67  ssil deltas....g
2e70: 74 63 6f 72 65 20 64 61 74 61 63 6d 64 20 20 20  tcore datacmd   
2e80: 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64  [mymethod Expand
2e90: 44 61 74 61 5d 0a 09 67 74 63 6f 72 65 20 66 6f  Data]..gtcore fo
2ea0: 72 6d 61 74 63 6d 64 20 5b 6d 79 6d 65 74 68 6f  rmatcmd [mymetho
2eb0: 64 20 45 78 70 61 6e 64 46 6f 72 6d 61 74 5d 0a  d ExpandFormat].
2ec0: 09 67 74 63 6f 72 65 20 73 6f 72 74 63 6d 64 20  .gtcore sortcmd 
2ed0: 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61    [mymethod Expa
2ee0: 6e 64 53 6f 72 74 5d 0a 09 67 74 63 6f 72 65 20  ndSort]..gtcore 
2ef0: 73 61 76 65 63 6d 64 20 20 20 5b 6d 79 6d 65 74  savecmd   [mymet
2f00: 68 6f 64 20 45 78 70 61 6e 64 32 5d 0a 0a 09 73  hod Expand2]...s
2f10: 65 74 20 6d 79 69 6d 70 6f 72 74 20 7b 7d 0a 09  et myimport {}..
2f20: 67 74 63 6f 72 65 20 74 72 61 76 65 72 73 65 20  gtcore traverse 
2f30: 24 7a 70 20 7b 47 65 6e 65 72 61 74 69 6e 67 20  $zp {Generating 
2f40: 72 65 76 69 73 69 6f 6e 20 6f 72 64 65 72 20 66  revision order f
2f50: 6f 72 20 69 6d 70 6f 72 74 2e 2e 2e 7d 0a 09 73  or import...}..s
2f60: 65 74 20 66 69 6c 65 6d 61 70 20 24 6d 79 69 6d  et filemap $myim
2f70: 70 6f 72 74 0a 09 75 6e 73 65 74 20 6d 79 69 6d  port..unset myim
2f80: 70 6f 72 74 0a 0a 09 23 20 41 6e 64 20 62 61 63  port...# And bac
2f90: 6b 20 74 6f 20 69 6d 70 6f 72 74 20 63 6f 6e 74  k to import cont
2fa0: 72 6f 6c 0a 0a 09 24 65 78 20 64 65 73 74 72 6f  rol...$ex destro
2fb0: 79 0a 09 24 7a 70 20 64 65 73 74 72 6f 79 0a 0a  y..$zp destroy..
2fc0: 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 66  .return [list $f
2fd0: 69 6c 65 6d 61 70 20 24 72 65 76 6d 61 70 5d 0a  ilemap $revmap].
2fe0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
2ff0: 64 20 45 78 70 61 6e 64 44 61 74 61 20 20 20 7b  d ExpandData   {
3000: 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 20 72 65  graph node} { re
3010: 74 75 72 6e 20 5b 24 67 72 61 70 68 20 6e 6f 64  turn [$graph nod
3020: 65 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76 6e  e get $node revn
3030: 72 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  r] }.    method 
3040: 45 78 70 61 6e 64 46 6f 72 6d 61 74 20 7b 67 72  ExpandFormat {gr
3050: 61 70 68 20 69 74 65 6d 7d 20 7b 20 72 65 74 75  aph item} { retu
3060: 72 6e 20 3c 5b 6c 69 6e 64 65 78 20 24 69 74 65  rn <[lindex $ite
3070: 6d 20 31 5d 3e 20 7d 20 3b 20 23 20 72 65 76 6e  m 1]> } ; # revn
3080: 72 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70  r.    method Exp
3090: 61 6e 64 53 6f 72 74 20 20 20 7b 67 72 61 70 68  andSort   {graph
30a0: 20 63 61 6e 64 69 64 61 74 65 73 7d 20 7b 0a 09   candidates} {..
30b0: 23 20 63 61 6e 64 69 64 61 74 65 73 20 3d 20 6c  # candidates = l
30c0: 69 73 74 28 69 74 65 6d 29 2c 20 69 74 65 6d 20  ist(item), item 
30d0: 3d 20 6c 69 73 74 28 6e 6f 64 65 20 72 65 76 6e  = list(node revn
30e0: 72 29 0a 09 23 20 53 6f 72 74 20 62 79 20 6e 6f  r)..# Sort by no
30f0: 64 65 20 61 6e 64 20 72 65 76 6e 72 20 2d 3e 20  de and revnr -> 
3100: 54 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20  Trunk revisions 
3110: 63 6f 6d 65 20 66 69 72 73 74 2e 0a 09 72 65 74  come first...ret
3120: 75 72 6e 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65  urn [lsort -inde
3130: 78 20 31 20 2d 64 69 63 74 20 5b 6c 73 6f 72 74  x 1 -dict [lsort
3140: 20 2d 69 6e 64 65 78 20 30 20 2d 64 69 63 74 20   -index 0 -dict 
3150: 24 63 61 6e 64 69 64 61 74 65 73 5d 5d 0a 20 20  $candidates]].  
3160: 20 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 45    }.    method E
3170: 78 70 61 6e 64 31 20 7b 63 68 61 6e 20 64 69 72  xpand1 {chan dir
3180: 20 6d 61 78 20 67 72 61 70 68 20 6e 6f 64 65 7d   max graph node}
3190: 20 7b 0a 09 6c 6f 67 20 70 72 6f 67 72 65 73 73   {..log progress
31a0: 20 33 20 66 69 6c 65 20 24 6d 79 69 6d 70 6f 72   3 file $myimpor
31b0: 74 20 24 6d 61 78 20 3b 20 69 6e 63 72 20 6d 79  t $max ; incr my
31c0: 69 6d 70 6f 72 74 0a 0a 09 73 65 74 20 72 65 76  import...set rev
31d0: 6e 72 20 20 20 20 20 20 20 20 20 20 20 5b 24 67  nr           [$g
31e0: 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e  raph node get $n
31f0: 6f 64 65 20 72 65 76 6e 72 5d 0a 09 73 65 74 20  ode revnr]..set 
3200: 66 6e 61 6d 65 20 20 20 20 20 20 20 20 20 20 72  fname          r
3210: 24 72 65 76 6e 72 0a 09 73 74 72 75 63 74 3a 3a  $revnr..struct::
3220: 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 24 67 72  list assign [$gr
3230: 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f  aph node get $no
3240: 64 65 20 74 65 78 74 5d 20 6f 66 66 73 65 74 20  de text] offset 
3250: 6c 65 6e 67 74 68 0a 0a 09 69 66 20 7b 24 6c 65  length...if {$le
3260: 6e 67 74 68 20 3c 20 30 7d 20 7b 0a 09 20 20 20  ngth < 0} {..   
3270: 20 73 65 74 20 64 61 74 61 20 22 22 0a 09 7d 20   set data ""..} 
3280: 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 65 6b  else {..    seek
3290: 20 24 63 68 61 6e 20 24 6f 66 66 73 65 74 20 73   $chan $offset s
32a0: 74 61 72 74 0a 09 20 20 20 20 73 65 74 20 64 61  tart..    set da
32b0: 74 61 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b  ta [string map {
32c0: 40 40 20 40 7d 20 5b 72 65 61 64 20 24 63 68 61  @@ @} [read $cha
32d0: 6e 20 24 6c 65 6e 67 74 68 5d 5d 0a 09 7d 0a 0a  n $length]]..}..
32e0: 09 69 66 20 7b 21 5b 24 67 72 61 70 68 20 6e 6f  .if {![$graph no
32f0: 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6e 6f  de keyexists $no
3300: 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a  de __base__]} {.
3310: 09 20 20 20 20 23 20 46 75 6c 6c 20 74 65 78 74  .    # Full text
3320: 20 6e 6f 64 65 2e 20 47 65 74 20 74 68 65 20 64   node. Get the d
3330: 61 74 61 2c 20 64 65 63 6f 64 65 20 69 74 2c 20  ata, decode it, 
3340: 61 6e 64 20 73 61 76 65 2e 0a 0a 09 20 20 20 20  and save....    
3350: 6c 6f 67 20 77 72 69 74 65 20 38 20 66 69 6c 65  log write 8 file
3360: 20 7b 45 78 70 61 6e 64 69 6e 67 20 3c 24 72 65   {Expanding <$re
3370: 76 6e 72 3e 2c 20 66 75 6c 6c 20 74 65 78 74 7d  vnr>, full text}
3380: 0a 0a 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a  ...    fileutil:
3390: 3a 77 72 69 74 65 46 69 6c 65 20 2d 74 72 61 6e  :writeFile -tran
33a0: 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 20 24  slation binary $
33b0: 64 69 72 2f 24 66 6e 61 6d 65 20 24 64 61 74 61  dir/$fname $data
33c0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20  ..} else {..    
33d0: 23 20 44 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f  # Delta node. __
33e0: 62 61 73 65 5f 5f 20 69 73 20 74 68 65 20 6e 61  base__ is the na
33f0: 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63  me of the file c
3400: 6f 6e 74 61 69 6e 69 6e 67 0a 09 20 20 20 20 23  ontaining..    #
3410: 20 74 68 65 20 62 61 73 65 6c 69 6e 65 2e 20 54   the baseline. T
3420: 68 65 20 70 61 74 63 68 20 69 73 20 61 74 20 74  he patch is at t
3430: 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 6f 63  he specified loc
3440: 61 74 69 6f 6e 20 6f 66 0a 09 20 20 20 20 23 20  ation of..    # 
3450: 74 68 65 20 61 72 63 68 69 76 65 20 66 69 6c 65  the archive file
3460: 2e 0a 0a 09 20 20 20 20 73 65 74 20 66 62 61 73  ....    set fbas
3470: 65 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67  e [$graph node g
3480: 65 74 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f  et $node __base_
3490: 5f 5d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  _]..    log writ
34a0: 65 20 38 20 66 69 6c 65 20 7b 45 78 70 61 6e 64  e 8 file {Expand
34b0: 69 6e 67 20 3c 24 72 65 76 6e 72 3e 2c 20 69 73  ing <$revnr>, is
34c0: 20 64 65 6c 74 61 20 6f 66 20 3c 24 66 62 61 73   delta of <$fbas
34d0: 65 3e 7d 0a 0a 09 20 20 20 20 73 65 74 20 62 61  e>}...    set ba
34e0: 73 65 20 5b 66 69 6c 65 75 74 69 6c 3a 3a 63 61  se [fileutil::ca
34f0: 74 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62  t -translation b
3500: 69 6e 61 72 79 20 24 64 69 72 2f 24 66 62 61 73  inary $dir/$fbas
3510: 65 5d 0a 0a 09 20 20 20 20 23 20 57 72 69 74 69  e]...    # Writi
3520: 6e 67 20 74 68 65 20 70 61 74 63 68 20 74 6f 20  ng the patch to 
3530: 64 69 73 6b 20 69 73 20 6a 75 73 74 20 66 6f 72  disk is just for
3540: 20 62 65 74 74 65 72 0a 09 20 20 20 20 23 20 64   better..    # d
3550: 65 62 75 67 67 69 6e 67 2e 20 49 74 20 69 73 20  ebugging. It is 
3560: 6e 6f 74 20 75 73 65 64 20 6f 74 68 65 72 77 69  not used otherwi
3570: 73 65 2e 0a 09 20 20 20 20 66 69 6c 65 75 74 69  se...    fileuti
3580: 6c 3a 3a 77 72 69 74 65 46 69 6c 65 20 24 64 69  l::writeFile $di
3590: 72 2f 72 70 61 74 63 68 20 24 64 61 74 61 0a 09  r/rpatch $data..
35a0: 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72      fileutil::wr
35b0: 69 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61  iteFile -transla
35c0: 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72  tion binary $dir
35d0: 2f 24 66 6e 61 6d 65 20 5c 0a 09 09 5b 41 70 70  /$fname \...[App
35e0: 6c 79 20 24 62 61 73 65 20 24 64 61 74 61 5d 0a  ly $base $data].
35f0: 09 7d 0a 0a 09 23 20 50 6f 73 74 20 74 6f 20 61  .}...# Post to a
3600: 6c 6c 20 73 75 63 63 65 73 73 6f 72 73 20 74 68  ll successors th
3610: 61 74 20 74 68 65 20 6a 75 73 74 20 67 65 6e 65  at the just gene
3620: 72 61 74 65 64 20 66 69 6c 65 20 69 73 20 74 68  rated file is th
3630: 65 69 72 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e  eir..# baseline.
3640: 0a 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20 5b  ...foreach out [
3650: 24 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75  $graph nodes -ou
3660: 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20  t $node] {..    
3670: 24 67 72 61 70 68 20 6e 6f 64 65 20 73 65 74 20  $graph node set 
3680: 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 20 24 66  $out __base__ $f
3690: 6e 61 6d 65 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  name..}..return.
36a0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
36b0: 41 70 70 6c 79 20 7b 62 61 73 65 20 64 65 6c 74  Apply {base delt
36c0: 61 7d 20 7b 0a 09 23 20 62 61 73 65 20 20 3d 20  a} {..# base  = 
36d0: 62 61 73 65 20 74 65 78 74 2e 0a 09 23 20 64 65  base text...# de
36e0: 6c 74 61 20 3d 20 64 65 6c 74 61 20 69 6e 20 72  lta = delta in r
36f0: 63 73 20 66 6f 72 6d 61 74 2e 0a 09 23 0a 09 23  cs format...#..#
3700: 20 42 6f 74 68 20 73 74 72 69 6e 67 73 20 61 72   Both strings ar
3710: 65 20 75 6e 65 6e 63 6f 64 65 64 2c 20 69 2e 65  e unencoded, i.e
3720: 2e 20 74 68 69 6e 67 73 20 6c 69 6b 65 20 40 40  . things like @@
3730: 2c 20 65 74 63 2e 20 68 61 76 65 0a 09 23 20 61  , etc. have..# a
3740: 6c 72 65 61 64 79 20 62 65 65 6e 20 72 65 70 6c  lready been repl
3750: 61 63 65 64 20 77 69 74 68 20 74 68 65 69 72 20  aced with their 
3760: 70 72 6f 70 65 72 20 63 68 61 72 61 63 74 65 72  proper character
3770: 73 2e 0a 09 23 0a 09 23 20 52 65 74 75 72 6e 20  s...#..# Return 
3780: 76 61 6c 75 65 20 69 73 20 74 68 65 20 70 61 74  value is the pat
3790: 63 68 65 64 20 74 65 78 74 2e 0a 0a 09 73 65 74  ched text....set
37a0: 20 62 61 73 65 20 5b 73 70 6c 69 74 20 24 62 61   base [split $ba
37b0: 73 65 20 5c 6e 5d 0a 09 73 65 74 20 62 6c 65 6e  se \n]..set blen
37c0: 20 5b 6c 6c 65 6e 67 74 68 20 24 62 61 73 65 5d   [llength $base]
37d0: 0a 09 73 65 74 20 6f 6f 66 66 20 30 0a 09 73 65  ..set ooff 0..se
37e0: 74 20 72 65 73 20 22 22 0a 0a 09 73 65 74 20 6c  t res ""...set l
37f0: 69 6e 65 73 20 20 5b 73 70 6c 69 74 20 24 64 65  ines  [split $de
3800: 6c 74 61 20 5c 6e 5d 0a 09 73 65 74 20 6e 6c 69  lta \n]..set nli
3810: 6e 65 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69  nes [llength $li
3820: 6e 65 73 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65  nes]...log write
3830: 20 31 31 20 66 69 6c 65 20 7b 42 61 73 65 20 20   11 file {Base  
3840: 6c 69 6e 65 73 20 3d 20 24 62 6c 65 6e 7d 0a 09  lines = $blen}..
3850: 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c  log write 11 fil
3860: 65 20 7b 44 65 6c 74 61 20 6c 69 6e 65 73 20 3d  e {Delta lines =
3870: 20 24 6e 6c 69 6e 65 73 7d 0a 0a 09 66 6f 72 20   $nlines}...for 
3880: 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20  {set i 0} {$i < 
3890: 24 6e 6c 69 6e 65 73 7d 20 7b 7d 20 7b 0a 09 20  $nlines} {} {.. 
38a0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20     log write 11 
38b0: 66 69 6c 65 20 7b 20 20 20 20 40 20 24 69 20 3d  file {    @ $i =
38c0: 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20   [lindex $lines 
38d0: 24 69 5d 7d 0a 09 20 20 20 20 6c 6f 67 20 77 72  $i]}..    log wr
38e0: 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 6f 6f  ite 11 file { oo
38f0: 66 66 20 24 6f 6f 66 66 7d 0a 0a 09 20 20 20 20  ff $ooff}...    
3900: 69 66 20 7b 21 5b 72 65 67 65 78 70 20 7b 5e 28  if {![regexp {^(
3910: 5b 61 64 5d 29 28 5c 64 2b 29 5c 73 28 5c 64 2b  [ad])(\d+)\s(\d+
3920: 29 24 7d 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e  )$} [lindex $lin
3930: 65 73 20 24 69 5d 20 2d 3e 20 63 6d 64 20 73 6c  es $i] -> cmd sl
3940: 20 63 6e 5d 7d 20 7b 0a 09 09 74 72 6f 75 62 6c   cn]} {...troubl
3950: 65 20 69 6e 74 65 72 6e 61 6c 20 22 42 61 64 20  e internal "Bad 
3960: 65 64 20 63 6f 6d 6d 61 6e 64 20 27 5b 6c 69 6e  ed command '[lin
3970: 64 65 78 20 24 6c 69 6e 65 73 20 24 69 5d 27 22  dex $lines $i]'"
3980: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 6c 6f  ..    }...    lo
3990: 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 20  g write 11 file 
39a0: 7b 20 20 63 6d 64 20 24 63 6d 64 7d 0a 09 20 20  {  cmd $cmd}..  
39b0: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66    log write 11 f
39c0: 69 6c 65 20 7b 20 20 20 73 6c 20 24 73 6c 7d 0a  ile {   sl $sl}.
39d0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31  .    log write 1
39e0: 31 20 66 69 6c 65 20 7b 20 20 20 63 6e 20 24 63  1 file {   cn $c
39f0: 6e 7d 0a 0a 09 20 20 20 20 69 6e 63 72 20 69 0a  n}...    incr i.
3a00: 09 20 20 20 20 73 65 74 20 65 6c 20 5b 65 78 70  .    set el [exp
3a10: 72 20 7b 24 73 6c 20 2b 20 24 63 6e 7d 5d 0a 0a  r {$sl + $cn}]..
3a20: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31  .    log write 1
3a30: 31 20 66 69 6c 65 20 7b 20 20 20 65 6c 20 24 65  1 file {   el $e
3a40: 6c 7d 0a 0a 09 20 20 20 20 73 77 69 74 63 68 20  l}...    switch 
3a50: 2d 65 78 61 63 74 20 2d 2d 20 24 63 6d 64 20 7b  -exact -- $cmd {
3a60: 0a 09 09 64 20 7b 0a 09 09 20 20 20 20 69 6e 63  ...d {...    inc
3a70: 72 20 73 6c 20 2d 31 0a 09 09 20 20 20 20 69 6e  r sl -1...    in
3a80: 63 72 20 65 6c 20 2d 31 0a 09 09 20 20 20 20 69  cr el -1...    i
3a90: 66 20 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 7d 20  f {$sl < $ooff} 
3aa0: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e  { trouble intern
3ab0: 61 6c 20 7b 44 65 6c 65 74 69 6f 6e 20 62 65 66  al {Deletion bef
3ac0: 6f 72 65 20 6c 61 73 74 20 65 64 69 74 7d 20 7d  ore last edit} }
3ad0: 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c 20 3e  ...    if {$sl >
3ae0: 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c   $blen} { troubl
3af0: 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c 65  e internal {Dele
3b00: 74 69 6f 6e 20 70 61 73 74 20 66 69 6c 65 20 65  tion past file e
3b10: 6e 64 7d 20 7d 0a 09 09 20 20 20 20 69 66 20 7b  nd} }...    if {
3b20: 24 65 6c 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 74  $el > $blen} { t
3b30: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20  rouble internal 
3b40: 7b 44 65 6c 65 74 69 6f 6e 20 62 65 79 6f 6e 64  {Deletion beyond
3b50: 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 09 09 20   file end} }... 
3b60: 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c 72     foreach x [lr
3b70: 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66  ange $base $ooff
3b80: 20 24 73 6c 5d 20 7b 20 6c 61 70 70 65 6e 64 20   $sl] { lappend 
3b90: 72 65 73 20 24 78 20 7d 0a 09 09 20 20 20 20 73  res $x }...    s
3ba0: 65 74 20 20 6f 6f 66 66 20 24 65 6c 0a 09 09 7d  et  ooff $el...}
3bb0: 0a 09 09 61 20 7b 0a 09 09 20 20 20 20 69 66 20  ...a {...    if 
3bc0: 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20  {$sl < $ooff} { 
3bd0: 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c  trouble internal
3be0: 20 7b 49 6e 73 65 72 74 20 62 65 66 6f 72 65 20   {Insert before 
3bf0: 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 09 20  last edit} }... 
3c00: 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c     if {$sl > $bl
3c10: 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e  en} { trouble in
3c20: 74 65 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20 70  ternal {Insert p
3c30: 61 73 74 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a  ast file end} }.
3c40: 0a 09 09 20 20 20 20 66 6f 72 65 61 63 68 20 78  ...    foreach x
3c50: 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65 20 24   [lrange $base $
3c60: 6f 6f 66 66 20 24 73 6c 5d 20 20 20 20 20 20 20  ooff $sl]       
3c70: 20 20 20 20 20 20 7b 20 6c 61 70 70 65 6e 64 20        { lappend 
3c80: 72 65 73 20 24 78 20 7d 0a 09 09 20 20 20 20 66  res $x }...    f
3c90: 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 65  oreach x [lrange
3ca0: 20 24 6c 69 6e 65 73 20 24 69 20 5b 65 78 70 72   $lines $i [expr
3cb0: 20 7b 24 69 20 2b 20 24 63 6e 7d 5d 5d 20 7b 20   {$i + $cn}]] { 
3cc0: 6c 61 70 70 65 6e 64 20 72 65 73 20 24 78 20 7d  lappend res $x }
3cd0: 0a 09 09 20 20 20 20 73 65 74 20 6f 6f 66 66 20  ...    set ooff 
3ce0: 24 73 6c 0a 09 09 20 20 20 20 69 6e 63 72 20 69  $sl...    incr i
3cf0: 20 24 63 6e 0a 09 09 7d 0a 09 20 20 20 20 7d 0a   $cn...}..    }.
3d00: 09 7d 0a 09 66 6f 72 65 61 63 68 20 78 20 5b 6c  .}..foreach x [l
3d10: 72 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66  range $base $oof
3d20: 66 20 65 6e 64 5d 20 7b 20 6c 61 70 70 65 6e 64  f end] { lappend
3d30: 20 72 65 73 20 24 78 20 7d 0a 09 72 65 74 75 72   res $x }..retur
3d40: 6e 20 5b 6a 6f 69 6e 20 24 72 65 73 20 5c 6e 5d  n [join $res \n]
3d50: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
3d60: 6f 64 20 45 78 70 61 6e 64 32 20 7b 67 72 61 70  od Expand2 {grap
3d70: 68 20 6e 6f 64 65 7d 20 7b 0a 09 73 65 74 20 72  h node} {..set r
3d80: 65 76 6e 72 20 5b 24 67 72 61 70 68 20 6e 6f 64  evnr [$graph nod
3d90: 65 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76 6e  e get $node revn
3da0: 72 5d 0a 0a 09 23 20 46 69 72 73 74 20 69 6d 70  r]...# First imp
3db0: 6f 72 74 20 74 68 65 20 66 69 6c 65 2e 0a 09 6c  ort the file...l
3dc0: 61 70 70 65 6e 64 20 6d 79 69 6d 70 6f 72 74 20  append myimport 
3dd0: 5b 6c 69 73 74 20 41 20 72 24 72 65 76 6e 72 20  [list A r$revnr 
3de0: 7b 7d 5d 0a 0a 09 69 66 20 7b 5b 24 67 72 61 70  {}]...if {[$grap
3df0: 68 20 6e 6f 64 65 20 6b 65 79 65 78 69 73 74 73  h node keyexists
3e00: 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d   $node __base__]
3e10: 7d 20 7b 0a 09 20 20 20 20 23 20 44 65 6c 74 61  } {..    # Delta
3e20: 20 6e 6f 64 65 2e 20 5f 5f 62 61 73 65 5f 5f 20   node. __base__ 
3e30: 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  is the name of t
3e40: 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69  he file containi
3e50: 6e 67 0a 09 20 20 20 20 23 20 74 68 65 20 62 61  ng..    # the ba
3e60: 73 65 6c 69 6e 65 2e 20 47 65 6e 65 72 61 74 65  seline. Generate
3e70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20   instruction to 
3e80: 6d 61 6b 65 20 74 68 65 20 64 65 6c 74 61 20 61  make the delta a
3e90: 73 0a 09 20 20 20 20 23 20 77 65 6c 6c 2e 0a 0a  s..    # well...
3ea0: 09 20 20 20 20 73 65 74 20 66 62 61 73 65 20 5b  .    set fbase [
3eb0: 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20  $graph node get 
3ec0: 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a  $node __base__].
3ed0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 69  .    lappend myi
3ee0: 6d 70 6f 72 74 20 5b 6c 69 73 74 20 44 20 72 24  mport [list D r$
3ef0: 72 65 76 6e 72 20 72 24 66 62 61 73 65 5d 0a 09  revnr r$fbase]..
3f00: 7d 0a 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 6c  }...# Post to al
3f10: 6c 20 73 75 63 63 65 73 73 6f 72 73 20 74 68 61  l successors tha
3f20: 74 20 74 68 65 20 6a 75 73 74 20 67 65 6e 65 72  t the just gener
3f30: 61 74 65 64 20 66 69 6c 65 20 69 73 20 74 68 65  ated file is the
3f40: 69 72 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e 20  ir..# baseline. 
3f50: 45 78 63 65 70 74 69 6f 6e 3a 20 54 68 6f 73 65  Exception: Those
3f60: 20 77 68 69 63 68 20 61 76 65 20 61 6c 72 65 61   which ave alrea
3f70: 64 79 20 61 20 62 61 73 65 6c 69 6e 65 20 73 65  dy a baseline se
3f80: 74 2e 0a 09 23 20 54 6f 67 65 74 68 65 72 20 77  t...# Together w
3f90: 69 74 68 20 74 68 65 20 73 6f 72 74 69 6e 67 20  ith the sorting 
3fa0: 6f 66 20 74 72 75 6e 6b 20 72 65 76 69 73 69 6f  of trunk revisio
3fb0: 6e 73 20 66 69 72 73 74 20 74 68 65 20 74 72 75  ns first the tru
3fc0: 6e 6b 0a 09 23 20 73 68 6f 75 6c 64 20 6f 6e 65  nk..# should one
3fd0: 20 75 6e 69 6e 74 65 72 75 70 74 65 64 20 6c 69   uninterupted li
3fe0: 6e 65 2c 20 77 69 74 68 20 62 72 61 6e 63 68 20  ne, with branch 
3ff0: 72 6f 6f 74 73 20 5f 6e 6f 74 5f 20 64 65 6c 74  roots _not_ delt
4000: 61 0a 09 23 20 63 6f 6d 70 72 65 73 73 65 64 20  a..# compressed 
4010: 70 65 72 20 74 68 65 69 72 20 62 72 61 6e 63 68  per their branch
4020: 65 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 6f 75  es....foreach ou
4030: 74 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 73 20  t [$graph nodes 
4040: 2d 6f 75 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 20  -out $node] {.. 
4050: 20 20 20 69 66 20 7b 5b 24 67 72 61 70 68 20 6e     if {[$graph n
4060: 6f 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6f  ode keyexists $o
4070: 75 74 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 63 6f  ut __base__]} co
4080: 6e 74 69 6e 75 65 0a 09 20 20 20 20 24 67 72 61  ntinue..    $gra
4090: 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f 75 74  ph node set $out
40a0: 20 5f 5f 62 61 73 65 5f 5f 20 24 72 65 76 6e 72   __base__ $revnr
40b0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
40c0: 7d 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  }..    variable 
40d0: 6d 79 69 6d 70 6f 72 74 0a 0a 20 20 20 20 23 20  myimport..    # 
40e0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
40f0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
4100: 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 74 61  #####.    ## Sta
4110: 74 65 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65  te..    variable
4120: 20 6d 79 69 64 20 20 20 20 20 20 20 20 20 20 20   myid           
4130: 20 20 20 7b 7d 20 3b 20 23 20 46 69 6c 65 20 69     {} ; # File i
4140: 64 20 69 6e 20 74 68 65 20 70 65 72 73 69 73 74  d in the persist
4150: 65 6e 74 20 73 74 61 74 65 2e 0a 20 20 20 20 76  ent state..    v
4160: 61 72 69 61 62 6c 65 20 6d 79 70 61 74 68 20 20  ariable mypath  
4170: 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23            {} ; #
4180: 20 50 61 74 68 20 6f 66 20 74 68 65 20 66 69 6c   Path of the fil
4190: 65 27 73 20 72 63 73 20 61 72 63 68 69 76 65 2e  e's rcs archive.
41a0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
41b0: 75 73 72 70 61 74 68 20 20 20 20 20 20 20 20 20  usrpath         
41c0: 7b 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74  {} ; # Path of t
41d0: 68 65 20 66 69 6c 65 20 61 73 20 73 65 65 6e 20  he file as seen 
41e0: 62 79 20 75 73 65 72 73 2e 0a 20 20 20 20 76 61  by users..    va
41f0: 72 69 61 62 6c 65 20 6d 79 65 78 65 63 75 74 61  riable myexecuta
4200: 62 6c 65 20 20 20 20 20 20 30 20 20 3b 20 23 20  ble      0  ; # 
4210: 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 20 27 66 69  Boolean flag 'fi
4220: 6c 65 20 65 78 65 63 75 74 61 62 6c 65 27 2e 0a  le executable'..
4230: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70      variable myp
4240: 72 6f 6a 65 63 74 20 20 20 20 20 20 20 20 20 7b  roject         {
4250: 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20  } ; # Reference 
4260: 74 6f 20 74 68 65 20 70 72 6f 6a 65 63 74 20 6f  to the project o
4270: 62 6a 65 63 74 0a 09 09 09 09 20 20 20 20 23 20  bject.....    # 
4280: 74 68 65 20 66 69 6c 65 20 62 65 6c 6f 6e 67 73  the file belongs
4290: 20 74 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c   to..    variabl
42a0: 65 20 6d 79 72 65 76 20 2d 61 72 72 61 79 20 20  e myrev -array  
42b0: 20 20 20 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20      {} ; # Maps 
42c0: 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20  revision number 
42d0: 74 6f 20 74 68 65 0a 09 09 09 09 20 20 20 20 23  to the.....    #
42e0: 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 76 69   associated revi
42f0: 73 69 6f 6e 20 6f 62 6a 65 63 74 2e 0a 20 20 20  sion object..   
4300: 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65 76 69   variable myrevi
4310: 73 69 6f 6e 73 20 20 20 20 20 20 20 7b 7d 20 3b  sions       {} ;
4320: 20 23 20 53 61 6d 65 20 61 73 20 6d 79 72 65 76   # Same as myrev
4330: 2c 20 62 75 74 20 61 20 6c 69 73 74 2c 0a 09 09  , but a list,...
4340: 09 09 20 20 20 20 23 20 67 69 76 69 6e 67 20 75  ..    # giving u
4350: 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 0a 09  s the order of..
4360: 09 09 09 20 20 20 20 23 20 72 65 76 69 73 69 6f  ...    # revisio
4370: 6e 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  ns..    variable
4380: 20 6d 79 61 69 64 20 20 20 20 20 20 2d 61 72 72   myaid      -arr
4390: 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 72 65  ay {} ; # Map re
43a0: 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 74  vision numbers t
43b0: 6f 20 74 68 65 20 69 64 0a 09 09 09 09 20 20 20  o the id.....   
43c0: 20 23 20 6f 66 20 74 68 65 20 61 75 74 68 6f 72   # of the author
43d0: 20 77 68 6f 20 63 6f 6d 6d 69 74 74 65 64 0a 09   who committed..
43e0: 09 09 09 20 20 20 20 23 20 69 74 2e 20 54 68 69  ...    # it. Thi
43f0: 73 20 69 73 20 6c 61 74 65 72 20 61 67 67 72 65  s is later aggre
4400: 67 61 74 65 64 0a 09 09 09 09 20 20 20 20 23 20  gated.....    # 
4410: 77 69 74 68 20 63 6f 6d 6d 69 74 20 6d 65 73 73  with commit mess
4420: 61 67 65 2c 20 62 72 61 6e 63 68 20 6e 61 6d 65  age, branch name
4430: 0a 09 09 09 09 20 20 20 20 23 20 61 6e 64 20 70  .....    # and p
4440: 72 6f 6a 65 63 74 20 69 64 20 66 6f 72 20 61 20  roject id for a 
4450: 6d 65 74 61 20 69 64 2e 0a 20 20 20 20 76 61 72  meta id..    var
4460: 69 61 62 6c 65 20 6d 79 68 65 61 64 72 65 76 6e  iable myheadrevn
4470: 72 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 48  r       {} ; # H
4480: 65 61 64 20 72 65 76 69 73 69 6f 6e 20 28 72 65  ead revision (re
4490: 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 29 0a 20  vision number). 
44a0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72     variable mypr
44b0: 69 6e 63 69 70 61 6c 20 20 20 20 20 20 20 7b 7d  incipal       {}
44c0: 20 3b 20 23 20 50 72 69 6e 63 69 70 61 6c 20 62   ; # Principal b
44d0: 72 61 6e 63 68 20 28 62 72 61 6e 63 68 20 6e 75  ranch (branch nu
44e0: 6d 62 65 72 29 2e 0a 09 09 09 09 20 20 20 20 23  mber)......    #
44f0: 20 43 6f 6e 74 72 61 72 79 20 74 6f 20 74 68 65   Contrary to the
4500: 20 6e 61 6d 65 20 74 68 69 73 20 69 73 20 74 68   name this is th
4510: 65 0a 09 09 09 09 20 20 20 20 23 20 64 65 66 61  e.....    # defa
4520: 75 6c 74 20 62 72 61 6e 63 68 2e 0a 20 20 20 20  ult branch..    
4530: 76 61 72 69 61 62 6c 65 20 6d 79 64 65 70 65 6e  variable mydepen
4540: 64 65 6e 63 69 65 73 20 20 20 20 7b 7d 20 3b 20  dencies    {} ; 
4550: 23 20 44 69 63 74 69 6f 6e 61 72 79 20 70 61 72  # Dictionary par
4560: 65 6e 74 20 2d 3e 20 63 68 69 6c 64 2c 0a 09 09  ent -> child,...
4570: 09 09 20 20 20 20 23 20 72 65 63 6f 72 64 73 20  ..    # records 
4580: 70 72 69 6d 61 72 79 20 64 65 70 65 6e 64 65 6e  primary dependen
4590: 63 69 65 73 2e 0a 20 20 20 20 76 61 72 69 61 62  cies..    variab
45a0: 6c 65 20 6d 79 69 6d 70 6f 72 74 65 64 20 20 20  le myimported   
45b0: 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c       0  ; # Bool
45c0: 65 61 6e 20 66 6c 61 67 2e 20 53 65 74 20 69 66  ean flag. Set if
45d0: 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 09 09 09   and only if....
45e0: 09 20 20 20 20 23 20 72 65 76 20 31 2e 31 20 6f  .    # rev 1.1 o
45f0: 66 20 74 68 65 20 66 69 6c 65 20 73 65 65 6d 69  f the file seemi
4600: 6e 67 6c 79 0a 09 09 09 09 20 20 20 20 23 20 77  ngly.....    # w
4610: 61 73 20 69 6d 70 6f 72 74 65 64 20 69 6e 73 74  as imported inst
4620: 65 61 64 20 6f 66 20 61 64 64 65 64 0a 09 09 09  ead of added....
4630: 09 20 20 20 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e  .    # normally.
4640: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
4650: 72 6f 6f 74 20 20 20 20 20 20 20 20 20 20 20 20  root            
4660: 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65  {} ; # Reference
4670: 20 74 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e   to the revision
4680: 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 20 20 20   object.....    
4690: 23 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f  # holding the ro
46a0: 6f 74 20 72 65 76 69 73 69 6f 6e 2e 20 20 49 74  ot revision.  It
46b0: 73 0a 09 09 09 09 20 20 20 20 23 20 6e 75 6d 62  s.....    # numb
46c0: 65 72 20 75 73 75 61 6c 6c 79 20 69 73 20 27 31  er usually is '1
46d0: 2e 31 27 2e 20 43 61 6e 20 62 65 0a 09 09 09 09  .1'. Can be.....
46e0: 20 20 20 20 23 20 61 20 64 69 66 66 65 72 65 6e      # a differen
46f0: 74 20 6e 75 6d 62 65 72 2c 20 62 65 63 61 75 73  t number, becaus
4700: 65 20 6f 66 0a 09 09 09 09 20 20 20 20 23 20 67  e of.....    # g
4710: 61 70 73 20 63 72 65 61 74 65 64 20 76 69 61 20  aps created via 
4720: 27 63 76 73 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20  'cvsadmin -o'.. 
4730: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72     variable mybr
4740: 61 6e 63 68 65 73 20 2d 61 72 72 61 79 20 7b 7d  anches -array {}
4750: 20 3b 20 23 20 4d 61 70 73 20 62 72 61 6e 63 68   ; # Maps branch
4760: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 73   number to the s
4770: 79 6d 62 6f 6c 0a 09 09 09 09 20 20 20 20 23 20  ymbol.....    # 
4780: 6f 62 6a 65 63 74 20 68 61 6e 64 6c 69 6e 67 20  object handling 
4790: 74 68 65 20 62 72 61 6e 63 68 2e 0a 20 20 20 20  the branch..    
47a0: 76 61 72 69 61 62 6c 65 20 6d 79 74 61 67 73 20  variable mytags 
47b0: 20 20 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20      -array {} ; 
47c0: 23 20 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20  # Maps revision 
47d0: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6c 69  number to the li
47e0: 73 74 0a 09 09 09 09 20 20 20 20 23 20 6f 66 20  st.....    # of 
47f0: 73 79 6d 62 6f 6c 20 6f 62 6a 65 63 74 73 20 66  symbol objects f
4800: 6f 72 20 74 68 65 20 74 61 67 73 0a 09 09 09 09  or the tags.....
4810: 20 20 20 20 23 20 61 73 73 6f 63 69 61 74 65 64      # associated
4820: 20 77 69 74 68 20 74 68 65 20 72 65 76 69 73 69   with the revisi
4830: 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  on..    variable
4840: 20 6d 79 73 79 6d 62 6f 6c 73 20 20 20 20 20 20   mysymbols      
4850: 20 20 20 7b 7d 20 3b 20 23 20 53 65 74 20 6f 66     {} ; # Set of
4860: 20 74 68 65 20 73 79 6d 62 6f 6c 20 6e 61 6d 65   the symbol name
4870: 73 20 66 6f 75 6e 64 20 69 6e 0a 09 09 09 09 20  s found in..... 
4880: 20 20 20 23 20 74 68 69 73 20 66 69 6c 65 2e 0a     # this file..
4890: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
48a0: 62 72 61 6e 63 68 63 6e 74 20 30 20 3b 20 23 20  branchcnt 0 ; # 
48b0: 43 6f 75 6e 74 65 72 20 66 6f 72 20 62 72 61 6e  Counter for bran
48c0: 63 68 65 73 2c 20 74 6f 20 72 65 63 6f 72 64 20  ches, to record 
48d0: 74 68 65 69 72 0a 09 09 09 20 20 20 20 20 23 20  their....     # 
48e0: 6f 72 64 65 72 20 6f 66 20 64 65 66 69 6e 69 74  order of definit
48f0: 69 6f 6e 2e 20 54 68 69 73 20 61 6c 73 6f 20 64  ion. This also d
4900: 65 66 69 6e 65 73 0a 09 09 09 20 20 20 20 20 23  efines....     #
4910: 20 74 68 65 69 72 20 6f 72 64 65 72 20 6f 66 20   their order of 
4920: 63 72 65 61 74 69 6f 6e 2c 20 77 68 69 63 68 20  creation, which 
4930: 69 73 20 74 68 65 0a 09 09 09 20 20 20 20 20 23  is the....     #
4940: 20 72 65 76 65 72 73 65 20 6f 66 20 64 65 66 69   reverse of defi
4950: 6e 69 74 69 6f 6e 2e 20 20 49 2e 65 2e 20 61 20  nition.  I.e. a 
4960: 73 6d 61 6c 6c 65 72 0a 09 09 09 20 20 20 20 20  smaller....     
4970: 23 20 6e 75 6d 62 65 72 20 6d 65 61 6e 73 20 27  # number means '
4980: 44 65 66 69 6e 65 64 20 65 61 72 6c 69 65 72 27  Defined earlier'
4990: 2c 20 6d 65 61 6e 73 0a 09 09 09 20 20 20 20 20  , means....     
49a0: 23 20 27 43 72 65 61 74 65 64 20 6c 61 74 65 72  # 'Created later
49b0: 27 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65  '...    variable
49c0: 20 6d 79 74 72 75 6e 6b 20 7b 7d 20 3b 20 23 20   mytrunk {} ; # 
49d0: 44 69 72 65 63 74 20 72 65 66 65 72 65 6e 63 65  Direct reference
49e0: 20 74 6f 20 6d 79 70 72 6f 6a 65 63 74 20 2d 3e   to myproject ->
49f0: 20 74 72 75 6e 6b 2e 0a 20 20 20 20 76 61 72 69   trunk..    vari
4a00: 61 62 6c 65 20 6d 79 72 6f 6f 74 73 20 7b 7d 20  able myroots {} 
4a10: 3b 20 23 20 4c 69 73 74 20 6f 66 20 72 6f 6f 74  ; # List of root
4a20: 73 20 69 6e 20 74 68 65 20 66 6f 72 65 73 74 20  s in the forest 
4a30: 6f 66 0a 09 09 09 20 20 23 20 6c 6f 64 27 73 2e  of....  # lod's.
4a40: 20 4f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63   Object referenc
4a50: 65 73 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20  es to revisions 
4a60: 61 6e 64 0a 09 09 09 20 20 23 20 62 72 61 6e 63  and....  # branc
4a70: 68 65 73 2e 20 54 68 65 20 6c 61 74 74 65 72 20  hes. The latter 
4a80: 63 61 6e 20 61 70 70 65 61 72 20 77 68 65 6e 20  can appear when 
4a90: 74 68 65 79 0a 09 09 09 20 20 23 20 61 72 65 20  they....  # are 
4aa0: 73 65 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65  severed from the
4ab0: 69 72 20 70 61 72 65 6e 74 2e 0a 0a 20 20 20 20  ir parent...    
4ac0: 76 61 72 69 61 62 6c 65 20 6d 79 62 6c 6f 62 20  variable myblob 
4ad0: 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65  {} ; # Reference
4ae0: 20 74 6f 20 74 68 65 20 6f 62 6a 65 63 74 20 6d   to the object m
4af0: 61 6e 61 67 69 6e 67 20 74 68 65 20 62 6c 6f 62  anaging the blob
4b00: 0a 09 09 09 20 23 20 69 6e 66 6f 72 6d 61 74 69  .... # informati
4b10: 6f 6e 20 28 74 65 78 74 72 61 6e 67 65 20 6f 66  on (textrange of
4b20: 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 0a   revisions, and.
4b30: 09 09 09 20 23 20 64 65 6c 74 61 20 64 65 70 65  ... # delta depe
4b40: 6e 64 65 6e 63 69 65 73 29 20 6f 66 20 74 68 69  ndencies) of thi
4b50: 73 20 66 69 6c 65 2e 0a 0a 20 20 20 20 23 20 23  s file...    # #
4b60: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
4b70: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
4b80: 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65  ####.    ## Inte
4b90: 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20  rnal methods..  
4ba0: 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42    method RecordB
4bb0: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 72  ranchCommits {br
4bc0: 61 6e 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 61  anches} {..forea
4bd0: 63 68 20 62 72 61 6e 63 68 72 65 76 6e 72 20 24  ch branchrevnr $
4be0: 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20  branches {..    
4bf0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 73  if {[catch {...s
4c00: 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66  et branch [$self
4c10: 20 52 65 76 32 42 72 61 6e 63 68 20 24 62 72 61   Rev2Branch $bra
4c20: 6e 63 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 7d  nchrevnr]..    }
4c30: 5d 7d 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63  ]} {...set branc
4c40: 68 20 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c 61  h [$self AddUnla
4c50: 62 65 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 76  beledBranch [rev
4c60: 20 32 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e   2branchnr $bran
4c70: 63 68 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d  chrevnr]]..    }
4c80: 0a 0a 09 20 20 20 20 23 20 52 65 63 6f 72 64 20  ...    # Record 
4c90: 74 68 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 74  the commit, just
4ca0: 20 61 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d   as revision num
4cb0: 62 65 72 20 66 6f 72 0a 09 20 20 20 20 23 20 6e  ber for..    # n
4cc0: 6f 77 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 68  ow. ProcesBranch
4cd0: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 77 69 6c  Dependencies wil
4ce0: 6c 20 65 78 74 65 6e 64 20 74 68 61 74 20 69 74  l extend that it
4cf0: 6f 20 61 0a 09 20 20 20 20 23 20 70 72 6f 70 65  o a..    # prope
4d00: 72 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  r object referen
4d10: 63 65 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e 63  ce....    $branc
4d20: 68 20 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20  h setchildrevnr 
4d30: 24 62 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d 0a  $branchrevnr..}.
4d40: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
4d50: 20 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72     method Rev2Br
4d60: 61 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 20  anch {revnr} {. 
4d70: 20 20 20 20 20 20 20 69 6e 74 65 67 72 69 74 79         integrity
4d80: 20 61 73 73 65 72 74 20 7b 21 5b 72 65 76 20 69   assert {![rev i
4d90: 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76  strunkrevnr $rev
4da0: 6e 72 5d 7d 20 7b 45 78 70 65 63 74 65 64 20 61  nr]} {Expected a
4db0: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e   branch revision
4dc0: 20 6e 75 6d 62 65 72 7d 0a 09 72 65 74 75 72 6e   number}..return
4dd0: 20 24 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65   $mybranches([re
4de0: 76 20 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76  v 2branchnr $rev
4df0: 6e 72 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20  nr]).    }..    
4e00: 6d 65 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65  method AddUnlabe
4e10: 6c 65 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63  ledBranch {branc
4e20: 68 6e 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b  hnr} {..return [
4e30: 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20  $self AddBranch 
4e40: 75 6e 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63  unlabeled-$branc
4e50: 68 6e 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20  hnr $branchnr]. 
4e60: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
4e70: 20 41 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65   AddBranch {name
4e80: 20 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66   branchnr} {..if
4e90: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d   {[info exists m
4ea0: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63  ybranches($branc
4eb0: 68 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f  hnr)]} {..    lo
4ec0: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22  g write 1 file "
4ed0: 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72  In '$mypath': Br
4ee0: 61 6e 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27  anch '$branchnr'
4ef0: 20 6e 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e   named '[$mybran
4f00: 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20  ches($branchnr) 
4f10: 6e 61 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67  name]'"..    log
4f20: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 43   write 1 file "C
4f30: 61 6e 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e  annot have secon
4f40: 64 20 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20  d name '$name', 
4f50: 69 67 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20  ignoring it"..  
4f60: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74    return..}..set
4f70: 20 62 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55   branch [sym %AU
4f80: 54 4f 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e  TO% branch $bran
4f90: 63 68 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74  chnr [$myproject
4fa0: 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65   getsymbol $name
4fb0: 5d 20 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e 63  ] $self]..$branc
4fc0: 68 20 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69  h setposition [i
4fd0: 6e 63 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d  ncr mybranchcnt]
4fe0: 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73  ..set mybranches
4ff0: 28 24 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61  ($branchnr) $bra
5000: 6e 63 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61  nch..return $bra
5010: 6e 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  nch.    }..    m
5020: 65 74 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61  ethod AddTag {na
5030: 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74  me revnr} {..set
5040: 20 74 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25   tag [sym %AUTO%
5050: 20 74 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79   tag $revnr [$my
5060: 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f  project getsymbo
5070: 6c 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a  l $name] $self].
5080: 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28  .lappend mytags(
5090: 24 72 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65  $revnr) $tag..re
50a0: 74 75 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a  turn $tag.    }.
50b0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f  .    method Reco
50c0: 72 64 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63  rdBasicDependenc
50d0: 69 65 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d  ies {revnr next}
50e0: 20 7b 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65   {..# Handle the
50f0: 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64   revision depend
5100: 65 6e 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74  encies. Record t
5110: 68 65 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a  hem for now, do.
5120: 09 23 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20  .# nothing with 
5130: 74 68 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e  them yet....# On
5140: 20 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27   the trunk the '
5150: 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e  next' field poin
5160: 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ts to the previo
5170: 75 73 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20  us..# revision, 
5180: 69 2e 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74  i.e. the _parent
5190: 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  _ of the current
51a0: 20 6f 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09   one. Example:..
51b0: 23 20 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20  # 1.6's next is 
51c0: 31 2e 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20  1.5 (modulo cvs 
51d0: 61 64 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43  admin -o)....# C
51e0: 6f 6e 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62  ontrarily on a b
51f0: 72 61 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27  ranch the 'next'
5200: 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f   field points to
5210: 20 74 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20   the..# primary 
5220: 5f 63 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63  _child_ of the c
5230: 75 72 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e  urrent revision.
5240: 20 41 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20   As example,..# 
5250: 31 2e 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27  1.1.3.2's 'next'
5260: 20 77 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33   will be 1.1.3.3
5270: 2e 0a 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27  ....# The 'next'
5280: 20 66 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20   field actually 
5290: 61 6c 77 61 79 73 20 72 65 66 65 72 73 20 74 6f  always refers to
52a0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23   the revision..#
52b0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
52c0: 64 65 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20  delta needed to 
52d0: 72 65 74 72 69 65 76 65 20 74 68 61 74 20 72 65  retrieve that re
52e0: 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20  vision....# The 
52f0: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65  dependencies nee
5300: 64 65 64 20 68 65 72 65 20 61 72 65 20 74 68 65  ded here are the
5310: 20 6c 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75   logical structu
5320: 72 65 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68  re,..# parent/ch
5330: 69 6c 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65  ild, and not the
5340: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
5350: 64 65 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a  dependent delta.
5360: 09 23 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69  .# pointers....i
5370: 66 20 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20  f {$next eq ""} 
5380: 72 65 74 75 72 6e 0a 09 23 20 20 20 20 20 20 20  return..#       
5390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
53a0: 20 20 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69     parent -> chi
53b0: 6c 64 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74  ld..if {[rev ist
53c0: 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72  runkrevnr $revnr
53d0: 5d 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e  ]} {..    lappen
53e0: 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73  d mydependencies
53f0: 20 24 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d   $next $revnr..}
5400: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70   else {..    lap
5410: 70 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63  pend mydependenc
5420: 69 65 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74  ies $revnr $next
5430: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
5440: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72  }..    method Pr
5450: 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65 70 65  ocessPrimaryDepe
5460: 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66  ndencies {} {..f
5470: 6f 72 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65  oreach {parentre
5480: 76 6e 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20  vnr childrevnr} 
5490: 24 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20  $mydependencies 
54a0: 7b 0a 09 20 20 20 20 73 65 74 20 70 61 72 65 6e  {..    set paren
54b0: 74 20 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74  t $myrev($parent
54c0: 72 65 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20  revnr)..    set 
54d0: 63 68 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63  child  $myrev($c
54e0: 68 69 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20  hildrevnr)..    
54f0: 24 70 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64  $parent setchild
5500: 20 24 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68   $child..    $ch
5510: 69 6c 64 20 73 65 74 70 61 72 65 6e 74 20 24 70  ild setparent $p
5520: 61 72 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e  arent..}..return
5530: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
5540: 6f 64 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68  od ProcessBranch
5550: 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20  Dependencies {} 
5560: 7b 0a 09 66 6f 72 65 61 63 68 20 7b 62 72 61 6e  {..foreach {bran
5570: 63 68 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 72  chnr branch} [ar
5580: 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68  ray get mybranch
5590: 65 73 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72  es] {..    set r
55a0: 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 61  evnr [$branch pa
55b0: 72 65 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20  rentrevnr]...   
55c0: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
55d0: 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29  ts myrev($revnr)
55e0: 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65  ]} {...log write
55f0: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79   1 file "In '$my
5600: 70 61 74 68 27 3a 20 54 68 65 20 62 72 61 6e 63  path': The branc
5610: 68 20 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65  h '[$branch name
5620: 5d 27 20 72 65 66 65 72 65 6e 63 65 73 22 0a 09  ]' references"..
5630: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c  .log write 1 fil
5640: 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 76  e "the bogus rev
5650: 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61  ision '$revnr' a
5660: 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72  nd will be ignor
5670: 65 64 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 64  ed."...$branch d
5680: 65 73 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d  estroy...unset m
5690: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63  ybranches($branc
56a0: 68 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65  hnr)..    } else
56b0: 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79   {...set rev $my
56c0: 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 24 72  rev($revnr)...$r
56d0: 65 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 72  ev addbranch $br
56e0: 61 6e 63 68 0a 09 09 24 62 72 61 6e 63 68 20 73  anch...$branch s
56f0: 65 74 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09  etparent $rev...
5700: 09 23 20 49 66 20 72 65 76 69 73 69 6f 6e 73 20  .# If revisions 
5710: 77 65 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f  were committed o
5720: 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 65 20  n the branch we 
5730: 73 74 6f 72 65 20 61 0a 09 09 23 20 72 65 66 65  store a...# refe
5740: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 62 72 61  rence to the bra
5750: 6e 63 68 20 74 68 65 72 65 2c 20 61 6e 64 20 66  nch there, and f
5760: 75 72 74 68 65 72 20 64 65 63 6c 61 72 65 0a 09  urther declare..
5770: 09 23 20 74 68 65 20 66 69 72 73 74 20 63 68 69  .# the first chi
5780: 6c 64 27 73 20 70 61 72 65 6e 74 20 74 6f 20 62  ld's parent to b
5790: 65 20 62 72 61 6e 63 68 27 73 20 70 61 72 65 6e  e branch's paren
57a0: 74 2c 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 20  t, and...# list 
57b0: 74 68 69 73 20 63 68 69 6c 64 20 69 6e 20 74 68  this child in th
57c0: 65 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f  e parent revisio
57d0: 6e 2e 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e  n.....if {[$bran
57e0: 63 68 20 68 61 73 63 68 69 6c 64 72 65 76 5d 7d  ch haschildrev]}
57f0: 20 7b 0a 09 09 20 20 20 20 73 65 74 20 63 68 69   {...    set chi
5800: 6c 64 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68  ldrevnr [$branch
5810: 20 63 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20   childrevnr]... 
5820: 20 20 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79     set child $my
5830: 72 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29  rev($childrevnr)
5840: 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 73  ...    $branch s
5850: 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a  etchild $child..
5860: 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74  ..    $child set
5870: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72  parentbranch $br
5880: 61 6e 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c  anch...    $chil
5890: 64 20 73 65 74 70 61 72 65 6e 74 20 20 20 20 20  d setparent     
58a0: 20 20 24 72 65 76 0a 09 09 20 20 20 20 24 72 65    $rev...    $re
58b0: 76 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e  v addchildonbran
58c0: 63 68 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20  ch $child...}.. 
58d0: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a     }..}..return.
58e0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
58f0: 64 20 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b  d SortBranches {
5900: 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65  } {..foreach {re
5910: 76 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20  vnr rev} [array 
5920: 67 65 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65  get myrev] { $re
5930: 76 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d  v sortbranches }
5940: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
5950: 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65      method Proce
5960: 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65  ssTagDependencie
5970: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20  s {} {..foreach 
5980: 7b 72 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20  {revnr taglist} 
5990: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67  [array get mytag
59a0: 73 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b  s] {..    if {![
59b0: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65  info exists myre
59c0: 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09  v($revnr)]} {...
59d0: 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24  set n [llength $
59e0: 74 61 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77  taglist]...log w
59f0: 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20  rite 1 file "In 
5a00: 27 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66  '$mypath': The f
5a10: 6f 6c 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e  ollowing [nsp $n
5a20: 20 74 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22   tag] reference"
5a30: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66  ...log write 1 f
5a40: 69 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 72  ile "the bogus r
5a50: 65 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27  evision '$revnr'
5a60: 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e   and will be ign
5a70: 6f 72 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68  ored."...foreach
5a80: 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a   tag $taglist {.
5a90: 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
5aa0: 31 20 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61  1 file "    [$ta
5ab0: 67 20 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24  g name]"...    $
5ac0: 74 61 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a  tag destroy...}.
5ad0: 09 09 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24  ..unset mytags($
5ae0: 72 65 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c  revnr)..    } el
5af0: 73 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24  se {...set rev $
5b00: 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09  myrev($revnr)...
5b10: 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67  foreach tag $tag
5b20: 6c 69 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65  list {...    $re
5b30: 76 20 61 64 64 74 61 67 20 20 20 20 24 74 61 67  v addtag    $tag
5b40: 0a 09 09 20 20 20 20 24 74 61 67 20 73 65 74 74  ...    $tag sett
5b50: 61 67 72 65 76 20 24 72 65 76 0a 09 09 7d 0a 09  agrev $rev...}..
5b60: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e      }..}..return
5b70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
5b80: 6f 64 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52  od DetermineTheR
5b90: 6f 6f 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b  ootRevision {} {
5ba0: 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20  ..# The root is 
5bb0: 74 68 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e  the one revision
5bc0: 20 77 68 69 63 68 20 68 61 73 20 6e 6f 20 70 61   which has no pa
5bd0: 72 65 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 63  rent. By..# chec
5be0: 6b 69 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 6f  king all revisio
5bf0: 6e 73 20 77 65 20 65 6e 73 75 72 65 20 74 68 61  ns we ensure tha
5c00: 74 20 77 65 20 63 61 6e 20 64 65 74 65 63 74 20  t we can detect 
5c10: 61 6e 64 0a 09 23 20 72 65 70 6f 72 74 20 74 68  and..# report th
5c20: 65 20 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 70  e case of multip
5c30: 6c 65 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f 75  le roots. Withou
5c40: 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 0a  t that we could.
5c50: 09 23 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 6f  .# simply take o
5c60: 6e 65 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20  ne revision and 
5c70: 66 6f 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 6e  follow the paren
5c80: 74 20 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 68  t links to..# th
5c90: 65 69 72 20 72 6f 6f 74 20 28 73 69 63 21 29 2e  eir root (sic!).
5ca0: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e  ...foreach {revn
5cb0: 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65  r rev} [array ge
5cc0: 74 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20  t myrev] {..    
5cd0: 69 66 20 7b 5b 24 72 65 76 20 68 61 73 70 61 72  if {[$rev haspar
5ce0: 65 6e 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09  ent]} continue..
5cf0: 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73      integrity as
5d00: 73 65 72 74 20 7b 24 6d 79 72 6f 6f 74 20 65 71  sert {$myroot eq
5d10: 20 22 22 7d 20 7b 4d 75 6c 74 69 70 6c 65 20 72   ""} {Multiple r
5d20: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66 6f  oot revisions fo
5d30: 75 6e 64 7d 0a 09 20 20 20 20 73 65 74 20 6d 79  und}..    set my
5d40: 72 6f 6f 74 20 24 72 65 76 0a 09 7d 0a 0a 09 23  root $rev..}...#
5d50: 20 49 6e 20 74 68 65 20 66 75 74 75 72 65 20 77   In the future w
5d60: 65 20 61 6c 73 6f 20 6e 65 65 64 20 61 20 6c 69  e also need a li
5d70: 73 74 2c 20 61 73 20 62 72 61 6e 63 68 65 73 20  st, as branches 
5d80: 63 61 6e 20 62 65 63 6f 6d 65 0a 09 23 20 73 65  can become..# se
5d90: 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72  vered from their
5da0: 20 70 61 72 65 6e 74 2c 20 6d 61 6b 69 6e 67 20   parent, making 
5db0: 74 68 65 6d 20 74 68 65 69 72 20 6f 77 6e 20 72  them their own r
5dc0: 6f 6f 74 2e 0a 09 73 65 74 20 6d 79 72 6f 6f 74  oot...set myroot
5dd0: 73 20 5b 6c 69 73 74 20 24 6d 79 72 6f 6f 74 5d  s [list $myroot]
5de0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
5df0: 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72      method Deter
5e00: 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72  mineRevisionOper
5e10: 61 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72  ations {} {..for
5e20: 65 61 63 68 20 72 65 76 20 24 6d 79 72 65 76 69  each rev $myrevi
5e30: 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 74  sions { $rev det
5e40: 65 72 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20  ermineoperation 
5e50: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
5e60: 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65  .    method Dete
5e70: 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65  rmineLinesOfDeve
5e80: 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20  lopment {} {..# 
5e90: 46 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 74 68  For revisions th
5ea0: 69 73 20 68 61 73 20 62 65 65 6e 20 64 6f 6e 65  is has been done
5eb0: 20 61 6c 72 65 61 64 79 2c 20 69 6e 20 27 65 78   already, in 'ex
5ec0: 74 65 6e 64 27 2e 20 4e 6f 77 0a 09 23 20 77 65  tend'. Now..# we
5ed0: 20 64 6f 20 74 68 69 73 20 66 6f 72 20 74 68 65   do this for the
5ee0: 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61   branches and ta
5ef0: 67 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f  gs....foreach {_
5f00: 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20   branch} [array 
5f10: 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20  get mybranches] 
5f20: 7b 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73  {..    $branch s
5f30: 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74  etlod [$self Get
5f40: 4c 4f 44 20 5b 24 62 72 61 6e 63 68 20 70 61 72  LOD [$branch par
5f50: 65 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09  entrevnr]]..}...
5f60: 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69  foreach {_ tagli
5f70: 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d  st} [array get m
5f80: 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f  ytags] {..    fo
5f90: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69  reach tag $tagli
5fa0: 73 74 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c  st {...$tag setl
5fb0: 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44  od [$self GetLOD
5fc0: 20 5b 24 74 61 67 20 74 61 67 72 65 76 6e 72 5d   [$tag tagrevnr]
5fd0: 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74  ]..    }..}..ret
5fe0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
5ff0: 65 74 68 6f 64 20 47 65 74 4c 4f 44 20 7b 72 65  ethod GetLOD {re
6000: 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76  vnr} {..if {[rev
6010: 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72   istrunkrevnr $r
6020: 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65  evnr]} {..    re
6030: 74 75 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 7d  turn $mytrunk..}
6040: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 74   else {..    ret
6050: 75 72 6e 20 5b 24 73 65 6c 66 20 52 65 76 32 42  urn [$self Rev2B
6060: 72 61 6e 63 68 20 24 72 65 76 6e 72 5d 0a 09 7d  ranch $revnr]..}
6070: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
6080: 6f 64 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e  od HandleNonTrun
6090: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b  kDefaultBranch {
60a0: 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 69 73 74  } {..set revlist
60b0: 20 5b 24 73 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b   [$self NonTrunk
60c0: 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73  DefaultRevisions
60d0: 5d 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68  ]..if {![llength
60e0: 20 24 72 65 76 6c 69 73 74 5d 7d 20 72 65 74 75   $revlist]} retu
60f0: 72 6e 0a 0a 09 24 73 65 6c 66 20 41 64 6a 75 73  rn...$self Adjus
6100: 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74  tNonTrunkDefault
6110: 42 72 61 6e 63 68 20 24 72 65 76 6c 69 73 74 0a  Branch $revlist.
6120: 09 24 73 65 6c 66 20 43 68 65 63 6b 4c 4f 44 73  .$self CheckLODs
6130: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
6140: 20 20 20 20 6d 65 74 68 6f 64 20 4e 6f 6e 54 72      method NonTr
6150: 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69  unkDefaultRevisi
6160: 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d  ons {} {..# From
6170: 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f 6c   cvs2svn the fol
6180: 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 69  lowing explanati
6190: 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69 63  on (with modific
61a0: 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75  ations..# for ou
61b0: 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09  r algorithm):...
61c0: 23 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74  # Determine whet
61d0: 68 65 72 20 74 68 65 72 65 20 61 72 65 20 61 6e  her there are an
61e0: 79 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61  y non-trunk defa
61f0: 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65  ult branch..# re
6200: 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 49 66 20  visions....# If 
6210: 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61  a non-trunk defa
6220: 75 6c 74 20 62 72 61 6e 63 68 20 69 73 20 64 65  ult branch is de
6230: 74 65 72 6d 69 6e 65 64 20 74 6f 20 68 61 76 65  termined to have
6240: 20 65 78 69 73 74 65 64 2c 0a 09 23 20 72 65 74   existed,..# ret
6250: 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 6f 62  urn a list of ob
6260: 6a 65 63 74 73 20 66 6f 72 20 61 6c 6c 20 72 65  jects for all re
6270: 76 69 73 69 6f 6e 73 20 74 68 61 74 20 77 65 72  visions that wer
6280: 65 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74 72  e once..# non-tr
6290: 75 6e 6b 20 64 65 66 61 75 6c 74 20 72 65 76 69  unk default revi
62a0: 73 69 6f 6e 73 2c 20 69 6e 20 64 65 70 65 6e 64  sions, in depend
62b0: 65 6e 63 79 20 6f 72 64 65 72 20 28 69 2e 65 2e  ency order (i.e.
62c0: 20 72 6f 6f 74 0a 09 23 20 66 69 72 73 74 29 2e   root..# first).
62d0: 0a 0a 09 23 20 54 68 65 72 65 20 61 72 65 20 74  ...# There are t
62e0: 77 6f 20 63 61 73 65 73 20 74 6f 20 68 61 6e 64  wo cases to hand
62f0: 6c 65 3a 0a 0a 09 23 20 4f 6e 65 20 63 61 73 65  le:...# One case
6300: 20 69 73 20 73 69 6d 70 6c 65 2e 20 20 54 68 65   is simple.  The
6310: 20 52 43 53 20 66 69 6c 65 20 6c 69 73 74 73 20   RCS file lists 
6320: 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  a default branch
6330: 0a 09 23 20 65 78 70 6c 69 63 69 74 6c 79 20 69  ..# explicitly i
6340: 6e 20 69 74 73 20 68 65 61 64 65 72 2c 20 73 75  n its header, su
6350: 63 68 20 61 73 20 27 31 2e 31 2e 31 27 2e 20 20  ch as '1.1.1'.  
6360: 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77 65  In this case, we
6370: 0a 09 23 20 6b 6e 6f 77 20 74 68 61 74 20 65 76  ..# know that ev
6380: 65 72 79 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20  ery revision on 
6390: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  the vendor branc
63a0: 68 20 69 73 20 74 6f 20 62 65 0a 09 23 20 74 72  h is to be..# tr
63b0: 65 61 74 65 64 20 61 73 20 68 65 61 64 20 6f 66  eated as head of
63c0: 20 74 72 75 6e 6b 20 61 74 20 74 68 61 74 20 70   trunk at that p
63d0: 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e 0a 0a 09  oint in time....
63e0: 23 20 42 75 74 20 74 68 65 72 65 27 73 20 61 6c  # But there's al
63f0: 73 6f 20 61 20 64 65 67 65 6e 65 72 61 74 65 20  so a degenerate 
6400: 63 61 73 65 2e 20 20 54 68 65 20 52 43 53 20 66  case.  The RCS f
6410: 69 6c 65 20 64 6f 65 73 20 6e 6f 74 0a 09 23 20  ile does not..# 
6420: 63 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61  currently have a
6430: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c   default branch,
6440: 20 79 65 74 20 77 65 20 63 61 6e 20 64 65 64 75   yet we can dedu
6450: 63 65 20 74 68 61 74 20 66 6f 72 0a 09 23 20 73  ce that for..# s
6460: 6f 6d 65 20 70 65 72 69 6f 64 20 69 6e 20 74 68  ome period in th
6470: 65 20 70 61 73 74 20 69 74 20 70 72 6f 62 61 62  e past it probab
6480: 6c 79 20 2a 64 69 64 2a 20 68 61 76 65 20 6f 6e  ly *did* have on
6490: 65 2e 20 20 46 6f 72 0a 09 23 20 65 78 61 6d 70  e.  For..# examp
64a0: 6c 65 2c 20 74 68 65 20 66 69 6c 65 20 68 61 73  le, the file has
64b0: 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e   vendor revision
64c0: 73 20 31 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e 31  s 1.1.1.1 -> 1.1
64d0: 2e 31 2e 39 36 2c 0a 09 23 20 61 6c 6c 20 6f 66  .1.96,..# all of
64e0: 20 77 68 69 63 68 20 61 72 65 20 64 61 74 65 64   which are dated
64f0: 20 62 65 66 6f 72 65 20 31 2e 32 2c 20 61 6e 64   before 1.2, and
6500: 20 74 68 65 6e 20 69 74 20 68 61 73 20 31 2e 31   then it has 1.1
6510: 2e 31 2e 39 37 0a 09 23 20 2d 3e 20 31 2e 31 2e  .1.97..# -> 1.1.
6520: 31 2e 31 30 30 20 64 61 74 65 64 20 61 66 74 65  1.100 dated afte
6530: 72 20 31 2e 32 2e 20 20 49 6e 20 74 68 69 73 20  r 1.2.  In this 
6540: 63 61 73 65 2c 20 77 65 20 73 68 6f 75 6c 64 0a  case, we should.
6550: 09 23 20 72 65 63 6f 72 64 20 31 2e 31 2e 31 2e  .# record 1.1.1.
6560: 39 36 20 61 73 20 74 68 65 20 6c 61 73 74 20 76  96 as the last v
6570: 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 20 74  endor revision t
6580: 6f 20 68 61 76 65 20 62 65 65 6e 20 74 68 65 0a  o have been the.
6590: 09 23 20 68 65 61 64 20 6f 66 20 74 68 65 20 64  .# head of the d
65a0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 0a  efault branch...
65b0: 09 69 66 20 7b 24 6d 79 70 72 69 6e 63 69 70 61  .if {$myprincipa
65c0: 6c 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20  l ne ""} {..    
65d0: 23 20 54 68 65 72 65 20 69 73 20 73 74 69 6c 6c  # There is still
65e0: 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63   a default branc
65f0: 68 3b 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  h; that means th
6600: 61 74 20 61 6c 6c 0a 09 20 20 20 20 23 20 72 65  at all..    # re
6610: 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 61 74 20  visions on that 
6620: 62 72 61 6e 63 68 20 67 65 74 20 6d 61 72 6b 65  branch get marke
6630: 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  d....    log wri
6640: 74 65 20 35 20 66 69 6c 65 20 22 46 6f 75 6e 64  te 5 file "Found
6650: 20 65 78 70 6c 69 63 69 74 6c 79 20 6d 61 72 6b   explicitly mark
6660: 65 64 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73  ed NTDB"...    s
6670: 65 74 20 72 6e 65 78 74 20 5b 24 6d 79 72 6f 6f  et rnext [$myroo
6680: 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 69 66  t child]..    if
6690: 20 7b 24 72 6e 65 78 74 20 6e 65 20 22 22 7d 20   {$rnext ne ""} 
66a0: 7b 0a 09 09 74 72 6f 75 62 6c 65 20 66 61 74 61  {...trouble fata
66b0: 6c 20 22 46 69 6c 65 20 77 69 74 68 20 64 65 66  l "File with def
66c0: 61 75 6c 74 20 62 72 61 6e 63 68 20 24 6d 79 70  ault branch $myp
66d0: 72 69 6e 63 69 70 61 6c 20 61 6c 73 6f 20 68 61  rincipal also ha
66e0: 73 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6e 65  s revision [$rne
66f0: 78 74 20 72 65 76 6e 72 5d 22 0a 09 09 72 65 74  xt revnr]"...ret
6700: 75 72 6e 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20  urn..    }...   
6710: 20 73 65 74 20 72 65 76 20 5b 24 6d 79 62 72 61   set rev [$mybra
6720: 6e 63 68 65 73 28 24 6d 79 70 72 69 6e 63 69 70  nches($myprincip
6730: 61 6c 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20  al) child]..    
6740: 73 65 74 20 72 65 73 20 7b 7d 0a 0a 09 20 20 20  set res {}...   
6750: 20 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20   while {$rev ne 
6760: 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20  ""} {...lappend 
6770: 72 65 73 20 24 72 65 76 0a 09 09 73 65 74 20 72  res $rev...set r
6780: 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a  ev [$rev child].
6790: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74  .    }...    ret
67a0: 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73  urn $res...} els
67b0: 65 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64  eif {$myimported
67c0: 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 20 64 65  } {..    # No de
67d0: 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 62 75  fault branch, bu
67e0: 74 20 74 68 65 20 66 69 6c 65 20 61 70 70 65 61  t the file appea
67f0: 72 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 0a  rs to have been.
6800: 09 20 20 20 20 23 20 69 6d 70 6f 72 74 65 64 2e  .    # imported.
6810: 20 20 53 6f 20 6f 75 72 20 65 64 75 63 61 74 65    So our educate
6820: 64 20 67 75 65 73 73 20 69 73 20 74 68 61 74 20  d guess is that 
6830: 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 0a 09 20  all revisions.. 
6840: 20 20 20 23 20 6f 6e 20 74 68 65 20 27 31 2e 31     # on the '1.1
6850: 2e 31 27 20 62 72 61 6e 63 68 20 77 69 74 68 20  .1' branch with 
6860: 74 69 6d 65 73 74 61 6d 70 73 20 70 72 69 6f 72  timestamps prior
6870: 20 74 6f 20 74 68 65 0a 09 20 20 20 20 23 20 74   to the..    # t
6880: 69 6d 65 73 74 61 6d 70 20 6f 66 20 27 31 2e 32  imestamp of '1.2
6890: 27 20 77 65 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b  ' were non-trunk
68a0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a   default branch.
68b0: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73  .    # revisions
68c0: 2e 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20 72  ....    # This r
68d0: 65 61 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f 63 65  eally only proce
68e0: 73 73 65 73 20 73 74 61 6e 64 61 72 64 20 27 31  sses standard '1
68f0: 2e 31 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a 09 20  .1.1.*'-style.. 
6900: 20 20 20 23 20 76 65 6e 64 6f 72 20 72 65 76 69     # vendor revi
6910: 73 69 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f 75 6c  sions.  One coul
6920: 64 20 63 6f 6e 63 65 69 76 61 62 6c 79 20 68 61  d conceivably ha
6930: 76 65 20 61 20 66 69 6c 65 0a 09 20 20 20 20 23  ve a file..    #
6940: 20 77 68 6f 73 65 20 64 65 66 61 75 6c 74 20 62   whose default b
6950: 72 61 6e 63 68 20 69 73 20 31 2e 31 2e 33 20 6f  ranch is 1.1.3 o
6960: 72 20 77 68 61 74 65 76 65 72 2c 20 6f 72 20 77  r whatever, or w
6970: 61 73 20 74 68 61 74 0a 09 20 20 20 20 23 20 61  as that..    # a
6980: 74 20 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e 20  t some point in 
6990: 74 69 6d 65 2c 20 77 69 74 68 20 76 65 6e 64 6f  time, with vendo
69a0: 72 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e  r revisions 1.1.
69b0: 33 2e 31 2c 0a 09 20 20 20 20 23 20 31 2e 31 2e  3.1,..    # 1.1.
69c0: 33 2e 32 2c 20 65 74 63 2e 20 20 42 75 74 20 77  3.2, etc.  But w
69d0: 69 74 68 20 74 68 65 20 64 65 66 61 75 6c 74 20  ith the default 
69e0: 62 72 61 6e 63 68 20 67 6f 6e 65 20 6e 6f 77 2c  branch gone now,
69f0: 0a 09 20 20 20 20 23 20 77 65 27 64 20 68 61 76  ..    # we'd hav
6a00: 65 20 6e 6f 20 62 61 73 69 73 20 66 6f 72 20 61  e no basis for a
6a10: 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65  ssuming that the
6a20: 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 0a 09 20   non-standard.. 
6a30: 20 20 20 23 20 76 65 6e 64 6f 72 20 62 72 61 6e     # vendor bran
6a40: 63 68 20 68 61 64 20 65 76 65 72 20 62 65 65 6e  ch had ever been
6a50: 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61   the default bra
6a60: 6e 63 68 20 61 6e 79 77 61 79 2e 0a 0a 09 20 20  nch anyway....  
6a70: 20 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65    # Note that we
6a80: 20 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69   rely on compari
6a90: 73 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65  sons between the
6aa0: 20 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20   timestamps..   
6ab0: 20 23 20 6f 66 20 74 68 65 20 72 65 76 69 73 69   # of the revisi
6ac0: 6f 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f  ons on the vendo
6ad0: 72 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61  r branch and tha
6ae0: 74 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69  t of..    # revi
6af0: 73 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74  sion 1.2, even t
6b00: 68 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73 74  hough the timest
6b10: 61 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20  amps might be.. 
6b20: 20 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64     # incorrect d
6b30: 75 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77  ue to clock skew
6b40: 2e 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61  .  We could do a
6b50: 20 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23   slightly..    #
6b60: 20 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77   better job if w
6b70: 65 20 75 73 65 64 20 74 68 65 20 63 68 61 6e 67  e used the chang
6b80: 65 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c  eset timestamps,
6b90: 20 61 73 20 69 74 20 69 73 0a 09 20 20 20 20 23   as it is..    #
6ba0: 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74   possible that t
6bb0: 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20  he dependencies 
6bc0: 74 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09  that went into..
6bd0: 20 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e      # determinin
6be0: 67 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d  g those timestam
6bf0: 70 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75  ps are more accu
6c00: 72 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20  rate.  But..    
6c10: 23 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71  # that would req
6c20: 75 69 72 65 20 61 6e 20 65 78 74 72 61 20 70 61  uire an extra pa
6c30: 73 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20  ss or two....   
6c40: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
6c50: 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e  ts mybranches(1.
6c60: 31 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20  1.1)]} { return 
6c70: 7b 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77  {} }...    log w
6c80: 72 69 74 65 20 35 20 66 69 6c 65 20 22 44 65 64  rite 5 file "Ded
6c90: 75 63 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f  uced existence o
6ca0: 66 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65  f NTDB"...    se
6cb0: 74 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63  t rev  [$mybranc
6cc0: 68 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64  hes(1.1.1) child
6cd0: 5d 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 20  ]..    set res  
6ce0: 7b 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70  {}..    set stop
6cf0: 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d   [$myroot child]
6d00: 0a 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70  ...    if {$stop
6d10: 20 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65   eq ""} {...# Ge
6d20: 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20  t everything on 
6d30: 74 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69  the branch...whi
6d40: 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20  le {$rev ne ""} 
6d50: 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20  {...    lappend 
6d60: 72 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73  res $rev...    s
6d70: 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69  et rev [$rev chi
6d80: 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65  ld]...}..    } e
6d90: 6c 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63  lse {...# Collec
6da0: 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20  t everything on 
6db0: 74 68 65 20 62 72 61 6e 63 68 20 77 68 69 63 68  the branch which
6dc0: 20 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09   seems to have..
6dd0: 09 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65  .# been committe
6de0: 64 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72  d before the fir
6df0: 73 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64  st primary child
6e00: 20 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74   of the...# root
6e10: 20 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74   revision....set
6e20: 20 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70   stopdate [$stop
6e30: 20 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b   date]...while {
6e40: 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09  $rev ne ""} {...
6e50: 20 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61      if {[$rev da
6e60: 74 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65  te] >= $stopdate
6e70: 7d 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61  } break...    la
6e80: 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09  ppend res $rev..
6e90: 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72  .    set rev [$r
6ea0: 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20  ev child]...}.. 
6eb0: 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72     }...    retur
6ec0: 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20  n $res...} else 
6ed0: 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d  {..    return {}
6ee0: 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  ..}.    }..    #
6ef0: 20 47 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49   General note: I
6f00: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
6f10: 6d 65 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20  methods we only 
6f20: 6d 6f 64 69 66 79 20 74 68 65 20 6c 69 6e 6b 73  modify the links
6f30: 0a 20 20 20 20 23 20 62 65 74 77 65 65 6e 20 72  .    # between r
6f40: 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d  evisions and sym
6f50: 62 6f 6c 73 20 74 6f 20 72 65 73 74 72 75 63 74  bols to restruct
6f60: 75 72 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e  ure the revision
6f70: 0a 20 20 20 20 23 20 74 72 65 65 2e 20 57 65 20  .    # tree. We 
6f80: 64 6f 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72  do __not__ destr
6f90: 6f 79 20 74 68 65 20 6f 62 6a 65 63 74 73 2e 20  oy the objects. 
6fa0: 47 69 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65  Given the comple
6fb0: 78 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 43  x links.    # GC
6fc0: 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 61 74   is difficult at
6fd0: 20 74 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 20   this level. It 
6fe0: 69 73 20 6d 75 63 68 20 65 61 73 69 65 72 20 74  is much easier t
6ff0: 6f 20 64 72 6f 70 0a 20 20 20 20 23 20 65 76 65  o drop.    # eve
7000: 72 79 74 68 69 6e 67 20 77 68 65 6e 20 77 65 20  rything when we 
7010: 77 65 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 69  we are done. Thi
7020: 73 20 68 61 70 70 65 6e 73 20 69 6e 20 27 64 72  s happens in 'dr
7030: 6f 70 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 23  op', using.    #
7040: 20 74 68 65 20 73 74 61 74 65 20 76 61 72 69 61   the state varia
7050: 62 6c 65 20 27 6d 79 72 65 76 27 2c 20 27 6d 79  ble 'myrev', 'my
7060: 62 72 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 27  branches', and '
7070: 6d 79 74 61 67 73 27 2e 20 57 68 61 74 20 77 65  mytags'. What we
7080: 0a 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 70  .    # have to p
7090: 65 72 73 69 73 74 2c 20 70 65 72 66 6f 72 6d 65  ersist, performe
70a0: 64 20 62 79 20 27 70 65 72 73 69 73 74 27 2c 20  d by 'persist', 
70b0: 77 65 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a  we know will be.
70c0: 20 20 20 20 23 20 72 65 61 63 68 61 62 6c 65 20      # reachable 
70d0: 74 68 72 6f 75 67 68 20 74 68 65 20 72 65 76 69  through the revi
70e0: 73 69 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e 20  sions listed in 
70f0: 27 6d 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 68  'myroots' and th
7100: 65 69 72 0a 20 20 20 20 23 20 63 68 69 6c 64 72  eir.    # childr
7110: 65 6e 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a  en and symbols..
7120: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 6a 75  .    method Adju
7130: 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c  stNonTrunkDefaul
7140: 74 42 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 74  tBranch {revlist
7150: 7d 20 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b 24  } {..set stop [$
7160: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23  myroot child] ;#
7170: 20 72 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67   rev '1.2'...log
7180: 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 41   write 5 file "A
7190: 64 6a 75 73 74 69 6e 67 20 4e 54 44 42 20 63 6f  djusting NTDB co
71a0: 6e 74 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c  ntaining [nsp [l
71b0: 6c 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d  length $revlist]
71c0: 20 72 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20   revision]"...# 
71d0: 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65  From cvs2svn the
71e0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61   following expla
71f0: 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64  nation (with mod
7200: 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f  ifications..# fo
7210: 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29  r our algorithm)
7220: 3a 0a 0a 09 23 20 41 64 6a 75 73 74 20 74 68 65  :...# Adjust the
7230: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
7240: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69  lt branch revisi
7250: 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65  ons found in the
7260: 0a 09 23 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a  ..# 'revlist'...
7270: 09 23 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 20  .# 'myimported' 
7280: 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61  is a boolean fla
7290: 67 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65  g indicating whe
72a0: 74 68 65 72 20 74 68 69 73 20 66 69 6c 65 0a 09  ther this file..
72b0: 23 20 61 70 70 65 61 72 73 20 74 6f 20 68 61 76  # appears to hav
72c0: 65 20 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c  e been imported,
72d0: 20 77 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e   which also mean
72e0: 73 20 74 68 61 74 0a 09 23 20 72 65 76 69 73 69  s that..# revisi
72f0: 6f 6e 20 31 2e 31 20 68 61 73 20 61 20 67 65 6e  on 1.1 has a gen
7300: 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61  erated log messa
7310: 67 65 20 74 68 61 74 20 6e 65 65 64 20 6e 6f 74  ge that need not
7320: 20 62 65 0a 09 23 20 70 72 65 73 65 72 76 65 64   be..# preserved
7330: 2e 20 20 27 72 65 76 6c 69 73 74 27 20 69 73 20  .  'revlist' is 
7340: 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74  a list of object
7350: 20 72 65 66 65 72 65 6e 63 65 73 20 66 6f 72 20   references for 
7360: 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73  the..# revisions
7370: 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e 20   that have been 
7380: 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65  determined to be
7390: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
73a0: 6c 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76  lt..# branch rev
73b0: 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65  isions....# Note
73c0: 20 74 68 61 74 20 74 68 65 20 66 69 72 73 74 20   that the first 
73d0: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20  revision on the 
73e0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69  default branch i
73f0: 73 0a 09 23 20 68 61 6e 64 6c 65 64 20 73 74 72  s..# handled str
7400: 61 6e 67 65 6c 79 20 62 79 20 43 56 53 2e 20 20  angely by CVS.  
7410: 49 66 20 61 20 66 69 6c 65 20 69 73 20 69 6d 70  If a file is imp
7420: 6f 72 74 65 64 20 28 61 73 20 6f 70 70 6f 73 65  orted (as oppose
7430: 64 0a 09 23 20 74 6f 20 62 65 69 6e 67 20 61 64  d..# to being ad
7440: 64 65 64 29 2c 20 43 56 53 20 63 72 65 61 74 65  ded), CVS create
7450: 73 20 61 20 31 2e 31 20 72 65 76 69 73 69 6f 6e  s a 1.1 revision
7460: 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 61  , then creates a
7470: 0a 09 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  ..# vendor branc
7480: 68 20 31 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e  h 1.1.1 based on
7490: 20 31 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 74   1.1, then creat
74a0: 65 73 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20  es a 1.1.1.1..# 
74b0: 72 65 76 69 73 69 6f 6e 20 74 68 61 74 20 69 73  revision that is
74c0: 20 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 68   identical to th
74d0: 65 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 28  e 1.1 revision (
74e0: 69 2e 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c  i.e., its..# del
74f0: 74 61 74 65 78 74 20 69 73 20 65 6d 70 74 79 29  tatext is empty)
7500: 2e 20 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 61  .  The log messa
7510: 67 65 20 74 68 61 74 20 74 68 65 20 75 73 65 72  ge that the user
7520: 20 74 79 70 65 64 0a 09 23 20 77 68 65 6e 20 69   typed..# when i
7530: 6d 70 6f 72 74 69 6e 67 20 69 73 20 73 74 6f 72  mporting is stor
7540: 65 64 20 77 69 74 68 20 74 68 65 20 31 2e 31 2e  ed with the 1.1.
7550: 31 2e 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 54  1.1 revision.  T
7560: 68 65 20 31 2e 31 0a 09 23 20 72 65 76 69 73 69  he 1.1..# revisi
7570: 6f 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69  on always contai
7580: 6e 73 20 61 20 73 74 61 6e 64 61 72 64 2c 20 67  ns a standard, g
7590: 65 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73  enerated log mes
75a0: 73 61 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 61  sage,..# 'Initia
75b0: 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a  l revision\n'...
75c0: 09 23 20 57 68 65 6e 20 77 65 20 64 65 74 65 63  .# When we detec
75d0: 74 20 61 20 73 74 72 61 69 67 68 74 66 6f 72 77  t a straightforw
75e0: 61 72 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20  ard import like 
75f0: 74 68 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 23  this, we want..#
7600: 20 74 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 79   to handle it by
7610: 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 31 2e   deleting the 1.
7620: 31 20 72 65 76 69 73 69 6f 6e 20 28 77 68 69 63  1 revision (whic
7630: 68 20 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e  h doesn't..# con
7640: 74 61 69 6e 20 61 6e 79 20 75 73 65 66 75 6c 20  tain any useful 
7650: 69 6e 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64  information) and
7660: 20 6d 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20   making 1.1.1.1 
7670: 69 6e 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70  into an..# indep
7680: 65 6e 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74  endent root in t
7690: 68 65 20 66 69 6c 65 27 73 20 64 65 70 65 6e 64  he file's depend
76a0: 65 6e 63 79 20 74 72 65 65 2e 20 20 49 6e 20 53  ency tree.  In S
76b0: 56 4e 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77  VN,..# 1.1.1.1 w
76c0: 69 6c 6c 20 62 65 20 61 64 64 65 64 20 64 69 72  ill be added dir
76d0: 65 63 74 6c 79 20 74 6f 20 74 68 65 20 76 65 6e  ectly to the ven
76e0: 64 6f 72 20 62 72 61 6e 63 68 20 77 69 74 68 20  dor branch with 
76f0: 69 74 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 63  its..# initial c
7700: 6f 6e 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e  ontent.  Then in
7710: 20 61 20 73 70 65 63 69 61 6c 20 27 70 6f 73 74   a special 'post
7720: 2d 63 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23  -commit', the..#
7730: 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f   1.1.1.1 revisio
7740: 6e 20 69 73 20 63 6f 70 69 65 64 20 62 61 63 6b  n is copied back
7750: 20 74 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49   to trunk....# I
7760: 66 20 74 68 65 20 75 73 65 72 20 69 6d 70 6f 72  f the user impor
7770: 74 73 20 61 67 61 69 6e 20 74 6f 20 74 68 65 20  ts again to the 
7780: 73 61 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 6e  same vendor bran
7790: 63 68 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 20  ch, then CVS..# 
77a0: 63 72 65 61 74 65 73 20 72 65 76 69 73 69 6f 6e  creates revision
77b0: 73 20 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31  s 1.1.1.2, 1.1.1
77c0: 2e 33 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 20  .3, etc. on the 
77d0: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09  vendor branch,..
77e0: 23 20 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e  # *without* coun
77f0: 74 65 72 70 61 72 74 73 20 69 6e 20 74 72 75 6e  terparts in trun
7800: 6b 20 28 65 76 65 6e 20 74 68 6f 75 67 68 20 74  k (even though t
7810: 68 65 73 65 20 72 65 76 69 73 69 6f 6e 73 0a 09  hese revisions..
7820: 23 20 65 66 66 65 63 74 69 76 65 6c 79 20 70 6c  # effectively pl
7830: 61 79 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 74  ay the role of t
7840: 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e  runk revisions).
7850: 20 20 53 6f 20 61 66 74 65 72 20 77 65 20 61 64    So after we ad
7860: 64 0a 09 23 20 73 75 63 68 20 72 65 76 69 73 69  d..# such revisi
7870: 6f 6e 73 20 74 6f 20 74 68 65 20 76 65 6e 64 6f  ons to the vendo
7880: 72 20 62 72 61 6e 63 68 2c 20 77 65 20 61 6c 73  r branch, we als
7890: 6f 20 63 6f 70 79 20 74 68 65 6d 20 62 61 63 6b  o copy them back
78a0: 20 74 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20   to..# trunk in 
78b0: 70 6f 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09  post-commits....
78c0: 23 20 57 65 20 6d 61 72 6b 20 74 68 65 20 72 65  # We mark the re
78d0: 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e  visions found in
78e0: 20 27 72 65 76 6c 69 73 74 27 20 61 73 20 64 65   'revlist' as de
78f0: 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20  fault branch..# 
7900: 72 65 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f  revisions.  Also
7910: 2c 20 69 66 20 74 68 65 20 72 6f 6f 74 20 72 65  , if the root re
7920: 76 69 73 69 6f 6e 20 68 61 73 20 61 20 70 72 69  vision has a pri
7930: 6d 61 72 79 20 63 68 69 6c 64 0a 09 23 20 77 65  mary child..# we
7940: 20 73 65 74 20 74 68 61 74 20 72 65 76 69 73 69   set that revisi
7950: 6f 6e 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20  on to depend on 
7960: 74 68 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75  the last non-tru
7970: 6e 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72  nk default..# br
7980: 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 61 6e  anch revision an
7990: 64 20 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 73  d possibly adjus
79a0: 74 20 69 74 73 20 74 79 70 65 20 61 63 63 6f 72  t its type accor
79b0: 64 69 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69  dingly....set fi
79c0: 72 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76  rst [lindex $rev
79d0: 6c 69 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72  list 0]...log wr
79e0: 69 74 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 66  ite 6 file "<[$f
79f0: 69 72 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78  irst revnr]> [ex
7a00: 70 72 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20  pr {$myimported 
7a10: 3f 20 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 22  ? "imported" : "
7a20: 6e 6f 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c  not imported"}],
7a30: 20 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74 69   [$first operati
7a40: 6f 6e 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69  on], [expr {[$fi
7a50: 72 73 74 20 68 61 73 74 65 78 74 5d 20 3f 20 22  rst hastext] ? "
7a60: 68 61 73 20 74 65 78 74 22 20 3a 20 22 6e 6f 20  has text" : "no 
7a70: 74 65 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24  text"}]"...if {$
7a80: 6d 79 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 20  myimported &&.. 
7a90: 20 20 20 5b 24 66 69 72 73 74 20 72 65 76 6e 72     [$first revnr
7aa0: 5d 20 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 26  ] eq "1.1.1.1" &
7ab0: 26 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20 6f  &..    [$first o
7ac0: 70 65 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 68  peration] eq "ch
7ad0: 61 6e 67 65 22 20 26 26 0a 09 20 20 20 20 21 5b  ange" &&..    ![
7ae0: 24 66 69 72 73 74 20 68 61 73 74 65 78 74 5d 7d  $first hastext]}
7af0: 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76   {...    set rev
7b00: 31 31 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e  11 [$first paren
7b10: 74 5d 20 3b 20 23 20 41 73 73 65 72 74 3a 20 53  t] ; # Assert: S
7b20: 68 6f 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e  hould be myroot.
7b30: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
7b40: 33 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67  3 file "Removing
7b50: 20 69 72 72 65 6c 65 76 61 6e 74 20 72 65 76 69   irrelevant revi
7b60: 73 69 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 76  sion [$rev11 rev
7b70: 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 74  nr]"...    # Cut
7b80: 20 6f 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 72   out the old myr
7b90: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09  oot revision....
7ba0: 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f      ldelete myro
7bb0: 6f 74 73 20 24 72 65 76 31 31 20 3b 20 23 20 4e  ots $rev11 ; # N
7bc0: 6f 74 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f  ot a root any lo
7bd0: 6e 67 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 72  nger....    $fir
7be0: 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74  st cutfromparent
7bf0: 20 3b 20 23 20 53 65 76 65 72 20 72 65 76 69 73   ; # Sever revis
7c00: 69 6f 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 20  ion from parent 
7c10: 72 65 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69  revision...    i
7c20: 66 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20  f {$stop ne ""} 
7c30: 7b 0a 09 09 24 73 74 6f 70 20 63 75 74 66 72 6f  {...$stop cutfro
7c40: 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e  mparent...lappen
7c50: 64 20 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 20  d myroots $stop 
7c60: 3b 20 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66  ; # New root, af
7c70: 74 65 72 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  ter vendor branc
7c80: 68 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23  h..    }...    #
7c90: 20 43 75 74 20 6f 75 74 20 74 68 65 20 76 65 6e   Cut out the ven
7ca0: 64 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f  dor branch symbo
7cb0: 6c 0a 0a 09 20 20 20 20 73 65 74 20 76 65 6e 64  l...    set vend
7cc0: 6f 72 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e  or [$first paren
7cd0: 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 6e  tbranch]..    in
7ce0: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b  tegrity assert {
7cf0: 24 76 65 6e 64 6f 72 20 6e 65 20 22 22 7d 20 7b  $vendor ne ""} {
7d00: 46 69 72 73 74 20 4e 54 44 42 20 72 65 76 69 73  First NTDB revis
7d10: 69 6f 6e 20 68 61 73 20 6e 6f 20 62 72 61 6e 63  ion has no branc
7d20: 68 7d 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65  h}..    if {[$ve
7d30: 6e 64 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20  ndor parent] eq 
7d40: 24 72 65 76 31 31 7d 20 7b 0a 09 09 24 72 65 76  $rev11} {...$rev
7d50: 31 31 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20  11 removebranch 
7d60: 20 20 20 20 20 20 20 24 76 65 6e 64 6f 72 0a 09         $vendor..
7d70: 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 63 68  .$rev11 removech
7d80: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 66 69 72  ildonbranch $fir
7d90: 73 74 0a 09 09 24 76 65 6e 64 6f 72 20 63 75 74  st...$vendor cut
7da0: 62 72 61 6e 63 68 70 61 72 65 6e 74 20 20 20 20  branchparent    
7db0: 3b 23 20 62 70 20 3d 20 72 65 76 31 31 2c 20 61  ;# bp = rev11, a
7dc0: 62 6f 75 74 20 74 6f 20 62 65 20 67 6f 6e 65 0a  bout to be gone.
7dd0: 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d  ..$first cutfrom
7de0: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 3b 23 20  parentbranch ;# 
7df0: 70 62 20 3d 20 76 65 6e 64 6f 72 2c 20 74 6f 20  pb = vendor, to 
7e00: 62 65 20 61 20 64 65 74 61 63 68 65 64 20 4c 4f  be a detached LO
7e10: 44 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f  D...lappend myro
7e20: 6f 74 73 20 24 66 69 72 73 74 0a 09 20 20 20 20  ots $first..    
7e30: 7d 0a 0a 09 20 20 20 20 23 20 43 68 61 6e 67 65  }...    # Change
7e40: 20 74 68 65 20 74 79 70 65 20 6f 66 20 66 69 72   the type of fir
7e50: 73 74 20 28 74 79 70 69 63 61 6c 6c 79 20 66 72  st (typically fr
7e60: 6f 6d 20 43 68 61 6e 67 65 20 74 6f 20 41 64 64  om Change to Add
7e70: 29 3a 0a 09 20 20 20 20 24 66 69 72 73 74 20 72  ):..    $first r
7e80: 65 74 79 70 65 20 61 64 64 0a 0a 09 20 20 20 20  etype add...    
7e90: 23 20 4d 6f 76 65 20 61 6e 79 20 74 61 67 73 20  # Move any tags 
7ea0: 61 6e 64 20 62 72 61 6e 63 68 65 73 20 66 72 6f  and branches fro
7eb0: 6d 20 74 68 65 20 6f 6c 64 20 74 6f 20 74 68 65  m the old to the
7ec0: 20 6e 65 77 20 72 6f 6f 74 2e 0a 09 20 20 20 20   new root...    
7ed0: 24 72 65 76 31 31 20 6d 6f 76 65 73 79 6d 62 6f  $rev11 movesymbo
7ee0: 6c 73 74 6f 20 24 66 69 72 73 74 0a 09 7d 0a 0a  lsto $first..}..
7ef0: 09 23 20 4d 61 72 6b 20 61 6c 6c 20 74 68 65 20  .# Mark all the 
7f00: 73 70 65 63 69 61 6c 20 72 65 76 69 73 69 6f 6e  special revision
7f10: 73 20 61 73 20 73 75 63 68 0a 09 66 6f 72 65 61  s as such..forea
7f20: 63 68 20 72 65 76 20 24 72 65 76 6c 69 73 74 20  ch rev $revlist 
7f30: 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  {..    log write
7f40: 20 33 20 66 69 6c 65 20 22 52 65 76 69 73 69 6f   3 file "Revisio
7f50: 6e 20 6f 6e 20 64 65 66 61 75 6c 74 20 62 72 61  n on default bra
7f60: 6e 63 68 3a 20 5b 24 72 65 76 20 72 65 76 6e 72  nch: [$rev revnr
7f70: 5d 22 0a 09 20 20 20 20 24 72 65 76 20 73 65 74  ]"..    $rev set
7f80: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20  ondefaultbranch 
7f90: 31 0a 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f 70  1..}...if {$stop
7fa0: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23   ne ""} {..    #
7fb0: 20 52 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c 6f   Revision 1.2 lo
7fc0: 67 69 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20  gically follows 
7fd0: 74 68 65 20 69 6d 70 6f 72 74 65 64 20 72 65 76  the imported rev
7fe0: 69 73 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20 6e  isions,..    # n
7ff0: 6f 74 20 31 2e 31 2e 20 20 41 63 63 6f 72 64 69  ot 1.1.  Accordi
8000: 6e 67 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69 74  ngly, connect it
8010: 20 74 6f 20 74 68 65 20 6c 61 73 74 20 4e 54 44   to the last NTD
8020: 42 52 20 61 6e 64 0a 09 20 20 20 20 23 20 70 6f  BR and..    # po
8030: 73 73 69 62 6c 79 20 63 68 61 6e 67 65 20 69 74  ssibly change it
8040: 73 20 74 79 70 65 2e 0a 0a 09 20 20 20 20 73 65  s type....    se
8050: 74 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20 24  t last [lindex $
8060: 72 65 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20 20  revlist end]..  
8070: 20 20 24 73 74 6f 70 20 73 65 74 64 65 66 61 75    $stop setdefau
8080: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 24  ltbranchparent $
8090: 6c 61 73 74 20 3b 20 23 20 52 65 74 79 70 65 73  last ; # Retypes
80a0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f   the revision to
80b0: 6f 2e 0a 09 20 20 20 20 24 6c 61 73 74 20 73 65  o...    $last se
80c0: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68  tdefaultbranchch
80d0: 69 6c 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09 72  ild  $stop..}..r
80e0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
80f0: 20 6d 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f 44   method CheckLOD
8100: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20  s {} {..foreach 
8110: 7b 5f 20 62 72 61 6e 63 68 7d 20 20 5b 61 72 72  {_ branch}  [arr
8120: 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65  ay get mybranche
8130: 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 63 68 65  s] { $branch che
8140: 63 6b 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63 68  cklod }..foreach
8150: 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72   {_ taglist} [ar
8160: 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20  ray get mytags] 
8170: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74  {..    foreach t
8180: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74  ag $taglist { $t
8190: 61 67 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d  ag checklod }..}
81a0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
81b0: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76      method Remov
81c0: 65 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 74  eIrrelevantDelet
81d0: 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f  ions {} {..# Fro
81e0: 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 61 20  m cvs2svn: If a 
81f0: 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e  file is added on
8200: 20 61 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20   a branch, then 
8210: 61 20 74 72 75 6e 6b 0a 09 23 20 72 65 76 69 73  a trunk..# revis
8220: 69 6f 6e 20 69 73 20 61 64 64 65 64 20 61 74 20  ion is added at 
8230: 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 69 6e  the same time in
8240: 20 74 68 65 20 27 44 65 61 64 27 20 73 74 61 74   the 'Dead' stat
8250: 65 2e 0a 09 23 20 54 68 69 73 20 72 65 76 69 73  e...# This revis
8260: 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61  ion doesn't do a
8270: 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 2c 20  nything useful, 
8280: 73 6f 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a 09  so delete it....
8290: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79  foreach root $my
82a0: 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 69 66 20  roots {..    if 
82b0: 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64  {[$root isneeded
82c0: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20  ]} continue..   
82d0: 20 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c   log write 2 fil
82e0: 65 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e 65  e "Removing unne
82f0: 63 65 73 73 61 72 79 20 64 65 61 64 20 72 65 76  cessary dead rev
8300: 69 73 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65 76  ision [$root rev
8310: 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 52 65 6d  nr]"...    # Rem
8320: 6f 76 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61 6b  ove as root, mak
8330: 65 20 69 74 73 20 63 68 69 6c 64 20 6e 65 77 20  e its child new 
8340: 72 6f 6f 74 20 61 66 74 65 72 0a 09 20 20 20 20  root after..    
8350: 23 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20  # disconnecting 
8360: 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69  it from the revi
8370: 73 69 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67 20  sion just going 
8380: 61 77 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65 6c  away....    ldel
8390: 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f  ete myroots $roo
83a0: 74 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f  t..    if {[$roo
83b0: 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a 09  t haschild]} {..
83c0: 09 73 65 74 20 63 68 69 6c 64 20 5b 24 72 6f 6f  .set child [$roo
83d0: 74 20 63 68 69 6c 64 5d 0a 09 09 24 63 68 69 6c  t child]...$chil
83e0: 64 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a  d cutfromparent.
83f0: 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74  ..lappend myroot
8400: 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a  s $child..    }.
8410: 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 20  ..    # Cut out 
8420: 74 68 65 20 62 72 61 6e 63 68 65 73 20 73 70 61  the branches spa
8430: 77 6e 65 64 20 62 79 20 74 68 65 20 72 65 76 69  wned by the revi
8440: 73 69 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20 20  sion to be..    
8450: 23 20 64 65 6c 65 74 65 64 2e 20 49 66 20 74 68  # deleted. If th
8460: 65 20 62 72 61 6e 63 68 20 68 61 73 20 72 65 76  e branch has rev
8470: 69 73 69 6f 6e 73 20 74 68 65 79 20 73 68 6f 75  isions they shou
8480: 6c 64 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20  ld already..    
8490: 23 20 75 73 65 20 6f 70 65 72 61 74 69 6f 6e 20  # use operation 
84a0: 27 61 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20 74  'add', no need t
84b0: 6f 20 63 68 61 6e 67 65 20 74 68 61 74 2e 20 54  o change that. T
84c0: 68 65 20 66 69 72 73 74 0a 09 20 20 20 20 23 20  he first..    # 
84d0: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63 68  revision on each
84e0: 20 62 72 61 6e 63 68 20 62 65 63 6f 6d 65 73 20   branch becomes 
84f0: 61 20 6e 65 77 20 61 6e 64 20 64 69 73 63 6f 6e  a new and discon
8500: 6e 65 63 74 65 64 0a 09 20 20 20 20 23 20 72 6f  nected..    # ro
8510: 6f 74 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61 63  ot....    foreac
8520: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20  h branch [$root 
8530: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 24 62  branches] {...$b
8540: 72 61 6e 63 68 20 63 75 74 62 72 61 6e 63 68 70  ranch cutbranchp
8550: 61 72 65 6e 74 0a 09 09 69 66 20 7b 21 5b 24 62  arent...if {![$b
8560: 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d  ranch haschild]}
8570: 20 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20   continue...set 
8580: 66 69 72 73 74 20 5b 24 62 72 61 6e 63 68 20 63  first [$branch c
8590: 68 69 6c 64 5d 0a 09 09 24 66 69 72 73 74 20 63  hild]...$first c
85a0: 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c  utfromparent...l
85b0: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24  append myroots $
85c0: 66 69 72 73 74 0a 09 20 20 20 20 7d 0a 09 20 20  first..    }..  
85d0: 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c    $root removeal
85e0: 6c 62 72 61 6e 63 68 65 73 0a 0a 09 20 20 20 20  lbranches...    
85f0: 23 20 54 61 67 67 69 6e 67 20 61 20 64 65 61 64  # Tagging a dead
8600: 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27   revision doesn'
8610: 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73  t do anything, s
8620: 6f 20 72 65 6d 6f 76 65 0a 09 20 20 20 20 23 20  o remove..    # 
8630: 61 6e 79 20 74 61 67 73 20 74 68 61 74 20 77 65  any tags that we
8640: 72 65 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09  re set on it....
8650: 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65      $root remove
8660: 61 6c 6c 74 61 67 73 0a 0a 09 20 20 20 20 23 20  alltags...    # 
8670: 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61  This can only ha
8680: 70 70 65 6e 20 6f 6e 63 65 20 70 65 72 20 66 69  ppen once per fi
8690: 6c 65 2c 20 61 6e 64 20 77 65 20 6d 69 67 68 74  le, and we might
86a0: 20 68 61 76 65 0a 09 20 20 20 20 23 20 6a 75 73   have..    # jus
86b0: 74 20 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74  t changed myroot
86c0: 73 2c 20 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f  s, so end the lo
86d0: 6f 70 0a 09 20 20 20 20 62 72 65 61 6b 0a 09 7d  op..    break..}
86e0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
86f0: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76      method Remov
8700: 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65  eInitialBranchDe
8710: 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20  letions {} {..# 
8720: 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66  From cvs2svn: If
8730: 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69 73   the first revis
8740: 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20  ion on a branch 
8750: 69 73 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73  is an..# unneces
8760: 73 61 72 79 20 64 65 6c 65 74 65 2c 20 72 65 6d  sary delete, rem
8770: 6f 76 65 20 69 74 2e 0a 09 23 0a 09 23 20 49 66  ove it...#..# If
8780: 20 61 20 66 69 6c 65 20 69 73 20 61 64 64 65 64   a file is added
8790: 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 28 77 68   on a branch (wh
87a0: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20  ether or not it 
87b0: 61 6c 72 65 61 64 79 0a 09 23 20 65 78 69 73 74  already..# exist
87c0: 65 64 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68  ed on trunk), th
87d0: 65 6e 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20  en new versions 
87e0: 6f 66 20 43 56 53 20 61 64 64 20 61 20 66 69 72  of CVS add a fir
87f0: 73 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76  st..# branch rev
8800: 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 27 64 65  ision in the 'de
8810: 61 64 27 20 73 74 61 74 65 20 28 74 6f 20 69 6e  ad' state (to in
8820: 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 0a  dicate that the.
8830: 09 23 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20  .# file did not 
8840: 65 78 69 73 74 20 6f 6e 20 74 68 65 20 62 72 61  exist on the bra
8850: 6e 63 68 20 77 68 65 6e 20 74 68 65 20 62 72 61  nch when the bra
8860: 6e 63 68 20 77 61 73 0a 09 23 20 63 72 65 61 74  nch was..# creat
8870: 65 64 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20  ed) followed by 
8880: 74 68 65 20 73 65 63 6f 6e 64 20 62 72 61 6e 63  the second branc
8890: 68 20 72 65 76 69 73 69 6f 6e 2c 20 77 68 69 63  h revision, whic
88a0: 68 20 69 73 20 61 6e 0a 09 23 20 61 64 64 2e 20  h is an..# add. 
88b0: 20 57 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74   When we encount
88c0: 65 72 20 74 68 69 73 20 73 69 74 75 61 74 69 6f  er this situatio
88d0: 6e 2c 20 77 65 20 73 65 76 65 72 20 74 68 65 20  n, we sever the 
88e0: 62 72 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74  branch..# from t
88f0: 72 75 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65 20  runk and delete 
8900: 74 68 65 20 66 69 72 73 74 20 62 72 61 6e 63 68  the first branch
8910: 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41   revision....# A
8920: 74 20 74 68 69 73 20 70 6f 69 6e 74 20 77 65 20  t this point we 
8930: 6d 61 79 20 68 61 76 65 20 61 6c 72 65 61 64 79  may have already
8940: 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20   multiple roots 
8950: 69 6e 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77  in myroots,..# w
8960: 65 20 68 61 76 65 20 74 6f 20 70 72 6f 63 65 73  e have to proces
8970: 73 20 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f  s them all....fo
8980: 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c  reach root [$sel
8990: 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70  f LinesOfDevelop
89a0: 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20  ment] {..    if 
89b0: 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64  {[$root isneeded
89c0: 62 72 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74  branchdel]} cont
89d0: 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72  inue..    log wr
89e0: 69 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f  ite 2 file "Remo
89f0: 76 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79  ving unnecessary
8a00: 20 69 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20   initial branch 
8a10: 64 65 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72 65  delete [$root re
8a20: 76 6e 72 5d 22 0a 0a 09 20 20 20 20 73 65 74 20  vnr]"...    set 
8a30: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61  branch [$root pa
8a40: 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20  rentbranch]..   
8a50: 20 73 65 74 20 70 61 72 65 6e 74 20 5b 24 72 6f   set parent [$ro
8a60: 6f 74 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20  ot parent]..    
8a70: 73 65 74 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f  set child  [$roo
8a80: 74 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c  t child]...    l
8a90: 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24  delete myroots $
8aa0: 72 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e  root..    lappen
8ab0: 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64  d myroots $child
8ac0: 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 63  ...    $branch c
8ad0: 75 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09  utbranchparent..
8ae0: 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 63      $branch cutc
8af0: 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64  hild..    $child
8b00: 20 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a    cutfromparent.
8b10: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65  ..    $branch se
8b20: 74 63 68 69 6c 64 20 20 20 20 20 20 20 20 24 63  tchild        $c
8b30: 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64  hild..    $child
8b40: 20 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63    setparentbranc
8b50: 68 20 24 62 72 61 6e 63 68 0a 0a 09 20 20 20 20  h $branch...    
8b60: 24 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72  $parent removebr
8b70: 61 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61  anch        $bra
8b80: 6e 63 68 0a 09 20 20 20 20 24 70 61 72 65 6e 74  nch..    $parent
8b90: 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72   removechildonbr
8ba0: 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09 72  anch $root..}..r
8bb0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
8bc0: 20 6d 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66 44   method LinesOfD
8bd0: 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a  evelopment {} {.
8be0: 09 23 20 44 65 74 65 72 6d 69 6e 65 20 61 6c 6c  .# Determine all
8bf0: 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f   lines of develo
8c00: 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 66 69  pment for the fi
8c10: 6c 65 2e 20 54 68 69 73 20 61 72 65 0a 09 23 20  le. This are..# 
8c20: 74 68 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c  the known roots,
8c30: 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f 66   and the root of
8c40: 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 66 6f   all branches fo
8c50: 75 6e 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c 69  und on the..# li
8c60: 6e 65 20 6f 66 20 70 72 69 6d 61 72 79 20 63 68  ne of primary ch
8c70: 69 6c 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f  ildren....set lo
8c80: 64 72 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65 61  droots {}..forea
8c90: 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73  ch root $myroots
8ca0: 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64   {..    $self Ad
8cb0: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66  dBranchedLinesOf
8cc0: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72  Development lodr
8cd0: 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20  oots $root..    
8ce0: 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73  lappend lodroots
8cf0: 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72   $root..}..retur
8d00: 6e 20 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20 20  n $lodroots.    
8d10: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64  }..    method Ad
8d20: 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66  dBranchedLinesOf
8d30: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20  Development {lv 
8d40: 72 6f 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20 31  root} {..upvar 1
8d50: 20 24 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09 77   $lv lodroots..w
8d60: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22  hile {$root ne "
8d70: 22 7d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63  "} {..    foreac
8d80: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20  h branch [$root 
8d90: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 66  branches] {...if
8da0: 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63   {![$branch hasc
8db0: 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  hild]} continue.
8dc0: 09 09 73 65 74 20 63 68 69 6c 64 20 5b 24 62 72  ..set child [$br
8dd0: 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 23 20  anch child]...# 
8de0: 52 65 63 75 72 73 65 20 69 6e 74 6f 20 74 68 65  Recurse into the
8df0: 20 62 72 61 6e 63 68 20 66 6f 72 20 64 65 65 70   branch for deep
8e00: 65 72 20 62 72 61 6e 63 68 65 73 2e 0a 09 09 24  er branches....$
8e10: 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64  self AddBranched
8e20: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
8e30: 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69  nt lodroots $chi
8e40: 6c 64 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f 64  ld...lappend lod
8e50: 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 20  roots $child..  
8e60: 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f    }..    set roo
8e70: 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  t [$root child].
8e80: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
8e90: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63  ..    method Exc
8ea0: 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f  ludeNonTrunkInfo
8eb0: 72 6d 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20  rmation {} {..# 
8ec0: 52 65 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74  Remove all non-t
8ed0: 72 75 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20 72  runk branches, r
8ee0: 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74 61  evisions, and ta
8ef0: 67 73 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65 65  gs. We do..# kee
8f00: 70 20 74 68 65 20 74 61 67 73 20 77 68 69 63 68  p the tags which
8f10: 20 61 72 65 20 6f 6e 20 74 68 65 20 74 72 75 6e   are on the trun
8f20: 6b 2e 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f 6f  k....set ntdbroo
8f30: 74 20 22 22 0a 09 66 6f 72 65 61 63 68 20 72 6f  t ""..foreach ro
8f40: 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f  ot [$self LinesO
8f50: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a  fDevelopment] {.
8f60: 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 48 65 72  .    # Note: Her
8f70: 65 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74  e the order of t
8f80: 68 65 20 72 6f 6f 74 73 20 69 73 20 69 6d 70 6f  he roots is impo
8f90: 72 74 61 6e 74 2c 0a 09 20 20 20 20 23 20 69 2e  rtant,..    # i.
8fa0: 65 2e 20 74 68 61 74 20 77 65 20 67 65 74 20 74  e. that we get t
8fb0: 68 65 6d 20 69 6e 20 64 65 70 74 68 20 66 69 72  hem in depth fir
8fc0: 73 74 20 6f 72 64 65 72 2e 20 54 68 69 73 20 65  st order. This e
8fd0: 6e 73 75 72 65 73 0a 09 20 20 20 20 23 20 74 68  nsures..    # th
8fe0: 61 74 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f  at the removal o
8ff0: 66 20 61 20 62 72 61 6e 63 68 20 68 61 70 70 65  f a branch happe
9000: 6e 73 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68  ns only after th
9010: 65 0a 09 20 20 20 20 23 20 62 72 61 6e 63 68 65  e..    # branche
9020: 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69  s spawned from i
9030: 74 20 77 65 72 65 20 72 65 6d 6f 76 65 64 2e 20  t were removed. 
9040: 4f 74 68 65 72 77 69 73 65 20 74 68 65 0a 09 20  Otherwise the.. 
9050: 20 20 20 23 20 73 79 73 74 65 6d 20 6d 69 67 68     # system migh
9060: 74 20 74 72 79 20 74 6f 20 61 63 63 65 73 73 20  t try to access 
9070: 64 65 6c 65 74 65 64 20 6f 62 6a 65 63 74 73 2e  deleted objects.
9080: 0a 0a 09 20 20 20 20 23 20 44 6f 20 6e 6f 74 20  ...    # Do not 
9090: 65 78 63 6c 75 64 65 20 74 68 65 20 74 72 75 6e  exclude the trun
90a0: 6b 2e 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24 72  k...    if {[[$r
90b0: 6f 6f 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e 6b  oot lod] istrunk
90c0: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20  ]} continue..   
90d0: 20 24 73 65 6c 66 20 45 78 63 6c 75 64 65 42 72   $self ExcludeBr
90e0: 61 6e 63 68 20 24 72 6f 6f 74 20 6e 74 64 62 72  anch $root ntdbr
90f0: 6f 6f 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e 74  oot..}...if {$nt
9100: 64 62 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a  dbroot ne ""} {.
9110: 09 20 20 20 20 24 73 65 6c 66 20 47 72 61 66 74  .    $self Graft
9120: 4e 54 44 42 32 54 72 75 6e 6b 20 24 6e 74 64 62  NTDB2Trunk $ntdb
9130: 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  root..}..return.
9140: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
9150: 64 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20  d ExcludeBranch 
9160: 7b 72 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20 45  {root nv} {..# E
9170: 78 63 6c 75 64 65 20 74 68 65 20 62 72 61 6e 63  xclude the branc
9180: 68 2f 6c 6f 64 20 73 74 61 72 74 69 6e 67 20 61  h/lod starting a
9190: 74 20 72 6f 6f 74 2c 20 61 20 72 65 76 69 73 69  t root, a revisi
91a0: 6f 6e 2e 0a 09 23 0a 09 23 20 49 66 20 74 68 65  on...#..# If the
91b0: 20 4c 4f 44 20 73 74 61 72 74 73 20 77 69 74 68   LOD starts with
91c0: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
91d0: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69  lt branch revisi
91e0: 6f 6e 73 2c 0a 09 23 20 77 65 20 6c 65 61 76 65  ons,..# we leave
91f0: 20 74 68 65 6d 20 69 6e 20 70 6c 61 63 65 20 61   them in place a
9200: 6e 64 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 65  nd do not delete
9210: 20 74 68 65 20 62 72 61 6e 63 68 2e 20 49 6e 20   the branch. In 
9220: 74 68 61 74 0a 09 23 20 63 61 73 65 20 74 68 65  that..# case the
9230: 20 63 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 68   command sets th
9240: 65 20 76 61 72 69 61 62 6c 65 20 69 6e 20 4e 56  e variable in NV
9250: 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 0a   so that we can.
9260: 09 23 20 6c 61 74 65 72 20 72 65 77 6f 72 6b 20  .# later rework 
9270: 74 68 65 73 65 20 72 65 76 69 73 6f 6e 73 20 74  these revisons t
9280: 6f 20 62 65 20 70 75 72 65 6c 79 20 74 72 75 6e  o be purely trun
9290: 6b 2e 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 20  k....if {[$root 
92a0: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63  isondefaultbranc
92b0: 68 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e  h]} {..    # Han
92c0: 64 6c 69 6e 67 20 61 20 4e 54 44 42 2e 20 54 68  dling a NTDB. Th
92d0: 69 73 20 62 72 61 6e 63 68 20 6d 61 79 20 63 6f  is branch may co
92e0: 6e 73 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79 20  nsists not only 
92f0: 6f 66 0a 09 20 20 20 20 23 20 4e 54 44 42 20 72  of..    # NTDB r
9300: 65 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 61 6c  evisions, but al
9310: 73 6f 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42  so some non-NTDB
9320: 2e 20 54 68 65 20 6c 61 74 74 65 72 20 61 72 65  . The latter are
9330: 0a 09 20 20 20 20 23 20 74 72 75 6c 79 20 6f 6e  ..    # truly on
9340: 20 61 20 62 72 61 6e 63 68 20 61 6e 64 20 68 61   a branch and ha
9350: 76 65 20 74 6f 20 62 65 20 65 78 63 6c 75 64 65  ve to be exclude
9360: 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  d. The following
9370: 0a 09 20 20 20 20 23 20 6c 6f 6f 70 20 64 65 74  ..    # loop det
9380: 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 72 65  ermines if there
9390: 20 61 72 65 20 73 75 63 68 20 72 65 76 69 73 69   are such revisi
93a0: 6f 6e 73 2e 0a 0a 09 20 20 20 20 75 70 76 61 72  ons....    upvar
93b0: 20 31 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74 0a   1 $nv ntdbroot.
93c0: 09 20 20 20 20 73 65 74 20 6e 74 64 62 72 6f 6f  .    set ntdbroo
93d0: 74 20 24 72 6f 6f 74 0a 09 20 20 20 20 24 72 6f  t $root..    $ro
93e0: 6f 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74  ot cutfromparent
93f0: 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 73 65 74  branch...    set
9400: 20 72 65 76 20 24 72 6f 6f 74 0a 09 20 20 20 20   rev $root..    
9410: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22  while {$rev ne "
9420: 22 7d 20 7b 0a 09 09 24 72 65 76 20 72 65 6d 6f  "} {...$rev remo
9430: 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09  veallbranches...
9440: 23 20 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a  # See note [x]..
9450: 0a 09 09 69 66 20 7b 5b 24 72 65 76 20 69 73 6f  ...if {[$rev iso
9460: 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d  ndefaultbranch]}
9470: 20 7b 0a 09 09 20 20 20 20 73 65 74 20 72 65 76   {...    set rev
9480: 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09   [$rev child]...
9490: 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 62  } else {...    b
94a0: 72 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a  reak...}..    }.
94b0: 0a 09 20 20 20 20 23 20 72 65 76 20 6e 6f 77 20  ..    # rev now 
94c0: 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72  contains the fir
94d0: 73 74 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76 69  st non-NTDB revi
94e0: 73 69 6f 6e 20 61 66 74 65 72 20 74 68 65 0a 09  sion after the..
94f0: 20 20 20 20 23 20 4e 54 44 42 2c 20 6f 72 20 69      # NTDB, or i
9500: 73 20 65 6d 70 74 79 20 69 66 20 74 68 65 72 65  s empty if there
9510: 20 69 73 20 6e 6f 20 73 75 63 68 2e 20 49 66 20   is no such. If 
9520: 77 65 20 68 61 76 65 20 73 6f 6d 65 0a 09 20 20  we have some..  
9530: 20 20 23 20 74 68 65 79 20 68 61 76 65 20 74 6f    # they have to
9540: 20 72 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20 20   removed....    
9550: 69 66 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20  if {$rev ne ""} 
9560: 20 7b 0a 09 09 73 65 74 20 6c 61 73 74 6e 74 64   {...set lastntd
9570: 62 20 5b 24 72 65 76 20 70 61 72 65 6e 74 5d 0a  b [$rev parent].
9580: 09 09 24 6c 61 73 74 6e 74 64 62 20 63 75 74 66  ..$lastntdb cutf
9590: 72 6f 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c 65  romchild...while
95a0: 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a   {$rev ne ""} {.
95b0: 09 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76  ..    $rev remov
95c0: 65 61 6c 6c 74 61 67 73 0a 09 09 20 20 20 20 24  ealltags...    $
95d0: 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61  rev removeallbra
95e0: 6e 63 68 65 73 0a 09 09 20 20 20 20 23 20 4e 6f  nches...    # No
95f0: 74 65 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20 73  te [x]: We may s
9600: 74 69 6c 6c 20 68 61 76 65 20 68 61 64 20 62 72  till have had br
9610: 61 6e 63 68 65 73 20 6f 6e 20 74 68 65 0a 09 09  anches on the...
9620: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2e 20      # revision. 
9630: 42 72 61 6e 63 68 65 73 20 77 69 74 68 6f 75 74  Branches without
9640: 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d 69   revisions commi
9650: 74 74 65 64 0a 09 09 20 20 20 20 23 20 6f 6e 20  tted...    # on 
9660: 74 68 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f 77  them do not show
9670: 20 75 70 20 69 6e 20 74 68 65 20 6c 69 73 74 20   up in the list 
9680: 6f 66 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09 20  of roots aka... 
9690: 20 20 20 23 20 6c 69 6e 65 73 20 6f 66 20 64 65     # lines of de
96a0: 76 65 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20 20  velopment....   
96b0: 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63   set rev [$rev c
96c0: 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d  hild]...}..    }
96d0: 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a  ..    return..}.
96e0: 0a 09 23 20 4e 6f 20 4e 54 44 42 20 73 74 75 66  ..# No NTDB stuf
96f0: 66 20 74 6f 20 64 65 61 6c 20 77 69 74 68 2e 20  f to deal with. 
9700: 46 69 72 73 74 20 64 65 6c 65 74 65 20 74 68 65  First delete the
9710: 20 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a 09   branch object..
9720: 23 20 69 74 73 65 6c 66 2c 20 61 66 74 65 72 20  # itself, after 
9730: 63 75 74 74 69 6e 67 20 61 6c 6c 20 74 68 65 20  cutting all the 
9740: 76 61 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74 69  various connecti
9750: 6f 6e 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e 63  ons....set branc
9760: 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62  h [$root parentb
9770: 72 61 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72 61  ranch]..if {$bra
9780: 6e 63 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20  nch ne ""} {..  
9790: 20 20 73 65 74 20 62 72 61 6e 63 68 70 61 72 65    set branchpare
97a0: 6e 74 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65  nt [$branch pare
97b0: 6e 74 5d 0a 09 20 20 20 20 24 62 72 61 6e 63 68  nt]..    $branch
97c0: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61  parent removebra
97d0: 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e  nch        $bran
97e0: 63 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70  ch..    $branchp
97f0: 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c  arent removechil
9800: 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a  donbranch $root.
9810: 09 7d 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20  .}...# The root 
9820: 69 73 20 6e 6f 20 73 75 63 68 20 61 6e 79 20 6c  is no such any l
9830: 6f 6e 67 65 72 20 65 69 74 68 65 72 2e 0a 09 6c  onger either...l
9840: 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24  delete myroots $
9850: 72 6f 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f 20  root...# Now go 
9860: 74 68 72 6f 75 67 68 20 74 68 65 20 6c 69 6e 65  through the line
9870: 20 61 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c 20   and remove all 
9880: 69 74 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a  its revisions...
9890: 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65  .while {$root ne
98a0: 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f   ""} {..    $roo
98b0: 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a  t removealltags.
98c0: 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76  .    $root remov
98d0: 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20 20  eallbranches..  
98e0: 20 20 23 20 4e 6f 74 65 3a 20 53 65 65 20 74 68    # Note: See th
98f0: 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20 20  e note [x]....  
9900: 20 20 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e    # From cvs2svn
9910: 3a 20 49 66 20 74 68 69 73 20 69 73 20 74 68 65  : If this is the
9920: 20 6c 61 73 74 20 64 65 66 61 75 6c 74 20 72 65   last default re
9930: 76 69 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20 20  vision on a..   
9940: 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66   # non-trunk def
9950: 61 75 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c 6c  ault branch foll
9960: 6f 77 65 64 20 62 79 20 61 20 31 2e 32 20 72 65  owed by a 1.2 re
9970: 76 69 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 74  vision,..    # t
9980: 68 65 6e 20 74 68 65 20 31 2e 32 20 72 65 76 69  hen the 1.2 revi
9990: 73 69 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e 20  sion depends on 
99a0: 74 68 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d 45  this one.  FIXME
99b0: 3a 20 49 74 20 69 73 0a 09 20 20 20 20 23 20 71  : It is..    # q
99c0: 75 65 73 74 69 6f 6e 61 62 6c 65 20 77 68 65 74  uestionable whet
99d0: 68 65 72 20 74 68 69 73 20 68 61 6e 64 6c 69 6e  her this handlin
99e0: 67 20 69 73 20 63 6f 72 72 65 63 74 2c 20 73 69  g is correct, si
99f0: 6e 63 65 20 74 68 65 0a 09 20 20 20 20 23 20 6e  nce the..    # n
9a00: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
9a10: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e   branch revision
9a20: 73 20 61 66 66 65 63 74 20 74 72 75 6e 6b 20 61  s affect trunk a
9a30: 6e 64 0a 09 20 20 20 20 23 20 73 68 6f 75 6c 64  nd..    # should
9a40: 20 74 68 65 72 65 66 6f 72 65 20 6e 6f 74 20 6a   therefore not j
9a50: 75 73 74 20 62 65 20 64 69 73 63 61 72 64 65 64  ust be discarded
9a60: 20 65 76 65 6e 20 69 66 0a 09 20 20 20 20 23 20   even if..    # 
9a70: 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09  --trunk-only....
9a80: 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68      if {[$root h
9a90: 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63  asdefaultbranchc
9aa0: 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 6e  hild]} {...set n
9ab0: 74 64 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20  tdbchild [$root 
9ac0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69  defaultbranchchi
9ad0: 6c 64 5d 0a 09 09 69 6e 74 65 67 72 69 74 79 20  ld]...integrity 
9ae0: 61 73 73 65 72 74 20 7b 0a 09 09 20 20 20 20 5b  assert {...    [
9af0: 24 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61 75  $ntdbchild defau
9b00: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d 20  ltbranchparent] 
9b10: 65 71 20 24 6e 74 64 62 63 68 69 6c 64 0a 09 09  eq $ntdbchild...
9b20: 7d 20 7b 6e 74 64 62 20 2d 20 74 72 75 6e 6b 20  } {ntdb - trunk 
9b30: 6c 69 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 7d 0a  linkage broken}.
9b40: 09 09 24 6e 74 64 62 63 68 69 6c 64 20 63 75 74  ..$ntdbchild cut
9b50: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72  defaultbranchpar
9b60: 65 6e 74 0a 09 09 69 66 20 7b 5b 24 6e 74 64 62  ent...if {[$ntdb
9b70: 63 68 69 6c 64 20 68 61 73 70 61 72 65 6e 74 5d  child hasparent]
9b80: 7d 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e  } {...    lappen
9b90: 64 20 6d 79 72 6f 6f 74 73 20 5b 24 6e 74 64 62  d myroots [$ntdb
9ba0: 63 68 69 6c 64 20 70 61 72 65 6e 74 5d 0a 09 09  child parent]...
9bb0: 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73  }..    }...    s
9bc0: 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63  et root [$root c
9bd0: 68 69 6c 64 5d 0a 09 7d 0a 0a 09 72 65 74 75 72  hild]..}...retur
9be0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
9bf0: 68 6f 64 20 47 72 61 66 74 4e 54 44 42 32 54 72  hod GraftNTDB2Tr
9c00: 75 6e 6b 20 7b 72 6f 6f 74 7d 20 7b 0a 09 23 20  unk {root} {..# 
9c10: 57 65 20 63 61 6e 20 6e 6f 77 20 67 72 61 66 74  We can now graft
9c20: 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64   the non-trunk d
9c30: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65  efault branch re
9c40: 76 69 73 69 6f 6e 73 20 74 6f 0a 09 23 20 74 72  visions to..# tr
9c50: 75 6e 6b 2e 20 54 68 65 79 20 73 68 6f 75 6c 64  unk. They should
9c60: 20 61 6c 72 65 61 64 79 20 62 65 20 61 6c 6f 6e   already be alon
9c70: 65 20 6f 6e 20 61 20 43 56 53 42 72 61 6e 63 68  e on a CVSBranch
9c80: 2d 6c 65 73 73 0a 09 23 20 62 72 61 6e 63 68 2e  -less..# branch.
9c90: 0a 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73  ...integrity ass
9ca0: 65 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73  ert {![$root has
9cb0: 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b  parentbranch]} {
9cc0: 4e 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20  NTDB root still 
9cd0: 68 61 73 20 69 74 73 20 62 72 61 6e 63 68 20 73  has its branch s
9ce0: 79 6d 62 6f 6c 7d 0a 09 69 6e 74 65 67 72 69 74  ymbol}..integrit
9cf0: 79 20 61 73 73 65 72 74 20 7b 21 5b 24 72 6f 6f  y assert {![$roo
9d00: 74 20 68 61 73 62 72 61 6e 63 68 65 73 5d 7d 20  t hasbranches]} 
9d10: 20 20 20 20 7b 4e 54 44 42 20 72 6f 6f 74 20 73      {NTDB root s
9d20: 74 69 6c 6c 20 68 61 73 20 73 70 61 77 6e 65 64  till has spawned
9d30: 20 62 72 61 6e 63 68 65 73 7d 0a 0a 09 73 65 74   branches}...set
9d40: 20 6c 61 73 74 20 24 72 6f 6f 74 0a 09 77 68 69   last $root..whi
9d50: 6c 65 20 7b 5b 24 6c 61 73 74 20 68 61 73 63 68  le {[$last hasch
9d60: 69 6c 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74 20  ild]} {set last 
9d70: 5b 24 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a 0a  [$last child]}..
9d80: 09 69 66 20 7b 5b 24 6c 61 73 74 20 68 61 73 64  .if {[$last hasd
9d90: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c  efaultbranchchil
9da0: 64 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20  d]} {...    set 
9db0: 72 65 76 31 32 20 5b 24 6c 61 73 74 20 64 65 66  rev12 [$last def
9dc0: 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d  aultbranchchild]
9dd0: 0a 09 20 20 20 20 24 72 65 76 31 32 20 63 75 74  ..    $rev12 cut
9de0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72  defaultbranchpar
9df0: 65 6e 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20  ent..    $last  
9e00: 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68  cutdefaultbranch
9e10: 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 72 65 76  child...    $rev
9e20: 31 32 20 63 68 61 6e 67 65 70 61 72 65 6e 74 20  12 changeparent 
9e30: 24 6c 61 73 74 0a 09 20 20 20 20 24 6c 61 73 74  $last..    $last
9e40: 20 20 63 68 61 6e 67 65 63 68 69 6c 64 20 24 72    changechild $r
9e50: 65 76 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c 65  ev12...    ldele
9e60: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31  te myroots $rev1
9e70: 32 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 61  2...    # Note a
9e80: 6e 64 20 72 65 6d 65 6d 62 65 72 20 74 68 61 74  nd remember that
9e90: 20 74 68 65 20 74 79 70 65 20 6f 66 20 72 65 76   the type of rev
9ea0: 31 32 20 77 61 73 20 61 6c 72 65 61 64 79 0a 09  12 was already..
9eb0: 20 20 20 20 23 20 61 64 6a 75 73 74 65 64 20 62      # adjusted b
9ec0: 79 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b  y AdjustNonTrunk
9ed0: 44 65 66 61 75 6c 74 42 72 61 6e 63 68 2c 20 73  DefaultBranch, s
9ee0: 6f 20 77 65 20 64 6f 6e 27 74 0a 09 20 20 20 20  o we don't..    
9ef0: 23 20 68 61 76 65 20 74 6f 20 63 68 61 6e 67 65  # have to change
9f00: 20 69 74 73 20 74 79 70 65 20 68 65 72 65 2e 0a   its type here..
9f10: 09 7d 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f  .}...while {$roo
9f20: 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20  t ne ""} {..    
9f30: 24 72 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61 75  $root setondefau
9f40: 6c 74 62 72 61 6e 63 68 20 30 0a 09 20 20 20 20  ltbranch 0..    
9f50: 24 72 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d 79  $root setlod $my
9f60: 74 72 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65 61  trunk..    forea
9f70: 63 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 61  ch tag [$root ta
9f80: 67 73 5d 20 7b 0a 09 09 24 74 61 67 20 73 65 74  gs] {...$tag set
9f90: 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20  lod $mytrunk..  
9fa0: 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f    }..    set roo
9fb0: 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  t [$root child].
9fc0: 09 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75  .}..        retu
9fd0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
9fe0: 74 68 6f 64 20 41 63 74 69 76 65 20 7b 7d 20 7b  thod Active {} {
9ff0: 0a 09 73 65 74 20 72 65 76 69 73 69 6f 6e 73 20  ..set revisions 
a000: 7b 7d 0a 09 73 65 74 20 73 79 6d 62 6f 6c 73 20  {}..set symbols 
a010: 20 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 72    {}...foreach r
a020: 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73  oot [$self Lines
a030: 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b  OfDevelopment] {
a040: 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74  ..    if {[$root
a050: 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68   hasparentbranch
a060: 5d 7d 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d  ]} { lappend sym
a070: 62 6f 6c 73 20 5b 24 72 6f 6f 74 20 70 61 72 65  bols [$root pare
a080: 6e 74 62 72 61 6e 63 68 5d 20 7d 0a 09 20 20 20  ntbranch] }..   
a090: 20 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65   while {$root ne
a0a0: 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64   ""} {...lappend
a0b0: 20 72 65 76 69 73 69 6f 6e 73 20 24 72 6f 6f 74   revisions $root
a0c0: 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 20  ...foreach tag  
a0d0: 20 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 20    [$root tags]  
a0e0: 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d     { lappend sym
a0f0: 62 6f 6c 73 20 24 74 61 67 20 20 20 20 7d 0a 09  bols $tag    }..
a100: 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20  .foreach branch 
a110: 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d  [$root branches]
a120: 20 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69   {...    integri
a130: 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b  ty assert {....[
a140: 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 20  $branch parent] 
a150: 65 71 20 24 72 6f 6f 74 0a 09 09 20 20 20 20 7d  eq $root...    }
a160: 20 7b 42 61 63 6b 72 65 66 65 72 65 6e 63 65 20   {Backreference 
a170: 62 72 61 6e 63 68 20 74 6f 20 69 74 73 20 72 6f  branch to its ro
a180: 6f 74 20 69 73 20 6d 69 73 73 69 6e 67 20 6f 72  ot is missing or
a190: 20 77 72 6f 6e 67 7d 0a 09 09 20 20 20 20 6c 61   wrong}...    la
a1a0: 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 62  ppend symbols $b
a1b0: 72 61 6e 63 68 0a 09 09 7d 0a 09 09 73 65 74 20  ranch...}...set 
a1c0: 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a  lod [$root lod].
a1d0: 09 09 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74  ..if {![$lod ist
a1e0: 72 75 6e 6b 5d 7d 20 7b 0a 09 09 20 20 20 20 69  runk]} {...    i
a1f0: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20  ntegrity assert 
a200: 7b 0a 09 09 09 5b 24 6c 6f 64 20 68 61 73 63 68  {....[$lod hasch
a210: 69 6c 64 5d 0a 09 09 20 20 20 20 7d 20 7b 42 72  ild]...    } {Br
a220: 61 6e 63 68 20 69 73 20 4c 4f 44 20 73 79 6d 62  anch is LOD symb
a230: 6f 6c 20 77 69 74 68 6f 75 74 20 72 65 76 69 73  ol without revis
a240: 69 6f 6e 73 7d 0a 09 09 20 20 20 20 6c 61 70 70  ions}...    lapp
a250: 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 6c 6f 64  end symbols $lod
a260: 0a 09 09 7d 0a 09 09 73 65 74 20 72 6f 6f 74 20  ...}...set root 
a270: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20  [$root child].. 
a280: 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e     }..}...return
a290: 20 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 20 2d 75   [list [lsort -u
a2a0: 6e 69 71 75 65 20 2d 64 69 63 74 20 24 72 65 76  nique -dict $rev
a2b0: 69 73 69 6f 6e 73 5d 20 5b 6c 73 6f 72 74 20 2d  isions] [lsort -
a2c0: 75 6e 69 71 75 65 20 2d 64 69 63 74 20 24 73 79  unique -dict $sy
a2d0: 6d 62 6f 6c 73 5d 5d 0a 20 20 20 20 7d 0a 0a 0a  mbols]].    }...
a2e0: 20 20 20 20 6d 65 74 68 6f 64 20 41 67 67 72 65      method Aggre
a2f0: 67 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 20 7b  gateSymbolData {
a300: 7d 20 7b 0a 09 23 20 4e 6f 77 20 74 68 61 74 20  } {..# Now that 
a310: 74 68 65 20 65 78 61 63 74 20 73 65 74 20 6f 66  the exact set of
a320: 20 72 65 76 69 73 69 6f 6e 73 20 28 61 6e 64 20   revisions (and 
a330: 74 68 72 6f 75 67 68 20 74 68 61 74 0a 09 23 20  through that..# 
a340: 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67  branches and tag
a350: 73 29 20 69 73 20 6b 6e 6f 77 6e 20 77 65 20 63  s) is known we c
a360: 61 6e 20 75 70 64 61 74 65 20 74 68 65 20 61 67  an update the ag
a370: 67 72 65 67 61 74 65 0a 09 23 20 73 79 6d 62 6f  gregate..# symbo
a380: 6c 20 73 74 61 74 69 73 74 69 63 73 2e 0a 0a 09  l statistics....
a390: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73  foreach root [$s
a3a0: 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c  elf LinesOfDevel
a3b0: 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 73  opment] {..    s
a3c0: 65 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f  et lod [$root lo
a3d0: 64 5d 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a  d]...    # Note:
a3e0: 20 49 66 20 74 68 65 20 4c 4f 44 20 69 73 20 74   If the LOD is t
a3f0: 68 65 20 74 72 75 6e 6b 20 74 68 65 20 63 6f 75  he trunk the cou
a400: 6e 74 2a 2c 20 65 74 63 2e 20 6d 65 74 68 6f 64  nt*, etc. method
a410: 73 0a 09 20 20 20 20 23 20 77 69 6c 6c 20 64 6f  s..    # will do
a420: 20 6e 6f 74 68 69 6e 67 2c 20 61 73 20 69 74 20   nothing, as it 
a430: 69 73 20 61 6c 77 61 79 73 20 70 72 65 73 65 6e  is always presen
a440: 74 20 28 63 61 6e 6e 6f 74 20 62 65 0a 09 20 20  t (cannot be..  
a450: 20 20 23 20 65 78 63 6c 75 64 65 64 29 2c 20 61    # excluded), a
a460: 6e 64 20 69 73 20 61 6c 77 61 79 73 20 61 20 62  nd is always a b
a470: 72 61 6e 63 68 20 74 6f 6f 2e 0a 0a 09 20 20 20  ranch too....   
a480: 20 23 20 4c 69 6e 65 73 20 6f 66 20 64 65 76 65   # Lines of deve
a490: 6c 6f 70 6d 65 6e 74 20 63 6f 75 6e 74 20 61 73  lopment count as
a4a0: 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 68 61   branches and ha
a4b0: 76 65 20 61 20 63 6f 6d 6d 69 74 0a 09 20 20 20  ve a commit..   
a4c0: 20 23 20 6f 6e 20 74 68 65 6d 20 28 72 6f 6f 74   # on them (root
a4d0: 29 2e 20 49 66 20 74 68 65 79 20 61 72 65 20 73  ). If they are s
a4e0: 74 69 6c 6c 20 61 74 74 61 63 68 65 64 20 74 6f  till attached to
a4f0: 20 61 20 74 72 65 65 20 77 65 0a 09 20 20 20 20   a tree we..    
a500: 23 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 74  # have to comput
a510: 65 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 70  e and register p
a520: 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73 2e  ossible parents.
a530: 0a 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e  ...    $lod coun
a540: 74 61 73 62 72 61 6e 63 68 0a 09 20 20 20 20 24  tasbranch..    $
a550: 6c 6f 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69 74  lod countacommit
a560: 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f  ...    if {[$roo
a570: 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63  t hasparentbranc
a580: 68 5d 7d 20 7b 0a 09 09 23 20 4e 6f 74 65 20 6c  h]} {...# Note l
a590: 6f 64 20 3d 3d 20 5b 24 72 6f 6f 74 20 70 61 72  od == [$root par
a5a0: 65 6e 74 62 72 61 6e 63 68 5d 0a 09 09 24 6c 6f  entbranch]...$lo
a5b0: 64 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74  d possibleparent
a5c0: 73 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20  s..    } elseif 
a5d0: 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d  {![$lod istrunk]
a5e0: 20 26 26 20 5b 24 72 6f 6f 74 20 69 73 6f 6e 64   && [$root isond
a5f0: 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b  efaultbranch]} {
a600: 0a 09 09 23 20 54 68 69 73 20 69 73 20 74 68 65  ...# This is the
a610: 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 6f   root revision o
a620: 66 20 61 20 64 65 74 61 63 68 65 64 20 4e 54 44  f a detached NTD
a630: 42 2e 20 57 65 0a 09 09 23 20 68 61 76 65 20 74  B. We...# have t
a640: 6f 20 6d 61 6e 75 61 6c 6c 79 20 73 65 74 20 74  o manually set t
a650: 68 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65  he only possible
a660: 20 70 61 72 65 6e 74 20 66 6f 72 0a 09 09 23 20   parent for...# 
a670: 74 68 69 73 20 4c 4f 44 2c 20 74 68 65 20 74 72  this LOD, the tr
a680: 75 6e 6b 20 69 74 73 65 6c 66 2e 0a 0a 09 09 5b  unk itself.....[
a690: 24 6c 6f 64 20 73 79 6d 62 6f 6c 5d 20 70 6f 73  $lod symbol] pos
a6a0: 73 69 62 6c 65 70 61 72 65 6e 74 20 24 6d 79 74  sibleparent $myt
a6b0: 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 20  runk..    }...  
a6c0: 20 20 23 20 46 6f 72 20 74 68 65 20 72 65 76 69    # For the revi
a6d0: 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 6e  sions in the lin
a6e0: 65 20 77 65 20 72 65 67 69 73 74 65 72 20 74 68  e we register th
a6f0: 65 69 72 20 62 72 61 6e 63 68 65 73 0a 09 20 20  eir branches..  
a700: 20 20 23 20 61 6e 64 20 74 61 67 73 20 61 73 20    # and tags as 
a710: 62 6c 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 65  blockers for the
a720: 20 6c 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 65   lod, and update
a730: 20 74 68 65 20 74 79 70 65 0a 09 20 20 20 20 23   the type..    #
a740: 20 63 6f 75 6e 74 65 72 73 20 61 73 20 77 65 6c   counters as wel
a750: 6c 2e 20 41 73 20 62 72 61 6e 63 68 20 73 79 6d  l. As branch sym
a760: 62 6f 6c 73 20 77 69 74 68 6f 75 74 20 63 6f 6d  bols without com
a770: 6d 69 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 74  mits on..    # t
a780: 68 65 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 74  hem are not list
a790: 65 64 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 64  ed as lines of d
a7a0: 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 68  evelopment, we h
a7b0: 61 76 65 20 74 6f 0a 09 20 20 20 20 23 20 63 6f  ave to..    # co
a7c0: 75 6e 74 20 74 68 65 6d 20 68 65 72 65 20 61 73  unt them here as
a7d0: 20 77 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e 20   well, as plain 
a7e0: 62 72 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 73  branches. At las
a7f0: 74 20 77 65 0a 09 20 20 20 20 23 20 68 61 76 65  t we..    # have
a800: 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20   to compute and 
a810: 72 65 67 69 73 74 65 72 20 74 68 65 20 70 6f 73  register the pos
a820: 73 69 62 6c 65 20 70 61 72 65 6e 74 73 20 6f 66  sible parents of
a830: 20 74 68 65 0a 09 20 20 20 20 23 20 74 61 67 73   the..    # tags
a840: 2c 20 69 6e 20 63 61 73 65 20 74 68 65 79 20 61  , in case they a
a850: 72 65 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 74  re later convert
a860: 65 64 20 61 73 20 62 72 61 6e 63 68 65 73 2e 0a  ed as branches..
a870: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f  ..    while {$ro
a880: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 6f  ot ne ""} {...fo
a890: 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72  reach branch [$r
a8a0: 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a  oot branches] {.
a8b0: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b  ..    $lod block
a8c0: 65 64 62 79 20 24 62 72 61 6e 63 68 0a 09 09 20  edby $branch... 
a8d0: 20 20 20 24 62 72 61 6e 63 68 20 70 6f 73 73 69     $branch possi
a8e0: 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20  bleparents...   
a8f0: 20 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61   if {[$branch ha
a900: 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75  schild]} continu
a910: 65 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20  e...    $branch 
a920: 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 09  countasbranch...
a930: 7d 0a 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67  }....foreach tag
a940: 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a   [$root tags] {.
a950: 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b  ..    $lod block
a960: 65 64 62 79 20 24 74 61 67 0a 09 09 20 20 20 20  edby $tag...    
a970: 24 74 61 67 20 70 6f 73 73 69 62 6c 65 70 61 72  $tag possiblepar
a980: 65 6e 74 73 0a 09 09 20 20 20 20 24 74 61 67 20  ents...    $tag 
a990: 63 6f 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a 0a  countastag...}..
a9a0: 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f  ..set root [$roo
a9b0: 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a  t child]..    }.
a9c0: 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  .}...return.    
a9d0: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  }..    # # ## ##
a9e0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
a9f0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
aa00: 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74     ## Configurat
aa10: 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20  ion..    pragma 
aa20: 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20  -hastypeinfo    
aa30: 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20  no  ; # no type 
aa40: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20  introspection.  
aa50: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66    pragma -hasinf
aa60: 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23  o        no  ; #
aa70: 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f   no object intro
aa80: 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61  spection.    pra
aa90: 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68  gma -hastypemeth
aaa0: 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65  ods no  ; # type
aab0: 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74   is not relevant
aac0: 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  ...    # # ## ##
aad0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
aae0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d   #############.}
aaf0: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
ab00: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
ab10: 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20  mport::cvs {.   
ab20: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72   namespace expor
ab30: 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 73  t file.    names
ab40: 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20 7b  pace eval file {
ab50: 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 72  ..# Import not r
ab60: 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64 79  equired, already
ab70: 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 61   a child namespa
ab80: 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 65  ce...# namespace
ab90: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
aba0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
abb0: 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 20  s::file::rev..# 
abc0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
abd0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
abe0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65  mport::cvs::file
abf0: 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 65  ::sym..namespace
ac00: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f   import ::vc::to
ac10: 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61  ols::misc::*..na
ac20: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
ac30: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75  :vc::tools::trou
ac40: 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69  ble..namespace i
ac50: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c  mport ::vc::tool
ac60: 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 63  s::log..namespac
ac70: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
ac80: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
ac90: 76 73 3a 3a 62 6c 6f 62 73 74 6f 72 65 0a 09 6e  vs::blobstore..n
aca0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
acb0: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
acc0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65  port::cvs::state
acd0: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  ..namespace impo
ace0: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  rt ::vc::fossil:
acf0: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e  :import::cvs::in
ad00: 74 65 67 72 69 74 79 0a 09 6e 61 6d 65 73 70 61  tegrity..namespa
ad10: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
ad20: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
ad30: 63 76 73 3a 3a 67 74 63 6f 72 65 0a 20 20 20 20  cvs::gtcore.    
ad40: 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20  }.}..# # ## ### 
ad50: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
ad60: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
ad70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ad80: 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63  ##.## Ready..pac
ad90: 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a  kage provide vc:
ada0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
adb0: 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a 72  :cvs::file 1.0.r
adc0: 65 74 75 72 6e 0a                                eturn.