Hex Artifact Content
Not logged in

Artifact 952128b4cc84af0dac28b3b676491ee307d67a58:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [177a0cc55c] - Fix setting of myimported, wrong condition. Fix item assignment when sorting branches. Fix parent/child linkage when setting up branch dependencies. Completed processes on non-trunk default branch revisions. Added skeleton code for the deletion of superfluous revisions. by aku on 2007-10-17 03:15:12.

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 76 63 3a 3a 66 6f 73   require vc::fos
0390: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
03a0: 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 20 3b 20 23  ::file::rev  ; #
03b0: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 72 65   CVS per file re
03c0: 76 69 73 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65  visions..package
03d0: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
03e0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
03f0: 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 3b 20 23  ::file::sym  ; #
0400: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 73 79   CVS per file sy
0410: 6d 62 6f 6c 73 2e 0a 70 61 63 6b 61 67 65 20 72  mbols..package r
0420: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73  equire vc::tools
0430: 3a 3a 74 72 6f 75 62 6c 65 20 20 20 20 20 20 20  ::trouble       
0440: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 45             ; # E
0450: 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e 0a  rror reporting..
0460: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0470: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 20  vc::tools::log  
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0490: 20 20 20 20 3b 20 23 20 55 73 65 72 20 66 65 65      ; # User fee
04a0: 64 62 61 63 6b 0a 70 61 63 6b 61 67 65 20 72 65  dback.package re
04b0: 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a  quire vc::tools:
04c0: 3a 6d 69 73 63 20 20 20 20 20 20 20 20 20 20 20  :misc           
04d0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 54 65            ; # Te
04e0: 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a 0a 23  xt formatting..#
04f0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0500: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0510: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0520: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0530: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76  ..snit::type ::v
0540: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0550: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 7b 0a 20  t::cvs::file {. 
0560: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
0570: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0580: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
0590: 23 20 50 75 62 6c 69 63 20 41 50 49 0a 0a 20 20  # Public API..  
05a0: 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b 70    constructor {p
05b0: 61 74 68 20 65 78 65 63 75 74 61 62 6c 65 20 70  ath executable p
05c0: 72 6f 6a 65 63 74 7d 20 7b 0a 09 73 65 74 20 6d  roject} {..set m
05d0: 79 70 61 74 68 20 20 20 20 20 20 20 24 70 61 74  ypath       $pat
05e0: 68 0a 09 73 65 74 20 6d 79 65 78 65 63 75 74 61  h..set myexecuta
05f0: 62 6c 65 20 24 65 78 65 63 75 74 61 62 6c 65 0a  ble $executable.
0600: 09 73 65 74 20 6d 79 70 72 6f 6a 65 63 74 20 20  .set myproject  
0610: 20 20 24 70 72 6f 6a 65 63 74 0a 09 73 65 74 20    $project..set 
0620: 6d 79 74 72 75 6e 6b 20 20 20 20 20 20 5b 24 6d  mytrunk      [$m
0630: 79 70 72 6f 6a 65 63 74 20 74 72 75 6e 6b 5d 0a  yproject trunk].
0640: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
0650: 20 20 20 6d 65 74 68 6f 64 20 70 61 74 68 20 20     method path  
0660: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d    {} { return $m
0670: 79 70 61 74 68 20 7d 0a 20 20 20 20 6d 65 74 68  ypath }.    meth
0680: 6f 64 20 70 72 6f 6a 65 63 74 20 7b 7d 20 7b 20  od project {} { 
0690: 72 65 74 75 72 6e 20 24 6d 79 70 72 6f 6a 65 63  return $myprojec
06a0: 74 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20  t }..    # # ## 
06b0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
06c0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
06d0: 0a 20 20 20 20 23 23 20 4d 65 74 68 6f 64 73 20  .    ## Methods 
06e0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65  required for the
06f0: 20 63 6c 61 73 73 20 74 6f 20 62 65 20 61 20 73   class to be a s
0700: 69 6e 6b 20 6f 66 20 74 68 65 20 72 63 73 20 70  ink of the rcs p
0710: 61 72 73 65 72 0a 0a 20 20 20 20 23 6d 65 74 68  arser..    #meth
0720: 6f 64 20 62 65 67 69 6e 20 7b 7d 20 7b 70 75 74  od begin {} {put
0730: 73 20 62 65 67 69 6e 7d 0a 20 20 20 20 23 6d 65  s begin}.    #me
0740: 74 68 6f 64 20 73 65 74 68 65 61 64 20 7b 68 7d  thod sethead {h}
0750: 20 7b 70 75 74 73 20 68 65 61 64 3d 24 68 7d 0a   {puts head=$h}.
0760: 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 70      #method setp
0770: 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20 7b  rincipalbranch {
0780: 62 7d 20 7b 70 75 74 73 20 70 62 3d 24 62 7d 0a  b} {puts pb=$b}.
0790: 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66 74      #method deft
07a0: 61 67 20 7b 73 20 72 7d 20 7b 70 75 74 73 20 24  ag {s r} {puts $
07b0: 73 3d 24 72 7d 0a 20 20 20 20 23 6d 65 74 68 6f  s=$r}.    #metho
07c0: 64 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d  d setcomment {c}
07d0: 20 7b 70 75 74 73 20 63 6f 6d 6d 65 6e 74 3d 24   {puts comment=$
07e0: 63 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 61  c}.    #method a
07f0: 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 70 75 74  dmindone {} {put
0800: 73 20 61 64 6d 69 6e 64 6f 6e 65 7d 0a 20 20 20  s admindone}.   
0810: 20 23 6d 65 74 68 6f 64 20 64 65 66 20 7b 72 65   #method def {re
0820: 76 20 64 61 74 65 20 61 75 74 68 6f 72 20 73 74  v date author st
0830: 61 74 65 20 6e 65 78 74 20 62 72 61 6e 63 68 65  ate next branche
0840: 73 7d 20 7b 70 75 74 73 20 22 64 65 66 20 24 72  s} {puts "def $r
0850: 65 76 20 24 64 61 74 65 20 24 61 75 74 68 6f 72  ev $date $author
0860: 20 24 73 74 61 74 65 20 24 6e 65 78 74 20 24 62   $state $next $b
0870: 72 61 6e 63 68 65 73 22 7d 0a 20 20 20 20 23 6d  ranches"}.    #m
0880: 65 74 68 6f 64 20 64 65 66 64 6f 6e 65 20 7b 7d  ethod defdone {}
0890: 20 7b 70 75 74 73 20 64 65 66 2d 64 6f 6e 65 7d   {puts def-done}
08a0: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74  .    #method set
08b0: 64 65 73 63 20 7b 64 7d 20 7b 70 75 74 73 20 64  desc {d} {puts d
08c0: 65 73 63 3d 24 64 7d 0a 20 20 20 20 23 6d 65 74  esc=$d}.    #met
08d0: 68 6f 64 20 65 78 74 65 6e 64 20 7b 72 65 76 20  hod extend {rev 
08e0: 63 6f 6d 6d 69 74 6d 73 67 20 64 65 6c 74 61 72  commitmsg deltar
08f0: 61 6e 67 65 7d 20 7b 70 75 74 73 20 22 65 78 74  ange} {puts "ext
0900: 65 6e 64 20 24 63 6f 6d 6d 69 74 6d 73 67 20 24  end $commitmsg $
0910: 64 65 6c 74 61 72 61 6e 67 65 22 7d 0a 20 20 20  deltarange"}.   
0920: 20 23 6d 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d   #method done {}
0930: 20 7b 70 75 74 73 20 64 6f 6e 65 7d 0a 0a 20 20   {puts done}..  
0940: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
0950: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0960: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
0970: 20 50 65 72 73 69 73 74 65 6e 63 65 20 28 70 61   Persistence (pa
0980: 73 73 20 49 49 29 0a 0a 20 20 20 20 6d 65 74 68  ss II)..    meth
0990: 6f 64 20 70 65 72 73 69 73 74 20 7b 7d 20 7b 0a  od persist {} {.
09a0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23      }..    # # #
09b0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
09c0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
09d0: 23 23 0a 20 20 20 20 23 23 20 49 6d 70 6c 65 6d  ##.    ## Implem
09e0: 65 6e 74 20 74 68 65 20 73 69 6e 6b 0a 0a 20 20  ent the sink..  
09f0: 20 20 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 7b    method begin {
0a00: 7d 20 7b 23 69 67 6e 6f 72 65 7d 0a 0a 20 20 20  } {#ignore}..   
0a10: 20 6d 65 74 68 6f 64 20 73 65 74 68 65 61 64 20   method sethead 
0a20: 7b 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 6d  {revnr} {..set m
0a30: 79 68 65 61 64 72 65 76 6e 72 20 24 72 65 76 6e  yheadrevnr $revn
0a40: 72 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  r..return.    }.
0a50: 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 70  .    method setp
0a60: 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20 7b  rincipalbranch {
0a70: 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 73 65 74  branchnr} {..set
0a80: 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 24 62 72   myprincipal $br
0a90: 61 6e 63 68 6e 72 0a 09 72 65 74 75 72 6e 0a 20  anchnr..return. 
0aa0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
0ab0: 20 64 65 66 74 61 67 20 7b 6e 61 6d 65 20 72 65   deftag {name re
0ac0: 76 6e 72 7d 20 7b 0a 09 23 20 46 55 54 55 52 45  vnr} {..# FUTURE
0ad0: 3a 20 50 65 72 66 6f 72 6d 20 73 79 6d 62 6f 6c  : Perform symbol
0ae0: 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20   transformation 
0af0: 68 65 72 65 2e 0a 0a 09 69 66 20 7b 5b 73 74 72  here....if {[str
0b00: 75 63 74 3a 3a 73 65 74 20 63 6f 6e 74 61 69 6e  uct::set contain
0b10: 73 20 24 6d 79 73 79 6d 62 6f 6c 73 20 24 6e 61  s $mysymbols $na
0b20: 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f 75  me]} {..    trou
0b30: 62 6c 65 20 66 61 74 61 6c 20 22 4d 75 6c 74 69  ble fatal "Multi
0b40: 70 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20  ple definitions 
0b50: 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 27 24  of the symbol '$
0b60: 6e 61 6d 65 27 20 69 6e 20 27 24 6d 79 70 61 74  name' in '$mypat
0b70: 68 27 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a  h'"..    return.
0b80: 09 7d 0a 0a 09 73 74 72 75 63 74 3a 3a 73 65 74  .}...struct::set
0b90: 20 61 64 64 20 6d 79 73 79 6d 62 6f 6c 73 20 24   add mysymbols $
0ba0: 6e 61 6d 65 0a 0a 09 69 66 20 7b 5b 72 65 76 20  name...if {[rev 
0bb0: 69 73 62 72 61 6e 63 68 72 65 76 6e 72 20 24 72  isbranchrevnr $r
0bc0: 65 76 6e 72 20 2d 3e 20 62 72 61 6e 63 68 6e 72  evnr -> branchnr
0bd0: 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20  ]} {..    $self 
0be0: 41 64 64 42 72 61 6e 63 68 20 24 6e 61 6d 65 20  AddBranch $name 
0bf0: 24 62 72 61 6e 63 68 6e 72 0a 09 7d 20 65 6c 73  $branchnr..} els
0c00: 65 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41  e {..    $self A
0c10: 64 64 54 61 67 20 24 6e 61 6d 65 20 24 72 65 76  ddTag $name $rev
0c20: 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  nr..}..return.  
0c30: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
0c40: 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d 20 7b  setcomment {c} {
0c50: 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d  # ignore}..    m
0c60: 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 20  ethod admindone 
0c70: 7b 7d 20 7b 0a 09 23 20 57 65 20 64 6f 20 6e 6f  {} {..# We do no
0c80: 74 68 69 6e 67 20 61 74 20 74 68 65 20 62 6f 75  thing at the bou
0c90: 6e 64 61 72 79 20 6f 66 20 61 64 6d 69 6e 20 61  ndary of admin a
0ca0: 6e 64 20 72 65 76 69 73 69 6f 6e 20 64 61 74 61  nd revision data
0cb0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
0cc0: 6f 64 20 64 65 66 20 7b 72 65 76 6e 72 20 64 61  od def {revnr da
0cd0: 74 65 20 61 75 74 68 6f 72 20 73 74 61 74 65 20  te author state 
0ce0: 6e 65 78 74 20 62 72 61 6e 63 68 65 73 7d 20 7b  next branches} {
0cf0: 0a 09 24 73 65 6c 66 20 52 65 63 6f 72 64 42 72  ..$self RecordBr
0d00: 61 6e 63 68 43 6f 6d 6d 69 74 73 20 24 62 72 61  anchCommits $bra
0d10: 6e 63 68 65 73 0a 0a 09 69 66 20 7b 5b 69 6e 66  nches...if {[inf
0d20: 6f 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 24  o exists myrev($
0d30: 72 65 76 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 20  revnr)]} {..    
0d40: 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 46  trouble fatal "F
0d50: 69 6c 65 20 24 6d 79 70 61 74 68 20 63 6f 6e 74  ile $mypath cont
0d60: 61 69 6e 73 20 64 75 70 6c 69 63 61 74 65 20 64  ains duplicate d
0d70: 65 66 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 72  efinitions for r
0d80: 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 2e 22  evision $revnr."
0d90: 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a  ..    return..}.
0da0: 0a 09 73 65 74 20 6d 79 61 69 64 28 24 72 65 76  ..set myaid($rev
0db0: 6e 72 29 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20  nr) [$myproject 
0dc0: 64 65 66 61 75 74 68 6f 72 20 24 61 75 74 68 6f  defauthor $autho
0dd0: 72 5d 0a 09 73 65 74 20 6d 79 72 65 76 28 24 72  r]..set myrev($r
0de0: 65 76 6e 72 29 20 5b 72 65 76 20 25 41 55 54 4f  evnr) [rev %AUTO
0df0: 25 20 24 72 65 76 6e 72 20 24 64 61 74 65 20 24  % $revnr $date $
0e00: 73 74 61 74 65 20 24 73 65 6c 66 5d 0a 0a 09 52  state $self]...R
0e10: 65 63 6f 72 64 42 61 73 69 63 44 65 70 65 6e 64  ecordBasicDepend
0e20: 65 6e 63 69 65 73 20 24 72 65 76 6e 72 20 24 6e  encies $revnr $n
0e30: 65 78 74 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ext..return.    
0e40: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65  }..    method de
0e50: 66 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20 54 68  fdone {} {..# Th
0e60: 69 73 20 69 73 20 61 6c 6c 20 64 6f 6e 65 20 61  is is all done a
0e70: 66 74 65 72 20 74 68 65 20 72 65 76 69 73 69 6f  fter the revisio
0e80: 6e 20 74 72 65 65 20 68 61 73 20 62 65 65 6e 20  n tree has been 
0e90: 65 78 74 72 61 63 74 65 64 0a 09 23 20 66 72 6f  extracted..# fro
0ea0: 6d 20 74 68 65 20 66 69 6c 65 2c 20 62 65 66 6f  m the file, befo
0eb0: 72 65 20 74 68 65 20 63 6f 6d 6d 69 74 20 6d 65  re the commit me
0ec0: 73 61 67 65 73 20 61 6e 64 20 64 65 6c 74 61 20  sages and delta 
0ed0: 74 65 78 74 73 20 61 72 65 0a 09 23 20 70 72 6f  texts are..# pro
0ee0: 63 65 73 73 65 64 2e 0a 0a 09 50 72 6f 63 65 73  cessed....Proces
0ef0: 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 65 6e  sPrimaryDependen
0f00: 63 69 65 73 0a 09 50 72 6f 63 65 73 73 42 72 61  cies..ProcessBra
0f10: 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 65 73 0a  nchDependencies.
0f20: 09 53 6f 72 74 42 72 61 6e 63 68 65 73 0a 09 50  .SortBranches..P
0f30: 72 6f 63 65 73 73 54 61 67 44 65 70 65 6e 64 65  rocessTagDepende
0f40: 6e 63 69 65 73 0a 09 44 65 74 65 72 6d 69 6e 65  ncies..Determine
0f50: 54 68 65 52 6f 6f 74 52 65 76 69 73 69 6f 6e 0a  TheRootRevision.
0f60: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
0f70: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 64 65 73     method setdes
0f80: 63 20 7b 64 7d 20 7b 23 20 69 67 6e 6f 72 65 7d  c {d} {# ignore}
0f90: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 65 78 74  ..    method ext
0fa0: 65 6e 64 20 7b 72 65 76 6e 72 20 63 6f 6d 6d 69  end {revnr commi
0fb0: 74 6d 73 67 20 74 65 78 74 72 61 6e 67 65 7d 20  tmsg textrange} 
0fc0: 7b 0a 09 73 65 74 20 63 6d 69 64 20 5b 24 6d 79  {..set cmid [$my
0fd0: 70 72 6f 6a 65 63 74 20 64 65 66 63 6d 65 73 73  project defcmess
0fe0: 61 67 65 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  age [string trim
0ff0: 20 24 63 6f 6d 6d 69 74 6d 73 67 5d 5d 0a 0a 09   $commitmsg]]...
1000: 73 65 74 20 72 65 76 20 24 6d 79 72 65 76 28 24  set rev $myrev($
1010: 72 65 76 6e 72 29 0a 0a 09 69 66 20 7b 5b 24 72  revnr)...if {[$r
1020: 65 76 20 68 61 73 6d 65 74 61 5d 7d 20 7b 0a 09  ev hasmeta]} {..
1030: 20 20 20 20 23 20 41 70 70 61 72 65 6e 74 6c 79      # Apparently
1040: 20 72 65 70 6f 73 69 74 6f 72 69 65 73 20 65 78   repositories ex
1050: 69 73 74 20 69 6e 20 77 68 69 63 68 20 74 68 65  ist in which the
1060: 20 64 65 6c 74 61 20 64 61 74 61 0a 09 20 20 20   delta data..   
1070: 20 23 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20   # for revision 
1080: 31 2e 31 20 69 73 20 70 72 6f 76 69 64 65 64 20  1.1 is provided 
1090: 73 65 76 65 72 61 6c 20 74 69 6d 65 73 2c 20 61  several times, a
10a0: 74 20 6c 65 61 73 74 0a 09 20 20 20 20 23 20 74  t least..    # t
10b0: 77 69 63 65 2e 20 54 68 65 20 61 63 74 75 61 6c  wice. The actual
10c0: 20 63 61 75 73 65 20 6f 66 20 74 68 69 73 20 64   cause of this d
10d0: 75 70 6c 69 63 61 74 69 6f 6e 20 69 73 20 6e 6f  uplication is no
10e0: 74 0a 09 20 20 20 20 23 20 6b 6e 6f 77 6e 2e 20  t..    # known. 
10f0: 53 70 65 63 75 6c 61 74 69 6f 6e 20 63 65 6e 74  Speculation cent
1100: 65 72 73 20 6f 6e 20 52 43 53 2f 43 56 53 20 62  ers on RCS/CVS b
1110: 75 67 73 2c 20 6f 72 20 66 72 6f 6d 0a 09 20 20  ugs, or from..  
1120: 20 20 23 20 6d 61 6e 75 61 6c 20 65 64 69 74 73    # manual edits
1130: 20 6f 66 20 74 68 65 20 72 65 70 6f 73 69 74 6f   of the reposito
1140: 72 79 20 77 68 69 63 68 20 62 6f 72 6b 65 64 20  ry which borked 
1150: 74 68 65 0a 09 20 20 20 20 23 20 69 6e 74 65 72  the..    # inter
1160: 6e 61 6c 73 2e 20 57 68 61 74 65 76 65 72 20 74  nals. Whatever t
1170: 68 65 20 63 61 75 73 65 2c 20 74 65 73 74 69 6e  he cause, testin
1180: 67 20 73 68 6f 77 65 64 20 74 68 61 74 20 62 6f  g showed that bo
1190: 74 68 0a 09 20 20 20 20 23 20 63 76 73 20 61 6e  th..    # cvs an
11a0: 64 20 72 63 73 20 75 73 65 20 74 68 65 20 66 69  d rcs use the fi
11b0: 72 73 74 20 64 65 66 69 6e 69 74 69 6f 6e 20 77  rst definition w
11c0: 68 65 6e 20 70 65 72 66 6f 72 6d 69 6e 67 20 61  hen performing a
11d0: 0a 09 20 20 20 20 23 20 63 68 65 63 6b 6f 75 74  ..    # checkout
11e0: 2c 20 61 6e 64 20 77 65 20 66 6f 6c 6c 6f 77 20  , and we follow 
11f0: 74 68 65 69 72 20 6c 65 61 64 2e 20 53 69 64 65  their lead. Side
1200: 20 6e 6f 74 65 73 3a 20 27 63 76 73 0a 09 20 20   notes: 'cvs..  
1210: 20 20 23 20 6c 6f 67 27 20 66 61 69 6c 73 20 6f    # log' fails o
1220: 6e 20 73 75 63 68 20 61 20 66 69 6c 65 2c 20 61  n such a file, a
1230: 6e 64 20 27 63 76 73 20 72 6c 6f 67 27 20 70 72  nd 'cvs rlog' pr
1240: 69 6e 74 73 20 74 68 65 20 6c 6f 67 0a 09 20 20  ints the log..  
1250: 20 20 23 20 6d 65 73 73 61 67 65 20 66 72 6f 6d    # message from
1260: 20 74 68 65 20 66 69 72 73 74 20 64 65 6c 74 61   the first delta
1270: 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 73  , ignoring the s
1280: 65 63 6f 6e 64 2e 0a 0a 09 20 20 20 20 6c 6f 67  econd....    log
1290: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49   write 1 file "I
12a0: 6e 20 66 69 6c 65 20 24 6d 79 70 61 74 68 20 3a  n file $mypath :
12b0: 20 44 75 70 6c 69 63 61 74 65 20 64 65 6c 74 61   Duplicate delta
12c0: 20 64 61 74 61 20 66 6f 72 20 72 65 76 69 73 69   data for revisi
12d0: 6f 6e 20 24 72 65 76 6e 72 22 0a 09 20 20 20 20  on $revnr"..    
12e0: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65  log write 1 file
12f0: 20 22 49 67 6e 6f 72 69 6e 67 20 74 68 65 20 64   "Ignoring the d
1300: 75 70 6c 69 63 61 74 65 22 0a 09 20 20 20 20 72  uplicate"..    r
1310: 65 74 75 72 6e 0a 09 7d 0a 0a 09 23 20 44 65 74  eturn..}...# Det
1320: 65 72 6d 69 6e 65 20 74 68 65 20 6c 69 6e 65 20  ermine the line 
1330: 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 66  of development f
1340: 6f 72 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20  or the revision 
1350: 28 70 72 6f 6a 65 63 74 0a 09 23 20 6c 65 76 65  (project..# leve
1360: 6c 29 2e 20 54 68 69 73 20 67 69 76 65 73 20 75  l). This gives u
1370: 73 20 74 68 65 20 62 72 61 6e 63 68 69 64 20 74  s the branchid t
1380: 6f 6f 2c 20 72 65 71 75 69 72 65 64 20 66 6f 72  oo, required for
1390: 20 74 68 65 0a 09 23 20 6d 65 74 61 20 64 61 74   the..# meta dat
13a0: 61 20 67 72 6f 75 70 20 74 68 65 20 72 65 76 69  a group the revi
13b0: 73 69 6f 6e 20 69 73 20 69 6e 2e 20 28 4e 6f 74  sion is in. (Not
13c0: 65 3a 20 42 79 20 70 75 74 74 69 6e 67 20 62 6f  e: By putting bo
13d0: 74 68 0a 09 23 20 62 72 61 6e 63 68 2f 6c 6f 64  th..# branch/lod
13e0: 20 61 6e 64 20 70 72 6f 6a 65 63 74 20 69 6e 66   and project inf
13f0: 6f 72 6d 61 74 69 6f 6e 20 69 6e 74 6f 20 74 68  ormation into th
1400: 65 20 67 72 6f 75 70 20 77 65 20 65 6e 73 75 72  e group we ensur
1410: 65 0a 09 23 20 74 68 61 74 20 61 6e 79 20 63 72  e..# that any cr
1420: 6f 73 73 2d 70 72 6f 6a 65 63 74 20 61 6e 64 20  oss-project and 
1430: 63 72 6f 73 73 2d 62 72 61 6e 63 68 20 63 6f 6d  cross-branch com
1440: 6d 69 74 73 20 61 72 65 0a 09 23 20 73 65 70 61  mits are..# sepa
1450: 72 61 74 65 64 20 69 6e 74 6f 20 6d 75 6c 74 69  rated into multi
1460: 70 6c 65 20 63 6f 6d 6d 69 74 73 2c 20 6f 6e 65  ple commits, one
1470: 20 69 6e 20 65 61 63 68 20 6f 66 20 74 68 65 20   in each of the 
1480: 70 72 6f 6a 65 63 74 73 0a 09 23 20 61 6e 64 2f  projects..# and/
1490: 6f 72 20 62 72 61 6e 63 68 65 73 29 2e 0a 0a 09  or branches)....
14a0: 73 65 74 20 6c 6f 64 20 5b 47 65 74 4c 4f 44 20  set lod [GetLOD 
14b0: 24 72 65 76 6e 72 5d 0a 0a 09 24 72 65 76 20 73  $revnr]...$rev s
14c0: 65 74 6d 65 74 61 20 5b 24 6d 79 70 72 6f 6a 65  etmeta [$myproje
14d0: 63 74 20 64 65 66 6d 65 74 61 20 5b 24 6c 6f 64  ct defmeta [$lod
14e0: 20 69 64 5d 20 24 6d 79 61 69 64 28 24 72 65 76   id] $myaid($rev
14f0: 6e 72 29 20 24 63 6d 69 64 5d 0a 09 24 72 65 76  nr) $cmid]..$rev
1500: 20 73 65 74 74 65 78 74 20 24 74 65 78 74 72 61   settext $textra
1510: 6e 67 65 0a 09 24 72 65 76 20 73 65 74 6c 6f 64  nge..$rev setlod
1520: 20 20 24 6c 6f 64 0a 0a 09 23 20 49 66 20 74 68    $lod...# If th
1530: 69 73 20 69 73 20 72 65 76 69 73 69 6f 6e 20 31  is is revision 1
1540: 2e 31 2c 20 77 65 20 68 61 76 65 20 74 6f 20 64  .1, we have to d
1550: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
1560: 20 74 68 65 0a 09 23 20 66 69 6c 65 20 73 65 65   the..# file see
1570: 6d 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e 20  ms to have been 
1580: 63 72 65 61 74 65 64 20 74 68 72 6f 75 67 68 20  created through 
1590: 27 63 76 73 20 61 64 64 27 20 69 6e 73 74 65 61  'cvs add' instea
15a0: 64 20 6f 66 0a 09 23 20 27 63 76 73 20 69 6d 70  d of..# 'cvs imp
15b0: 6f 72 74 27 2e 20 54 68 69 73 20 63 61 6e 20 62  ort'. This can b
15c0: 65 20 64 6f 6e 65 20 62 79 20 6c 6f 6f 6b 69 6e  e done by lookin
15d0: 67 20 61 74 20 74 68 65 20 75 6e 2d 0a 09 23 20  g at the un-..# 
15e0: 61 64 75 6c 74 65 72 61 74 65 64 20 63 6f 6d 6d  adulterated comm
15f0: 69 74 20 6d 65 73 73 61 67 65 2c 20 61 73 20 43  it message, as C
1600: 56 53 20 75 73 65 73 20 61 20 68 61 72 64 77 69  VS uses a hardwi
1610: 72 65 64 20 6d 61 67 69 63 0a 09 23 20 6d 65 73  red magic..# mes
1620: 73 61 67 65 20 66 6f 72 20 74 68 65 20 6c 61 74  sage for the lat
1630: 74 65 72 2c 20 69 2e 65 2e 20 22 49 6e 69 74 69  ter, i.e. "Initi
1640: 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22 2c 20  al revision\n", 
1650: 6e 6f 0a 09 23 20 70 65 72 69 6f 64 2e 20 20 28  no..# period.  (
1660: 54 68 69 73 20 66 61 63 74 20 61 6c 73 6f 20 68  This fact also h
1670: 65 6c 70 73 20 75 73 20 77 68 65 6e 20 74 68 65  elps us when the
1680: 20 74 69 6d 65 20 63 6f 6d 65 73 20 74 6f 0a 09   time comes to..
1690: 23 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  # determine whet
16a0: 68 65 72 20 74 68 69 73 20 66 69 6c 65 20 6d 69  her this file mi
16b0: 67 68 74 20 68 61 76 65 20 68 61 64 20 61 20 64  ght have had a d
16c0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23  efault branch..#
16d0: 20 69 6e 20 74 68 65 20 70 61 73 74 2e 29 0a 0a   in the past.)..
16e0: 09 69 66 20 7b 24 72 65 76 6e 72 20 65 71 20 22  .if {$revnr eq "
16f0: 31 2e 31 22 7d 20 7b 0a 09 20 20 20 20 73 65 74  1.1"} {..    set
1700: 20 6d 79 69 6d 70 6f 72 74 65 64 20 5b 65 78 70   myimported [exp
1710: 72 20 7b 24 63 6f 6d 6d 69 74 6d 73 67 20 65 71  r {$commitmsg eq
1720: 20 22 49 6e 69 74 69 61 6c 20 72 65 76 69 73 69   "Initial revisi
1730: 6f 6e 5c 6e 22 7d 5d 0a 09 7d 0a 0a 09 23 20 48  on\n"}]..}...# H
1740: 65 72 65 20 77 65 20 61 6c 73 6f 20 6b 65 65 70  ere we also keep
1750: 20 74 72 61 63 6b 20 6f 66 20 74 68 65 20 6f 72   track of the or
1760: 64 65 72 20 69 6e 20 77 68 69 63 68 20 74 68 65  der in which the
1770: 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20 77 65   revisions..# we
1780: 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20  re added to the 
1790: 66 69 6c 65 2e 0a 0a 09 6c 61 70 70 65 6e 64 20  file....lappend 
17a0: 6d 79 72 65 76 69 73 69 6f 6e 73 20 24 72 65 76  myrevisions $rev
17b0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
17c0: 20 20 20 20 6d 65 74 68 6f 64 20 64 6f 6e 65 20      method done 
17d0: 7b 7d 20 7b 0a 09 23 20 43 6f 6d 70 6c 65 74 65  {} {..# Complete
17e0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 2c 20   the revisions, 
17f0: 62 72 61 6e 63 68 65 73 2c 20 61 6e 64 20 74 61  branches, and ta
1800: 67 73 2e 20 54 68 69 73 20 69 6e 63 6c 75 64 65  gs. This include
1810: 73 0a 09 23 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72  s..# looking for
1820: 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66   a non-trunk def
1830: 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 6d 61 72  ault branch, mar
1840: 6b 69 6e 67 20 69 74 73 20 6d 65 6d 62 65 72 73  king its members
1850: 0a 09 23 20 61 6e 64 20 6c 69 6e 6b 69 6e 67 20  ..# and linking 
1860: 74 68 65 6d 20 69 6e 74 6f 20 74 68 65 20 74 72  them into the tr
1870: 75 6e 6b 2e 0a 0a 09 44 65 74 65 72 6d 69 6e 65  unk....Determine
1880: 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 74 69 6f  RevisionOperatio
1890: 6e 73 0a 09 44 65 74 65 72 6d 69 6e 65 4c 69 6e  ns..DetermineLin
18a0: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 0a  esOfDevelopment.
18b0: 09 48 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44  .HandleNonTrunkD
18c0: 65 66 61 75 6c 74 42 72 61 6e 63 68 0a 09 52 65  efaultBranch..Re
18d0: 6d 6f 76 65 49 72 72 65 6c 65 76 61 6e 74 44 65  moveIrrelevantDe
18e0: 6c 65 74 69 6f 6e 73 0a 09 52 65 6d 6f 76 65 49  letions..RemoveI
18f0: 6e 69 74 69 61 6c 42 72 61 6e 63 68 44 65 6c 65  nitialBranchDele
1900: 74 69 6f 6e 73 0a 0a 09 69 66 20 7b 5b 24 6d 79  tions...if {[$my
1910: 70 72 6f 6a 65 63 74 20 74 72 75 6e 6b 6f 6e 6c  project trunkonl
1920: 79 5d 7d 20 7b 0a 09 20 20 20 20 45 78 63 6c 75  y]} {..    Exclu
1930: 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 6d  deNonTrunkInform
1940: 61 74 69 6f 6e 0a 09 7d 0a 09 72 65 74 75 72 6e  ation..}..return
1950: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20  .    }..    # # 
1960: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
1970: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
1980: 23 23 23 0a 20 20 20 20 23 23 20 53 74 61 74 65  ###.    ## State
1990: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
19a0: 79 70 61 74 68 20 20 20 20 20 20 20 20 20 20 20  ypath           
19b0: 20 7b 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20   {} ; # Path of 
19c0: 74 68 65 20 66 69 6c 65 27 73 20 72 63 73 20 61  the file's rcs a
19d0: 72 63 68 69 76 65 2e 0a 20 20 20 20 76 61 72 69  rchive..    vari
19e0: 61 62 6c 65 20 6d 79 65 78 65 63 75 74 61 62 6c  able myexecutabl
19f0: 65 20 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f  e      0  ; # Bo
1a00: 6f 6c 65 61 6e 20 66 6c 61 67 20 27 66 69 6c 65  olean flag 'file
1a10: 20 65 78 65 63 75 74 61 62 6c 65 27 2e 0a 20 20   executable'..  
1a20: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f    variable mypro
1a30: 6a 65 63 74 20 20 20 20 20 20 20 20 20 7b 7d 20  ject         {} 
1a40: 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f  ; # Reference to
1a50: 20 74 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a   the project obj
1a60: 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 74 68  ect.....    # th
1a70: 65 20 66 69 6c 65 20 62 65 6c 6f 6e 67 73 20 74  e file belongs t
1a80: 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  o..    variable 
1a90: 6d 79 72 65 76 20 2d 61 72 72 61 79 20 20 20 20  myrev -array    
1aa0: 20 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65    {} ; # Maps re
1ab0: 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f  vision number to
1ac0: 20 74 68 65 0a 09 09 09 09 20 20 20 20 23 20 61   the.....    # a
1ad0: 73 73 6f 63 69 61 74 65 64 20 72 65 76 69 73 69  ssociated revisi
1ae0: 6f 6e 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 76  on object..    v
1af0: 61 72 69 61 62 6c 65 20 6d 79 72 65 76 69 73 69  ariable myrevisi
1b00: 6f 6e 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23  ons       {} ; #
1b10: 20 53 61 6d 65 20 61 73 20 6d 79 72 65 76 2c 20   Same as myrev, 
1b20: 62 75 74 20 61 20 6c 69 73 74 2c 0a 09 09 09 09  but a list,.....
1b30: 20 20 20 20 23 20 67 69 76 69 6e 67 20 75 73 20      # giving us 
1b40: 74 68 65 20 6f 72 64 65 72 20 6f 66 0a 09 09 09  the order of....
1b50: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73  .    # revisions
1b60: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
1b70: 79 61 69 64 20 20 20 20 20 20 2d 61 72 72 61 79  yaid      -array
1b80: 20 7b 7d 20 3b 20 23 20 4d 61 70 20 72 65 76 69   {} ; # Map revi
1b90: 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 74 6f 20  sion numbers to 
1ba0: 74 68 65 20 69 64 0a 09 09 09 09 20 20 20 20 23  the id.....    #
1bb0: 20 6f 66 20 74 68 65 20 61 75 74 68 6f 72 20 77   of the author w
1bc0: 68 6f 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 09  ho committed....
1bd0: 09 20 20 20 20 23 20 69 74 2e 20 54 68 69 73 20  .    # it. This 
1be0: 69 73 20 6c 61 74 65 72 20 61 67 67 72 65 67 61  is later aggrega
1bf0: 74 65 64 0a 09 09 09 09 20 20 20 20 23 20 77 69  ted.....    # wi
1c00: 74 68 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67  th commit messag
1c10: 65 2c 20 62 72 61 6e 63 68 20 6e 61 6d 65 0a 09  e, branch name..
1c20: 09 09 09 20 20 20 20 23 20 61 6e 64 20 70 72 6f  ...    # and pro
1c30: 6a 65 63 74 20 69 64 20 66 6f 72 20 61 20 6d 65  ject id for a me
1c40: 74 61 20 69 64 2e 0a 20 20 20 20 76 61 72 69 61  ta id..    varia
1c50: 62 6c 65 20 6d 79 68 65 61 64 72 65 76 6e 72 20  ble myheadrevnr 
1c60: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 48 65 61        {} ; # Hea
1c70: 64 20 72 65 76 69 73 69 6f 6e 20 28 72 65 76 69  d revision (revi
1c80: 73 69 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 20 20  sion number).   
1c90: 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 69 6e   variable myprin
1ca0: 63 69 70 61 6c 20 20 20 20 20 20 20 7b 7d 20 3b  cipal       {} ;
1cb0: 20 23 20 50 72 69 6e 63 69 70 61 6c 20 62 72 61   # Principal bra
1cc0: 6e 63 68 20 28 62 72 61 6e 63 68 20 6e 75 6d 62  nch (branch numb
1cd0: 65 72 29 2e 0a 09 09 09 09 20 20 20 20 23 20 43  er)......    # C
1ce0: 6f 6e 74 72 61 72 79 20 74 6f 20 74 68 65 20 6e  ontrary to the n
1cf0: 61 6d 65 20 74 68 69 73 20 69 73 20 74 68 65 0a  ame this is the.
1d00: 09 09 09 09 20 20 20 20 23 20 64 65 66 61 75 6c  ....    # defaul
1d10: 74 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61  t branch..    va
1d20: 72 69 61 62 6c 65 20 6d 79 64 65 70 65 6e 64 65  riable mydepende
1d30: 6e 63 69 65 73 20 20 20 20 7b 7d 20 3b 20 23 20  ncies    {} ; # 
1d40: 44 69 63 74 69 6f 6e 61 72 79 20 70 61 72 65 6e  Dictionary paren
1d50: 74 20 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 09 09  t -> child,.....
1d60: 20 20 20 20 23 20 72 65 63 6f 72 64 73 20 70 72      # records pr
1d70: 69 6d 61 72 79 20 64 65 70 65 6e 64 65 6e 63 69  imary dependenci
1d80: 65 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  es..    variable
1d90: 20 6d 79 69 6d 70 6f 72 74 65 64 20 20 20 20 20   myimported     
1da0: 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61     0  ; # Boolea
1db0: 6e 20 66 6c 61 67 2e 20 53 65 74 20 69 66 20 61  n flag. Set if a
1dc0: 6e 64 20 6f 6e 6c 79 20 69 66 0a 09 09 09 09 20  nd only if..... 
1dd0: 20 20 20 23 20 72 65 76 20 31 2e 31 20 6f 66 20     # rev 1.1 of 
1de0: 74 68 65 20 66 69 6c 65 20 73 65 65 6d 69 6e 67  the file seeming
1df0: 6c 79 0a 09 09 09 09 20 20 20 20 23 20 77 61 73  ly.....    # was
1e00: 20 69 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61   imported instea
1e10: 64 20 6f 66 20 61 64 64 65 64 0a 09 09 09 09 20  d of added..... 
1e20: 20 20 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 20     # normally.. 
1e30: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f     variable myro
1e40: 6f 74 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d  ot            {}
1e50: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74   ; # Reference t
1e60: 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f  o the revision o
1e70: 62 6a 65 63 74 0a 09 09 09 09 20 20 20 20 23 20  bject.....    # 
1e80: 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 6f 74  holding the root
1e90: 20 72 65 76 69 73 69 6f 6e 2e 20 20 49 74 73 0a   revision.  Its.
1ea0: 09 09 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72  ....    # number
1eb0: 20 75 73 75 61 6c 6c 79 20 69 73 20 27 31 2e 31   usually is '1.1
1ec0: 27 2e 20 43 61 6e 20 62 65 0a 09 09 09 09 20 20  '. Can be.....  
1ed0: 20 20 23 20 61 20 64 69 66 66 65 72 65 6e 74 20    # a different 
1ee0: 6e 75 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20  number, because 
1ef0: 6f 66 0a 09 09 09 09 20 20 20 20 23 20 67 61 70  of.....    # gap
1f00: 73 20 63 72 65 61 74 65 64 20 76 69 61 20 27 63  s created via 'c
1f10: 76 73 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20  vsadmin -o'..   
1f20: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e   variable mybran
1f30: 63 68 65 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b  ches -array {} ;
1f40: 20 23 20 4d 61 70 73 20 62 72 61 6e 63 68 20 6e   # Maps branch n
1f50: 75 6d 62 65 72 20 74 6f 20 74 68 65 20 73 79 6d  umber to the sym
1f60: 62 6f 6c 0a 09 09 09 09 20 20 20 20 23 20 6f 62  bol.....    # ob
1f70: 6a 65 63 74 20 68 61 6e 64 6c 69 6e 67 20 74 68  ject handling th
1f80: 65 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61  e branch..    va
1f90: 72 69 61 62 6c 65 20 6d 79 74 61 67 73 20 20 20  riable mytags   
1fa0: 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20    -array {} ; # 
1fb0: 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75  Maps revision nu
1fc0: 6d 62 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74  mber to the list
1fd0: 0a 09 09 09 09 20 20 20 20 23 20 6f 66 20 73 79  .....    # of sy
1fe0: 6d 62 6f 6c 20 6f 62 6a 65 63 74 73 20 66 6f 72  mbol objects for
1ff0: 20 74 68 65 20 74 61 67 73 0a 09 09 09 09 20 20   the tags.....  
2000: 20 20 23 20 61 73 73 6f 63 69 61 74 65 64 20 77    # associated w
2010: 69 74 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e  ith the revision
2020: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
2030: 79 73 79 6d 62 6f 6c 73 20 20 20 20 20 20 20 20  ysymbols        
2040: 20 7b 7d 20 3b 20 23 20 53 65 74 20 6f 66 20 74   {} ; # Set of t
2050: 68 65 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20  he symbol names 
2060: 66 6f 75 6e 64 20 69 6e 0a 09 09 09 09 20 20 20  found in.....   
2070: 20 23 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20   # this file... 
2080: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72     variable mybr
2090: 61 6e 63 68 63 6e 74 20 30 20 3b 20 23 20 43 6f  anchcnt 0 ; # Co
20a0: 75 6e 74 65 72 20 66 6f 72 20 62 72 61 6e 63 68  unter for branch
20b0: 65 73 2c 20 74 6f 20 72 65 63 6f 72 64 20 74 68  es, to record th
20c0: 65 69 72 0a 09 09 09 20 20 20 20 20 23 20 6f 72  eir....     # or
20d0: 64 65 72 20 6f 66 20 64 65 66 69 6e 69 74 69 6f  der of definitio
20e0: 6e 2e 20 54 68 69 73 20 61 6c 73 6f 20 64 65 66  n. This also def
20f0: 69 6e 65 73 0a 09 09 09 20 20 20 20 20 23 20 74  ines....     # t
2100: 68 65 69 72 20 6f 72 64 65 72 20 6f 66 20 63 72  heir order of cr
2110: 65 61 74 69 6f 6e 2c 20 77 68 69 63 68 20 69 73  eation, which is
2120: 20 74 68 65 0a 09 09 09 20 20 20 20 20 23 20 72   the....     # r
2130: 65 76 65 72 73 65 20 6f 66 20 64 65 66 69 6e 69  everse of defini
2140: 74 69 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 73 6d  tion.  I.e. a sm
2150: 61 6c 6c 65 72 0a 09 09 09 20 20 20 20 20 23 20  aller....     # 
2160: 6e 75 6d 62 65 72 20 6d 65 61 6e 73 20 27 44 65  number means 'De
2170: 66 69 6e 65 64 20 65 61 72 6c 69 65 72 27 2c 20  fined earlier', 
2180: 6d 65 61 6e 73 0a 09 09 09 20 20 20 20 20 23 20  means....     # 
2190: 27 43 72 65 61 74 65 64 20 6c 61 74 65 72 27 2e  'Created later'.
21a0: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
21b0: 79 74 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 44 69  ytrunk {} ; # Di
21c0: 72 65 63 74 20 72 65 66 65 72 65 6e 63 65 20 74  rect reference t
21d0: 6f 20 6d 79 70 72 6f 6a 65 63 74 20 2d 3e 20 74  o myproject -> t
21e0: 72 75 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62  runk..    variab
21f0: 6c 65 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 3b 20  le myroots {} ; 
2200: 23 20 4c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20  # List of roots 
2210: 69 6e 20 74 68 65 20 66 6f 72 65 73 74 20 6f 66  in the forest of
2220: 0a 09 09 09 20 20 23 20 6c 6f 64 27 73 2e 20 4f  ....  # lod's. O
2230: 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 73  bject references
2240: 20 74 6f 20 72 65 76 69 73 69 6f 6e 73 20 61 6e   to revisions an
2250: 64 0a 09 09 09 20 20 23 20 62 72 61 6e 63 68 65  d....  # branche
2260: 73 2e 20 54 68 65 20 6c 61 74 74 65 72 20 63 61  s. The latter ca
2270: 6e 20 61 70 70 65 61 72 20 77 68 65 6e 20 74 68  n appear when th
2280: 65 79 0a 09 09 09 20 20 23 20 61 72 65 20 73 65  ey....  # are se
2290: 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72  vered from their
22a0: 20 70 61 72 65 6e 74 2e 0a 0a 20 20 20 20 23 20   parent...    # 
22b0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
22c0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
22d0: 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74  #####.    ## Int
22e0: 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20  ernal methods.. 
22f0: 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64     method Record
2300: 42 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62  BranchCommits {b
2310: 72 61 6e 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65  ranches} {..fore
2320: 61 63 68 20 62 72 61 6e 63 68 72 65 76 6e 72 20  ach branchrevnr 
2330: 24 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20  $branches {..   
2340: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09   if {[catch {...
2350: 73 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c  set branch [$sel
2360: 66 20 52 65 76 32 42 72 61 6e 63 68 20 24 62 72  f Rev2Branch $br
2370: 61 6e 63 68 72 65 76 6e 72 5d 0a 09 20 20 20 20  anchrevnr]..    
2380: 7d 5d 7d 20 7b 0a 09 09 73 65 74 20 62 72 61 6e  }]} {...set bran
2390: 63 68 20 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c  ch [$self AddUnl
23a0: 61 62 65 6c 65 64 42 72 61 6e 63 68 20 5b 72 65  abeledBranch [re
23b0: 76 20 32 62 72 61 6e 63 68 6e 72 20 24 62 72 61  v 2branchnr $bra
23c0: 6e 63 68 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20  nchrevnr]]..    
23d0: 7d 0a 0a 09 20 20 20 20 23 20 52 65 63 6f 72 64  }...    # Record
23e0: 20 74 68 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73   the commit, jus
23f0: 74 20 61 73 20 72 65 76 69 73 69 6f 6e 20 6e 75  t as revision nu
2400: 6d 62 65 72 20 66 6f 72 0a 09 20 20 20 20 23 20  mber for..    # 
2410: 6e 6f 77 2e 20 50 72 6f 63 65 73 42 72 61 6e 63  now. ProcesBranc
2420: 68 44 65 70 65 6e 64 65 6e 63 69 65 73 20 77 69  hDependencies wi
2430: 6c 6c 20 65 78 74 65 6e 64 20 74 68 61 74 20 69  ll extend that i
2440: 74 6f 20 61 0a 09 20 20 20 20 23 20 70 72 6f 70  to a..    # prop
2450: 65 72 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  er object refere
2460: 6e 63 65 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e  nce....    $bran
2470: 63 68 20 73 65 74 63 68 69 6c 64 72 65 76 6e 72  ch setchildrevnr
2480: 20 24 62 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d   $branchrevnr..}
2490: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
24a0: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42      method Rev2B
24b0: 72 61 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a  ranch {revnr} {.
24c0: 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e  .if {[rev istrun
24d0: 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20  krevnr $revnr]} 
24e0: 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 69  {..    trouble i
24f0: 6e 74 65 72 6e 61 6c 20 22 45 78 70 65 63 74 65  nternal "Expecte
2500: 64 20 61 20 62 72 61 6e 63 68 20 72 65 76 69 73  d a branch revis
2510: 69 6f 6e 20 6e 75 6d 62 65 72 22 0a 09 7d 0a 09  ion number"..}..
2520: 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68  return $mybranch
2530: 65 73 28 5b 72 65 76 20 32 62 72 61 6e 63 68 6e  es([rev 2branchn
2540: 72 20 24 72 65 76 6e 72 5d 29 0a 20 20 20 20 7d  r $revnr]).    }
2550: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64  ..    method Add
2560: 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63 68 20  UnlabeledBranch 
2570: 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 72 65  {branchnr} {..re
2580: 74 75 72 6e 20 5b 24 73 65 6c 66 20 41 64 64 42  turn [$self AddB
2590: 72 61 6e 63 68 20 75 6e 6c 61 62 65 6c 65 64 2d  ranch unlabeled-
25a0: 24 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 63  $branchnr $branc
25b0: 68 6e 72 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  hnr].    }..    
25c0: 6d 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63 68  method AddBranch
25d0: 20 7b 6e 61 6d 65 20 62 72 61 6e 63 68 6e 72 7d   {name branchnr}
25e0: 20 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78   {..if {[info ex
25f0: 69 73 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28  ists mybranches(
2600: 24 62 72 61 6e 63 68 6e 72 29 5d 7d 20 7b 0a 09  $branchnr)]} {..
2610: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20      log write 1 
2620: 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74  file "In '$mypat
2630: 68 27 3a 20 42 72 61 6e 63 68 20 27 24 62 72 61  h': Branch '$bra
2640: 6e 63 68 6e 72 27 20 6e 61 6d 65 64 20 27 5b 24  nchnr' named '[$
2650: 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e  mybranches($bran
2660: 63 68 6e 72 29 20 6e 61 6d 65 5d 27 22 0a 09 20  chnr) name]'".. 
2670: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66     log write 1 f
2680: 69 6c 65 20 22 43 61 6e 6e 6f 74 20 68 61 76 65  ile "Cannot have
2690: 20 73 65 63 6f 6e 64 20 6e 61 6d 65 20 27 24 6e   second name '$n
26a0: 61 6d 65 27 2c 20 69 67 6e 6f 72 69 6e 67 20 69  ame', ignoring i
26b0: 74 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09  t"..    return..
26c0: 7d 0a 09 73 65 74 20 62 72 61 6e 63 68 20 5b 73  }..set branch [s
26d0: 79 6d 20 25 41 55 54 4f 25 20 62 72 61 6e 63 68  ym %AUTO% branch
26e0: 20 24 62 72 61 6e 63 68 6e 72 20 5b 24 6d 79 70   $branchnr [$myp
26f0: 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c  roject getsymbol
2700: 20 24 6e 61 6d 65 5d 5d 0a 09 24 62 72 61 6e 63   $name]]..$branc
2710: 68 20 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b 69  h setposition [i
2720: 6e 63 72 20 6d 79 62 72 61 6e 63 68 63 6e 74 5d  ncr mybranchcnt]
2730: 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73  ..set mybranches
2740: 28 24 62 72 61 6e 63 68 6e 72 29 20 24 62 72 61  ($branchnr) $bra
2750: 6e 63 68 0a 09 72 65 74 75 72 6e 20 24 62 72 61  nch..return $bra
2760: 6e 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  nch.    }..    m
2770: 65 74 68 6f 64 20 41 64 64 54 61 67 20 7b 6e 61  ethod AddTag {na
2780: 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65 74  me revnr} {..set
2790: 20 74 61 67 20 5b 73 79 6d 20 25 41 55 54 4f 25   tag [sym %AUTO%
27a0: 20 74 61 67 20 24 72 65 76 6e 72 20 5b 24 6d 79   tag $revnr [$my
27b0: 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f  project getsymbo
27c0: 6c 20 24 6e 61 6d 65 5d 5d 0a 09 6c 61 70 70 65  l $name]]..lappe
27d0: 6e 64 20 6d 79 74 61 67 73 28 24 72 65 76 6e 72  nd mytags($revnr
27e0: 29 20 24 74 61 67 0a 09 72 65 74 75 72 6e 20 24  ) $tag..return $
27f0: 74 61 67 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  tag.    }..    p
2800: 72 6f 63 20 52 65 63 6f 72 64 42 61 73 69 63 44  roc RecordBasicD
2810: 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 72 65 76  ependencies {rev
2820: 6e 72 20 6e 65 78 74 7d 20 7b 0a 09 23 20 48 61  nr next} {..# Ha
2830: 6e 64 6c 65 20 74 68 65 20 72 65 76 69 73 69 6f  ndle the revisio
2840: 6e 20 64 65 70 65 6e 64 65 6e 63 69 65 73 2e 20  n dependencies. 
2850: 52 65 63 6f 72 64 20 74 68 65 6d 20 66 6f 72 20  Record them for 
2860: 6e 6f 77 2c 20 64 6f 0a 09 23 20 6e 6f 74 68 69  now, do..# nothi
2870: 6e 67 20 77 69 74 68 20 74 68 65 6d 20 79 65 74  ng with them yet
2880: 2e 0a 0a 09 23 20 4f 6e 20 74 68 65 20 74 72 75  ....# On the tru
2890: 6e 6b 20 74 68 65 20 27 6e 65 78 74 27 20 66 69  nk the 'next' fi
28a0: 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68  eld points to th
28b0: 65 20 70 72 65 76 69 6f 75 73 0a 09 23 20 72 65  e previous..# re
28c0: 76 69 73 69 6f 6e 2c 20 69 2e 65 2e 20 74 68 65  vision, i.e. the
28d0: 20 5f 70 61 72 65 6e 74 5f 20 6f 66 20 74 68 65   _parent_ of the
28e0: 20 63 75 72 72 65 6e 74 20 6f 6e 65 2e 20 45 78   current one. Ex
28f0: 61 6d 70 6c 65 3a 0a 09 23 20 31 2e 36 27 73 20  ample:..# 1.6's 
2900: 6e 65 78 74 20 69 73 20 31 2e 35 20 28 6d 6f 64  next is 1.5 (mod
2910: 75 6c 6f 20 63 76 73 20 61 64 6d 69 6e 20 2d 6f  ulo cvs admin -o
2920: 29 2e 0a 0a 09 23 20 43 6f 6e 74 72 61 72 69 6c  )....# Contraril
2930: 79 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 74 68  y on a branch th
2940: 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20 70  e 'next' field p
2950: 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 09 23 20  oints to the..# 
2960: 70 72 69 6d 61 72 79 20 5f 63 68 69 6c 64 5f 20  primary _child_ 
2970: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
2980: 65 76 69 73 69 6f 6e 2e 20 41 73 20 65 78 61 6d  evision. As exam
2990: 70 6c 65 2c 0a 09 23 20 31 2e 31 2e 33 2e 32 27  ple,..# 1.1.3.2'
29a0: 73 20 27 6e 65 78 74 27 20 77 69 6c 6c 20 62 65  s 'next' will be
29b0: 20 31 2e 31 2e 33 2e 33 2e 0a 0a 09 23 20 54 68   1.1.3.3....# Th
29c0: 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64 20 61  e 'next' field a
29d0: 63 74 75 61 6c 6c 79 20 61 6c 77 61 79 73 20 72  ctually always r
29e0: 65 66 65 72 73 20 74 6f 20 74 68 65 20 72 65 76  efers to the rev
29f0: 69 73 69 6f 6e 0a 09 23 20 63 6f 6e 74 61 69 6e  ision..# contain
2a00: 69 6e 67 20 74 68 65 20 64 65 6c 74 61 20 6e 65  ing the delta ne
2a10: 65 64 65 64 20 74 6f 20 72 65 74 72 69 65 76 65  eded to retrieve
2a20: 20 74 68 61 74 20 72 65 76 69 73 69 6f 6e 2e 0a   that revision..
2a30: 0a 09 23 20 54 68 65 20 64 65 70 65 6e 64 65 6e  ..# The dependen
2a40: 63 69 65 73 20 6e 65 65 64 65 64 20 68 65 72 65  cies needed here
2a50: 20 61 72 65 20 74 68 65 20 6c 6f 67 69 63 61 6c   are the logical
2a60: 20 73 74 72 75 63 74 75 72 65 2c 0a 09 23 20 70   structure,..# p
2a70: 61 72 65 6e 74 2f 63 68 69 6c 64 2c 20 61 6e 64  arent/child, and
2a80: 20 6e 6f 74 20 74 68 65 20 69 6d 70 6c 65 6d 65   not the impleme
2a90: 6e 74 61 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e  ntation dependen
2aa0: 74 20 64 65 6c 74 61 0a 09 23 20 70 6f 69 6e 74  t delta..# point
2ab0: 65 72 73 2e 0a 0a 09 69 66 20 7b 24 6e 65 78 74  ers....if {$next
2ac0: 20 65 71 20 22 22 7d 20 72 65 74 75 72 6e 0a 0a   eq ""} return..
2ad0: 09 75 70 76 61 72 20 31 20 6d 79 64 65 70 65 6e  .upvar 1 mydepen
2ae0: 64 65 6e 63 69 65 73 20 6d 79 64 65 70 65 6e 64  dencies mydepend
2af0: 65 6e 63 69 65 73 0a 0a 09 23 20 20 20 20 20 20  encies...#      
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b10: 20 20 20 20 70 61 72 65 6e 74 20 2d 3e 20 63 68      parent -> ch
2b20: 69 6c 64 0a 09 69 66 20 7b 5b 72 65 76 20 69 73  ild..if {[rev is
2b30: 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e  trunkrevnr $revn
2b40: 72 5d 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65  r]} {..    lappe
2b50: 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65  nd mydependencie
2b60: 73 20 24 6e 65 78 74 20 24 72 65 76 6e 72 0a 09  s $next $revnr..
2b70: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61  } else {..    la
2b80: 70 70 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e  ppend mydependen
2b90: 63 69 65 73 20 24 72 65 76 6e 72 20 24 6e 65 78  cies $revnr $nex
2ba0: 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  t..}..return.   
2bb0: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 50 72 6f   }..    proc Pro
2bc0: 63 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 6e  cessPrimaryDepen
2bd0: 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 75 70  dencies {} {..up
2be0: 76 61 72 20 31 20 6d 79 64 65 70 65 6e 64 65 6e  var 1 mydependen
2bf0: 63 69 65 73 20 6d 79 64 65 70 65 6e 64 65 6e 63  cies mydependenc
2c00: 69 65 73 20 6d 79 72 65 76 20 6d 79 72 65 76 0a  ies myrev myrev.
2c10: 0a 09 66 6f 72 65 61 63 68 20 7b 70 61 72 65 6e  ..foreach {paren
2c20: 74 72 65 76 6e 72 20 63 68 69 6c 64 72 65 76 6e  trevnr childrevn
2c30: 72 7d 20 24 6d 79 64 65 70 65 6e 64 65 6e 63 69  r} $mydependenci
2c40: 65 73 20 7b 0a 09 20 20 20 20 73 65 74 20 70 61  es {..    set pa
2c50: 72 65 6e 74 20 24 6d 79 72 65 76 28 24 70 61 72  rent $myrev($par
2c60: 65 6e 74 72 65 76 6e 72 29 0a 09 20 20 20 20 73  entrevnr)..    s
2c70: 65 74 20 63 68 69 6c 64 20 20 24 6d 79 72 65 76  et child  $myrev
2c80: 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 09 20  ($childrevnr).. 
2c90: 20 20 20 24 70 61 72 65 6e 74 20 73 65 74 63 68     $parent setch
2ca0: 69 6c 64 20 24 63 68 69 6c 64 0a 09 20 20 20 20  ild $child..    
2cb0: 24 63 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74  $child setparent
2cc0: 20 24 70 61 72 65 6e 74 0a 09 7d 0a 09 72 65 74   $parent..}..ret
2cd0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  urn.    }..    p
2ce0: 72 6f 63 20 50 72 6f 63 65 73 73 42 72 61 6e 63  roc ProcessBranc
2cf0: 68 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d  hDependencies {}
2d00: 20 7b 0a 09 75 70 76 61 72 20 31 20 6d 79 62 72   {..upvar 1 mybr
2d10: 61 6e 63 68 65 73 20 6d 79 62 72 61 6e 63 68 65  anches mybranche
2d20: 73 20 6d 79 72 65 76 20 6d 79 72 65 76 0a 0a 09  s myrev myrev...
2d30: 66 6f 72 65 61 63 68 20 7b 62 72 61 6e 63 68 6e  foreach {branchn
2d40: 72 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79  r branch} [array
2d50: 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d   get mybranches]
2d60: 20 7b 0a 09 20 20 20 20 73 65 74 20 72 65 76 6e   {..    set revn
2d70: 72 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e  r [$branch paren
2d80: 74 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20 69 66  trevnr]...    if
2d90: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists 
2da0: 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d 20  myrev($revnr)]} 
2db0: 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20  {...log write 1 
2dc0: 66 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74  file "In '$mypat
2dd0: 68 27 3a 20 54 68 65 20 62 72 61 6e 63 68 20 27  h': The branch '
2de0: 5b 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d 27 20  [$branch name]' 
2df0: 72 65 66 65 72 65 6e 63 65 73 22 0a 09 09 6c 6f  references"...lo
2e00: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22  g write 1 file "
2e10: 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 73 69  the bogus revisi
2e20: 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64 20  on '$revnr' and 
2e30: 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e  will be ignored.
2e40: 22 0a 09 09 24 62 72 61 6e 63 68 20 64 65 73 74  "...$branch dest
2e50: 72 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79 62 72  roy...unset mybr
2e60: 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72  anches($branchnr
2e70: 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  )..    } else {.
2e80: 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 76  ..set rev $myrev
2e90: 28 24 72 65 76 6e 72 29 0a 09 09 24 72 65 76 20  ($revnr)...$rev 
2ea0: 61 64 64 62 72 61 6e 63 68 20 24 62 72 61 6e 63  addbranch $branc
2eb0: 68 0a 09 09 24 62 72 61 6e 63 68 20 73 65 74 70  h...$branch setp
2ec0: 61 72 65 6e 74 20 24 72 65 76 0a 0a 09 09 23 20  arent $rev....# 
2ed0: 49 66 20 72 65 76 69 73 69 6f 6e 73 20 77 65 72  If revisions wer
2ee0: 65 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74  e committed on t
2ef0: 68 65 20 62 72 61 6e 63 68 20 77 65 20 73 74 6f  he branch we sto
2f00: 72 65 20 61 0a 09 09 23 20 72 65 66 65 72 65 6e  re a...# referen
2f10: 63 65 20 74 6f 20 74 68 65 20 62 72 61 6e 63 68  ce to the branch
2f20: 20 74 68 65 72 65 2c 20 61 6e 64 20 66 75 72 74   there, and furt
2f30: 68 65 72 20 64 65 63 6c 61 72 65 0a 09 09 23 20  her declare...# 
2f40: 74 68 65 20 66 69 72 73 74 20 63 68 69 6c 64 27  the first child'
2f50: 73 20 70 61 72 65 6e 74 20 74 6f 20 62 65 20 62  s parent to be b
2f60: 72 61 6e 63 68 27 73 20 70 61 72 65 6e 74 2c 20  ranch's parent, 
2f70: 61 6e 64 0a 09 09 23 20 6c 69 73 74 20 74 68 69  and...# list thi
2f80: 73 20 63 68 69 6c 64 20 69 6e 20 74 68 65 20 70  s child in the p
2f90: 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 0a  arent revision..
2fa0: 0a 09 09 69 66 20 7b 5b 24 62 72 61 6e 63 68 20  ...if {[$branch 
2fb0: 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 20  haschild]} {... 
2fc0: 20 20 20 73 65 74 20 63 68 69 6c 64 72 65 76 6e     set childrevn
2fd0: 72 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64  r [$branch child
2fe0: 72 65 76 6e 72 5d 0a 09 09 20 20 20 20 73 65 74  revnr]...    set
2ff0: 20 63 68 69 6c 64 20 24 6d 79 72 65 76 28 24 63   child $myrev($c
3000: 68 69 6c 64 72 65 76 6e 72 29 0a 09 09 20 20 20  hildrevnr)...   
3010: 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c   $branch setchil
3020: 64 20 24 63 68 69 6c 64 0a 0a 09 09 20 20 20 20  d $child....    
3030: 24 63 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74  $child setparent
3040: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09  branch $branch..
3050: 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70  .    $child setp
3060: 61 72 65 6e 74 20 20 20 20 20 20 20 24 72 65 76  arent       $rev
3070: 0a 09 09 20 20 20 20 24 72 65 76 20 61 64 64 63  ...    $rev addc
3080: 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 63 68  hildonbranch $ch
3090: 69 6c 64 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09  ild...}..    }..
30a0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
30b0: 0a 20 20 20 20 70 72 6f 63 20 53 6f 72 74 42 72  .    proc SortBr
30c0: 61 6e 63 68 65 73 20 7b 7d 20 7b 0a 09 75 70 76  anches {} {..upv
30d0: 61 72 20 31 20 6d 79 72 65 76 20 6d 79 72 65 76  ar 1 myrev myrev
30e0: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e  ...foreach {revn
30f0: 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65  r rev} [array ge
3100: 74 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20  t myrev] {..    
3110: 24 72 65 76 20 73 6f 72 74 62 72 61 6e 63 68 65  $rev sortbranche
3120: 73 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  s..}..return.   
3130: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 50 72 6f   }..    proc Pro
3140: 63 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63  cessTagDependenc
3150: 69 65 73 20 7b 7d 20 7b 0a 09 75 70 76 61 72 20  ies {} {..upvar 
3160: 31 20 6d 79 74 61 67 73 20 6d 79 74 61 67 73 20  1 mytags mytags 
3170: 6d 79 72 65 76 20 6d 79 72 65 76 0a 0a 09 66 6f  myrev myrev...fo
3180: 72 65 61 63 68 20 7b 72 65 76 6e 72 20 74 61 67  reach {revnr tag
3190: 6c 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74  list} [array get
31a0: 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20   mytags] {..    
31b0: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
31c0: 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d  s myrev($revnr)]
31d0: 7d 20 7b 0a 09 09 73 65 74 20 6e 20 5b 6c 6c 65  } {...set n [lle
31e0: 6e 67 74 68 20 24 74 61 67 6c 69 73 74 5d 0a 09  ngth $taglist]..
31f0: 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c  .log write 1 fil
3200: 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a  e "In '$mypath':
3210: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 5b   The following [
3220: 6e 73 70 20 24 6e 20 74 61 67 5d 20 72 65 66 65  nsp $n tag] refe
3230: 72 65 6e 63 65 22 0a 09 09 6c 6f 67 20 77 72 69  rence"...log wri
3240: 74 65 20 31 20 66 69 6c 65 20 22 74 68 65 20 62  te 1 file "the b
3250: 6f 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27 24  ogus revision '$
3260: 72 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c 20  revnr' and will 
3270: 62 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09 66  be ignored."...f
3280: 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c  oreach tag $tagl
3290: 69 73 74 20 7b 0a 09 09 20 20 20 20 6c 6f 67 20  ist {...    log 
32a0: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 20 20  write 1 file "  
32b0: 20 20 5b 24 74 61 67 20 6e 61 6d 65 5d 22 0a 09    [$tag name]"..
32c0: 09 20 20 20 20 24 74 61 67 20 64 65 73 74 72 6f  .    $tag destro
32d0: 79 0a 09 09 7d 0a 09 09 75 6e 73 65 74 20 6d 79  y...}...unset my
32e0: 74 61 67 73 28 24 72 65 76 6e 72 29 0a 09 20 20  tags($revnr)..  
32f0: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74    } else {...set
3300: 20 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 76   rev $myrev($rev
3310: 6e 72 29 0a 09 09 66 6f 72 65 61 63 68 20 74 61  nr)...foreach ta
3320: 67 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 20  g $taglist {... 
3330: 20 20 20 24 72 65 76 20 61 64 64 74 61 67 20 24     $rev addtag $
3340: 74 61 67 0a 09 09 20 20 20 20 24 74 61 67 20 73  tag...    $tag s
3350: 65 74 74 61 67 72 65 76 20 24 72 65 76 0a 09 09  ettagrev $rev...
3360: 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74  }..    }..}..ret
3370: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  urn.    }..    p
3380: 72 6f 63 20 44 65 74 65 72 6d 69 6e 65 54 68 65  roc DetermineThe
3390: 52 6f 6f 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20  RootRevision {} 
33a0: 7b 0a 09 75 70 76 61 72 20 31 20 6d 79 72 65 76  {..upvar 1 myrev
33b0: 20 6d 79 72 65 76 20 6d 79 72 6f 6f 74 20 6d 79   myrev myroot my
33c0: 72 6f 6f 74 0a 0a 09 23 20 54 68 65 20 72 6f 6f  root...# The roo
33d0: 74 20 69 73 20 74 68 65 20 6f 6e 65 20 72 65 76  t is the one rev
33e0: 69 73 69 6f 6e 20 77 68 69 63 68 20 68 61 73 20  ision which has 
33f0: 6e 6f 20 70 61 72 65 6e 74 2e 20 42 79 0a 09 23  no parent. By..#
3400: 20 63 68 65 63 6b 69 6e 67 20 61 6c 6c 20 72 65   checking all re
3410: 76 69 73 69 6f 6e 73 20 77 65 20 65 6e 73 75 72  visions we ensur
3420: 65 20 74 68 61 74 20 77 65 20 63 61 6e 20 64 65  e that we can de
3430: 74 65 63 74 20 61 6e 64 0a 09 23 20 72 65 70 6f  tect and..# repo
3440: 72 74 20 74 68 65 20 63 61 73 65 20 6f 66 20 6d  rt the case of m
3450: 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 2e 20 57  ultiple roots. W
3460: 69 74 68 6f 75 74 20 74 68 61 74 20 77 65 20 63  ithout that we c
3470: 6f 75 6c 64 0a 09 23 20 73 69 6d 70 6c 79 20 74  ould..# simply t
3480: 61 6b 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e  ake one revision
3490: 20 61 6e 64 20 66 6f 6c 6c 6f 77 20 74 68 65 20   and follow the 
34a0: 70 61 72 65 6e 74 20 6c 69 6e 6b 73 20 74 6f 0a  parent links to.
34b0: 09 23 20 74 68 65 69 72 20 72 6f 6f 74 20 28 73  .# their root (s
34c0: 69 63 21 29 2e 0a 0a 09 66 6f 72 65 61 63 68 20  ic!)....foreach 
34d0: 7b 72 65 76 6e 72 20 72 65 76 7d 20 5b 61 72 72  {revnr rev} [arr
34e0: 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20 7b 0a  ay get myrev] {.
34f0: 09 20 20 20 20 69 66 20 7b 5b 24 72 65 76 20 68  .    if {[$rev h
3500: 61 73 70 61 72 65 6e 74 5d 7d 20 63 6f 6e 74 69  asparent]} conti
3510: 6e 75 65 0a 09 20 20 20 20 69 66 20 7b 24 6d 79  nue..    if {$my
3520: 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 20 74 72  root ne ""} { tr
3530: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22  ouble internal "
3540: 4d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 20 72 65  Multiple root re
3550: 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 22 20 7d  visions found" }
3560: 0a 09 20 20 20 20 73 65 74 20 6d 79 72 6f 6f 74  ..    set myroot
3570: 20 24 72 65 76 0a 09 7d 0a 0a 09 23 20 49 6e 20   $rev..}...# In 
3580: 74 68 65 20 66 75 74 75 72 65 20 77 65 20 61 6c  the future we al
3590: 73 6f 20 6e 65 65 64 20 61 20 6c 69 73 74 2c 20  so need a list, 
35a0: 61 73 20 62 72 61 6e 63 68 65 73 20 63 61 6e 20  as branches can 
35b0: 62 65 63 6f 6d 65 0a 09 23 20 73 65 76 65 72 65  become..# severe
35c0: 64 20 66 72 6f 6d 20 74 68 65 69 72 20 70 61 72  d from their par
35d0: 65 6e 74 2c 20 6d 61 6b 69 6e 67 20 74 68 65 6d  ent, making them
35e0: 20 74 68 65 69 72 20 6f 77 6e 20 72 6f 6f 74 2e   their own root.
35f0: 0a 09 73 65 74 20 6d 79 72 6f 6f 74 73 20 5b 6c  ..set myroots [l
3600: 69 73 74 20 24 6d 79 72 6f 6f 74 5d 0a 09 72 65  ist $myroot]..re
3610: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
3620: 70 72 6f 63 20 44 65 74 65 72 6d 69 6e 65 52 65  proc DetermineRe
3630: 76 69 73 69 6f 6e 4f 70 65 72 61 74 69 6f 6e 73  visionOperations
3640: 20 7b 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 6d   {} {..upvar 1 m
3650: 79 72 65 76 69 73 69 6f 6e 73 20 6d 79 72 65 76  yrevisions myrev
3660: 69 73 69 6f 6e 73 0a 09 66 6f 72 65 61 63 68 20  isions..foreach 
3670: 72 65 76 20 24 6d 79 72 65 76 69 73 69 6f 6e 73  rev $myrevisions
3680: 20 7b 20 24 72 65 76 20 64 65 74 65 72 6d 69 6e   { $rev determin
3690: 65 6f 70 65 72 61 74 69 6f 6e 20 7d 0a 09 72 65  eoperation }..re
36a0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
36b0: 70 72 6f 63 20 44 65 74 65 72 6d 69 6e 65 4c 69  proc DetermineLi
36c0: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74  nesOfDevelopment
36d0: 20 7b 7d 20 7b 0a 09 23 20 46 6f 72 20 72 65 76   {} {..# For rev
36e0: 69 73 69 6f 6e 73 20 74 68 69 73 20 68 61 73 20  isions this has 
36f0: 62 65 65 6e 20 64 6f 6e 65 20 61 6c 72 65 61 64  been done alread
3700: 79 2c 20 69 6e 20 27 65 78 74 65 6e 64 27 2e 20  y, in 'extend'. 
3710: 4e 6f 77 0a 09 23 20 77 65 20 64 6f 20 74 68 69  Now..# we do thi
3720: 73 20 66 6f 72 20 74 68 65 20 62 72 61 6e 63 68  s for the branch
3730: 65 73 20 61 6e 64 20 74 61 67 73 2e 0a 0a 09 75  es and tags....u
3740: 70 76 61 72 20 31 20 73 65 6c 66 20 73 65 6c 66  pvar 1 self self
3750: 20 6d 79 62 72 61 6e 63 68 65 73 20 6d 79 62 72   mybranches mybr
3760: 61 6e 63 68 65 73 20 6d 79 74 61 67 73 20 6d 79  anches mytags my
3770: 74 61 67 73 20 6d 79 74 72 75 6e 6b 20 6d 79 74  tags mytrunk myt
3780: 72 75 6e 6b 0a 0a 09 66 6f 72 65 61 63 68 20 7b  runk...foreach {
3790: 5f 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79  _ branch} [array
37a0: 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d   get mybranches]
37b0: 20 7b 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20   {..    $branch 
37c0: 73 65 74 6c 6f 64 20 5b 47 65 74 4c 4f 44 20 5b  setlod [GetLOD [
37d0: 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 72 65  $branch parentre
37e0: 76 6e 72 5d 5d 0a 09 7d 0a 0a 09 66 6f 72 65 61  vnr]]..}...forea
37f0: 63 68 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b  ch {_ taglist} [
3800: 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73  array get mytags
3810: 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68  ] {..    foreach
3820: 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 0a   tag $taglist {.
3830: 09 09 24 74 61 67 20 73 65 74 6c 6f 64 20 5b 47  ..$tag setlod [G
3840: 65 74 4c 4f 44 20 5b 24 74 61 67 20 74 61 67 72  etLOD [$tag tagr
3850: 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 09 7d  evnr]]..    }..}
3860: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
3870: 20 20 20 20 70 72 6f 63 20 47 65 74 4c 4f 44 20      proc GetLOD 
3880: 7b 72 65 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b  {revnr} {..if {[
3890: 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72  rev istrunkrevnr
38a0: 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20   $revnr]} {..   
38b0: 20 75 70 76 61 72 20 31 20 6d 79 74 72 75 6e 6b   upvar 1 mytrunk
38c0: 20 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20 72 65   mytrunk..    re
38d0: 74 75 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09 7d  turn $mytrunk..}
38e0: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 75 70 76   else {..    upv
38f0: 61 72 20 31 20 73 65 6c 66 20 73 65 6c 66 0a 09  ar 1 self self..
3900: 20 20 20 20 72 65 74 75 72 6e 20 5b 24 73 65 6c      return [$sel
3910: 66 20 52 65 76 32 42 72 61 6e 63 68 20 24 72 65  f Rev2Branch $re
3920: 76 6e 72 5d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20  vnr]..}.    }.. 
3930: 20 20 20 70 72 6f 63 20 48 61 6e 64 6c 65 4e 6f     proc HandleNo
3940: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61  nTrunkDefaultBra
3950: 6e 63 68 20 7b 7d 20 7b 0a 09 75 70 76 61 72 20  nch {} {..upvar 
3960: 31 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 6d 79  1 myprincipal my
3970: 70 72 69 6e 63 69 70 61 6c 20 6d 79 72 6f 6f 74  principal myroot
3980: 20 6d 79 72 6f 6f 74 20 6d 79 62 72 61 6e 63 68   myroot mybranch
3990: 65 73 20 6d 79 62 72 61 6e 63 68 65 73 20 6d 79  es mybranches my
39a0: 69 6d 70 6f 72 74 65 64 20 6d 79 69 6d 70 6f 72  imported myimpor
39b0: 74 65 64 20 6d 79 72 6f 6f 74 73 20 6d 79 72 6f  ted myroots myro
39c0: 6f 74 73 20 6d 79 72 65 76 20 6d 79 72 65 76 0a  ots myrev myrev.
39d0: 0a 09 73 65 74 20 72 65 76 6c 69 73 74 20 5b 4e  ..set revlist [N
39e0: 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 65  onTrunkDefaultRe
39f0: 76 69 73 69 6f 6e 73 5d 0a 09 69 66 20 7b 21 5b  visions]..if {![
3a00: 6c 6c 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74  llength $revlist
3a10: 5d 7d 20 72 65 74 75 72 6e 0a 0a 09 41 64 6a 75  ]} return...Adju
3a20: 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c  stNonTrunkDefaul
3a30: 74 42 72 61 6e 63 68 20 24 72 65 76 6c 69 73 74  tBranch $revlist
3a40: 0a 09 43 68 65 63 6b 4c 4f 44 73 0a 09 72 65 74  ..CheckLODs..ret
3a50: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  urn.    }..    p
3a60: 72 6f 63 20 4e 6f 6e 54 72 75 6e 6b 44 65 66 61  roc NonTrunkDefa
3a70: 75 6c 74 52 65 76 69 73 69 6f 6e 73 20 7b 7d 20  ultRevisions {} 
3a80: 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76  {..# From cvs2sv
3a90: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
3aa0: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 77 69 74  explanation (wit
3ab0: 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 0a  h modifications.
3ac0: 09 23 20 66 6f 72 20 6f 75 72 20 61 6c 67 6f 72  .# for our algor
3ad0: 69 74 68 6d 29 3a 0a 0a 09 23 20 44 65 74 65 72  ithm):...# Deter
3ae0: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
3af0: 72 65 20 61 72 65 20 61 6e 79 20 6e 6f 6e 2d 74  re are any non-t
3b00: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61  runk default bra
3b10: 6e 63 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73  nch..# revisions
3b20: 2e 0a 0a 09 23 20 49 66 20 61 20 6e 6f 6e 2d 74  ....# If a non-t
3b30: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61  runk default bra
3b40: 6e 63 68 20 69 73 20 64 65 74 65 72 6d 69 6e 65  nch is determine
3b50: 64 20 74 6f 20 68 61 76 65 20 65 78 69 73 74 65  d to have existe
3b60: 64 2c 0a 09 23 20 72 65 74 75 72 6e 20 61 20 6c  d,..# return a l
3b70: 69 73 74 20 6f 66 20 6f 62 6a 65 63 74 73 20 66  ist of objects f
3b80: 6f 72 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73  or all revisions
3b90: 20 74 68 61 74 20 77 65 72 65 20 6f 6e 63 65 0a   that were once.
3ba0: 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66  .# non-trunk def
3bb0: 61 75 6c 74 20 72 65 76 69 73 69 6f 6e 73 2c 20  ault revisions, 
3bc0: 69 6e 20 64 65 70 65 6e 64 65 6e 63 79 20 6f 72  in dependency or
3bd0: 64 65 72 20 28 69 2e 65 2e 20 72 6f 6f 74 0a 09  der (i.e. root..
3be0: 23 20 66 69 72 73 74 29 2e 0a 0a 09 23 20 54 68  # first)....# Th
3bf0: 65 72 65 20 61 72 65 20 74 77 6f 20 63 61 73 65  ere are two case
3c00: 73 20 74 6f 20 68 61 6e 64 6c 65 3a 0a 0a 09 23  s to handle:...#
3c10: 20 4f 6e 65 20 63 61 73 65 20 69 73 20 73 69 6d   One case is sim
3c20: 70 6c 65 2e 20 20 54 68 65 20 52 43 53 20 66 69  ple.  The RCS fi
3c30: 6c 65 20 6c 69 73 74 73 20 61 20 64 65 66 61 75  le lists a defau
3c40: 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 65 78 70  lt branch..# exp
3c50: 6c 69 63 69 74 6c 79 20 69 6e 20 69 74 73 20 68  licitly in its h
3c60: 65 61 64 65 72 2c 20 73 75 63 68 20 61 73 20 27  eader, such as '
3c70: 31 2e 31 2e 31 27 2e 20 20 49 6e 20 74 68 69 73  1.1.1'.  In this
3c80: 20 63 61 73 65 2c 20 77 65 0a 09 23 20 6b 6e 6f   case, we..# kno
3c90: 77 20 74 68 61 74 20 65 76 65 72 79 20 72 65 76  w that every rev
3ca0: 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20 76 65 6e  ision on the ven
3cb0: 64 6f 72 20 62 72 61 6e 63 68 20 69 73 20 74 6f  dor branch is to
3cc0: 20 62 65 0a 09 23 20 74 72 65 61 74 65 64 20 61   be..# treated a
3cd0: 73 20 68 65 61 64 20 6f 66 20 74 72 75 6e 6b 20  s head of trunk 
3ce0: 61 74 20 74 68 61 74 20 70 6f 69 6e 74 20 69 6e  at that point in
3cf0: 20 74 69 6d 65 2e 0a 0a 09 23 20 42 75 74 20 74   time....# But t
3d00: 68 65 72 65 27 73 20 61 6c 73 6f 20 61 20 64 65  here's also a de
3d10: 67 65 6e 65 72 61 74 65 20 63 61 73 65 2e 20 20  generate case.  
3d20: 54 68 65 20 52 43 53 20 66 69 6c 65 20 64 6f 65  The RCS file doe
3d30: 73 20 6e 6f 74 0a 09 23 20 63 75 72 72 65 6e 74  s not..# current
3d40: 6c 79 20 68 61 76 65 20 61 20 64 65 66 61 75 6c  ly have a defaul
3d50: 74 20 62 72 61 6e 63 68 2c 20 79 65 74 20 77 65  t branch, yet we
3d60: 20 63 61 6e 20 64 65 64 75 63 65 20 74 68 61 74   can deduce that
3d70: 20 66 6f 72 0a 09 23 20 73 6f 6d 65 20 70 65 72   for..# some per
3d80: 69 6f 64 20 69 6e 20 74 68 65 20 70 61 73 74 20  iod in the past 
3d90: 69 74 20 70 72 6f 62 61 62 6c 79 20 2a 64 69 64  it probably *did
3da0: 2a 20 68 61 76 65 20 6f 6e 65 2e 20 20 46 6f 72  * have one.  For
3db0: 0a 09 23 20 65 78 61 6d 70 6c 65 2c 20 74 68 65  ..# example, the
3dc0: 20 66 69 6c 65 20 68 61 73 20 76 65 6e 64 6f 72   file has vendor
3dd0: 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31   revisions 1.1.1
3de0: 2e 31 20 2d 3e 20 31 2e 31 2e 31 2e 39 36 2c 0a  .1 -> 1.1.1.96,.
3df0: 09 23 20 61 6c 6c 20 6f 66 20 77 68 69 63 68 20  .# all of which 
3e00: 61 72 65 20 64 61 74 65 64 20 62 65 66 6f 72 65  are dated before
3e10: 20 31 2e 32 2c 20 61 6e 64 20 74 68 65 6e 20 69   1.2, and then i
3e20: 74 20 68 61 73 20 31 2e 31 2e 31 2e 39 37 0a 09  t has 1.1.1.97..
3e30: 23 20 2d 3e 20 31 2e 31 2e 31 2e 31 30 30 20 64  # -> 1.1.1.100 d
3e40: 61 74 65 64 20 61 66 74 65 72 20 31 2e 32 2e 20  ated after 1.2. 
3e50: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77   In this case, w
3e60: 65 20 73 68 6f 75 6c 64 0a 09 23 20 72 65 63 6f  e should..# reco
3e70: 72 64 20 31 2e 31 2e 31 2e 39 36 20 61 73 20 74  rd 1.1.1.96 as t
3e80: 68 65 20 6c 61 73 74 20 76 65 6e 64 6f 72 20 72  he last vendor r
3e90: 65 76 69 73 69 6f 6e 20 74 6f 20 68 61 76 65 20  evision to have 
3ea0: 62 65 65 6e 20 74 68 65 0a 09 23 20 68 65 61 64  been the..# head
3eb0: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
3ec0: 62 72 61 6e 63 68 2e 0a 0a 09 75 70 76 61 72 20  branch....upvar 
3ed0: 31 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 6d 79  1 myprincipal my
3ee0: 70 72 69 6e 63 69 70 61 6c 20 6d 79 72 6f 6f 74  principal myroot
3ef0: 20 6d 79 72 6f 6f 74 20 6d 79 62 72 61 6e 63 68   myroot mybranch
3f00: 65 73 20 6d 79 62 72 61 6e 63 68 65 73 20 6d 79  es mybranches my
3f10: 69 6d 70 6f 72 74 65 64 20 6d 79 69 6d 70 6f 72  imported myimpor
3f20: 74 65 64 0a 0a 09 69 66 20 7b 24 6d 79 70 72 69  ted...if {$mypri
3f30: 6e 63 69 70 61 6c 20 6e 65 20 22 22 7d 20 7b 0a  ncipal ne ""} {.
3f40: 09 20 20 20 20 23 20 54 68 65 72 65 20 69 73 20  .    # There is 
3f50: 73 74 69 6c 6c 20 61 20 64 65 66 61 75 6c 74 20  still a default 
3f60: 62 72 61 6e 63 68 3b 20 74 68 61 74 20 6d 65 61  branch; that mea
3f70: 6e 73 20 74 68 61 74 20 61 6c 6c 0a 09 20 20 20  ns that all..   
3f80: 20 23 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20   # revisions on 
3f90: 74 68 61 74 20 62 72 61 6e 63 68 20 67 65 74 20  that branch get 
3fa0: 6d 61 72 6b 65 64 2e 0a 0a 09 20 20 20 20 6c 6f  marked....    lo
3fb0: 67 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22  g write 5 file "
3fc0: 46 6f 75 6e 64 20 65 78 70 6c 69 63 69 74 6c 79  Found explicitly
3fd0: 20 6d 61 72 6b 65 64 20 4e 54 44 42 22 0a 0a 09   marked NTDB"...
3fe0: 20 20 20 20 73 65 74 20 72 6e 65 78 74 20 5b 24      set rnext [$
3ff0: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20  myroot child].. 
4000: 20 20 20 69 66 20 7b 24 72 6e 65 78 74 20 6e 65     if {$rnext ne
4010: 20 22 22 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65   ""} {...trouble
4020: 20 66 61 74 61 6c 20 22 46 69 6c 65 20 77 69 74   fatal "File wit
4030: 68 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  h default branch
4040: 20 24 6d 79 70 72 69 6e 63 69 70 61 6c 20 61 6c   $myprincipal al
4050: 73 6f 20 68 61 73 20 72 65 76 69 73 69 6f 6e 20  so has revision 
4060: 5b 24 72 6e 65 78 74 20 72 65 76 6e 72 5d 22 0a  [$rnext revnr]".
4070: 09 09 72 65 74 75 72 6e 0a 09 20 20 20 20 7d 0a  ..return..    }.
4080: 0a 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24  ..    set rev [$
4090: 6d 79 62 72 61 6e 63 68 65 73 28 24 6d 79 70 72  mybranches($mypr
40a0: 69 6e 63 69 70 61 6c 29 20 63 68 69 6c 64 5d 0a  incipal) child].
40b0: 09 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a  .    set res {}.
40c0: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65  ..    while {$re
40d0: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70  v ne ""} {...lap
40e0: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09  pend res $rev...
40f0: 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68  set rev [$rev ch
4100: 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20  ild]..    }...  
4110: 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09    return $res...
4120: 7d 20 65 6c 73 65 69 66 20 7b 24 6d 79 69 6d 70  } elseif {$myimp
4130: 6f 72 74 65 64 7d 20 7b 0a 09 20 20 20 20 23 20  orted} {..    # 
4140: 4e 6f 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  No default branc
4150: 68 2c 20 62 75 74 20 74 68 65 20 66 69 6c 65 20  h, but the file 
4160: 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 20  appears to have 
4170: 62 65 65 6e 0a 09 20 20 20 20 23 20 69 6d 70 6f  been..    # impo
4180: 72 74 65 64 2e 20 20 53 6f 20 6f 75 72 20 65 64  rted.  So our ed
4190: 75 63 61 74 65 64 20 67 75 65 73 73 20 69 73 20  ucated guess is 
41a0: 74 68 61 74 20 61 6c 6c 20 72 65 76 69 73 69 6f  that all revisio
41b0: 6e 73 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 65  ns..    # on the
41c0: 20 27 31 2e 31 2e 31 27 20 62 72 61 6e 63 68 20   '1.1.1' branch 
41d0: 77 69 74 68 20 74 69 6d 65 73 74 61 6d 70 73 20  with timestamps 
41e0: 70 72 69 6f 72 20 74 6f 20 74 68 65 0a 09 20 20  prior to the..  
41f0: 20 20 23 20 74 69 6d 65 73 74 61 6d 70 20 6f 66    # timestamp of
4200: 20 27 31 2e 32 27 20 77 65 72 65 20 6e 6f 6e 2d   '1.2' were non-
4210: 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72  trunk default br
4220: 61 6e 63 68 0a 09 20 20 20 20 23 20 72 65 76 69  anch..    # revi
4230: 73 69 6f 6e 73 2e 0a 09 20 20 20 20 0a 09 20 20  sions...    ..  
4240: 20 20 23 20 54 68 69 73 20 72 65 61 6c 6c 79 20    # This really 
4250: 6f 6e 6c 79 20 70 72 6f 63 65 73 73 65 73 20 73  only processes s
4260: 74 61 6e 64 61 72 64 20 27 31 2e 31 2e 31 2e 2a  tandard '1.1.1.*
4270: 27 2d 73 74 79 6c 65 0a 09 20 20 20 20 23 20 76  '-style..    # v
4280: 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 2e  endor revisions.
4290: 20 20 4f 6e 65 20 63 6f 75 6c 64 20 63 6f 6e 63    One could conc
42a0: 65 69 76 61 62 6c 79 20 68 61 76 65 20 61 20 66  eivably have a f
42b0: 69 6c 65 0a 09 20 20 20 20 23 20 77 68 6f 73 65  ile..    # whose
42c0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
42d0: 69 73 20 31 2e 31 2e 33 20 6f 72 20 77 68 61 74  is 1.1.3 or what
42e0: 65 76 65 72 2c 20 6f 72 20 77 61 73 20 74 68 61  ever, or was tha
42f0: 74 0a 09 20 20 20 20 23 20 61 74 20 73 6f 6d 65  t..    # at some
4300: 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2c 20   point in time, 
4310: 77 69 74 68 20 76 65 6e 64 6f 72 20 72 65 76 69  with vendor revi
4320: 73 69 6f 6e 73 20 31 2e 31 2e 33 2e 31 2c 0a 09  sions 1.1.3.1,..
4330: 20 20 20 20 23 20 31 2e 31 2e 33 2e 32 2c 20 65      # 1.1.3.2, e
4340: 74 63 2e 20 20 42 75 74 20 77 69 74 68 20 74 68  tc.  But with th
4350: 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  e default branch
4360: 20 67 6f 6e 65 20 6e 6f 77 2c 0a 09 20 20 20 20   gone now,..    
4370: 23 20 77 65 27 64 20 68 61 76 65 20 6e 6f 20 62  # we'd have no b
4380: 61 73 69 73 20 66 6f 72 20 61 73 73 75 6d 69 6e  asis for assumin
4390: 67 20 74 68 61 74 20 74 68 65 20 6e 6f 6e 2d 73  g that the non-s
43a0: 74 61 6e 64 61 72 64 0a 09 20 20 20 20 23 20 76  tandard..    # v
43b0: 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 68 61 64  endor branch had
43c0: 20 65 76 65 72 20 62 65 65 6e 20 74 68 65 20 64   ever been the d
43d0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 61 6e  efault branch an
43e0: 79 77 61 79 2e 0a 09 20 20 20 20 0a 09 20 20 20  yway...    ..   
43f0: 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77 65 20   # Note that we 
4400: 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73  rely on comparis
4410: 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68 65 20  ons between the 
4420: 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20 20 20  timestamps..    
4430: 23 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f  # of the revisio
4440: 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72  ns on the vendor
4450: 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68 61 74   branch and that
4460: 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76 69 73   of..    # revis
4470: 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20 74 68  ion 1.2, even th
4480: 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73 74 61  ough the timesta
4490: 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09 20 20  mps might be..  
44a0: 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20 64 75    # incorrect du
44b0: 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e  e to clock skew.
44c0: 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20 61 20    We could do a 
44d0: 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20 23 20  slightly..    # 
44e0: 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20 77 65  better job if we
44f0: 20 75 73 65 64 20 74 68 65 20 63 68 61 6e 67 65   used the change
4500: 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73 2c 20  set timestamps, 
4510: 61 73 20 69 74 20 69 73 0a 09 20 20 20 20 23 20  as it is..    # 
4520: 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 74 68  possible that th
4530: 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 74  e dependencies t
4540: 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20  hat went into.. 
4550: 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69 6e 67     # determining
4560: 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61 6d 70   those timestamp
4570: 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63 75 72  s are more accur
4580: 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20 20 23  ate.  But..    #
4590: 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65 71 75   that would requ
45a0: 69 72 65 20 61 6e 20 65 78 74 72 61 20 70 61 73  ire an extra pas
45b0: 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20  s or two....    
45c0: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
45d0: 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31 2e 31  s mybranches(1.1
45e0: 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b  .1)]} { return {
45f0: 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72  } }...    log wr
4600: 69 74 65 20 35 20 66 69 6c 65 20 22 44 65 64 75  ite 5 file "Dedu
4610: 63 65 64 20 65 78 69 73 74 65 6e 63 65 20 6f 66  ced existence of
4620: 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74   NTDB"...    set
4630: 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e 63 68   rev  [$mybranch
4640: 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d  es(1.1.1) child]
4650: 0a 09 20 20 20 20 73 65 74 20 72 65 73 20 20 7b  ..    set res  {
4660: 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f 70 20  }..    set stop 
4670: 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a  [$myroot child].
4680: 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20  ..    if {$stop 
4690: 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47 65 74  eq ""} {...# Get
46a0: 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74   everything on t
46b0: 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68 69 6c  he branch...whil
46c0: 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b  e {$rev ne ""} {
46d0: 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 72  ...    lappend r
46e0: 65 73 20 24 72 65 76 0a 09 09 20 20 20 20 73 65  es $rev...    se
46f0: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c  t rev [$rev chil
4700: 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c  d]...}..    } el
4710: 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74  se {...# Collect
4720: 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e 20 74   everything on t
4730: 68 65 20 62 72 61 6e 63 68 20 77 68 69 63 68 20  he branch which 
4740: 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a 09 09  seems to have...
4750: 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64  # been committed
4760: 20 62 65 66 6f 72 65 20 74 68 65 20 66 69 72 73   before the firs
4770: 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20  t primary child 
4780: 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f 74 20  of the...# root 
4790: 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20  revision....set 
47a0: 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f 70 20  stopdate [$stop 
47b0: 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24  date]...while {$
47c0: 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20  rev ne ""} {... 
47d0: 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64 61 74     if {[$rev dat
47e0: 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d  e] >= $stopdate}
47f0: 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c 61 70   break...    lap
4800: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09  pend res $rev...
4810: 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65      set rev [$re
4820: 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20  v child]...}..  
4830: 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e    }...    return
4840: 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b   $res...} else {
4850: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a  ..    return {}.
4860: 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  .}.    }..    pr
4870: 6f 63 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e  oc AdjustNonTrun
4880: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b  kDefaultBranch {
4890: 72 65 76 6c 69 73 74 7d 20 7b 0a 09 75 70 76 61  revlist} {..upva
48a0: 72 20 31 20 6d 79 72 6f 6f 74 20 6d 79 72 6f 6f  r 1 myroot myroo
48b0: 74 20 6d 79 69 6d 70 6f 72 74 65 64 20 6d 79 69  t myimported myi
48c0: 6d 70 6f 72 74 65 64 20 6d 79 72 6f 6f 74 73 20  mported myroots 
48d0: 6d 79 72 6f 6f 74 73 20 6d 79 72 65 76 20 6d 79  myroots myrev my
48e0: 72 65 76 20 6d 79 62 72 61 6e 63 68 65 73 20 6d  rev mybranches m
48f0: 79 62 72 61 6e 63 68 65 73 0a 09 73 65 74 20 73  ybranches..set s
4900: 74 6f 70 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69  top [$myroot chi
4910: 6c 64 5d 20 3b 23 20 72 65 76 20 27 31 2e 32 27  ld] ;# rev '1.2'
4920: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 35 20 66  ...log write 5 f
4930: 69 6c 65 20 22 41 64 6a 75 73 74 69 6e 67 20 4e  ile "Adjusting N
4940: 54 44 42 20 63 6f 6e 74 61 69 6e 69 6e 67 20 5b  TDB containing [
4950: 6e 73 70 20 5b 6c 6c 65 6e 67 74 68 20 24 72 65  nsp [llength $re
4960: 76 6c 69 73 74 5d 20 72 65 76 69 73 69 6f 6e 5d  vlist] revision]
4970: 22 0a 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73  "...# From cvs2s
4980: 76 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  vn the following
4990: 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 77 69   explanation (wi
49a0: 74 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73  th modifications
49b0: 0a 09 23 20 66 6f 72 20 6f 75 72 20 61 6c 67 6f  ..# for our algo
49c0: 72 69 74 68 6d 29 3a 0a 0a 09 23 20 41 64 6a 75  rithm):...# Adju
49d0: 73 74 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b  st the non-trunk
49e0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
49f0: 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20  revisions found 
4a00: 69 6e 20 74 68 65 0a 09 23 20 27 72 65 76 6c 69  in the..# 'revli
4a10: 73 74 27 2e 0a 0a 09 23 20 27 6d 79 69 6d 70 6f  st'....# 'myimpo
4a20: 72 74 65 64 27 20 69 73 20 61 20 62 6f 6f 6c 65  rted' is a boole
4a30: 61 6e 20 66 6c 61 67 20 69 6e 64 69 63 61 74 69  an flag indicati
4a40: 6e 67 20 77 68 65 74 68 65 72 20 74 68 69 73 20  ng whether this 
4a50: 66 69 6c 65 0a 09 23 20 61 70 70 65 61 72 73 20  file..# appears 
4a60: 74 6f 20 68 61 76 65 20 62 65 65 6e 20 69 6d 70  to have been imp
4a70: 6f 72 74 65 64 2c 20 77 68 69 63 68 20 61 6c 73  orted, which als
4a80: 6f 20 6d 65 61 6e 73 20 74 68 61 74 0a 09 23 20  o means that..# 
4a90: 72 65 76 69 73 69 6f 6e 20 31 2e 31 20 68 61 73  revision 1.1 has
4aa0: 20 61 20 67 65 6e 65 72 61 74 65 64 20 6c 6f 67   a generated log
4ab0: 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 6e 65   message that ne
4ac0: 65 64 20 6e 6f 74 20 62 65 0a 09 23 20 70 72 65  ed not be..# pre
4ad0: 73 65 72 76 65 64 2e 20 20 27 72 65 76 6c 69 73  served.  'revlis
4ae0: 74 27 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20  t' is a list of 
4af0: 6f 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65  object reference
4b00: 73 20 66 6f 72 20 74 68 65 0a 09 23 20 72 65 76  s for the..# rev
4b10: 69 73 69 6f 6e 73 20 74 68 61 74 20 68 61 76 65  isions that have
4b20: 20 62 65 65 6e 20 64 65 74 65 72 6d 69 6e 65 64   been determined
4b30: 20 74 6f 20 62 65 20 6e 6f 6e 2d 74 72 75 6e 6b   to be non-trunk
4b40: 20 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61 6e   default..# bran
4b50: 63 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09  ch revisions....
4b60: 23 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  # Note that the 
4b70: 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f  first revision o
4b80: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72  n the default br
4b90: 61 6e 63 68 20 69 73 0a 09 23 20 68 61 6e 64 6c  anch is..# handl
4ba0: 65 64 20 73 74 72 61 6e 67 65 6c 79 20 62 79 20  ed strangely by 
4bb0: 43 56 53 2e 20 20 49 66 20 61 20 66 69 6c 65 20  CVS.  If a file 
4bc0: 69 73 20 69 6d 70 6f 72 74 65 64 20 28 61 73 20  is imported (as 
4bd0: 6f 70 70 6f 73 65 64 0a 09 23 20 74 6f 20 62 65  opposed..# to be
4be0: 69 6e 67 20 61 64 64 65 64 29 2c 20 43 56 53 20  ing added), CVS 
4bf0: 63 72 65 61 74 65 73 20 61 20 31 2e 31 20 72 65  creates a 1.1 re
4c00: 76 69 73 69 6f 6e 2c 20 74 68 65 6e 20 63 72 65  vision, then cre
4c10: 61 74 65 73 20 61 0a 09 23 20 76 65 6e 64 6f 72  ates a..# vendor
4c20: 20 62 72 61 6e 63 68 20 31 2e 31 2e 31 20 62 61   branch 1.1.1 ba
4c30: 73 65 64 20 6f 6e 20 31 2e 31 2c 20 74 68 65 6e  sed on 1.1, then
4c40: 20 63 72 65 61 74 65 73 20 61 20 31 2e 31 2e 31   creates a 1.1.1
4c50: 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 74  .1..# revision t
4c60: 68 61 74 20 69 73 20 69 64 65 6e 74 69 63 61 6c  hat is identical
4c70: 20 74 6f 20 74 68 65 20 31 2e 31 20 72 65 76 69   to the 1.1 revi
4c80: 73 69 6f 6e 20 28 69 2e 65 2e 2c 20 69 74 73 0a  sion (i.e., its.
4c90: 09 23 20 64 65 6c 74 61 74 65 78 74 20 69 73 20  .# deltatext is 
4ca0: 65 6d 70 74 79 29 2e 20 20 54 68 65 20 6c 6f 67  empty).  The log
4cb0: 20 6d 65 73 73 61 67 65 20 74 68 61 74 20 74 68   message that th
4cc0: 65 20 75 73 65 72 20 74 79 70 65 64 0a 09 23 20  e user typed..# 
4cd0: 77 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67 20 69  when importing i
4ce0: 73 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  s stored with th
4cf0: 65 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69  e 1.1.1.1 revisi
4d00: 6f 6e 2e 20 20 54 68 65 20 31 2e 31 0a 09 23 20  on.  The 1.1..# 
4d10: 72 65 76 69 73 69 6f 6e 20 61 6c 77 61 79 73 20  revision always 
4d20: 63 6f 6e 74 61 69 6e 73 20 61 20 73 74 61 6e 64  contains a stand
4d30: 61 72 64 2c 20 67 65 6e 65 72 61 74 65 64 20 6c  ard, generated l
4d40: 6f 67 20 6d 65 73 73 61 67 65 2c 0a 09 23 20 27  og message,..# '
4d50: 49 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f 6e  Initial revision
4d60: 5c 6e 27 2e 0a 0a 09 23 20 57 68 65 6e 20 77 65  \n'....# When we
4d70: 20 64 65 74 65 63 74 20 61 20 73 74 72 61 69 67   detect a straig
4d80: 68 74 66 6f 72 77 61 72 64 20 69 6d 70 6f 72 74  htforward import
4d90: 20 6c 69 6b 65 20 74 68 69 73 2c 20 77 65 20 77   like this, we w
4da0: 61 6e 74 0a 09 23 20 74 6f 20 68 61 6e 64 6c 65  ant..# to handle
4db0: 20 69 74 20 62 79 20 64 65 6c 65 74 69 6e 67 20   it by deleting 
4dc0: 74 68 65 20 31 2e 31 20 72 65 76 69 73 69 6f 6e  the 1.1 revision
4dd0: 20 28 77 68 69 63 68 20 64 6f 65 73 6e 27 74 0a   (which doesn't.
4de0: 09 23 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 75  .# contain any u
4df0: 73 65 66 75 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  seful informatio
4e00: 6e 29 20 61 6e 64 20 6d 61 6b 69 6e 67 20 31 2e  n) and making 1.
4e10: 31 2e 31 2e 31 20 69 6e 74 6f 20 61 6e 0a 09 23  1.1.1 into an..#
4e20: 20 69 6e 64 65 70 65 6e 64 65 6e 74 20 72 6f 6f   independent roo
4e30: 74 20 69 6e 20 74 68 65 20 66 69 6c 65 27 73 20  t in the file's 
4e40: 64 65 70 65 6e 64 65 6e 63 79 20 74 72 65 65 2e  dependency tree.
4e50: 20 20 49 6e 20 53 56 4e 2c 0a 09 23 20 31 2e 31    In SVN,..# 1.1
4e60: 2e 31 2e 31 20 77 69 6c 6c 20 62 65 20 61 64 64  .1.1 will be add
4e70: 65 64 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74  ed directly to t
4e80: 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68  he vendor branch
4e90: 20 77 69 74 68 20 69 74 73 0a 09 23 20 69 6e 69   with its..# ini
4ea0: 74 69 61 6c 20 63 6f 6e 74 65 6e 74 2e 20 20 54  tial content.  T
4eb0: 68 65 6e 20 69 6e 20 61 20 73 70 65 63 69 61 6c  hen in a special
4ec0: 20 27 70 6f 73 74 2d 63 6f 6d 6d 69 74 27 2c 20   'post-commit', 
4ed0: 74 68 65 0a 09 23 20 31 2e 31 2e 31 2e 31 20 72  the..# 1.1.1.1 r
4ee0: 65 76 69 73 69 6f 6e 20 69 73 20 63 6f 70 69 65  evision is copie
4ef0: 64 20 62 61 63 6b 20 74 6f 20 74 72 75 6e 6b 2e  d back to trunk.
4f00: 0a 0a 09 23 20 49 66 20 74 68 65 20 75 73 65 72  ...# If the user
4f10: 20 69 6d 70 6f 72 74 73 20 61 67 61 69 6e 20 74   imports again t
4f20: 6f 20 74 68 65 20 73 61 6d 65 20 76 65 6e 64 6f  o the same vendo
4f30: 72 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20 43  r branch, then C
4f40: 56 53 0a 09 23 20 63 72 65 61 74 65 73 20 72 65  VS..# creates re
4f50: 76 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 32 2c  visions 1.1.1.2,
4f60: 20 31 2e 31 2e 31 2e 33 2c 20 65 74 63 2e 20 6f   1.1.1.3, etc. o
4f70: 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61  n the vendor bra
4f80: 6e 63 68 2c 0a 09 23 20 2a 77 69 74 68 6f 75 74  nch,..# *without
4f90: 2a 20 63 6f 75 6e 74 65 72 70 61 72 74 73 20 69  * counterparts i
4fa0: 6e 20 74 72 75 6e 6b 20 28 65 76 65 6e 20 74 68  n trunk (even th
4fb0: 6f 75 67 68 20 74 68 65 73 65 20 72 65 76 69 73  ough these revis
4fc0: 69 6f 6e 73 0a 09 23 20 65 66 66 65 63 74 69 76  ions..# effectiv
4fd0: 65 6c 79 20 70 6c 61 79 20 74 68 65 20 72 6f 6c  ely play the rol
4fe0: 65 20 6f 66 20 74 72 75 6e 6b 20 72 65 76 69 73  e of trunk revis
4ff0: 69 6f 6e 73 29 2e 20 20 53 6f 20 61 66 74 65 72  ions).  So after
5000: 20 77 65 20 61 64 64 0a 09 23 20 73 75 63 68 20   we add..# such 
5010: 72 65 76 69 73 69 6f 6e 73 20 74 6f 20 74 68 65  revisions to the
5020: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20   vendor branch, 
5030: 77 65 20 61 6c 73 6f 20 63 6f 70 79 20 74 68 65  we also copy the
5040: 6d 20 62 61 63 6b 20 74 6f 0a 09 23 20 74 72 75  m back to..# tru
5050: 6e 6b 20 69 6e 20 70 6f 73 74 2d 63 6f 6d 6d 69  nk in post-commi
5060: 74 73 2e 0a 0a 09 23 20 57 65 20 6d 61 72 6b 20  ts....# We mark 
5070: 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20 66 6f  the revisions fo
5080: 75 6e 64 20 69 6e 20 27 72 65 76 6c 69 73 74 27  und in 'revlist'
5090: 20 61 73 20 64 65 66 61 75 6c 74 20 62 72 61 6e   as default bran
50a0: 63 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 2e  ch..# revisions.
50b0: 20 20 41 6c 73 6f 2c 20 69 66 20 74 68 65 20 72    Also, if the r
50c0: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20 68 61 73  oot revision has
50d0: 20 61 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64   a primary child
50e0: 0a 09 23 20 77 65 20 73 65 74 20 74 68 61 74 20  ..# we set that 
50f0: 72 65 76 69 73 69 6f 6e 20 74 6f 20 64 65 70 65  revision to depe
5100: 6e 64 20 6f 6e 20 74 68 65 20 6c 61 73 74 20 6e  nd on the last n
5110: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
5120: 0a 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73  ..# branch revis
5130: 69 6f 6e 20 61 6e 64 20 70 6f 73 73 69 62 6c 79  ion and possibly
5140: 20 61 64 6a 75 73 74 20 69 74 73 20 74 79 70 65   adjust its type
5150: 20 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 09   accordingly....
5160: 73 65 74 20 66 69 72 73 74 20 5b 6c 69 6e 64 65  set first [linde
5170: 78 20 24 72 65 76 6c 69 73 74 20 30 5d 0a 0a 09  x $revlist 0]...
5180: 6c 6f 67 20 77 72 69 74 65 20 36 20 66 69 6c 65  log write 6 file
5190: 20 22 3c 5b 24 66 69 72 73 74 20 72 65 76 6e 72   "<[$first revnr
51a0: 5d 3e 20 5b 65 78 70 72 20 7b 24 6d 79 69 6d 70  ]> [expr {$myimp
51b0: 6f 72 74 65 64 20 3f 20 22 69 6d 70 6f 72 74 65  orted ? "importe
51c0: 64 22 20 3a 20 22 6e 6f 74 20 69 6d 70 6f 72 74  d" : "not import
51d0: 65 64 22 7d 5d 2c 20 5b 24 66 69 72 73 74 20 6f  ed"}], [$first o
51e0: 70 65 72 61 74 69 6f 6e 5d 2c 20 5b 65 78 70 72  peration], [expr
51f0: 20 7b 5b 24 66 69 72 73 74 20 68 61 73 74 65 78   {[$first hastex
5200: 74 5d 20 3f 20 22 68 61 73 20 74 65 78 74 22 20  t] ? "has text" 
5210: 3a 20 22 6e 6f 20 74 65 78 74 22 7d 5d 22 0a 0a  : "no text"}]"..
5220: 09 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64  .if {$myimported
5230: 20 26 26 0a 09 20 20 20 20 5b 24 66 69 72 73 74   &&..    [$first
5240: 20 72 65 76 6e 72 5d 20 65 71 20 22 31 2e 31 2e   revnr] eq "1.1.
5250: 31 2e 31 22 20 26 26 0a 09 20 20 20 20 5b 24 66  1.1" &&..    [$f
5260: 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d 20  irst operation] 
5270: 65 71 20 22 63 68 61 6e 67 65 22 20 26 26 0a 09  eq "change" &&..
5280: 20 20 20 20 21 5b 24 66 69 72 73 74 20 68 61 73      ![$first has
5290: 74 65 78 74 5d 7d 20 7b 0a 0a 09 20 20 20 20 73  text]} {...    s
52a0: 65 74 20 72 65 76 31 31 20 5b 24 66 69 72 73 74  et rev11 [$first
52b0: 20 70 61 72 65 6e 74 5d 20 3b 20 23 20 41 73 73   parent] ; # Ass
52c0: 65 72 74 3a 20 53 68 6f 75 6c 64 20 62 65 20 6d  ert: Should be m
52d0: 79 72 6f 6f 74 2e 0a 09 20 20 20 20 6c 6f 67 20  yroot...    log 
52e0: 77 72 69 74 65 20 33 20 66 69 6c 65 20 22 52 65  write 3 file "Re
52f0: 6d 6f 76 69 6e 67 20 69 72 72 65 6c 65 76 61 6e  moving irrelevan
5300: 74 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 65 76  t revision [$rev
5310: 31 31 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 20  11 revnr]"...   
5320: 20 23 20 43 75 74 20 6f 75 74 20 74 68 65 20 6f   # Cut out the o
5330: 6c 64 20 6d 79 72 6f 6f 74 20 72 65 76 69 73 69  ld myroot revisi
5340: 6f 6e 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74  on....    ldelet
5350: 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31 31  e myroots $rev11
5360: 20 3b 20 23 20 4e 6f 74 20 61 20 72 6f 6f 74 20   ; # Not a root 
5370: 61 6e 79 20 6c 6f 6e 67 65 72 2e 0a 09 20 20 20  any longer...   
5380: 20 75 6e 73 65 74 20 6d 79 72 65 76 28 5b 24 72   unset myrev([$r
5390: 65 76 31 31 20 72 65 76 6e 72 5d 29 0a 0a 09 20  ev11 revnr])... 
53a0: 20 20 20 24 66 69 72 73 74 20 63 75 74 66 72 6f     $first cutfro
53b0: 6d 70 61 72 65 6e 74 20 3b 20 23 20 53 65 76 65  mparent ; # Seve
53c0: 72 20 72 65 76 69 73 69 6f 6e 20 66 72 6f 6d 20  r revision from 
53d0: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e  parent revision.
53e0: 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20  ..    if {$stop 
53f0: 6e 65 20 22 22 7d 20 7b 0a 09 09 24 73 74 6f 70  ne ""} {...$stop
5400: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09   cutfromparent..
5410: 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73  .lappend myroots
5420: 20 24 73 74 6f 70 20 3b 20 23 20 4e 65 77 20 72   $stop ; # New r
5430: 6f 6f 74 2c 20 61 66 74 65 72 20 76 65 6e 64 6f  oot, after vendo
5440: 72 20 62 72 61 6e 63 68 0a 09 20 20 20 20 7d 0a  r branch..    }.
5450: 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74 20  ..    # Cut out 
5460: 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63  the vendor branc
5470: 68 20 73 79 6d 62 6f 6c 0a 0a 09 20 20 20 20 73  h symbol...    s
5480: 65 74 20 76 65 6e 64 6f 72 20 5b 24 66 69 72 73  et vendor [$firs
5490: 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a  t parentbranch].
54a0: 09 20 20 20 20 69 66 20 7b 24 76 65 6e 64 6f 72  .    if {$vendor
54b0: 20 65 71 20 22 22 7d 20 7b 20 74 72 6f 75 62 6c   eq ""} { troubl
54c0: 65 20 69 6e 74 65 72 6e 61 6c 20 22 46 69 72 73  e internal "Firs
54d0: 74 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 20  t NTDB revision 
54e0: 68 61 73 20 6e 6f 20 62 72 61 6e 63 68 22 20 7d  has no branch" }
54f0: 0a 09 20 20 20 20 69 66 20 7b 5b 24 76 65 6e 64  ..    if {[$vend
5500: 6f 72 20 70 61 72 65 6e 74 5d 20 65 71 20 24 72  or parent] eq $r
5510: 65 76 31 31 7d 20 7b 0a 09 09 75 6e 73 65 74 20  ev11} {...unset 
5520: 6d 79 62 72 61 6e 63 68 65 73 28 5b 24 76 65 6e  mybranches([$ven
5530: 64 6f 72 20 62 72 61 6e 63 68 6e 72 5d 29 0a 09  dor branchnr])..
5540: 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 62 72  .$rev11 removebr
5550: 61 6e 63 68 20 20 20 20 20 20 20 20 24 76 65 6e  anch        $ven
5560: 64 6f 72 0a 09 09 24 72 65 76 31 31 20 72 65 6d  dor...$rev11 rem
5570: 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68  ovechildonbranch
5580: 20 24 66 69 72 73 74 0a 09 09 24 66 69 72 73 74   $first...$first
5590: 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 62 72   cutfromparentbr
55a0: 61 6e 63 68 0a 09 09 6c 61 70 70 65 6e 64 20 6d  anch...lappend m
55b0: 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a 09 20  yroots $first.. 
55c0: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 68 61     }...    # Cha
55d0: 6e 67 65 20 74 68 65 20 74 79 70 65 20 6f 66 20  nge the type of 
55e0: 66 69 72 73 74 20 28 74 79 70 69 63 61 6c 6c 79  first (typically
55f0: 20 66 72 6f 6d 20 43 68 61 6e 67 65 20 74 6f 20   from Change to 
5600: 41 64 64 29 3a 0a 09 20 20 20 20 24 66 69 72 73  Add):..    $firs
5610: 74 20 72 65 74 79 70 65 20 61 64 64 0a 0a 09 20  t retype add... 
5620: 20 20 20 23 20 4d 6f 76 65 20 61 6e 79 20 74 61     # Move any ta
5630: 67 73 20 61 6e 64 20 62 72 61 6e 63 68 65 73 20  gs and branches 
5640: 66 72 6f 6d 20 74 68 65 20 6f 6c 64 20 74 6f 20  from the old to 
5650: 74 68 65 20 6e 65 77 20 72 6f 6f 74 2e 0a 09 20  the new root... 
5660: 20 20 20 24 72 65 76 31 31 20 6d 6f 76 65 73 79     $rev11 movesy
5670: 6d 62 6f 6c 73 74 6f 20 24 66 69 72 73 74 0a 09  mbolsto $first..
5680: 7d 0a 0a 09 23 20 4d 61 72 6b 20 61 6c 6c 20 74  }...# Mark all t
5690: 68 65 20 73 70 65 63 69 61 6c 20 72 65 76 69 73  he special revis
56a0: 69 6f 6e 73 20 61 73 20 73 75 63 68 0a 09 66 6f  ions as such..fo
56b0: 72 65 61 63 68 20 72 65 76 20 24 72 65 76 6c 69  reach rev $revli
56c0: 73 74 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72  st {..    log wr
56d0: 69 74 65 20 33 20 66 69 6c 65 20 22 52 65 76 69  ite 3 file "Revi
56e0: 73 69 6f 6e 20 6f 6e 20 64 65 66 61 75 6c 74 20  sion on default 
56f0: 62 72 61 6e 63 68 3a 20 5b 24 72 65 76 20 72 65  branch: [$rev re
5700: 76 6e 72 5d 22 0a 09 20 20 20 20 24 72 65 76 20  vnr]"..    $rev 
5710: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63  isondefaultbranc
5720: 68 0a 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f 70  h..}...if {$stop
5730: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 23   ne ""} {..    #
5740: 20 52 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c 6f   Revision 1.2 lo
5750: 67 69 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20  gically follows 
5760: 74 68 65 20 69 6d 70 6f 72 74 65 64 20 72 65 76  the imported rev
5770: 69 73 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20 6e  isions,..    # n
5780: 6f 74 20 31 2e 31 2e 20 20 41 63 63 6f 72 64 69  ot 1.1.  Accordi
5790: 6e 67 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69 74  ngly, connect it
57a0: 20 74 6f 20 74 68 65 20 6c 61 73 74 20 4e 54 44   to the last NTD
57b0: 42 52 20 61 6e 64 0a 09 20 20 20 20 23 20 70 6f  BR and..    # po
57c0: 73 73 69 62 6c 79 20 63 68 61 6e 67 65 20 69 74  ssibly change it
57d0: 73 20 74 79 70 65 2e 0a 0a 09 20 20 20 20 73 65  s type....    se
57e0: 74 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20 24  t last [lindex $
57f0: 72 65 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20 20  revlist end]..  
5800: 20 20 24 73 74 6f 70 20 73 65 74 64 65 66 61 75    $stop setdefau
5810: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 24  ltbranchparent $
5820: 6c 61 73 74 20 3b 20 23 20 52 65 74 79 70 65 73  last ; # Retypes
5830: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 6f   the revision to
5840: 6f 2e 0a 09 20 20 20 20 24 6c 61 73 74 20 73 65  o...    $last se
5850: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68  tdefaultbranchch
5860: 69 6c 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09 72  ild  $stop..}..r
5870: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
5880: 20 70 72 6f 63 20 43 68 65 63 6b 4c 4f 44 73 20   proc CheckLODs 
5890: 7b 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 6d 79  {} {..upvar 1 my
58a0: 62 72 61 6e 63 68 65 73 20 6d 79 62 72 61 6e 63  branches mybranc
58b0: 68 65 73 20 6d 79 74 61 67 73 20 6d 79 74 61 67  hes mytags mytag
58c0: 73 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62  s...foreach {_ b
58d0: 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65  ranch} [array ge
58e0: 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 20  t mybranches] { 
58f0: 24 62 72 61 6e 63 68 20 63 68 65 63 6b 6c 6f 64  $branch checklod
5900: 20 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20   }...foreach {_ 
5910: 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20  taglist} [array 
5920: 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20  get mytags] {.. 
5930: 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 24     foreach tag $
5940: 74 61 67 6c 69 73 74 20 7b 20 24 74 61 67 20 63  taglist { $tag c
5950: 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d 0a 09 72 65  hecklod }..}..re
5960: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
5970: 70 72 6f 63 20 52 65 6d 6f 76 65 49 72 72 65 6c  proc RemoveIrrel
5980: 65 76 61 6e 74 44 65 6c 65 74 69 6f 6e 73 20 7b  evantDeletions {
5990: 7d 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  } {.    }..    p
59a0: 72 6f 63 20 52 65 6d 6f 76 65 49 6e 69 74 69 61  roc RemoveInitia
59b0: 6c 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e 73  lBranchDeletions
59c0: 20 7b 7d 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20   {} {.    }..   
59d0: 20 70 72 6f 63 20 45 78 63 6c 75 64 65 4e 6f 6e   proc ExcludeNon
59e0: 54 72 75 6e 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e  TrunkInformation
59f0: 20 7b 7d 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20   {} {.    }..   
5a00: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
5a10: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
5a20: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20  ########.    ## 
5a30: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20  Configuration.. 
5a40: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79     pragma -hasty
5a50: 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20  peinfo    no  ; 
5a60: 23 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73  # no type intros
5a70: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67  pection.    prag
5a80: 6d 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20  ma -hasinfo     
5a90: 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62     no  ; # no ob
5aa0: 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69  ject introspecti
5ab0: 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68  on.    pragma -h
5ac0: 61 73 74 79 70 65 6d 65 74 68 6f 64 73 20 6e 6f  astypemethods no
5ad0: 20 20 3b 20 23 20 74 79 70 65 20 69 73 20 6e 6f    ; # type is no
5ae0: 74 20 72 65 6c 65 76 61 6e 74 2e 0a 20 20 20 20  t relevant..    
5af0: 70 72 61 67 6d 61 20 2d 73 69 6d 70 6c 65 64 69  pragma -simpledi
5b00: 73 70 61 74 63 68 20 79 65 73 20 3b 20 23 20 73  spatch yes ; # s
5b10: 69 6d 70 6c 65 20 66 61 73 74 20 64 69 73 70 61  imple fast dispa
5b20: 74 63 68 0a 0a 20 20 20 20 23 20 23 20 23 23 20  tch..    # # ## 
5b30: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
5b40: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
5b50: 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76  .}..namespace ev
5b60: 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  al ::vc::fossil:
5b70: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20  :import::cvs {. 
5b80: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70     namespace exp
5b90: 6f 72 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d  ort file.    nam
5ba0: 65 73 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65  espace eval file
5bb0: 20 7b 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74   {..# Import not
5bc0: 20 72 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61   required, alrea
5bd0: 64 79 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73  dy a child names
5be0: 70 61 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61  pace...# namespa
5bf0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
5c00: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
5c10: 63 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09  cvs::file::rev..
5c20: 23 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  # namespace impo
5c30: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  rt ::vc::fossil:
5c40: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69  :import::cvs::fi
5c50: 6c 65 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61  le::sym..namespa
5c60: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
5c70: 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09  tools::misc::*..
5c80: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
5c90: 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72   ::vc::tools::tr
5ca0: 6f 75 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65  ouble..namespace
5cb0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f   import ::vc::to
5cc0: 6f 6c 73 3a 3a 6c 6f 67 0a 20 20 20 20 7d 0a 7d  ols::log.    }.}
5cd0: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
5ce0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
5cf0: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
5d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
5d10: 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67  ## Ready..packag
5d20: 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f  e provide vc::fo
5d30: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
5d40: 73 3a 3a 66 69 6c 65 20 31 2e 30 0a 72 65 74 75  s::file 1.0.retu
5d50: 72 6e 0a                                         rn.