Hex Artifact Content
Not logged in

Artifact 64c0d8ace6e10e479e26b73c8dd448c7f1bd4b75:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [aa04ac9d10] - Extended the collection of revisions for a file with a separate blob store to manage the text ranges of revisions and their dependencies separate from the revisions. This will be used later (upcoming) to properly expand a file even if revisions were removed as irrelevant during the collection and filter passes. by aku on 2008-02-03 00:04:37.

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: 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09  } [state run {..
26c0: 20 20 20 20 53 45 4c 45 43 54 20 52 2e 72 69 64      SELECT R.rid
26d0: 2c 20 52 2e 72 65 76 2c 20 52 2e 70 61 72 65 6e  , R.rev, R.paren
26e0: 74 2c 20 52 2e 63 68 69 6c 64 2c 20 52 2e 63 6f  t, R.child, R.co
26f0: 66 66 2c 20 52 2e 63 6c 65 6e 0a 09 20 20 20 20  ff, R.clen..    
2700: 46 52 4f 4d 20 20 20 72 65 76 69 73 69 6f 6e 20  FROM   revision 
2710: 52 0a 09 20 20 20 20 57 48 45 52 45 20 20 52 2e  R..    WHERE  R.
2720: 66 69 64 20 3d 20 24 6d 79 69 64 0a 09 7d 5d 20  fid = $myid..}] 
2730: 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  {..    lappend r
2740: 65 76 6d 61 70 20 72 24 72 65 76 6e 72 20 24 72  evmap r$revnr $r
2750: 69 64 0a 0a 09 20 20 20 20 24 7a 70 20 6e 6f 64  id...    $zp nod
2760: 65 20 69 6e 73 65 72 74 20 24 72 69 64 0a 09 20  e insert $rid.. 
2770: 20 20 20 24 7a 70 20 6e 6f 64 65 20 73 65 74 20     $zp node set 
2780: 20 20 20 24 72 69 64 20 72 65 76 6e 72 20 24 72     $rid revnr $r
2790: 65 76 6e 72 0a 09 20 20 20 20 24 7a 70 20 6e 6f  evnr..    $zp no
27a0: 64 65 20 73 65 74 20 20 20 20 24 72 69 64 20 6c  de set    $rid l
27b0: 61 62 65 6c 20 3c 24 72 65 76 6e 72 3e 0a 0a 09  abel <$revnr>...
27c0: 20 20 20 20 69 66 20 7b 24 63 68 69 6c 64 20 6e      if {$child n
27d0: 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e  e ""} {...lappen
27e0: 64 20 7a 61 72 63 73 20 24 63 68 69 6c 64 20 24  d zarcs $child $
27f0: 72 69 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20  rid..    }...   
2800: 20 24 65 78 20 6e 6f 64 65 20 69 6e 73 65 72 74   $ex node insert
2810: 20 24 72 69 64 0a 09 20 20 20 20 24 65 78 20 6e   $rid..    $ex n
2820: 6f 64 65 20 73 65 74 20 20 20 20 24 72 69 64 20  ode set    $rid 
2830: 74 65 78 74 20 20 5b 6c 69 73 74 20 24 63 6f 66  text  [list $cof
2840: 66 20 24 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65  f $clen]..    $e
2850: 78 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 72  x node set    $r
2860: 69 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a  id revnr $revnr.
2870: 09 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 65  .    $ex node se
2880: 74 20 20 20 20 24 72 69 64 20 6c 61 62 65 6c 20  t    $rid label 
2890: 3c 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69  <$revnr>...    i
28a0: 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72  f {[rev istrunkr
28b0: 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a  evnr $revnr]} {.
28c0: 09 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b  ..# On the trunk
28d0: 2c 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20  , this revision 
28e0: 69 73 20 61 20 64 65 6c 74 61 20 62 61 73 65 64  is a delta based
28f0: 20 6f 6e 20 74 68 65 0a 09 09 23 20 63 68 69 6c   on the...# chil
2900: 64 2e 20 54 68 61 74 20 6d 61 6b 65 73 20 74 68  d. That makes th
2910: 65 20 63 68 69 6c 64 20 6f 75 72 20 70 72 65 64  e child our pred
2920: 65 63 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20 7b  ecessor.....if {
2930: 24 63 68 69 6c 64 20 65 71 20 22 22 7d 20 63 6f  $child eq ""} co
2940: 6e 74 69 6e 75 65 0a 09 09 6c 61 70 70 65 6e 64  ntinue...lappend
2950: 20 65 61 72 63 73 20 24 63 68 69 6c 64 20 24 72   earcs $child $r
2960: 69 64 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b  id..    } else {
2970: 0a 09 09 23 20 4f 6e 20 61 20 62 72 61 6e 63 68  ...# On a branch
2980: 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69   this revision i
2990: 73 20 61 20 64 65 6c 74 61 20 62 61 73 65 64 20  s a delta based 
29a0: 6f 6e 20 74 68 65 0a 09 09 23 20 70 61 72 65 6e  on the...# paren
29b0: 74 2e 20 54 68 61 74 20 6d 61 6b 65 73 20 74 68  t. That makes th
29c0: 65 20 70 61 72 65 6e 74 20 6f 75 72 20 70 72 65  e parent our pre
29d0: 64 65 63 65 73 73 6f 72 2e 0a 0a 09 09 69 66 20  decessor.....if 
29e0: 7b 24 70 61 72 65 6e 74 20 65 71 20 22 22 7d 20  {$parent eq ""} 
29f0: 7b 0a 09 09 20 20 20 20 23 20 44 65 74 61 63 68  {...    # Detach
2a00: 65 64 20 62 72 61 6e 63 68 20 72 6f 6f 74 2c 20  ed branch root, 
2a10: 74 68 69 73 20 69 73 20 61 20 70 61 74 63 68 20  this is a patch 
2a20: 62 61 73 65 64 20 6f 6e 0a 09 09 20 20 20 20 23  based on...    #
2a30: 20 74 68 65 20 65 6d 70 74 79 20 73 74 72 69 6e   the empty strin
2a40: 67 2e 0a 09 09 20 20 20 20 24 65 78 20 6e 6f 64  g....    $ex nod
2a50: 65 20 73 65 74 20 24 72 69 64 20 5f 5f 62 61 73  e set $rid __bas
2a60: 65 5f 5f 20 72 5f 5f 65 6d 70 74 79 5f 5f 20 0a  e__ r__empty__ .
2a70: 09 09 20 20 20 20 63 6f 6e 74 69 6e 75 65 0a 09  ..    continue..
2a80: 09 7d 0a 09 09 6c 61 70 70 65 6e 64 20 65 61 72  .}...lappend ear
2a90: 63 73 20 24 70 61 72 65 6e 74 20 24 72 69 64 0a  cs $parent $rid.
2aa0: 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 50 68  .    }..}...# Ph
2ab0: 61 73 65 20 49 49 3a 20 49 6e 73 65 72 74 20 74  ase II: Insert t
2ac0: 68 65 20 61 63 63 75 6d 75 6c 61 74 65 64 20 64  he accumulated d
2ad0: 65 70 65 6e 64 65 6e 63 69 65 73 0a 0a 09 66 6f  ependencies...fo
2ae0: 72 65 61 63 68 20 7b 66 72 6f 6d 20 74 6f 7d 20  reach {from to} 
2af0: 24 65 61 72 63 73 20 7b 20 24 65 78 20 61 72 63  $earcs { $ex arc
2b00: 20 69 6e 73 65 72 74 20 24 66 72 6f 6d 20 24 74   insert $from $t
2b10: 6f 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 66 72  o }..foreach {fr
2b20: 6f 6d 20 74 6f 7d 20 24 7a 61 72 63 73 20 7b 20  om to} $zarcs { 
2b30: 24 7a 70 20 61 72 63 20 69 6e 73 65 72 74 20 24  $zp arc insert $
2b40: 66 72 6f 6d 20 24 74 6f 20 7d 0a 0a 09 23 20 50  from $to }...# P
2b50: 68 61 73 65 20 49 49 49 3a 20 54 72 61 76 65 72  hase III: Traver
2b60: 73 65 20 74 68 65 20 67 72 61 70 68 73 2c 20 65  se the graphs, e
2b70: 78 70 61 6e 64 20 74 68 65 20 66 69 6c 65 2c 20  xpand the file, 
2b80: 61 6e 64 0a 09 23 20 20 20 20 20 20 20 20 20 20  and..#          
2b90: 20 20 67 65 6e 65 72 61 74 65 20 69 6d 70 6f 72    generate impor
2ba0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a  t instructions..
2bb0: 0a 09 73 65 74 20 61 72 63 68 69 76 65 20 5b 3a  ..set archive [:
2bc0: 3a 66 69 6c 65 20 6a 6f 69 6e 20 5b 24 6d 79 70  :file join [$myp
2bd0: 72 6f 6a 65 63 74 20 66 75 6c 6c 70 61 74 68 5d  roject fullpath]
2be0: 20 24 6d 79 70 61 74 68 5d 0a 09 73 65 74 20 61   $mypath]..set a
2bf0: 63 20 20 20 20 20 20 5b 6f 70 65 6e 20 24 61 72  c      [open $ar
2c00: 63 68 69 76 65 20 72 5d 0a 09 66 63 6f 6e 66 69  chive r]..fconfi
2c10: 67 75 72 65 20 24 61 63 20 2d 74 72 61 6e 73 6c  gure $ac -transl
2c20: 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a 0a 09 23  ation binary...#
2c30: 20 46 69 72 73 74 20 74 72 61 76 65 72 73 65 20   First traverse 
2c40: 74 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72  the expansion gr
2c50: 61 70 68 2c 20 74 68 69 73 20 67 69 76 65 73 20  aph, this gives 
2c60: 75 73 20 74 68 65 0a 09 23 20 72 65 76 69 73 69  us the..# revisi
2c70: 6f 6e 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72  ons in the order
2c80: 20 77 65 20 68 61 76 65 20 74 6f 20 65 78 70 61   we have to expa
2c90: 6e 64 20 74 68 65 6d 2c 20 77 68 69 63 68 20 77  nd them, which w
2ca0: 65 20 64 6f 2e 0a 0a 09 73 65 74 20 6d 61 78 20  e do....set max 
2cb0: 5b 6c 6c 65 6e 67 74 68 20 5b 24 65 78 20 6e 6f  [llength [$ex no
2cc0: 64 65 73 5d 5d 0a 09 73 65 74 20 6d 79 69 6d 70  des]]..set myimp
2cd0: 6f 72 74 20 30 0a 0a 09 67 74 63 6f 72 65 20 64  ort 0...gtcore d
2ce0: 61 74 61 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68  atacmd   [mymeth
2cf0: 6f 64 20 45 78 70 61 6e 64 44 61 74 61 5d 0a 09  od ExpandData]..
2d00: 67 74 63 6f 72 65 20 66 6f 72 6d 61 74 63 6d 64  gtcore formatcmd
2d10: 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e   [mymethod Expan
2d20: 64 46 6f 72 6d 61 74 5d 0a 09 67 74 63 6f 72 65  dFormat]..gtcore
2d30: 20 73 6f 72 74 63 6d 64 20 20 20 5b 6d 79 6d 65   sortcmd   [myme
2d40: 74 68 6f 64 20 45 78 70 61 6e 64 53 6f 72 74 5d  thod ExpandSort]
2d50: 0a 09 67 74 63 6f 72 65 20 73 61 76 65 63 6d 64  ..gtcore savecmd
2d60: 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70     [mymethod Exp
2d70: 61 6e 64 31 20 24 61 63 20 24 64 69 72 20 24 6d  and1 $ac $dir $m
2d80: 61 78 5d 0a 0a 09 67 74 63 6f 72 65 20 74 72 61  ax]...gtcore tra
2d90: 76 65 72 73 65 20 24 65 78 20 7b 45 78 70 61 6e  verse $ex {Expan
2da0: 64 69 6e 67 20 72 65 76 69 73 69 6f 6e 73 2e 2e  ding revisions..
2db0: 2e 7d 0a 09 63 6c 6f 73 65 20 24 61 63 0a 0a 09  .}..close $ac...
2dc0: 23 20 4e 6f 77 20 74 72 61 76 65 72 73 65 20 74  # Now traverse t
2dd0: 68 65 20 69 6d 70 6f 72 74 20 67 72 61 70 68 2c  he import graph,
2de0: 20 74 68 69 73 20 62 75 69 6c 64 73 20 74 68 65   this builds the
2df0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 09 23 20   instruction..# 
2e00: 6d 61 70 20 66 6f 72 20 74 68 65 20 66 6f 73 73  map for the foss
2e10: 69 6c 20 64 65 6c 74 61 73 2e 0a 0a 09 67 74 63  il deltas....gtc
2e20: 6f 72 65 20 64 61 74 61 63 6d 64 20 20 20 5b 6d  ore datacmd   [m
2e30: 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61  ymethod ExpandDa
2e40: 74 61 5d 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d  ta]..gtcore form
2e50: 61 74 63 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20  atcmd [mymethod 
2e60: 45 78 70 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67  ExpandFormat]..g
2e70: 74 63 6f 72 65 20 73 6f 72 74 63 6d 64 20 20 20  tcore sortcmd   
2e80: 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64  [mymethod Expand
2e90: 53 6f 72 74 5d 0a 09 67 74 63 6f 72 65 20 73 61  Sort]..gtcore sa
2ea0: 76 65 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f  vecmd   [mymetho
2eb0: 64 20 45 78 70 61 6e 64 32 5d 0a 0a 09 73 65 74  d Expand2]...set
2ec0: 20 6d 79 69 6d 70 6f 72 74 20 7b 7d 0a 09 67 74   myimport {}..gt
2ed0: 63 6f 72 65 20 74 72 61 76 65 72 73 65 20 24 7a  core traverse $z
2ee0: 70 20 7b 47 65 6e 65 72 61 74 69 6e 67 20 72 65  p {Generating re
2ef0: 76 69 73 69 6f 6e 20 6f 72 64 65 72 20 66 6f 72  vision order for
2f00: 20 69 6d 70 6f 72 74 2e 2e 2e 7d 0a 09 73 65 74   import...}..set
2f10: 20 66 69 6c 65 6d 61 70 20 24 6d 79 69 6d 70 6f   filemap $myimpo
2f20: 72 74 0a 09 75 6e 73 65 74 20 6d 79 69 6d 70 6f  rt..unset myimpo
2f30: 72 74 0a 0a 09 23 20 41 6e 64 20 62 61 63 6b 20  rt...# And back 
2f40: 74 6f 20 69 6d 70 6f 72 74 20 63 6f 6e 74 72 6f  to import contro
2f50: 6c 0a 0a 09 24 65 78 20 64 65 73 74 72 6f 79 0a  l...$ex destroy.
2f60: 09 24 7a 70 20 64 65 73 74 72 6f 79 0a 0a 09 72  .$zp destroy...r
2f70: 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 66 69 6c  eturn [list $fil
2f80: 65 6d 61 70 20 24 72 65 76 6d 61 70 5d 0a 20 20  emap $revmap].  
2f90: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
2fa0: 45 78 70 61 6e 64 44 61 74 61 20 20 20 7b 67 72  ExpandData   {gr
2fb0: 61 70 68 20 6e 6f 64 65 7d 20 7b 20 72 65 74 75  aph node} { retu
2fc0: 72 6e 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20  rn [$graph node 
2fd0: 67 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d  get $node revnr]
2fe0: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78   }.    method Ex
2ff0: 70 61 6e 64 46 6f 72 6d 61 74 20 7b 67 72 61 70  pandFormat {grap
3000: 68 20 69 74 65 6d 7d 20 7b 20 72 65 74 75 72 6e  h item} { return
3010: 20 3c 5b 6c 69 6e 64 65 78 20 24 69 74 65 6d 20   <[lindex $item 
3020: 31 5d 3e 20 7d 20 3b 20 23 20 72 65 76 6e 72 0a  1]> } ; # revnr.
3030: 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e      method Expan
3040: 64 53 6f 72 74 20 20 20 7b 67 72 61 70 68 20 63  dSort   {graph c
3050: 61 6e 64 69 64 61 74 65 73 7d 20 7b 0a 09 23 20  andidates} {..# 
3060: 63 61 6e 64 69 64 61 74 65 73 20 3d 20 6c 69 73  candidates = lis
3070: 74 28 69 74 65 6d 29 2c 20 69 74 65 6d 20 3d 20  t(item), item = 
3080: 6c 69 73 74 28 6e 6f 64 65 20 72 65 76 6e 72 29  list(node revnr)
3090: 0a 09 23 20 53 6f 72 74 20 62 79 20 6e 6f 64 65  ..# Sort by node
30a0: 20 61 6e 64 20 72 65 76 6e 72 20 2d 3e 20 54 72   and revnr -> Tr
30b0: 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 63 6f  unk revisions co
30c0: 6d 65 20 66 69 72 73 74 2e 0a 09 72 65 74 75 72  me first...retur
30d0: 6e 20 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20  n [lsort -index 
30e0: 31 20 2d 64 69 63 74 20 5b 6c 73 6f 72 74 20 2d  1 -dict [lsort -
30f0: 69 6e 64 65 78 20 30 20 2d 64 69 63 74 20 24 63  index 0 -dict $c
3100: 61 6e 64 69 64 61 74 65 73 5d 5d 0a 20 20 20 20  andidates]].    
3110: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70  }.    method Exp
3120: 61 6e 64 31 20 7b 63 68 61 6e 20 64 69 72 20 6d  and1 {chan dir m
3130: 61 78 20 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b  ax graph node} {
3140: 0a 09 6c 6f 67 20 70 72 6f 67 72 65 73 73 20 33  ..log progress 3
3150: 20 66 69 6c 65 20 24 6d 79 69 6d 70 6f 72 74 20   file $myimport 
3160: 24 6d 61 78 20 3b 20 69 6e 63 72 20 6d 79 69 6d  $max ; incr myim
3170: 70 6f 72 74 0a 0a 09 73 65 74 20 72 65 76 6e 72  port...set revnr
3180: 20 20 20 20 20 20 20 20 20 20 20 5b 24 67 72 61             [$gra
3190: 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64  ph node get $nod
31a0: 65 20 72 65 76 6e 72 5d 0a 09 73 65 74 20 66 6e  e revnr]..set fn
31b0: 61 6d 65 20 20 20 20 20 20 20 20 20 20 72 24 72  ame          r$r
31c0: 65 76 6e 72 0a 09 73 74 72 75 63 74 3a 3a 6c 69  evnr..struct::li
31d0: 73 74 20 61 73 73 69 67 6e 20 5b 24 67 72 61 70  st assign [$grap
31e0: 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65  h node get $node
31f0: 20 74 65 78 74 5d 20 6f 66 66 73 65 74 20 6c 65   text] offset le
3200: 6e 67 74 68 0a 0a 09 69 66 20 7b 24 6c 65 6e 67  ngth...if {$leng
3210: 74 68 20 3c 20 30 7d 20 7b 0a 09 20 20 20 20 73  th < 0} {..    s
3220: 65 74 20 64 61 74 61 20 22 22 0a 09 7d 20 65 6c  et data ""..} el
3230: 73 65 20 7b 0a 09 20 20 20 20 73 65 65 6b 20 24  se {..    seek $
3240: 63 68 61 6e 20 24 6f 66 66 73 65 74 20 73 74 61  chan $offset sta
3250: 72 74 0a 09 20 20 20 20 73 65 74 20 64 61 74 61  rt..    set data
3260: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 7b 40 40   [string map {@@
3270: 20 40 7d 20 5b 72 65 61 64 20 24 63 68 61 6e 20   @} [read $chan 
3280: 24 6c 65 6e 67 74 68 5d 5d 0a 09 7d 0a 0a 09 69  $length]]..}...i
3290: 66 20 7b 21 5b 24 67 72 61 70 68 20 6e 6f 64 65  f {![$graph node
32a0: 20 6b 65 79 65 78 69 73 74 73 20 24 6e 6f 64 65   keyexists $node
32b0: 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a 09 20   __base__]} {.. 
32c0: 20 20 20 23 20 46 75 6c 6c 20 74 65 78 74 20 6e     # Full text n
32d0: 6f 64 65 2e 20 47 65 74 20 74 68 65 20 64 61 74  ode. Get the dat
32e0: 61 2c 20 64 65 63 6f 64 65 20 69 74 2c 20 61 6e  a, decode it, an
32f0: 64 20 73 61 76 65 2e 0a 0a 09 20 20 20 20 6c 6f  d save....    lo
3300: 67 20 77 72 69 74 65 20 38 20 66 69 6c 65 20 7b  g write 8 file {
3310: 45 78 70 61 6e 64 69 6e 67 20 3c 24 72 65 76 6e  Expanding <$revn
3320: 72 3e 2c 20 66 75 6c 6c 20 74 65 78 74 7d 0a 0a  r>, full text}..
3330: 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77  .    fileutil::w
3340: 72 69 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c  riteFile -transl
3350: 61 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69  ation binary $di
3360: 72 2f 24 66 6e 61 6d 65 20 24 64 61 74 61 0a 09  r/$fname $data..
3370: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 20  } else {..    # 
3380: 44 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61  Delta node. __ba
3390: 73 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65  se__ is the name
33a0: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e   of the file con
33b0: 74 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74  taining..    # t
33c0: 68 65 20 62 61 73 65 6c 69 6e 65 2e 20 54 68 65  he baseline. The
33d0: 20 70 61 74 63 68 20 69 73 20 61 74 20 74 68 65   patch is at the
33e0: 20 73 70 65 63 69 66 69 65 64 20 6c 6f 63 61 74   specified locat
33f0: 69 6f 6e 20 6f 66 0a 09 20 20 20 20 23 20 74 68  ion of..    # th
3400: 65 20 61 72 63 68 69 76 65 20 66 69 6c 65 2e 0a  e archive file..
3410: 0a 09 20 20 20 20 73 65 74 20 66 62 61 73 65 20  ..    set fbase 
3420: 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74  [$graph node get
3430: 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d   $node __base__]
3440: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
3450: 38 20 66 69 6c 65 20 7b 45 78 70 61 6e 64 69 6e  8 file {Expandin
3460: 67 20 3c 24 72 65 76 6e 72 3e 2c 20 69 73 20 64  g <$revnr>, is d
3470: 65 6c 74 61 20 6f 66 20 3c 24 66 62 61 73 65 3e  elta of <$fbase>
3480: 7d 0a 0a 09 20 20 20 20 73 65 74 20 62 61 73 65  }...    set base
3490: 20 5b 66 69 6c 65 75 74 69 6c 3a 3a 63 61 74 20   [fileutil::cat 
34a0: 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e  -translation bin
34b0: 61 72 79 20 24 64 69 72 2f 24 66 62 61 73 65 5d  ary $dir/$fbase]
34c0: 0a 0a 09 20 20 20 20 23 20 57 72 69 74 69 6e 67  ...    # Writing
34d0: 20 74 68 65 20 70 61 74 63 68 20 74 6f 20 64 69   the patch to di
34e0: 73 6b 20 69 73 20 6a 75 73 74 20 66 6f 72 20 62  sk is just for b
34f0: 65 74 74 65 72 0a 09 20 20 20 20 23 20 64 65 62  etter..    # deb
3500: 75 67 67 69 6e 67 2e 20 49 74 20 69 73 20 6e 6f  ugging. It is no
3510: 74 20 75 73 65 64 20 6f 74 68 65 72 77 69 73 65  t used otherwise
3520: 2e 0a 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a  ...    fileutil:
3530: 3a 77 72 69 74 65 46 69 6c 65 20 24 64 69 72 2f  :writeFile $dir/
3540: 72 70 61 74 63 68 20 24 64 61 74 61 0a 09 20 20  rpatch $data..  
3550: 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74    fileutil::writ
3560: 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61 74 69  eFile -translati
3570: 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72 2f 24  on binary $dir/$
3580: 66 6e 61 6d 65 20 5c 0a 09 09 5b 41 70 70 6c 79  fname \...[Apply
3590: 20 24 62 61 73 65 20 24 64 61 74 61 5d 0a 09 7d   $base $data]..}
35a0: 0a 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c  ...# Post to all
35b0: 20 73 75 63 63 65 73 73 6f 72 73 20 74 68 61 74   successors that
35c0: 20 74 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61   the just genera
35d0: 74 65 64 20 66 69 6c 65 20 69 73 20 74 68 65 69  ted file is thei
35e0: 72 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e 0a 0a  r..# baseline...
35f0: 09 66 6f 72 65 61 63 68 20 6f 75 74 20 5b 24 67  .foreach out [$g
3600: 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74 20  raph nodes -out 
3610: 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 24 67  $node] {..    $g
3620: 72 61 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f  raph node set $o
3630: 75 74 20 5f 5f 62 61 73 65 5f 5f 20 24 66 6e 61  ut __base__ $fna
3640: 6d 65 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  me..}..return.  
3650: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 41 70    }..    proc Ap
3660: 70 6c 79 20 7b 62 61 73 65 20 64 65 6c 74 61 7d  ply {base delta}
3670: 20 7b 0a 09 23 20 62 61 73 65 20 20 3d 20 62 61   {..# base  = ba
3680: 73 65 20 74 65 78 74 2e 0a 09 23 20 64 65 6c 74  se text...# delt
3690: 61 20 3d 20 64 65 6c 74 61 20 69 6e 20 72 63 73  a = delta in rcs
36a0: 20 66 6f 72 6d 61 74 2e 0a 09 23 0a 09 23 20 42   format...#..# B
36b0: 6f 74 68 20 73 74 72 69 6e 67 73 20 61 72 65 20  oth strings are 
36c0: 75 6e 65 6e 63 6f 64 65 64 2c 20 69 2e 65 2e 20  unencoded, i.e. 
36d0: 74 68 69 6e 67 73 20 6c 69 6b 65 20 40 40 2c 20  things like @@, 
36e0: 65 74 63 2e 20 68 61 76 65 0a 09 23 20 61 6c 72  etc. have..# alr
36f0: 65 61 64 79 20 62 65 65 6e 20 72 65 70 6c 61 63  eady been replac
3700: 65 64 20 77 69 74 68 20 74 68 65 69 72 20 70 72  ed with their pr
3710: 6f 70 65 72 20 63 68 61 72 61 63 74 65 72 73 2e  oper characters.
3720: 0a 09 23 0a 09 23 20 52 65 74 75 72 6e 20 76 61  ..#..# Return va
3730: 6c 75 65 20 69 73 20 74 68 65 20 70 61 74 63 68  lue is the patch
3740: 65 64 20 74 65 78 74 2e 0a 0a 09 73 65 74 20 62  ed text....set b
3750: 61 73 65 20 5b 73 70 6c 69 74 20 24 62 61 73 65  ase [split $base
3760: 20 5c 6e 5d 0a 09 73 65 74 20 62 6c 65 6e 20 5b   \n]..set blen [
3770: 6c 6c 65 6e 67 74 68 20 24 62 61 73 65 5d 0a 09  llength $base]..
3780: 73 65 74 20 6f 6f 66 66 20 30 0a 09 73 65 74 20  set ooff 0..set 
3790: 72 65 73 20 22 22 0a 0a 09 73 65 74 20 6c 69 6e  res ""...set lin
37a0: 65 73 20 20 5b 73 70 6c 69 74 20 24 64 65 6c 74  es  [split $delt
37b0: 61 20 5c 6e 5d 0a 09 73 65 74 20 6e 6c 69 6e 65  a \n]..set nline
37c0: 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65  s [llength $line
37d0: 73 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 31  s]...log write 1
37e0: 31 20 66 69 6c 65 20 7b 42 61 73 65 20 20 6c 69  1 file {Base  li
37f0: 6e 65 73 20 3d 20 24 62 6c 65 6e 7d 0a 09 6c 6f  nes = $blen}..lo
3800: 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 20  g write 11 file 
3810: 7b 44 65 6c 74 61 20 6c 69 6e 65 73 20 3d 20 24  {Delta lines = $
3820: 6e 6c 69 6e 65 73 7d 0a 0a 09 66 6f 72 20 7b 73  nlines}...for {s
3830: 65 74 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e  et i 0} {$i < $n
3840: 6c 69 6e 65 73 7d 20 7b 7d 20 7b 0a 09 20 20 20  lines} {} {..   
3850: 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69   log write 11 fi
3860: 6c 65 20 7b 20 20 20 20 40 20 24 69 20 3d 20 5b  le {    @ $i = [
3870: 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69  lindex $lines $i
3880: 5d 7d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  ]}..    log writ
3890: 65 20 31 31 20 66 69 6c 65 20 7b 20 6f 6f 66 66  e 11 file { ooff
38a0: 20 24 6f 6f 66 66 7d 0a 0a 09 20 20 20 20 69 66   $ooff}...    if
38b0: 20 7b 21 5b 72 65 67 65 78 70 20 7b 5e 28 5b 61   {![regexp {^([a
38c0: 64 5d 29 28 5c 64 2b 29 5c 73 28 5c 64 2b 29 24  d])(\d+)\s(\d+)$
38d0: 7d 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73  } [lindex $lines
38e0: 20 24 69 5d 20 2d 3e 20 63 6d 64 20 73 6c 20 63   $i] -> cmd sl c
38f0: 6e 5d 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20  n]} {...trouble 
3900: 69 6e 74 65 72 6e 61 6c 20 22 42 61 64 20 65 64  internal "Bad ed
3910: 20 63 6f 6d 6d 61 6e 64 20 27 5b 6c 69 6e 64 65   command '[linde
3920: 78 20 24 6c 69 6e 65 73 20 24 69 5d 27 22 0a 09  x $lines $i]'"..
3930: 20 20 20 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20      }...    log 
3940: 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20  write 11 file { 
3950: 20 63 6d 64 20 24 63 6d 64 7d 0a 09 20 20 20 20   cmd $cmd}..    
3960: 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c  log write 11 fil
3970: 65 20 7b 20 20 20 73 6c 20 24 73 6c 7d 0a 09 20  e {   sl $sl}.. 
3980: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20     log write 11 
3990: 66 69 6c 65 20 7b 20 20 20 63 6e 20 24 63 6e 7d  file {   cn $cn}
39a0: 0a 0a 09 20 20 20 20 69 6e 63 72 20 69 0a 09 20  ...    incr i.. 
39b0: 20 20 20 73 65 74 20 65 6c 20 5b 65 78 70 72 20     set el [expr 
39c0: 7b 24 73 6c 20 2b 20 24 63 6e 7d 5d 0a 0a 09 20  {$sl + $cn}]... 
39d0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20     log write 11 
39e0: 66 69 6c 65 20 7b 20 20 20 65 6c 20 24 65 6c 7d  file {   el $el}
39f0: 0a 0a 09 20 20 20 20 73 77 69 74 63 68 20 2d 65  ...    switch -e
3a00: 78 61 63 74 20 2d 2d 20 24 63 6d 64 20 7b 0a 09  xact -- $cmd {..
3a10: 09 64 20 7b 0a 09 09 20 20 20 20 69 6e 63 72 20  .d {...    incr 
3a20: 73 6c 20 2d 31 0a 09 09 20 20 20 20 69 6e 63 72  sl -1...    incr
3a30: 20 65 6c 20 2d 31 0a 09 09 20 20 20 20 69 66 20   el -1...    if 
3a40: 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20  {$sl < $ooff} { 
3a50: 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c  trouble internal
3a60: 20 7b 44 65 6c 65 74 69 6f 6e 20 62 65 66 6f 72   {Deletion befor
3a70: 65 20 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09  e last edit} }..
3a80: 09 20 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24  .    if {$sl > $
3a90: 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20  blen} { trouble 
3aa0: 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69  internal {Deleti
3ab0: 6f 6e 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64  on past file end
3ac0: 7d 20 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 65  } }...    if {$e
3ad0: 6c 20 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f  l > $blen} { tro
3ae0: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44  uble internal {D
3af0: 65 6c 65 74 69 6f 6e 20 62 65 79 6f 6e 64 20 66  eletion beyond f
3b00: 69 6c 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20 20  ile end} }...   
3b10: 20 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e   foreach x [lran
3b20: 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 24  ge $base $ooff $
3b30: 73 6c 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65  sl] { lappend re
3b40: 73 20 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74  s $x }...    set
3b50: 20 20 6f 6f 66 66 20 24 65 6c 0a 09 09 7d 0a 09    ooff $el...}..
3b60: 09 61 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 24  .a {...    if {$
3b70: 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72  sl < $ooff} { tr
3b80: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b  ouble internal {
3b90: 49 6e 73 65 72 74 20 62 65 66 6f 72 65 20 6c 61  Insert before la
3ba0: 73 74 20 65 64 69 74 7d 20 7d 0a 09 09 20 20 20  st edit} }...   
3bb0: 20 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c 65 6e   if {$sl > $blen
3bc0: 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65  } { trouble inte
3bd0: 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20 70 61 73  rnal {Insert pas
3be0: 74 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 0a 09  t file end} }...
3bf0: 09 20 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b  .    foreach x [
3c00: 6c 72 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f  lrange $base $oo
3c10: 66 66 20 24 73 6c 5d 20 20 20 20 20 20 20 20 20  ff $sl]         
3c20: 20 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 72 65      { lappend re
3c30: 73 20 24 78 20 7d 0a 09 09 20 20 20 20 66 6f 72  s $x }...    for
3c40: 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24  each x [lrange $
3c50: 6c 69 6e 65 73 20 24 69 20 5b 65 78 70 72 20 7b  lines $i [expr {
3c60: 24 69 20 2b 20 24 63 6e 7d 5d 5d 20 7b 20 6c 61  $i + $cn}]] { la
3c70: 70 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09  ppend res $x }..
3c80: 09 20 20 20 20 73 65 74 20 6f 6f 66 66 20 24 73  .    set ooff $s
3c90: 6c 0a 09 09 20 20 20 20 69 6e 63 72 20 69 20 24  l...    incr i $
3ca0: 63 6e 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d  cn...}..    }..}
3cb0: 0a 09 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61  ..foreach x [lra
3cc0: 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20  nge $base $ooff 
3cd0: 65 6e 64 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72  end] { lappend r
3ce0: 65 73 20 24 78 20 7d 0a 09 72 65 74 75 72 6e 20  es $x }..return 
3cf0: 5b 6a 6f 69 6e 20 24 72 65 73 20 5c 6e 5d 0a 20  [join $res \n]. 
3d00: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
3d10: 20 45 78 70 61 6e 64 32 20 7b 67 72 61 70 68 20   Expand2 {graph 
3d20: 6e 6f 64 65 7d 20 7b 0a 09 73 65 74 20 72 65 76  node} {..set rev
3d30: 6e 72 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20  nr [$graph node 
3d40: 67 65 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d  get $node revnr]
3d50: 0a 0a 09 23 20 46 69 72 73 74 20 69 6d 70 6f 72  ...# First impor
3d60: 74 20 74 68 65 20 66 69 6c 65 2e 0a 09 6c 61 70  t the file...lap
3d70: 70 65 6e 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c  pend myimport [l
3d80: 69 73 74 20 41 20 72 24 72 65 76 6e 72 20 7b 7d  ist A r$revnr {}
3d90: 5d 0a 0a 09 69 66 20 7b 5b 24 67 72 61 70 68 20  ]...if {[$graph 
3da0: 6e 6f 64 65 20 6b 65 79 65 78 69 73 74 73 20 24  node keyexists $
3db0: 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20  node __base__]} 
3dc0: 7b 0a 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e  {..    # Delta n
3dd0: 6f 64 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73  ode. __base__ is
3de0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
3df0: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
3e00: 0a 09 20 20 20 20 23 20 74 68 65 20 62 61 73 65  ..    # the base
3e10: 6c 69 6e 65 2e 20 47 65 6e 65 72 61 74 65 20 69  line. Generate i
3e20: 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 6d 61  nstruction to ma
3e30: 6b 65 20 74 68 65 20 64 65 6c 74 61 20 61 73 0a  ke the delta as.
3e40: 09 20 20 20 20 23 20 77 65 6c 6c 2e 0a 0a 09 20  .    # well.... 
3e50: 20 20 20 73 65 74 20 66 62 61 73 65 20 5b 24 67     set fbase [$g
3e60: 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e  raph node get $n
3e70: 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09 20  ode __base__].. 
3e80: 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70     lappend myimp
3e90: 6f 72 74 20 5b 6c 69 73 74 20 44 20 72 24 72 65  ort [list D r$re
3ea0: 76 6e 72 20 72 24 66 62 61 73 65 5d 0a 09 7d 0a  vnr r$fbase]..}.
3eb0: 0a 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20  ..# Post to all 
3ec0: 73 75 63 63 65 73 73 6f 72 73 20 74 68 61 74 20  successors that 
3ed0: 74 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74  the just generat
3ee0: 65 64 20 66 69 6c 65 20 69 73 20 74 68 65 69 72  ed file is their
3ef0: 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e 20 45 78  ..# baseline. Ex
3f00: 63 65 70 74 69 6f 6e 3a 20 54 68 6f 73 65 20 77  ception: Those w
3f10: 68 69 63 68 20 61 76 65 20 61 6c 72 65 61 64 79  hich ave already
3f20: 20 61 20 62 61 73 65 6c 69 6e 65 20 73 65 74 2e   a baseline set.
3f30: 0a 09 23 20 54 6f 67 65 74 68 65 72 20 77 69 74  ..# Together wit
3f40: 68 20 74 68 65 20 73 6f 72 74 69 6e 67 20 6f 66  h the sorting of
3f50: 20 74 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73   trunk revisions
3f60: 20 66 69 72 73 74 20 74 68 65 20 74 72 75 6e 6b   first the trunk
3f70: 0a 09 23 20 73 68 6f 75 6c 64 20 6f 6e 65 20 75  ..# should one u
3f80: 6e 69 6e 74 65 72 75 70 74 65 64 20 6c 69 6e 65  ninterupted line
3f90: 2c 20 77 69 74 68 20 62 72 61 6e 63 68 20 72 6f  , with branch ro
3fa0: 6f 74 73 20 5f 6e 6f 74 5f 20 64 65 6c 74 61 0a  ots _not_ delta.
3fb0: 09 23 20 63 6f 6d 70 72 65 73 73 65 64 20 70 65  .# compressed pe
3fc0: 72 20 74 68 65 69 72 20 62 72 61 6e 63 68 65 73  r their branches
3fd0: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20  ....foreach out 
3fe0: 5b 24 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f  [$graph nodes -o
3ff0: 75 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20  ut $node] {..   
4000: 20 69 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f 64   if {[$graph nod
4010: 65 20 6b 65 79 65 78 69 73 74 73 20 24 6f 75 74  e keyexists $out
4020: 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 63 6f 6e 74   __base__]} cont
4030: 69 6e 75 65 0a 09 20 20 20 20 24 67 72 61 70 68  inue..    $graph
4040: 20 6e 6f 64 65 20 73 65 74 20 24 6f 75 74 20 5f   node set $out _
4050: 5f 62 61 73 65 5f 5f 20 24 72 65 76 6e 72 0a 09  _base__ $revnr..
4060: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
4070: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
4080: 69 6d 70 6f 72 74 0a 0a 20 20 20 20 23 20 23 20  import..    # # 
4090: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
40a0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
40b0: 23 23 23 0a 20 20 20 20 23 23 20 53 74 61 74 65  ###.    ## State
40c0: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
40d0: 79 69 64 20 20 20 20 20 20 20 20 20 20 20 20 20  yid             
40e0: 20 7b 7d 20 3b 20 23 20 46 69 6c 65 20 69 64 20   {} ; # File id 
40f0: 69 6e 20 74 68 65 20 70 65 72 73 69 73 74 65 6e  in the persisten
4100: 74 20 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72  t state..    var
4110: 69 61 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20  iable mypath    
4120: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50          {} ; # P
4130: 61 74 68 20 6f 66 20 74 68 65 20 66 69 6c 65 27  ath of the file'
4140: 73 20 72 63 73 20 61 72 63 68 69 76 65 2e 0a 20  s rcs archive.. 
4150: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 75 73     variable myus
4160: 72 70 61 74 68 20 20 20 20 20 20 20 20 20 7b 7d  rpath         {}
4170: 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68 65   ; # Path of the
4180: 20 66 69 6c 65 20 61 73 20 73 65 65 6e 20 62 79   file as seen by
4190: 20 75 73 65 72 73 2e 0a 20 20 20 20 76 61 72 69   users..    vari
41a0: 61 62 6c 65 20 6d 79 65 78 65 63 75 74 61 62 6c  able myexecutabl
41b0: 65 20 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f  e      0  ; # Bo
41c0: 6f 6c 65 61 6e 20 66 6c 61 67 20 27 66 69 6c 65  olean flag 'file
41d0: 20 65 78 65 63 75 74 61 62 6c 65 27 2e 0a 20 20   executable'..  
41e0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f    variable mypro
41f0: 6a 65 63 74 20 20 20 20 20 20 20 20 20 7b 7d 20  ject         {} 
4200: 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f  ; # Reference to
4210: 20 74 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a   the project obj
4220: 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 74 68  ect.....    # th
4230: 65 20 66 69 6c 65 20 62 65 6c 6f 6e 67 73 20 74  e file belongs t
4240: 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  o..    variable 
4250: 6d 79 72 65 76 20 2d 61 72 72 61 79 20 20 20 20  myrev -array    
4260: 20 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65    {} ; # Maps re
4270: 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f  vision number to
4280: 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 20 61   the.....    # a
4290: 73 73 6f 63 69 61 74 65 64 20 72 65 76 69 73 69  ssociated revisi
42a0: 6f 6e 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 76  on object..    v
42b0: 61 72 69 61 62 6c 65 20 6d 79 72 65 76 69 73 69  ariable myrevisi
42c0: 6f 6e 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23  ons       {} ; #
42d0: 20 53 61 6d 65 20 61 73 20 6d 79 72 65 76 2c 20   Same as myrev, 
42e0: 62 75 74 20 61 20 6c 69 73 74 2c 0a 09 09 09 09  but a list,.....
42f0: 20 20 20 20 23 20 67 69 76 69 6e 67 20 75 73 20      # giving us 
4300: 74 68 65 20 6f 72 64 65 72 20 6f 66 0a 09 09 09  the order of....
4310: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73  .    # revisions
4320: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4330: 79 61 69 64 20 20 20 20 20 20 2d 61 72 72 61 79  yaid      -array
4340: 20 7b 7d 20 3b 20 23 20 4d 61 70 20 72 65 76 69   {} ; # Map revi
4350: 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 74 6f 20  sion numbers to 
4360: 74 68 65 20 69 64 0a 09 09 09 09 20 20 20 20 23  the id.....    #
4370: 20 6f 66 20 74 68 65 20 61 75 74 68 6f 72 20 77   of the author w
4380: 68 6f 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 09  ho committed....
4390: 09 20 20 20 20 23 20 69 74 2e 20 54 68 69 73 20  .    # it. This 
43a0: 69 73 20 6c 61 74 65 72 20 61 67 67 72 65 67 61  is later aggrega
43b0: 74 65 64 0a 09 09 09 09 20 20 20 20 23 20 77 69  ted.....    # wi
43c0: 74 68 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67  th commit messag
43d0: 65 2c 20 62 72 61 6e 63 68 20 6e 61 6d 65 0a 09  e, branch name..
43e0: 09 09 09 20 20 20 20 23 20 61 6e 64 20 70 72 6f  ...    # and pro
43f0: 6a 65 63 74 20 69 64 20 66 6f 72 20 61 20 6d 65  ject id for a me
4400: 74 61 20 69 64 2e 0a 20 20 20 20 76 61 72 69 61  ta id..    varia
4410: 62 6c 65 20 6d 79 68 65 61 64 72 65 76 6e 72 20  ble myheadrevnr 
4420: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 48 65 61        {} ; # Hea
4430: 64 20 72 65 76 69 73 69 6f 6e 20 28 72 65 76 69  d revision (revi
4440: 73 69 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 20 20  sion number).   
4450: 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 69 6e   variable myprin
4460: 63 69 70 61 6c 20 20 20 20 20 20 20 7b 7d 20 3b  cipal       {} ;
4470: 20 23 20 50 72 69 6e 63 69 70 61 6c 20 62 72 61   # Principal bra
4480: 6e 63 68 20 28 62 72 61 6e 63 68 20 6e 75 6d 62  nch (branch numb
4490: 65 72 29 2e 0a 09 09 09 09 20 20 20 20 23 20 43  er)......    # C
44a0: 6f 6e 74 72 61 72 79 20 74 6f 20 74 68 65 20 6e  ontrary to the n
44b0: 61 6d 65 20 74 68 69 73 20 69 73 20 74 68 65 0a  ame this is the.
44c0: 09 09 09 09 20 20 20 20 23 20 64 65 66 61 75 6c  ....    # defaul
44d0: 74 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61  t branch..    va
44e0: 72 69 61 62 6c 65 20 6d 79 64 65 70 65 6e 64 65  riable mydepende
44f0: 6e 63 69 65 73 20 20 20 20 7b 7d 20 3b 20 23 20  ncies    {} ; # 
4500: 44 69 63 74 69 6f 6e 61 72 79 20 70 61 72 65 6e  Dictionary paren
4510: 74 20 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 09 09  t -> child,.....
4520: 20 20 20 20 23 20 72 65 63 6f 72 64 73 20 70 72      # records pr
4530: 69 6d 61 72 79 20 64 65 70 65 6e 64 65 6e 63 69  imary dependenci
4540: 65 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  es..    variable
4550: 20 6d 79 69 6d 70 6f 72 74 65 64 20 20 20 20 20   myimported     
4560: 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61     0  ; # Boolea
4570: 6e 20 66 6c 61 67 2e 20 53 65 74 20 69 66 20 61  n flag. Set if a
4580: 6e 64 20 6f 6e 6c 79 20 69 66 0a 09 09 09 09 20  nd only if..... 
4590: 20 20 20 23 20 72 65 76 20 31 2e 31 20 6f 66 20     # rev 1.1 of 
45a0: 74 68 65 20 66 69 6c 65 20 73 65 65 6d 69 6e 67  the file seeming
45b0: 6c 79 0a 09 09 09 09 20 20 20 20 23 20 77 61 73  ly.....    # was
45c0: 20 69 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61   imported instea
45d0: 64 20 6f 66 20 61 64 64 65 64 0a 09 09 09 09 20  d of added..... 
45e0: 20 20 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 20     # normally.. 
45f0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f     variable myro
4600: 6f 74 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d  ot            {}
4610: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74   ; # Reference t
4620: 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f  o the revision o
4630: 62 6a 65 63 74 0a 09 09 09 09 20 20 20 20 23 20  bject.....    # 
4640: 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 6f 74  holding the root
4650: 20 72 65 76 69 73 69 6f 6e 2e 20 20 49 74 73 0a   revision.  Its.
4660: 09 09 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72  ....    # number
4670: 20 75 73 75 61 6c 6c 79 20 69 73 20 27 31 2e 31   usually is '1.1
4680: 27 2e 20 43 61 6e 20 62 65 0a 09 09 09 09 20 20  '. Can be.....  
4690: 20 20 23 20 61 20 64 69 66 66 65 72 65 6e 74 20    # a different 
46a0: 6e 75 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20  number, because 
46b0: 6f 66 0a 09 09 09 09 20 20 20 20 23 20 67 61 70  of.....    # gap
46c0: 73 20 63 72 65 61 74 65 64 20 76 69 61 20 27 63  s created via 'c
46d0: 76 73 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20  vsadmin -o'..   
46e0: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e   variable mybran
46f0: 63 68 65 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b  ches -array {} ;
4700: 20 23 20 4d 61 70 73 20 62 72 61 6e 63 68 20 6e   # Maps branch n
4710: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 73 79 6d  umber to the sym
4720: 62 6f 6c 0a 09 09 09 09 20 20 20 20 23 20 6f 62  bol.....    # ob
4730: 6a 65 63 74 20 68 61 6e 64 6c 69 6e 67 20 74 68  ject handling th
4740: 65 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61  e branch..    va
4750: 72 69 61 62 6c 65 20 6d 79 74 61 67 73 20 20 20  riable mytags   
4760: 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20    -array {} ; # 
4770: 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75  Maps revision nu
4780: 6d 62 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74  mber to the list
4790: 0a 09 09 09 09 20 20 20 20 23 20 6f 66 20 73 79  .....    # of sy
47a0: 6d 62 6f 6c 20 6f 62 6a 65 63 74 73 20 66 6f 72  mbol objects for
47b0: 20 74 68 65 20 74 61 67 73 0a 09 09 09 09 20 20   the tags.....  
47c0: 20 20 23 20 61 73 73 6f 63 69 61 74 65 64 20 77    # associated w
47d0: 69 74 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e  ith the revision
47e0: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
47f0: 79 73 79 6d 62 6f 6c 73 20 20 20 20 20 20 20 20  ysymbols        
4800: 20 7b 7d 20 3b 20 23 20 53 65 74 20 6f 66 20 74   {} ; # Set of t
4810: 68 65 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20  he symbol names 
4820: 66 6f 75 6e 64 20 69 6e 0a 09 09 09 09 20 20 20  found in.....   
4830: 20 23 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20   # this file... 
4840: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72     variable mybr
4850: 61 6e 63 68 63 6e 74 20 30 20 3b 20 23 20 43 6f  anchcnt 0 ; # Co
4860: 75 6e 74 65 72 20 66 6f 72 20 62 72 61 6e 63 68  unter for branch
4870: 65 73 2c 20 74 6f 20 72 65 63 6f 72 64 20 74 68  es, to record th
4880: 65 69 72 0a 09 09 09 20 20 20 20 20 23 20 6f 72  eir....     # or
4890: 64 65 72 20 6f 66 20 64 65 66 69 6e 69 74 69 6f  der of definitio
48a0: 6e 2e 20 54 68 69 73 20 61 6c 73 6f 20 64 65 66  n. This also def
48b0: 69 6e 65 73 0a 09 09 09 20 20 20 20 20 23 20 74  ines....     # t
48c0: 68 65 69 72 20 6f 72 64 65 72 20 6f 66 20 63 72  heir order of cr
48d0: 65 61 74 69 6f 6e 2c 20 77 68 69 63 68 20 69 73  eation, which is
48e0: 20 74 68 65 0a 09 09 09 20 20 20 20 20 23 20 72   the....     # r
48f0: 65 76 65 72 73 65 20 6f 66 20 64 65 66 69 6e 69  everse of defini
4900: 74 69 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 73 6d  tion.  I.e. a sm
4910: 61 6c 6c 65 72 0a 09 09 09 20 20 20 20 20 23 20  aller....     # 
4920: 6e 75 6d 62 65 72 20 6d 65 61 6e 73 20 27 44 65  number means 'De
4930: 66 69 6e 65 64 20 65 61 72 6c 69 65 72 27 2c 20  fined earlier', 
4940: 6d 65 61 6e 73 0a 09 09 09 20 20 20 20 20 23 20  means....     # 
4950: 27 43 72 65 61 74 65 64 20 6c 61 74 65 72 27 2e  'Created later'.
4960: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4970: 79 74 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 44 69  ytrunk {} ; # Di
4980: 72 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 74  rect reference t
4990: 6f 20 6d 79 70 72 6f 6a 65 63 74 20 2d 3e 20 74  o myproject -> t
49a0: 72 75 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62  runk..    variab
49b0: 6c 65 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 3b 20  le myroots {} ; 
49c0: 23 20 4c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20  # List of roots 
49d0: 69 6e 20 74 68 65 20 66 6f 72 65 73 74 20 6f 66  in the forest of
49e0: 0a 09 09 09 20 20 23 20 6c 6f 64 27 73 2e 20 4f  ....  # lod's. O
49f0: 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 73  bject references
4a00: 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 61 6e   to revisions an
4a10: 64 0a 09 09 09 20 20 23 20 62 72 61 6e 63 68 65  d....  # branche
4a20: 73 2e 20 54 68 65 20 6c 61 74 74 65 72 20 63 61  s. The latter ca
4a30: 6e 20 61 70 70 65 61 72 20 77 68 65 6e 20 74 68  n appear when th
4a40: 65 79 0a 09 09 09 20 20 23 20 61 72 65 20 73 65  ey....  # are se
4a50: 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72  vered from their
4a60: 20 70 61 72 65 6e 74 2e 0a 0a 20 20 20 20 76 61   parent...    va
4a70: 72 69 61 62 6c 65 20 6d 79 62 6c 6f 62 20 7b 7d  riable myblob {}
4a80: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74   ; # Reference t
4a90: 6f 20 74 68 65 20 6f 62 6a 65 63 74 20 6d 61 6e  o the object man
4aa0: 61 67 69 6e 67 20 74 68 65 20 62 6c 6f 62 0a 09  aging the blob..
4ab0: 09 09 20 23 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  .. # information
4ac0: 20 28 74 65 78 74 72 61 6e 67 65 20 6f 66 20 72   (textrange of r
4ad0: 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 0a 09 09  evisions, and...
4ae0: 09 20 23 20 64 65 6c 74 61 20 64 65 70 65 6e 64  . # delta depend
4af0: 65 6e 63 69 65 73 29 20 6f 66 20 74 68 69 73 20  encies) of this 
4b00: 66 69 6c 65 2e 0a 0a 20 20 20 20 23 20 23 20 23  file...    # # #
4b10: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
4b20: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
4b30: 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e  ##.    ## Intern
4b40: 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20  al methods..    
4b50: 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 72 61  method RecordBra
4b60: 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62 72 61 6e  nchCommits {bran
4b70: 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65 61 63 68  ches} {..foreach
4b80: 20 62 72 61 6e 63 68 72 65 76 6e 72 20 24 62 72   branchrevnr $br
4b90: 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 69 66  anches {..    if
4ba0: 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09 73 65 74   {[catch {...set
4bb0: 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 52   branch [$self R
4bc0: 65 76 32 42 72 61 6e 63 68 20 24 62 72 61 6e 63  ev2Branch $branc
4bd0: 68 72 65 76 6e 72 5d 0a 09 20 20 20 20 7d 5d 7d  hrevnr]..    }]}
4be0: 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68 20   {...set branch 
4bf0: 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c 61 62 65  [$self AddUnlabe
4c00: 6c 65 64 42 72 61 6e 63 68 20 5b 72 65 76 20 32  ledBranch [rev 2
4c10: 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 68  branchnr $branch
4c20: 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 0a  revnr]]..    }..
4c30: 09 20 20 20 20 23 20 52 65 63 6f 72 64 20 74 68  .    # Record th
4c40: 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73 74 20 61  e commit, just a
4c50: 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65  s revision numbe
4c60: 72 20 66 6f 72 0a 09 20 20 20 20 23 20 6e 6f 77  r for..    # now
4c70: 2e 20 50 72 6f 63 65 73 42 72 61 6e 63 68 44 65  . ProcesBranchDe
4c80: 70 65 6e 64 65 6e 63 69 65 73 20 77 69 6c 6c 20  pendencies will 
4c90: 65 78 74 65 6e 64 20 74 68 61 74 20 69 74 6f 20  extend that ito 
4ca0: 61 0a 09 20 20 20 20 23 20 70 72 6f 70 65 72 20  a..    # proper 
4cb0: 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
4cc0: 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20  ....    $branch 
4cd0: 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20 24 62  setchildrevnr $b
4ce0: 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d 0a 09 72  ranchrevnr..}..r
4cf0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
4d00: 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72 61 6e   method Rev2Bran
4d10: 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 20 20 20  ch {revnr} {.   
4d20: 20 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61       integrity a
4d30: 73 73 65 72 74 20 7b 21 5b 72 65 76 20 69 73 74  ssert {![rev ist
4d40: 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72  runkrevnr $revnr
4d50: 5d 7d 20 7b 45 78 70 65 63 74 65 64 20 61 20 62  ]} {Expected a b
4d60: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 6e  ranch revision n
4d70: 75 6d 62 65 72 7d 0a 09 72 65 74 75 72 6e 20 24  umber}..return $
4d80: 6d 79 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20  mybranches([rev 
4d90: 32 62 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72  2branchnr $revnr
4da0: 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  ]).    }..    me
4db0: 74 68 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65  thod AddUnlabele
4dc0: 64 42 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e  dBranch {branchn
4dd0: 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73  r} {..return [$s
4de0: 65 6c 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e  elf AddBranch un
4df0: 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e  labeled-$branchn
4e00: 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20  r $branchnr].   
4e10: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41   }..    method A
4e20: 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62  ddBranch {name b
4e30: 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b  ranchnr} {..if {
4e40: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62  [info exists myb
4e50: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e  ranches($branchn
4e60: 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20  r)]} {..    log 
4e70: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e  write 1 file "In
4e80: 20 27 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e   '$mypath': Bran
4e90: 63 68 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e  ch '$branchnr' n
4ea0: 61 6d 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68  amed '[$mybranch
4eb0: 65 73 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61  es($branchnr) na
4ec0: 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77  me]'"..    log w
4ed0: 72 69 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e  rite 1 file "Can
4ee0: 6e 6f 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20  not have second 
4ef0: 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67  name '$name', ig
4f00: 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20  noring it"..    
4f10: 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62  return..}..set b
4f20: 72 61 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f  ranch [sym %AUTO
4f30: 25 20 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68  % branch $branch
4f40: 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67  nr [$myproject g
4f50: 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20  etsymbol $name] 
4f60: 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e 63 68 20  $self]..$branch 
4f70: 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e 63  setposition [inc
4f80: 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a 09  r mybranchcnt]..
4f90: 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24  set mybranches($
4fa0: 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61 6e 63  branchnr) $branc
4fb0: 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61 6e 63  h..return $branc
4fc0: 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  h.    }..    met
4fd0: 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61 6d 65  hod AddTag {name
4fe0: 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 74   revnr} {..set t
4ff0: 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 74  ag [sym %AUTO% t
5000: 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79 70 72  ag $revnr [$mypr
5010: 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20  oject getsymbol 
5020: 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 6c  $name] $self]..l
5030: 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28 24 72  append mytags($r
5040: 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65 74 75  evnr) $tag..retu
5050: 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a 0a 20  rn $tag.    }.. 
5060: 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64     method Record
5070: 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65  BasicDependencie
5080: 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 7b  s {revnr next} {
5090: 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65 20 72  ..# Handle the r
50a0: 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 6e  evision dependen
50b0: 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74 68 65  cies. Record the
50c0: 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 23  m for now, do..#
50d0: 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20 74 68   nothing with th
50e0: 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 74  em yet....# On t
50f0: 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27 6e 65  he trunk the 'ne
5100: 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  xt' field points
5110: 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
5120: 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 2e  ..# revision, i.
5130: 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74 5f 20  e. the _parent_ 
5140: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f  of the current o
5150: 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 20  ne. Example:..# 
5160: 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20 31 2e  1.6's next is 1.
5170: 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 64  5 (modulo cvs ad
5180: 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f 6e  min -o)....# Con
5190: 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 61  trarily on a bra
51a0: 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27 20 66  nch the 'next' f
51b0: 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
51c0: 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20 5f 63  he..# primary _c
51d0: 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 72  hild_ of the cur
51e0: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 41  rent revision. A
51f0: 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 2e  s example,..# 1.
5200: 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27 20 77  1.3.2's 'next' w
5210: 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e 0a  ill be 1.1.3.3..
5220: 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27 20 66  ..# The 'next' f
5230: 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 6c  ield actually al
5240: 77 61 79 73 20 72 65 66 65 72 73 20 74 6f 20 74  ways refers to t
5250: 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 63  he revision..# c
5260: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 65  ontaining the de
5270: 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20 72 65  lta needed to re
5280: 74 72 69 65 76 65 20 74 68 61 74 20 72 65 76 69  trieve that revi
5290: 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 65  sion....# The de
52a0: 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 65  pendencies neede
52b0: 64 20 68 65 72 65 20 61 72 65 20 74 68 65 20 6c  d here are the l
52c0: 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75 72 65  ogical structure
52d0: 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68 69 6c  ,..# parent/chil
52e0: 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 69  d, and not the i
52f0: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65  mplementation de
5300: 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 23  pendent delta..#
5310: 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 20   pointers....if 
5320: 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20 72 65  {$next eq ""} re
5330: 74 75 72 6e 0a 09 23 20 20 20 20 20 20 20 20 20  turn..#         
5340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5350: 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64   parent -> child
5360: 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75  ..if {[rev istru
5370: 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d  nkrevnr $revnr]}
5380: 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
5390: 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24  mydependencies $
53a0: 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 65  next $revnr..} e
53b0: 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 65  lse {..    lappe
53c0: 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65  nd mydependencie
53d0: 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09  s $revnr $next..
53e0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
53f0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63  .    method Proc
5400: 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64  essPrimaryDepend
5410: 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72  encies {} {..for
5420: 65 61 63 68 20 7b 70 61 72 65 6e 74 72 65 76 6e  each {parentrevn
5430: 72 20 63 68 69 6c 64 72 65 76 6e 72 7d 20 24 6d  r childrevnr} $m
5440: 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 0a  ydependencies {.
5450: 09 20 20 20 20 73 65 74 20 70 61 72 65 6e 74 20  .    set parent 
5460: 24 6d 79 72 65 76 28 24 70 61 72 65 6e 74 72 65  $myrev($parentre
5470: 76 6e 72 29 0a 09 20 20 20 20 73 65 74 20 63 68  vnr)..    set ch
5480: 69 6c 64 20 20 24 6d 79 72 65 76 28 24 63 68 69  ild  $myrev($chi
5490: 6c 64 72 65 76 6e 72 29 0a 09 20 20 20 20 24 70  ldrevnr)..    $p
54a0: 61 72 65 6e 74 20 73 65 74 63 68 69 6c 64 20 24  arent setchild $
54b0: 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c  child..    $chil
54c0: 64 20 73 65 74 70 61 72 65 6e 74 20 24 70 61 72  d setparent $par
54d0: 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  ent..}..return. 
54e0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
54f0: 20 50 72 6f 63 65 73 73 42 72 61 6e 63 68 44 65   ProcessBranchDe
5500: 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a  pendencies {} {.
5510: 09 66 6f 72 65 61 63 68 20 7b 62 72 61 6e 63 68  .foreach {branch
5520: 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61  nr branch} [arra
5530: 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73  y get mybranches
5540: 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 72 65 76  ] {..    set rev
5550: 6e 72 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65  nr [$branch pare
5560: 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20 69  ntrevnr]...    i
5570: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
5580: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d   myrev($revnr)]}
5590: 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31   {...log write 1
55a0: 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61   file "In '$mypa
55b0: 74 68 27 3a 20 54 68 65 20 62 72 61 6e 63 68 20  th': The branch 
55c0: 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d 27  '[$branch name]'
55d0: 20 72 65 66 65 72 65 6e 63 65 73 22 0a 09 09 6c   references"...l
55e0: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20  og write 1 file 
55f0: 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 73  "the bogus revis
5600: 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64  ion '$revnr' and
5610: 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64   will be ignored
5620: 2e 22 0a 09 09 24 62 72 61 6e 63 68 20 64 65 73  ."...$branch des
5630: 74 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79 62  troy...unset myb
5640: 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e  ranches($branchn
5650: 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b  r)..    } else {
5660: 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 65  ...set rev $myre
5670: 76 28 24 72 65 76 6e 72 29 0a 09 09 24 72 65 76  v($revnr)...$rev
5680: 20 61 64 64 62 72 61 6e 63 68 20 24 62 72 61 6e   addbranch $bran
5690: 63 68 0a 09 09 24 62 72 61 6e 63 68 20 73 65 74  ch...$branch set
56a0: 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09 09 23  parent $rev....#
56b0: 20 49 66 20 72 65 76 69 73 69 6f 6e 73 20 77 65   If revisions we
56c0: 72 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20  re committed on 
56d0: 74 68 65 20 62 72 61 6e 63 68 20 77 65 20 73 74  the branch we st
56e0: 6f 72 65 20 61 0a 09 09 23 20 72 65 66 65 72 65  ore a...# refere
56f0: 6e 63 65 20 74 6f 20 74 68 65 20 62 72 61 6e 63  nce to the branc
5700: 68 20 74 68 65 72 65 2c 20 61 6e 64 20 66 75 72  h there, and fur
5710: 74 68 65 72 20 64 65 63 6c 61 72 65 0a 09 09 23  ther declare...#
5720: 20 74 68 65 20 66 69 72 73 74 20 63 68 69 6c 64   the first child
5730: 27 73 20 70 61 72 65 6e 74 20 74 6f 20 62 65 20  's parent to be 
5740: 62 72 61 6e 63 68 27 73 20 70 61 72 65 6e 74 2c  branch's parent,
5750: 20 61 6e 64 0a 09 09 23 20 6c 69 73 74 20 74 68   and...# list th
5760: 69 73 20 63 68 69 6c 64 20 69 6e 20 74 68 65 20  is child in the 
5770: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e  parent revision.
5780: 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e 63 68  ....if {[$branch
5790: 20 68 61 73 63 68 69 6c 64 72 65 76 5d 7d 20 7b   haschildrev]} {
57a0: 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 6c 64  ...    set child
57b0: 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 63  revnr [$branch c
57c0: 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20 20  hildrevnr]...   
57d0: 20 73 65 74 20 63 68 69 6c 64 20 24 6d 79 72 65   set child $myre
57e0: 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 09  v($childrevnr)..
57f0: 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74  .    $branch set
5800: 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09 09  child $child....
5810: 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 61      $child setpa
5820: 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e  rentbranch $bran
5830: 63 68 0a 09 09 20 20 20 20 24 63 68 69 6c 64 20  ch...    $child 
5840: 73 65 74 70 61 72 65 6e 74 20 20 20 20 20 20 20  setparent       
5850: 24 72 65 76 0a 09 09 20 20 20 20 24 72 65 76 20  $rev...    $rev 
5860: 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68  addchildonbranch
5870: 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20 20   $child...}..   
5880: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20   }..}..return.  
5890: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
58a0: 53 6f 72 74 42 72 61 6e 63 68 65 73 20 7b 7d 20  SortBranches {} 
58b0: 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e  {..foreach {revn
58c0: 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65  r rev} [array ge
58d0: 74 20 6d 79 72 65 76 5d 20 7b 20 24 72 65 76 20  t myrev] { $rev 
58e0: 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7d 0a 09  sortbranches }..
58f0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
5900: 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73    method Process
5910: 54 61 67 44 65 70 65 6e 64 65 6e 63 69 65 73 20  TagDependencies 
5920: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72  {} {..foreach {r
5930: 65 76 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b 61  evnr taglist} [a
5940: 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d  rray get mytags]
5950: 20 7b 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e   {..    if {![in
5960: 66 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28  fo exists myrev(
5970: 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73 65  $revnr)]} {...se
5980: 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74 61  t n [llength $ta
5990: 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72 69  glist]...log wri
59a0: 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24  te 1 file "In '$
59b0: 6d 79 70 61 74 68 27 3a 20 54 68 65 20 66 6f 6c  mypath': The fol
59c0: 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20 74  lowing [nsp $n t
59d0: 61 67 5d 20 72 65 66 65 72 65 6e 63 65 22 0a 09  ag] reference"..
59e0: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c  .log write 1 fil
59f0: 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65 76  e "the bogus rev
5a00: 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61  ision '$revnr' a
5a10: 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72  nd will be ignor
5a20: 65 64 2e 22 0a 09 09 66 6f 72 65 61 63 68 20 74  ed."...foreach t
5a30: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09  ag $taglist {...
5a40: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20      log write 1 
5a50: 66 69 6c 65 20 22 20 20 20 20 5b 24 74 61 67 20  file "    [$tag 
5a60: 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20 24 74 61  name]"...    $ta
5a70: 67 20 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09 09  g destroy...}...
5a80: 75 6e 73 65 74 20 6d 79 74 61 67 73 28 24 72 65  unset mytags($re
5a90: 76 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65  vnr)..    } else
5aa0: 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79   {...set rev $my
5ab0: 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 66 6f  rev($revnr)...fo
5ac0: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69  reach tag $tagli
5ad0: 73 74 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20  st {...    $rev 
5ae0: 61 64 64 74 61 67 20 20 20 20 24 74 61 67 0a 09  addtag    $tag..
5af0: 09 20 20 20 20 24 74 61 67 20 73 65 74 74 61 67  .    $tag settag
5b00: 72 65 76 20 24 72 65 76 0a 09 09 7d 0a 09 20 20  rev $rev...}..  
5b10: 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20    }..}..return. 
5b20: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
5b30: 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f   DetermineTheRoo
5b40: 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09  tRevision {} {..
5b50: 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20 74 68  # The root is th
5b60: 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 77  e one revision w
5b70: 68 69 63 68 20 68 61 73 20 6e 6f 20 70 61 72 65  hich has no pare
5b80: 6e 74 2e 20 42 79 0a 09 23 20 63 68 65 63 6b 69  nt. By..# checki
5b90: 6e 67 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73  ng all revisions
5ba0: 20 77 65 20 65 6e 73 75 72 65 20 74 68 61 74 20   we ensure that 
5bb0: 77 65 20 63 61 6e 20 64 65 74 65 63 74 20 61 6e  we can detect an
5bc0: 64 0a 09 23 20 72 65 70 6f 72 74 20 74 68 65 20  d..# report the 
5bd0: 63 61 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c 65  case of multiple
5be0: 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74 20   roots. Without 
5bf0: 74 68 61 74 20 77 65 20 63 6f 75 6c 64 0a 09 23  that we could..#
5c00: 20 73 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e 65   simply take one
5c10: 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 66 6f   revision and fo
5c20: 6c 6c 6f 77 20 74 68 65 20 70 61 72 65 6e 74 20  llow the parent 
5c30: 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65 69  links to..# thei
5c40: 72 20 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a 0a  r root (sic!)...
5c50: 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20  .foreach {revnr 
5c60: 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20  rev} [array get 
5c70: 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20 69 66  myrev] {..    if
5c80: 20 7b 5b 24 72 65 76 20 68 61 73 70 61 72 65 6e   {[$rev hasparen
5c90: 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  t]} continue..  
5ca0: 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73 65    integrity asse
5cb0: 72 74 20 7b 24 6d 79 72 6f 6f 74 20 65 71 20 22  rt {$myroot eq "
5cc0: 22 7d 20 7b 4d 75 6c 74 69 70 6c 65 20 72 6f 6f  "} {Multiple roo
5cd0: 74 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e  t revisions foun
5ce0: 64 7d 0a 09 20 20 20 20 73 65 74 20 6d 79 72 6f  d}..    set myro
5cf0: 6f 74 20 24 72 65 76 0a 09 7d 0a 0a 09 23 20 49  ot $rev..}...# I
5d00: 6e 20 74 68 65 20 66 75 74 75 72 65 20 77 65 20  n the future we 
5d10: 61 6c 73 6f 20 6e 65 65 64 20 61 20 6c 69 73 74  also need a list
5d20: 2c 20 61 73 20 62 72 61 6e 63 68 65 73 20 63 61  , as branches ca
5d30: 6e 20 62 65 63 6f 6d 65 0a 09 23 20 73 65 76 65  n become..# seve
5d40: 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20 70  red from their p
5d50: 61 72 65 6e 74 2c 20 6d 61 6b 69 6e 67 20 74 68  arent, making th
5d60: 65 6d 20 74 68 65 69 72 20 6f 77 6e 20 72 6f 6f  em their own roo
5d70: 74 2e 0a 09 73 65 74 20 6d 79 72 6f 6f 74 73 20  t...set myroots 
5d80: 5b 6c 69 73 74 20 24 6d 79 72 6f 6f 74 5d 0a 09  [list $myroot]..
5d90: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
5da0: 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69    method Determi
5db0: 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 74  neRevisionOperat
5dc0: 69 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61  ions {} {..forea
5dd0: 63 68 20 72 65 76 20 24 6d 79 72 65 76 69 73 69  ch rev $myrevisi
5de0: 6f 6e 73 20 7b 20 24 72 65 76 20 64 65 74 65 72  ons { $rev deter
5df0: 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20 7d 0a  mineoperation }.
5e00: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
5e10: 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d     method Determ
5e20: 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f  ineLinesOfDevelo
5e30: 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 46 6f  pment {} {..# Fo
5e40: 72 20 72 65 76 69 73 69 6f 6e 73 20 74 68 69 73  r revisions this
5e50: 20 68 61 73 20 62 65 65 6e 20 64 6f 6e 65 20 61   has been done a
5e60: 6c 72 65 61 64 79 2c 20 69 6e 20 27 65 78 74 65  lready, in 'exte
5e70: 6e 64 27 2e 20 4e 6f 77 0a 09 23 20 77 65 20 64  nd'. Now..# we d
5e80: 6f 20 74 68 69 73 20 66 6f 72 20 74 68 65 20 62  o this for the b
5e90: 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67 73  ranches and tags
5ea0: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62  ....foreach {_ b
5eb0: 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65  ranch} [array ge
5ec0: 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a  t mybranches] {.
5ed0: 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74  .    $branch set
5ee0: 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f  lod [$self GetLO
5ef0: 44 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e  D [$branch paren
5f00: 74 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09 66 6f  trevnr]]..}...fo
5f10: 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 73 74  reach {_ taglist
5f20: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74  } [array get myt
5f30: 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65  ags] {..    fore
5f40: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74  ach tag $taglist
5f50: 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c 6f 64   {...$tag setlod
5f60: 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 5b   [$self GetLOD [
5f70: 24 74 61 67 20 74 61 67 72 65 76 6e 72 5d 5d 0a  $tag tagrevnr]].
5f80: 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72  .    }..}..retur
5f90: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
5fa0: 68 6f 64 20 47 65 74 4c 4f 44 20 7b 72 65 76 6e  hod GetLOD {revn
5fb0: 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20 69  r} {..if {[rev i
5fc0: 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76  strunkrevnr $rev
5fd0: 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 75  nr]} {..    retu
5fe0: 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 7d 20 65  rn $mytrunk..} e
5ff0: 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 74 75 72  lse {..    retur
6000: 6e 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61  n [$self Rev2Bra
6010: 6e 63 68 20 24 72 65 76 6e 72 5d 0a 09 7d 0a 20  nch $revnr]..}. 
6020: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
6030: 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44   HandleNonTrunkD
6040: 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b 7d 20  efaultBranch {} 
6050: 7b 0a 09 73 65 74 20 72 65 76 6c 69 73 74 20 5b  {..set revlist [
6060: 24 73 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b 44 65  $self NonTrunkDe
6070: 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73 5d 0a  faultRevisions].
6080: 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24  .if {![llength $
6090: 72 65 76 6c 69 73 74 5d 7d 20 72 65 74 75 72 6e  revlist]} return
60a0: 0a 0a 09 24 73 65 6c 66 20 41 64 6a 75 73 74 4e  ...$self AdjustN
60b0: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72  onTrunkDefaultBr
60c0: 61 6e 63 68 20 24 72 65 76 6c 69 73 74 0a 09 24  anch $revlist..$
60d0: 73 65 6c 66 20 43 68 65 63 6b 4c 4f 44 73 0a 09  self CheckLODs..
60e0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
60f0: 20 20 6d 65 74 68 6f 64 20 4e 6f 6e 54 72 75 6e    method NonTrun
6100: 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e  kDefaultRevision
6110: 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63  s {} {..# From c
6120: 76 73 32 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f  vs2svn the follo
6130: 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e  wing explanation
6140: 20 28 77 69 74 68 20 6d 6f 64 69 66 69 63 61 74   (with modificat
6150: 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75 72 20  ions..# for our 
6160: 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20  algorithm):...# 
6170: 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
6180: 72 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20  r there are any 
6190: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
61a0: 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 76 69  t branch..# revi
61b0: 73 69 6f 6e 73 2e 0a 0a 09 23 20 49 66 20 61 20  sions....# If a 
61c0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
61d0: 74 20 62 72 61 6e 63 68 20 69 73 20 64 65 74 65  t branch is dete
61e0: 72 6d 69 6e 65 64 20 74 6f 20 68 61 76 65 20 65  rmined to have e
61f0: 78 69 73 74 65 64 2c 0a 09 23 20 72 65 74 75 72  xisted,..# retur
6200: 6e 20 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65  n a list of obje
6210: 63 74 73 20 66 6f 72 20 61 6c 6c 20 72 65 76 69  cts for all revi
6220: 73 69 6f 6e 73 20 74 68 61 74 20 77 65 72 65 20  sions that were 
6230: 6f 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e  once..# non-trun
6240: 6b 20 64 65 66 61 75 6c 74 20 72 65 76 69 73 69  k default revisi
6250: 6f 6e 73 2c 20 69 6e 20 64 65 70 65 6e 64 65 6e  ons, in dependen
6260: 63 79 20 6f 72 64 65 72 20 28 69 2e 65 2e 20 72  cy order (i.e. r
6270: 6f 6f 74 0a 09 23 20 66 69 72 73 74 29 2e 0a 0a  oot..# first)...
6280: 09 23 20 54 68 65 72 65 20 61 72 65 20 74 77 6f  .# There are two
6290: 20 63 61 73 65 73 20 74 6f 20 68 61 6e 64 6c 65   cases to handle
62a0: 3a 0a 0a 09 23 20 4f 6e 65 20 63 61 73 65 20 69  :...# One case i
62b0: 73 20 73 69 6d 70 6c 65 2e 20 20 54 68 65 20 52  s simple.  The R
62c0: 43 53 20 66 69 6c 65 20 6c 69 73 74 73 20 61 20  CS file lists a 
62d0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09  default branch..
62e0: 23 20 65 78 70 6c 69 63 69 74 6c 79 20 69 6e 20  # explicitly in 
62f0: 69 74 73 20 68 65 61 64 65 72 2c 20 73 75 63 68  its header, such
6300: 20 61 73 20 27 31 2e 31 2e 31 27 2e 20 20 49 6e   as '1.1.1'.  In
6310: 20 74 68 69 73 20 63 61 73 65 2c 20 77 65 0a 09   this case, we..
6320: 23 20 6b 6e 6f 77 20 74 68 61 74 20 65 76 65 72  # know that ever
6330: 79 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68  y revision on th
6340: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20  e vendor branch 
6350: 69 73 20 74 6f 20 62 65 0a 09 23 20 74 72 65 61  is to be..# trea
6360: 74 65 64 20 61 73 20 68 65 61 64 20 6f 66 20 74  ted as head of t
6370: 72 75 6e 6b 20 61 74 20 74 68 61 74 20 70 6f 69  runk at that poi
6380: 6e 74 20 69 6e 20 74 69 6d 65 2e 0a 0a 09 23 20  nt in time....# 
6390: 42 75 74 20 74 68 65 72 65 27 73 20 61 6c 73 6f  But there's also
63a0: 20 61 20 64 65 67 65 6e 65 72 61 74 65 20 63 61   a degenerate ca
63b0: 73 65 2e 20 20 54 68 65 20 52 43 53 20 66 69 6c  se.  The RCS fil
63c0: 65 20 64 6f 65 73 20 6e 6f 74 0a 09 23 20 63 75  e does not..# cu
63d0: 72 72 65 6e 74 6c 79 20 68 61 76 65 20 61 20 64  rrently have a d
63e0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 79  efault branch, y
63f0: 65 74 20 77 65 20 63 61 6e 20 64 65 64 75 63 65  et we can deduce
6400: 20 74 68 61 74 20 66 6f 72 0a 09 23 20 73 6f 6d   that for..# som
6410: 65 20 70 65 72 69 6f 64 20 69 6e 20 74 68 65 20  e period in the 
6420: 70 61 73 74 20 69 74 20 70 72 6f 62 61 62 6c 79  past it probably
6430: 20 2a 64 69 64 2a 20 68 61 76 65 20 6f 6e 65 2e   *did* have one.
6440: 20 20 46 6f 72 0a 09 23 20 65 78 61 6d 70 6c 65    For..# example
6450: 2c 20 74 68 65 20 66 69 6c 65 20 68 61 73 20 76  , the file has v
6460: 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 20  endor revisions 
6470: 31 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e 31 2e 31  1.1.1.1 -> 1.1.1
6480: 2e 39 36 2c 0a 09 23 20 61 6c 6c 20 6f 66 20 77  .96,..# all of w
6490: 68 69 63 68 20 61 72 65 20 64 61 74 65 64 20 62  hich are dated b
64a0: 65 66 6f 72 65 20 31 2e 32 2c 20 61 6e 64 20 74  efore 1.2, and t
64b0: 68 65 6e 20 69 74 20 68 61 73 20 31 2e 31 2e 31  hen it has 1.1.1
64c0: 2e 39 37 0a 09 23 20 2d 3e 20 31 2e 31 2e 31 2e  .97..# -> 1.1.1.
64d0: 31 30 30 20 64 61 74 65 64 20 61 66 74 65 72 20  100 dated after 
64e0: 31 2e 32 2e 20 20 49 6e 20 74 68 69 73 20 63 61  1.2.  In this ca
64f0: 73 65 2c 20 77 65 20 73 68 6f 75 6c 64 0a 09 23  se, we should..#
6500: 20 72 65 63 6f 72 64 20 31 2e 31 2e 31 2e 39 36   record 1.1.1.96
6510: 20 61 73 20 74 68 65 20 6c 61 73 74 20 76 65 6e   as the last ven
6520: 64 6f 72 20 72 65 76 69 73 69 6f 6e 20 74 6f 20  dor revision to 
6530: 68 61 76 65 20 62 65 65 6e 20 74 68 65 0a 09 23  have been the..#
6540: 20 68 65 61 64 20 6f 66 20 74 68 65 20 64 65 66   head of the def
6550: 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 0a 09 69  ault branch....i
6560: 66 20 7b 24 6d 79 70 72 69 6e 63 69 70 61 6c 20  f {$myprincipal 
6570: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20  ne ""} {..    # 
6580: 54 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 61  There is still a
6590: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 3b   default branch;
65a0: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
65b0: 20 61 6c 6c 0a 09 20 20 20 20 23 20 72 65 76 69   all..    # revi
65c0: 73 69 6f 6e 73 20 6f 6e 20 74 68 61 74 20 62 72  sions on that br
65d0: 61 6e 63 68 20 67 65 74 20 6d 61 72 6b 65 64 2e  anch get marked.
65e0: 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  ...    log write
65f0: 20 35 20 66 69 6c 65 20 22 46 6f 75 6e 64 20 65   5 file "Found e
6600: 78 70 6c 69 63 69 74 6c 79 20 6d 61 72 6b 65 64  xplicitly marked
6610: 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74   NTDB"...    set
6620: 20 72 6e 65 78 74 20 5b 24 6d 79 72 6f 6f 74 20   rnext [$myroot 
6630: 63 68 69 6c 64 5d 0a 09 20 20 20 20 69 66 20 7b  child]..    if {
6640: 24 72 6e 65 78 74 20 6e 65 20 22 22 7d 20 7b 0a  $rnext ne ""} {.
6650: 09 09 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20  ..trouble fatal 
6660: 22 46 69 6c 65 20 77 69 74 68 20 64 65 66 61 75  "File with defau
6670: 6c 74 20 62 72 61 6e 63 68 20 24 6d 79 70 72 69  lt branch $mypri
6680: 6e 63 69 70 61 6c 20 61 6c 73 6f 20 68 61 73 20  ncipal also has 
6690: 72 65 76 69 73 69 6f 6e 20 5b 24 72 6e 65 78 74  revision [$rnext
66a0: 20 72 65 76 6e 72 5d 22 0a 09 09 72 65 74 75 72   revnr]"...retur
66b0: 6e 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73  n..    }...    s
66c0: 65 74 20 72 65 76 20 5b 24 6d 79 62 72 61 6e 63  et rev [$mybranc
66d0: 68 65 73 28 24 6d 79 70 72 69 6e 63 69 70 61 6c  hes($myprincipal
66e0: 29 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 65  ) child]..    se
66f0: 74 20 72 65 73 20 7b 7d 0a 0a 09 20 20 20 20 77  t res {}...    w
6700: 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22  hile {$rev ne ""
6710: 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72 65  } {...lappend re
6720: 73 20 24 72 65 76 0a 09 09 73 65 74 20 72 65 76  s $rev...set rev
6730: 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 20   [$rev child].. 
6740: 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72     }...    retur
6750: 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 69  n $res...} elsei
6760: 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 7d 20  f {$myimported} 
6770: 7b 0a 09 20 20 20 20 23 20 4e 6f 20 64 65 66 61  {..    # No defa
6780: 75 6c 74 20 62 72 61 6e 63 68 2c 20 62 75 74 20  ult branch, but 
6790: 74 68 65 20 66 69 6c 65 20 61 70 70 65 61 72 73  the file appears
67a0: 20 74 6f 20 68 61 76 65 20 62 65 65 6e 0a 09 20   to have been.. 
67b0: 20 20 20 23 20 69 6d 70 6f 72 74 65 64 2e 20 20     # imported.  
67c0: 53 6f 20 6f 75 72 20 65 64 75 63 61 74 65 64 20  So our educated 
67d0: 67 75 65 73 73 20 69 73 20 74 68 61 74 20 61 6c  guess is that al
67e0: 6c 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20  l revisions..   
67f0: 20 23 20 6f 6e 20 74 68 65 20 27 31 2e 31 2e 31   # on the '1.1.1
6800: 27 20 62 72 61 6e 63 68 20 77 69 74 68 20 74 69  ' branch with ti
6810: 6d 65 73 74 61 6d 70 73 20 70 72 69 6f 72 20 74  mestamps prior t
6820: 6f 20 74 68 65 0a 09 20 20 20 20 23 20 74 69 6d  o the..    # tim
6830: 65 73 74 61 6d 70 20 6f 66 20 27 31 2e 32 27 20  estamp of '1.2' 
6840: 77 65 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64  were non-trunk d
6850: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 20  efault branch.. 
6860: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a     # revisions..
6870: 0a 09 20 20 20 20 23 20 54 68 69 73 20 72 65 61  ..    # This rea
6880: 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f 63 65 73 73  lly only process
6890: 65 73 20 73 74 61 6e 64 61 72 64 20 27 31 2e 31  es standard '1.1
68a0: 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a 09 20 20 20  .1.*'-style..   
68b0: 20 23 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69   # vendor revisi
68c0: 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f 75 6c 64 20  ons.  One could 
68d0: 63 6f 6e 63 65 69 76 61 62 6c 79 20 68 61 76 65  conceivably have
68e0: 20 61 20 66 69 6c 65 0a 09 20 20 20 20 23 20 77   a file..    # w
68f0: 68 6f 73 65 20 64 65 66 61 75 6c 74 20 62 72 61  hose default bra
6900: 6e 63 68 20 69 73 20 31 2e 31 2e 33 20 6f 72 20  nch is 1.1.3 or 
6910: 77 68 61 74 65 76 65 72 2c 20 6f 72 20 77 61 73  whatever, or was
6920: 20 74 68 61 74 0a 09 20 20 20 20 23 20 61 74 20   that..    # at 
6930: 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e 20 74 69  some point in ti
6940: 6d 65 2c 20 77 69 74 68 20 76 65 6e 64 6f 72 20  me, with vendor 
6950: 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 33 2e  revisions 1.1.3.
6960: 31 2c 0a 09 20 20 20 20 23 20 31 2e 31 2e 33 2e  1,..    # 1.1.3.
6970: 32 2c 20 65 74 63 2e 20 20 42 75 74 20 77 69 74  2, etc.  But wit
6980: 68 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72  h the default br
6990: 61 6e 63 68 20 67 6f 6e 65 20 6e 6f 77 2c 0a 09  anch gone now,..
69a0: 20 20 20 20 23 20 77 65 27 64 20 68 61 76 65 20      # we'd have 
69b0: 6e 6f 20 62 61 73 69 73 20 66 6f 72 20 61 73 73  no basis for ass
69c0: 75 6d 69 6e 67 20 74 68 61 74 20 74 68 65 20 6e  uming that the n
69d0: 6f 6e 2d 73 74 61 6e 64 61 72 64 0a 09 20 20 20  on-standard..   
69e0: 20 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68   # vendor branch
69f0: 20 68 61 64 20 65 76 65 72 20 62 65 65 6e 20 74   had ever been t
6a00: 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  he default branc
6a10: 68 20 61 6e 79 77 61 79 2e 0a 0a 09 20 20 20 20  h anyway....    
6a20: 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20 72  # Note that we r
6a30: 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73 6f  ely on compariso
6a40: 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20 74  ns between the t
6a50: 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 20 23  imestamps..    #
6a60: 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e   of the revision
6a70: 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20  s on the vendor 
6a80: 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61 74 20  branch and that 
6a90: 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69 73 69  of..    # revisi
6aa0: 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 68 6f  on 1.2, even tho
6ab0: 75 67 68 20 74 68 65 20 74 69 6d 65 73 74 61 6d  ugh the timestam
6ac0: 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20 20 20  ps might be..   
6ad0: 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64 75 65   # incorrect due
6ae0: 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e 20   to clock skew. 
6af0: 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 20 73   We could do a s
6b00: 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23 20 62  lightly..    # b
6b10: 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77 65 20  etter job if we 
6b20: 75 73 65 64 20 74 68 65 20 63 68 61 6e 67 65 73  used the changes
6b30: 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c 20 61  et timestamps, a
6b40: 73 20 69 74 20 69 73 0a 09 20 20 20 20 23 20 70  s it is..    # p
6b50: 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74 68 65  ossible that the
6b60: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74 68   dependencies th
6b70: 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20 20  at went into..  
6b80: 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e 67 20    # determining 
6b90: 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d 70 73  those timestamps
6ba0: 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75 72 61   are more accura
6bb0: 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20 23 20  te.  But..    # 
6bc0: 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71 75 69  that would requi
6bd0: 72 65 20 61 6e 20 65 78 74 72 61 20 70 61 73 73  re an extra pass
6be0: 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20 69   or two....    i
6bf0: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
6c00: 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31 2e   mybranches(1.1.
6c10: 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b 7d  1)]} { return {}
6c20: 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69   }...    log wri
6c30: 74 65 20 35 20 66 69 6c 65 20 22 44 65 64 75 63  te 5 file "Deduc
6c40: 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20  ed existence of 
6c50: 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 20  NTDB"...    set 
6c60: 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 68 65  rev  [$mybranche
6c70: 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d 0a  s(1.1.1) child].
6c80: 09 20 20 20 20 73 65 74 20 72 65 73 20 20 7b 7d  .    set res  {}
6c90: 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b  ..    set stop [
6ca0: 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 0a  $myroot child]..
6cb0: 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20 65  .    if {$stop e
6cc0: 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 74 20  q ""} {...# Get 
6cd0: 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68  everything on th
6ce0: 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69 6c 65  e branch...while
6cf0: 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a   {$rev ne ""} {.
6d00: 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65  ..    lappend re
6d10: 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 65 74  s $rev...    set
6d20: 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64   rev [$rev child
6d30: 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73  ]...}..    } els
6d40: 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74 20  e {...# Collect 
6d50: 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68  everything on th
6d60: 65 20 62 72 61 6e 63 68 20 77 68 69 63 68 20 73  e branch which s
6d70: 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 09 23  eems to have...#
6d80: 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64 20   been committed 
6d90: 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74  before the first
6da0: 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f   primary child o
6db0: 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 20 72  f the...# root r
6dc0: 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20 73  evision....set s
6dd0: 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 20 64  topdate [$stop d
6de0: 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24 72  ate]...while {$r
6df0: 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20  ev ne ""} {...  
6e00: 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61 74 65    if {[$rev date
6e10: 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d 20  ] >= $stopdate} 
6e20: 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 70 70  break...    lapp
6e30: 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09 20  end res $rev... 
6e40: 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76     set rev [$rev
6e50: 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20   child]...}..   
6e60: 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20   }...    return 
6e70: 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b 0a  $res...} else {.
6e80: 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a 09  .    return {}..
6e90: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 47  }.    }..    # G
6ea0: 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20 49 6e 20  eneral note: In 
6eb0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 65  the following me
6ec0: 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79 20 6d 6f  thods we only mo
6ed0: 64 69 66 79 20 74 68 65 20 6c 69 6e 6b 73 0a 20  dify the links. 
6ee0: 20 20 20 23 20 62 65 74 77 65 65 6e 20 72 65 76     # between rev
6ef0: 69 73 69 6f 6e 73 20 61 6e 64 20 73 79 6d 62 6f  isions and symbo
6f00: 6c 73 20 74 6f 20 72 65 73 74 72 75 63 74 75 72  ls to restructur
6f10: 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 20  e the revision. 
6f20: 20 20 20 23 20 74 72 65 65 2e 20 57 65 20 64 6f     # tree. We do
6f30: 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 6f 79   __not__ destroy
6f40: 20 74 68 65 20 6f 62 6a 65 63 74 73 2e 20 47 69   the objects. Gi
6f50: 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c 65 78 20  ven the complex 
6f60: 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47 43 20 69  links.    # GC i
6f70: 73 20 64 69 66 66 69 63 75 6c 74 20 61 74 20 74  s difficult at t
6f80: 68 69 73 20 6c 65 76 65 6c 2e 20 49 74 20 69 73  his level. It is
6f90: 20 6d 75 63 68 20 65 61 73 69 65 72 20 74 6f 20   much easier to 
6fa0: 64 72 6f 70 0a 20 20 20 20 23 20 65 76 65 72 79  drop.    # every
6fb0: 74 68 69 6e 67 20 77 68 65 6e 20 77 65 20 77 65  thing when we we
6fc0: 20 61 72 65 20 64 6f 6e 65 2e 20 54 68 69 73 20   are done. This 
6fd0: 68 61 70 70 65 6e 73 20 69 6e 20 27 64 72 6f 70  happens in 'drop
6fe0: 27 2c 20 75 73 69 6e 67 0a 20 20 20 20 23 20 74  ', using.    # t
6ff0: 68 65 20 73 74 61 74 65 20 76 61 72 69 61 62 6c  he state variabl
7000: 65 20 27 6d 79 72 65 76 27 2c 20 27 6d 79 62 72  e 'myrev', 'mybr
7010: 61 6e 63 68 65 73 27 2c 20 61 6e 64 20 27 6d 79  anches', and 'my
7020: 74 61 67 73 27 2e 20 57 68 61 74 20 77 65 0a 20  tags'. What we. 
7030: 20 20 20 23 20 68 61 76 65 20 74 6f 20 70 65 72     # have to per
7040: 73 69 73 74 2c 20 70 65 72 66 6f 72 6d 65 64 20  sist, performed 
7050: 62 79 20 27 70 65 72 73 69 73 74 27 2c 20 77 65  by 'persist', we
7060: 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65 0a 20 20   know will be.  
7070: 20 20 23 20 72 65 61 63 68 61 62 6c 65 20 74 68    # reachable th
7080: 72 6f 75 67 68 20 74 68 65 20 72 65 76 69 73 69  rough the revisi
7090: 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e 20 27 6d  ons listed in 'm
70a0: 79 72 6f 6f 74 73 27 20 61 6e 64 20 74 68 65 69  yroots' and thei
70b0: 72 0a 20 20 20 20 23 20 63 68 69 6c 64 72 65 6e  r.    # children
70c0: 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a 0a 20   and symbols... 
70d0: 20 20 20 6d 65 74 68 6f 64 20 41 64 6a 75 73 74     method Adjust
70e0: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42  NonTrunkDefaultB
70f0: 72 61 6e 63 68 20 7b 72 65 76 6c 69 73 74 7d 20  ranch {revlist} 
7100: 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b 24 6d 79  {..set stop [$my
7110: 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b 23 20 72  root child] ;# r
7120: 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 20 77  ev '1.2'...log w
7130: 72 69 74 65 20 35 20 66 69 6c 65 20 22 41 64 6a  rite 5 file "Adj
7140: 75 73 74 69 6e 67 20 4e 54 44 42 20 63 6f 6e 74  usting NTDB cont
7150: 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c 65  aining [nsp [lle
7160: 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d 20 72  ngth $revlist] r
7170: 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 46 72  evision]"...# Fr
7180: 6f 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20 66  om cvs2svn the f
7190: 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61  ollowing explana
71a0: 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66  tion (with modif
71b0: 69 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20  ications..# for 
71c0: 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a  our algorithm):.
71d0: 0a 09 23 20 41 64 6a 75 73 74 20 74 68 65 20 6e  ..# Adjust the n
71e0: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
71f0: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e   branch revision
7200: 73 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 09  s found in the..
7210: 23 20 27 72 65 76 6c 69 73 74 27 2e 0a 0a 09 23  # 'revlist'....#
7220: 20 27 6d 79 69 6d 70 6f 72 74 65 64 27 20 69 73   'myimported' is
7230: 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 20   a boolean flag 
7240: 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68  indicating wheth
7250: 65 72 20 74 68 69 73 20 66 69 6c 65 0a 09 23 20  er this file..# 
7260: 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 20  appears to have 
7270: 62 65 65 6e 20 69 6d 70 6f 72 74 65 64 2c 20 77  been imported, w
7280: 68 69 63 68 20 61 6c 73 6f 20 6d 65 61 6e 73 20  hich also means 
7290: 74 68 61 74 0a 09 23 20 72 65 76 69 73 69 6f 6e  that..# revision
72a0: 20 31 2e 31 20 68 61 73 20 61 20 67 65 6e 65 72   1.1 has a gener
72b0: 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 65  ated log message
72c0: 20 74 68 61 74 20 6e 65 65 64 20 6e 6f 74 20 62   that need not b
72d0: 65 0a 09 23 20 70 72 65 73 65 72 76 65 64 2e 20  e..# preserved. 
72e0: 20 27 72 65 76 6c 69 73 74 27 20 69 73 20 61 20   'revlist' is a 
72f0: 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 20 72  list of object r
7300: 65 66 65 72 65 6e 63 65 73 20 66 6f 72 20 74 68  eferences for th
7310: 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 20 74  e..# revisions t
7320: 68 61 74 20 68 61 76 65 20 62 65 65 6e 20 64 65  hat have been de
7330: 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 6e  termined to be n
7340: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
7350: 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73  ..# branch revis
7360: 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 74  ions....# Note t
7370: 68 61 74 20 74 68 65 20 66 69 72 73 74 20 72 65  hat the first re
7380: 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 64 65  vision on the de
7390: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 0a  fault branch is.
73a0: 09 23 20 68 61 6e 64 6c 65 64 20 73 74 72 61 6e  .# handled stran
73b0: 67 65 6c 79 20 62 79 20 43 56 53 2e 20 20 49 66  gely by CVS.  If
73c0: 20 61 20 66 69 6c 65 20 69 73 20 69 6d 70 6f 72   a file is impor
73d0: 74 65 64 20 28 61 73 20 6f 70 70 6f 73 65 64 0a  ted (as opposed.
73e0: 09 23 20 74 6f 20 62 65 69 6e 67 20 61 64 64 65  .# to being adde
73f0: 64 29 2c 20 43 56 53 20 63 72 65 61 74 65 73 20  d), CVS creates 
7400: 61 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 2c 20  a 1.1 revision, 
7410: 74 68 65 6e 20 63 72 65 61 74 65 73 20 61 0a 09  then creates a..
7420: 23 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20  # vendor branch 
7430: 31 2e 31 2e 31 20 62 61 73 65 64 20 6f 6e 20 31  1.1.1 based on 1
7440: 2e 31 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73  .1, then creates
7450: 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23 20 72 65   a 1.1.1.1..# re
7460: 76 69 73 69 6f 6e 20 74 68 61 74 20 69 73 20 69  vision that is i
7470: 64 65 6e 74 69 63 61 6c 20 74 6f 20 74 68 65 20  dentical to the 
7480: 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 69 2e  1.1 revision (i.
7490: 65 2e 2c 20 69 74 73 0a 09 23 20 64 65 6c 74 61  e., its..# delta
74a0: 74 65 78 74 20 69 73 20 65 6d 70 74 79 29 2e 20  text is empty). 
74b0: 20 54 68 65 20 6c 6f 67 20 6d 65 73 73 61 67 65   The log message
74c0: 20 74 68 61 74 20 74 68 65 20 75 73 65 72 20 74   that the user t
74d0: 79 70 65 64 0a 09 23 20 77 68 65 6e 20 69 6d 70  yped..# when imp
74e0: 6f 72 74 69 6e 67 20 69 73 20 73 74 6f 72 65 64  orting is stored
74f0: 20 77 69 74 68 20 74 68 65 20 31 2e 31 2e 31 2e   with the 1.1.1.
7500: 31 20 72 65 76 69 73 69 6f 6e 2e 20 20 54 68 65  1 revision.  The
7510: 20 31 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e   1.1..# revision
7520: 20 61 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 73   always contains
7530: 20 61 20 73 74 61 6e 64 61 72 64 2c 20 67 65 6e   a standard, gen
7540: 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61  erated log messa
7550: 67 65 2c 0a 09 23 20 27 49 6e 69 74 69 61 6c 20  ge,..# 'Initial 
7560: 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a 09 23  revision\n'....#
7570: 20 57 68 65 6e 20 77 65 20 64 65 74 65 63 74 20   When we detect 
7580: 61 20 73 74 72 61 69 67 68 74 66 6f 72 77 61 72  a straightforwar
7590: 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65 20 74 68  d import like th
75a0: 69 73 2c 20 77 65 20 77 61 6e 74 0a 09 23 20 74  is, we want..# t
75b0: 6f 20 68 61 6e 64 6c 65 20 69 74 20 62 79 20 64  o handle it by d
75c0: 65 6c 65 74 69 6e 67 20 74 68 65 20 31 2e 31 20  eleting the 1.1 
75d0: 72 65 76 69 73 69 6f 6e 20 28 77 68 69 63 68 20  revision (which 
75e0: 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f 6e 74 61  doesn't..# conta
75f0: 69 6e 20 61 6e 79 20 75 73 65 66 75 6c 20 69 6e  in any useful in
7600: 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20 6d  formation) and m
7610: 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31 20 69 6e  aking 1.1.1.1 in
7620: 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65 70 65 6e  to an..# indepen
7630: 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20 74 68 65  dent root in the
7640: 20 66 69 6c 65 27 73 20 64 65 70 65 6e 64 65 6e   file's dependen
7650: 63 79 20 74 72 65 65 2e 20 20 49 6e 20 53 56 4e  cy tree.  In SVN
7660: 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20 77 69 6c  ,..# 1.1.1.1 wil
7670: 6c 20 62 65 20 61 64 64 65 64 20 64 69 72 65 63  l be added direc
7680: 74 6c 79 20 74 6f 20 74 68 65 20 76 65 6e 64 6f  tly to the vendo
7690: 72 20 62 72 61 6e 63 68 20 77 69 74 68 20 69 74  r branch with it
76a0: 73 0a 09 23 20 69 6e 69 74 69 61 6c 20 63 6f 6e  s..# initial con
76b0: 74 65 6e 74 2e 20 20 54 68 65 6e 20 69 6e 20 61  tent.  Then in a
76c0: 20 73 70 65 63 69 61 6c 20 27 70 6f 73 74 2d 63   special 'post-c
76d0: 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09 23 20 31  ommit', the..# 1
76e0: 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e 20  .1.1.1 revision 
76f0: 69 73 20 63 6f 70 69 65 64 20 62 61 63 6b 20 74  is copied back t
7700: 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 66 20  o trunk....# If 
7710: 74 68 65 20 75 73 65 72 20 69 6d 70 6f 72 74 73  the user imports
7720: 20 61 67 61 69 6e 20 74 6f 20 74 68 65 20 73 61   again to the sa
7730: 6d 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68  me vendor branch
7740: 2c 20 74 68 65 6e 20 43 56 53 0a 09 23 20 63 72  , then CVS..# cr
7750: 65 61 74 65 73 20 72 65 76 69 73 69 6f 6e 73 20  eates revisions 
7760: 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 2e 33  1.1.1.2, 1.1.1.3
7770: 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65 20 76 65  , etc. on the ve
7780: 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23 20  ndor branch,..# 
7790: 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75 6e 74 65  *without* counte
77a0: 72 70 61 72 74 73 20 69 6e 20 74 72 75 6e 6b 20  rparts in trunk 
77b0: 28 65 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65  (even though the
77c0: 73 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20  se revisions..# 
77d0: 65 66 66 65 63 74 69 76 65 6c 79 20 70 6c 61 79  effectively play
77e0: 20 74 68 65 20 72 6f 6c 65 20 6f 66 20 74 72 75   the role of tru
77f0: 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29 2e 20 20  nk revisions).  
7800: 53 6f 20 61 66 74 65 72 20 77 65 20 61 64 64 0a  So after we add.
7810: 09 23 20 73 75 63 68 20 72 65 76 69 73 69 6f 6e  .# such revision
7820: 73 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 20  s to the vendor 
7830: 62 72 61 6e 63 68 2c 20 77 65 20 61 6c 73 6f 20  branch, we also 
7840: 63 6f 70 79 20 74 68 65 6d 20 62 61 63 6b 20 74  copy them back t
7850: 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e 20 70 6f  o..# trunk in po
7860: 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 23 20  st-commits....# 
7870: 57 65 20 6d 61 72 6b 20 74 68 65 20 72 65 76 69  We mark the revi
7880: 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 27  sions found in '
7890: 72 65 76 6c 69 73 74 27 20 61 73 20 64 65 66 61  revlist' as defa
78a0: 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65  ult branch..# re
78b0: 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73 6f 2c 20  visions.  Also, 
78c0: 69 66 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69  if the root revi
78d0: 73 69 6f 6e 20 68 61 73 20 61 20 70 72 69 6d 61  sion has a prima
78e0: 72 79 20 63 68 69 6c 64 0a 09 23 20 77 65 20 73  ry child..# we s
78f0: 65 74 20 74 68 61 74 20 72 65 76 69 73 69 6f 6e  et that revision
7900: 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e 20 74 68   to depend on th
7910: 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 6e 6b  e last non-trunk
7920: 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61 6e   default..# bran
7930: 63 68 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20  ch revision and 
7940: 70 6f 73 73 69 62 6c 79 20 61 64 6a 75 73 74 20  possibly adjust 
7950: 69 74 73 20 74 79 70 65 20 61 63 63 6f 72 64 69  its type accordi
7960: 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66 69 72 73  ngly....set firs
7970: 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c 69  t [lindex $revli
7980: 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 69 74  st 0]...log writ
7990: 65 20 36 20 66 69 6c 65 20 22 3c 5b 24 66 69 72  e 6 file "<[$fir
79a0: 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65 78 70 72  st revnr]> [expr
79b0: 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20 3f 20   {$myimported ? 
79c0: 22 69 6d 70 6f 72 74 65 64 22 20 3a 20 22 6e 6f  "imported" : "no
79d0: 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d 2c 20 5b  t imported"}], [
79e0: 24 66 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e  $first operation
79f0: 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66 69 72 73  ], [expr {[$firs
7a00: 74 20 68 61 73 74 65 78 74 5d 20 3f 20 22 68 61  t hastext] ? "ha
7a10: 73 20 74 65 78 74 22 20 3a 20 22 6e 6f 20 74 65  s text" : "no te
7a20: 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 6d 79  xt"}]"...if {$my
7a30: 69 6d 70 6f 72 74 65 64 20 26 26 0a 09 20 20 20  imported &&..   
7a40: 20 5b 24 66 69 72 73 74 20 72 65 76 6e 72 5d 20   [$first revnr] 
7a50: 65 71 20 22 31 2e 31 2e 31 2e 31 22 20 26 26 0a  eq "1.1.1.1" &&.
7a60: 09 20 20 20 20 5b 24 66 69 72 73 74 20 6f 70 65  .    [$first ope
7a70: 72 61 74 69 6f 6e 5d 20 65 71 20 22 63 68 61 6e  ration] eq "chan
7a80: 67 65 22 20 26 26 0a 09 20 20 20 20 21 5b 24 66  ge" &&..    ![$f
7a90: 69 72 73 74 20 68 61 73 74 65 78 74 5d 7d 20 7b  irst hastext]} {
7aa0: 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 31 31  ...    set rev11
7ab0: 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 5d   [$first parent]
7ac0: 20 3b 20 23 20 41 73 73 65 72 74 3a 20 53 68 6f   ; # Assert: Sho
7ad0: 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74 2e 0a 09  uld be myroot...
7ae0: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 20      log write 3 
7af0: 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 69  file "Removing i
7b00: 72 72 65 6c 65 76 61 6e 74 20 72 65 76 69 73 69  rrelevant revisi
7b10: 6f 6e 20 5b 24 72 65 76 31 31 20 72 65 76 6e 72  on [$rev11 revnr
7b20: 5d 22 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f  ]"...    # Cut o
7b30: 75 74 20 74 68 65 20 6f 6c 64 20 6d 79 72 6f 6f  ut the old myroo
7b40: 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 20 20  t revision....  
7b50: 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74    ldelete myroot
7b60: 73 20 24 72 65 76 31 31 20 3b 20 23 20 4e 6f 74  s $rev11 ; # Not
7b70: 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c 6f 6e 67   a root any long
7b80: 65 72 2e 0a 0a 09 20 20 20 20 24 66 69 72 73 74  er....    $first
7b90: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 20 3b   cutfromparent ;
7ba0: 20 23 20 53 65 76 65 72 20 72 65 76 69 73 69 6f   # Sever revisio
7bb0: 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74 20 72 65  n from parent re
7bc0: 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20 69 66 20  vision...    if 
7bd0: 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b 0a  {$stop ne ""} {.
7be0: 09 09 24 73 74 6f 70 20 63 75 74 66 72 6f 6d 70  ..$stop cutfromp
7bf0: 61 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20  arent...lappend 
7c00: 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70 20 3b 20  myroots $stop ; 
7c10: 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61 66 74 65  # New root, afte
7c20: 72 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 0a  r vendor branch.
7c30: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43  .    }...    # C
7c40: 75 74 20 6f 75 74 20 74 68 65 20 76 65 6e 64 6f  ut out the vendo
7c50: 72 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 0a  r branch symbol.
7c60: 0a 09 20 20 20 20 73 65 74 20 76 65 6e 64 6f 72  ..    set vendor
7c70: 20 5b 24 66 69 72 73 74 20 70 61 72 65 6e 74 62   [$first parentb
7c80: 72 61 6e 63 68 5d 0a 09 20 20 20 20 69 6e 74 65  ranch]..    inte
7c90: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 76  grity assert {$v
7ca0: 65 6e 64 6f 72 20 6e 65 20 22 22 7d 20 7b 46 69  endor ne ""} {Fi
7cb0: 72 73 74 20 4e 54 44 42 20 72 65 76 69 73 69 6f  rst NTDB revisio
7cc0: 6e 20 68 61 73 20 6e 6f 20 62 72 61 6e 63 68 7d  n has no branch}
7cd0: 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65 6e 64  ..    if {[$vend
7ce0: 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20 24 72  or parent] eq $r
7cf0: 65 76 31 31 7d 20 7b 0a 09 09 24 72 65 76 31 31  ev11} {...$rev11
7d00: 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20   removebranch   
7d10: 20 20 20 20 20 24 76 65 6e 64 6f 72 0a 09 09 24       $vendor...$
7d20: 72 65 76 31 31 20 72 65 6d 6f 76 65 63 68 69 6c  rev11 removechil
7d30: 64 6f 6e 62 72 61 6e 63 68 20 24 66 69 72 73 74  donbranch $first
7d40: 0a 09 09 24 76 65 6e 64 6f 72 20 63 75 74 62 72  ...$vendor cutbr
7d50: 61 6e 63 68 70 61 72 65 6e 74 20 20 20 20 3b 23  anchparent    ;#
7d60: 20 62 70 20 3d 20 72 65 76 31 31 2c 20 61 62 6f   bp = rev11, abo
7d70: 75 74 20 74 6f 20 62 65 20 67 6f 6e 65 0a 09 09  ut to be gone...
7d80: 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61  $first cutfrompa
7d90: 72 65 6e 74 62 72 61 6e 63 68 20 3b 23 20 70 62  rentbranch ;# pb
7da0: 20 3d 20 76 65 6e 64 6f 72 2c 20 74 6f 20 62 65   = vendor, to be
7db0: 20 61 20 64 65 74 61 63 68 65 64 20 4c 4f 44 0a   a detached LOD.
7dc0: 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74  ..lappend myroot
7dd0: 73 20 24 66 69 72 73 74 0a 09 20 20 20 20 7d 0a  s $first..    }.
7de0: 0a 09 20 20 20 20 23 20 43 68 61 6e 67 65 20 74  ..    # Change t
7df0: 68 65 20 74 79 70 65 20 6f 66 20 66 69 72 73 74  he type of first
7e00: 20 28 74 79 70 69 63 61 6c 6c 79 20 66 72 6f 6d   (typically from
7e10: 20 43 68 61 6e 67 65 20 74 6f 20 41 64 64 29 3a   Change to Add):
7e20: 0a 09 20 20 20 20 24 66 69 72 73 74 20 72 65 74  ..    $first ret
7e30: 79 70 65 20 61 64 64 0a 0a 09 20 20 20 20 23 20  ype add...    # 
7e40: 4d 6f 76 65 20 61 6e 79 20 74 61 67 73 20 61 6e  Move any tags an
7e50: 64 20 62 72 61 6e 63 68 65 73 20 66 72 6f 6d 20  d branches from 
7e60: 74 68 65 20 6f 6c 64 20 74 6f 20 74 68 65 20 6e  the old to the n
7e70: 65 77 20 72 6f 6f 74 2e 0a 09 20 20 20 20 24 72  ew root...    $r
7e80: 65 76 31 31 20 6d 6f 76 65 73 79 6d 62 6f 6c 73  ev11 movesymbols
7e90: 74 6f 20 24 66 69 72 73 74 0a 09 7d 0a 0a 09 23  to $first..}...#
7ea0: 20 4d 61 72 6b 20 61 6c 6c 20 74 68 65 20 73 70   Mark all the sp
7eb0: 65 63 69 61 6c 20 72 65 76 69 73 69 6f 6e 73 20  ecial revisions 
7ec0: 61 73 20 73 75 63 68 0a 09 66 6f 72 65 61 63 68  as such..foreach
7ed0: 20 72 65 76 20 24 72 65 76 6c 69 73 74 20 7b 0a   rev $revlist {.
7ee0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33  .    log write 3
7ef0: 20 66 69 6c 65 20 22 52 65 76 69 73 69 6f 6e 20   file "Revision 
7f00: 6f 6e 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  on default branc
7f10: 68 3a 20 5b 24 72 65 76 20 72 65 76 6e 72 5d 22  h: [$rev revnr]"
7f20: 0a 09 20 20 20 20 24 72 65 76 20 73 65 74 6f 6e  ..    $rev seton
7f30: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 31 0a  defaultbranch 1.
7f40: 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f 70 20 6e  .}...if {$stop n
7f50: 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 52  e ""} {..    # R
7f60: 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c 6f 67 69  evision 1.2 logi
7f70: 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68  cally follows th
7f80: 65 20 69 6d 70 6f 72 74 65 64 20 72 65 76 69 73  e imported revis
7f90: 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20 6e 6f 74  ions,..    # not
7fa0: 20 31 2e 31 2e 20 20 41 63 63 6f 72 64 69 6e 67   1.1.  According
7fb0: 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69 74 20 74  ly, connect it t
7fc0: 6f 20 74 68 65 20 6c 61 73 74 20 4e 54 44 42 52  o the last NTDBR
7fd0: 20 61 6e 64 0a 09 20 20 20 20 23 20 70 6f 73 73   and..    # poss
7fe0: 69 62 6c 79 20 63 68 61 6e 67 65 20 69 74 73 20  ibly change its 
7ff0: 74 79 70 65 2e 0a 0a 09 20 20 20 20 73 65 74 20  type....    set 
8000: 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65  last [lindex $re
8010: 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20 20 20 20  vlist end]..    
8020: 24 73 74 6f 70 20 73 65 74 64 65 66 61 75 6c 74  $stop setdefault
8030: 62 72 61 6e 63 68 70 61 72 65 6e 74 20 24 6c 61  branchparent $la
8040: 73 74 20 3b 20 23 20 52 65 74 79 70 65 73 20 74  st ; # Retypes t
8050: 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f 6f 2e  he revision too.
8060: 0a 09 20 20 20 20 24 6c 61 73 74 20 73 65 74 64  ..    $last setd
8070: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c  efaultbranchchil
8080: 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09 72 65 74  d  $stop..}..ret
8090: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
80a0: 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f 44 73 20  ethod CheckLODs 
80b0: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 5f  {} {..foreach {_
80c0: 20 62 72 61 6e 63 68 7d 20 20 5b 61 72 72 61 79   branch}  [array
80d0: 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d   get mybranches]
80e0: 20 7b 20 24 62 72 61 6e 63 68 20 63 68 65 63 6b   { $branch check
80f0: 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b  lod }..foreach {
8100: 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61  _ taglist} [arra
8110: 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a  y get mytags] {.
8120: 09 20 20 20 20 66 6f 72 65 61 63 68 20 74 61 67  .    foreach tag
8130: 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74 61 67   $taglist { $tag
8140: 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d 0a 09   checklod }..}..
8150: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
8160: 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49    method RemoveI
8170: 72 72 65 6c 65 76 61 6e 74 44 65 6c 65 74 69 6f  rrelevantDeletio
8180: 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20  ns {} {..# From 
8190: 63 76 73 32 73 76 6e 3a 20 49 66 20 61 20 66 69  cvs2svn: If a fi
81a0: 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e 20 61  le is added on a
81b0: 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20 61 20   branch, then a 
81c0: 74 72 75 6e 6b 0a 09 23 20 72 65 76 69 73 69 6f  trunk..# revisio
81d0: 6e 20 69 73 20 61 64 64 65 64 20 61 74 20 74 68  n is added at th
81e0: 65 20 73 61 6d 65 20 74 69 6d 65 20 69 6e 20 74  e same time in t
81f0: 68 65 20 27 44 65 61 64 27 20 73 74 61 74 65 2e  he 'Dead' state.
8200: 0a 09 23 20 54 68 69 73 20 72 65 76 69 73 69 6f  ..# This revisio
8210: 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20 61 6e 79  n doesn't do any
8220: 74 68 69 6e 67 20 75 73 65 66 75 6c 2c 20 73 6f  thing useful, so
8230: 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a 09 66 6f   delete it....fo
8240: 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f  reach root $myro
8250: 6f 74 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b  ots {..    if {[
8260: 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 5d 7d  $root isneeded]}
8270: 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 6c   continue..    l
8280: 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c 65 20  og write 2 file 
8290: 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 63 65  "Removing unnece
82a0: 73 73 61 72 79 20 64 65 61 64 20 72 65 76 69 73  ssary dead revis
82b0: 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72  ion [$root revnr
82c0: 5d 22 0a 0a 09 20 20 20 20 23 20 52 65 6d 6f 76  ]"...    # Remov
82d0: 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61 6b 65 20  e as root, make 
82e0: 69 74 73 20 63 68 69 6c 64 20 6e 65 77 20 72 6f  its child new ro
82f0: 6f 74 20 61 66 74 65 72 0a 09 20 20 20 20 23 20  ot after..    # 
8300: 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67 20 69 74  disconnecting it
8310: 20 66 72 6f 6d 20 74 68 65 20 72 65 76 69 73 69   from the revisi
8320: 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67 20 61 77  on just going aw
8330: 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74  ay....    ldelet
8340: 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a  e myroots $root.
8350: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20  .    if {[$root 
8360: 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 73  haschild]} {...s
8370: 65 74 20 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20  et child [$root 
8380: 63 68 69 6c 64 5d 0a 09 09 24 63 68 69 6c 64 20  child]...$child 
8390: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09  cutfromparent...
83a0: 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20  lappend myroots 
83b0: 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a 0a 09  $child..    }...
83c0: 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 74 68      # Cut out th
83d0: 65 20 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e  e branches spawn
83e0: 65 64 20 62 79 20 74 68 65 20 72 65 76 69 73 69  ed by the revisi
83f0: 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20 20 23 20  on to be..    # 
8400: 64 65 6c 65 74 65 64 2e 20 49 66 20 74 68 65 20  deleted. If the 
8410: 62 72 61 6e 63 68 20 68 61 73 20 72 65 76 69 73  branch has revis
8420: 69 6f 6e 73 20 74 68 65 79 20 73 68 6f 75 6c 64  ions they should
8430: 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20 23 20   already..    # 
8440: 75 73 65 20 6f 70 65 72 61 74 69 6f 6e 20 27 61  use operation 'a
8450: 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20 74 6f 20  dd', no need to 
8460: 63 68 61 6e 67 65 20 74 68 61 74 2e 20 54 68 65  change that. The
8470: 20 66 69 72 73 74 0a 09 20 20 20 20 23 20 72 65   first..    # re
8480: 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63 68 20 62  vision on each b
8490: 72 61 6e 63 68 20 62 65 63 6f 6d 65 73 20 61 20  ranch becomes a 
84a0: 6e 65 77 20 61 6e 64 20 64 69 73 63 6f 6e 6e 65  new and disconne
84b0: 63 74 65 64 0a 09 20 20 20 20 23 20 72 6f 6f 74  cted..    # root
84c0: 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20  ....    foreach 
84d0: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72  branch [$root br
84e0: 61 6e 63 68 65 73 5d 20 7b 0a 09 09 24 62 72 61  anches] {...$bra
84f0: 6e 63 68 20 63 75 74 62 72 61 6e 63 68 70 61 72  nch cutbranchpar
8500: 65 6e 74 0a 09 09 69 66 20 7b 21 5b 24 62 72 61  ent...if {![$bra
8510: 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63  nch haschild]} c
8520: 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74 20 66 69  ontinue...set fi
8530: 72 73 74 20 5b 24 62 72 61 6e 63 68 20 63 68 69  rst [$branch chi
8540: 6c 64 5d 0a 09 09 24 66 69 72 73 74 20 63 75 74  ld]...$first cut
8550: 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70  fromparent...lap
8560: 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69  pend myroots $fi
8570: 72 73 74 0a 09 20 20 20 20 7d 0a 09 20 20 20 20  rst..    }..    
8580: 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62  $root removeallb
8590: 72 61 6e 63 68 65 73 0a 0a 09 20 20 20 20 23 20  ranches...    # 
85a0: 54 61 67 67 69 6e 67 20 61 20 64 65 61 64 20 72  Tagging a dead r
85b0: 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20  evision doesn't 
85c0: 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20 73 6f 20  do anything, so 
85d0: 72 65 6d 6f 76 65 0a 09 20 20 20 20 23 20 61 6e  remove..    # an
85e0: 79 20 74 61 67 73 20 74 68 61 74 20 77 65 72 65  y tags that were
85f0: 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 20 20   set on it....  
8600: 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c    $root removeal
8610: 6c 74 61 67 73 0a 0a 09 20 20 20 20 23 20 54 68  ltags...    # Th
8620: 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68 61 70 70  is can only happ
8630: 65 6e 20 6f 6e 63 65 20 70 65 72 20 66 69 6c 65  en once per file
8640: 2c 20 61 6e 64 20 77 65 20 6d 69 67 68 74 20 68  , and we might h
8650: 61 76 65 0a 09 20 20 20 20 23 20 6a 75 73 74 20  ave..    # just 
8660: 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f 74 73 2c  changed myroots,
8670: 20 73 6f 20 65 6e 64 20 74 68 65 20 6c 6f 6f 70   so end the loop
8680: 0a 09 20 20 20 20 62 72 65 61 6b 0a 09 7d 0a 09  ..    break..}..
8690: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
86a0: 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49    method RemoveI
86b0: 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65 6c 65  nitialBranchDele
86c0: 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72  tions {} {..# Fr
86d0: 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74  om cvs2svn: If t
86e0: 68 65 20 66 69 72 73 74 20 72 65 76 69 73 69 6f  he first revisio
86f0: 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 69 73  n on a branch is
8700: 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65 73 73 61   an..# unnecessa
8710: 72 79 20 64 65 6c 65 74 65 2c 20 72 65 6d 6f 76  ry delete, remov
8720: 65 20 69 74 2e 0a 09 23 0a 09 23 20 49 66 20 61  e it...#..# If a
8730: 20 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f   file is added o
8740: 6e 20 61 20 62 72 61 6e 63 68 20 28 77 68 65 74  n a branch (whet
8750: 68 65 72 20 6f 72 20 6e 6f 74 20 69 74 20 61 6c  her or not it al
8760: 72 65 61 64 79 0a 09 23 20 65 78 69 73 74 65 64  ready..# existed
8770: 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74 68 65 6e   on trunk), then
8780: 20 6e 65 77 20 76 65 72 73 69 6f 6e 73 20 6f 66   new versions of
8790: 20 43 56 53 20 61 64 64 20 61 20 66 69 72 73 74   CVS add a first
87a0: 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73  ..# branch revis
87b0: 69 6f 6e 20 69 6e 20 74 68 65 20 27 64 65 61 64  ion in the 'dead
87c0: 27 20 73 74 61 74 65 20 28 74 6f 20 69 6e 64 69  ' state (to indi
87d0: 63 61 74 65 20 74 68 61 74 20 74 68 65 0a 09 23  cate that the..#
87e0: 20 66 69 6c 65 20 64 69 64 20 6e 6f 74 20 65 78   file did not ex
87f0: 69 73 74 20 6f 6e 20 74 68 65 20 62 72 61 6e 63  ist on the branc
8800: 68 20 77 68 65 6e 20 74 68 65 20 62 72 61 6e 63  h when the branc
8810: 68 20 77 61 73 0a 09 23 20 63 72 65 61 74 65 64  h was..# created
8820: 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68  ) followed by th
8830: 65 20 73 65 63 6f 6e 64 20 62 72 61 6e 63 68 20  e second branch 
8840: 72 65 76 69 73 69 6f 6e 2c 20 77 68 69 63 68 20  revision, which 
8850: 69 73 20 61 6e 0a 09 23 20 61 64 64 2e 20 20 57  is an..# add.  W
8860: 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e 74 65 72  hen we encounter
8870: 20 74 68 69 73 20 73 69 74 75 61 74 69 6f 6e 2c   this situation,
8880: 20 77 65 20 73 65 76 65 72 20 74 68 65 20 62 72   we sever the br
8890: 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20 74 72 75  anch..# from tru
88a0: 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65 20 74 68  nk and delete th
88b0: 65 20 66 69 72 73 74 20 62 72 61 6e 63 68 20 72  e first branch r
88c0: 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 74 20  evision....# At 
88d0: 74 68 69 73 20 70 6f 69 6e 74 20 77 65 20 6d 61  this point we ma
88e0: 79 20 68 61 76 65 20 61 6c 72 65 61 64 79 20 6d  y have already m
88f0: 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 20 69 6e  ultiple roots in
8900: 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20 77 65 20   myroots,..# we 
8910: 68 61 76 65 20 74 6f 20 70 72 6f 63 65 73 73 20  have to process 
8920: 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72 65  them all....fore
8930: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20  ach root [$self 
8940: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
8950: 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b  nt] {..    if {[
8960: 24 72 6f 6f 74 20 69 73 6e 65 65 64 65 64 62 72  $root isneededbr
8970: 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e  anchdel]} contin
8980: 75 65 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  ue..    log writ
8990: 65 20 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69  e 2 file "Removi
89a0: 6e 67 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69  ng unnecessary i
89b0: 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20 64 65  nitial branch de
89c0: 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72 65 76 6e  lete [$root revn
89d0: 72 5d 22 0a 0a 09 20 20 20 20 73 65 74 20 62 72  r]"...    set br
89e0: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 65  anch [$root pare
89f0: 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 73  ntbranch]..    s
8a00: 65 74 20 70 61 72 65 6e 74 20 5b 24 72 6f 6f 74  et parent [$root
8a10: 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 73 65   parent]..    se
8a20: 74 20 63 68 69 6c 64 20 20 5b 24 72 6f 6f 74 20  t child  [$root 
8a30: 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 65  child]...    lde
8a40: 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f  lete myroots $ro
8a50: 6f 74 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20  ot..    lappend 
8a60: 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 0a  myroots $child..
8a70: 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 74  .    $branch cut
8a80: 62 72 61 6e 63 68 70 61 72 65 6e 74 0a 09 20 20  branchparent..  
8a90: 20 20 24 62 72 61 6e 63 68 20 63 75 74 63 68 69    $branch cutchi
8aa0: 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20 20  ld..    $child  
8ab0: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 0a 09  cutfromparent...
8ac0: 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63      $branch setc
8ad0: 68 69 6c 64 20 20 20 20 20 20 20 20 24 63 68 69  hild        $chi
8ae0: 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20 20  ld..    $child  
8af0: 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63 68 20  setparentbranch 
8b00: 24 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 24 70  $branch...    $p
8b10: 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 6e  arent removebran
8b20: 63 68 20 20 20 20 20 20 20 20 24 62 72 61 6e 63  ch        $branc
8b30: 68 0a 09 20 20 20 20 24 70 61 72 65 6e 74 20 72  h..    $parent r
8b40: 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e  emovechildonbran
8b50: 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74  ch $root..}..ret
8b60: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
8b70: 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66 44 65 76  ethod LinesOfDev
8b80: 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23  elopment {} {..#
8b90: 20 44 65 74 65 72 6d 69 6e 65 20 61 6c 6c 20 6c   Determine all l
8ba0: 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d  ines of developm
8bb0: 65 6e 74 20 66 6f 72 20 74 68 65 20 66 69 6c 65  ent for the file
8bc0: 2e 20 54 68 69 73 20 61 72 65 0a 09 23 20 74 68  . This are..# th
8bd0: 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c 20 61  e known roots, a
8be0: 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f 66 20 61  nd the root of a
8bf0: 6c 6c 20 62 72 61 6e 63 68 65 73 20 66 6f 75 6e  ll branches foun
8c00: 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c 69 6e 65  d on the..# line
8c10: 20 6f 66 20 70 72 69 6d 61 72 79 20 63 68 69 6c   of primary chil
8c20: 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f 64 72  dren....set lodr
8c30: 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65 61 63 68  oots {}..foreach
8c40: 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 7b   root $myroots {
8c50: 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64 64 42  ..    $self AddB
8c60: 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65  ranchedLinesOfDe
8c70: 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f  velopment lodroo
8c80: 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 6c 61  ts $root..    la
8c90: 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 24  ppend lodroots $
8ca0: 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 20  root..}..return 
8cb0: 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20 20 7d 0a  $lodroots.    }.
8cc0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 42  .    method AddB
8cd0: 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65  ranchedLinesOfDe
8ce0: 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20 72 6f  velopment {lv ro
8cf0: 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 24  ot} {..upvar 1 $
8d00: 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09 77 68 69  lv lodroots..whi
8d10: 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d  le {$root ne ""}
8d20: 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20   {..    foreach 
8d30: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72  branch [$root br
8d40: 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69 66 20 7b  anches] {...if {
8d50: 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63 68 69  ![$branch haschi
8d60: 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09  ld]} continue...
8d70: 73 65 74 20 63 68 69 6c 64 20 5b 24 62 72 61 6e  set child [$bran
8d80: 63 68 20 63 68 69 6c 64 5d 0a 09 09 23 20 52 65  ch child]...# Re
8d90: 63 75 72 73 65 20 69 6e 74 6f 20 74 68 65 20 62  curse into the b
8da0: 72 61 6e 63 68 20 66 6f 72 20 64 65 65 70 65 72  ranch for deeper
8db0: 20 62 72 61 6e 63 68 65 73 2e 0a 09 09 24 73 65   branches....$se
8dc0: 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69  lf AddBranchedLi
8dd0: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74  nesOfDevelopment
8de0: 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 6c 64   lodroots $child
8df0: 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f  ...lappend lodro
8e00: 6f 74 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20  ots $child..    
8e10: 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74 20  }..    set root 
8e20: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d  [$root child]..}
8e30: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
8e40: 20 20 20 20 6d 65 74 68 6f 64 20 45 78 63 6c 75      method Exclu
8e50: 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 6d  deNonTrunkInform
8e60: 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 52 65  ation {} {..# Re
8e70: 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74 72 75  move all non-tru
8e80: 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20 72 65 76  nk branches, rev
8e90: 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74 61 67 73  isions, and tags
8ea0: 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65 65 70 20  . We do..# keep 
8eb0: 74 68 65 20 74 61 67 73 20 77 68 69 63 68 20 61  the tags which a
8ec0: 72 65 20 6f 6e 20 74 68 65 20 74 72 75 6e 6b 2e  re on the trunk.
8ed0: 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f 6f 74 20  ...set ntdbroot 
8ee0: 22 22 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74  ""..foreach root
8ef0: 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44   [$self LinesOfD
8f00: 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20  evelopment] {.. 
8f10: 20 20 20 23 20 4e 6f 74 65 3a 20 48 65 72 65 20     # Note: Here 
8f20: 74 68 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65  the order of the
8f30: 20 72 6f 6f 74 73 20 69 73 20 69 6d 70 6f 72 74   roots is import
8f40: 61 6e 74 2c 0a 09 20 20 20 20 23 20 69 2e 65 2e  ant,..    # i.e.
8f50: 20 74 68 61 74 20 77 65 20 67 65 74 20 74 68 65   that we get the
8f60: 6d 20 69 6e 20 64 65 70 74 68 20 66 69 72 73 74  m in depth first
8f70: 20 6f 72 64 65 72 2e 20 54 68 69 73 20 65 6e 73   order. This ens
8f80: 75 72 65 73 0a 09 20 20 20 20 23 20 74 68 61 74  ures..    # that
8f90: 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f 66 20   the removal of 
8fa0: 61 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73  a branch happens
8fb0: 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65 0a   only after the.
8fc0: 09 20 20 20 20 23 20 62 72 61 6e 63 68 65 73 20  .    # branches 
8fd0: 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69 74 20  spawned from it 
8fe0: 77 65 72 65 20 72 65 6d 6f 76 65 64 2e 20 4f 74  were removed. Ot
8ff0: 68 65 72 77 69 73 65 20 74 68 65 0a 09 20 20 20  herwise the..   
9000: 20 23 20 73 79 73 74 65 6d 20 6d 69 67 68 74 20   # system might 
9010: 74 72 79 20 74 6f 20 61 63 63 65 73 73 20 64 65  try to access de
9020: 6c 65 74 65 64 20 6f 62 6a 65 63 74 73 2e 0a 0a  leted objects...
9030: 09 20 20 20 20 23 20 44 6f 20 6e 6f 74 20 65 78  .    # Do not ex
9040: 63 6c 75 64 65 20 74 68 65 20 74 72 75 6e 6b 2e  clude the trunk.
9050: 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24 72 6f 6f  ..    if {[[$roo
9060: 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e 6b 5d 7d  t lod] istrunk]}
9070: 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 24   continue..    $
9080: 73 65 6c 66 20 45 78 63 6c 75 64 65 42 72 61 6e  self ExcludeBran
9090: 63 68 20 24 72 6f 6f 74 20 6e 74 64 62 72 6f 6f  ch $root ntdbroo
90a0: 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e 74 64 62  t..}...if {$ntdb
90b0: 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20  root ne ""} {.. 
90c0: 20 20 20 24 73 65 6c 66 20 47 72 61 66 74 4e 54     $self GraftNT
90d0: 44 42 32 54 72 75 6e 6b 20 24 6e 74 64 62 72 6f  DB2Trunk $ntdbro
90e0: 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  ot..}..return.  
90f0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
9100: 45 78 63 6c 75 64 65 42 72 61 6e 63 68 20 7b 72  ExcludeBranch {r
9110: 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20 45 78 63  oot nv} {..# Exc
9120: 6c 75 64 65 20 74 68 65 20 62 72 61 6e 63 68 2f  lude the branch/
9130: 6c 6f 64 20 73 74 61 72 74 69 6e 67 20 61 74 20  lod starting at 
9140: 72 6f 6f 74 2c 20 61 20 72 65 76 69 73 69 6f 6e  root, a revision
9150: 2e 0a 09 23 0a 09 23 20 49 66 20 74 68 65 20 4c  ...#..# If the L
9160: 4f 44 20 73 74 61 72 74 73 20 77 69 74 68 20 6e  OD starts with n
9170: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
9180: 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e   branch revision
9190: 73 2c 0a 09 23 20 77 65 20 6c 65 61 76 65 20 74  s,..# we leave t
91a0: 68 65 6d 20 69 6e 20 70 6c 61 63 65 20 61 6e 64  hem in place and
91b0: 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74 65 20 74   do not delete t
91c0: 68 65 20 62 72 61 6e 63 68 2e 20 49 6e 20 74 68  he branch. In th
91d0: 61 74 0a 09 23 20 63 61 73 65 20 74 68 65 20 63  at..# case the c
91e0: 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74 68 65 20  ommand sets the 
91f0: 76 61 72 69 61 62 6c 65 20 69 6e 20 4e 56 20 73  variable in NV s
9200: 6f 20 74 68 61 74 20 77 65 20 63 61 6e 0a 09 23  o that we can..#
9210: 20 6c 61 74 65 72 20 72 65 77 6f 72 6b 20 74 68   later rework th
9220: 65 73 65 20 72 65 76 69 73 6f 6e 73 20 74 6f 20  ese revisons to 
9230: 62 65 20 70 75 72 65 6c 79 20 74 72 75 6e 6b 2e  be purely trunk.
9240: 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74 20 69 73  ...if {[$root is
9250: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d  ondefaultbranch]
9260: 7d 20 7b 0a 09 20 20 20 20 23 20 48 61 6e 64 6c  } {..    # Handl
9270: 69 6e 67 20 61 20 4e 54 44 42 2e 20 54 68 69 73  ing a NTDB. This
9280: 20 62 72 61 6e 63 68 20 6d 61 79 20 63 6f 6e 73   branch may cons
9290: 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79 20 6f 66  ists not only of
92a0: 0a 09 20 20 20 20 23 20 4e 54 44 42 20 72 65 76  ..    # NTDB rev
92b0: 69 73 69 6f 6e 73 2c 20 62 75 74 20 61 6c 73 6f  isions, but also
92c0: 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42 2e 20   some non-NTDB. 
92d0: 54 68 65 20 6c 61 74 74 65 72 20 61 72 65 0a 09  The latter are..
92e0: 20 20 20 20 23 20 74 72 75 6c 79 20 6f 6e 20 61      # truly on a
92f0: 20 62 72 61 6e 63 68 20 61 6e 64 20 68 61 76 65   branch and have
9300: 20 74 6f 20 62 65 20 65 78 63 6c 75 64 65 64 2e   to be excluded.
9310: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 09   The following..
9320: 20 20 20 20 23 20 6c 6f 6f 70 20 64 65 74 65 72      # loop deter
9330: 6d 69 6e 65 73 20 69 66 20 74 68 65 72 65 20 61  mines if there a
9340: 72 65 20 73 75 63 68 20 72 65 76 69 73 69 6f 6e  re such revision
9350: 73 2e 0a 0a 09 20 20 20 20 75 70 76 61 72 20 31  s....    upvar 1
9360: 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74 0a 09 20   $nv ntdbroot.. 
9370: 20 20 20 73 65 74 20 6e 74 64 62 72 6f 6f 74 20     set ntdbroot 
9380: 24 72 6f 6f 74 0a 09 20 20 20 20 24 72 6f 6f 74  $root..    $root
9390: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 62 72   cutfromparentbr
93a0: 61 6e 63 68 0a 0a 09 20 20 20 20 73 65 74 20 72  anch...    set r
93b0: 65 76 20 24 72 6f 6f 74 0a 09 20 20 20 20 77 68  ev $root..    wh
93c0: 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d  ile {$rev ne ""}
93d0: 20 7b 0a 09 09 24 72 65 76 20 72 65 6d 6f 76 65   {...$rev remove
93e0: 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09 23 20  allbranches...# 
93f0: 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09  See note [x]....
9400: 09 69 66 20 7b 5b 24 72 65 76 20 69 73 6f 6e 64  .if {[$rev isond
9410: 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b  efaultbranch]} {
9420: 0a 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b  ...    set rev [
9430: 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 20  $rev child]...} 
9440: 65 6c 73 65 20 7b 0a 09 09 20 20 20 20 62 72 65  else {...    bre
9450: 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09  ak...}..    }...
9460: 20 20 20 20 23 20 72 65 76 20 6e 6f 77 20 63 6f      # rev now co
9470: 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73 74  ntains the first
9480: 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76 69 73 69   non-NTDB revisi
9490: 6f 6e 20 61 66 74 65 72 20 74 68 65 0a 09 20 20  on after the..  
94a0: 20 20 23 20 4e 54 44 42 2c 20 6f 72 20 69 73 20    # NTDB, or is 
94b0: 65 6d 70 74 79 20 69 66 20 74 68 65 72 65 20 69  empty if there i
94c0: 73 20 6e 6f 20 73 75 63 68 2e 20 49 66 20 77 65  s no such. If we
94d0: 20 68 61 76 65 20 73 6f 6d 65 0a 09 20 20 20 20   have some..    
94e0: 23 20 74 68 65 79 20 68 61 76 65 20 74 6f 20 72  # they have to r
94f0: 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20 20 69 66  emoved....    if
9500: 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 20 7b   {$rev ne ""}  {
9510: 0a 09 09 73 65 74 20 6c 61 73 74 6e 74 64 62 20  ...set lastntdb 
9520: 5b 24 72 65 76 20 70 61 72 65 6e 74 5d 0a 09 09  [$rev parent]...
9530: 24 6c 61 73 74 6e 74 64 62 20 63 75 74 66 72 6f  $lastntdb cutfro
9540: 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c 65 20 7b  mchild...while {
9550: 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09  $rev ne ""} {...
9560: 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76 65 61      $rev removea
9570: 6c 6c 74 61 67 73 0a 09 09 20 20 20 20 24 72 65  lltags...    $re
9580: 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63  v removeallbranc
9590: 68 65 73 0a 09 09 20 20 20 20 23 20 4e 6f 74 65  hes...    # Note
95a0: 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20 73 74 69   [x]: We may sti
95b0: 6c 6c 20 68 61 76 65 20 68 61 64 20 62 72 61 6e  ll have had bran
95c0: 63 68 65 73 20 6f 6e 20 74 68 65 0a 09 09 20 20  ches on the...  
95d0: 20 20 23 20 72 65 76 69 73 69 6f 6e 2e 20 42 72    # revision. Br
95e0: 61 6e 63 68 65 73 20 77 69 74 68 6f 75 74 20 72  anches without r
95f0: 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d 69 74 74  evisions committ
9600: 65 64 0a 09 09 20 20 20 20 23 20 6f 6e 20 74 68  ed...    # on th
9610: 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f 77 20 75  em do not show u
9620: 70 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  p in the list of
9630: 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09 20 20 20   roots aka...   
9640: 20 23 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65   # lines of deve
9650: 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20 20 20 73  lopment....    s
9660: 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69  et rev [$rev chi
9670: 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09  ld]...}..    }..
9680: 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09      return..}...
9690: 23 20 4e 6f 20 4e 54 44 42 20 73 74 75 66 66 20  # No NTDB stuff 
96a0: 74 6f 20 64 65 61 6c 20 77 69 74 68 2e 20 46 69  to deal with. Fi
96b0: 72 73 74 20 64 65 6c 65 74 65 20 74 68 65 20 62  rst delete the b
96c0: 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a 09 23 20  ranch object..# 
96d0: 69 74 73 65 6c 66 2c 20 61 66 74 65 72 20 63 75  itself, after cu
96e0: 74 74 69 6e 67 20 61 6c 6c 20 74 68 65 20 76 61  tting all the va
96f0: 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74 69 6f 6e  rious connection
9700: 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e 63 68 20  s....set branch 
9710: 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61  [$root parentbra
9720: 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72 61 6e 63  nch]..if {$branc
9730: 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20  h ne ""} {..    
9740: 73 65 74 20 62 72 61 6e 63 68 70 61 72 65 6e 74  set branchparent
9750: 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74   [$branch parent
9760: 5d 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70 61  ]..    $branchpa
9770: 72 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 6e 63  rent removebranc
9780: 68 20 20 20 20 20 20 20 20 24 62 72 61 6e 63 68  h        $branch
9790: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 70 61 72  ..    $branchpar
97a0: 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f  ent removechildo
97b0: 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d  nbranch $root..}
97c0: 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73  ...# The root is
97d0: 20 6e 6f 20 73 75 63 68 20 61 6e 79 20 6c 6f 6e   no such any lon
97e0: 67 65 72 20 65 69 74 68 65 72 2e 0a 09 6c 64 65  ger either...lde
97f0: 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f  lete myroots $ro
9800: 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f 20 74 68  ot...# Now go th
9810: 72 6f 75 67 68 20 74 68 65 20 6c 69 6e 65 20 61  rough the line a
9820: 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c 20 69 74  nd remove all it
9830: 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 77  s revisions....w
9840: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22  hile {$root ne "
9850: 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f 74 20  "} {..    $root 
9860: 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09 20  removealltags.. 
9870: 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61     $root removea
9880: 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20  llbranches..    
9890: 23 20 4e 6f 74 65 3a 20 53 65 65 20 74 68 65 20  # Note: See the 
98a0: 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20 20 20 20  note [x]....    
98b0: 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20  # From cvs2svn: 
98c0: 49 66 20 74 68 69 73 20 69 73 20 74 68 65 20 6c  If this is the l
98d0: 61 73 74 20 64 65 66 61 75 6c 74 20 72 65 76 69  ast default revi
98e0: 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20 20 20 23  sion on a..    #
98f0: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
9900: 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c 6c 6f 77  lt branch follow
9910: 65 64 20 62 79 20 61 20 31 2e 32 20 72 65 76 69  ed by a 1.2 revi
9920: 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 74 68 65  sion,..    # the
9930: 6e 20 74 68 65 20 31 2e 32 20 72 65 76 69 73 69  n the 1.2 revisi
9940: 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68  on depends on th
9950: 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d 45 3a 20  is one.  FIXME: 
9960: 49 74 20 69 73 0a 09 20 20 20 20 23 20 71 75 65  It is..    # que
9970: 73 74 69 6f 6e 61 62 6c 65 20 77 68 65 74 68 65  stionable whethe
9980: 72 20 74 68 69 73 20 68 61 6e 64 6c 69 6e 67 20  r this handling 
9990: 69 73 20 63 6f 72 72 65 63 74 2c 20 73 69 6e 63  is correct, sinc
99a0: 65 20 74 68 65 0a 09 20 20 20 20 23 20 6e 6f 6e  e the..    # non
99b0: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62  -trunk default b
99c0: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 20  ranch revisions 
99d0: 61 66 66 65 63 74 20 74 72 75 6e 6b 20 61 6e 64  affect trunk and
99e0: 0a 09 20 20 20 20 23 20 73 68 6f 75 6c 64 20 74  ..    # should t
99f0: 68 65 72 65 66 6f 72 65 20 6e 6f 74 20 6a 75 73  herefore not jus
9a00: 74 20 62 65 20 64 69 73 63 61 72 64 65 64 20 65  t be discarded e
9a10: 76 65 6e 20 69 66 0a 09 20 20 20 20 23 20 2d 2d  ven if..    # --
9a20: 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09 20 20  trunk-only....  
9a30: 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73    if {[$root has
9a40: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69  defaultbranchchi
9a50: 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 74 64  ld]} {...set ntd
9a60: 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20 64 65  bchild [$root de
9a70: 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64  faultbranchchild
9a80: 5d 0a 09 09 69 6e 74 65 67 72 69 74 79 20 61 73  ]...integrity as
9a90: 73 65 72 74 20 7b 0a 09 09 20 20 20 20 5b 24 6e  sert {...    [$n
9aa0: 74 64 62 63 68 69 6c 64 20 64 65 66 61 75 6c 74  tdbchild default
9ab0: 62 72 61 6e 63 68 70 61 72 65 6e 74 5d 20 65 71  branchparent] eq
9ac0: 20 24 6e 74 64 62 63 68 69 6c 64 0a 09 09 7d 20   $ntdbchild...} 
9ad0: 7b 6e 74 64 62 20 2d 20 74 72 75 6e 6b 20 6c 69  {ntdb - trunk li
9ae0: 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 7d 0a 09 09  nkage broken}...
9af0: 24 6e 74 64 62 63 68 69 6c 64 20 63 75 74 64 65  $ntdbchild cutde
9b00: 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e  faultbranchparen
9b10: 74 0a 09 09 69 66 20 7b 5b 24 6e 74 64 62 63 68  t...if {[$ntdbch
9b20: 69 6c 64 20 68 61 73 70 61 72 65 6e 74 5d 7d 20  ild hasparent]} 
9b30: 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20  {...    lappend 
9b40: 6d 79 72 6f 6f 74 73 20 5b 24 6e 74 64 62 63 68  myroots [$ntdbch
9b50: 69 6c 64 20 70 61 72 65 6e 74 5d 0a 09 09 7d 0a  ild parent]...}.
9b60: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73 65 74  .    }...    set
9b70: 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69   root [$root chi
9b80: 6c 64 5d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a  ld]..}...return.
9b90: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
9ba0: 64 20 47 72 61 66 74 4e 54 44 42 32 54 72 75 6e  d GraftNTDB2Trun
9bb0: 6b 20 7b 72 6f 6f 74 7d 20 7b 0a 09 23 20 57 65  k {root} {..# We
9bc0: 20 63 61 6e 20 6e 6f 77 20 67 72 61 66 74 20 74   can now graft t
9bd0: 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66  he non-trunk def
9be0: 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69  ault branch revi
9bf0: 73 69 6f 6e 73 20 74 6f 0a 09 23 20 74 72 75 6e  sions to..# trun
9c00: 6b 2e 20 54 68 65 79 20 73 68 6f 75 6c 64 20 61  k. They should a
9c10: 6c 72 65 61 64 79 20 62 65 20 61 6c 6f 6e 65 20  lready be alone 
9c20: 6f 6e 20 61 20 43 56 53 42 72 61 6e 63 68 2d 6c  on a CVSBranch-l
9c30: 65 73 73 0a 09 23 20 62 72 61 6e 63 68 2e 0a 0a  ess..# branch...
9c40: 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72  .integrity asser
9c50: 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61 73 70 61  t {![$root haspa
9c60: 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 4e 54  rentbranch]} {NT
9c70: 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 61  DB root still ha
9c80: 73 20 69 74 73 20 62 72 61 6e 63 68 20 73 79 6d  s its branch sym
9c90: 62 6f 6c 7d 0a 09 69 6e 74 65 67 72 69 74 79 20  bol}..integrity 
9ca0: 61 73 73 65 72 74 20 7b 21 5b 24 72 6f 6f 74 20  assert {![$root 
9cb0: 68 61 73 62 72 61 6e 63 68 65 73 5d 7d 20 20 20  hasbranches]}   
9cc0: 20 20 7b 4e 54 44 42 20 72 6f 6f 74 20 73 74 69    {NTDB root sti
9cd0: 6c 6c 20 68 61 73 20 73 70 61 77 6e 65 64 20 62  ll has spawned b
9ce0: 72 61 6e 63 68 65 73 7d 0a 0a 09 73 65 74 20 6c  ranches}...set l
9cf0: 61 73 74 20 24 72 6f 6f 74 0a 09 77 68 69 6c 65  ast $root..while
9d00: 20 7b 5b 24 6c 61 73 74 20 68 61 73 63 68 69 6c   {[$last haschil
9d10: 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74 20 5b 24  d]} {set last [$
9d20: 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a 0a 09 69  last child]}...i
9d30: 66 20 7b 5b 24 6c 61 73 74 20 68 61 73 64 65 66  f {[$last hasdef
9d40: 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d  aultbranchchild]
9d50: 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65  } {...    set re
9d60: 76 31 32 20 5b 24 6c 61 73 74 20 64 65 66 61 75  v12 [$last defau
9d70: 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 0a 09  ltbranchchild]..
9d80: 20 20 20 20 24 72 65 76 31 32 20 63 75 74 64 65      $rev12 cutde
9d90: 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e  faultbranchparen
9da0: 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20 63 75  t..    $last  cu
9db0: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68  tdefaultbranchch
9dc0: 69 6c 64 0a 0a 09 20 20 20 20 24 72 65 76 31 32  ild...    $rev12
9dd0: 20 63 68 61 6e 67 65 70 61 72 65 6e 74 20 24 6c   changeparent $l
9de0: 61 73 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20  ast..    $last  
9df0: 63 68 61 6e 67 65 63 68 69 6c 64 20 24 72 65 76  changechild $rev
9e00: 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65  12...    ldelete
9e10: 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31 32 0a   myroots $rev12.
9e20: 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 61 6e 64  ..    # Note and
9e30: 20 72 65 6d 65 6d 62 65 72 20 74 68 61 74 20 74   remember that t
9e40: 68 65 20 74 79 70 65 20 6f 66 20 72 65 76 31 32  he type of rev12
9e50: 20 77 61 73 20 61 6c 72 65 61 64 79 0a 09 20 20   was already..  
9e60: 20 20 23 20 61 64 6a 75 73 74 65 64 20 62 79 20    # adjusted by 
9e70: 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65  AdjustNonTrunkDe
9e80: 66 61 75 6c 74 42 72 61 6e 63 68 2c 20 73 6f 20  faultBranch, so 
9e90: 77 65 20 64 6f 6e 27 74 0a 09 20 20 20 20 23 20  we don't..    # 
9ea0: 68 61 76 65 20 74 6f 20 63 68 61 6e 67 65 20 69  have to change i
9eb0: 74 73 20 74 79 70 65 20 68 65 72 65 2e 0a 09 7d  ts type here...}
9ec0: 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20  ...while {$root 
9ed0: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72  ne ""} {..    $r
9ee0: 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61 75 6c 74  oot setondefault
9ef0: 62 72 61 6e 63 68 20 30 0a 09 20 20 20 20 24 72  branch 0..    $r
9f00: 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d 79 74 72  oot setlod $mytr
9f10: 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65 61 63 68  unk..    foreach
9f20: 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 61 67 73   tag [$root tags
9f30: 5d 20 7b 0a 09 09 24 74 61 67 20 73 65 74 6c 6f  ] {...$tag setlo
9f40: 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20  d $mytrunk..    
9f50: 7d 0a 09 20 20 20 20 73 65 74 20 72 6f 6f 74 20  }..    set root 
9f60: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d  [$root child]..}
9f70: 0a 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9f80: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
9f90: 6f 64 20 41 63 74 69 76 65 20 7b 7d 20 7b 0a 09  od Active {} {..
9fa0: 73 65 74 20 72 65 76 69 73 69 6f 6e 73 20 7b 7d  set revisions {}
9fb0: 0a 09 73 65 74 20 73 79 6d 62 6f 6c 73 20 20 20  ..set symbols   
9fc0: 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f  {}...foreach roo
9fd0: 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66  t [$self LinesOf
9fe0: 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09  Development] {..
9ff0: 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68      if {[$root h
a000: 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d  asparentbranch]}
a010: 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f   { lappend symbo
a020: 6c 73 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74  ls [$root parent
a030: 62 72 61 6e 63 68 5d 20 7d 0a 09 20 20 20 20 77  branch] }..    w
a040: 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22  hile {$root ne "
a050: 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72  "} {...lappend r
a060: 65 76 69 73 69 6f 6e 73 20 24 72 6f 6f 74 0a 09  evisions $root..
a070: 09 66 6f 72 65 61 63 68 20 74 61 67 20 20 20 20  .foreach tag    
a080: 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 20 20 20  [$root tags]    
a090: 20 7b 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f   { lappend symbo
a0a0: 6c 73 20 24 74 61 67 20 20 20 20 7d 0a 09 09 66  ls $tag    }...f
a0b0: 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24  oreach branch [$
a0c0: 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b  root branches] {
a0d0: 0a 09 09 20 20 20 20 69 6e 74 65 67 72 69 74 79  ...    integrity
a0e0: 20 61 73 73 65 72 74 20 7b 0a 09 09 09 5b 24 62   assert {....[$b
a0f0: 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 20 65 71  ranch parent] eq
a100: 20 24 72 6f 6f 74 0a 09 09 20 20 20 20 7d 20 7b   $root...    } {
a110: 42 61 63 6b 72 65 66 65 72 65 6e 63 65 20 62 72  Backreference br
a120: 61 6e 63 68 20 74 6f 20 69 74 73 20 72 6f 6f 74  anch to its root
a130: 20 69 73 20 6d 69 73 73 69 6e 67 20 6f 72 20 77   is missing or w
a140: 72 6f 6e 67 7d 0a 09 09 20 20 20 20 6c 61 70 70  rong}...    lapp
a150: 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 62 72 61  end symbols $bra
a160: 6e 63 68 0a 09 09 7d 0a 09 09 73 65 74 20 6c 6f  nch...}...set lo
a170: 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a 09 09  d [$root lod]...
a180: 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75  if {![$lod istru
a190: 6e 6b 5d 7d 20 7b 0a 09 09 20 20 20 20 69 6e 74  nk]} {...    int
a1a0: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a  egrity assert {.
a1b0: 09 09 09 5b 24 6c 6f 64 20 68 61 73 63 68 69 6c  ...[$lod haschil
a1c0: 64 5d 0a 09 09 20 20 20 20 7d 20 7b 42 72 61 6e  d]...    } {Bran
a1d0: 63 68 20 69 73 20 4c 4f 44 20 73 79 6d 62 6f 6c  ch is LOD symbol
a1e0: 20 77 69 74 68 6f 75 74 20 72 65 76 69 73 69 6f   without revisio
a1f0: 6e 73 7d 0a 09 09 20 20 20 20 6c 61 70 70 65 6e  ns}...    lappen
a200: 64 20 73 79 6d 62 6f 6c 73 20 24 6c 6f 64 0a 09  d symbols $lod..
a210: 09 7d 0a 09 09 73 65 74 20 72 6f 6f 74 20 5b 24  .}...set root [$
a220: 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20  root child]..   
a230: 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 20 5b   }..}...return [
a240: 6c 69 73 74 20 5b 6c 73 6f 72 74 20 2d 75 6e 69  list [lsort -uni
a250: 71 75 65 20 2d 64 69 63 74 20 24 72 65 76 69 73  que -dict $revis
a260: 69 6f 6e 73 5d 20 5b 6c 73 6f 72 74 20 2d 75 6e  ions] [lsort -un
a270: 69 71 75 65 20 2d 64 69 63 74 20 24 73 79 6d 62  ique -dict $symb
a280: 6f 6c 73 5d 5d 0a 20 20 20 20 7d 0a 0a 0a 20 20  ols]].    }...  
a290: 20 20 6d 65 74 68 6f 64 20 41 67 67 72 65 67 61    method Aggrega
a2a0: 74 65 53 79 6d 62 6f 6c 44 61 74 61 20 7b 7d 20  teSymbolData {} 
a2b0: 7b 0a 09 23 20 4e 6f 77 20 74 68 61 74 20 74 68  {..# Now that th
a2c0: 65 20 65 78 61 63 74 20 73 65 74 20 6f 66 20 72  e exact set of r
a2d0: 65 76 69 73 69 6f 6e 73 20 28 61 6e 64 20 74 68  evisions (and th
a2e0: 72 6f 75 67 68 20 74 68 61 74 0a 09 23 20 62 72  rough that..# br
a2f0: 61 6e 63 68 65 73 20 61 6e 64 20 74 61 67 73 29  anches and tags)
a300: 20 69 73 20 6b 6e 6f 77 6e 20 77 65 20 63 61 6e   is known we can
a310: 20 75 70 64 61 74 65 20 74 68 65 20 61 67 67 72   update the aggr
a320: 65 67 61 74 65 0a 09 23 20 73 79 6d 62 6f 6c 20  egate..# symbol 
a330: 73 74 61 74 69 73 74 69 63 73 2e 0a 0a 09 66 6f  statistics....fo
a340: 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c  reach root [$sel
a350: 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70  f LinesOfDevelop
a360: 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 73 65 74  ment] {..    set
a370: 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d   lod [$root lod]
a380: 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 49  ...    # Note: I
a390: 66 20 74 68 65 20 4c 4f 44 20 69 73 20 74 68 65  f the LOD is the
a3a0: 20 74 72 75 6e 6b 20 74 68 65 20 63 6f 75 6e 74   trunk the count
a3b0: 2a 2c 20 65 74 63 2e 20 6d 65 74 68 6f 64 73 0a  *, etc. methods.
a3c0: 09 20 20 20 20 23 20 77 69 6c 6c 20 64 6f 20 6e  .    # will do n
a3d0: 6f 74 68 69 6e 67 2c 20 61 73 20 69 74 20 69 73  othing, as it is
a3e0: 20 61 6c 77 61 79 73 20 70 72 65 73 65 6e 74 20   always present 
a3f0: 28 63 61 6e 6e 6f 74 20 62 65 0a 09 20 20 20 20  (cannot be..    
a400: 23 20 65 78 63 6c 75 64 65 64 29 2c 20 61 6e 64  # excluded), and
a410: 20 69 73 20 61 6c 77 61 79 73 20 61 20 62 72 61   is always a bra
a420: 6e 63 68 20 74 6f 6f 2e 0a 0a 09 20 20 20 20 23  nch too....    #
a430: 20 4c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f   Lines of develo
a440: 70 6d 65 6e 74 20 63 6f 75 6e 74 20 61 73 20 62  pment count as b
a450: 72 61 6e 63 68 65 73 20 61 6e 64 20 68 61 76 65  ranches and have
a460: 20 61 20 63 6f 6d 6d 69 74 0a 09 20 20 20 20 23   a commit..    #
a470: 20 6f 6e 20 74 68 65 6d 20 28 72 6f 6f 74 29 2e   on them (root).
a480: 20 49 66 20 74 68 65 79 20 61 72 65 20 73 74 69   If they are sti
a490: 6c 6c 20 61 74 74 61 63 68 65 64 20 74 6f 20 61  ll attached to a
a4a0: 20 74 72 65 65 20 77 65 0a 09 20 20 20 20 23 20   tree we..    # 
a4b0: 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 74 65 20  have to compute 
a4c0: 61 6e 64 20 72 65 67 69 73 74 65 72 20 70 6f 73  and register pos
a4d0: 73 69 62 6c 65 20 70 61 72 65 6e 74 73 2e 0a 0a  sible parents...
a4e0: 09 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e 74 61  .    $lod counta
a4f0: 73 62 72 61 6e 63 68 0a 09 20 20 20 20 24 6c 6f  sbranch..    $lo
a500: 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69 74 0a 0a  d countacommit..
a510: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20  .    if {[$root 
a520: 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63 68 5d  hasparentbranch]
a530: 7d 20 7b 0a 09 09 23 20 4e 6f 74 65 20 6c 6f 64  } {...# Note lod
a540: 20 3d 3d 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e   == [$root paren
a550: 74 62 72 61 6e 63 68 5d 0a 09 09 24 6c 6f 64 20  tbranch]...$lod 
a560: 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 73 0a  possibleparents.
a570: 09 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21  .    } elseif {!
a580: 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 20 26  [$lod istrunk] &
a590: 26 20 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 65 66  & [$root isondef
a5a0: 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09  aultbranch]} {..
a5b0: 09 23 20 54 68 69 73 20 69 73 20 74 68 65 20 72  .# This is the r
a5c0: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 6f 66 20  oot revision of 
a5d0: 61 20 64 65 74 61 63 68 65 64 20 4e 54 44 42 2e  a detached NTDB.
a5e0: 20 57 65 0a 09 09 23 20 68 61 76 65 20 74 6f 20   We...# have to 
a5f0: 6d 61 6e 75 61 6c 6c 79 20 73 65 74 20 74 68 65  manually set the
a600: 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 70   only possible p
a610: 61 72 65 6e 74 20 66 6f 72 0a 09 09 23 20 74 68  arent for...# th
a620: 69 73 20 4c 4f 44 2c 20 74 68 65 20 74 72 75 6e  is LOD, the trun
a630: 6b 20 69 74 73 65 6c 66 2e 0a 0a 09 09 5b 24 6c  k itself.....[$l
a640: 6f 64 20 73 79 6d 62 6f 6c 5d 20 70 6f 73 73 69  od symbol] possi
a650: 62 6c 65 70 61 72 65 6e 74 20 24 6d 79 74 72 75  bleparent $mytru
a660: 6e 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  nk..    }...    
a670: 23 20 46 6f 72 20 74 68 65 20 72 65 76 69 73 69  # For the revisi
a680: 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69 6e 65 20  ons in the line 
a690: 77 65 20 72 65 67 69 73 74 65 72 20 74 68 65 69  we register thei
a6a0: 72 20 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20  r branches..    
a6b0: 23 20 61 6e 64 20 74 61 67 73 20 61 73 20 62 6c  # and tags as bl
a6c0: 6f 63 6b 65 72 73 20 66 6f 72 20 74 68 65 20 6c  ockers for the l
a6d0: 6f 64 2c 20 61 6e 64 20 75 70 64 61 74 65 20 74  od, and update t
a6e0: 68 65 20 74 79 70 65 0a 09 20 20 20 20 23 20 63  he type..    # c
a6f0: 6f 75 6e 74 65 72 73 20 61 73 20 77 65 6c 6c 2e  ounters as well.
a700: 20 41 73 20 62 72 61 6e 63 68 20 73 79 6d 62 6f   As branch symbo
a710: 6c 73 20 77 69 74 68 6f 75 74 20 63 6f 6d 6d 69  ls without commi
a720: 74 73 20 6f 6e 0a 09 20 20 20 20 23 20 74 68 65  ts on..    # the
a730: 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73 74 65 64  m are not listed
a740: 20 61 73 20 6c 69 6e 65 73 20 6f 66 20 64 65 76   as lines of dev
a750: 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20 68 61 76  elopment, we hav
a760: 65 20 74 6f 0a 09 20 20 20 20 23 20 63 6f 75 6e  e to..    # coun
a770: 74 20 74 68 65 6d 20 68 65 72 65 20 61 73 20 77  t them here as w
a780: 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e 20 62 72  ell, as plain br
a790: 61 6e 63 68 65 73 2e 20 41 74 20 6c 61 73 74 20  anches. At last 
a7a0: 77 65 0a 09 20 20 20 20 23 20 68 61 76 65 20 74  we..    # have t
a7b0: 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64 20 72 65  o compute and re
a7c0: 67 69 73 74 65 72 20 74 68 65 20 70 6f 73 73 69  gister the possi
a7d0: 62 6c 65 20 70 61 72 65 6e 74 73 20 6f 66 20 74  ble parents of t
a7e0: 68 65 0a 09 20 20 20 20 23 20 74 61 67 73 2c 20  he..    # tags, 
a7f0: 69 6e 20 63 61 73 65 20 74 68 65 79 20 61 72 65  in case they are
a800: 20 6c 61 74 65 72 20 63 6f 6e 76 65 72 74 65 64   later converted
a810: 20 61 73 20 62 72 61 6e 63 68 65 73 2e 0a 0a 09   as branches....
a820: 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f 6f 74      while {$root
a830: 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66 6f 72 65   ne ""} {...fore
a840: 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f  ach branch [$roo
a850: 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09  t branches] {...
a860: 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65 64      $lod blocked
a870: 62 79 20 24 62 72 61 6e 63 68 0a 09 09 20 20 20  by $branch...   
a880: 20 24 62 72 61 6e 63 68 20 70 6f 73 73 69 62 6c   $branch possibl
a890: 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20 20 69  eparents...    i
a8a0: 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 63  f {[$branch hasc
a8b0: 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  hild]} continue.
a8c0: 09 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 6f  ..    $branch co
a8d0: 75 6e 74 61 73 62 72 61 6e 63 68 0a 09 09 7d 0a  untasbranch...}.
a8e0: 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 20 5b  ...foreach tag [
a8f0: 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09  $root tags] {...
a900: 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65 64      $lod blocked
a910: 62 79 20 24 74 61 67 0a 09 09 20 20 20 20 24 74  by $tag...    $t
a920: 61 67 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e  ag possibleparen
a930: 74 73 0a 09 09 20 20 20 20 24 74 61 67 20 63 6f  ts...    $tag co
a940: 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a 0a 09 09  untastag...}....
a950: 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20  set root [$root 
a960: 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 09 7d  child]..    }..}
a970: 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  ...return.    }.
a980: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
a990: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
a9a0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
a9b0: 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f   ## Configuratio
a9c0: 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68  n..    pragma -h
a9d0: 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f  astypeinfo    no
a9e0: 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69 6e    ; # no type in
a9f0: 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20  trospection.    
aa00: 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f 20  pragma -hasinfo 
aa10: 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e         no  ; # n
aa20: 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 70  o object introsp
aa30: 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d  ection.    pragm
aa40: 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68 6f 64  a -hastypemethod
aa50: 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65 20 69  s no  ; # type i
aa60: 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74 2e 0a  s not relevant..
aa70: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
aa80: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
aa90: 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a  ############.}..
aaa0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
aab0: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
aac0: 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20 20 6e  ort::cvs {.    n
aad0: 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20  amespace export 
aae0: 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65 73 70 61  file.    namespa
aaf0: 63 65 20 65 76 61 6c 20 66 69 6c 65 20 7b 0a 09  ce eval file {..
ab00: 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20 72 65 71  # Import not req
ab10: 75 69 72 65 64 2c 20 61 6c 72 65 61 64 79 20 61  uired, already a
ab20: 20 63 68 69 6c 64 20 6e 61 6d 65 73 70 61 63 65   child namespace
ab30: 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63 65 20 69  ...# namespace i
ab40: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73  mport ::vc::foss
ab50: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
ab60: 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23 20 6e 61  :file::rev..# na
ab70: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
ab80: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
ab90: 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a  ort::cvs::file::
aba0: 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63 65 20 69  sym..namespace i
abb0: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c  mport ::vc::tool
abc0: 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65  s::misc::*..name
abd0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
abe0: 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c  c::tools::troubl
abf0: 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  e..namespace imp
ac00: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a  ort ::vc::tools:
ac10: 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61 63 65 20  :log..namespace 
ac20: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73  import ::vc::fos
ac30: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
ac40: 3a 3a 62 6c 6f 62 73 74 6f 72 65 0a 09 6e 61 6d  ::blobstore..nam
ac50: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
ac60: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
ac70: 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09  rt::cvs::state..
ac80: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
ac90: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
aca0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65  mport::cvs::inte
acb0: 67 72 69 74 79 0a 09 6e 61 6d 65 73 70 61 63 65  grity..namespace
acc0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
acd0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
ace0: 73 3a 3a 67 74 63 6f 72 65 0a 20 20 20 20 7d 0a  s::gtcore.    }.
acf0: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  }..# # ## ### ##
ad00: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
ad10: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
ad20: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
ad30: 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61  .## Ready..packa
ad40: 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66  ge provide vc::f
ad50: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
ad60: 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a 72 65 74  vs::file 1.0.ret
ad70: 75 72 6e 0a                                      urn.