Hex Artifact Content
Not logged in

Artifact a5aa8fb6dc7bb7c96291143ffec52652af626271:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [66235f2430] - Updated the copyright information of all files touched in the new year. by aku on 2008-02-06 05:04:12. Also file tools/cvs2fossil/lib/c2f_file.tcl part of check-in [6b78df3861] - Merge in changes from Andreas's branch. by drh on 2008-02-08 21:52:21.

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 2d 32 30 30 38 20 41 6e 64 72 65 61 73 20  07-2008 Andreas 
0070: 4b 75 70 72 69 65 73 2e 0a 23 0a 23 20 54 68 69  Kupries..#.# Thi
0080: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 6c 69  s software is li
0090: 63 65 6e 73 65 64 20 61 73 20 64 65 73 63 72 69  censed as descri
00a0: 62 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 20  bed in the file 
00b0: 4c 49 43 45 4e 53 45 2c 20 77 68 69 63 68 0a 23  LICENSE, which.#
00c0: 20 79 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65   you should have
00d0: 20 72 65 63 65 69 76 65 64 20 61 73 20 70 61 72   received as par
00e0: 74 20 6f 66 20 74 68 69 73 20 64 69 73 74 72 69  t of this distri
00f0: 62 75 74 69 6f 6e 2e 0a 23 0a 23 20 54 68 69 73  bution..#.# This
0100: 20 73 6f 66 74 77 61 72 65 20 63 6f 6e 73 69 73   software consis
0110: 74 73 20 6f 66 20 76 6f 6c 75 6e 74 61 72 79 20  ts of voluntary 
0120: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 20 6d 61  contributions ma
0130: 64 65 20 62 79 20 6d 61 6e 79 0a 23 20 69 6e 64  de by many.# ind
0140: 69 76 69 64 75 61 6c 73 2e 20 20 46 6f 72 20 65  ividuals.  For e
0150: 78 61 63 74 20 63 6f 6e 74 72 69 62 75 74 69 6f  xact contributio
0160: 6e 20 68 69 73 74 6f 72 79 2c 20 73 65 65 20 74  n history, see t
0170: 68 65 20 72 65 76 69 73 69 6f 6e 0a 23 20 68 69  he revision.# hi
0180: 73 74 6f 72 79 20 61 6e 64 20 6c 6f 67 73 2c 20  story and logs, 
0190: 61 76 61 69 6c 61 62 6c 65 20 61 74 20 68 74 74  available at htt
01a0: 70 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e 68  p://fossil-scm.h
01b0: 77 61 63 69 2e 63 6f 6d 2f 66 6f 73 73 69 6c 0a  waci.com/fossil.
01c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
01d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
01e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23  #############..#
0200: 23 20 46 69 6c 65 2c 20 70 61 72 74 20 6f 66 20  # File, part of 
0210: 61 20 70 72 6f 6a 65 63 74 2c 20 70 61 72 74 20  a project, part 
0220: 6f 66 20 61 20 43 56 53 20 72 65 70 6f 73 69 74  of a CVS reposit
0230: 6f 72 79 2e 20 4d 75 6c 74 69 70 6c 65 0a 23 23  ory. Multiple.##
0240: 20 69 6e 73 74 61 6e 63 65 73 20 61 72 65 20 70   instances are p
0250: 6f 73 73 69 62 6c 65 2e 0a 0a 23 20 23 20 23 23  ossible...# # ##
0260: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
0270: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
0280: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
0290: 23 23 23 23 23 23 23 0a 23 23 20 52 65 71 75 69  #######.## Requi
02a0: 72 65 6d 65 6e 74 73 0a 0a 70 61 63 6b 61 67 65  rements..package
02b0: 20 72 65 71 75 69 72 65 20 54 63 6c 20 38 2e 34   require 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 20 20 20 20 20 3b 20 23               ; #
02e0: 20 52 65 71 75 69 72 65 64 20 72 75 6e 74 69 6d   Required runtim
02f0: 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  e..package requi
0300: 72 65 20 73 6e 69 74 20 20 20 20 20 20 20 20 20  re snit         
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0320: 20 20 20 20 20 20 20 3b 20 23 20 4f 4f 20 73 79         ; # OO sy
0330: 73 74 65 6d 2e 0a 70 61 63 6b 61 67 65 20 72 65  stem..package re
0340: 71 75 69 72 65 20 73 74 72 75 63 74 3a 3a 73 65  quire struct::se
0350: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
0360: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 53 65            ; # Se
0370: 74 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 70 61  t operations..pa
0380: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 74  ckage require st
0390: 72 75 63 74 3a 3a 6c 69 73 74 20 20 20 20 20 20  ruct::list      
03a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03b0: 20 20 3b 20 23 20 48 69 67 68 65 72 20 6f 72 64    ; # Higher ord
03c0: 65 72 20 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 70  er operations..p
03d0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76  ackage require v
03e0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
03f0: 74 3a 3a 63 76 73 3a 3a 62 6c 6f 62 73 74 6f 72  t::cvs::blobstor
0400: 65 20 20 3b 20 23 20 42 6c 6f 62 20 73 74 6f 72  e  ; # Blob stor
0410: 61 67 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71  age..package req
0420: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a  uire vc::fossil:
0430: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69  :import::cvs::fi
0440: 6c 65 3a 3a 72 65 76 20 20 3b 20 23 20 43 56 53  le::rev  ; # CVS
0450: 20 70 65 72 20 66 69 6c 65 20 72 65 76 69 73 69   per file revisi
0460: 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 71  ons..package req
0470: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a  uire vc::fossil:
0480: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69  :import::cvs::fi
0490: 6c 65 3a 3a 73 79 6d 20 20 3b 20 23 20 43 56 53  le::sym  ; # CVS
04a0: 20 70 65 72 20 66 69 6c 65 20 73 79 6d 62 6f 6c   per file symbol
04b0: 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  s..package requi
04c0: 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69  re vc::fossil::i
04d0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74  mport::cvs::stat
04e0: 65 20 20 20 20 20 20 3b 20 23 20 53 74 61 74 65  e      ; # State
04f0: 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 6b 61 67   storage..packag
0500: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f  e require vc::fo
0510: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
0520: 73 3a 3a 69 6e 74 65 67 72 69 74 79 20 20 3b 20  s::integrity  ; 
0530: 23 20 53 74 61 74 65 20 69 6e 74 65 67 72 69 74  # State integrit
0540: 79 20 63 68 65 63 6b 73 2e 0a 70 61 63 6b 61 67  y checks..packag
0550: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f  e require vc::fo
0560: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
0570: 73 3a 3a 67 74 63 6f 72 65 20 20 20 20 20 3b 20  s::gtcore     ; 
0580: 23 20 47 72 61 70 68 20 74 72 61 76 65 72 73 61  # Graph traversa
0590: 6c 20 63 6f 72 65 2e 0a 70 61 63 6b 61 67 65 20  l core..package 
05a0: 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c  require vc::tool
05b0: 73 3a 3a 74 72 6f 75 62 6c 65 20 20 20 20 20 20  s::trouble      
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20              ; # 
05d0: 45 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e  Error reporting.
05e0: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
05f0: 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20   vc::tools::log 
0600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0610: 20 20 20 20 20 3b 20 23 20 55 73 65 72 20 66 65       ; # User fe
0620: 65 64 62 61 63 6b 0a 70 61 63 6b 61 67 65 20 72  edback.package r
0630: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73  equire vc::tools
0640: 3a 3a 6d 69 73 63 20 20 20 20 20 20 20 20 20 20  ::misc          
0650: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 54             ; # T
0660: 65 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a 0a  ext formatting..
0670: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
0680: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
0690: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
06a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
06b0: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76  ..snit::type ::v
06c0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
06d0: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 7b 0a 20  t::cvs::file {. 
06e0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
06f0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0700: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
0710: 23 20 50 75 62 6c 69 63 20 41 50 49 0a 0a 20 20  # Public API..  
0720: 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b 69    constructor {i
0730: 64 20 70 61 74 68 20 75 73 72 70 61 74 68 20 65  d path usrpath e
0740: 78 65 63 75 74 61 62 6c 65 20 70 72 6f 6a 65 63  xecutable projec
0750: 74 7d 20 7b 0a 09 73 65 74 20 6d 79 69 64 20 20  t} {..set myid  
0760: 20 20 20 20 20 20 20 24 69 64 0a 09 73 65 74 20         $id..set 
0770: 6d 79 70 61 74 68 20 20 20 20 20 20 20 24 70 61  mypath       $pa
0780: 74 68 0a 09 73 65 74 20 6d 79 75 73 72 70 61 74  th..set myusrpat
0790: 68 20 20 20 20 24 75 73 72 70 61 74 68 0a 09 73  h    $usrpath..s
07a0: 65 74 20 6d 79 65 78 65 63 75 74 61 62 6c 65 20  et myexecutable 
07b0: 24 65 78 65 63 75 74 61 62 6c 65 0a 09 73 65 74  $executable..set
07c0: 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20 24 70   myproject    $p
07d0: 72 6f 6a 65 63 74 0a 09 73 65 74 20 6d 79 74 72  roject..set mytr
07e0: 75 6e 6b 20 20 20 20 20 20 5b 24 6d 79 70 72 6f  unk      [$mypro
07f0: 6a 65 63 74 20 74 72 75 6e 6b 5d 0a 09 73 65 74  ject trunk]..set
0800: 20 6d 79 62 6c 6f 62 20 20 20 20 20 20 20 5b 62   myblob       [b
0810: 6c 6f 62 73 74 6f 72 65 20 24 7b 73 65 6c 66 6e  lobstore ${selfn
0820: 73 7d 3a 3a 25 41 55 54 4f 25 20 24 69 64 5d 0a  s}::%AUTO% $id].
0830: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
0840: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 69 64 20     method setid 
0850: 7b 69 64 7d 20 7b 0a 09 69 6e 74 65 67 72 69 74  {id} {..integrit
0860: 79 20 61 73 73 65 72 74 20 7b 24 6d 79 69 64 20  y assert {$myid 
0870: 65 71 20 22 22 7d 20 7b 46 69 6c 65 20 27 24 6d  eq ""} {File '$m
0880: 79 70 61 74 68 27 20 61 6c 72 65 61 64 79 20 68  ypath' already h
0890: 61 73 20 61 6e 20 69 64 2c 20 27 24 6d 79 69 64  as an id, '$myid
08a0: 27 7d 0a 09 73 65 74 20 6d 79 69 64 20 24 69 64  '}..set myid $id
08b0: 0a 09 24 6d 79 62 6c 6f 62 20 73 65 74 69 64 20  ..$myblob setid 
08c0: 24 69 64 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  $id..return.    
08d0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 64  }..    method id
08e0: 20 20 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72        {} { retur
08f0: 6e 20 24 6d 79 69 64 20 7d 0a 20 20 20 20 6d 65  n $myid }.    me
0900: 74 68 6f 64 20 70 61 74 68 20 20 20 20 7b 7d 20  thod path    {} 
0910: 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 61 74 68  { return $mypath
0920: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 75 73   }.    method us
0930: 72 70 61 74 68 20 7b 7d 20 7b 20 72 65 74 75 72  rpath {} { retur
0940: 6e 20 24 6d 79 75 73 72 70 61 74 68 20 7d 0a 20  n $myusrpath }. 
0950: 20 20 20 6d 65 74 68 6f 64 20 70 72 6f 6a 65 63     method projec
0960: 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  t {} { return $m
0970: 79 70 72 6f 6a 65 63 74 20 7d 0a 0a 20 20 20 20  yproject }..    
0980: 64 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20  delegate method 
0990: 63 6f 6d 6d 69 74 6d 65 73 73 61 67 65 6f 66 20  commitmessageof 
09a0: 74 6f 20 6d 79 70 72 6f 6a 65 63 74 0a 0a 20 20  to myproject..  
09b0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
09c0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
09d0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
09e0: 20 4d 65 74 68 6f 64 73 20 72 65 71 75 69 72 65   Methods require
09f0: 64 20 66 6f 72 20 74 68 65 20 63 6c 61 73 73 20  d for the class 
0a00: 74 6f 20 62 65 20 61 20 73 69 6e 6b 20 6f 66 20  to be a sink of 
0a10: 74 68 65 20 72 63 73 20 70 61 72 73 65 72 0a 0a  the rcs parser..
0a20: 20 20 20 20 23 6d 65 74 68 6f 64 20 62 65 67 69      #method begi
0a30: 6e 20 7b 7d 20 7b 70 75 74 73 20 62 65 67 69 6e  n {} {puts begin
0a40: 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 73 65  }.    #method se
0a50: 74 68 65 61 64 20 7b 68 7d 20 7b 70 75 74 73 20  thead {h} {puts 
0a60: 68 65 61 64 3d 24 68 7d 0a 20 20 20 20 23 6d 65  head=$h}.    #me
0a70: 74 68 6f 64 20 73 65 74 70 72 69 6e 63 69 70 61  thod setprincipa
0a80: 6c 62 72 61 6e 63 68 20 7b 62 7d 20 7b 70 75 74  lbranch {b} {put
0a90: 73 20 70 62 3d 24 62 7d 0a 20 20 20 20 23 6d 65  s pb=$b}.    #me
0aa0: 74 68 6f 64 20 64 65 66 74 61 67 20 7b 73 20 72  thod deftag {s r
0ab0: 7d 20 7b 70 75 74 73 20 24 73 3d 24 72 7d 0a 20  } {puts $s=$r}. 
0ac0: 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 63 6f     #method setco
0ad0: 6d 6d 65 6e 74 20 7b 63 7d 20 7b 70 75 74 73 20  mment {c} {puts 
0ae0: 63 6f 6d 6d 65 6e 74 3d 24 63 7d 0a 20 20 20 20  comment=$c}.    
0af0: 23 6d 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e  #method admindon
0b00: 65 20 7b 7d 20 7b 70 75 74 73 20 61 64 6d 69 6e  e {} {puts admin
0b10: 64 6f 6e 65 7d 0a 20 20 20 20 23 6d 65 74 68 6f  done}.    #metho
0b20: 64 20 64 65 66 20 7b 72 65 76 20 64 61 74 65 20  d def {rev date 
0b30: 61 75 74 68 6f 72 20 73 74 61 74 65 20 6e 65 78  author state nex
0b40: 74 20 62 72 61 6e 63 68 65 73 7d 20 7b 70 75 74  t branches} {put
0b50: 73 20 22 64 65 66 20 24 72 65 76 20 24 64 61 74  s "def $rev $dat
0b60: 65 20 24 61 75 74 68 6f 72 20 24 73 74 61 74 65  e $author $state
0b70: 20 24 6e 65 78 74 20 24 62 72 61 6e 63 68 65 73   $next $branches
0b80: 22 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64  "}.    #method d
0b90: 65 66 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20  efdone {} {puts 
0ba0: 64 65 66 2d 64 6f 6e 65 7d 0a 20 20 20 20 23 6d  def-done}.    #m
0bb0: 65 74 68 6f 64 20 73 65 74 64 65 73 63 20 7b 64  ethod setdesc {d
0bc0: 7d 20 7b 70 75 74 73 20 64 65 73 63 3d 24 64 7d  } {puts desc=$d}
0bd0: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 65 78 74  .    #method ext
0be0: 65 6e 64 20 7b 72 65 76 20 63 6f 6d 6d 69 74 6d  end {rev commitm
0bf0: 73 67 20 64 65 6c 74 61 72 61 6e 67 65 7d 20 7b  sg deltarange} {
0c00: 70 75 74 73 20 22 65 78 74 65 6e 64 20 24 63 6f  puts "extend $co
0c10: 6d 6d 69 74 6d 73 67 20 24 64 65 6c 74 61 72 61  mmitmsg $deltara
0c20: 6e 67 65 22 7d 0a 20 20 20 20 23 6d 65 74 68 6f  nge"}.    #metho
0c30: 64 20 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20  d done {} {puts 
0c40: 64 6f 6e 65 7d 0a 0a 20 20 20 20 23 20 23 20 23  done}..    # # #
0c50: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
0c60: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
0c70: 23 23 0a 20 20 20 20 23 23 20 50 65 72 73 69 73  ##.    ## Persis
0c80: 74 65 6e 63 65 20 28 70 61 73 73 20 49 49 29 0a  tence (pass II).
0c90: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 65 72 73  .    method pers
0ca0: 69 73 74 20 7b 7d 20 7b 0a 09 23 20 46 69 72 73  ist {} {..# Firs
0cb0: 74 20 63 6f 6c 6c 65 63 74 20 74 68 65 20 72 65  t collect the re
0cc0: 61 63 68 61 62 6c 65 20 72 65 76 69 73 69 6f 6e  achable revision
0cd0: 73 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2c 20 74  s and symbols, t
0ce0: 68 65 6e 0a 09 23 20 61 73 73 69 67 6e 20 69 64  hen..# assign id
0cf0: 27 73 20 74 6f 20 61 6c 6c 2e 20 54 68 65 79 20  's to all. They 
0d00: 61 72 65 20 73 6f 72 74 65 64 20 73 6f 20 74 68  are sorted so th
0d10: 61 74 20 77 65 20 77 69 6c 6c 20 68 61 76 65 20  at we will have 
0d20: 69 64 73 0a 09 23 20 77 68 69 63 68 20 73 6f 72  ids..# which sor
0d30: 74 20 69 6e 20 6f 72 64 65 72 20 6f 66 20 63 72  t in order of cr
0d40: 65 61 74 69 6f 6e 2e 20 54 68 65 6e 20 77 65 20  eation. Then we 
0d50: 63 61 6e 20 73 61 76 65 20 74 68 65 6d 2e 20 54  can save them. T
0d60: 68 69 73 0a 09 23 20 69 73 20 64 6f 6e 65 20 62  his..# is done b
0d70: 6f 74 74 6f 6d 20 75 70 2e 20 52 65 76 69 73 69  ottom up. Revisi
0d80: 6f 6e 73 2c 20 74 68 65 6e 20 73 79 6d 62 6f 6c  ons, then symbol
0d90: 73 2e 20 5f 5f 4e 4f 54 45 5f 5f 20 54 68 69 73  s. __NOTE__ This
0da0: 0a 09 23 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 62  ..# works only b
0db0: 65 63 61 75 73 65 20 73 71 6c 69 74 65 20 69 73  ecause sqlite is
0dc0: 20 6e 6f 74 20 63 68 65 63 6b 69 6e 67 20 66 6f   not checking fo
0dd0: 72 65 69 67 6e 20 6b 65 79 0a 09 23 20 72 65 66  reign key..# ref
0de0: 65 72 65 6e 63 65 73 20 64 75 72 69 6e 67 20 69  erences during i
0df0: 6e 73 65 72 74 2e 20 54 68 69 73 20 61 6c 6c 6f  nsert. This allo
0e00: 77 73 20 74 6f 20 68 61 76 65 20 64 61 6e 67 6c  ws to have dangl
0e10: 69 6e 67 0a 09 23 20 72 65 66 65 72 65 6e 63 65  ing..# reference
0e20: 73 20 77 68 69 63 68 20 61 72 65 20 66 69 78 65  s which are fixe
0e30: 64 20 6c 61 74 65 72 2e 20 54 68 65 20 6c 6f 6e  d later. The lon
0e40: 67 65 73 74 20 64 61 6e 67 6c 69 6e 67 0a 09 23  gest dangling..#
0e50: 20 72 65 66 65 72 65 6e 63 65 73 20 61 72 65 20   references are 
0e60: 66 6f 72 20 74 68 65 20 70 72 6f 6a 65 63 74 20  for the project 
0e70: 6c 65 76 65 6c 20 73 79 6d 62 6f 6c 73 2c 20 74  level symbols, t
0e80: 68 65 73 65 20 77 65 20 64 6f 0a 09 23 20 6e 6f  hese we do..# no
0e90: 74 20 73 61 76 65 20 68 65 72 65 2c 20 62 75 74  t save here, but
0ea0: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
0eb0: 68 65 20 70 61 73 73 2e 20 57 68 61 74 20 77 65  he pass. What we
0ec0: 20 6e 65 65 64 20 61 72 65 0a 09 23 20 74 68 65   need are..# the
0ed0: 20 69 64 73 2c 20 68 65 6e 63 65 20 74 68 65 20   ids, hence the 
0ee0: 74 77 6f 20 70 68 61 73 65 73 2e 0a 0a 09 73 74  two phases....st
0ef0: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67  ruct::list assig
0f00: 6e 20 5b 24 73 65 6c 66 20 41 63 74 69 76 65 5d  n [$self Active]
0f10: 20 72 65 76 69 73 69 6f 6e 73 20 73 79 6d 62 6f   revisions symbo
0f20: 6c 73 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20  ls..foreach rev 
0f30: 24 72 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65  $revisions { $re
0f40: 76 20 64 65 66 69 64 20 7d 0a 09 66 6f 72 65 61  v defid }..forea
0f50: 63 68 20 73 79 6d 20 24 73 79 6d 62 6f 6c 73 20  ch sym $symbols 
0f60: 20 20 7b 20 24 73 79 6d 20 64 65 66 69 64 20 7d    { $sym defid }
0f70: 0a 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 63  ...state transac
0f80: 74 69 6f 6e 20 7b 0a 09 20 20 20 20 66 6f 72 65  tion {..    fore
0f90: 61 63 68 20 72 65 76 20 24 72 65 76 69 73 69 6f  ach rev $revisio
0fa0: 6e 73 20 7b 20 24 72 65 76 20 70 65 72 73 69 73  ns { $rev persis
0fb0: 74 20 7d 0a 09 20 20 20 20 66 6f 72 65 61 63 68  t }..    foreach
0fc0: 20 73 79 6d 20 24 73 79 6d 62 6f 6c 73 20 20 20   sym $symbols   
0fd0: 7b 20 24 73 79 6d 20 70 65 72 73 69 73 74 20 7d  { $sym persist }
0fe0: 0a 09 20 20 20 20 24 6d 79 62 6c 6f 62 20 70 65  ..    $myblob pe
0ff0: 72 73 69 73 74 0a 09 7d 0a 09 72 65 74 75 72 6e  rsist..}..return
1000: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
1010: 6f 64 20 64 72 6f 70 20 7b 7d 20 7b 0a 09 66 6f  od drop {} {..fo
1020: 72 65 61 63 68 20 7b 5f 20 72 65 76 7d 20 20 20  reach {_ rev}   
1030: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 72 65   [array get myre
1040: 76 5d 20 20 20 20 20 20 7b 20 24 72 65 76 20 64  v]      { $rev d
1050: 65 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65 61 63  estroy }..foreac
1060: 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b 61 72  h {_ branch} [ar
1070: 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68  ray get mybranch
1080: 65 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 64 65  es] { $branch de
1090: 73 74 72 6f 79 20 7d 0a 09 66 6f 72 65 61 63 68  stroy }..foreach
10a0: 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61 72   {_ taglist} [ar
10b0: 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20  ray get mytags] 
10c0: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74  {..    foreach t
10d0: 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24 74  ag $taglist { $t
10e0: 61 67 20 64 65 73 74 72 6f 79 20 7d 0a 09 7d 0a  ag destroy }..}.
10f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1100: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
1110: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
1120: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
1130: 23 20 49 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20  # Implement the 
1140: 73 69 6e 6b 0a 0a 20 20 20 20 6d 65 74 68 6f 64  sink..    method
1150: 20 62 65 67 69 6e 20 7b 7d 20 7b 23 69 67 6e 6f   begin {} {#igno
1160: 72 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  re}..    method 
1170: 73 65 74 68 65 61 64 20 7b 72 65 76 6e 72 7d 20  sethead {revnr} 
1180: 7b 0a 09 73 65 74 20 6d 79 68 65 61 64 72 65 76  {..set myheadrev
1190: 6e 72 20 24 72 65 76 6e 72 0a 09 72 65 74 75 72  nr $revnr..retur
11a0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
11b0: 68 6f 64 20 73 65 74 70 72 69 6e 63 69 70 61 6c  hod setprincipal
11c0: 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e 72  branch {branchnr
11d0: 7d 20 7b 0a 09 73 65 74 20 6d 79 70 72 69 6e 63  } {..set myprinc
11e0: 69 70 61 6c 20 24 62 72 61 6e 63 68 6e 72 0a 09  ipal $branchnr..
11f0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
1200: 20 20 6d 65 74 68 6f 64 20 64 65 66 74 61 67 20    method deftag 
1210: 7b 6e 61 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09  {name revnr} {..
1220: 23 20 46 55 54 55 52 45 3a 20 50 65 72 66 6f 72  # FUTURE: Perfor
1230: 6d 20 73 79 6d 62 6f 6c 20 74 72 61 6e 73 66 6f  m symbol transfo
1240: 72 6d 61 74 69 6f 6e 20 68 65 72 65 2e 0a 0a 09  rmation here....
1250: 69 66 20 7b 5b 73 74 72 75 63 74 3a 3a 73 65 74  if {[struct::set
1260: 20 63 6f 6e 74 61 69 6e 73 20 24 6d 79 73 79 6d   contains $mysym
1270: 62 6f 6c 73 20 24 6e 61 6d 65 5d 7d 20 7b 0a 09  bols $name]} {..
1280: 20 20 20 20 74 72 6f 75 62 6c 65 20 66 61 74 61      trouble fata
1290: 6c 20 22 4d 75 6c 74 69 70 6c 65 20 64 65 66 69  l "Multiple defi
12a0: 6e 69 74 69 6f 6e 73 20 6f 66 20 74 68 65 20 73  nitions of the s
12b0: 79 6d 62 6f 6c 20 27 24 6e 61 6d 65 27 20 69 6e  ymbol '$name' in
12c0: 20 27 24 6d 79 70 61 74 68 27 22 0a 09 20 20 20   '$mypath'"..   
12d0: 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 74 72   return..}...str
12e0: 75 63 74 3a 3a 73 65 74 20 61 64 64 20 6d 79 73  uct::set add mys
12f0: 79 6d 62 6f 6c 73 20 24 6e 61 6d 65 0a 0a 09 69  ymbols $name...i
1300: 66 20 7b 5b 72 65 76 20 69 73 62 72 61 6e 63 68  f {[rev isbranch
1310: 72 65 76 6e 72 20 24 72 65 76 6e 72 20 2d 3e 20  revnr $revnr -> 
1320: 62 72 61 6e 63 68 6e 72 5d 7d 20 7b 0a 09 20 20  branchnr]} {..  
1330: 20 20 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63    $self AddBranc
1340: 68 20 24 6e 61 6d 65 20 24 62 72 61 6e 63 68 6e  h $name $branchn
1350: 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20  r..} else {..   
1360: 20 24 73 65 6c 66 20 41 64 64 54 61 67 20 24 6e   $self AddTag $n
1370: 61 6d 65 20 24 72 65 76 6e 72 0a 09 7d 0a 09 72  ame $revnr..}..r
1380: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
1390: 20 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d 65   method setcomme
13a0: 6e 74 20 7b 63 7d 20 7b 23 20 69 67 6e 6f 72 65  nt {c} {# ignore
13b0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 61 64  }..    method ad
13c0: 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20  mindone {} {..# 
13d0: 57 65 20 64 6f 20 6e 6f 74 68 69 6e 67 20 61 74  We do nothing at
13e0: 20 74 68 65 20 62 6f 75 6e 64 61 72 79 20 6f 66   the boundary of
13f0: 20 61 64 6d 69 6e 20 61 6e 64 20 72 65 76 69 73   admin and revis
1400: 69 6f 6e 20 64 61 74 61 0a 20 20 20 20 7d 0a 0a  ion data.    }..
1410: 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 20 7b      method def {
1420: 72 65 76 6e 72 20 64 61 74 65 20 61 75 74 68 6f  revnr date autho
1430: 72 20 73 74 61 74 65 20 6e 65 78 74 20 62 72 61  r state next bra
1440: 6e 63 68 65 73 7d 20 7b 0a 09 24 73 65 6c 66 20  nches} {..$self 
1450: 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d  RecordBranchComm
1460: 69 74 73 20 24 62 72 61 6e 63 68 65 73 0a 0a 09  its $branches...
1470: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
1480: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d   myrev($revnr)]}
1490: 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20   {..    trouble 
14a0: 66 61 74 61 6c 20 22 46 69 6c 65 20 24 6d 79 70  fatal "File $myp
14b0: 61 74 68 20 63 6f 6e 74 61 69 6e 73 20 64 75 70  ath contains dup
14c0: 6c 69 63 61 74 65 20 64 65 66 69 6e 69 74 69 6f  licate definitio
14d0: 6e 73 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20  ns for revision 
14e0: 24 72 65 76 6e 72 2e 22 0a 09 20 20 20 20 72 65  $revnr."..    re
14f0: 74 75 72 6e 0a 09 7d 0a 0a 09 73 65 74 20 6d 79  turn..}...set my
1500: 61 69 64 28 24 72 65 76 6e 72 29 20 5b 24 6d 79  aid($revnr) [$my
1510: 70 72 6f 6a 65 63 74 20 64 65 66 61 75 74 68 6f  project defautho
1520: 72 20 24 61 75 74 68 6f 72 5d 0a 09 73 65 74 20  r $author]..set 
1530: 6d 79 72 65 76 28 24 72 65 76 6e 72 29 20 5b 72  myrev($revnr) [r
1540: 65 76 20 25 41 55 54 4f 25 20 24 72 65 76 6e 72  ev %AUTO% $revnr
1550: 20 24 64 61 74 65 20 24 73 74 61 74 65 20 24 73   $date $state $s
1560: 65 6c 66 5d 0a 0a 09 24 6d 79 62 6c 6f 62 20 61  elf]...$myblob a
1570: 64 64 20 24 72 65 76 6e 72 20 24 6d 79 72 65 76  dd $revnr $myrev
1580: 28 24 72 65 76 6e 72 29 0a 0a 09 69 66 20 7b 24  ($revnr)...if {$
1590: 6e 65 78 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20  next ne ""} {.. 
15a0: 20 20 20 23 20 70 61 72 65 6e 74 20 72 65 76 69     # parent revi
15b0: 73 69 6f 6e 20 4e 45 58 54 20 69 73 20 61 20 64  sion NEXT is a d
15c0: 65 6c 74 61 20 6f 66 20 63 75 72 72 65 6e 74 2e  elta of current.
15d0: 0a 09 20 20 20 20 24 6d 79 62 6c 6f 62 20 64 65  ..    $myblob de
15e0: 6c 74 61 20 24 6e 65 78 74 20 24 72 65 76 6e 72  lta $next $revnr
15f0: 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 62 20 24  ..}..foreach b $
1600: 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20  branches {..    
1610: 23 20 62 72 61 6e 63 68 20 63 68 69 6c 64 20 72  # branch child r
1620: 65 76 69 73 69 6f 6e 20 42 20 69 73 20 61 20 64  evision B is a d
1630: 65 6c 74 61 20 6f 66 20 63 75 72 72 65 6e 74 2e  elta of current.
1640: 0a 09 20 20 20 20 24 6d 79 62 6c 6f 62 20 64 65  ..    $myblob de
1650: 6c 74 61 20 24 62 20 24 72 65 76 6e 72 0a 09 7d  lta $b $revnr..}
1660: 0a 0a 09 24 73 65 6c 66 20 52 65 63 6f 72 64 42  ...$self RecordB
1670: 61 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65 73  asicDependencies
1680: 20 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09 72   $revnr $next..r
1690: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
16a0: 20 6d 65 74 68 6f 64 20 64 65 66 64 6f 6e 65 20   method defdone 
16b0: 7b 7d 20 7b 0a 09 23 20 54 68 69 73 20 69 73 20  {} {..# This is 
16c0: 61 6c 6c 20 64 6f 6e 65 20 61 66 74 65 72 20 74  all done after t
16d0: 68 65 20 72 65 76 69 73 69 6f 6e 20 74 72 65 65  he revision tree
16e0: 20 68 61 73 20 62 65 65 6e 20 65 78 74 72 61 63   has been extrac
16f0: 74 65 64 0a 09 23 20 66 72 6f 6d 20 74 68 65 20  ted..# from the 
1700: 66 69 6c 65 2c 20 62 65 66 6f 72 65 20 74 68 65  file, before the
1710: 20 63 6f 6d 6d 69 74 20 6d 65 73 61 67 65 73 20   commit mesages 
1720: 61 6e 64 20 64 65 6c 74 61 20 74 65 78 74 73 20  and delta texts 
1730: 61 72 65 0a 09 23 20 70 72 6f 63 65 73 73 65 64  are..# processed
1740: 2e 0a 0a 09 24 73 65 6c 66 20 50 72 6f 63 65 73  ....$self Proces
1750: 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 65 6e  sPrimaryDependen
1760: 63 69 65 73 0a 09 24 73 65 6c 66 20 50 72 6f 63  cies..$self Proc
1770: 65 73 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65  essBranchDepende
1780: 6e 63 69 65 73 0a 09 24 73 65 6c 66 20 53 6f 72  ncies..$self Sor
1790: 74 42 72 61 6e 63 68 65 73 0a 09 24 73 65 6c 66  tBranches..$self
17a0: 20 50 72 6f 63 65 73 73 54 61 67 44 65 70 65 6e   ProcessTagDepen
17b0: 64 65 6e 63 69 65 73 0a 09 24 73 65 6c 66 20 44  dencies..$self D
17c0: 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52  etermineTheRootR
17d0: 65 76 69 73 69 6f 6e 0a 09 72 65 74 75 72 6e 0a  evision..return.
17e0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
17f0: 64 20 73 65 74 64 65 73 63 20 7b 64 7d 20 7b 23  d setdesc {d} {#
1800: 20 69 67 6e 6f 72 65 7d 0a 0a 20 20 20 20 6d 65   ignore}..    me
1810: 74 68 6f 64 20 65 78 74 65 6e 64 20 7b 72 65 76  thod extend {rev
1820: 6e 72 20 63 6f 6d 6d 69 74 6d 73 67 20 74 65 78  nr commitmsg tex
1830: 74 72 61 6e 67 65 7d 20 7b 0a 09 73 65 74 20 63  trange} {..set c
1840: 6d 69 64 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20  mid [$myproject 
1850: 64 65 66 63 6d 65 73 73 61 67 65 20 5b 73 74 72  defcmessage [str
1860: 69 6e 67 20 74 72 69 6d 20 24 63 6f 6d 6d 69 74  ing trim $commit
1870: 6d 73 67 5d 5d 0a 0a 09 73 65 74 20 72 65 76 20  msg]]...set rev 
1880: 24 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 0a  $myrev($revnr)..
1890: 09 69 66 20 7b 5b 24 72 65 76 20 68 61 73 6d 65  .if {[$rev hasme
18a0: 74 61 5d 7d 20 7b 0a 09 20 20 20 20 23 20 41 70  ta]} {..    # Ap
18b0: 70 61 72 65 6e 74 6c 79 20 72 65 70 6f 73 69 74  parently reposit
18c0: 6f 72 69 65 73 20 65 78 69 73 74 20 69 6e 20 77  ories exist in w
18d0: 68 69 63 68 20 74 68 65 20 64 65 6c 74 61 20 64  hich the delta d
18e0: 61 74 61 0a 09 20 20 20 20 23 20 66 6f 72 20 72  ata..    # for r
18f0: 65 76 69 73 69 6f 6e 20 31 2e 31 20 69 73 20 70  evision 1.1 is p
1900: 72 6f 76 69 64 65 64 20 73 65 76 65 72 61 6c 20  rovided several 
1910: 74 69 6d 65 73 2c 20 61 74 20 6c 65 61 73 74 0a  times, at least.
1920: 09 20 20 20 20 23 20 74 77 69 63 65 2e 20 54 68  .    # twice. Th
1930: 65 20 61 63 74 75 61 6c 20 63 61 75 73 65 20 6f  e actual cause o
1940: 66 20 74 68 69 73 20 64 75 70 6c 69 63 61 74 69  f this duplicati
1950: 6f 6e 20 69 73 20 6e 6f 74 0a 09 20 20 20 20 23  on is not..    #
1960: 20 6b 6e 6f 77 6e 2e 20 53 70 65 63 75 6c 61 74   known. Speculat
1970: 69 6f 6e 20 63 65 6e 74 65 72 73 20 6f 6e 20 52  ion centers on R
1980: 43 53 2f 43 56 53 20 62 75 67 73 2c 20 6f 72 20  CS/CVS bugs, or 
1990: 66 72 6f 6d 0a 09 20 20 20 20 23 20 6d 61 6e 75  from..    # manu
19a0: 61 6c 20 65 64 69 74 73 20 6f 66 20 74 68 65 20  al edits of the 
19b0: 72 65 70 6f 73 69 74 6f 72 79 20 77 68 69 63 68  repository which
19c0: 20 62 6f 72 6b 65 64 20 74 68 65 0a 09 20 20 20   borked the..   
19d0: 20 23 20 69 6e 74 65 72 6e 61 6c 73 2e 20 57 68   # internals. Wh
19e0: 61 74 65 76 65 72 20 74 68 65 20 63 61 75 73 65  atever the cause
19f0: 2c 20 74 65 73 74 69 6e 67 20 73 68 6f 77 65 64  , testing showed
1a00: 20 74 68 61 74 20 62 6f 74 68 0a 09 20 20 20 20   that both..    
1a10: 23 20 63 76 73 20 61 6e 64 20 72 63 73 20 75 73  # cvs and rcs us
1a20: 65 20 74 68 65 20 66 69 72 73 74 20 64 65 66 69  e the first defi
1a30: 6e 69 74 69 6f 6e 20 77 68 65 6e 20 70 65 72 66  nition when perf
1a40: 6f 72 6d 69 6e 67 20 61 0a 09 20 20 20 20 23 20  orming a..    # 
1a50: 63 68 65 63 6b 6f 75 74 2c 20 61 6e 64 20 77 65  checkout, and we
1a60: 20 66 6f 6c 6c 6f 77 20 74 68 65 69 72 20 6c 65   follow their le
1a70: 61 64 2e 20 53 69 64 65 20 6e 6f 74 65 73 3a 20  ad. Side notes: 
1a80: 27 63 76 73 0a 09 20 20 20 20 23 20 6c 6f 67 27  'cvs..    # log'
1a90: 20 66 61 69 6c 73 20 6f 6e 20 73 75 63 68 20 61   fails on such a
1aa0: 20 66 69 6c 65 2c 20 61 6e 64 20 27 63 76 73 20   file, and 'cvs 
1ab0: 72 6c 6f 67 27 20 70 72 69 6e 74 73 20 74 68 65  rlog' prints the
1ac0: 20 6c 6f 67 0a 09 20 20 20 20 23 20 6d 65 73 73   log..    # mess
1ad0: 61 67 65 20 66 72 6f 6d 20 74 68 65 20 66 69 72  age from the fir
1ae0: 73 74 20 64 65 6c 74 61 2c 20 69 67 6e 6f 72 69  st delta, ignori
1af0: 6e 67 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a 0a  ng the second...
1b00: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31  .    log write 1
1b10: 20 66 69 6c 65 20 22 49 6e 20 66 69 6c 65 20 24   file "In file $
1b20: 6d 79 70 61 74 68 20 3a 20 44 75 70 6c 69 63 61  mypath : Duplica
1b30: 74 65 20 64 65 6c 74 61 20 64 61 74 61 20 66 6f  te delta data fo
1b40: 72 20 72 65 76 69 73 69 6f 6e 20 24 72 65 76 6e  r revision $revn
1b50: 72 22 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  r"..    log writ
1b60: 65 20 31 20 66 69 6c 65 20 22 49 67 6e 6f 72 69  e 1 file "Ignori
1b70: 6e 67 20 74 68 65 20 64 75 70 6c 69 63 61 74 65  ng the duplicate
1b80: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d  "..    return..}
1b90: 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 20 74  ...# Determine t
1ba0: 68 65 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c  he line of devel
1bb0: 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 72  opment for the r
1bc0: 65 76 69 73 69 6f 6e 20 28 70 72 6f 6a 65 63 74  evision (project
1bd0: 0a 09 23 20 6c 65 76 65 6c 29 2e 20 54 68 69 73  ..# level). This
1be0: 20 67 69 76 65 73 20 75 73 20 74 68 65 20 62 72   gives us the br
1bf0: 61 6e 63 68 69 64 20 74 6f 6f 2c 20 72 65 71 75  anchid too, requ
1c00: 69 72 65 64 20 66 6f 72 20 74 68 65 0a 09 23 20  ired for the..# 
1c10: 6d 65 74 61 20 64 61 74 61 20 67 72 6f 75 70 20  meta data group 
1c20: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 69 73 20  the revision is 
1c30: 69 6e 2e 20 28 4e 6f 74 65 3a 20 42 79 20 70 75  in. (Note: By pu
1c40: 74 74 69 6e 67 20 62 6f 74 68 0a 09 23 20 62 72  tting both..# br
1c50: 61 6e 63 68 2f 6c 6f 64 20 61 6e 64 20 70 72 6f  anch/lod and pro
1c60: 6a 65 63 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ject information
1c70: 20 69 6e 74 6f 20 74 68 65 20 67 72 6f 75 70 20   into the group 
1c80: 77 65 20 65 6e 73 75 72 65 0a 09 23 20 74 68 61  we ensure..# tha
1c90: 74 20 61 6e 79 20 63 72 6f 73 73 2d 70 72 6f 6a  t any cross-proj
1ca0: 65 63 74 20 61 6e 64 20 63 72 6f 73 73 2d 62 72  ect and cross-br
1cb0: 61 6e 63 68 20 63 6f 6d 6d 69 74 73 20 61 72 65  anch commits are
1cc0: 0a 09 23 20 73 65 70 61 72 61 74 65 64 20 69 6e  ..# separated in
1cd0: 74 6f 20 6d 75 6c 74 69 70 6c 65 20 63 6f 6d 6d  to multiple comm
1ce0: 69 74 73 2c 20 6f 6e 65 20 69 6e 20 65 61 63 68  its, one in each
1cf0: 20 6f 66 20 74 68 65 20 70 72 6f 6a 65 63 74 73   of the projects
1d00: 0a 09 23 20 61 6e 64 2f 6f 72 20 62 72 61 6e 63  ..# and/or branc
1d10: 68 65 73 29 2e 0a 0a 09 73 65 74 20 6c 6f 64 20  hes)....set lod 
1d20: 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 24 72  [$self GetLOD $r
1d30: 65 76 6e 72 5d 0a 0a 09 24 72 65 76 20 73 65 74  evnr]...$rev set
1d40: 6d 65 74 61 20 5b 24 6d 79 70 72 6f 6a 65 63 74  meta [$myproject
1d50: 20 64 65 66 6d 65 74 61 20 5b 24 6c 6f 64 20 69   defmeta [$lod i
1d60: 64 5d 20 24 6d 79 61 69 64 28 24 72 65 76 6e 72  d] $myaid($revnr
1d70: 29 20 24 63 6d 69 64 5d 0a 09 23 20 4e 6f 74 65  ) $cmid]..# Note
1d80: 3a 20 57 65 20 6b 65 65 70 20 73 65 74 74 65 78  : We keep settex
1d90: 74 20 6f 6e 20 66 69 6c 65 3a 3a 72 65 76 20 66  t on file::rev f
1da0: 6f 72 20 74 68 65 20 68 61 73 74 65 78 74 20 71  or the hastext q
1db0: 75 65 72 69 65 73 0a 09 23 20 75 73 65 64 20 62  ueries..# used b
1dc0: 79 20 73 65 76 65 72 61 6c 20 63 68 65 63 6b 73  y several checks
1dd0: 2e 0a 09 24 72 65 76 20 73 65 74 74 65 78 74 20  ...$rev settext 
1de0: 24 74 65 78 74 72 61 6e 67 65 0a 09 24 72 65 76  $textrange..$rev
1df0: 20 73 65 74 6c 6f 64 20 20 24 6c 6f 64 0a 0a 09   setlod  $lod...
1e00: 24 6d 79 62 6c 6f 62 20 65 78 74 65 6e 64 20 24  $myblob extend $
1e10: 72 65 76 6e 72 20 24 74 65 78 74 72 61 6e 67 65  revnr $textrange
1e20: 0a 0a 09 23 20 49 66 20 74 68 69 73 20 69 73 20  ...# If this is 
1e30: 72 65 76 69 73 69 6f 6e 20 31 2e 31 2c 20 77 65  revision 1.1, we
1e40: 20 68 61 76 65 20 74 6f 20 64 65 74 65 72 6d 69   have to determi
1e50: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 0a 09  ne whether the..
1e60: 23 20 66 69 6c 65 20 73 65 65 6d 73 20 74 6f 20  # file seems to 
1e70: 68 61 76 65 20 62 65 65 6e 20 63 72 65 61 74 65  have been create
1e80: 64 20 74 68 72 6f 75 67 68 20 27 63 76 73 20 61  d through 'cvs a
1e90: 64 64 27 20 69 6e 73 74 65 61 64 20 6f 66 0a 09  dd' instead of..
1ea0: 23 20 27 63 76 73 20 69 6d 70 6f 72 74 27 2e 20  # 'cvs import'. 
1eb0: 54 68 69 73 20 63 61 6e 20 62 65 20 64 6f 6e 65  This can be done
1ec0: 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 61 74 20 74   by looking at t
1ed0: 68 65 20 75 6e 2d 0a 09 23 20 61 64 75 6c 74 65  he un-..# adulte
1ee0: 72 61 74 65 64 20 63 6f 6d 6d 69 74 20 6d 65 73  rated commit mes
1ef0: 73 61 67 65 2c 20 61 73 20 43 56 53 20 75 73 65  sage, as CVS use
1f00: 73 20 61 20 68 61 72 64 77 69 72 65 64 20 6d 61  s a hardwired ma
1f10: 67 69 63 0a 09 23 20 6d 65 73 73 61 67 65 20 66  gic..# message f
1f20: 6f 72 20 74 68 65 20 6c 61 74 74 65 72 2c 20 69  or the latter, i
1f30: 2e 65 2e 20 22 49 6e 69 74 69 61 6c 20 72 65 76  .e. "Initial rev
1f40: 69 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a 09 23 20  ision\n", no..# 
1f50: 70 65 72 69 6f 64 2e 20 20 28 54 68 69 73 20 66  period.  (This f
1f60: 61 63 74 20 61 6c 73 6f 20 68 65 6c 70 73 20 75  act also helps u
1f70: 73 20 77 68 65 6e 20 74 68 65 20 74 69 6d 65 20  s when the time 
1f80: 63 6f 6d 65 73 20 74 6f 0a 09 23 20 64 65 74 65  comes to..# dete
1f90: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
1fa0: 69 73 20 66 69 6c 65 20 6d 69 67 68 74 20 68 61  is file might ha
1fb0: 76 65 20 68 61 64 20 61 20 64 65 66 61 75 6c 74  ve had a default
1fc0: 20 62 72 61 6e 63 68 0a 09 23 20 69 6e 20 74 68   branch..# in th
1fd0: 65 20 70 61 73 74 2e 29 0a 0a 09 69 66 20 7b 24  e past.)...if {$
1fe0: 72 65 76 6e 72 20 65 71 20 22 31 2e 31 22 7d 20  revnr eq "1.1"} 
1ff0: 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 6d 70  {..    set myimp
2000: 6f 72 74 65 64 20 5b 65 78 70 72 20 7b 24 63 6f  orted [expr {$co
2010: 6d 6d 69 74 6d 73 67 20 65 71 20 22 49 6e 69 74  mmitmsg eq "Init
2020: 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22 7d  ial revision\n"}
2030: 5d 0a 09 7d 0a 0a 09 23 20 48 65 72 65 20 77 65  ]..}...# Here we
2040: 20 61 6c 73 6f 20 6b 65 65 70 20 74 72 61 63 6b   also keep track
2050: 20 6f 66 20 74 68 65 20 6f 72 64 65 72 20 69 6e   of the order in
2060: 20 77 68 69 63 68 20 74 68 65 20 72 65 76 69 73   which the revis
2070: 69 6f 6e 73 0a 09 23 20 77 65 72 65 20 61 64 64  ions..# were add
2080: 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65 2e 0a  ed to the file..
2090: 0a 09 6c 61 70 70 65 6e 64 20 6d 79 72 65 76 69  ..lappend myrevi
20a0: 73 69 6f 6e 73 20 24 72 65 76 0a 09 72 65 74 75  sions $rev..retu
20b0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
20c0: 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b 0a 09  thod done {} {..
20d0: 23 20 43 6f 6d 70 6c 65 74 65 20 74 68 65 20 72  # Complete the r
20e0: 65 76 69 73 69 6f 6e 73 2c 20 62 72 61 6e 63 68  evisions, branch
20f0: 65 73 2c 20 61 6e 64 20 74 61 67 73 2e 20 54 68  es, and tags. Th
2100: 69 73 20 69 6e 63 6c 75 64 65 73 0a 09 23 20 6c  is includes..# l
2110: 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6e 6f 6e  ooking for a non
2120: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62  -trunk default b
2130: 72 61 6e 63 68 2c 20 6d 61 72 6b 69 6e 67 20 69  ranch, marking i
2140: 74 73 20 6d 65 6d 62 65 72 73 0a 09 23 20 61 6e  ts members..# an
2150: 64 20 6c 69 6e 6b 69 6e 67 20 74 68 65 6d 20 69  d linking them i
2160: 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2c 20 70  nto the trunk, p
2170: 6f 73 73 69 62 6c 79 20 65 78 63 6c 75 64 69 6e  ossibly excludin
2180: 67 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64  g..# non-trunk d
2190: 61 74 61 2c 20 61 6e 64 20 63 6f 6c 6c 65 63 74  ata, and collect
21a0: 69 6e 67 20 61 67 67 72 65 67 61 74 65 20 73 79  ing aggregate sy
21b0: 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 73 2e  mbol statistics.
21c0: 0a 0a 09 24 73 65 6c 66 20 44 65 74 65 72 6d 69  ...$self Determi
21d0: 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 74  neRevisionOperat
21e0: 69 6f 6e 73 0a 09 24 73 65 6c 66 20 44 65 74 65  ions..$self Dete
21f0: 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76 65  rmineLinesOfDeve
2200: 6c 6f 70 6d 65 6e 74 0a 09 24 73 65 6c 66 20 48  lopment..$self H
2210: 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65 66  andleNonTrunkDef
2220: 61 75 6c 74 42 72 61 6e 63 68 0a 09 24 73 65 6c  aultBranch..$sel
2230: 66 20 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 61  f RemoveIrreleva
2240: 6e 74 44 65 6c 65 74 69 6f 6e 73 0a 09 24 73 65  ntDeletions..$se
2250: 6c 66 20 52 65 6d 6f 76 65 49 6e 69 74 69 61 6c  lf RemoveInitial
2260: 42 72 61 6e 63 68 44 65 6c 65 74 69 6f 6e 73 0a  BranchDeletions.
2270: 0a 09 69 66 20 7b 5b 24 6d 79 70 72 6f 6a 65 63  ..if {[$myprojec
2280: 74 20 74 72 75 6e 6b 6f 6e 6c 79 5d 7d 20 7b 0a  t trunkonly]} {.
2290: 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 6c 75  .    $self Exclu
22a0: 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 6d  deNonTrunkInform
22b0: 61 74 69 6f 6e 0a 09 7d 0a 0a 09 24 73 65 6c 66  ation..}...$self
22c0: 20 41 67 67 72 65 67 61 74 65 53 79 6d 62 6f 6c   AggregateSymbol
22d0: 44 61 74 61 0a 09 72 65 74 75 72 6e 0a 20 20 20  Data..return.   
22e0: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   }..    # # ## #
22f0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
2300: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
2310: 20 20 20 20 23 23 20 50 61 73 73 20 58 49 49 20      ## Pass XII 
2320: 28 49 6d 70 6f 72 74 29 2e 0a 0a 20 20 20 20 6d  (Import)...    m
2330: 65 74 68 6f 64 20 70 75 73 68 74 6f 20 7b 72 65  ethod pushto {re
2340: 70 6f 73 69 74 6f 72 79 7d 20 7b 0a 09 6c 6f 67  pository} {..log
2350: 20 77 72 69 74 65 20 32 20 66 69 6c 65 20 7b 49   write 2 file {I
2360: 6d 70 6f 72 74 69 6e 67 20 66 69 6c 65 20 22 24  mporting file "$
2370: 6d 79 70 61 74 68 22 7d 0a 0a 09 73 65 74 20 77  mypath"}...set w
2380: 73 20 5b 24 72 65 70 6f 73 69 74 6f 72 79 20 77  s [$repository w
2390: 6f 72 6b 73 70 61 63 65 5d 0a 09 73 74 72 75 63  orkspace]..struc
23a0: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b  t::list assign [
23b0: 24 73 65 6c 66 20 45 78 70 61 6e 64 20 24 77 73  $self Expand $ws
23c0: 5d 20 66 69 6c 65 6d 61 70 20 72 65 76 6d 61 70  ] filemap revmap
23d0: 0a 09 23 20 66 69 6c 65 6d 61 70 20 3d 20 64 69  ..# filemap = di
23e0: 63 74 20 28 70 61 74 68 20 2d 3e 20 75 75 69 64  ct (path -> uuid
23f0: 29 0a 09 23 20 72 65 76 6d 61 70 20 20 3d 20 64  )..# revmap  = d
2400: 69 63 74 20 28 70 61 74 68 20 2d 3e 20 72 69 64  ict (path -> rid
2410: 29 0a 0a 09 61 72 72 61 79 20 73 65 74 20 69 64  )...array set id
2420: 6d 61 70 20 5b 24 72 65 70 6f 73 69 74 6f 72 79  map [$repository
2430: 20 69 6d 70 6f 72 74 66 69 6c 65 73 20 24 66 69   importfiles $fi
2440: 6c 65 6d 61 70 5d 0a 0a 09 23 20 57 69 70 65 20  lemap]...# Wipe 
2450: 77 6f 72 6b 73 70 61 63 65 20 63 6c 65 61 6e 20  workspace clean 
2460: 6f 66 20 74 68 65 20 69 6d 70 6f 72 74 65 64 20  of the imported 
2470: 66 69 6c 65 73 2e 0a 09 66 6f 72 65 61 63 68 20  files...foreach 
2480: 78 20 5b 67 6c 6f 62 20 2d 64 69 72 65 63 74 6f  x [glob -directo
2490: 72 79 20 24 77 73 20 72 2a 5d 20 7b 20 3a 3a 66  ry $ws r*] { ::f
24a0: 69 6c 65 20 64 65 6c 65 74 65 20 24 78 20 7d 0a  ile delete $x }.
24b0: 0a 09 66 6f 72 65 61 63 68 20 7b 70 61 74 68 20  ..foreach {path 
24c0: 72 69 64 7d 20 24 72 65 76 6d 61 70 20 7b 0a 09  rid} $revmap {..
24d0: 20 20 20 20 73 65 74 20 75 75 69 64 20 24 69 64      set uuid $id
24e0: 6d 61 70 28 24 70 61 74 68 29 0a 09 20 20 20 20  map($path)..    
24f0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e  state run {...IN
2500: 53 45 52 54 20 49 4e 54 4f 20 72 65 76 75 75 69  SERT INTO revuui
2510: 64 20 28 72 69 64 2c 20 20 75 75 69 64 29 0a 09  d (rid,  uuid)..
2520: 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 20  .VALUES         
2530: 20 20 20 20 20 28 24 72 69 64 2c 20 24 75 75 69       ($rid, $uui
2540: 64 29 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65  d)..    }..}..re
2550: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
2560: 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 20 7b 64  method Expand {d
2570: 69 72 7d 20 7b 0a 09 73 65 74 20 65 78 20 5b 73  ir} {..set ex [s
2580: 74 72 75 63 74 3a 3a 67 72 61 70 68 20 65 78 5d  truct::graph ex]
2590: 20 3b 20 23 20 45 78 70 61 6e 73 69 6f 6e 20 67   ; # Expansion g
25a0: 72 61 70 68 2e 0a 09 73 65 74 20 7a 70 20 5b 73  raph...set zp [s
25b0: 74 72 75 63 74 3a 3a 67 72 61 70 68 20 7a 70 5d  truct::graph zp]
25c0: 20 3b 20 23 20 5a 69 70 2f 49 6d 70 6f 72 74 20   ; # Zip/Import 
25d0: 67 72 61 70 68 2e 0a 0a 09 63 6c 6f 73 65 20 5b  graph....close [
25e0: 6f 70 65 6e 20 24 64 69 72 2f 72 5f 5f 65 6d 70  open $dir/r__emp
25f0: 74 79 5f 5f 20 77 5d 3b 23 20 42 61 73 65 20 66  ty__ w];# Base f
2600: 6f 72 20 64 65 74 61 63 68 65 64 20 72 6f 6f 74  or detached root
2610: 73 20 6f 6e 20 62 72 61 6e 63 68 65 73 2e 0a 0a  s on branches...
2620: 09 23 20 50 68 61 73 65 20 49 3a 20 50 75 6c 6c  .# Phase I: Pull
2630: 20 62 6c 6f 62 73 20 61 6e 64 20 72 65 66 65 72   blobs and refer
2640: 65 6e 63 65 64 20 72 65 76 69 73 69 6f 6e 73 20  enced revisions 
2650: 66 72 6f 6d 20 74 68 65 20 73 74 61 74 65 0a 09  from the state..
2660: 23 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 66  #          and f
2670: 69 6c 6c 20 74 68 65 20 67 72 61 70 68 73 20 77  ill the graphs w
2680: 69 74 68 20 74 68 65 6d 2e 2e 2e 0a 0a 09 23 20  ith them......# 
2690: 4e 6f 74 65 3a 20 57 65 20 75 73 65 20 74 68 65  Note: We use the
26a0: 20 62 6c 6f 62 73 20 66 6f 72 20 65 78 70 61 6e   blobs for expan
26b0: 73 69 6f 6e 20 62 65 63 61 75 73 65 20 77 65 20  sion because we 
26c0: 6e 65 65 64 20 74 68 65 6d 0a 09 23 20 20 20 20  need them..#    
26d0: 20 20 20 61 6c 6c 2c 20 65 76 65 6e 20 74 68 6f     all, even tho
26e0: 73 65 20 77 69 74 68 6f 75 74 20 72 65 76 69 73  se without revis
26f0: 69 6f 6e 2c 20 66 6f 72 20 62 6f 74 68 20 70 72  ion, for both pr
2700: 6f 70 65 72 0a 09 23 20 20 20 20 20 20 20 6f 72  oper..#       or
2710: 64 65 72 69 6e 67 20 61 6e 64 20 65 78 61 63 74  dering and exact
2720: 20 70 61 74 63 68 20 61 70 70 6c 69 63 61 74 69   patch applicati
2730: 6f 6e 2e 0a 0a 09 73 65 74 20 65 61 72 63 73 20  on....set earcs 
2740: 20 20 7b 7d 20 3b 20 23 20 41 72 63 73 20 66 6f    {} ; # Arcs fo
2750: 72 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 61 70  r expansion grap
2760: 68 0a 09 73 65 74 20 7a 61 72 63 73 20 20 20 7b  h..set zarcs   {
2770: 7d 20 3b 20 23 20 41 72 63 73 20 66 6f 72 20 7a  } ; # Arcs for z
2780: 69 70 20 67 72 61 70 68 0a 09 73 65 74 20 72 65  ip graph..set re
2790: 76 6d 61 70 20 20 7b 7d 20 3b 20 23 20 70 61 74  vmap  {} ; # pat
27a0: 68 20 2d 3e 20 72 69 64 20 6d 61 70 20 74 6f 20  h -> rid map to 
27b0: 6c 61 74 65 72 20 6d 65 72 67 65 20 75 75 69 64  later merge uuid
27c0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 0a 09 66   information...f
27d0: 6f 72 65 61 63 68 20 7b 72 69 64 20 72 65 76 6e  oreach {rid revn
27e0: 72 20 70 61 72 65 6e 74 20 63 68 69 6c 64 20 63  r parent child c
27f0: 6f 66 66 20 63 6c 65 6e 20 63 69 64 20 63 70 61  off clen cid cpa
2800: 72 65 6e 74 7d 20 5b 73 74 61 74 65 20 72 75 6e  rent} [state run
2810: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42   {..    SELECT B
2820: 2e 72 69 64 2c 20 52 2e 72 65 76 2c 20 52 2e 70  .rid, R.rev, R.p
2830: 61 72 65 6e 74 2c 20 52 2e 63 68 69 6c 64 2c 20  arent, R.child, 
2840: 42 2e 63 6f 66 66 2c 20 42 2e 63 6c 65 6e 2c 20  B.coff, B.clen, 
2850: 42 2e 62 69 64 2c 20 42 2e 70 69 64 0a 09 20 20  B.bid, B.pid..  
2860: 20 20 46 52 4f 4d 20 20 20 20 20 20 20 20 20 20    FROM          
2870: 20 20 62 6c 6f 62 20 42 0a 09 20 20 20 20 4c 45    blob B..    LE
2880: 46 54 20 4f 55 54 45 52 20 4a 4f 49 4e 20 72 65  FT OUTER JOIN re
2890: 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 4f 4e  vision R..    ON
28a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42 2e                B.
28b0: 72 69 64 20 3d 20 52 2e 72 69 64 0a 09 20 20 20  rid = R.rid..   
28c0: 20 57 48 45 52 45 20 20 42 2e 66 69 64 20 3d 20   WHERE  B.fid = 
28d0: 24 6d 79 69 64 0a 09 7d 5d 20 7b 0a 09 20 20 20  $myid..}] {..   
28e0: 20 23 20 4d 61 69 6e 20 64 61 74 61 20 61 72 65   # Main data are
28f0: 20 62 6c 6f 62 73 2c 20 6d 6f 73 74 20 77 69 6c   blobs, most wil
2900: 6c 20 68 61 76 65 20 72 65 76 69 73 69 6f 6e 73  l have revisions
2910: 2c 20 62 75 74 20 6e 6f 74 0a 09 20 20 20 20 23  , but not..    #
2920: 20 61 6c 6c 2e 20 54 68 65 20 65 78 70 61 6e 73   all. The expans
2930: 69 6f 6e 20 67 72 61 70 68 20 69 73 20 62 6c 6f  ion graph is blo
2940: 62 20 62 61 73 65 64 2c 20 77 68 65 72 65 61 73  b based, whereas
2950: 20 74 68 65 0a 09 20 20 20 20 23 20 72 65 63 6f   the..    # reco
2960: 6d 70 72 65 73 73 69 6f 6e 20 67 72 61 70 68 20  mpression graph 
2970: 69 73 20 72 65 76 69 73 69 6f 6e 20 62 61 73 65  is revision base
2980: 64 2e 0a 0a 09 20 20 20 20 69 66 20 7b 24 72 65  d....    if {$re
2990: 76 6e 72 20 6e 65 20 22 22 7d 20 7b 0a 09 09 23  vnr ne ""} {...#
29a0: 20 42 6c 6f 62 20 68 61 73 20 72 65 76 69 73 69   Blob has revisi
29b0: 6f 6e 2c 20 65 78 74 65 6e 64 20 72 65 63 6f 6d  on, extend recom
29c0: 70 72 65 73 73 69 6f 6e 20 67 72 61 70 68 2e 0a  pression graph..
29d0: 0a 09 09 6c 61 70 70 65 6e 64 20 72 65 76 6d 61  ...lappend revma
29e0: 70 20 72 24 72 65 76 6e 72 20 24 72 69 64 0a 0a  p r$revnr $rid..
29f0: 09 09 24 7a 70 20 6e 6f 64 65 20 69 6e 73 65 72  ..$zp node inser
2a00: 74 20 24 72 69 64 0a 09 09 24 7a 70 20 6e 6f 64  t $rid...$zp nod
2a10: 65 20 73 65 74 20 20 20 20 24 72 69 64 20 72 65  e set    $rid re
2a20: 76 6e 72 20 24 72 65 76 6e 72 0a 09 09 24 7a 70  vnr $revnr...$zp
2a30: 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 72 69   node set    $ri
2a40: 64 20 6c 61 62 65 6c 20 3c 24 72 65 76 6e 72 3e  d label <$revnr>
2a50: 0a 0a 09 09 69 66 20 7b 24 63 68 69 6c 64 20 6e  ....if {$child n
2a60: 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 6c 61  e ""} {...    la
2a70: 70 70 65 6e 64 20 7a 61 72 63 73 20 24 63 68 69  ppend zarcs $chi
2a80: 6c 64 20 24 72 69 64 0a 09 09 7d 0a 09 20 20 20  ld $rid...}..   
2a90: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20 57 65   } else {...# We
2aa0: 20 66 61 6b 65 20 61 20 72 65 76 6e 72 20 66 6f   fake a revnr fo
2ab0: 72 20 74 68 65 20 62 6c 6f 62 73 20 77 68 69 63  r the blobs whic
2ac0: 68 20 68 61 76 65 20 6e 6f 0a 09 09 23 20 72 65  h have no...# re
2ad0: 76 69 73 69 6f 6e 2c 20 66 6f 72 20 75 73 65 20  vision, for use 
2ae0: 69 6e 20 74 68 65 20 65 78 70 61 6e 73 69 6f 6e  in the expansion
2af0: 20 67 72 61 70 68 2e 0a 09 09 73 65 74 20 72 65   graph....set re
2b00: 76 6e 72 20 67 68 6f 73 74 24 63 69 64 0a 09 20  vnr ghost$cid.. 
2b10: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 4e 6f 77     }...    # Now
2b20: 20 74 68 65 20 65 78 70 61 6e 73 69 6f 6e 20 67   the expansion g
2b30: 72 61 70 68 2e 0a 0a 09 20 20 20 20 24 65 78 20  raph....    $ex 
2b40: 6e 6f 64 65 20 69 6e 73 65 72 74 20 24 63 69 64  node insert $cid
2b50: 0a 09 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73  ..    $ex node s
2b60: 65 74 20 20 20 20 24 63 69 64 20 74 65 78 74 20  et    $cid text 
2b70: 20 5b 6c 69 73 74 20 24 63 6f 66 66 20 24 63 6c   [list $coff $cl
2b80: 65 6e 5d 0a 09 20 20 20 20 24 65 78 20 6e 6f 64  en]..    $ex nod
2b90: 65 20 73 65 74 20 20 20 20 24 63 69 64 20 72 65  e set    $cid re
2ba0: 76 6e 72 20 24 72 65 76 6e 72 0a 09 20 20 20 20  vnr $revnr..    
2bb0: 24 65 78 20 6e 6f 64 65 20 73 65 74 20 20 20 20  $ex node set    
2bc0: 24 63 69 64 20 6c 61 62 65 6c 20 3c 24 72 65 76  $cid label <$rev
2bd0: 6e 72 3e 0a 0a 09 20 20 20 20 69 66 20 7b 24 63  nr>...    if {$c
2be0: 70 61 72 65 6e 74 20 6e 65 20 22 22 7d 20 7b 0a  parent ne ""} {.
2bf0: 09 09 23 20 54 68 65 20 65 78 70 61 6e 73 69 6f  ..# The expansio
2c00: 6e 20 61 72 63 73 20 67 6f 20 66 72 6f 6d 20 62  n arcs go from b
2c10: 61 73 65 6c 69 6e 65 20 74 6f 20 64 65 6c 74 61  aseline to delta
2c20: 0a 09 09 23 20 64 65 73 63 65 6e 64 61 6e 74 2c  ...# descendant,
2c30: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 62 6c   based on the bl
2c40: 6f 62 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  ob information..
2c50: 09 09 6c 61 70 70 65 6e 64 20 65 61 72 63 73 20  ..lappend earcs 
2c60: 24 63 70 61 72 65 6e 74 20 24 63 69 64 0a 09 20  $cparent $cid.. 
2c70: 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 50 68 61 73     }..}...# Phas
2c80: 65 20 49 49 3a 20 49 6e 73 65 72 74 20 74 68 65  e II: Insert the
2c90: 20 61 63 63 75 6d 75 6c 61 74 65 64 20 64 65 70   accumulated dep
2ca0: 65 6e 64 65 6e 63 69 65 73 0a 0a 09 66 6f 72 65  endencies...fore
2cb0: 61 63 68 20 7b 66 72 6f 6d 20 74 6f 7d 20 24 65  ach {from to} $e
2cc0: 61 72 63 73 20 7b 20 24 65 78 20 61 72 63 20 69  arcs { $ex arc i
2cd0: 6e 73 65 72 74 20 24 66 72 6f 6d 20 24 74 6f 20  nsert $from $to 
2ce0: 7d 0a 09 66 6f 72 65 61 63 68 20 7b 66 72 6f 6d  }..foreach {from
2cf0: 20 74 6f 7d 20 24 7a 61 72 63 73 20 7b 20 24 7a   to} $zarcs { $z
2d00: 70 20 61 72 63 20 69 6e 73 65 72 74 20 24 66 72  p arc insert $fr
2d10: 6f 6d 20 24 74 6f 20 7d 0a 0a 09 23 20 50 68 61  om $to }...# Pha
2d20: 73 65 20 49 49 49 3a 20 54 72 61 76 65 72 73 65  se III: Traverse
2d30: 20 74 68 65 20 67 72 61 70 68 73 2c 20 65 78 70   the graphs, exp
2d40: 61 6e 64 20 74 68 65 20 66 69 6c 65 2c 20 61 6e  and the file, an
2d50: 64 0a 09 23 20 20 20 20 20 20 20 20 20 20 20 20  d..#            
2d60: 67 65 6e 65 72 61 74 65 20 69 6d 70 6f 72 74 20  generate import 
2d70: 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e 0a 0a 09  instructions....
2d80: 73 65 74 20 61 72 63 68 69 76 65 20 5b 3a 3a 66  set archive [::f
2d90: 69 6c 65 20 6a 6f 69 6e 20 5b 24 6d 79 70 72 6f  ile join [$mypro
2da0: 6a 65 63 74 20 66 75 6c 6c 70 61 74 68 5d 20 24  ject fullpath] $
2db0: 6d 79 70 61 74 68 5d 0a 09 73 65 74 20 61 63 20  mypath]..set ac 
2dc0: 20 20 20 20 20 5b 6f 70 65 6e 20 24 61 72 63 68       [open $arch
2dd0: 69 76 65 20 72 5d 0a 09 66 63 6f 6e 66 69 67 75  ive r]..fconfigu
2de0: 72 65 20 24 61 63 20 2d 74 72 61 6e 73 6c 61 74  re $ac -translat
2df0: 69 6f 6e 20 62 69 6e 61 72 79 0a 0a 09 23 20 46  ion binary...# F
2e00: 69 72 73 74 20 74 72 61 76 65 72 73 65 20 74 68  irst traverse th
2e10: 65 20 65 78 70 61 6e 73 69 6f 6e 20 67 72 61 70  e expansion grap
2e20: 68 2c 20 74 68 69 73 20 67 69 76 65 73 20 75 73  h, this gives us
2e30: 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e   the..# revision
2e40: 73 20 69 6e 20 74 68 65 20 6f 72 64 65 72 20 77  s in the order w
2e50: 65 20 68 61 76 65 20 74 6f 20 65 78 70 61 6e 64  e have to expand
2e60: 20 74 68 65 6d 2c 20 77 68 69 63 68 20 77 65 20   them, which we 
2e70: 64 6f 2e 0a 0a 09 73 65 74 20 6d 61 78 20 5b 6c  do....set max [l
2e80: 6c 65 6e 67 74 68 20 5b 24 65 78 20 6e 6f 64 65  length [$ex node
2e90: 73 5d 5d 0a 09 73 65 74 20 6d 79 69 6d 70 6f 72  s]]..set myimpor
2ea0: 74 20 30 0a 0a 09 67 74 63 6f 72 65 20 64 61 74  t 0...gtcore dat
2eb0: 61 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64  acmd   [mymethod
2ec0: 20 45 78 70 61 6e 64 44 61 74 61 5d 0a 09 67 74   ExpandData]..gt
2ed0: 63 6f 72 65 20 66 6f 72 6d 61 74 63 6d 64 20 5b  core formatcmd [
2ee0: 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 46  mymethod ExpandF
2ef0: 6f 72 6d 61 74 5d 0a 09 67 74 63 6f 72 65 20 73  ormat]..gtcore s
2f00: 6f 72 74 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68  ortcmd   [mymeth
2f10: 6f 64 20 45 78 70 61 6e 64 53 6f 72 74 5d 0a 09  od ExpandSort]..
2f20: 67 74 63 6f 72 65 20 73 61 76 65 63 6d 64 20 20  gtcore savecmd  
2f30: 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e   [mymethod Expan
2f40: 64 31 20 24 61 63 20 24 64 69 72 20 24 6d 61 78  d1 $ac $dir $max
2f50: 5d 0a 0a 09 67 74 63 6f 72 65 20 74 72 61 76 65  ]...gtcore trave
2f60: 72 73 65 20 24 65 78 20 7b 45 78 70 61 6e 64 69  rse $ex {Expandi
2f70: 6e 67 20 72 65 76 69 73 69 6f 6e 73 2e 2e 2e 7d  ng revisions...}
2f80: 0a 09 63 6c 6f 73 65 20 24 61 63 0a 0a 09 23 20  ..close $ac...# 
2f90: 4e 6f 77 20 74 72 61 76 65 72 73 65 20 74 68 65  Now traverse the
2fa0: 20 69 6d 70 6f 72 74 20 67 72 61 70 68 2c 20 74   import graph, t
2fb0: 68 69 73 20 62 75 69 6c 64 73 20 74 68 65 20 69  his builds the i
2fc0: 6e 73 74 72 75 63 74 69 6f 6e 0a 09 23 20 6d 61  nstruction..# ma
2fd0: 70 20 66 6f 72 20 74 68 65 20 66 6f 73 73 69 6c  p for the fossil
2fe0: 20 64 65 6c 74 61 73 2e 0a 0a 09 67 74 63 6f 72   deltas....gtcor
2ff0: 65 20 64 61 74 61 63 6d 64 20 20 20 5b 6d 79 6d  e datacmd   [mym
3000: 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74 61  ethod ExpandData
3010: 5d 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d 61 74  ]..gtcore format
3020: 63 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78  cmd [mymethod Ex
3030: 70 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67 74 63  pandFormat]..gtc
3040: 6f 72 65 20 73 6f 72 74 63 6d 64 20 20 20 5b 6d  ore sortcmd   [m
3050: 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53 6f  ymethod ExpandSo
3060: 72 74 5d 0a 09 67 74 63 6f 72 65 20 73 61 76 65  rt]..gtcore save
3070: 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20  cmd   [mymethod 
3080: 45 78 70 61 6e 64 32 5d 0a 0a 09 73 65 74 20 6d  Expand2]...set m
3090: 79 69 6d 70 6f 72 74 20 7b 7d 0a 09 67 74 63 6f  yimport {}..gtco
30a0: 72 65 20 74 72 61 76 65 72 73 65 20 24 7a 70 20  re traverse $zp 
30b0: 7b 47 65 6e 65 72 61 74 69 6e 67 20 72 65 76 69  {Generating revi
30c0: 73 69 6f 6e 20 6f 72 64 65 72 20 66 6f 72 20 69  sion order for i
30d0: 6d 70 6f 72 74 2e 2e 2e 7d 0a 09 73 65 74 20 66  mport...}..set f
30e0: 69 6c 65 6d 61 70 20 24 6d 79 69 6d 70 6f 72 74  ilemap $myimport
30f0: 0a 09 75 6e 73 65 74 20 6d 79 69 6d 70 6f 72 74  ..unset myimport
3100: 0a 0a 09 23 20 41 6e 64 20 62 61 63 6b 20 74 6f  ...# And back to
3110: 20 69 6d 70 6f 72 74 20 63 6f 6e 74 72 6f 6c 0a   import control.
3120: 0a 09 24 65 78 20 64 65 73 74 72 6f 79 0a 09 24  ..$ex destroy..$
3130: 7a 70 20 64 65 73 74 72 6f 79 0a 0a 09 72 65 74  zp destroy...ret
3140: 75 72 6e 20 5b 6c 69 73 74 20 24 66 69 6c 65 6d  urn [list $filem
3150: 61 70 20 24 72 65 76 6d 61 70 5d 0a 20 20 20 20  ap $revmap].    
3160: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78  }..    method Ex
3170: 70 61 6e 64 44 61 74 61 20 20 20 7b 67 72 61 70  pandData   {grap
3180: 68 20 6e 6f 64 65 7d 20 7b 20 72 65 74 75 72 6e  h node} { return
3190: 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65   [$graph node ge
31a0: 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 20 7d  t $node revnr] }
31b0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61  .    method Expa
31c0: 6e 64 46 6f 72 6d 61 74 20 7b 67 72 61 70 68 20  ndFormat {graph 
31d0: 69 74 65 6d 7d 20 7b 20 72 65 74 75 72 6e 20 3c  item} { return <
31e0: 5b 6c 69 6e 64 65 78 20 24 69 74 65 6d 20 31 5d  [lindex $item 1]
31f0: 3e 20 7d 20 3b 20 23 20 72 65 76 6e 72 0a 20 20  > } ; # revnr.  
3200: 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53    method ExpandS
3210: 6f 72 74 20 20 20 7b 67 72 61 70 68 20 63 61 6e  ort   {graph can
3220: 64 69 64 61 74 65 73 7d 20 7b 0a 09 23 20 63 61  didates} {..# ca
3230: 6e 64 69 64 61 74 65 73 20 3d 20 6c 69 73 74 28  ndidates = list(
3240: 69 74 65 6d 29 2c 20 69 74 65 6d 20 3d 20 6c 69  item), item = li
3250: 73 74 28 6e 6f 64 65 20 72 65 76 6e 72 29 0a 09  st(node revnr)..
3260: 23 20 53 6f 72 74 20 62 79 20 6e 6f 64 65 20 61  # Sort by node a
3270: 6e 64 20 72 65 76 6e 72 20 2d 3e 20 54 72 75 6e  nd revnr -> Trun
3280: 6b 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 65  k revisions come
3290: 20 66 69 72 73 74 2e 0a 09 72 65 74 75 72 6e 20   first...return 
32a0: 5b 6c 73 6f 72 74 20 2d 69 6e 64 65 78 20 31 20  [lsort -index 1 
32b0: 2d 64 69 63 74 20 5b 6c 73 6f 72 74 20 2d 69 6e  -dict [lsort -in
32c0: 64 65 78 20 30 20 2d 64 69 63 74 20 24 63 61 6e  dex 0 -dict $can
32d0: 64 69 64 61 74 65 73 5d 5d 0a 20 20 20 20 7d 0a  didates]].    }.
32e0: 20 20 20 20 6d 65 74 68 6f 64 20 45 78 70 61 6e      method Expan
32f0: 64 31 20 7b 63 68 61 6e 20 64 69 72 20 6d 61 78  d1 {chan dir max
3300: 20 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a 09   graph node} {..
3310: 6c 6f 67 20 70 72 6f 67 72 65 73 73 20 33 20 66  log progress 3 f
3320: 69 6c 65 20 24 6d 79 69 6d 70 6f 72 74 20 24 6d  ile $myimport $m
3330: 61 78 20 3b 20 69 6e 63 72 20 6d 79 69 6d 70 6f  ax ; incr myimpo
3340: 72 74 0a 0a 09 73 65 74 20 72 65 76 6e 72 20 20  rt...set revnr  
3350: 20 20 20 20 20 20 20 20 20 5b 24 67 72 61 70 68           [$graph
3360: 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20   node get $node 
3370: 72 65 76 6e 72 5d 0a 09 73 65 74 20 66 6e 61 6d  revnr]..set fnam
3380: 65 20 20 20 20 20 20 20 20 20 20 72 24 72 65 76  e          r$rev
3390: 6e 72 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73 74  nr..struct::list
33a0: 20 61 73 73 69 67 6e 20 5b 24 67 72 61 70 68 20   assign [$graph 
33b0: 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65 20 74  node get $node t
33c0: 65 78 74 5d 20 6f 66 66 73 65 74 20 6c 65 6e 67  ext] offset leng
33d0: 74 68 0a 0a 09 69 66 20 7b 24 6c 65 6e 67 74 68  th...if {$length
33e0: 20 3c 20 30 7d 20 7b 0a 09 20 20 20 20 73 65 74   < 0} {..    set
33f0: 20 64 61 74 61 20 22 22 0a 09 7d 20 65 6c 73 65   data ""..} else
3400: 20 7b 0a 09 20 20 20 20 73 65 65 6b 20 24 63 68   {..    seek $ch
3410: 61 6e 20 24 6f 66 66 73 65 74 20 73 74 61 72 74  an $offset start
3420: 0a 09 20 20 20 20 73 65 74 20 64 61 74 61 20 5b  ..    set data [
3430: 73 74 72 69 6e 67 20 6d 61 70 20 7b 40 40 20 40  string map {@@ @
3440: 7d 20 5b 72 65 61 64 20 24 63 68 61 6e 20 24 6c  } [read $chan $l
3450: 65 6e 67 74 68 5d 5d 0a 09 7d 0a 0a 09 69 66 20  ength]]..}...if 
3460: 7b 21 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 6b  {![$graph node k
3470: 65 79 65 78 69 73 74 73 20 24 6e 6f 64 65 20 5f  eyexists $node _
3480: 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a 09 20 20 20  _base__]} {..   
3490: 20 23 20 46 75 6c 6c 20 74 65 78 74 20 6e 6f 64   # Full text nod
34a0: 65 2e 20 47 65 74 20 74 68 65 20 64 61 74 61 2c  e. Get the data,
34b0: 20 64 65 63 6f 64 65 20 69 74 2c 20 61 6e 64 20   decode it, and 
34c0: 73 61 76 65 2e 0a 0a 09 20 20 20 20 6c 6f 67 20  save....    log 
34d0: 77 72 69 74 65 20 38 20 66 69 6c 65 20 7b 45 78  write 8 file {Ex
34e0: 70 61 6e 64 69 6e 67 20 3c 24 72 65 76 6e 72 3e  panding <$revnr>
34f0: 2c 20 66 75 6c 6c 20 74 65 78 74 7d 0a 0a 09 20  , full text}... 
3500: 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69     fileutil::wri
3510: 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c 61 74  teFile -translat
3520: 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69 72 2f  ion binary $dir/
3530: 24 66 6e 61 6d 65 20 24 64 61 74 61 0a 09 7d 20  $fname $data..} 
3540: 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 20 44 65  else {..    # De
3550: 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 73 65  lta node. __base
3560: 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  __ is the name o
3570: 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61  f the file conta
3580: 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74 68 65  ining..    # the
3590: 20 62 61 73 65 6c 69 6e 65 2e 20 54 68 65 20 70   baseline. The p
35a0: 61 74 63 68 20 69 73 20 61 74 20 74 68 65 20 73  atch is at the s
35b0: 70 65 63 69 66 69 65 64 20 6c 6f 63 61 74 69 6f  pecified locatio
35c0: 6e 20 6f 66 0a 09 20 20 20 20 23 20 74 68 65 20  n of..    # the 
35d0: 61 72 63 68 69 76 65 20 66 69 6c 65 2e 0a 0a 09  archive file....
35e0: 20 20 20 20 73 65 74 20 66 62 61 73 65 20 5b 24      set fbase [$
35f0: 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24  graph node get $
3600: 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09  node __base__]..
3610: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 38 20      log write 8 
3620: 66 69 6c 65 20 7b 45 78 70 61 6e 64 69 6e 67 20  file {Expanding 
3630: 3c 24 72 65 76 6e 72 3e 2c 20 69 73 20 64 65 6c  <$revnr>, is del
3640: 74 61 20 6f 66 20 3c 24 66 62 61 73 65 3e 7d 0a  ta of <$fbase>}.
3650: 0a 09 20 20 20 20 73 65 74 20 62 61 73 65 20 5b  ..    set base [
3660: 66 69 6c 65 75 74 69 6c 3a 3a 63 61 74 20 2d 74  fileutil::cat -t
3670: 72 61 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72  ranslation binar
3680: 79 20 24 64 69 72 2f 24 66 62 61 73 65 5d 0a 0a  y $dir/$fbase]..
3690: 09 20 20 20 20 23 20 57 72 69 74 69 6e 67 20 74  .    # Writing t
36a0: 68 65 20 70 61 74 63 68 20 74 6f 20 64 69 73 6b  he patch to disk
36b0: 20 69 73 20 6a 75 73 74 20 66 6f 72 20 62 65 74   is just for bet
36c0: 74 65 72 0a 09 20 20 20 20 23 20 64 65 62 75 67  ter..    # debug
36d0: 67 69 6e 67 2e 20 49 74 20 69 73 20 6e 6f 74 20  ging. It is not 
36e0: 75 73 65 64 20 6f 74 68 65 72 77 69 73 65 2e 0a  used otherwise..
36f0: 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77  .    fileutil::w
3700: 72 69 74 65 46 69 6c 65 20 24 64 69 72 2f 72 70  riteFile $dir/rp
3710: 61 74 63 68 20 24 64 61 74 61 0a 09 20 20 20 20  atch $data..    
3720: 66 69 6c 65 75 74 69 6c 3a 3a 77 72 69 74 65 46  fileutil::writeF
3730: 69 6c 65 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e  ile -translation
3740: 20 62 69 6e 61 72 79 20 24 64 69 72 2f 24 66 6e   binary $dir/$fn
3750: 61 6d 65 20 5c 0a 09 09 5b 41 70 70 6c 79 20 24  ame \...[Apply $
3760: 62 61 73 65 20 24 64 61 74 61 5d 0a 09 7d 0a 0a  base $data]..}..
3770: 09 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 73  .# Post to all s
3780: 75 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 74  uccessors that t
3790: 68 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 65  he just generate
37a0: 64 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 0a  d file is their.
37b0: 09 23 20 62 61 73 65 6c 69 6e 65 2e 0a 0a 09 66  .# baseline....f
37c0: 6f 72 65 61 63 68 20 6f 75 74 20 5b 24 67 72 61  oreach out [$gra
37d0: 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74 20 24 6e  ph nodes -out $n
37e0: 6f 64 65 5d 20 7b 0a 09 20 20 20 20 24 67 72 61  ode] {..    $gra
37f0: 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f 75 74  ph node set $out
3800: 20 5f 5f 62 61 73 65 5f 5f 20 24 66 6e 61 6d 65   __base__ $fname
3810: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
3820: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 41 70 70 6c  }..    proc Appl
3830: 79 20 7b 62 61 73 65 20 64 65 6c 74 61 7d 20 7b  y {base delta} {
3840: 0a 09 23 20 62 61 73 65 20 20 3d 20 62 61 73 65  ..# base  = base
3850: 20 74 65 78 74 2e 0a 09 23 20 64 65 6c 74 61 20   text...# delta 
3860: 3d 20 64 65 6c 74 61 20 69 6e 20 72 63 73 20 66  = delta in rcs f
3870: 6f 72 6d 61 74 2e 0a 09 23 0a 09 23 20 42 6f 74  ormat...#..# Bot
3880: 68 20 73 74 72 69 6e 67 73 20 61 72 65 20 75 6e  h strings are un
3890: 65 6e 63 6f 64 65 64 2c 20 69 2e 65 2e 20 74 68  encoded, i.e. th
38a0: 69 6e 67 73 20 6c 69 6b 65 20 40 40 2c 20 65 74  ings like @@, et
38b0: 63 2e 20 68 61 76 65 0a 09 23 20 61 6c 72 65 61  c. have..# alrea
38c0: 64 79 20 62 65 65 6e 20 72 65 70 6c 61 63 65 64  dy been replaced
38d0: 20 77 69 74 68 20 74 68 65 69 72 20 70 72 6f 70   with their prop
38e0: 65 72 20 63 68 61 72 61 63 74 65 72 73 2e 0a 09  er characters...
38f0: 23 0a 09 23 20 52 65 74 75 72 6e 20 76 61 6c 75  #..# Return valu
3900: 65 20 69 73 20 74 68 65 20 70 61 74 63 68 65 64  e is the patched
3910: 20 74 65 78 74 2e 0a 0a 09 73 65 74 20 62 61 73   text....set bas
3920: 65 20 5b 73 70 6c 69 74 20 24 62 61 73 65 20 5c  e [split $base \
3930: 6e 5d 0a 09 73 65 74 20 62 6c 65 6e 20 5b 6c 6c  n]..set blen [ll
3940: 65 6e 67 74 68 20 24 62 61 73 65 5d 0a 09 73 65  ength $base]..se
3950: 74 20 6f 6f 66 66 20 30 0a 09 73 65 74 20 72 65  t ooff 0..set re
3960: 73 20 22 22 0a 0a 09 73 65 74 20 6c 69 6e 65 73  s ""...set lines
3970: 20 20 5b 73 70 6c 69 74 20 24 64 65 6c 74 61 20    [split $delta 
3980: 5c 6e 5d 0a 09 73 65 74 20 6e 6c 69 6e 65 73 20  \n]..set nlines 
3990: 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 73 5d  [llength $lines]
39a0: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 31 20  ...log write 11 
39b0: 66 69 6c 65 20 7b 42 61 73 65 20 20 6c 69 6e 65  file {Base  line
39c0: 73 20 3d 20 24 62 6c 65 6e 7d 0a 09 6c 6f 67 20  s = $blen}..log 
39d0: 77 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b 44  write 11 file {D
39e0: 65 6c 74 61 20 6c 69 6e 65 73 20 3d 20 24 6e 6c  elta lines = $nl
39f0: 69 6e 65 73 7d 0a 0a 09 66 6f 72 20 7b 73 65 74  ines}...for {set
3a00: 20 69 20 30 7d 20 7b 24 69 20 3c 20 24 6e 6c 69   i 0} {$i < $nli
3a10: 6e 65 73 7d 20 7b 7d 20 7b 0a 09 20 20 20 20 6c  nes} {} {..    l
3a20: 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65  og write 11 file
3a30: 20 7b 20 20 20 20 40 20 24 69 20 3d 20 5b 6c 69   {    @ $i = [li
3a40: 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69 5d 7d  ndex $lines $i]}
3a50: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
3a60: 31 31 20 66 69 6c 65 20 7b 20 6f 6f 66 66 20 24  11 file { ooff $
3a70: 6f 6f 66 66 7d 0a 0a 09 20 20 20 20 69 66 20 7b  ooff}...    if {
3a80: 21 5b 72 65 67 65 78 70 20 7b 5e 28 5b 61 64 5d  ![regexp {^([ad]
3a90: 29 28 5c 64 2b 29 5c 73 28 5c 64 2b 29 24 7d 20  )(\d+)\s(\d+)$} 
3aa0: 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 24  [lindex $lines $
3ab0: 69 5d 20 2d 3e 20 63 6d 64 20 73 6c 20 63 6e 5d  i] -> cmd sl cn]
3ac0: 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 69 6e  } {...trouble in
3ad0: 74 65 72 6e 61 6c 20 22 42 61 64 20 65 64 20 63  ternal "Bad ed c
3ae0: 6f 6d 6d 61 6e 64 20 27 5b 6c 69 6e 64 65 78 20  ommand '[lindex 
3af0: 24 6c 69 6e 65 73 20 24 69 5d 27 22 0a 09 20 20  $lines $i]'"..  
3b00: 20 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72    }...    log wr
3b10: 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 20 63  ite 11 file {  c
3b20: 6d 64 20 24 63 6d 64 7d 0a 09 20 20 20 20 6c 6f  md $cmd}..    lo
3b30: 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65 20  g write 11 file 
3b40: 7b 20 20 20 73 6c 20 24 73 6c 7d 0a 09 20 20 20  {   sl $sl}..   
3b50: 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69   log write 11 fi
3b60: 6c 65 20 7b 20 20 20 63 6e 20 24 63 6e 7d 0a 0a  le {   cn $cn}..
3b70: 09 20 20 20 20 69 6e 63 72 20 69 0a 09 20 20 20  .    incr i..   
3b80: 20 73 65 74 20 65 6c 20 5b 65 78 70 72 20 7b 24   set el [expr {$
3b90: 73 6c 20 2b 20 24 63 6e 7d 5d 0a 0a 09 20 20 20  sl + $cn}]...   
3ba0: 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69   log write 11 fi
3bb0: 6c 65 20 7b 20 20 20 65 6c 20 24 65 6c 7d 0a 0a  le {   el $el}..
3bc0: 09 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61  .    switch -exa
3bd0: 63 74 20 2d 2d 20 24 63 6d 64 20 7b 0a 09 09 64  ct -- $cmd {...d
3be0: 20 7b 0a 09 09 20 20 20 20 69 6e 63 72 20 73 6c   {...    incr sl
3bf0: 20 2d 31 0a 09 09 20 20 20 20 69 6e 63 72 20 65   -1...    incr e
3c00: 6c 20 2d 31 0a 09 09 20 20 20 20 69 66 20 7b 24  l -1...    if {$
3c10: 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72  sl < $ooff} { tr
3c20: 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b  ouble internal {
3c30: 44 65 6c 65 74 69 6f 6e 20 62 65 66 6f 72 65 20  Deletion before 
3c40: 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 09 20  last edit} }... 
3c50: 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 62 6c     if {$sl > $bl
3c60: 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e  en} { trouble in
3c70: 74 65 72 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e  ternal {Deletion
3c80: 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64 7d 20   past file end} 
3c90: 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 65 6c 20  }...    if {$el 
3ca0: 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62  > $blen} { troub
3cb0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c  le internal {Del
3cc0: 65 74 69 6f 6e 20 62 65 79 6f 6e 64 20 66 69 6c  etion beyond fil
3cd0: 65 20 65 6e 64 7d 20 7d 0a 09 09 20 20 20 20 66  e end} }...    f
3ce0: 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67 65  oreach x [lrange
3cf0: 20 24 62 61 73 65 20 24 6f 6f 66 66 20 24 73 6c   $base $ooff $sl
3d00: 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20  ] { lappend res 
3d10: 24 78 20 7d 0a 09 09 20 20 20 20 73 65 74 20 20  $x }...    set  
3d20: 6f 6f 66 66 20 24 65 6c 0a 09 09 7d 0a 09 09 61  ooff $el...}...a
3d30: 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c   {...    if {$sl
3d40: 20 3c 20 24 6f 6f 66 66 7d 20 7b 20 74 72 6f 75   < $ooff} { trou
3d50: 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49 6e  ble internal {In
3d60: 73 65 72 74 20 62 65 66 6f 72 65 20 6c 61 73 74  sert before last
3d70: 20 65 64 69 74 7d 20 7d 0a 09 09 20 20 20 20 69   edit} }...    i
3d80: 66 20 7b 24 73 6c 20 3e 20 24 62 6c 65 6e 7d 20  f {$sl > $blen} 
3d90: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e  { trouble intern
3da0: 61 6c 20 7b 49 6e 73 65 72 74 20 70 61 73 74 20  al {Insert past 
3db0: 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 0a 09 09 20  file end} }.... 
3dc0: 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c 72     foreach x [lr
3dd0: 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66 66  ange $base $ooff
3de0: 20 24 73 6c 5d 20 20 20 20 20 20 20 20 20 20 20   $sl]           
3df0: 20 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73 20    { lappend res 
3e00: 24 78 20 7d 0a 09 09 20 20 20 20 66 6f 72 65 61  $x }...    forea
3e10: 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 6c 69  ch x [lrange $li
3e20: 6e 65 73 20 24 69 20 5b 65 78 70 72 20 7b 24 69  nes $i [expr {$i
3e30: 20 2b 20 24 63 6e 7d 5d 5d 20 7b 20 6c 61 70 70   + $cn}]] { lapp
3e40: 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09 09 20  end res $x }... 
3e50: 20 20 20 73 65 74 20 6f 6f 66 66 20 24 73 6c 0a     set ooff $sl.
3e60: 09 09 20 20 20 20 69 6e 63 72 20 69 20 24 63 6e  ..    incr i $cn
3e70: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  ...}..    }..}..
3e80: 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67  foreach x [lrang
3e90: 65 20 24 62 61 73 65 20 24 6f 6f 66 66 20 65 6e  e $base $ooff en
3ea0: 64 5d 20 7b 20 6c 61 70 70 65 6e 64 20 72 65 73  d] { lappend res
3eb0: 20 24 78 20 7d 0a 09 72 65 74 75 72 6e 20 5b 6a   $x }..return [j
3ec0: 6f 69 6e 20 24 72 65 73 20 5c 6e 5d 0a 20 20 20  oin $res \n].   
3ed0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45   }..    method E
3ee0: 78 70 61 6e 64 32 20 7b 67 72 61 70 68 20 6e 6f  xpand2 {graph no
3ef0: 64 65 7d 20 7b 0a 09 73 65 74 20 72 65 76 6e 72  de} {..set revnr
3f00: 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65   [$graph node ge
3f10: 74 20 24 6e 6f 64 65 20 72 65 76 6e 72 5d 0a 0a  t $node revnr]..
3f20: 09 23 20 46 69 72 73 74 20 69 6d 70 6f 72 74 20  .# First import 
3f30: 74 68 65 20 66 69 6c 65 2e 0a 09 6c 61 70 70 65  the file...lappe
3f40: 6e 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 73  nd myimport [lis
3f50: 74 20 41 20 72 24 72 65 76 6e 72 20 7b 7d 5d 0a  t A r$revnr {}].
3f60: 0a 09 69 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f  ..if {[$graph no
3f70: 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6e 6f  de keyexists $no
3f80: 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b 0a  de __base__]} {.
3f90: 09 20 20 20 20 23 20 44 65 6c 74 61 20 6e 6f 64  .    # Delta nod
3fa0: 65 2e 20 5f 5f 62 61 73 65 5f 5f 20 69 73 20 74  e. __base__ is t
3fb0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  he name of the f
3fc0: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0a 09  ile containing..
3fd0: 20 20 20 20 23 20 74 68 65 20 62 61 73 65 6c 69      # the baseli
3fe0: 6e 65 2e 20 47 65 6e 65 72 61 74 65 20 69 6e 73  ne. Generate ins
3ff0: 74 72 75 63 74 69 6f 6e 20 74 6f 20 6d 61 6b 65  truction to make
4000: 20 74 68 65 20 64 65 6c 74 61 20 61 73 0a 09 20   the delta as.. 
4010: 20 20 20 23 20 77 65 6c 6c 2e 0a 0a 09 20 20 20     # well....   
4020: 20 73 65 74 20 66 62 61 73 65 20 5b 24 67 72 61   set fbase [$gra
4030: 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64  ph node get $nod
4040: 65 20 5f 5f 62 61 73 65 5f 5f 5d 0a 09 20 20 20  e __base__]..   
4050: 20 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70 6f 72   lappend myimpor
4060: 74 20 5b 6c 69 73 74 20 44 20 72 24 72 65 76 6e  t [list D r$revn
4070: 72 20 72 24 66 62 61 73 65 5d 0a 09 7d 0a 0a 09  r r$fbase]..}...
4080: 23 20 50 6f 73 74 20 74 6f 20 61 6c 6c 20 73 75  # Post to all su
4090: 63 63 65 73 73 6f 72 73 20 74 68 61 74 20 74 68  ccessors that th
40a0: 65 20 6a 75 73 74 20 67 65 6e 65 72 61 74 65 64  e just generated
40b0: 20 66 69 6c 65 20 69 73 20 74 68 65 69 72 0a 09   file is their..
40c0: 23 20 62 61 73 65 6c 69 6e 65 2e 20 45 78 63 65  # baseline. Exce
40d0: 70 74 69 6f 6e 3a 20 54 68 6f 73 65 20 77 68 69  ption: Those whi
40e0: 63 68 20 61 76 65 20 61 6c 72 65 61 64 79 20 61  ch ave already a
40f0: 20 62 61 73 65 6c 69 6e 65 20 73 65 74 2e 0a 09   baseline set...
4100: 23 20 54 6f 67 65 74 68 65 72 20 77 69 74 68 20  # Together with 
4110: 74 68 65 20 73 6f 72 74 69 6e 67 20 6f 66 20 74  the sorting of t
4120: 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 20 66  runk revisions f
4130: 69 72 73 74 20 74 68 65 20 74 72 75 6e 6b 0a 09  irst the trunk..
4140: 23 20 73 68 6f 75 6c 64 20 6f 6e 65 20 75 6e 69  # should one uni
4150: 6e 74 65 72 75 70 74 65 64 20 6c 69 6e 65 2c 20  nterupted line, 
4160: 77 69 74 68 20 62 72 61 6e 63 68 20 72 6f 6f 74  with branch root
4170: 73 20 5f 6e 6f 74 5f 20 64 65 6c 74 61 0a 09 23  s _not_ delta..#
4180: 20 63 6f 6d 70 72 65 73 73 65 64 20 70 65 72 20   compressed per 
4190: 74 68 65 69 72 20 62 72 61 6e 63 68 65 73 2e 0a  their branches..
41a0: 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20 5b 24  ..foreach out [$
41b0: 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f 75 74  graph nodes -out
41c0: 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20 20 69   $node] {..    i
41d0: 66 20 7b 5b 24 67 72 61 70 68 20 6e 6f 64 65 20  f {[$graph node 
41e0: 6b 65 79 65 78 69 73 74 73 20 24 6f 75 74 20 5f  keyexists $out _
41f0: 5f 62 61 73 65 5f 5f 5d 7d 20 63 6f 6e 74 69 6e  _base__]} contin
4200: 75 65 0a 09 20 20 20 20 24 67 72 61 70 68 20 6e  ue..    $graph n
4210: 6f 64 65 20 73 65 74 20 24 6f 75 74 20 5f 5f 62  ode set $out __b
4220: 61 73 65 5f 5f 20 24 72 65 76 6e 72 0a 09 7d 0a  ase__ $revnr..}.
4230: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
4240: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 6d     variable myim
4250: 70 6f 72 74 0a 0a 20 20 20 20 23 20 23 20 23 23  port..    # # ##
4260: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
4270: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
4280: 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a  #.    ## State..
4290: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69      variable myi
42a0: 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  d              {
42b0: 7d 20 3b 20 23 20 46 69 6c 65 20 69 64 20 69 6e  } ; # File id in
42c0: 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20   the persistent 
42d0: 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72 69 61  state..    varia
42e0: 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20 20 20  ble mypath      
42f0: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74        {} ; # Pat
4300: 68 20 6f 66 20 74 68 65 20 66 69 6c 65 27 73 20  h of the file's 
4310: 72 63 73 20 61 72 63 68 69 76 65 2e 0a 20 20 20  rcs archive..   
4320: 20 76 61 72 69 61 62 6c 65 20 6d 79 75 73 72 70   variable myusrp
4330: 61 74 68 20 20 20 20 20 20 20 20 20 7b 7d 20 3b  ath         {} ;
4340: 20 23 20 50 61 74 68 20 6f 66 20 74 68 65 20 66   # Path of the f
4350: 69 6c 65 20 61 73 20 73 65 65 6e 20 62 79 20 75  ile as seen by u
4360: 73 65 72 73 2e 0a 20 20 20 20 76 61 72 69 61 62  sers..    variab
4370: 6c 65 20 6d 79 65 78 65 63 75 74 61 62 6c 65 20  le myexecutable 
4380: 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c       0  ; # Bool
4390: 65 61 6e 20 66 6c 61 67 20 27 66 69 6c 65 20 65  ean flag 'file e
43a0: 78 65 63 75 74 61 62 6c 65 27 2e 0a 20 20 20 20  xecutable'..    
43b0: 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65  variable myproje
43c0: 63 74 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20  ct         {} ; 
43d0: 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74  # Reference to t
43e0: 68 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63  he project objec
43f0: 74 0a 09 09 09 09 20 20 20 20 23 20 74 68 65 20  t.....    # the 
4400: 66 69 6c 65 20 62 65 6c 6f 6e 67 73 20 74 6f 2e  file belongs to.
4410: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
4420: 72 65 76 20 2d 61 72 72 61 79 20 20 20 20 20 20  rev -array      
4430: 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69  {} ; # Maps revi
4440: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74  sion number to t
4450: 68 65 0a 09 09 09 09 20 20 20 20 23 20 61 73 73  he.....    # ass
4460: 6f 63 69 61 74 65 64 20 72 65 76 69 73 69 6f 6e  ociated revision
4470: 20 6f 62 6a 65 63 74 2e 0a 20 20 20 20 76 61 72   object..    var
4480: 69 61 62 6c 65 20 6d 79 72 65 76 69 73 69 6f 6e  iable myrevision
4490: 73 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53  s       {} ; # S
44a0: 61 6d 65 20 61 73 20 6d 79 72 65 76 2c 20 62 75  ame as myrev, bu
44b0: 74 20 61 20 6c 69 73 74 2c 0a 09 09 09 09 20 20  t a list,.....  
44c0: 20 20 23 20 67 69 76 69 6e 67 20 75 73 20 74 68    # giving us th
44d0: 65 20 6f 72 64 65 72 20 6f 66 0a 09 09 09 09 20  e order of..... 
44e0: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a     # revisions..
44f0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 61      variable mya
4500: 69 64 20 20 20 20 20 20 2d 61 72 72 61 79 20 7b  id      -array {
4510: 7d 20 3b 20 23 20 4d 61 70 20 72 65 76 69 73 69  } ; # Map revisi
4520: 6f 6e 20 6e 75 6d 62 65 72 73 20 74 6f 20 74 68  on numbers to th
4530: 65 20 69 64 0a 09 09 09 09 20 20 20 20 23 20 6f  e id.....    # o
4540: 66 20 74 68 65 20 61 75 74 68 6f 72 20 77 68 6f  f the author who
4550: 20 63 6f 6d 6d 69 74 74 65 64 0a 09 09 09 09 20   committed..... 
4560: 20 20 20 23 20 69 74 2e 20 54 68 69 73 20 69 73     # it. This is
4570: 20 6c 61 74 65 72 20 61 67 67 72 65 67 61 74 65   later aggregate
4580: 64 0a 09 09 09 09 20 20 20 20 23 20 77 69 74 68  d.....    # with
4590: 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 2c   commit message,
45a0: 20 62 72 61 6e 63 68 20 6e 61 6d 65 0a 09 09 09   branch name....
45b0: 09 20 20 20 20 23 20 61 6e 64 20 70 72 6f 6a 65  .    # and proje
45c0: 63 74 20 69 64 20 66 6f 72 20 61 20 6d 65 74 61  ct id for a meta
45d0: 20 69 64 2e 0a 20 20 20 20 76 61 72 69 61 62 6c   id..    variabl
45e0: 65 20 6d 79 68 65 61 64 72 65 76 6e 72 20 20 20  e myheadrevnr   
45f0: 20 20 20 20 7b 7d 20 3b 20 23 20 48 65 61 64 20      {} ; # Head 
4600: 72 65 76 69 73 69 6f 6e 20 28 72 65 76 69 73 69  revision (revisi
4610: 6f 6e 20 6e 75 6d 62 65 72 29 0a 20 20 20 20 76  on number).    v
4620: 61 72 69 61 62 6c 65 20 6d 79 70 72 69 6e 63 69  ariable myprinci
4630: 70 61 6c 20 20 20 20 20 20 20 7b 7d 20 3b 20 23  pal       {} ; #
4640: 20 50 72 69 6e 63 69 70 61 6c 20 62 72 61 6e 63   Principal branc
4650: 68 20 28 62 72 61 6e 63 68 20 6e 75 6d 62 65 72  h (branch number
4660: 29 2e 0a 09 09 09 09 20 20 20 20 23 20 43 6f 6e  )......    # Con
4670: 74 72 61 72 79 20 74 6f 20 74 68 65 20 6e 61 6d  trary to the nam
4680: 65 20 74 68 69 73 20 69 73 20 74 68 65 0a 09 09  e this is the...
4690: 09 09 20 20 20 20 23 20 64 65 66 61 75 6c 74 20  ..    # default 
46a0: 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69  branch..    vari
46b0: 61 62 6c 65 20 6d 79 64 65 70 65 6e 64 65 6e 63  able mydependenc
46c0: 69 65 73 20 20 20 20 7b 7d 20 3b 20 23 20 44 69  ies    {} ; # Di
46d0: 63 74 69 6f 6e 61 72 79 20 70 61 72 65 6e 74 20  ctionary parent 
46e0: 2d 3e 20 63 68 69 6c 64 2c 0a 09 09 09 09 20 20  -> child,.....  
46f0: 20 20 23 20 72 65 63 6f 72 64 73 20 70 72 69 6d    # records prim
4700: 61 72 79 20 64 65 70 65 6e 64 65 6e 63 69 65 73  ary dependencies
4710: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4720: 79 69 6d 70 6f 72 74 65 64 20 20 20 20 20 20 20  yimported       
4730: 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20   0  ; # Boolean 
4740: 66 6c 61 67 2e 20 53 65 74 20 69 66 20 61 6e 64  flag. Set if and
4750: 20 6f 6e 6c 79 20 69 66 0a 09 09 09 09 20 20 20   only if.....   
4760: 20 23 20 72 65 76 20 31 2e 31 20 6f 66 20 74 68   # rev 1.1 of th
4770: 65 20 66 69 6c 65 20 73 65 65 6d 69 6e 67 6c 79  e file seemingly
4780: 0a 09 09 09 09 20 20 20 20 23 20 77 61 73 20 69  .....    # was i
4790: 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61 64 20  mported instead 
47a0: 6f 66 20 61 64 64 65 64 0a 09 09 09 09 20 20 20  of added.....   
47b0: 20 23 20 6e 6f 72 6d 61 6c 6c 79 2e 0a 20 20 20   # normally..   
47c0: 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74   variable myroot
47d0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b              {} ;
47e0: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20   # Reference to 
47f0: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a  the revision obj
4800: 65 63 74 0a 09 09 09 09 20 20 20 20 23 20 68 6f  ect.....    # ho
4810: 6c 64 69 6e 67 20 74 68 65 20 72 6f 6f 74 20 72  lding the root r
4820: 65 76 69 73 69 6f 6e 2e 20 20 49 74 73 0a 09 09  evision.  Its...
4830: 09 09 20 20 20 20 23 20 6e 75 6d 62 65 72 20 75  ..    # number u
4840: 73 75 61 6c 6c 79 20 69 73 20 27 31 2e 31 27 2e  sually is '1.1'.
4850: 20 43 61 6e 20 62 65 0a 09 09 09 09 20 20 20 20   Can be.....    
4860: 23 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 75  # a different nu
4870: 6d 62 65 72 2c 20 62 65 63 61 75 73 65 20 6f 66  mber, because of
4880: 0a 09 09 09 09 20 20 20 20 23 20 67 61 70 73 20  .....    # gaps 
4890: 63 72 65 61 74 65 64 20 76 69 61 20 27 63 76 73  created via 'cvs
48a0: 61 64 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20 20 76  admin -o'..    v
48b0: 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68  ariable mybranch
48c0: 65 73 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23  es -array {} ; #
48d0: 20 4d 61 70 73 20 62 72 61 6e 63 68 20 6e 75 6d   Maps branch num
48e0: 62 65 72 20 74 6f 20 74 68 65 20 73 79 6d 62 6f  ber to the symbo
48f0: 6c 0a 09 09 09 09 20 20 20 20 23 20 6f 62 6a 65  l.....    # obje
4900: 63 74 20 68 61 6e 64 6c 69 6e 67 20 74 68 65 20  ct handling the 
4910: 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69  branch..    vari
4920: 61 62 6c 65 20 6d 79 74 61 67 73 20 20 20 20 20  able mytags     
4930: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61  -array {} ; # Ma
4940: 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62  ps revision numb
4950: 65 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0a 09  er to the list..
4960: 09 09 09 20 20 20 20 23 20 6f 66 20 73 79 6d 62  ...    # of symb
4970: 6f 6c 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 74  ol objects for t
4980: 68 65 20 74 61 67 73 0a 09 09 09 09 20 20 20 20  he tags.....    
4990: 23 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  # associated wit
49a0: 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a  h the revision..
49b0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 73      variable mys
49c0: 79 6d 62 6f 6c 73 20 20 20 20 20 20 20 20 20 7b  ymbols         {
49d0: 7d 20 3b 20 23 20 53 65 74 20 6f 66 20 74 68 65  } ; # Set of the
49e0: 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20 66 6f   symbol names fo
49f0: 75 6e 64 20 69 6e 0a 09 09 09 09 20 20 20 20 23  und in.....    #
4a00: 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20 20 20   this file...   
4a10: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e   variable mybran
4a20: 63 68 63 6e 74 20 30 20 3b 20 23 20 43 6f 75 6e  chcnt 0 ; # Coun
4a30: 74 65 72 20 66 6f 72 20 62 72 61 6e 63 68 65 73  ter for branches
4a40: 2c 20 74 6f 20 72 65 63 6f 72 64 20 74 68 65 69  , to record thei
4a50: 72 0a 09 09 09 20 20 20 20 20 23 20 6f 72 64 65  r....     # orde
4a60: 72 20 6f 66 20 64 65 66 69 6e 69 74 69 6f 6e 2e  r of definition.
4a70: 20 54 68 69 73 20 61 6c 73 6f 20 64 65 66 69 6e   This also defin
4a80: 65 73 0a 09 09 09 20 20 20 20 20 23 20 74 68 65  es....     # the
4a90: 69 72 20 6f 72 64 65 72 20 6f 66 20 63 72 65 61  ir order of crea
4aa0: 74 69 6f 6e 2c 20 77 68 69 63 68 20 69 73 20 74  tion, which is t
4ab0: 68 65 0a 09 09 09 20 20 20 20 20 23 20 72 65 76  he....     # rev
4ac0: 65 72 73 65 20 6f 66 20 64 65 66 69 6e 69 74 69  erse of definiti
4ad0: 6f 6e 2e 20 20 49 2e 65 2e 20 61 20 73 6d 61 6c  on.  I.e. a smal
4ae0: 6c 65 72 0a 09 09 09 20 20 20 20 20 23 20 6e 75  ler....     # nu
4af0: 6d 62 65 72 20 6d 65 61 6e 73 20 27 44 65 66 69  mber means 'Defi
4b00: 6e 65 64 20 65 61 72 6c 69 65 72 27 2c 20 6d 65  ned earlier', me
4b10: 61 6e 73 0a 09 09 09 20 20 20 20 20 23 20 27 43  ans....     # 'C
4b20: 72 65 61 74 65 64 20 6c 61 74 65 72 27 2e 0a 0a  reated later'...
4b30: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74      variable myt
4b40: 72 75 6e 6b 20 7b 7d 20 3b 20 23 20 44 69 72 65  runk {} ; # Dire
4b50: 63 74 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20  ct reference to 
4b60: 6d 79 70 72 6f 6a 65 63 74 20 2d 3e 20 74 72 75  myproject -> tru
4b70: 6e 6b 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  nk..    variable
4b80: 20 6d 79 72 6f 6f 74 73 20 7b 7d 20 3b 20 23 20   myroots {} ; # 
4b90: 4c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 69 6e  List of roots in
4ba0: 20 74 68 65 20 66 6f 72 65 73 74 20 6f 66 0a 09   the forest of..
4bb0: 09 09 20 20 23 20 6c 6f 64 27 73 2e 20 4f 62 6a  ..  # lod's. Obj
4bc0: 65 63 74 20 72 65 66 65 72 65 6e 63 65 73 20 74  ect references t
4bd0: 6f 20 72 65 76 69 73 69 6f 6e 73 20 61 6e 64 0a  o revisions and.
4be0: 09 09 09 20 20 23 20 62 72 61 6e 63 68 65 73 2e  ...  # branches.
4bf0: 20 54 68 65 20 6c 61 74 74 65 72 20 63 61 6e 20   The latter can 
4c00: 61 70 70 65 61 72 20 77 68 65 6e 20 74 68 65 79  appear when they
4c10: 0a 09 09 09 20 20 23 20 61 72 65 20 73 65 76 65  ....  # are seve
4c20: 72 65 64 20 66 72 6f 6d 20 74 68 65 69 72 20 70  red from their p
4c30: 61 72 65 6e 74 2e 0a 0a 20 20 20 20 76 61 72 69  arent...    vari
4c40: 61 62 6c 65 20 6d 79 62 6c 6f 62 20 7b 7d 20 3b  able myblob {} ;
4c50: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20   # Reference to 
4c60: 74 68 65 20 6f 62 6a 65 63 74 20 6d 61 6e 61 67  the object manag
4c70: 69 6e 67 20 74 68 65 20 62 6c 6f 62 0a 09 09 09  ing the blob....
4c80: 20 23 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 28   # information (
4c90: 74 65 78 74 72 61 6e 67 65 20 6f 66 20 72 65 76  textrange of rev
4ca0: 69 73 69 6f 6e 73 2c 20 61 6e 64 0a 09 09 09 20  isions, and.... 
4cb0: 23 20 64 65 6c 74 61 20 64 65 70 65 6e 64 65 6e  # delta dependen
4cc0: 63 69 65 73 29 20 6f 66 20 74 68 69 73 20 66 69  cies) of this fi
4cd0: 6c 65 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20  le...    # # ## 
4ce0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
4cf0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
4d00: 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61 6c  .    ## Internal
4d10: 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65   methods..    me
4d20: 74 68 6f 64 20 52 65 63 6f 72 64 42 72 61 6e 63  thod RecordBranc
4d30: 68 43 6f 6d 6d 69 74 73 20 7b 62 72 61 6e 63 68  hCommits {branch
4d40: 65 73 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 62  es} {..foreach b
4d50: 72 61 6e 63 68 72 65 76 6e 72 20 24 62 72 61 6e  ranchrevnr $bran
4d60: 63 68 65 73 20 7b 0a 09 20 20 20 20 69 66 20 7b  ches {..    if {
4d70: 5b 63 61 74 63 68 20 7b 0a 09 09 73 65 74 20 62  [catch {...set b
4d80: 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 52 65 76  ranch [$self Rev
4d90: 32 42 72 61 6e 63 68 20 24 62 72 61 6e 63 68 72  2Branch $branchr
4da0: 65 76 6e 72 5d 0a 09 20 20 20 20 7d 5d 7d 20 7b  evnr]..    }]} {
4db0: 0a 09 09 73 65 74 20 62 72 61 6e 63 68 20 5b 24  ...set branch [$
4dc0: 73 65 6c 66 20 41 64 64 55 6e 6c 61 62 65 6c 65  self AddUnlabele
4dd0: 64 42 72 61 6e 63 68 20 5b 72 65 76 20 32 62 72  dBranch [rev 2br
4de0: 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 68 72 65  anchnr $branchre
4df0: 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 0a 09 20  vnr]]..    }... 
4e00: 20 20 20 23 20 52 65 63 6f 72 64 20 74 68 65 20     # Record the 
4e10: 63 6f 6d 6d 69 74 2c 20 6a 75 73 74 20 61 73 20  commit, just as 
4e20: 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20  revision number 
4e30: 66 6f 72 0a 09 20 20 20 20 23 20 6e 6f 77 2e 20  for..    # now. 
4e40: 50 72 6f 63 65 73 42 72 61 6e 63 68 44 65 70 65  ProcesBranchDepe
4e50: 6e 64 65 6e 63 69 65 73 20 77 69 6c 6c 20 65 78  ndencies will ex
4e60: 74 65 6e 64 20 74 68 61 74 20 69 74 6f 20 61 0a  tend that ito a.
4e70: 09 20 20 20 20 23 20 70 72 6f 70 65 72 20 6f 62  .    # proper ob
4e80: 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 2e 0a  ject reference..
4e90: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65  ..    $branch se
4ea0: 74 63 68 69 6c 64 72 65 76 6e 72 20 24 62 72 61  tchildrevnr $bra
4eb0: 6e 63 68 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74  nchrevnr..}..ret
4ec0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
4ed0: 65 74 68 6f 64 20 52 65 76 32 42 72 61 6e 63 68  ethod Rev2Branch
4ee0: 20 7b 72 65 76 6e 72 7d 20 7b 0a 20 20 20 20 20   {revnr} {.     
4ef0: 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73     integrity ass
4f00: 65 72 74 20 7b 21 5b 72 65 76 20 69 73 74 72 75  ert {![rev istru
4f10: 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d  nkrevnr $revnr]}
4f20: 20 7b 45 78 70 65 63 74 65 64 20 61 20 62 72 61   {Expected a bra
4f30: 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d  nch revision num
4f40: 62 65 72 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79  ber}..return $my
4f50: 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20 32 62  branches([rev 2b
4f60: 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72 5d 29  ranchnr $revnr])
4f70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
4f80: 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42  od AddUnlabeledB
4f90: 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e 72 7d  ranch {branchnr}
4fa0: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73 65 6c   {..return [$sel
4fb0: 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e 6c 61  f AddBranch unla
4fc0: 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e 72 20  beled-$branchnr 
4fd0: 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20 20 7d  $branchnr].    }
4fe0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64  ..    method Add
4ff0: 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62 72 61  Branch {name bra
5000: 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 69  nchnr} {..if {[i
5010: 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72 61  nfo exists mybra
5020: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29  nches($branchnr)
5030: 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72  ]} {..    log wr
5040: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27  ite 1 file "In '
5050: 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e 63 68  $mypath': Branch
5060: 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e 61 6d   '$branchnr' nam
5070: 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68 65 73  ed '[$mybranches
5080: 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61 6d 65  ($branchnr) name
5090: 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  ]'"..    log wri
50a0: 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e 6e 6f  te 1 file "Canno
50b0: 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20 6e 61  t have second na
50c0: 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67 6e 6f  me '$name', igno
50d0: 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20 72 65  ring it"..    re
50e0: 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62 72 61  turn..}..set bra
50f0: 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f 25 20  nch [sym %AUTO% 
5100: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 6e 72  branch $branchnr
5110: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 65 74   [$myproject get
5120: 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20 24 73  symbol $name] $s
5130: 65 6c 66 5d 0a 09 24 62 72 61 6e 63 68 20 73 65  elf]..$branch se
5140: 74 70 6f 73 69 74 69 6f 6e 20 5b 69 6e 63 72 20  tposition [incr 
5150: 6d 79 62 72 61 6e 63 68 63 6e 74 5d 0a 09 73 65  mybranchcnt]..se
5160: 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72  t mybranches($br
5170: 61 6e 63 68 6e 72 29 20 24 62 72 61 6e 63 68 0a  anchnr) $branch.
5180: 09 72 65 74 75 72 6e 20 24 62 72 61 6e 63 68 0a  .return $branch.
5190: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
51a0: 64 20 41 64 64 54 61 67 20 7b 6e 61 6d 65 20 72  d AddTag {name r
51b0: 65 76 6e 72 7d 20 7b 0a 09 73 65 74 20 74 61 67  evnr} {..set tag
51c0: 20 5b 73 79 6d 20 25 41 55 54 4f 25 20 74 61 67   [sym %AUTO% tag
51d0: 20 24 72 65 76 6e 72 20 5b 24 6d 79 70 72 6f 6a   $revnr [$myproj
51e0: 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e  ect getsymbol $n
51f0: 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 6c 61 70  ame] $self]..lap
5200: 70 65 6e 64 20 6d 79 74 61 67 73 28 24 72 65 76  pend mytags($rev
5210: 6e 72 29 20 24 74 61 67 0a 09 72 65 74 75 72 6e  nr) $tag..return
5220: 20 24 74 61 67 0a 20 20 20 20 7d 0a 0a 20 20 20   $tag.    }..   
5230: 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64 42 61   method RecordBa
5240: 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65 73 20  sicDependencies 
5250: 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 7b 0a 09  {revnr next} {..
5260: 23 20 48 61 6e 64 6c 65 20 74 68 65 20 72 65 76  # Handle the rev
5270: 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 6e 63 69  ision dependenci
5280: 65 73 2e 20 52 65 63 6f 72 64 20 74 68 65 6d 20  es. Record them 
5290: 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 23 20 6e  for now, do..# n
52a0: 6f 74 68 69 6e 67 20 77 69 74 68 20 74 68 65 6d  othing with them
52b0: 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 74 68 65   yet....# On the
52c0: 20 74 72 75 6e 6b 20 74 68 65 20 27 6e 65 78 74   trunk the 'next
52d0: 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  ' field points t
52e0: 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 09  o the previous..
52f0: 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 2e 65 2e  # revision, i.e.
5300: 20 74 68 65 20 5f 70 61 72 65 6e 74 5f 20 6f 66   the _parent_ of
5310: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f 6e 65   the current one
5320: 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 20 31 2e  . Example:..# 1.
5330: 36 27 73 20 6e 65 78 74 20 69 73 20 31 2e 35 20  6's next is 1.5 
5340: 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 64 6d 69  (modulo cvs admi
5350: 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f 6e 74 72  n -o)....# Contr
5360: 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63  arily on a branc
5370: 68 20 74 68 65 20 27 6e 65 78 74 27 20 66 69 65  h the 'next' fie
5380: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
5390: 0a 09 23 20 70 72 69 6d 61 72 79 20 5f 63 68 69  ..# primary _chi
53a0: 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65  ld_ of the curre
53b0: 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 41 73 20  nt revision. As 
53c0: 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 2e 31 2e  example,..# 1.1.
53d0: 33 2e 32 27 73 20 27 6e 65 78 74 27 20 77 69 6c  3.2's 'next' wil
53e0: 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e 0a 0a 09  l be 1.1.3.3....
53f0: 23 20 54 68 65 20 27 6e 65 78 74 27 20 66 69 65  # The 'next' fie
5400: 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 6c 77 61  ld actually alwa
5410: 79 73 20 72 65 66 65 72 73 20 74 6f 20 74 68 65  ys refers to the
5420: 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 63 6f 6e   revision..# con
5430: 74 61 69 6e 69 6e 67 20 74 68 65 20 64 65 6c 74  taining the delt
5440: 61 20 6e 65 65 64 65 64 20 74 6f 20 72 65 74 72  a needed to retr
5450: 69 65 76 65 20 74 68 61 74 20 72 65 76 69 73 69  ieve that revisi
5460: 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 65 70 65  on....# The depe
5470: 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 65 64 20  ndencies needed 
5480: 68 65 72 65 20 61 72 65 20 74 68 65 20 6c 6f 67  here are the log
5490: 69 63 61 6c 20 73 74 72 75 63 74 75 72 65 2c 0a  ical structure,.
54a0: 09 23 20 70 61 72 65 6e 74 2f 63 68 69 6c 64 2c  .# parent/child,
54b0: 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 69 6d 70   and not the imp
54c0: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65 70 65  lementation depe
54d0: 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 23 20 70  ndent delta..# p
54e0: 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 20 7b 24  ointers....if {$
54f0: 6e 65 78 74 20 65 71 20 22 22 7d 20 72 65 74 75  next eq ""} retu
5500: 72 6e 0a 09 23 20 20 20 20 20 20 20 20 20 20 20  rn..#           
5510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
5520: 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 0a 09  arent -> child..
5530: 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b  if {[rev istrunk
5540: 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b  revnr $revnr]} {
5550: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79  ..    lappend my
5560: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24 6e 65  dependencies $ne
5570: 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 65 6c 73  xt $revnr..} els
5580: 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64  e {..    lappend
5590: 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20   mydependencies 
55a0: 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09 7d 0a  $revnr $next..}.
55b0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
55c0: 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73     method Proces
55d0: 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64 65 6e  sPrimaryDependen
55e0: 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61  cies {} {..forea
55f0: 63 68 20 7b 70 61 72 65 6e 74 72 65 76 6e 72 20  ch {parentrevnr 
5600: 63 68 69 6c 64 72 65 76 6e 72 7d 20 24 6d 79 64  childrevnr} $myd
5610: 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 0a 09 20  ependencies {.. 
5620: 20 20 20 73 65 74 20 70 61 72 65 6e 74 20 24 6d     set parent $m
5630: 79 72 65 76 28 24 70 61 72 65 6e 74 72 65 76 6e  yrev($parentrevn
5640: 72 29 0a 09 20 20 20 20 73 65 74 20 63 68 69 6c  r)..    set chil
5650: 64 20 20 24 6d 79 72 65 76 28 24 63 68 69 6c 64  d  $myrev($child
5660: 72 65 76 6e 72 29 0a 09 20 20 20 20 24 70 61 72  revnr)..    $par
5670: 65 6e 74 20 73 65 74 63 68 69 6c 64 20 24 63 68  ent setchild $ch
5680: 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c 64 20  ild..    $child 
5690: 73 65 74 70 61 72 65 6e 74 20 24 70 61 72 65 6e  setparent $paren
56a0: 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  t..}..return.   
56b0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50   }..    method P
56c0: 72 6f 63 65 73 73 42 72 61 6e 63 68 44 65 70 65  rocessBranchDepe
56d0: 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66  ndencies {} {..f
56e0: 6f 72 65 61 63 68 20 7b 62 72 61 6e 63 68 6e 72  oreach {branchnr
56f0: 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79 20   branch} [array 
5700: 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20  get mybranches] 
5710: 7b 0a 09 20 20 20 20 73 65 74 20 72 65 76 6e 72  {..    set revnr
5720: 20 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74   [$branch parent
5730: 72 65 76 6e 72 5d 0a 0a 09 20 20 20 20 69 66 20  revnr]...    if 
5740: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d  {![info exists m
5750: 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b  yrev($revnr)]} {
5760: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66  ...log write 1 f
5770: 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68  ile "In '$mypath
5780: 27 3a 20 54 68 65 20 62 72 61 6e 63 68 20 27 5b  ': The branch '[
5790: 24 62 72 61 6e 63 68 20 6e 61 6d 65 5d 27 20 72  $branch name]' r
57a0: 65 66 65 72 65 6e 63 65 73 22 0a 09 09 6c 6f 67  eferences"...log
57b0: 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 74   write 1 file "t
57c0: 68 65 20 62 6f 67 75 73 20 72 65 76 69 73 69 6f  he bogus revisio
57d0: 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64 20 77  n '$revnr' and w
57e0: 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64 2e 22  ill be ignored."
57f0: 0a 09 09 24 62 72 61 6e 63 68 20 64 65 73 74 72  ...$branch destr
5800: 6f 79 0a 09 09 75 6e 73 65 74 20 6d 79 62 72 61  oy...unset mybra
5810: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29  nches($branchnr)
5820: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09  ..    } else {..
5830: 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 76 28  .set rev $myrev(
5840: 24 72 65 76 6e 72 29 0a 09 09 24 72 65 76 20 61  $revnr)...$rev a
5850: 64 64 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68  ddbranch $branch
5860: 0a 09 09 24 62 72 61 6e 63 68 20 73 65 74 70 61  ...$branch setpa
5870: 72 65 6e 74 20 24 72 65 76 0a 0a 09 09 23 20 49  rent $rev....# I
5880: 66 20 72 65 76 69 73 69 6f 6e 73 20 77 65 72 65  f revisions were
5890: 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68   committed on th
58a0: 65 20 62 72 61 6e 63 68 20 77 65 20 73 74 6f 72  e branch we stor
58b0: 65 20 61 0a 09 09 23 20 72 65 66 65 72 65 6e 63  e a...# referenc
58c0: 65 20 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20  e to the branch 
58d0: 74 68 65 72 65 2c 20 61 6e 64 20 66 75 72 74 68  there, and furth
58e0: 65 72 20 64 65 63 6c 61 72 65 0a 09 09 23 20 74  er declare...# t
58f0: 68 65 20 66 69 72 73 74 20 63 68 69 6c 64 27 73  he first child's
5900: 20 70 61 72 65 6e 74 20 74 6f 20 62 65 20 62 72   parent to be br
5910: 61 6e 63 68 27 73 20 70 61 72 65 6e 74 2c 20 61  anch's parent, a
5920: 6e 64 0a 09 09 23 20 6c 69 73 74 20 74 68 69 73  nd...# list this
5930: 20 63 68 69 6c 64 20 69 6e 20 74 68 65 20 70 61   child in the pa
5940: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a  rent revision...
5950: 09 09 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68  ..if {[$branch h
5960: 61 73 63 68 69 6c 64 72 65 76 5d 7d 20 7b 0a 09  aschildrev]} {..
5970: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 72 65  .    set childre
5980: 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 63 68 69  vnr [$branch chi
5990: 6c 64 72 65 76 6e 72 5d 0a 09 09 20 20 20 20 73  ldrevnr]...    s
59a0: 65 74 20 63 68 69 6c 64 20 24 6d 79 72 65 76 28  et child $myrev(
59b0: 24 63 68 69 6c 64 72 65 76 6e 72 29 0a 09 09 20  $childrevnr)... 
59c0: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68     $branch setch
59d0: 69 6c 64 20 24 63 68 69 6c 64 0a 0a 09 09 20 20  ild $child....  
59e0: 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 72 65    $child setpare
59f0: 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68  ntbranch $branch
5a00: 0a 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65  ...    $child se
5a10: 74 70 61 72 65 6e 74 20 20 20 20 20 20 20 24 72  tparent       $r
5a20: 65 76 0a 09 09 20 20 20 20 24 72 65 76 20 61 64  ev...    $rev ad
5a30: 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24  dchildonbranch $
5a40: 63 68 69 6c 64 0a 09 09 7d 0a 09 20 20 20 20 7d  child...}..    }
5a50: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
5a60: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 53 6f  }..    method So
5a70: 72 74 42 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a  rtBranches {} {.
5a80: 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20  .foreach {revnr 
5a90: 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20  rev} [array get 
5aa0: 6d 79 72 65 76 5d 20 7b 20 24 72 65 76 20 73 6f  myrev] { $rev so
5ab0: 72 74 62 72 61 6e 63 68 65 73 20 7d 0a 09 72 65  rtbranches }..re
5ac0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
5ad0: 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 54 61  method ProcessTa
5ae0: 67 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d  gDependencies {}
5af0: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76   {..foreach {rev
5b00: 6e 72 20 74 61 67 6c 69 73 74 7d 20 5b 61 72 72  nr taglist} [arr
5b10: 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d 20 7b  ay get mytags] {
5b20: 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f  ..    if {![info
5b30: 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 24 72   exists myrev($r
5b40: 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 73 65 74 20  evnr)]} {...set 
5b50: 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 74 61 67 6c  n [llength $tagl
5b60: 69 73 74 5d 0a 09 09 6c 6f 67 20 77 72 69 74 65  ist]...log write
5b70: 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d 79   1 file "In '$my
5b80: 70 61 74 68 27 3a 20 54 68 65 20 66 6f 6c 6c 6f  path': The follo
5b90: 77 69 6e 67 20 5b 6e 73 70 20 24 6e 20 74 61 67  wing [nsp $n tag
5ba0: 5d 20 72 65 66 65 72 65 6e 63 65 22 0a 09 09 6c  ] reference"...l
5bb0: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20  og write 1 file 
5bc0: 22 74 68 65 20 62 6f 67 75 73 20 72 65 76 69 73  "the bogus revis
5bd0: 69 6f 6e 20 27 24 72 65 76 6e 72 27 20 61 6e 64  ion '$revnr' and
5be0: 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f 72 65 64   will be ignored
5bf0: 2e 22 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67  ."...foreach tag
5c00: 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 20 20   $taglist {...  
5c10: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69    log write 1 fi
5c20: 6c 65 20 22 20 20 20 20 5b 24 74 61 67 20 6e 61  le "    [$tag na
5c30: 6d 65 5d 22 0a 09 09 20 20 20 20 24 74 61 67 20  me]"...    $tag 
5c40: 64 65 73 74 72 6f 79 0a 09 09 7d 0a 09 09 75 6e  destroy...}...un
5c50: 73 65 74 20 6d 79 74 61 67 73 28 24 72 65 76 6e  set mytags($revn
5c60: 72 29 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b  r)..    } else {
5c70: 0a 09 09 73 65 74 20 72 65 76 20 24 6d 79 72 65  ...set rev $myre
5c80: 76 28 24 72 65 76 6e 72 29 0a 09 09 66 6f 72 65  v($revnr)...fore
5c90: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74  ach tag $taglist
5ca0: 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20 61 64   {...    $rev ad
5cb0: 64 74 61 67 20 20 20 20 24 74 61 67 0a 09 09 20  dtag    $tag... 
5cc0: 20 20 20 24 74 61 67 20 73 65 74 74 61 67 72 65     $tag settagre
5cd0: 76 20 24 72 65 76 0a 09 09 7d 0a 09 20 20 20 20  v $rev...}..    
5ce0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  }..}..return.   
5cf0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44   }..    method D
5d00: 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f 74 52  etermineTheRootR
5d10: 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20  evision {} {..# 
5d20: 54 68 65 20 72 6f 6f 74 20 69 73 20 74 68 65 20  The root is the 
5d30: 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 77 68 69  one revision whi
5d40: 63 68 20 68 61 73 20 6e 6f 20 70 61 72 65 6e 74  ch has no parent
5d50: 2e 20 42 79 0a 09 23 20 63 68 65 63 6b 69 6e 67  . By..# checking
5d60: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 77   all revisions w
5d70: 65 20 65 6e 73 75 72 65 20 74 68 61 74 20 77 65  e ensure that we
5d80: 20 63 61 6e 20 64 65 74 65 63 74 20 61 6e 64 0a   can detect and.
5d90: 09 23 20 72 65 70 6f 72 74 20 74 68 65 20 63 61  .# report the ca
5da0: 73 65 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 72  se of multiple r
5db0: 6f 6f 74 73 2e 20 57 69 74 68 6f 75 74 20 74 68  oots. Without th
5dc0: 61 74 20 77 65 20 63 6f 75 6c 64 0a 09 23 20 73  at we could..# s
5dd0: 69 6d 70 6c 79 20 74 61 6b 65 20 6f 6e 65 20 72  imply take one r
5de0: 65 76 69 73 69 6f 6e 20 61 6e 64 20 66 6f 6c 6c  evision and foll
5df0: 6f 77 20 74 68 65 20 70 61 72 65 6e 74 20 6c 69  ow the parent li
5e00: 6e 6b 73 20 74 6f 0a 09 23 20 74 68 65 69 72 20  nks to..# their 
5e10: 72 6f 6f 74 20 28 73 69 63 21 29 2e 0a 0a 09 66  root (sic!)....f
5e20: 6f 72 65 61 63 68 20 7b 72 65 76 6e 72 20 72 65  oreach {revnr re
5e30: 76 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79  v} [array get my
5e40: 72 65 76 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b  rev] {..    if {
5e50: 5b 24 72 65 76 20 68 61 73 70 61 72 65 6e 74 5d  [$rev hasparent]
5e60: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20  } continue..    
5e70: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74  integrity assert
5e80: 20 7b 24 6d 79 72 6f 6f 74 20 65 71 20 22 22 7d   {$myroot eq ""}
5e90: 20 7b 4d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 20   {Multiple root 
5ea0: 72 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 7d  revisions found}
5eb0: 0a 09 20 20 20 20 73 65 74 20 6d 79 72 6f 6f 74  ..    set myroot
5ec0: 20 24 72 65 76 0a 09 7d 0a 0a 09 23 20 49 6e 20   $rev..}...# In 
5ed0: 74 68 65 20 66 75 74 75 72 65 20 77 65 20 61 6c  the future we al
5ee0: 73 6f 20 6e 65 65 64 20 61 20 6c 69 73 74 2c 20  so need a list, 
5ef0: 61 73 20 62 72 61 6e 63 68 65 73 20 63 61 6e 20  as branches can 
5f00: 62 65 63 6f 6d 65 0a 09 23 20 73 65 76 65 72 65  become..# severe
5f10: 64 20 66 72 6f 6d 20 74 68 65 69 72 20 70 61 72  d from their par
5f20: 65 6e 74 2c 20 6d 61 6b 69 6e 67 20 74 68 65 6d  ent, making them
5f30: 20 74 68 65 69 72 20 6f 77 6e 20 72 6f 6f 74 2e   their own root.
5f40: 0a 09 73 65 74 20 6d 79 72 6f 6f 74 73 20 5b 6c  ..set myroots [l
5f50: 69 73 74 20 24 6d 79 72 6f 6f 74 5d 0a 09 72 65  ist $myroot]..re
5f60: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
5f70: 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69 6e 65  method Determine
5f80: 52 65 76 69 73 69 6f 6e 4f 70 65 72 61 74 69 6f  RevisionOperatio
5f90: 6e 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68  ns {} {..foreach
5fa0: 20 72 65 76 20 24 6d 79 72 65 76 69 73 69 6f 6e   rev $myrevision
5fb0: 73 20 7b 20 24 72 65 76 20 64 65 74 65 72 6d 69  s { $rev determi
5fc0: 6e 65 6f 70 65 72 61 74 69 6f 6e 20 7d 0a 09 72  neoperation }..r
5fd0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
5fe0: 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69 6e   method Determin
5ff0: 65 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d  eLinesOfDevelopm
6000: 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 46 6f 72 20  ent {} {..# For 
6010: 72 65 76 69 73 69 6f 6e 73 20 74 68 69 73 20 68  revisions this h
6020: 61 73 20 62 65 65 6e 20 64 6f 6e 65 20 61 6c 72  as been done alr
6030: 65 61 64 79 2c 20 69 6e 20 27 65 78 74 65 6e 64  eady, in 'extend
6040: 27 2e 20 4e 6f 77 0a 09 23 20 77 65 20 64 6f 20  '. Now..# we do 
6050: 74 68 69 73 20 66 6f 72 20 74 68 65 20 62 72 61  this for the bra
6060: 6e 63 68 65 73 20 61 6e 64 20 74 61 67 73 2e 0a  nches and tags..
6070: 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62 72 61  ..foreach {_ bra
6080: 6e 63 68 7d 20 5b 61 72 72 61 79 20 67 65 74 20  nch} [array get 
6090: 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 20  mybranches] {.. 
60a0: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 6c 6f     $branch setlo
60b0: 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f 44 20  d [$self GetLOD 
60c0: 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 72  [$branch parentr
60d0: 65 76 6e 72 5d 5d 0a 09 7d 0a 0a 09 66 6f 72 65  evnr]]..}...fore
60e0: 61 63 68 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20  ach {_ taglist} 
60f0: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 61 67  [array get mytag
6100: 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63  s] {..    foreac
6110: 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b  h tag $taglist {
6120: 0a 09 09 24 74 61 67 20 73 65 74 6c 6f 64 20 5b  ...$tag setlod [
6130: 24 73 65 6c 66 20 47 65 74 4c 4f 44 20 5b 24 74  $self GetLOD [$t
6140: 61 67 20 74 61 67 72 65 76 6e 72 5d 5d 0a 09 20  ag tagrevnr]].. 
6150: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a     }..}..return.
6160: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
6170: 64 20 47 65 74 4c 4f 44 20 7b 72 65 76 6e 72 7d  d GetLOD {revnr}
6180: 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74   {..if {[rev ist
6190: 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72  runkrevnr $revnr
61a0: 5d 7d 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e  ]} {..    return
61b0: 20 24 6d 79 74 72 75 6e 6b 0a 09 7d 20 65 6c 73   $mytrunk..} els
61c0: 65 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20  e {..    return 
61d0: 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e 63  [$self Rev2Branc
61e0: 68 20 24 72 65 76 6e 72 5d 0a 09 7d 0a 20 20 20  h $revnr]..}.   
61f0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 48   }..    method H
6200: 61 6e 64 6c 65 4e 6f 6e 54 72 75 6e 6b 44 65 66  andleNonTrunkDef
6210: 61 75 6c 74 42 72 61 6e 63 68 20 7b 7d 20 7b 0a  aultBranch {} {.
6220: 09 73 65 74 20 72 65 76 6c 69 73 74 20 5b 24 73  .set revlist [$s
6230: 65 6c 66 20 4e 6f 6e 54 72 75 6e 6b 44 65 66 61  elf NonTrunkDefa
6240: 75 6c 74 52 65 76 69 73 69 6f 6e 73 5d 0a 09 69  ultRevisions]..i
6250: 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 72 65  f {![llength $re
6260: 76 6c 69 73 74 5d 7d 20 72 65 74 75 72 6e 0a 0a  vlist]} return..
6270: 09 24 73 65 6c 66 20 41 64 6a 75 73 74 4e 6f 6e  .$self AdjustNon
6280: 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e  TrunkDefaultBran
6290: 63 68 20 24 72 65 76 6c 69 73 74 0a 09 24 73 65  ch $revlist..$se
62a0: 6c 66 20 43 68 65 63 6b 4c 4f 44 73 0a 09 72 65  lf CheckLODs..re
62b0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
62c0: 6d 65 74 68 6f 64 20 4e 6f 6e 54 72 75 6e 6b 44  method NonTrunkD
62d0: 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e 73 20  efaultRevisions 
62e0: 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73  {} {..# From cvs
62f0: 32 73 76 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69  2svn the followi
6300: 6e 67 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28  ng explanation (
6310: 77 69 74 68 20 6d 6f 64 69 66 69 63 61 74 69 6f  with modificatio
6320: 6e 73 0a 09 23 20 66 6f 72 20 6f 75 72 20 61 6c  ns..# for our al
6330: 67 6f 72 69 74 68 6d 29 3a 0a 0a 09 23 20 44 65  gorithm):...# De
6340: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
6350: 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 6e 6f  there are any no
6360: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20  n-trunk default 
6370: 62 72 61 6e 63 68 0a 09 23 20 72 65 76 69 73 69  branch..# revisi
6380: 6f 6e 73 2e 0a 0a 09 23 20 49 66 20 61 20 6e 6f  ons....# If a no
6390: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20  n-trunk default 
63a0: 62 72 61 6e 63 68 20 69 73 20 64 65 74 65 72 6d  branch is determ
63b0: 69 6e 65 64 20 74 6f 20 68 61 76 65 20 65 78 69  ined to have exi
63c0: 73 74 65 64 2c 0a 09 23 20 72 65 74 75 72 6e 20  sted,..# return 
63d0: 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63 74  a list of object
63e0: 73 20 66 6f 72 20 61 6c 6c 20 72 65 76 69 73 69  s for all revisi
63f0: 6f 6e 73 20 74 68 61 74 20 77 65 72 65 20 6f 6e  ons that were on
6400: 63 65 0a 09 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20  ce..# non-trunk 
6410: 64 65 66 61 75 6c 74 20 72 65 76 69 73 69 6f 6e  default revision
6420: 73 2c 20 69 6e 20 64 65 70 65 6e 64 65 6e 63 79  s, in dependency
6430: 20 6f 72 64 65 72 20 28 69 2e 65 2e 20 72 6f 6f   order (i.e. roo
6440: 74 0a 09 23 20 66 69 72 73 74 29 2e 0a 0a 09 23  t..# first)....#
6450: 20 54 68 65 72 65 20 61 72 65 20 74 77 6f 20 63   There are two c
6460: 61 73 65 73 20 74 6f 20 68 61 6e 64 6c 65 3a 0a  ases to handle:.
6470: 0a 09 23 20 4f 6e 65 20 63 61 73 65 20 69 73 20  ..# One case is 
6480: 73 69 6d 70 6c 65 2e 20 20 54 68 65 20 52 43 53  simple.  The RCS
6490: 20 66 69 6c 65 20 6c 69 73 74 73 20 61 20 64 65   file lists a de
64a0: 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20  fault branch..# 
64b0: 65 78 70 6c 69 63 69 74 6c 79 20 69 6e 20 69 74  explicitly in it
64c0: 73 20 68 65 61 64 65 72 2c 20 73 75 63 68 20 61  s header, such a
64d0: 73 20 27 31 2e 31 2e 31 27 2e 20 20 49 6e 20 74  s '1.1.1'.  In t
64e0: 68 69 73 20 63 61 73 65 2c 20 77 65 0a 09 23 20  his case, we..# 
64f0: 6b 6e 6f 77 20 74 68 61 74 20 65 76 65 72 79 20  know that every 
6500: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20  revision on the 
6510: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 69 73  vendor branch is
6520: 20 74 6f 20 62 65 0a 09 23 20 74 72 65 61 74 65   to be..# treate
6530: 64 20 61 73 20 68 65 61 64 20 6f 66 20 74 72 75  d as head of tru
6540: 6e 6b 20 61 74 20 74 68 61 74 20 70 6f 69 6e 74  nk at that point
6550: 20 69 6e 20 74 69 6d 65 2e 0a 0a 09 23 20 42 75   in time....# Bu
6560: 74 20 74 68 65 72 65 27 73 20 61 6c 73 6f 20 61  t there's also a
6570: 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
6580: 2e 20 20 54 68 65 20 52 43 53 20 66 69 6c 65 20  .  The RCS file 
6590: 64 6f 65 73 20 6e 6f 74 0a 09 23 20 63 75 72 72  does not..# curr
65a0: 65 6e 74 6c 79 20 68 61 76 65 20 61 20 64 65 66  ently have a def
65b0: 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 79 65 74  ault branch, yet
65c0: 20 77 65 20 63 61 6e 20 64 65 64 75 63 65 20 74   we can deduce t
65d0: 68 61 74 20 66 6f 72 0a 09 23 20 73 6f 6d 65 20  hat for..# some 
65e0: 70 65 72 69 6f 64 20 69 6e 20 74 68 65 20 70 61  period in the pa
65f0: 73 74 20 69 74 20 70 72 6f 62 61 62 6c 79 20 2a  st it probably *
6600: 64 69 64 2a 20 68 61 76 65 20 6f 6e 65 2e 20 20  did* have one.  
6610: 46 6f 72 0a 09 23 20 65 78 61 6d 70 6c 65 2c 20  For..# example, 
6620: 74 68 65 20 66 69 6c 65 20 68 61 73 20 76 65 6e  the file has ven
6630: 64 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 31 2e  dor revisions 1.
6640: 31 2e 31 2e 31 20 2d 3e 20 31 2e 31 2e 31 2e 39  1.1.1 -> 1.1.1.9
6650: 36 2c 0a 09 23 20 61 6c 6c 20 6f 66 20 77 68 69  6,..# all of whi
6660: 63 68 20 61 72 65 20 64 61 74 65 64 20 62 65 66  ch are dated bef
6670: 6f 72 65 20 31 2e 32 2c 20 61 6e 64 20 74 68 65  ore 1.2, and the
6680: 6e 20 69 74 20 68 61 73 20 31 2e 31 2e 31 2e 39  n it has 1.1.1.9
6690: 37 0a 09 23 20 2d 3e 20 31 2e 31 2e 31 2e 31 30  7..# -> 1.1.1.10
66a0: 30 20 64 61 74 65 64 20 61 66 74 65 72 20 31 2e  0 dated after 1.
66b0: 32 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  2.  In this case
66c0: 2c 20 77 65 20 73 68 6f 75 6c 64 0a 09 23 20 72  , we should..# r
66d0: 65 63 6f 72 64 20 31 2e 31 2e 31 2e 39 36 20 61  ecord 1.1.1.96 a
66e0: 73 20 74 68 65 20 6c 61 73 74 20 76 65 6e 64 6f  s the last vendo
66f0: 72 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 68 61  r revision to ha
6700: 76 65 20 62 65 65 6e 20 74 68 65 0a 09 23 20 68  ve been the..# h
6710: 65 61 64 20 6f 66 20 74 68 65 20 64 65 66 61 75  ead of the defau
6720: 6c 74 20 62 72 61 6e 63 68 2e 0a 0a 09 69 66 20  lt branch....if 
6730: 7b 24 6d 79 70 72 69 6e 63 69 70 61 6c 20 6e 65  {$myprincipal ne
6740: 20 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 54 68   ""} {..    # Th
6750: 65 72 65 20 69 73 20 73 74 69 6c 6c 20 61 20 64  ere is still a d
6760: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 3b 20 74  efault branch; t
6770: 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 61  hat means that a
6780: 6c 6c 0a 09 20 20 20 20 23 20 72 65 76 69 73 69  ll..    # revisi
6790: 6f 6e 73 20 6f 6e 20 74 68 61 74 20 62 72 61 6e  ons on that bran
67a0: 63 68 20 67 65 74 20 6d 61 72 6b 65 64 2e 0a 0a  ch get marked...
67b0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 35  .    log write 5
67c0: 20 66 69 6c 65 20 22 46 6f 75 6e 64 20 65 78 70   file "Found exp
67d0: 6c 69 63 69 74 6c 79 20 6d 61 72 6b 65 64 20 4e  licitly marked N
67e0: 54 44 42 22 0a 0a 09 20 20 20 20 73 65 74 20 72  TDB"...    set r
67f0: 6e 65 78 74 20 5b 24 6d 79 72 6f 6f 74 20 63 68  next [$myroot ch
6800: 69 6c 64 5d 0a 09 20 20 20 20 69 66 20 7b 24 72  ild]..    if {$r
6810: 6e 65 78 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09  next ne ""} {...
6820: 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 46  trouble fatal "F
6830: 69 6c 65 20 77 69 74 68 20 64 65 66 61 75 6c 74  ile with default
6840: 20 62 72 61 6e 63 68 20 24 6d 79 70 72 69 6e 63   branch $myprinc
6850: 69 70 61 6c 20 61 6c 73 6f 20 68 61 73 20 72 65  ipal also has re
6860: 76 69 73 69 6f 6e 20 5b 24 72 6e 65 78 74 20 72  vision [$rnext r
6870: 65 76 6e 72 5d 22 0a 09 09 72 65 74 75 72 6e 0a  evnr]"...return.
6880: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 73 65 74  .    }...    set
6890: 20 72 65 76 20 5b 24 6d 79 62 72 61 6e 63 68 65   rev [$mybranche
68a0: 73 28 24 6d 79 70 72 69 6e 63 69 70 61 6c 29 20  s($myprincipal) 
68b0: 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 65 74 20  child]..    set 
68c0: 72 65 73 20 7b 7d 0a 0a 09 20 20 20 20 77 68 69  res {}...    whi
68d0: 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20  le {$rev ne ""} 
68e0: 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72 65 73 20  {...lappend res 
68f0: 24 72 65 76 0a 09 09 73 65 74 20 72 65 76 20 5b  $rev...set rev [
6900: 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 20 20 20  $rev child]..   
6910: 20 7d 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20   }...    return 
6920: 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65 69 66 20  $res...} elseif 
6930: 7b 24 6d 79 69 6d 70 6f 72 74 65 64 7d 20 7b 0a  {$myimported} {.
6940: 09 20 20 20 20 23 20 4e 6f 20 64 65 66 61 75 6c  .    # No defaul
6950: 74 20 62 72 61 6e 63 68 2c 20 62 75 74 20 74 68  t branch, but th
6960: 65 20 66 69 6c 65 20 61 70 70 65 61 72 73 20 74  e file appears t
6970: 6f 20 68 61 76 65 20 62 65 65 6e 0a 09 20 20 20  o have been..   
6980: 20 23 20 69 6d 70 6f 72 74 65 64 2e 20 20 53 6f   # imported.  So
6990: 20 6f 75 72 20 65 64 75 63 61 74 65 64 20 67 75   our educated gu
69a0: 65 73 73 20 69 73 20 74 68 61 74 20 61 6c 6c 20  ess is that all 
69b0: 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 20 23  revisions..    #
69c0: 20 6f 6e 20 74 68 65 20 27 31 2e 31 2e 31 27 20   on the '1.1.1' 
69d0: 62 72 61 6e 63 68 20 77 69 74 68 20 74 69 6d 65  branch with time
69e0: 73 74 61 6d 70 73 20 70 72 69 6f 72 20 74 6f 20  stamps prior to 
69f0: 74 68 65 0a 09 20 20 20 20 23 20 74 69 6d 65 73  the..    # times
6a00: 74 61 6d 70 20 6f 66 20 27 31 2e 32 27 20 77 65  tamp of '1.2' we
6a10: 72 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66  re non-trunk def
6a20: 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 20 20 20  ault branch..   
6a30: 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09   # revisions....
6a40: 20 20 20 20 23 20 54 68 69 73 20 72 65 61 6c 6c      # This reall
6a50: 79 20 6f 6e 6c 79 20 70 72 6f 63 65 73 73 65 73  y only processes
6a60: 20 73 74 61 6e 64 61 72 64 20 27 31 2e 31 2e 31   standard '1.1.1
6a70: 2e 2a 27 2d 73 74 79 6c 65 0a 09 20 20 20 20 23  .*'-style..    #
6a80: 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e   vendor revision
6a90: 73 2e 20 20 4f 6e 65 20 63 6f 75 6c 64 20 63 6f  s.  One could co
6aa0: 6e 63 65 69 76 61 62 6c 79 20 68 61 76 65 20 61  nceivably have a
6ab0: 20 66 69 6c 65 0a 09 20 20 20 20 23 20 77 68 6f   file..    # who
6ac0: 73 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  se default branc
6ad0: 68 20 69 73 20 31 2e 31 2e 33 20 6f 72 20 77 68  h is 1.1.3 or wh
6ae0: 61 74 65 76 65 72 2c 20 6f 72 20 77 61 73 20 74  atever, or was t
6af0: 68 61 74 0a 09 20 20 20 20 23 20 61 74 20 73 6f  hat..    # at so
6b00: 6d 65 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65  me point in time
6b10: 2c 20 77 69 74 68 20 76 65 6e 64 6f 72 20 72 65  , with vendor re
6b20: 76 69 73 69 6f 6e 73 20 31 2e 31 2e 33 2e 31 2c  visions 1.1.3.1,
6b30: 0a 09 20 20 20 20 23 20 31 2e 31 2e 33 2e 32 2c  ..    # 1.1.3.2,
6b40: 20 65 74 63 2e 20 20 42 75 74 20 77 69 74 68 20   etc.  But with 
6b50: 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e  the default bran
6b60: 63 68 20 67 6f 6e 65 20 6e 6f 77 2c 0a 09 20 20  ch gone now,..  
6b70: 20 20 23 20 77 65 27 64 20 68 61 76 65 20 6e 6f    # we'd have no
6b80: 20 62 61 73 69 73 20 66 6f 72 20 61 73 73 75 6d   basis for assum
6b90: 69 6e 67 20 74 68 61 74 20 74 68 65 20 6e 6f 6e  ing that the non
6ba0: 2d 73 74 61 6e 64 61 72 64 0a 09 20 20 20 20 23  -standard..    #
6bb0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 68   vendor branch h
6bc0: 61 64 20 65 76 65 72 20 62 65 65 6e 20 74 68 65  ad ever been the
6bd0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
6be0: 61 6e 79 77 61 79 2e 0a 0a 09 20 20 20 20 23 20  anyway....    # 
6bf0: 4e 6f 74 65 20 74 68 61 74 20 77 65 20 72 65 6c  Note that we rel
6c00: 79 20 6f 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 73  y on comparisons
6c10: 20 62 65 74 77 65 65 6e 20 74 68 65 20 74 69 6d   between the tim
6c20: 65 73 74 61 6d 70 73 0a 09 20 20 20 20 23 20 6f  estamps..    # o
6c30: 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20  f the revisions 
6c40: 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72  on the vendor br
6c50: 61 6e 63 68 20 61 6e 64 20 74 68 61 74 20 6f 66  anch and that of
6c60: 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e  ..    # revision
6c70: 20 31 2e 32 2c 20 65 76 65 6e 20 74 68 6f 75 67   1.2, even thoug
6c80: 68 20 74 68 65 20 74 69 6d 65 73 74 61 6d 70 73  h the timestamps
6c90: 20 6d 69 67 68 74 20 62 65 0a 09 20 20 20 20 23   might be..    #
6ca0: 20 69 6e 63 6f 72 72 65 63 74 20 64 75 65 20 74   incorrect due t
6cb0: 6f 20 63 6c 6f 63 6b 20 73 6b 65 77 2e 20 20 57  o clock skew.  W
6cc0: 65 20 63 6f 75 6c 64 20 64 6f 20 61 20 73 6c 69  e could do a sli
6cd0: 67 68 74 6c 79 0a 09 20 20 20 20 23 20 62 65 74  ghtly..    # bet
6ce0: 74 65 72 20 6a 6f 62 20 69 66 20 77 65 20 75 73  ter job if we us
6cf0: 65 64 20 74 68 65 20 63 68 61 6e 67 65 73 65 74  ed the changeset
6d00: 20 74 69 6d 65 73 74 61 6d 70 73 2c 20 61 73 20   timestamps, as 
6d10: 69 74 20 69 73 0a 09 20 20 20 20 23 20 70 6f 73  it is..    # pos
6d20: 73 69 62 6c 65 20 74 68 61 74 20 74 68 65 20 64  sible that the d
6d30: 65 70 65 6e 64 65 6e 63 69 65 73 20 74 68 61 74  ependencies that
6d40: 20 77 65 6e 74 20 69 6e 74 6f 0a 09 20 20 20 20   went into..    
6d50: 23 20 64 65 74 65 72 6d 69 6e 69 6e 67 20 74 68  # determining th
6d60: 6f 73 65 20 74 69 6d 65 73 74 61 6d 70 73 20 61  ose timestamps a
6d70: 72 65 20 6d 6f 72 65 20 61 63 63 75 72 61 74 65  re more accurate
6d80: 2e 20 20 42 75 74 0a 09 20 20 20 20 23 20 74 68  .  But..    # th
6d90: 61 74 20 77 6f 75 6c 64 20 72 65 71 75 69 72 65  at would require
6da0: 20 61 6e 20 65 78 74 72 61 20 70 61 73 73 20 6f   an extra pass o
6db0: 72 20 74 77 6f 2e 0a 0a 09 20 20 20 20 69 66 20  r two....    if 
6dc0: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d  {![info exists m
6dd0: 79 62 72 61 6e 63 68 65 73 28 31 2e 31 2e 31 29  ybranches(1.1.1)
6de0: 5d 7d 20 7b 20 72 65 74 75 72 6e 20 7b 7d 20 7d  ]} { return {} }
6df0: 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  ...    log write
6e00: 20 35 20 66 69 6c 65 20 22 44 65 64 75 63 65 64   5 file "Deduced
6e10: 20 65 78 69 73 74 65 6e 63 65 20 6f 66 20 4e 54   existence of NT
6e20: 44 42 22 0a 0a 09 20 20 20 20 73 65 74 20 72 65  DB"...    set re
6e30: 76 20 20 5b 24 6d 79 62 72 61 6e 63 68 65 73 28  v  [$mybranches(
6e40: 31 2e 31 2e 31 29 20 63 68 69 6c 64 5d 0a 09 20  1.1.1) child].. 
6e50: 20 20 20 73 65 74 20 72 65 73 20 20 7b 7d 0a 09     set res  {}..
6e60: 20 20 20 20 73 65 74 20 73 74 6f 70 20 5b 24 6d      set stop [$m
6e70: 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 0a 09 20  yroot child]... 
6e80: 20 20 20 69 66 20 7b 24 73 74 6f 70 20 65 71 20     if {$stop eq 
6e90: 22 22 7d 20 7b 0a 09 09 23 20 47 65 74 20 65 76  ""} {...# Get ev
6ea0: 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 65 20  erything on the 
6eb0: 62 72 61 6e 63 68 0a 09 09 77 68 69 6c 65 20 7b  branch...while {
6ec0: 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09  $rev ne ""} {...
6ed0: 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20      lappend res 
6ee0: 24 72 65 76 0a 09 09 20 20 20 20 73 65 74 20 72  $rev...    set r
6ef0: 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a  ev [$rev child].
6f00: 09 09 7d 0a 09 20 20 20 20 7d 20 65 6c 73 65 20  ..}..    } else 
6f10: 7b 0a 09 09 23 20 43 6f 6c 6c 65 63 74 20 65 76  {...# Collect ev
6f20: 65 72 79 74 68 69 6e 67 20 6f 6e 20 74 68 65 20  erything on the 
6f30: 62 72 61 6e 63 68 20 77 68 69 63 68 20 73 65 65  branch which see
6f40: 6d 73 20 74 6f 20 68 61 76 65 0a 09 09 23 20 62  ms to have...# b
6f50: 65 65 6e 20 63 6f 6d 6d 69 74 74 65 64 20 62 65  een committed be
6f60: 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 70  fore the first p
6f70: 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 20  rimary child of 
6f80: 74 68 65 0a 09 09 23 20 72 6f 6f 74 20 72 65 76  the...# root rev
6f90: 69 73 69 6f 6e 2e 0a 09 09 73 65 74 20 73 74 6f  ision....set sto
6fa0: 70 64 61 74 65 20 5b 24 73 74 6f 70 20 64 61 74  pdate [$stop dat
6fb0: 65 5d 0a 09 09 77 68 69 6c 65 20 7b 24 72 65 76  e]...while {$rev
6fc0: 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20   ne ""} {...    
6fd0: 69 66 20 7b 5b 24 72 65 76 20 64 61 74 65 5d 20  if {[$rev date] 
6fe0: 3e 3d 20 24 73 74 6f 70 64 61 74 65 7d 20 62 72  >= $stopdate} br
6ff0: 65 61 6b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e  eak...    lappen
7000: 64 20 72 65 73 20 24 72 65 76 0a 09 09 20 20 20  d res $rev...   
7010: 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63   set rev [$rev c
7020: 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d  hild]...}..    }
7030: 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20 24 72  ...    return $r
7040: 65 73 0a 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20  es...} else {.. 
7050: 20 20 20 72 65 74 75 72 6e 20 7b 7d 0a 09 7d 0a     return {}..}.
7060: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 47 65 6e      }..    # Gen
7070: 65 72 61 6c 20 6e 6f 74 65 3a 20 49 6e 20 74 68  eral note: In th
7080: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 65 74 68  e following meth
7090: 6f 64 73 20 77 65 20 6f 6e 6c 79 20 6d 6f 64 69  ods we only modi
70a0: 66 79 20 74 68 65 20 6c 69 6e 6b 73 0a 20 20 20  fy the links.   
70b0: 20 23 20 62 65 74 77 65 65 6e 20 72 65 76 69 73   # between revis
70c0: 69 6f 6e 73 20 61 6e 64 20 73 79 6d 62 6f 6c 73  ions and symbols
70d0: 20 74 6f 20 72 65 73 74 72 75 63 74 75 72 65 20   to restructure 
70e0: 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 20 20 20  the revision.   
70f0: 20 23 20 74 72 65 65 2e 20 57 65 20 64 6f 20 5f   # tree. We do _
7100: 5f 6e 6f 74 5f 5f 20 64 65 73 74 72 6f 79 20 74  _not__ destroy t
7110: 68 65 20 6f 62 6a 65 63 74 73 2e 20 47 69 76 65  he objects. Give
7120: 6e 20 74 68 65 20 63 6f 6d 70 6c 65 78 20 6c 69  n the complex li
7130: 6e 6b 73 0a 20 20 20 20 23 20 47 43 20 69 73 20  nks.    # GC is 
7140: 64 69 66 66 69 63 75 6c 74 20 61 74 20 74 68 69  difficult at thi
7150: 73 20 6c 65 76 65 6c 2e 20 49 74 20 69 73 20 6d  s level. It is m
7160: 75 63 68 20 65 61 73 69 65 72 20 74 6f 20 64 72  uch easier to dr
7170: 6f 70 0a 20 20 20 20 23 20 65 76 65 72 79 74 68  op.    # everyth
7180: 69 6e 67 20 77 68 65 6e 20 77 65 20 77 65 20 61  ing when we we a
7190: 72 65 20 64 6f 6e 65 2e 20 54 68 69 73 20 68 61  re done. This ha
71a0: 70 70 65 6e 73 20 69 6e 20 27 64 72 6f 70 27 2c  ppens in 'drop',
71b0: 20 75 73 69 6e 67 0a 20 20 20 20 23 20 74 68 65   using.    # the
71c0: 20 73 74 61 74 65 20 76 61 72 69 61 62 6c 65 20   state variable 
71d0: 27 6d 79 72 65 76 27 2c 20 27 6d 79 62 72 61 6e  'myrev', 'mybran
71e0: 63 68 65 73 27 2c 20 61 6e 64 20 27 6d 79 74 61  ches', and 'myta
71f0: 67 73 27 2e 20 57 68 61 74 20 77 65 0a 20 20 20  gs'. What we.   
7200: 20 23 20 68 61 76 65 20 74 6f 20 70 65 72 73 69   # have to persi
7210: 73 74 2c 20 70 65 72 66 6f 72 6d 65 64 20 62 79  st, performed by
7220: 20 27 70 65 72 73 69 73 74 27 2c 20 77 65 20 6b   'persist', we k
7230: 6e 6f 77 20 77 69 6c 6c 20 62 65 0a 20 20 20 20  now will be.    
7240: 23 20 72 65 61 63 68 61 62 6c 65 20 74 68 72 6f  # reachable thro
7250: 75 67 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e  ugh the revision
7260: 73 20 6c 69 73 74 65 64 20 69 6e 20 27 6d 79 72  s listed in 'myr
7270: 6f 6f 74 73 27 20 61 6e 64 20 74 68 65 69 72 0a  oots' and their.
7280: 20 20 20 20 23 20 63 68 69 6c 64 72 65 6e 20 61      # children a
7290: 6e 64 20 73 79 6d 62 6f 6c 73 2e 0a 0a 20 20 20  nd symbols...   
72a0: 20 6d 65 74 68 6f 64 20 41 64 6a 75 73 74 4e 6f   method AdjustNo
72b0: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61  nTrunkDefaultBra
72c0: 6e 63 68 20 7b 72 65 76 6c 69 73 74 7d 20 7b 0a  nch {revlist} {.
72d0: 09 73 65 74 20 73 74 6f 70 20 5b 24 6d 79 72 6f  .set stop [$myro
72e0: 6f 74 20 63 68 69 6c 64 5d 20 3b 23 20 72 65 76  ot child] ;# rev
72f0: 20 27 31 2e 32 27 0a 0a 09 6c 6f 67 20 77 72 69   '1.2'...log wri
7300: 74 65 20 35 20 66 69 6c 65 20 22 41 64 6a 75 73  te 5 file "Adjus
7310: 74 69 6e 67 20 4e 54 44 42 20 63 6f 6e 74 61 69  ting NTDB contai
7320: 6e 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c 65 6e 67  ning [nsp [lleng
7330: 74 68 20 24 72 65 76 6c 69 73 74 5d 20 72 65 76  th $revlist] rev
7340: 69 73 69 6f 6e 5d 22 0a 0a 09 23 20 46 72 6f 6d  ision]"...# From
7350: 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f 6c   cvs2svn the fol
7360: 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74 69  lowing explanati
7370: 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69 63  on (with modific
7380: 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f 75  ations..# for ou
7390: 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a 09  r algorithm):...
73a0: 23 20 41 64 6a 75 73 74 20 74 68 65 20 6e 6f 6e  # Adjust the non
73b0: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62  -trunk default b
73c0: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 20  ranch revisions 
73d0: 66 6f 75 6e 64 20 69 6e 20 74 68 65 0a 09 23 20  found in the..# 
73e0: 27 72 65 76 6c 69 73 74 27 2e 0a 0a 09 23 20 27  'revlist'....# '
73f0: 6d 79 69 6d 70 6f 72 74 65 64 27 20 69 73 20 61  myimported' is a
7400: 20 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 20 69 6e   boolean flag in
7410: 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65 72  dicating whether
7420: 20 74 68 69 73 20 66 69 6c 65 0a 09 23 20 61 70   this file..# ap
7430: 70 65 61 72 73 20 74 6f 20 68 61 76 65 20 62 65  pears to have be
7440: 65 6e 20 69 6d 70 6f 72 74 65 64 2c 20 77 68 69  en imported, whi
7450: 63 68 20 61 6c 73 6f 20 6d 65 61 6e 73 20 74 68  ch also means th
7460: 61 74 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 31  at..# revision 1
7470: 2e 31 20 68 61 73 20 61 20 67 65 6e 65 72 61 74  .1 has a generat
7480: 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 74  ed log message t
7490: 68 61 74 20 6e 65 65 64 20 6e 6f 74 20 62 65 0a  hat need not be.
74a0: 09 23 20 70 72 65 73 65 72 76 65 64 2e 20 20 27  .# preserved.  '
74b0: 72 65 76 6c 69 73 74 27 20 69 73 20 61 20 6c 69  revlist' is a li
74c0: 73 74 20 6f 66 20 6f 62 6a 65 63 74 20 72 65 66  st of object ref
74d0: 65 72 65 6e 63 65 73 20 66 6f 72 20 74 68 65 0a  erences for the.
74e0: 09 23 20 72 65 76 69 73 69 6f 6e 73 20 74 68 61  .# revisions tha
74f0: 74 20 68 61 76 65 20 62 65 65 6e 20 64 65 74 65  t have been dete
7500: 72 6d 69 6e 65 64 20 74 6f 20 62 65 20 6e 6f 6e  rmined to be non
7510: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 0a 09  -trunk default..
7520: 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f  # branch revisio
7530: 6e 73 2e 0a 0a 09 23 20 4e 6f 74 65 20 74 68 61  ns....# Note tha
7540: 74 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69  t the first revi
7550: 73 69 6f 6e 20 6f 6e 20 74 68 65 20 64 65 66 61  sion on the defa
7560: 75 6c 74 20 62 72 61 6e 63 68 20 69 73 0a 09 23  ult branch is..#
7570: 20 68 61 6e 64 6c 65 64 20 73 74 72 61 6e 67 65   handled strange
7580: 6c 79 20 62 79 20 43 56 53 2e 20 20 49 66 20 61  ly by CVS.  If a
7590: 20 66 69 6c 65 20 69 73 20 69 6d 70 6f 72 74 65   file is importe
75a0: 64 20 28 61 73 20 6f 70 70 6f 73 65 64 0a 09 23  d (as opposed..#
75b0: 20 74 6f 20 62 65 69 6e 67 20 61 64 64 65 64 29   to being added)
75c0: 2c 20 43 56 53 20 63 72 65 61 74 65 73 20 61 20  , CVS creates a 
75d0: 31 2e 31 20 72 65 76 69 73 69 6f 6e 2c 20 74 68  1.1 revision, th
75e0: 65 6e 20 63 72 65 61 74 65 73 20 61 0a 09 23 20  en creates a..# 
75f0: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 31 2e  vendor branch 1.
7600: 31 2e 31 20 62 61 73 65 64 20 6f 6e 20 31 2e 31  1.1 based on 1.1
7610: 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 20 61  , then creates a
7620: 20 31 2e 31 2e 31 2e 31 0a 09 23 20 72 65 76 69   1.1.1.1..# revi
7630: 73 69 6f 6e 20 74 68 61 74 20 69 73 20 69 64 65  sion that is ide
7640: 6e 74 69 63 61 6c 20 74 6f 20 74 68 65 20 31 2e  ntical to the 1.
7650: 31 20 72 65 76 69 73 69 6f 6e 20 28 69 2e 65 2e  1 revision (i.e.
7660: 2c 20 69 74 73 0a 09 23 20 64 65 6c 74 61 74 65  , its..# deltate
7670: 78 74 20 69 73 20 65 6d 70 74 79 29 2e 20 20 54  xt is empty).  T
7680: 68 65 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 74  he log message t
7690: 68 61 74 20 74 68 65 20 75 73 65 72 20 74 79 70  hat the user typ
76a0: 65 64 0a 09 23 20 77 68 65 6e 20 69 6d 70 6f 72  ed..# when impor
76b0: 74 69 6e 67 20 69 73 20 73 74 6f 72 65 64 20 77  ting is stored w
76c0: 69 74 68 20 74 68 65 20 31 2e 31 2e 31 2e 31 20  ith the 1.1.1.1 
76d0: 72 65 76 69 73 69 6f 6e 2e 20 20 54 68 65 20 31  revision.  The 1
76e0: 2e 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 61  .1..# revision a
76f0: 6c 77 61 79 73 20 63 6f 6e 74 61 69 6e 73 20 61  lways contains a
7700: 20 73 74 61 6e 64 61 72 64 2c 20 67 65 6e 65 72   standard, gener
7710: 61 74 65 64 20 6c 6f 67 20 6d 65 73 73 61 67 65  ated log message
7720: 2c 0a 09 23 20 27 49 6e 69 74 69 61 6c 20 72 65  ,..# 'Initial re
7730: 76 69 73 69 6f 6e 5c 6e 27 2e 0a 0a 09 23 20 57  vision\n'....# W
7740: 68 65 6e 20 77 65 20 64 65 74 65 63 74 20 61 20  hen we detect a 
7750: 73 74 72 61 69 67 68 74 66 6f 72 77 61 72 64 20  straightforward 
7760: 69 6d 70 6f 72 74 20 6c 69 6b 65 20 74 68 69 73  import like this
7770: 2c 20 77 65 20 77 61 6e 74 0a 09 23 20 74 6f 20  , we want..# to 
7780: 68 61 6e 64 6c 65 20 69 74 20 62 79 20 64 65 6c  handle it by del
7790: 65 74 69 6e 67 20 74 68 65 20 31 2e 31 20 72 65  eting the 1.1 re
77a0: 76 69 73 69 6f 6e 20 28 77 68 69 63 68 20 64 6f  vision (which do
77b0: 65 73 6e 27 74 0a 09 23 20 63 6f 6e 74 61 69 6e  esn't..# contain
77c0: 20 61 6e 79 20 75 73 65 66 75 6c 20 69 6e 66 6f   any useful info
77d0: 72 6d 61 74 69 6f 6e 29 20 61 6e 64 20 6d 61 6b  rmation) and mak
77e0: 69 6e 67 20 31 2e 31 2e 31 2e 31 20 69 6e 74 6f  ing 1.1.1.1 into
77f0: 20 61 6e 0a 09 23 20 69 6e 64 65 70 65 6e 64 65   an..# independe
7800: 6e 74 20 72 6f 6f 74 20 69 6e 20 74 68 65 20 66  nt root in the f
7810: 69 6c 65 27 73 20 64 65 70 65 6e 64 65 6e 63 79  ile's dependency
7820: 20 74 72 65 65 2e 20 20 49 6e 20 53 56 4e 2c 0a   tree.  In SVN,.
7830: 09 23 20 31 2e 31 2e 31 2e 31 20 77 69 6c 6c 20  .# 1.1.1.1 will 
7840: 62 65 20 61 64 64 65 64 20 64 69 72 65 63 74 6c  be added directl
7850: 79 20 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 20  y to the vendor 
7860: 62 72 61 6e 63 68 20 77 69 74 68 20 69 74 73 0a  branch with its.
7870: 09 23 20 69 6e 69 74 69 61 6c 20 63 6f 6e 74 65  .# initial conte
7880: 6e 74 2e 20 20 54 68 65 6e 20 69 6e 20 61 20 73  nt.  Then in a s
7890: 70 65 63 69 61 6c 20 27 70 6f 73 74 2d 63 6f 6d  pecial 'post-com
78a0: 6d 69 74 27 2c 20 74 68 65 0a 09 23 20 31 2e 31  mit', the..# 1.1
78b0: 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e 20 69 73  .1.1 revision is
78c0: 20 63 6f 70 69 65 64 20 62 61 63 6b 20 74 6f 20   copied back to 
78d0: 74 72 75 6e 6b 2e 0a 0a 09 23 20 49 66 20 74 68  trunk....# If th
78e0: 65 20 75 73 65 72 20 69 6d 70 6f 72 74 73 20 61  e user imports a
78f0: 67 61 69 6e 20 74 6f 20 74 68 65 20 73 61 6d 65  gain to the same
7900: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20   vendor branch, 
7910: 74 68 65 6e 20 43 56 53 0a 09 23 20 63 72 65 61  then CVS..# crea
7920: 74 65 73 20 72 65 76 69 73 69 6f 6e 73 20 31 2e  tes revisions 1.
7930: 31 2e 31 2e 32 2c 20 31 2e 31 2e 31 2e 33 2c 20  1.1.2, 1.1.1.3, 
7940: 65 74 63 2e 20 6f 6e 20 74 68 65 20 76 65 6e 64  etc. on the vend
7950: 6f 72 20 62 72 61 6e 63 68 2c 0a 09 23 20 2a 77  or branch,..# *w
7960: 69 74 68 6f 75 74 2a 20 63 6f 75 6e 74 65 72 70  ithout* counterp
7970: 61 72 74 73 20 69 6e 20 74 72 75 6e 6b 20 28 65  arts in trunk (e
7980: 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 73 65  ven though these
7990: 20 72 65 76 69 73 69 6f 6e 73 0a 09 23 20 65 66   revisions..# ef
79a0: 66 65 63 74 69 76 65 6c 79 20 70 6c 61 79 20 74  fectively play t
79b0: 68 65 20 72 6f 6c 65 20 6f 66 20 74 72 75 6e 6b  he role of trunk
79c0: 20 72 65 76 69 73 69 6f 6e 73 29 2e 20 20 53 6f   revisions).  So
79d0: 20 61 66 74 65 72 20 77 65 20 61 64 64 0a 09 23   after we add..#
79e0: 20 73 75 63 68 20 72 65 76 69 73 69 6f 6e 73 20   such revisions 
79f0: 74 6f 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72  to the vendor br
7a00: 61 6e 63 68 2c 20 77 65 20 61 6c 73 6f 20 63 6f  anch, we also co
7a10: 70 79 20 74 68 65 6d 20 62 61 63 6b 20 74 6f 0a  py them back to.
7a20: 09 23 20 74 72 75 6e 6b 20 69 6e 20 70 6f 73 74  .# trunk in post
7a30: 2d 63 6f 6d 6d 69 74 73 2e 0a 0a 09 23 20 57 65  -commits....# We
7a40: 20 6d 61 72 6b 20 74 68 65 20 72 65 76 69 73 69   mark the revisi
7a50: 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 27 72 65  ons found in 're
7a60: 76 6c 69 73 74 27 20 61 73 20 64 65 66 61 75 6c  vlist' as defaul
7a70: 74 20 62 72 61 6e 63 68 0a 09 23 20 72 65 76 69  t branch..# revi
7a80: 73 69 6f 6e 73 2e 20 20 41 6c 73 6f 2c 20 69 66  sions.  Also, if
7a90: 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69   the root revisi
7aa0: 6f 6e 20 68 61 73 20 61 20 70 72 69 6d 61 72 79  on has a primary
7ab0: 20 63 68 69 6c 64 0a 09 23 20 77 65 20 73 65 74   child..# we set
7ac0: 20 74 68 61 74 20 72 65 76 69 73 69 6f 6e 20 74   that revision t
7ad0: 6f 20 64 65 70 65 6e 64 20 6f 6e 20 74 68 65 20  o depend on the 
7ae0: 6c 61 73 74 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64  last non-trunk d
7af0: 65 66 61 75 6c 74 0a 09 23 20 62 72 61 6e 63 68  efault..# branch
7b00: 20 72 65 76 69 73 69 6f 6e 20 61 6e 64 20 70 6f   revision and po
7b10: 73 73 69 62 6c 79 20 61 64 6a 75 73 74 20 69 74  ssibly adjust it
7b20: 73 20 74 79 70 65 20 61 63 63 6f 72 64 69 6e 67  s type according
7b30: 6c 79 2e 0a 0a 09 73 65 74 20 66 69 72 73 74 20  ly....set first 
7b40: 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c 69 73 74  [lindex $revlist
7b50: 20 30 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20   0]...log write 
7b60: 36 20 66 69 6c 65 20 22 3c 5b 24 66 69 72 73 74  6 file "<[$first
7b70: 20 72 65 76 6e 72 5d 3e 20 5b 65 78 70 72 20 7b   revnr]> [expr {
7b80: 24 6d 79 69 6d 70 6f 72 74 65 64 20 3f 20 22 69  $myimported ? "i
7b90: 6d 70 6f 72 74 65 64 22 20 3a 20 22 6e 6f 74 20  mported" : "not 
7ba0: 69 6d 70 6f 72 74 65 64 22 7d 5d 2c 20 5b 24 66  imported"}], [$f
7bb0: 69 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d 2c  irst operation],
7bc0: 20 5b 65 78 70 72 20 7b 5b 24 66 69 72 73 74 20   [expr {[$first 
7bd0: 68 61 73 74 65 78 74 5d 20 3f 20 22 68 61 73 20  hastext] ? "has 
7be0: 74 65 78 74 22 20 3a 20 22 6e 6f 20 74 65 78 74  text" : "no text
7bf0: 22 7d 5d 22 0a 0a 09 69 66 20 7b 24 6d 79 69 6d  "}]"...if {$myim
7c00: 70 6f 72 74 65 64 20 26 26 0a 09 20 20 20 20 5b  ported &&..    [
7c10: 24 66 69 72 73 74 20 72 65 76 6e 72 5d 20 65 71  $first revnr] eq
7c20: 20 22 31 2e 31 2e 31 2e 31 22 20 26 26 0a 09 20   "1.1.1.1" &&.. 
7c30: 20 20 20 5b 24 66 69 72 73 74 20 6f 70 65 72 61     [$first opera
7c40: 74 69 6f 6e 5d 20 65 71 20 22 63 68 61 6e 67 65  tion] eq "change
7c50: 22 20 26 26 0a 09 20 20 20 20 21 5b 24 66 69 72  " &&..    ![$fir
7c60: 73 74 20 68 61 73 74 65 78 74 5d 7d 20 7b 0a 0a  st hastext]} {..
7c70: 09 20 20 20 20 73 65 74 20 72 65 76 31 31 20 5b  .    set rev11 [
7c80: 24 66 69 72 73 74 20 70 61 72 65 6e 74 5d 20 3b  $first parent] ;
7c90: 20 23 20 41 73 73 65 72 74 3a 20 53 68 6f 75 6c   # Assert: Shoul
7ca0: 64 20 62 65 20 6d 79 72 6f 6f 74 2e 0a 09 20 20  d be myroot...  
7cb0: 20 20 6c 6f 67 20 77 72 69 74 65 20 33 20 66 69    log write 3 fi
7cc0: 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 69 72 72  le "Removing irr
7cd0: 65 6c 65 76 61 6e 74 20 72 65 76 69 73 69 6f 6e  elevant revision
7ce0: 20 5b 24 72 65 76 31 31 20 72 65 76 6e 72 5d 22   [$rev11 revnr]"
7cf0: 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74  ...    # Cut out
7d00: 20 74 68 65 20 6f 6c 64 20 6d 79 72 6f 6f 74 20   the old myroot 
7d10: 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 20 20 20 20  revision....    
7d20: 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20  ldelete myroots 
7d30: 24 72 65 76 31 31 20 3b 20 23 20 4e 6f 74 20 61  $rev11 ; # Not a
7d40: 20 72 6f 6f 74 20 61 6e 79 20 6c 6f 6e 67 65 72   root any longer
7d50: 2e 0a 0a 09 20 20 20 20 24 66 69 72 73 74 20 63  ....    $first c
7d60: 75 74 66 72 6f 6d 70 61 72 65 6e 74 20 3b 20 23  utfromparent ; #
7d70: 20 53 65 76 65 72 20 72 65 76 69 73 69 6f 6e 20   Sever revision 
7d80: 66 72 6f 6d 20 70 61 72 65 6e 74 20 72 65 76 69  from parent revi
7d90: 73 69 6f 6e 2e 0a 09 20 20 20 20 69 66 20 7b 24  sion...    if {$
7da0: 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b 0a 09 09  stop ne ""} {...
7db0: 24 73 74 6f 70 20 63 75 74 66 72 6f 6d 70 61 72  $stop cutfrompar
7dc0: 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79  ent...lappend my
7dd0: 72 6f 6f 74 73 20 24 73 74 6f 70 20 3b 20 23 20  roots $stop ; # 
7de0: 4e 65 77 20 72 6f 6f 74 2c 20 61 66 74 65 72 20  New root, after 
7df0: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 0a 09 20  vendor branch.. 
7e00: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 75 74     }...    # Cut
7e10: 20 6f 75 74 20 74 68 65 20 76 65 6e 64 6f 72 20   out the vendor 
7e20: 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 0a 0a 09  branch symbol...
7e30: 20 20 20 20 73 65 74 20 76 65 6e 64 6f 72 20 5b      set vendor [
7e40: 24 66 69 72 73 74 20 70 61 72 65 6e 74 62 72 61  $first parentbra
7e50: 6e 63 68 5d 0a 09 20 20 20 20 69 6e 74 65 67 72  nch]..    integr
7e60: 69 74 79 20 61 73 73 65 72 74 20 7b 24 76 65 6e  ity assert {$ven
7e70: 64 6f 72 20 6e 65 20 22 22 7d 20 7b 46 69 72 73  dor ne ""} {Firs
7e80: 74 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 20  t NTDB revision 
7e90: 68 61 73 20 6e 6f 20 62 72 61 6e 63 68 7d 0a 09  has no branch}..
7ea0: 20 20 20 20 69 66 20 7b 5b 24 76 65 6e 64 6f 72      if {[$vendor
7eb0: 20 70 61 72 65 6e 74 5d 20 65 71 20 24 72 65 76   parent] eq $rev
7ec0: 31 31 7d 20 7b 0a 09 09 24 72 65 76 31 31 20 72  11} {...$rev11 r
7ed0: 65 6d 6f 76 65 62 72 61 6e 63 68 20 20 20 20 20  emovebranch     
7ee0: 20 20 20 24 76 65 6e 64 6f 72 0a 09 09 24 72 65     $vendor...$re
7ef0: 76 31 31 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f  v11 removechildo
7f00: 6e 62 72 61 6e 63 68 20 24 66 69 72 73 74 0a 09  nbranch $first..
7f10: 09 24 76 65 6e 64 6f 72 20 63 75 74 62 72 61 6e  .$vendor cutbran
7f20: 63 68 70 61 72 65 6e 74 20 20 20 20 3b 23 20 62  chparent    ;# b
7f30: 70 20 3d 20 72 65 76 31 31 2c 20 61 62 6f 75 74  p = rev11, about
7f40: 20 74 6f 20 62 65 20 67 6f 6e 65 0a 09 09 24 66   to be gone...$f
7f50: 69 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65  irst cutfrompare
7f60: 6e 74 62 72 61 6e 63 68 20 3b 23 20 70 62 20 3d  ntbranch ;# pb =
7f70: 20 76 65 6e 64 6f 72 2c 20 74 6f 20 62 65 20 61   vendor, to be a
7f80: 20 64 65 74 61 63 68 65 64 20 4c 4f 44 0a 09 09   detached LOD...
7f90: 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20  lappend myroots 
7fa0: 24 66 69 72 73 74 0a 09 20 20 20 20 7d 0a 0a 09  $first..    }...
7fb0: 20 20 20 20 23 20 43 68 61 6e 67 65 20 74 68 65      # Change the
7fc0: 20 74 79 70 65 20 6f 66 20 66 69 72 73 74 20 28   type of first (
7fd0: 74 79 70 69 63 61 6c 6c 79 20 66 72 6f 6d 20 43  typically from C
7fe0: 68 61 6e 67 65 20 74 6f 20 41 64 64 29 3a 0a 09  hange to Add):..
7ff0: 20 20 20 20 24 66 69 72 73 74 20 72 65 74 79 70      $first retyp
8000: 65 20 61 64 64 0a 0a 09 20 20 20 20 23 20 4d 6f  e add...    # Mo
8010: 76 65 20 61 6e 79 20 74 61 67 73 20 61 6e 64 20  ve any tags and 
8020: 62 72 61 6e 63 68 65 73 20 66 72 6f 6d 20 74 68  branches from th
8030: 65 20 6f 6c 64 20 74 6f 20 74 68 65 20 6e 65 77  e old to the new
8040: 20 72 6f 6f 74 2e 0a 09 20 20 20 20 24 72 65 76   root...    $rev
8050: 31 31 20 6d 6f 76 65 73 79 6d 62 6f 6c 73 74 6f  11 movesymbolsto
8060: 20 24 66 69 72 73 74 0a 09 7d 0a 0a 09 23 20 4d   $first..}...# M
8070: 61 72 6b 20 61 6c 6c 20 74 68 65 20 73 70 65 63  ark all the spec
8080: 69 61 6c 20 72 65 76 69 73 69 6f 6e 73 20 61 73  ial revisions as
8090: 20 73 75 63 68 0a 09 66 6f 72 65 61 63 68 20 72   such..foreach r
80a0: 65 76 20 24 72 65 76 6c 69 73 74 20 7b 0a 09 20  ev $revlist {.. 
80b0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 20 66     log write 3 f
80c0: 69 6c 65 20 22 52 65 76 69 73 69 6f 6e 20 6f 6e  ile "Revision on
80d0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 3a   default branch:
80e0: 20 5b 24 72 65 76 20 72 65 76 6e 72 5d 22 0a 09   [$rev revnr]"..
80f0: 20 20 20 20 24 72 65 76 20 73 65 74 6f 6e 64 65      $rev setonde
8100: 66 61 75 6c 74 62 72 61 6e 63 68 20 31 0a 09 7d  faultbranch 1..}
8110: 0a 0a 09 69 66 20 7b 24 73 74 6f 70 20 6e 65 20  ...if {$stop ne 
8120: 22 22 7d 20 7b 0a 09 20 20 20 20 23 20 52 65 76  ""} {..    # Rev
8130: 69 73 69 6f 6e 20 31 2e 32 20 6c 6f 67 69 63 61  ision 1.2 logica
8140: 6c 6c 79 20 66 6f 6c 6c 6f 77 73 20 74 68 65 20  lly follows the 
8150: 69 6d 70 6f 72 74 65 64 20 72 65 76 69 73 69 6f  imported revisio
8160: 6e 73 2c 0a 09 20 20 20 20 23 20 6e 6f 74 20 31  ns,..    # not 1
8170: 2e 31 2e 20 20 41 63 63 6f 72 64 69 6e 67 6c 79  .1.  Accordingly
8180: 2c 20 63 6f 6e 6e 65 63 74 20 69 74 20 74 6f 20  , connect it to 
8190: 74 68 65 20 6c 61 73 74 20 4e 54 44 42 52 20 61  the last NTDBR a
81a0: 6e 64 0a 09 20 20 20 20 23 20 70 6f 73 73 69 62  nd..    # possib
81b0: 6c 79 20 63 68 61 6e 67 65 20 69 74 73 20 74 79  ly change its ty
81c0: 70 65 2e 0a 0a 09 20 20 20 20 73 65 74 20 6c 61  pe....    set la
81d0: 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65 76 6c  st [lindex $revl
81e0: 69 73 74 20 65 6e 64 5d 0a 09 20 20 20 20 24 73  ist end]..    $s
81f0: 74 6f 70 20 73 65 74 64 65 66 61 75 6c 74 62 72  top setdefaultbr
8200: 61 6e 63 68 70 61 72 65 6e 74 20 24 6c 61 73 74  anchparent $last
8210: 20 3b 20 23 20 52 65 74 79 70 65 73 20 74 68 65   ; # Retypes the
8220: 20 72 65 76 69 73 69 6f 6e 20 74 6f 6f 2e 0a 09   revision too...
8230: 20 20 20 20 24 6c 61 73 74 20 73 65 74 64 65 66      $last setdef
8240: 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 20  aultbranchchild 
8250: 20 24 73 74 6f 70 0a 09 7d 0a 09 72 65 74 75 72   $stop..}..retur
8260: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
8270: 68 6f 64 20 43 68 65 63 6b 4c 4f 44 73 20 7b 7d  hod CheckLODs {}
8280: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20 62   {..foreach {_ b
8290: 72 61 6e 63 68 7d 20 20 5b 61 72 72 61 79 20 67  ranch}  [array g
82a0: 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d 20 7b  et mybranches] {
82b0: 20 24 62 72 61 6e 63 68 20 63 68 65 63 6b 6c 6f   $branch checklo
82c0: 64 20 7d 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20  d }..foreach {_ 
82d0: 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20  taglist} [array 
82e0: 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20  get mytags] {.. 
82f0: 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 24     foreach tag $
8300: 74 61 67 6c 69 73 74 20 7b 20 24 74 61 67 20 63  taglist { $tag c
8310: 68 65 63 6b 6c 6f 64 20 7d 0a 09 7d 0a 09 72 65  hecklod }..}..re
8320: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
8330: 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 72 72  method RemoveIrr
8340: 65 6c 65 76 61 6e 74 44 65 6c 65 74 69 6f 6e 73  elevantDeletions
8350: 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d 20 63 76   {} {..# From cv
8360: 73 32 73 76 6e 3a 20 49 66 20 61 20 66 69 6c 65  s2svn: If a file
8370: 20 69 73 20 61 64 64 65 64 20 6f 6e 20 61 20 62   is added on a b
8380: 72 61 6e 63 68 2c 20 74 68 65 6e 20 61 20 74 72  ranch, then a tr
8390: 75 6e 6b 0a 09 23 20 72 65 76 69 73 69 6f 6e 20  unk..# revision 
83a0: 69 73 20 61 64 64 65 64 20 61 74 20 74 68 65 20  is added at the 
83b0: 73 61 6d 65 20 74 69 6d 65 20 69 6e 20 74 68 65  same time in the
83c0: 20 27 44 65 61 64 27 20 73 74 61 74 65 2e 0a 09   'Dead' state...
83d0: 23 20 54 68 69 73 20 72 65 76 69 73 69 6f 6e 20  # This revision 
83e0: 64 6f 65 73 6e 27 74 20 64 6f 20 61 6e 79 74 68  doesn't do anyth
83f0: 69 6e 67 20 75 73 65 66 75 6c 2c 20 73 6f 20 64  ing useful, so d
8400: 65 6c 65 74 65 20 69 74 2e 0a 0a 09 66 6f 72 65  elete it....fore
8410: 61 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74  ach root $myroot
8420: 73 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72  s {..    if {[$r
8430: 6f 6f 74 20 69 73 6e 65 65 64 65 64 5d 7d 20 63  oot isneeded]} c
8440: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67  ontinue..    log
8450: 20 77 72 69 74 65 20 32 20 66 69 6c 65 20 22 52   write 2 file "R
8460: 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 63 65 73 73  emoving unnecess
8470: 61 72 79 20 64 65 61 64 20 72 65 76 69 73 69 6f  ary dead revisio
8480: 6e 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d 22  n [$root revnr]"
8490: 0a 0a 09 20 20 20 20 23 20 52 65 6d 6f 76 65 20  ...    # Remove 
84a0: 61 73 20 72 6f 6f 74 2c 20 6d 61 6b 65 20 69 74  as root, make it
84b0: 73 20 63 68 69 6c 64 20 6e 65 77 20 72 6f 6f 74  s child new root
84c0: 20 61 66 74 65 72 0a 09 20 20 20 20 23 20 64 69   after..    # di
84d0: 73 63 6f 6e 6e 65 63 74 69 6e 67 20 69 74 20 66  sconnecting it f
84e0: 72 6f 6d 20 74 68 65 20 72 65 76 69 73 69 6f 6e  rom the revision
84f0: 20 6a 75 73 74 20 67 6f 69 6e 67 20 61 77 61 79   just going away
8500: 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 20  ....    ldelete 
8510: 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20  myroots $root.. 
8520: 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61     if {[$root ha
8530: 73 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74  schild]} {...set
8540: 20 63 68 69 6c 64 20 5b 24 72 6f 6f 74 20 63 68   child [$root ch
8550: 69 6c 64 5d 0a 09 09 24 63 68 69 6c 64 20 63 75  ild]...$child cu
8560: 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61  tfromparent...la
8570: 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24 63  ppend myroots $c
8580: 68 69 6c 64 0a 09 20 20 20 20 7d 0a 0a 09 20 20  hild..    }...  
8590: 20 20 23 20 43 75 74 20 6f 75 74 20 74 68 65 20    # Cut out the 
85a0: 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64  branches spawned
85b0: 20 62 79 20 74 68 65 20 72 65 76 69 73 69 6f 6e   by the revision
85c0: 20 74 6f 20 62 65 0a 09 20 20 20 20 23 20 64 65   to be..    # de
85d0: 6c 65 74 65 64 2e 20 49 66 20 74 68 65 20 62 72  leted. If the br
85e0: 61 6e 63 68 20 68 61 73 20 72 65 76 69 73 69 6f  anch has revisio
85f0: 6e 73 20 74 68 65 79 20 73 68 6f 75 6c 64 20 61  ns they should a
8600: 6c 72 65 61 64 79 0a 09 20 20 20 20 23 20 75 73  lready..    # us
8610: 65 20 6f 70 65 72 61 74 69 6f 6e 20 27 61 64 64  e operation 'add
8620: 27 2c 20 6e 6f 20 6e 65 65 64 20 74 6f 20 63 68  ', no need to ch
8630: 61 6e 67 65 20 74 68 61 74 2e 20 54 68 65 20 66  ange that. The f
8640: 69 72 73 74 0a 09 20 20 20 20 23 20 72 65 76 69  irst..    # revi
8650: 73 69 6f 6e 20 6f 6e 20 65 61 63 68 20 62 72 61  sion on each bra
8660: 6e 63 68 20 62 65 63 6f 6d 65 73 20 61 20 6e 65  nch becomes a ne
8670: 77 20 61 6e 64 20 64 69 73 63 6f 6e 6e 65 63 74  w and disconnect
8680: 65 64 0a 09 20 20 20 20 23 20 72 6f 6f 74 2e 0a  ed..    # root..
8690: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 62 72  ..    foreach br
86a0: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e  anch [$root bran
86b0: 63 68 65 73 5d 20 7b 0a 09 09 24 62 72 61 6e 63  ches] {...$branc
86c0: 68 20 63 75 74 62 72 61 6e 63 68 70 61 72 65 6e  h cutbranchparen
86d0: 74 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63  t...if {![$branc
86e0: 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e  h haschild]} con
86f0: 74 69 6e 75 65 0a 09 09 73 65 74 20 66 69 72 73  tinue...set firs
8700: 74 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64  t [$branch child
8710: 5d 0a 09 09 24 66 69 72 73 74 20 63 75 74 66 72  ]...$first cutfr
8720: 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65  omparent...lappe
8730: 6e 64 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73  nd myroots $firs
8740: 74 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 24 72  t..    }..    $r
8750: 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61  oot removeallbra
8760: 6e 63 68 65 73 0a 0a 09 20 20 20 20 23 20 54 61  nches...    # Ta
8770: 67 67 69 6e 67 20 61 20 64 65 61 64 20 72 65 76  gging a dead rev
8780: 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f  ision doesn't do
8790: 20 61 6e 79 74 68 69 6e 67 2c 20 73 6f 20 72 65   anything, so re
87a0: 6d 6f 76 65 0a 09 20 20 20 20 23 20 61 6e 79 20  move..    # any 
87b0: 74 61 67 73 20 74 68 61 74 20 77 65 72 65 20 73  tags that were s
87c0: 65 74 20 6f 6e 20 69 74 2e 0a 0a 09 20 20 20 20  et on it....    
87d0: 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74  $root removeallt
87e0: 61 67 73 0a 0a 09 20 20 20 20 23 20 54 68 69 73  ags...    # This
87f0: 20 63 61 6e 20 6f 6e 6c 79 20 68 61 70 70 65 6e   can only happen
8800: 20 6f 6e 63 65 20 70 65 72 20 66 69 6c 65 2c 20   once per file, 
8810: 61 6e 64 20 77 65 20 6d 69 67 68 74 20 68 61 76  and we might hav
8820: 65 0a 09 20 20 20 20 23 20 6a 75 73 74 20 63 68  e..    # just ch
8830: 61 6e 67 65 64 20 6d 79 72 6f 6f 74 73 2c 20 73  anged myroots, s
8840: 6f 20 65 6e 64 20 74 68 65 20 6c 6f 6f 70 0a 09  o end the loop..
8850: 20 20 20 20 62 72 65 61 6b 0a 09 7d 0a 09 72 65      break..}..re
8860: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
8870: 6d 65 74 68 6f 64 20 52 65 6d 6f 76 65 49 6e 69  method RemoveIni
8880: 74 69 61 6c 42 72 61 6e 63 68 44 65 6c 65 74 69  tialBranchDeleti
8890: 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f 6d  ons {} {..# From
88a0: 20 63 76 73 32 73 76 6e 3a 20 49 66 20 74 68 65   cvs2svn: If the
88b0: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20   first revision 
88c0: 6f 6e 20 61 20 62 72 61 6e 63 68 20 69 73 20 61  on a branch is a
88d0: 6e 0a 09 23 20 75 6e 6e 65 63 65 73 73 61 72 79  n..# unnecessary
88e0: 20 64 65 6c 65 74 65 2c 20 72 65 6d 6f 76 65 20   delete, remove 
88f0: 69 74 2e 0a 09 23 0a 09 23 20 49 66 20 61 20 66  it...#..# If a f
8900: 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f 6e 20  ile is added on 
8910: 61 20 62 72 61 6e 63 68 20 28 77 68 65 74 68 65  a branch (whethe
8920: 72 20 6f 72 20 6e 6f 74 20 69 74 20 61 6c 72 65  r or not it alre
8930: 61 64 79 0a 09 23 20 65 78 69 73 74 65 64 20 6f  ady..# existed o
8940: 6e 20 74 72 75 6e 6b 29 2c 20 74 68 65 6e 20 6e  n trunk), then n
8950: 65 77 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 43  ew versions of C
8960: 56 53 20 61 64 64 20 61 20 66 69 72 73 74 0a 09  VS add a first..
8970: 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f  # branch revisio
8980: 6e 20 69 6e 20 74 68 65 20 27 64 65 61 64 27 20  n in the 'dead' 
8990: 73 74 61 74 65 20 28 74 6f 20 69 6e 64 69 63 61  state (to indica
89a0: 74 65 20 74 68 61 74 20 74 68 65 0a 09 23 20 66  te that the..# f
89b0: 69 6c 65 20 64 69 64 20 6e 6f 74 20 65 78 69 73  ile did not exis
89c0: 74 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20  t on the branch 
89d0: 77 68 65 6e 20 74 68 65 20 62 72 61 6e 63 68 20  when the branch 
89e0: 77 61 73 0a 09 23 20 63 72 65 61 74 65 64 29 20  was..# created) 
89f0: 66 6f 6c 6c 6f 77 65 64 20 62 79 20 74 68 65 20  followed by the 
8a00: 73 65 63 6f 6e 64 20 62 72 61 6e 63 68 20 72 65  second branch re
8a10: 76 69 73 69 6f 6e 2c 20 77 68 69 63 68 20 69 73  vision, which is
8a20: 20 61 6e 0a 09 23 20 61 64 64 2e 20 20 57 68 65   an..# add.  Whe
8a30: 6e 20 77 65 20 65 6e 63 6f 75 6e 74 65 72 20 74  n we encounter t
8a40: 68 69 73 20 73 69 74 75 61 74 69 6f 6e 2c 20 77  his situation, w
8a50: 65 20 73 65 76 65 72 20 74 68 65 20 62 72 61 6e  e sever the bran
8a60: 63 68 0a 09 23 20 66 72 6f 6d 20 74 72 75 6e 6b  ch..# from trunk
8a70: 20 61 6e 64 20 64 65 6c 65 74 65 20 74 68 65 20   and delete the 
8a80: 66 69 72 73 74 20 62 72 61 6e 63 68 20 72 65 76  first branch rev
8a90: 69 73 69 6f 6e 2e 0a 0a 09 23 20 41 74 20 74 68  ision....# At th
8aa0: 69 73 20 70 6f 69 6e 74 20 77 65 20 6d 61 79 20  is point we may 
8ab0: 68 61 76 65 20 61 6c 72 65 61 64 79 20 6d 75 6c  have already mul
8ac0: 74 69 70 6c 65 20 72 6f 6f 74 73 20 69 6e 20 6d  tiple roots in m
8ad0: 79 72 6f 6f 74 73 2c 0a 09 23 20 77 65 20 68 61  yroots,..# we ha
8ae0: 76 65 20 74 6f 20 70 72 6f 63 65 73 73 20 74 68  ve to process th
8af0: 65 6d 20 61 6c 6c 2e 0a 0a 09 66 6f 72 65 61 63  em all....foreac
8b00: 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69  h root [$self Li
8b10: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74  nesOfDevelopment
8b20: 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72  ] {..    if {[$r
8b30: 6f 6f 74 20 69 73 6e 65 65 64 65 64 62 72 61 6e  oot isneededbran
8b40: 63 68 64 65 6c 5d 7d 20 63 6f 6e 74 69 6e 75 65  chdel]} continue
8b50: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
8b60: 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67  2 file "Removing
8b70: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 6e 69   unnecessary ini
8b80: 74 69 61 6c 20 62 72 61 6e 63 68 20 64 65 6c 65  tial branch dele
8b90: 74 65 20 5b 24 72 6f 6f 74 20 72 65 76 6e 72 5d  te [$root revnr]
8ba0: 22 0a 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e  "...    set bran
8bb0: 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74  ch [$root parent
8bc0: 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 73 65 74  branch]..    set
8bd0: 20 70 61 72 65 6e 74 20 5b 24 72 6f 6f 74 20 70   parent [$root p
8be0: 61 72 65 6e 74 5d 0a 09 20 20 20 20 73 65 74 20  arent]..    set 
8bf0: 63 68 69 6c 64 20 20 5b 24 72 6f 6f 74 20 63 68  child  [$root ch
8c00: 69 6c 64 5d 0a 0a 09 20 20 20 20 6c 64 65 6c 65  ild]...    ldele
8c10: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74  te myroots $root
8c20: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79  ..    lappend my
8c30: 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 0a 09 20  roots $child... 
8c40: 20 20 20 24 62 72 61 6e 63 68 20 63 75 74 62 72     $branch cutbr
8c50: 61 6e 63 68 70 61 72 65 6e 74 0a 09 20 20 20 20  anchparent..    
8c60: 24 62 72 61 6e 63 68 20 63 75 74 63 68 69 6c 64  $branch cutchild
8c70: 0a 09 20 20 20 20 24 63 68 69 6c 64 20 20 63 75  ..    $child  cu
8c80: 74 66 72 6f 6d 70 61 72 65 6e 74 0a 0a 09 20 20  tfromparent...  
8c90: 20 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 69    $branch setchi
8ca0: 6c 64 20 20 20 20 20 20 20 20 24 63 68 69 6c 64  ld        $child
8cb0: 0a 09 20 20 20 20 24 63 68 69 6c 64 20 20 73 65  ..    $child  se
8cc0: 74 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62  tparentbranch $b
8cd0: 72 61 6e 63 68 0a 0a 09 20 20 20 20 24 70 61 72  ranch...    $par
8ce0: 65 6e 74 20 72 65 6d 6f 76 65 62 72 61 6e 63 68  ent removebranch
8cf0: 20 20 20 20 20 20 20 20 24 62 72 61 6e 63 68 0a          $branch.
8d00: 09 20 20 20 20 24 70 61 72 65 6e 74 20 72 65 6d  .    $parent rem
8d10: 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68  ovechildonbranch
8d20: 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72   $root..}..retur
8d30: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
8d40: 68 6f 64 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c  hod LinesOfDevel
8d50: 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23 20 44  opment {} {..# D
8d60: 65 74 65 72 6d 69 6e 65 20 61 6c 6c 20 6c 69 6e  etermine all lin
8d70: 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e  es of developmen
8d80: 74 20 66 6f 72 20 74 68 65 20 66 69 6c 65 2e 20  t for the file. 
8d90: 54 68 69 73 20 61 72 65 0a 09 23 20 74 68 65 20  This are..# the 
8da0: 6b 6e 6f 77 6e 20 72 6f 6f 74 73 2c 20 61 6e 64  known roots, and
8db0: 20 74 68 65 20 72 6f 6f 74 20 6f 66 20 61 6c 6c   the root of all
8dc0: 20 62 72 61 6e 63 68 65 73 20 66 6f 75 6e 64 20   branches found 
8dd0: 6f 6e 20 74 68 65 0a 09 23 20 6c 69 6e 65 20 6f  on the..# line o
8de0: 66 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 72  f primary childr
8df0: 65 6e 2e 0a 0a 09 73 65 74 20 6c 6f 64 72 6f 6f  en....set lodroo
8e00: 74 73 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 72  ts {}..foreach r
8e10: 6f 6f 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a 09  oot $myroots {..
8e20: 20 20 20 20 24 73 65 6c 66 20 41 64 64 42 72 61      $self AddBra
8e30: 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 65  nchedLinesOfDeve
8e40: 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f 74 73  lopment lodroots
8e50: 20 24 72 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70   $root..    lapp
8e60: 65 6e 64 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f  end lodroots $ro
8e70: 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6c  ot..}..return $l
8e80: 6f 64 72 6f 6f 74 73 0a 20 20 20 20 7d 0a 0a 20  odroots.    }.. 
8e90: 20 20 20 6d 65 74 68 6f 64 20 41 64 64 42 72 61     method AddBra
8ea0: 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 65  nchedLinesOfDeve
8eb0: 6c 6f 70 6d 65 6e 74 20 7b 6c 76 20 72 6f 6f 74  lopment {lv root
8ec0: 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 24 6c 76  } {..upvar 1 $lv
8ed0: 20 6c 6f 64 72 6f 6f 74 73 0a 09 77 68 69 6c 65   lodroots..while
8ee0: 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b   {$root ne ""} {
8ef0: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 62 72  ..    foreach br
8f00: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e  anch [$root bran
8f10: 63 68 65 73 5d 20 7b 0a 09 09 69 66 20 7b 21 5b  ches] {...if {![
8f20: 24 62 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64  $branch haschild
8f30: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65  ]} continue...se
8f40: 74 20 63 68 69 6c 64 20 5b 24 62 72 61 6e 63 68  t child [$branch
8f50: 20 63 68 69 6c 64 5d 0a 09 09 23 20 52 65 63 75   child]...# Recu
8f60: 72 73 65 20 69 6e 74 6f 20 74 68 65 20 62 72 61  rse into the bra
8f70: 6e 63 68 20 66 6f 72 20 64 65 65 70 65 72 20 62  nch for deeper b
8f80: 72 61 6e 63 68 65 73 2e 0a 09 09 24 73 65 6c 66  ranches....$self
8f90: 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69 6e 65   AddBranchedLine
8fa0: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c  sOfDevelopment l
8fb0: 6f 64 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09  odroots $child..
8fc0: 09 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74  .lappend lodroot
8fd0: 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d 0a  s $child..    }.
8fe0: 09 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24  .    set root [$
8ff0: 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 09  root child]..}..
9000: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
9010: 20 20 6d 65 74 68 6f 64 20 45 78 63 6c 75 64 65    method Exclude
9020: 4e 6f 6e 54 72 75 6e 6b 49 6e 66 6f 72 6d 61 74  NonTrunkInformat
9030: 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 52 65 6d 6f  ion {} {..# Remo
9040: 76 65 20 61 6c 6c 20 6e 6f 6e 2d 74 72 75 6e 6b  ve all non-trunk
9050: 20 62 72 61 6e 63 68 65 73 2c 20 72 65 76 69 73   branches, revis
9060: 69 6f 6e 73 2c 20 61 6e 64 20 74 61 67 73 2e 20  ions, and tags. 
9070: 57 65 20 64 6f 0a 09 23 20 6b 65 65 70 20 74 68  We do..# keep th
9080: 65 20 74 61 67 73 20 77 68 69 63 68 20 61 72 65  e tags which are
9090: 20 6f 6e 20 74 68 65 20 74 72 75 6e 6b 2e 0a 0a   on the trunk...
90a0: 09 73 65 74 20 6e 74 64 62 72 6f 6f 74 20 22 22  .set ntdbroot ""
90b0: 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b  ..foreach root [
90c0: 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76  $self LinesOfDev
90d0: 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20  elopment] {..   
90e0: 20 23 20 4e 6f 74 65 3a 20 48 65 72 65 20 74 68   # Note: Here th
90f0: 65 20 6f 72 64 65 72 20 6f 66 20 74 68 65 20 72  e order of the r
9100: 6f 6f 74 73 20 69 73 20 69 6d 70 6f 72 74 61 6e  oots is importan
9110: 74 2c 0a 09 20 20 20 20 23 20 69 2e 65 2e 20 74  t,..    # i.e. t
9120: 68 61 74 20 77 65 20 67 65 74 20 74 68 65 6d 20  hat we get them 
9130: 69 6e 20 64 65 70 74 68 20 66 69 72 73 74 20 6f  in depth first o
9140: 72 64 65 72 2e 20 54 68 69 73 20 65 6e 73 75 72  rder. This ensur
9150: 65 73 0a 09 20 20 20 20 23 20 74 68 61 74 20 74  es..    # that t
9160: 68 65 20 72 65 6d 6f 76 61 6c 20 6f 66 20 61 20  he removal of a 
9170: 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f  branch happens o
9180: 6e 6c 79 20 61 66 74 65 72 20 74 68 65 0a 09 20  nly after the.. 
9190: 20 20 20 23 20 62 72 61 6e 63 68 65 73 20 73 70     # branches sp
91a0: 61 77 6e 65 64 20 66 72 6f 6d 20 69 74 20 77 65  awned from it we
91b0: 72 65 20 72 65 6d 6f 76 65 64 2e 20 4f 74 68 65  re removed. Othe
91c0: 72 77 69 73 65 20 74 68 65 0a 09 20 20 20 20 23  rwise the..    #
91d0: 20 73 79 73 74 65 6d 20 6d 69 67 68 74 20 74 72   system might tr
91e0: 79 20 74 6f 20 61 63 63 65 73 73 20 64 65 6c 65  y to access dele
91f0: 74 65 64 20 6f 62 6a 65 63 74 73 2e 0a 0a 09 20  ted objects.... 
9200: 20 20 20 23 20 44 6f 20 6e 6f 74 20 65 78 63 6c     # Do not excl
9210: 75 64 65 20 74 68 65 20 74 72 75 6e 6b 2e 0a 09  ude the trunk...
9220: 20 20 20 20 69 66 20 7b 5b 5b 24 72 6f 6f 74 20      if {[[$root 
9230: 6c 6f 64 5d 20 69 73 74 72 75 6e 6b 5d 7d 20 63  lod] istrunk]} c
9240: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 24 73 65  ontinue..    $se
9250: 6c 66 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68  lf ExcludeBranch
9260: 20 24 72 6f 6f 74 20 6e 74 64 62 72 6f 6f 74 0a   $root ntdbroot.
9270: 09 7d 0a 0a 09 69 66 20 7b 24 6e 74 64 62 72 6f  .}...if {$ntdbro
9280: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20  ot ne ""} {..   
9290: 20 24 73 65 6c 66 20 47 72 61 66 74 4e 54 44 42   $self GraftNTDB
92a0: 32 54 72 75 6e 6b 20 24 6e 74 64 62 72 6f 6f 74  2Trunk $ntdbroot
92b0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
92c0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78  }..    method Ex
92d0: 63 6c 75 64 65 42 72 61 6e 63 68 20 7b 72 6f 6f  cludeBranch {roo
92e0: 74 20 6e 76 7d 20 7b 0a 09 23 20 45 78 63 6c 75  t nv} {..# Exclu
92f0: 64 65 20 74 68 65 20 62 72 61 6e 63 68 2f 6c 6f  de the branch/lo
9300: 64 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 6f  d starting at ro
9310: 6f 74 2c 20 61 20 72 65 76 69 73 69 6f 6e 2e 0a  ot, a revision..
9320: 09 23 0a 09 23 20 49 66 20 74 68 65 20 4c 4f 44  .#..# If the LOD
9330: 20 73 74 61 72 74 73 20 77 69 74 68 20 6e 6f 6e   starts with non
9340: 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62  -trunk default b
9350: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 2c  ranch revisions,
9360: 0a 09 23 20 77 65 20 6c 65 61 76 65 20 74 68 65  ..# we leave the
9370: 6d 20 69 6e 20 70 6c 61 63 65 20 61 6e 64 20 64  m in place and d
9380: 6f 20 6e 6f 74 20 64 65 6c 65 74 65 20 74 68 65  o not delete the
9390: 20 62 72 61 6e 63 68 2e 20 49 6e 20 74 68 61 74   branch. In that
93a0: 0a 09 23 20 63 61 73 65 20 74 68 65 20 63 6f 6d  ..# case the com
93b0: 6d 61 6e 64 20 73 65 74 73 20 74 68 65 20 76 61  mand sets the va
93c0: 72 69 61 62 6c 65 20 69 6e 20 4e 56 20 73 6f 20  riable in NV so 
93d0: 74 68 61 74 20 77 65 20 63 61 6e 0a 09 23 20 6c  that we can..# l
93e0: 61 74 65 72 20 72 65 77 6f 72 6b 20 74 68 65 73  ater rework thes
93f0: 65 20 72 65 76 69 73 6f 6e 73 20 74 6f 20 62 65  e revisons to be
9400: 20 70 75 72 65 6c 79 20 74 72 75 6e 6b 2e 0a 0a   purely trunk...
9410: 09 69 66 20 7b 5b 24 72 6f 6f 74 20 69 73 6f 6e  .if {[$root ison
9420: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20  defaultbranch]} 
9430: 7b 0a 09 20 20 20 20 23 20 48 61 6e 64 6c 69 6e  {..    # Handlin
9440: 67 20 61 20 4e 54 44 42 2e 20 54 68 69 73 20 62  g a NTDB. This b
9450: 72 61 6e 63 68 20 6d 61 79 20 63 6f 6e 73 69 73  ranch may consis
9460: 74 73 20 6e 6f 74 20 6f 6e 6c 79 20 6f 66 0a 09  ts not only of..
9470: 20 20 20 20 23 20 4e 54 44 42 20 72 65 76 69 73      # NTDB revis
9480: 69 6f 6e 73 2c 20 62 75 74 20 61 6c 73 6f 20 73  ions, but also s
9490: 6f 6d 65 20 6e 6f 6e 2d 4e 54 44 42 2e 20 54 68  ome non-NTDB. Th
94a0: 65 20 6c 61 74 74 65 72 20 61 72 65 0a 09 20 20  e latter are..  
94b0: 20 20 23 20 74 72 75 6c 79 20 6f 6e 20 61 20 62    # truly on a b
94c0: 72 61 6e 63 68 20 61 6e 64 20 68 61 76 65 20 74  ranch and have t
94d0: 6f 20 62 65 20 65 78 63 6c 75 64 65 64 2e 20 54  o be excluded. T
94e0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 09 20 20  he following..  
94f0: 20 20 23 20 6c 6f 6f 70 20 64 65 74 65 72 6d 69    # loop determi
9500: 6e 65 73 20 69 66 20 74 68 65 72 65 20 61 72 65  nes if there are
9510: 20 73 75 63 68 20 72 65 76 69 73 69 6f 6e 73 2e   such revisions.
9520: 0a 0a 09 20 20 20 20 75 70 76 61 72 20 31 20 24  ...    upvar 1 $
9530: 6e 76 20 6e 74 64 62 72 6f 6f 74 0a 09 20 20 20  nv ntdbroot..   
9540: 20 73 65 74 20 6e 74 64 62 72 6f 6f 74 20 24 72   set ntdbroot $r
9550: 6f 6f 74 0a 09 20 20 20 20 24 72 6f 6f 74 20 63  oot..    $root c
9560: 75 74 66 72 6f 6d 70 61 72 65 6e 74 62 72 61 6e  utfromparentbran
9570: 63 68 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76  ch...    set rev
9580: 20 24 72 6f 6f 74 0a 09 20 20 20 20 77 68 69 6c   $root..    whil
9590: 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b  e {$rev ne ""} {
95a0: 0a 09 09 24 72 65 76 20 72 65 6d 6f 76 65 61 6c  ...$rev removeal
95b0: 6c 62 72 61 6e 63 68 65 73 0a 09 09 23 20 53 65  lbranches...# Se
95c0: 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 09 69  e note [x].....i
95d0: 66 20 7b 5b 24 72 65 76 20 69 73 6f 6e 64 65 66  f {[$rev isondef
95e0: 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09  aultbranch]} {..
95f0: 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72  .    set rev [$r
9600: 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 20 65 6c  ev child]...} el
9610: 73 65 20 7b 0a 09 09 20 20 20 20 62 72 65 61 6b  se {...    break
9620: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20  ...}..    }...  
9630: 20 20 23 20 72 65 76 20 6e 6f 77 20 63 6f 6e 74    # rev now cont
9640: 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6e  ains the first n
9650: 6f 6e 2d 4e 54 44 42 20 72 65 76 69 73 69 6f 6e  on-NTDB revision
9660: 20 61 66 74 65 72 20 74 68 65 0a 09 20 20 20 20   after the..    
9670: 23 20 4e 54 44 42 2c 20 6f 72 20 69 73 20 65 6d  # NTDB, or is em
9680: 70 74 79 20 69 66 20 74 68 65 72 65 20 69 73 20  pty if there is 
9690: 6e 6f 20 73 75 63 68 2e 20 49 66 20 77 65 20 68  no such. If we h
96a0: 61 76 65 20 73 6f 6d 65 0a 09 20 20 20 20 23 20  ave some..    # 
96b0: 74 68 65 79 20 68 61 76 65 20 74 6f 20 72 65 6d  they have to rem
96c0: 6f 76 65 64 2e 0a 0a 09 20 20 20 20 69 66 20 7b  oved....    if {
96d0: 24 72 65 76 20 6e 65 20 22 22 7d 20 20 7b 0a 09  $rev ne ""}  {..
96e0: 09 73 65 74 20 6c 61 73 74 6e 74 64 62 20 5b 24  .set lastntdb [$
96f0: 72 65 76 20 70 61 72 65 6e 74 5d 0a 09 09 24 6c  rev parent]...$l
9700: 61 73 74 6e 74 64 62 20 63 75 74 66 72 6f 6d 63  astntdb cutfromc
9710: 68 69 6c 64 0a 09 09 77 68 69 6c 65 20 7b 24 72  hild...while {$r
9720: 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20  ev ne ""} {...  
9730: 20 20 24 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c    $rev removeall
9740: 74 61 67 73 0a 09 09 20 20 20 20 24 72 65 76 20  tags...    $rev 
9750: 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65  removeallbranche
9760: 73 0a 09 09 20 20 20 20 23 20 4e 6f 74 65 20 5b  s...    # Note [
9770: 78 5d 3a 20 57 65 20 6d 61 79 20 73 74 69 6c 6c  x]: We may still
9780: 20 68 61 76 65 20 68 61 64 20 62 72 61 6e 63 68   have had branch
9790: 65 73 20 6f 6e 20 74 68 65 0a 09 09 20 20 20 20  es on the...    
97a0: 23 20 72 65 76 69 73 69 6f 6e 2e 20 42 72 61 6e  # revision. Bran
97b0: 63 68 65 73 20 77 69 74 68 6f 75 74 20 72 65 76  ches without rev
97c0: 69 73 69 6f 6e 73 20 63 6f 6d 6d 69 74 74 65 64  isions committed
97d0: 0a 09 09 20 20 20 20 23 20 6f 6e 20 74 68 65 6d  ...    # on them
97e0: 20 64 6f 20 6e 6f 74 20 73 68 6f 77 20 75 70 20   do not show up 
97f0: 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 20 72  in the list of r
9800: 6f 6f 74 73 20 61 6b 61 0a 09 09 20 20 20 20 23  oots aka...    #
9810: 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f   lines of develo
9820: 70 6d 65 6e 74 2e 0a 09 09 20 20 20 20 73 65 74  pment....    set
9830: 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64   rev [$rev child
9840: 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 20  ]...}..    }..  
9850: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 23 20    return..}...# 
9860: 4e 6f 20 4e 54 44 42 20 73 74 75 66 66 20 74 6f  No NTDB stuff to
9870: 20 64 65 61 6c 20 77 69 74 68 2e 20 46 69 72 73   deal with. Firs
9880: 74 20 64 65 6c 65 74 65 20 74 68 65 20 62 72 61  t delete the bra
9890: 6e 63 68 20 6f 62 6a 65 63 74 0a 09 23 20 69 74  nch object..# it
98a0: 73 65 6c 66 2c 20 61 66 74 65 72 20 63 75 74 74  self, after cutt
98b0: 69 6e 67 20 61 6c 6c 20 74 68 65 20 76 61 72 69  ing all the vari
98c0: 6f 75 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ous connections.
98d0: 0a 0a 09 73 65 74 20 62 72 61 6e 63 68 20 5b 24  ...set branch [$
98e0: 72 6f 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63  root parentbranc
98f0: 68 5d 0a 09 69 66 20 7b 24 62 72 61 6e 63 68 20  h]..if {$branch 
9900: 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 73 65  ne ""} {..    se
9910: 74 20 62 72 61 6e 63 68 70 61 72 65 6e 74 20 5b  t branchparent [
9920: 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 0a  $branch parent].
9930: 09 20 20 20 20 24 62 72 61 6e 63 68 70 61 72 65  .    $branchpare
9940: 6e 74 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20  nt removebranch 
9950: 20 20 20 20 20 20 20 24 62 72 61 6e 63 68 0a 09         $branch..
9960: 20 20 20 20 24 62 72 61 6e 63 68 70 61 72 65 6e      $branchparen
9970: 74 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62  t removechildonb
9980: 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 0a  ranch $root..}..
9990: 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73 20 6e  .# The root is n
99a0: 6f 20 73 75 63 68 20 61 6e 79 20 6c 6f 6e 67 65  o such any longe
99b0: 72 20 65 69 74 68 65 72 2e 0a 09 6c 64 65 6c 65  r either...ldele
99c0: 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f 6f 74  te myroots $root
99d0: 0a 0a 09 23 20 4e 6f 77 20 67 6f 20 74 68 72 6f  ...# Now go thro
99e0: 75 67 68 20 74 68 65 20 6c 69 6e 65 20 61 6e 64  ugh the line and
99f0: 20 72 65 6d 6f 76 65 20 61 6c 6c 20 69 74 73 20   remove all its 
9a00: 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 77 68 69  revisions....whi
9a10: 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d  le {$root ne ""}
9a20: 20 7b 0a 09 20 20 20 20 24 72 6f 6f 74 20 72 65   {..    $root re
9a30: 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09 20 20 20  movealltags..   
9a40: 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c   $root removeall
9a50: 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20 23 20  branches..    # 
9a60: 4e 6f 74 65 3a 20 53 65 65 20 74 68 65 20 6e 6f  Note: See the no
9a70: 74 65 20 5b 78 5d 2e 0a 0a 09 20 20 20 20 23 20  te [x]....    # 
9a80: 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66  From cvs2svn: If
9a90: 20 74 68 69 73 20 69 73 20 74 68 65 20 6c 61 73   this is the las
9aa0: 74 20 64 65 66 61 75 6c 74 20 72 65 76 69 73 69  t default revisi
9ab0: 6f 6e 20 6f 6e 20 61 0a 09 20 20 20 20 23 20 6e  on on a..    # n
9ac0: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
9ad0: 20 62 72 61 6e 63 68 20 66 6f 6c 6c 6f 77 65 64   branch followed
9ae0: 20 62 79 20 61 20 31 2e 32 20 72 65 76 69 73 69   by a 1.2 revisi
9af0: 6f 6e 2c 0a 09 20 20 20 20 23 20 74 68 65 6e 20  on,..    # then 
9b00: 74 68 65 20 31 2e 32 20 72 65 76 69 73 69 6f 6e  the 1.2 revision
9b10: 20 64 65 70 65 6e 64 73 20 6f 6e 20 74 68 69 73   depends on this
9b20: 20 6f 6e 65 2e 20 20 46 49 58 4d 45 3a 20 49 74   one.  FIXME: It
9b30: 20 69 73 0a 09 20 20 20 20 23 20 71 75 65 73 74   is..    # quest
9b40: 69 6f 6e 61 62 6c 65 20 77 68 65 74 68 65 72 20  ionable whether 
9b50: 74 68 69 73 20 68 61 6e 64 6c 69 6e 67 20 69 73  this handling is
9b60: 20 63 6f 72 72 65 63 74 2c 20 73 69 6e 63 65 20   correct, since 
9b70: 74 68 65 0a 09 20 20 20 20 23 20 6e 6f 6e 2d 74  the..    # non-t
9b80: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61  runk default bra
9b90: 6e 63 68 20 72 65 76 69 73 69 6f 6e 73 20 61 66  nch revisions af
9ba0: 66 65 63 74 20 74 72 75 6e 6b 20 61 6e 64 0a 09  fect trunk and..
9bb0: 20 20 20 20 23 20 73 68 6f 75 6c 64 20 74 68 65      # should the
9bc0: 72 65 66 6f 72 65 20 6e 6f 74 20 6a 75 73 74 20  refore not just 
9bd0: 62 65 20 64 69 73 63 61 72 64 65 64 20 65 76 65  be discarded eve
9be0: 6e 20 69 66 0a 09 20 20 20 20 23 20 2d 2d 74 72  n if..    # --tr
9bf0: 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a 09 20 20 20 20  unk-only....    
9c00: 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73 64 65  if {[$root hasde
9c10: 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64  faultbranchchild
9c20: 5d 7d 20 7b 0a 09 09 73 65 74 20 6e 74 64 62 63  ]} {...set ntdbc
9c30: 68 69 6c 64 20 5b 24 72 6f 6f 74 20 64 65 66 61  hild [$root defa
9c40: 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 0a  ultbranchchild].
9c50: 09 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65  ..integrity asse
9c60: 72 74 20 7b 0a 09 09 20 20 20 20 5b 24 6e 74 64  rt {...    [$ntd
9c70: 62 63 68 69 6c 64 20 64 65 66 61 75 6c 74 62 72  bchild defaultbr
9c80: 61 6e 63 68 70 61 72 65 6e 74 5d 20 65 71 20 24  anchparent] eq $
9c90: 6e 74 64 62 63 68 69 6c 64 0a 09 09 7d 20 7b 6e  ntdbchild...} {n
9ca0: 74 64 62 20 2d 20 74 72 75 6e 6b 20 6c 69 6e 6b  tdb - trunk link
9cb0: 61 67 65 20 62 72 6f 6b 65 6e 7d 0a 09 09 24 6e  age broken}...$n
9cc0: 74 64 62 63 68 69 6c 64 20 63 75 74 64 65 66 61  tdbchild cutdefa
9cd0: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a  ultbranchparent.
9ce0: 09 09 69 66 20 7b 5b 24 6e 74 64 62 63 68 69 6c  ..if {[$ntdbchil
9cf0: 64 20 68 61 73 70 61 72 65 6e 74 5d 7d 20 7b 0a  d hasparent]} {.
9d00: 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79  ..    lappend my
9d10: 72 6f 6f 74 73 20 5b 24 6e 74 64 62 63 68 69 6c  roots [$ntdbchil
9d20: 64 20 70 61 72 65 6e 74 5d 0a 09 09 7d 0a 09 20  d parent]...}.. 
9d30: 20 20 20 7d 0a 0a 09 20 20 20 20 73 65 74 20 72     }...    set r
9d40: 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64  oot [$root child
9d50: 5d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20  ]..}...return.  
9d60: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
9d70: 47 72 61 66 74 4e 54 44 42 32 54 72 75 6e 6b 20  GraftNTDB2Trunk 
9d80: 7b 72 6f 6f 74 7d 20 7b 0a 09 23 20 57 65 20 63  {root} {..# We c
9d90: 61 6e 20 6e 6f 77 20 67 72 61 66 74 20 74 68 65  an now graft the
9da0: 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75   non-trunk defau
9db0: 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69  lt branch revisi
9dc0: 6f 6e 73 20 74 6f 0a 09 23 20 74 72 75 6e 6b 2e  ons to..# trunk.
9dd0: 20 54 68 65 79 20 73 68 6f 75 6c 64 20 61 6c 72   They should alr
9de0: 65 61 64 79 20 62 65 20 61 6c 6f 6e 65 20 6f 6e  eady be alone on
9df0: 20 61 20 43 56 53 42 72 61 6e 63 68 2d 6c 65 73   a CVSBranch-les
9e00: 73 0a 09 23 20 62 72 61 6e 63 68 2e 0a 0a 09 69  s..# branch....i
9e10: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20  ntegrity assert 
9e20: 7b 21 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65  {![$root haspare
9e30: 6e 74 62 72 61 6e 63 68 5d 7d 20 7b 4e 54 44 42  ntbranch]} {NTDB
9e40: 20 72 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73 20   root still has 
9e50: 69 74 73 20 62 72 61 6e 63 68 20 73 79 6d 62 6f  its branch symbo
9e60: 6c 7d 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73  l}..integrity as
9e70: 73 65 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61  sert {![$root ha
9e80: 73 62 72 61 6e 63 68 65 73 5d 7d 20 20 20 20 20  sbranches]}     
9e90: 7b 4e 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c  {NTDB root still
9ea0: 20 68 61 73 20 73 70 61 77 6e 65 64 20 62 72 61   has spawned bra
9eb0: 6e 63 68 65 73 7d 0a 0a 09 73 65 74 20 6c 61 73  nches}...set las
9ec0: 74 20 24 72 6f 6f 74 0a 09 77 68 69 6c 65 20 7b  t $root..while {
9ed0: 5b 24 6c 61 73 74 20 68 61 73 63 68 69 6c 64 5d  [$last haschild]
9ee0: 7d 20 7b 73 65 74 20 6c 61 73 74 20 5b 24 6c 61  } {set last [$la
9ef0: 73 74 20 63 68 69 6c 64 5d 7d 0a 0a 09 69 66 20  st child]}...if 
9f00: 7b 5b 24 6c 61 73 74 20 68 61 73 64 65 66 61 75  {[$last hasdefau
9f10: 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 5d 7d 20  ltbranchchild]} 
9f20: 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65 76 31  {...    set rev1
9f30: 32 20 5b 24 6c 61 73 74 20 64 65 66 61 75 6c 74  2 [$last default
9f40: 62 72 61 6e 63 68 63 68 69 6c 64 5d 0a 09 20 20  branchchild]..  
9f50: 20 20 24 72 65 76 31 32 20 63 75 74 64 65 66 61    $rev12 cutdefa
9f60: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a  ultbranchparent.
9f70: 09 20 20 20 20 24 6c 61 73 74 20 20 63 75 74 64  .    $last  cutd
9f80: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c  efaultbranchchil
9f90: 64 0a 0a 09 20 20 20 20 24 72 65 76 31 32 20 63  d...    $rev12 c
9fa0: 68 61 6e 67 65 70 61 72 65 6e 74 20 24 6c 61 73  hangeparent $las
9fb0: 74 0a 09 20 20 20 20 24 6c 61 73 74 20 20 63 68  t..    $last  ch
9fc0: 61 6e 67 65 63 68 69 6c 64 20 24 72 65 76 31 32  angechild $rev12
9fd0: 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65 20 6d  ...    ldelete m
9fe0: 79 72 6f 6f 74 73 20 24 72 65 76 31 32 0a 0a 09  yroots $rev12...
9ff0: 20 20 20 20 23 20 4e 6f 74 65 20 61 6e 64 20 72      # Note and r
a000: 65 6d 65 6d 62 65 72 20 74 68 61 74 20 74 68 65  emember that the
a010: 20 74 79 70 65 20 6f 66 20 72 65 76 31 32 20 77   type of rev12 w
a020: 61 73 20 61 6c 72 65 61 64 79 0a 09 20 20 20 20  as already..    
a030: 23 20 61 64 6a 75 73 74 65 64 20 62 79 20 41 64  # adjusted by Ad
a040: 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61  justNonTrunkDefa
a050: 75 6c 74 42 72 61 6e 63 68 2c 20 73 6f 20 77 65  ultBranch, so we
a060: 20 64 6f 6e 27 74 0a 09 20 20 20 20 23 20 68 61   don't..    # ha
a070: 76 65 20 74 6f 20 63 68 61 6e 67 65 20 69 74 73  ve to change its
a080: 20 74 79 70 65 20 68 65 72 65 2e 0a 09 7d 0a 0a   type here...}..
a090: 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65  .while {$root ne
a0a0: 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f 6f   ""} {..    $roo
a0b0: 74 20 73 65 74 6f 6e 64 65 66 61 75 6c 74 62 72  t setondefaultbr
a0c0: 61 6e 63 68 20 30 0a 09 20 20 20 20 24 72 6f 6f  anch 0..    $roo
a0d0: 74 20 73 65 74 6c 6f 64 20 24 6d 79 74 72 75 6e  t setlod $mytrun
a0e0: 6b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 74  k..    foreach t
a0f0: 61 67 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20  ag [$root tags] 
a100: 7b 0a 09 09 24 74 61 67 20 73 65 74 6c 6f 64 20  {...$tag setlod 
a110: 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20 7d 0a  $mytrunk..    }.
a120: 09 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24  .    set root [$
a130: 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 0a  root child]..}..
a140: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0a 20          return. 
a150: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
a160: 20 41 63 74 69 76 65 20 7b 7d 20 7b 0a 09 73 65   Active {} {..se
a170: 74 20 72 65 76 69 73 69 6f 6e 73 20 7b 7d 0a 09  t revisions {}..
a180: 73 65 74 20 73 79 6d 62 6f 6c 73 20 20 20 7b 7d  set symbols   {}
a190: 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20  ...foreach root 
a1a0: 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65  [$self LinesOfDe
a1b0: 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20  velopment] {..  
a1c0: 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61 73    if {[$root has
a1d0: 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20 7b  parentbranch]} {
a1e0: 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73   lappend symbols
a1f0: 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62 72   [$root parentbr
a200: 61 6e 63 68 5d 20 7d 0a 09 20 20 20 20 77 68 69  anch] }..    whi
a210: 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d  le {$root ne ""}
a220: 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 72 65 76   {...lappend rev
a230: 69 73 69 6f 6e 73 20 24 72 6f 6f 74 0a 09 09 66  isions $root...f
a240: 6f 72 65 61 63 68 20 74 61 67 20 20 20 20 5b 24  oreach tag    [$
a250: 72 6f 6f 74 20 74 61 67 73 5d 20 20 20 20 20 7b  root tags]     {
a260: 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73   lappend symbols
a270: 20 24 74 61 67 20 20 20 20 7d 0a 09 09 66 6f 72   $tag    }...for
a280: 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f  each branch [$ro
a290: 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09  ot branches] {..
a2a0: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61  .    integrity a
a2b0: 73 73 65 72 74 20 7b 0a 09 09 09 5b 24 62 72 61  ssert {....[$bra
a2c0: 6e 63 68 20 70 61 72 65 6e 74 5d 20 65 71 20 24  nch parent] eq $
a2d0: 72 6f 6f 74 0a 09 09 20 20 20 20 7d 20 7b 42 61  root...    } {Ba
a2e0: 63 6b 72 65 66 65 72 65 6e 63 65 20 62 72 61 6e  ckreference bran
a2f0: 63 68 20 74 6f 20 69 74 73 20 72 6f 6f 74 20 69  ch to its root i
a300: 73 20 6d 69 73 73 69 6e 67 20 6f 72 20 77 72 6f  s missing or wro
a310: 6e 67 7d 0a 09 09 20 20 20 20 6c 61 70 70 65 6e  ng}...    lappen
a320: 64 20 73 79 6d 62 6f 6c 73 20 24 62 72 61 6e 63  d symbols $branc
a330: 68 0a 09 09 7d 0a 09 09 73 65 74 20 6c 6f 64 20  h...}...set lod 
a340: 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a 09 09 69 66  [$root lod]...if
a350: 20 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b   {![$lod istrunk
a360: 5d 7d 20 7b 0a 09 09 20 20 20 20 69 6e 74 65 67  ]} {...    integ
a370: 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09  rity assert {...
a380: 09 5b 24 6c 6f 64 20 68 61 73 63 68 69 6c 64 5d  .[$lod haschild]
a390: 0a 09 09 20 20 20 20 7d 20 7b 42 72 61 6e 63 68  ...    } {Branch
a3a0: 20 69 73 20 4c 4f 44 20 73 79 6d 62 6f 6c 20 77   is LOD symbol w
a3b0: 69 74 68 6f 75 74 20 72 65 76 69 73 69 6f 6e 73  ithout revisions
a3c0: 7d 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64 20  }...    lappend 
a3d0: 73 79 6d 62 6f 6c 73 20 24 6c 6f 64 0a 09 09 7d  symbols $lod...}
a3e0: 0a 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f  ...set root [$ro
a3f0: 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d  ot child]..    }
a400: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 20 5b 6c 69  ..}...return [li
a410: 73 74 20 5b 6c 73 6f 72 74 20 2d 75 6e 69 71 75  st [lsort -uniqu
a420: 65 20 2d 64 69 63 74 20 24 72 65 76 69 73 69 6f  e -dict $revisio
a430: 6e 73 5d 20 5b 6c 73 6f 72 74 20 2d 75 6e 69 71  ns] [lsort -uniq
a440: 75 65 20 2d 64 69 63 74 20 24 73 79 6d 62 6f 6c  ue -dict $symbol
a450: 73 5d 5d 0a 20 20 20 20 7d 0a 0a 0a 20 20 20 20  s]].    }...    
a460: 6d 65 74 68 6f 64 20 41 67 67 72 65 67 61 74 65  method Aggregate
a470: 53 79 6d 62 6f 6c 44 61 74 61 20 7b 7d 20 7b 0a  SymbolData {} {.
a480: 09 23 20 4e 6f 77 20 74 68 61 74 20 74 68 65 20  .# Now that the 
a490: 65 78 61 63 74 20 73 65 74 20 6f 66 20 72 65 76  exact set of rev
a4a0: 69 73 69 6f 6e 73 20 28 61 6e 64 20 74 68 72 6f  isions (and thro
a4b0: 75 67 68 20 74 68 61 74 0a 09 23 20 62 72 61 6e  ugh that..# bran
a4c0: 63 68 65 73 20 61 6e 64 20 74 61 67 73 29 20 69  ches and tags) i
a4d0: 73 20 6b 6e 6f 77 6e 20 77 65 20 63 61 6e 20 75  s known we can u
a4e0: 70 64 61 74 65 20 74 68 65 20 61 67 67 72 65 67  pdate the aggreg
a4f0: 61 74 65 0a 09 23 20 73 79 6d 62 6f 6c 20 73 74  ate..# symbol st
a500: 61 74 69 73 74 69 63 73 2e 0a 0a 09 66 6f 72 65  atistics....fore
a510: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20  ach root [$self 
a520: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
a530: 6e 74 5d 20 7b 0a 09 20 20 20 20 73 65 74 20 6c  nt] {..    set l
a540: 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d 0a 0a  od [$root lod]..
a550: 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 49 66 20  .    # Note: If 
a560: 74 68 65 20 4c 4f 44 20 69 73 20 74 68 65 20 74  the LOD is the t
a570: 72 75 6e 6b 20 74 68 65 20 63 6f 75 6e 74 2a 2c  runk the count*,
a580: 20 65 74 63 2e 20 6d 65 74 68 6f 64 73 0a 09 20   etc. methods.. 
a590: 20 20 20 23 20 77 69 6c 6c 20 64 6f 20 6e 6f 74     # will do not
a5a0: 68 69 6e 67 2c 20 61 73 20 69 74 20 69 73 20 61  hing, as it is a
a5b0: 6c 77 61 79 73 20 70 72 65 73 65 6e 74 20 28 63  lways present (c
a5c0: 61 6e 6e 6f 74 20 62 65 0a 09 20 20 20 20 23 20  annot be..    # 
a5d0: 65 78 63 6c 75 64 65 64 29 2c 20 61 6e 64 20 69  excluded), and i
a5e0: 73 20 61 6c 77 61 79 73 20 61 20 62 72 61 6e 63  s always a branc
a5f0: 68 20 74 6f 6f 2e 0a 0a 09 20 20 20 20 23 20 4c  h too....    # L
a600: 69 6e 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d  ines of developm
a610: 65 6e 74 20 63 6f 75 6e 74 20 61 73 20 62 72 61  ent count as bra
a620: 6e 63 68 65 73 20 61 6e 64 20 68 61 76 65 20 61  nches and have a
a630: 20 63 6f 6d 6d 69 74 0a 09 20 20 20 20 23 20 6f   commit..    # o
a640: 6e 20 74 68 65 6d 20 28 72 6f 6f 74 29 2e 20 49  n them (root). I
a650: 66 20 74 68 65 79 20 61 72 65 20 73 74 69 6c 6c  f they are still
a660: 20 61 74 74 61 63 68 65 64 20 74 6f 20 61 20 74   attached to a t
a670: 72 65 65 20 77 65 0a 09 20 20 20 20 23 20 68 61  ree we..    # ha
a680: 76 65 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e  ve to compute an
a690: 64 20 72 65 67 69 73 74 65 72 20 70 6f 73 73 69  d register possi
a6a0: 62 6c 65 20 70 61 72 65 6e 74 73 2e 0a 0a 09 20  ble parents.... 
a6b0: 20 20 20 24 6c 6f 64 20 63 6f 75 6e 74 61 73 62     $lod countasb
a6c0: 72 61 6e 63 68 0a 09 20 20 20 20 24 6c 6f 64 20  ranch..    $lod 
a6d0: 63 6f 75 6e 74 61 63 6f 6d 6d 69 74 0a 0a 09 20  countacommit... 
a6e0: 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 68 61     if {[$root ha
a6f0: 73 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20  sparentbranch]} 
a700: 7b 0a 09 09 23 20 4e 6f 74 65 20 6c 6f 64 20 3d  {...# Note lod =
a710: 3d 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 62  = [$root parentb
a720: 72 61 6e 63 68 5d 0a 09 09 24 6c 6f 64 20 70 6f  ranch]...$lod po
a730: 73 73 69 62 6c 65 70 61 72 65 6e 74 73 0a 09 20  ssibleparents.. 
a740: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 5b 24     } elseif {![$
a750: 6c 6f 64 20 69 73 74 72 75 6e 6b 5d 20 26 26 20  lod istrunk] && 
a760: 5b 24 72 6f 6f 74 20 69 73 6f 6e 64 65 66 61 75  [$root isondefau
a770: 6c 74 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 23  ltbranch]} {...#
a780: 20 54 68 69 73 20 69 73 20 74 68 65 20 72 6f 6f   This is the roo
a790: 74 20 72 65 76 69 73 69 6f 6e 20 6f 66 20 61 20  t revision of a 
a7a0: 64 65 74 61 63 68 65 64 20 4e 54 44 42 2e 20 57  detached NTDB. W
a7b0: 65 0a 09 09 23 20 68 61 76 65 20 74 6f 20 6d 61  e...# have to ma
a7c0: 6e 75 61 6c 6c 79 20 73 65 74 20 74 68 65 20 6f  nually set the o
a7d0: 6e 6c 79 20 70 6f 73 73 69 62 6c 65 20 70 61 72  nly possible par
a7e0: 65 6e 74 20 66 6f 72 0a 09 09 23 20 74 68 69 73  ent for...# this
a7f0: 20 4c 4f 44 2c 20 74 68 65 20 74 72 75 6e 6b 20   LOD, the trunk 
a800: 69 74 73 65 6c 66 2e 0a 0a 09 09 5b 24 6c 6f 64  itself.....[$lod
a810: 20 73 79 6d 62 6f 6c 5d 20 70 6f 73 73 69 62 6c   symbol] possibl
a820: 65 70 61 72 65 6e 74 20 24 6d 79 74 72 75 6e 6b  eparent $mytrunk
a830: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20  ..    }...    # 
a840: 46 6f 72 20 74 68 65 20 72 65 76 69 73 69 6f 6e  For the revision
a850: 73 20 69 6e 20 74 68 65 20 6c 69 6e 65 20 77 65  s in the line we
a860: 20 72 65 67 69 73 74 65 72 20 74 68 65 69 72 20   register their 
a870: 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20 23 20  branches..    # 
a880: 61 6e 64 20 74 61 67 73 20 61 73 20 62 6c 6f 63  and tags as bloc
a890: 6b 65 72 73 20 66 6f 72 20 74 68 65 20 6c 6f 64  kers for the lod
a8a0: 2c 20 61 6e 64 20 75 70 64 61 74 65 20 74 68 65  , and update the
a8b0: 20 74 79 70 65 0a 09 20 20 20 20 23 20 63 6f 75   type..    # cou
a8c0: 6e 74 65 72 73 20 61 73 20 77 65 6c 6c 2e 20 41  nters as well. A
a8d0: 73 20 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 73  s branch symbols
a8e0: 20 77 69 74 68 6f 75 74 20 63 6f 6d 6d 69 74 73   without commits
a8f0: 20 6f 6e 0a 09 20 20 20 20 23 20 74 68 65 6d 20   on..    # them 
a900: 61 72 65 20 6e 6f 74 20 6c 69 73 74 65 64 20 61  are not listed a
a910: 73 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c  s lines of devel
a920: 6f 70 6d 65 6e 74 2c 20 77 65 20 68 61 76 65 20  opment, we have 
a930: 74 6f 0a 09 20 20 20 20 23 20 63 6f 75 6e 74 20  to..    # count 
a940: 74 68 65 6d 20 68 65 72 65 20 61 73 20 77 65 6c  them here as wel
a950: 6c 2c 20 61 73 20 70 6c 61 69 6e 20 62 72 61 6e  l, as plain bran
a960: 63 68 65 73 2e 20 41 74 20 6c 61 73 74 20 77 65  ches. At last we
a970: 0a 09 20 20 20 20 23 20 68 61 76 65 20 74 6f 20  ..    # have to 
a980: 63 6f 6d 70 75 74 65 20 61 6e 64 20 72 65 67 69  compute and regi
a990: 73 74 65 72 20 74 68 65 20 70 6f 73 73 69 62 6c  ster the possibl
a9a0: 65 20 70 61 72 65 6e 74 73 20 6f 66 20 74 68 65  e parents of the
a9b0: 0a 09 20 20 20 20 23 20 74 61 67 73 2c 20 69 6e  ..    # tags, in
a9c0: 20 63 61 73 65 20 74 68 65 79 20 61 72 65 20 6c   case they are l
a9d0: 61 74 65 72 20 63 6f 6e 76 65 72 74 65 64 20 61  ater converted a
a9e0: 73 20 62 72 61 6e 63 68 65 73 2e 0a 0a 09 20 20  s branches....  
a9f0: 20 20 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e    while {$root n
aa00: 65 20 22 22 7d 20 7b 0a 09 09 66 6f 72 65 61 63  e ""} {...foreac
aa10: 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20  h branch [$root 
aa20: 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 20 20  branches] {...  
aa30: 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65 64 62 79    $lod blockedby
aa40: 20 24 62 72 61 6e 63 68 0a 09 09 20 20 20 20 24   $branch...    $
aa50: 62 72 61 6e 63 68 20 70 6f 73 73 69 62 6c 65 70  branch possiblep
aa60: 61 72 65 6e 74 73 0a 09 09 20 20 20 20 69 66 20  arents...    if 
aa70: 7b 5b 24 62 72 61 6e 63 68 20 68 61 73 63 68 69  {[$branch haschi
aa80: 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09  ld]} continue...
aa90: 20 20 20 20 24 62 72 61 6e 63 68 20 63 6f 75 6e      $branch coun
aaa0: 74 61 73 62 72 61 6e 63 68 0a 09 09 7d 0a 0a 09  tasbranch...}...
aab0: 09 66 6f 72 65 61 63 68 20 74 61 67 20 5b 24 72  .foreach tag [$r
aac0: 6f 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09 20 20  oot tags] {...  
aad0: 20 20 24 6c 6f 64 20 62 6c 6f 63 6b 65 64 62 79    $lod blockedby
aae0: 20 24 74 61 67 0a 09 09 20 20 20 20 24 74 61 67   $tag...    $tag
aaf0: 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 73   possibleparents
ab00: 0a 09 09 20 20 20 20 24 74 61 67 20 63 6f 75 6e  ...    $tag coun
ab10: 74 61 73 74 61 67 0a 09 09 7d 0a 0a 09 09 73 65  tastag...}....se
ab20: 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68  t root [$root ch
ab30: 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a  ild]..    }..}..
ab40: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
ab50: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
ab60: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
ab70: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
ab80: 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a  # Configuration.
ab90: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73  .    pragma -has
aba0: 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20  typeinfo    no  
abb0: 3b 20 23 20 6e 6f 20 74 79 70 65 20 69 6e 74 72  ; # no type intr
abc0: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72  ospection.    pr
abd0: 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f 20 20 20  agma -hasinfo   
abe0: 20 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20       no  ; # no 
abf0: 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63  object introspec
ac00: 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20  tion.    pragma 
ac10: 2d 68 61 73 74 79 70 65 6d 65 74 68 6f 64 73 20  -hastypemethods 
ac20: 6e 6f 20 20 3b 20 23 20 74 79 70 65 20 69 73 20  no  ; # type is 
ac30: 6e 6f 74 20 72 65 6c 65 76 61 6e 74 2e 0a 0a 20  not relevant... 
ac40: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
ac50: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
ac60: 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61  ##########.}..na
ac70: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76  mespace eval ::v
ac80: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
ac90: 74 3a 3a 63 76 73 20 7b 0a 20 20 20 20 6e 61 6d  t::cvs {.    nam
aca0: 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 66 69  espace export fi
acb0: 6c 65 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  le.    namespace
acc0: 20 65 76 61 6c 20 66 69 6c 65 20 7b 0a 09 23 20   eval file {..# 
acd0: 49 6d 70 6f 72 74 20 6e 6f 74 20 72 65 71 75 69  Import not requi
ace0: 72 65 64 2c 20 61 6c 72 65 61 64 79 20 61 20 63  red, already a c
acf0: 68 69 6c 64 20 6e 61 6d 65 73 70 61 63 65 2e 0a  hild namespace..
ad00: 09 23 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  .# namespace imp
ad10: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  ort ::vc::fossil
ad20: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66  ::import::cvs::f
ad30: 69 6c 65 3a 3a 72 65 76 0a 09 23 20 6e 61 6d 65  ile::rev..# name
ad40: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
ad50: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
ad60: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 73 79  t::cvs::file::sy
ad70: 6d 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  m..namespace imp
ad80: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a  ort ::vc::tools:
ad90: 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70  :misc::*..namesp
ada0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
adb0: 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a  :tools::trouble.
adc0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
add0: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c  t ::vc::tools::l
ade0: 6f 67 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d  og..namespace im
adf0: 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69  port ::vc::fossi
ae00: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
ae10: 62 6c 6f 62 73 74 6f 72 65 0a 09 6e 61 6d 65 73  blobstore..names
ae20: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63  pace import ::vc
ae30: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
ae40: 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61  ::cvs::state..na
ae50: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
ae60: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
ae70: 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72  ort::cvs::integr
ae80: 69 74 79 0a 09 6e 61 6d 65 73 70 61 63 65 20 69  ity..namespace i
ae90: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73  mport ::vc::foss
aea0: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
aeb0: 3a 67 74 63 6f 72 65 0a 20 20 20 20 7d 0a 7d 0a  :gtcore.    }.}.
aec0: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23  .# # ## ### ####
aed0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
aee0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
aef0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
af00: 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65  # Ready..package
af10: 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73   provide vc::fos
af20: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
af30: 3a 3a 66 69 6c 65 20 31 2e 30 0a 72 65 74 75 72  ::file 1.0.retur
af40: 6e 0a                                            n.