Hex Artifact Content
Not logged in

Artifact 8d01091d5f6cd90ccd649dccfddcecae9a65dcf3:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [f637d42206] - Updated my notes regarding memory usage. Converted more locations to incremental query processing via 'state foreachrow', now throughout the importer. by aku on 2008-02-24 18:01:40.

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 73   information...s
27d0: 74 61 74 65 20 66 6f 72 65 61 63 68 72 6f 77 20  tate foreachrow 
27e0: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e  {..    SELECT B.
27f0: 72 69 64 20 20 20 20 41 53 20 78 72 69 64 2c 0a  rid    AS xrid,.
2800: 09 20 20 20 20 20 20 20 20 20 20 20 52 2e 72 65  .           R.re
2810: 76 20 20 20 20 41 53 20 72 65 76 6e 72 2c 0a 09  v    AS revnr,..
2820: 20 20 20 20 20 20 20 20 20 20 20 52 2e 63 68 69             R.chi
2830: 6c 64 20 20 41 53 20 78 63 68 69 6c 64 2c 0a 09  ld  AS xchild,..
2840: 20 20 20 20 20 20 20 20 20 20 20 42 2e 63 6f 66             B.cof
2850: 66 20 20 20 41 53 20 78 63 6f 66 66 2c 0a 09 20  f   AS xcoff,.. 
2860: 20 20 20 20 20 20 20 20 20 20 42 2e 63 6c 65 6e            B.clen
2870: 20 20 20 41 53 20 78 63 6c 65 6e 2c 0a 09 20 20     AS xclen,..  
2880: 20 20 20 20 20 20 20 20 20 42 2e 62 69 64 20 20           B.bid  
2890: 20 20 41 53 20 63 69 64 2c 0a 09 20 20 20 20 20    AS cid,..     
28a0: 20 20 20 20 20 20 42 2e 70 69 64 20 20 20 20 41        B.pid    A
28b0: 53 20 63 70 61 72 65 6e 74 0a 09 20 20 20 20 46  S cparent..    F
28c0: 52 4f 4d 20 20 20 20 20 20 20 20 20 20 20 20 62  ROM            b
28d0: 6c 6f 62 20 42 0a 09 20 20 20 20 4c 45 46 54 20  lob B..    LEFT 
28e0: 4f 55 54 45 52 20 4a 4f 49 4e 20 72 65 76 69 73  OUTER JOIN revis
28f0: 69 6f 6e 20 52 0a 09 20 20 20 20 4f 4e 20 20 20  ion R..    ON   
2900: 20 20 20 20 20 20 20 20 20 20 20 42 2e 72 69 64             B.rid
2910: 20 3d 20 52 2e 72 69 64 0a 09 20 20 20 20 57 48   = R.rid..    WH
2920: 45 52 45 20 20 42 2e 66 69 64 20 3d 20 24 6d 79  ERE  B.fid = $my
2930: 69 64 0a 09 7d 20 7b 0a 09 20 20 20 20 23 20 4d  id..} {..    # M
2940: 61 69 6e 20 64 61 74 61 20 61 72 65 20 62 6c 6f  ain data are blo
2950: 62 73 2c 20 6d 6f 73 74 20 77 69 6c 6c 20 68 61  bs, most will ha
2960: 76 65 20 72 65 76 69 73 69 6f 6e 73 2c 20 62 75  ve revisions, bu
2970: 74 20 6e 6f 74 0a 09 20 20 20 20 23 20 61 6c 6c  t not..    # all
2980: 2e 20 54 68 65 20 65 78 70 61 6e 73 69 6f 6e 20  . The expansion 
2990: 67 72 61 70 68 20 69 73 20 62 6c 6f 62 20 62 61  graph is blob ba
29a0: 73 65 64 2c 20 77 68 65 72 65 61 73 20 74 68 65  sed, whereas the
29b0: 0a 09 20 20 20 20 23 20 72 65 63 6f 6d 70 72 65  ..    # recompre
29c0: 73 73 69 6f 6e 20 67 72 61 70 68 20 69 73 20 72  ssion graph is r
29d0: 65 76 69 73 69 6f 6e 20 62 61 73 65 64 2e 0a 0a  evision based...
29e0: 09 20 20 20 20 69 66 20 7b 24 72 65 76 6e 72 20  .    if {$revnr 
29f0: 6e 65 20 22 22 7d 20 7b 0a 09 09 23 20 42 6c 6f  ne ""} {...# Blo
2a00: 62 20 68 61 73 20 72 65 76 69 73 69 6f 6e 2c 20  b has revision, 
2a10: 65 78 74 65 6e 64 20 72 65 63 6f 6d 70 72 65 73  extend recompres
2a20: 73 69 6f 6e 20 67 72 61 70 68 2e 0a 0a 09 09 6c  sion graph.....l
2a30: 61 70 70 65 6e 64 20 72 65 76 6d 61 70 20 72 24  append revmap r$
2a40: 72 65 76 6e 72 20 24 78 72 69 64 0a 0a 09 09 24  revnr $xrid....$
2a50: 7a 70 20 6e 6f 64 65 20 69 6e 73 65 72 74 20 24  zp node insert $
2a60: 78 72 69 64 0a 09 09 24 7a 70 20 6e 6f 64 65 20  xrid...$zp node 
2a70: 73 65 74 20 20 20 20 24 78 72 69 64 20 72 65 76  set    $xrid rev
2a80: 6e 72 20 24 72 65 76 6e 72 0a 09 09 24 7a 70 20  nr $revnr...$zp 
2a90: 6e 6f 64 65 20 73 65 74 20 20 20 20 24 78 72 69  node set    $xri
2aa0: 64 20 6c 61 62 65 6c 20 3c 24 72 65 76 6e 72 3e  d label <$revnr>
2ab0: 0a 0a 09 09 69 66 20 7b 24 78 63 68 69 6c 64 20  ....if {$xchild 
2ac0: 6e 65 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 6c  ne ""} {...    l
2ad0: 61 70 70 65 6e 64 20 7a 61 72 63 73 20 24 78 63  append zarcs $xc
2ae0: 68 69 6c 64 20 24 78 72 69 64 0a 09 09 7d 0a 09  hild $xrid...}..
2af0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23      } else {...#
2b00: 20 57 65 20 66 61 6b 65 20 61 20 72 65 76 6e 72   We fake a revnr
2b10: 20 66 6f 72 20 74 68 65 20 62 6c 6f 62 73 20 77   for the blobs w
2b20: 68 69 63 68 20 68 61 76 65 20 6e 6f 0a 09 09 23  hich have no...#
2b30: 20 72 65 76 69 73 69 6f 6e 2c 20 66 6f 72 20 75   revision, for u
2b40: 73 65 20 69 6e 20 74 68 65 20 65 78 70 61 6e 73  se in the expans
2b50: 69 6f 6e 20 67 72 61 70 68 2e 0a 09 09 73 65 74  ion graph....set
2b60: 20 72 65 76 6e 72 20 67 68 6f 73 74 24 63 69 64   revnr ghost$cid
2b70: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20  ..    }...    # 
2b80: 4e 6f 77 20 74 68 65 20 65 78 70 61 6e 73 69 6f  Now the expansio
2b90: 6e 20 67 72 61 70 68 2e 0a 0a 09 20 20 20 20 24  n graph....    $
2ba0: 65 78 20 6e 6f 64 65 20 69 6e 73 65 72 74 20 24  ex node insert $
2bb0: 63 69 64 0a 09 20 20 20 20 24 65 78 20 6e 6f 64  cid..    $ex nod
2bc0: 65 20 73 65 74 20 20 20 20 24 63 69 64 20 74 65  e set    $cid te
2bd0: 78 74 20 20 5b 6c 69 73 74 20 24 78 63 6f 66 66  xt  [list $xcoff
2be0: 20 24 78 63 6c 65 6e 5d 0a 09 20 20 20 20 24 65   $xclen]..    $e
2bf0: 78 20 6e 6f 64 65 20 73 65 74 20 20 20 20 24 63  x node set    $c
2c00: 69 64 20 72 65 76 6e 72 20 24 72 65 76 6e 72 0a  id revnr $revnr.
2c10: 09 20 20 20 20 24 65 78 20 6e 6f 64 65 20 73 65  .    $ex node se
2c20: 74 20 20 20 20 24 63 69 64 20 6c 61 62 65 6c 20  t    $cid label 
2c30: 3c 24 72 65 76 6e 72 3e 0a 0a 09 20 20 20 20 69  <$revnr>...    i
2c40: 66 20 7b 24 63 70 61 72 65 6e 74 20 6e 65 20 22  f {$cparent ne "
2c50: 22 7d 20 7b 0a 09 09 23 20 54 68 65 20 65 78 70  "} {...# The exp
2c60: 61 6e 73 69 6f 6e 20 61 72 63 73 20 67 6f 20 66  ansion arcs go f
2c70: 72 6f 6d 20 62 61 73 65 6c 69 6e 65 20 74 6f 20  rom baseline to 
2c80: 64 65 6c 74 61 0a 09 09 23 20 64 65 73 63 65 6e  delta...# descen
2c90: 64 61 6e 74 2c 20 62 61 73 65 64 20 6f 6e 20 74  dant, based on t
2ca0: 68 65 20 62 6c 6f 62 20 69 6e 66 6f 72 6d 61 74  he blob informat
2cb0: 69 6f 6e 2e 0a 09 09 6c 61 70 70 65 6e 64 20 65  ion....lappend e
2cc0: 61 72 63 73 20 24 63 70 61 72 65 6e 74 20 24 63  arcs $cparent $c
2cd0: 69 64 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 23  id..    }..}...#
2ce0: 20 50 68 61 73 65 20 49 49 3a 20 49 6e 73 65 72   Phase II: Inser
2cf0: 74 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74 65  t the accumulate
2d00: 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 0a  d dependencies..
2d10: 09 66 6f 72 65 61 63 68 20 7b 66 72 6f 6d 20 74  .foreach {from t
2d20: 6f 7d 20 24 65 61 72 63 73 20 7b 20 24 65 78 20  o} $earcs { $ex 
2d30: 61 72 63 20 69 6e 73 65 72 74 20 24 66 72 6f 6d  arc insert $from
2d40: 20 24 74 6f 20 7d 0a 09 66 6f 72 65 61 63 68 20   $to }..foreach 
2d50: 7b 66 72 6f 6d 20 74 6f 7d 20 24 7a 61 72 63 73  {from to} $zarcs
2d60: 20 7b 20 24 7a 70 20 61 72 63 20 69 6e 73 65 72   { $zp arc inser
2d70: 74 20 24 66 72 6f 6d 20 24 74 6f 20 7d 0a 0a 09  t $from $to }...
2d80: 23 20 50 68 61 73 65 20 49 49 49 3a 20 54 72 61  # Phase III: Tra
2d90: 76 65 72 73 65 20 74 68 65 20 67 72 61 70 68 73  verse the graphs
2da0: 2c 20 65 78 70 61 6e 64 20 74 68 65 20 66 69 6c  , expand the fil
2db0: 65 2c 20 61 6e 64 0a 09 23 20 20 20 20 20 20 20  e, and..#       
2dc0: 20 20 20 20 20 67 65 6e 65 72 61 74 65 20 69 6d       generate im
2dd0: 70 6f 72 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  port instruction
2de0: 73 2e 0a 0a 09 73 65 74 20 61 72 63 68 69 76 65  s....set archive
2df0: 20 5b 3a 3a 66 69 6c 65 20 6a 6f 69 6e 20 5b 24   [::file join [$
2e00: 6d 79 70 72 6f 6a 65 63 74 20 66 75 6c 6c 70 61  myproject fullpa
2e10: 74 68 5d 20 24 6d 79 70 61 74 68 5d 0a 09 73 65  th] $mypath]..se
2e20: 74 20 61 63 20 20 20 20 20 20 5b 6f 70 65 6e 20  t ac      [open 
2e30: 24 61 72 63 68 69 76 65 20 72 5d 0a 09 66 63 6f  $archive r]..fco
2e40: 6e 66 69 67 75 72 65 20 24 61 63 20 2d 74 72 61  nfigure $ac -tra
2e50: 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 0a  nslation binary.
2e60: 0a 09 23 20 46 69 72 73 74 20 74 72 61 76 65 72  ..# First traver
2e70: 73 65 20 74 68 65 20 65 78 70 61 6e 73 69 6f 6e  se the expansion
2e80: 20 67 72 61 70 68 2c 20 74 68 69 73 20 67 69 76   graph, this giv
2e90: 65 73 20 75 73 20 74 68 65 0a 09 23 20 72 65 76  es us the..# rev
2ea0: 69 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6f 72  isions in the or
2eb0: 64 65 72 20 77 65 20 68 61 76 65 20 74 6f 20 65  der we have to e
2ec0: 78 70 61 6e 64 20 74 68 65 6d 2c 20 77 68 69 63  xpand them, whic
2ed0: 68 20 77 65 20 64 6f 2e 0a 0a 09 73 65 74 20 6d  h we do....set m
2ee0: 61 78 20 5b 6c 6c 65 6e 67 74 68 20 5b 24 65 78  ax [llength [$ex
2ef0: 20 6e 6f 64 65 73 5d 5d 0a 09 73 65 74 20 6d 79   nodes]]..set my
2f00: 69 6d 70 6f 72 74 20 30 0a 0a 09 67 74 63 6f 72  import 0...gtcor
2f10: 65 20 64 61 74 61 63 6d 64 20 20 20 5b 6d 79 6d  e datacmd   [mym
2f20: 65 74 68 6f 64 20 45 78 70 61 6e 64 44 61 74 61  ethod ExpandData
2f30: 5d 0a 09 67 74 63 6f 72 65 20 66 6f 72 6d 61 74  ]..gtcore format
2f40: 63 6d 64 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78  cmd [mymethod Ex
2f50: 70 61 6e 64 46 6f 72 6d 61 74 5d 0a 09 67 74 63  pandFormat]..gtc
2f60: 6f 72 65 20 73 6f 72 74 63 6d 64 20 20 20 5b 6d  ore sortcmd   [m
2f70: 79 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 53 6f  ymethod ExpandSo
2f80: 72 74 5d 0a 09 67 74 63 6f 72 65 20 73 61 76 65  rt]..gtcore save
2f90: 63 6d 64 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20  cmd   [mymethod 
2fa0: 45 78 70 61 6e 64 31 20 24 61 63 20 24 64 69 72  Expand1 $ac $dir
2fb0: 20 24 6d 61 78 5d 0a 0a 09 67 74 63 6f 72 65 20   $max]...gtcore 
2fc0: 74 72 61 76 65 72 73 65 20 24 65 78 20 7b 45 78  traverse $ex {Ex
2fd0: 70 61 6e 64 69 6e 67 20 72 65 76 69 73 69 6f 6e  panding revision
2fe0: 73 2e 2e 2e 7d 0a 09 63 6c 6f 73 65 20 24 61 63  s...}..close $ac
2ff0: 0a 0a 09 23 20 4e 6f 77 20 74 72 61 76 65 72 73  ...# Now travers
3000: 65 20 74 68 65 20 69 6d 70 6f 72 74 20 67 72 61  e the import gra
3010: 70 68 2c 20 74 68 69 73 20 62 75 69 6c 64 73 20  ph, this builds 
3020: 74 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  the instruction.
3030: 09 23 20 6d 61 70 20 66 6f 72 20 74 68 65 20 66  .# map for the f
3040: 6f 73 73 69 6c 20 64 65 6c 74 61 73 2e 0a 0a 09  ossil deltas....
3050: 67 74 63 6f 72 65 20 64 61 74 61 63 6d 64 20 20  gtcore datacmd  
3060: 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70 61 6e   [mymethod Expan
3070: 64 44 61 74 61 5d 0a 09 67 74 63 6f 72 65 20 66  dData]..gtcore f
3080: 6f 72 6d 61 74 63 6d 64 20 5b 6d 79 6d 65 74 68  ormatcmd [mymeth
3090: 6f 64 20 45 78 70 61 6e 64 46 6f 72 6d 61 74 5d  od ExpandFormat]
30a0: 0a 09 67 74 63 6f 72 65 20 73 6f 72 74 63 6d 64  ..gtcore sortcmd
30b0: 20 20 20 5b 6d 79 6d 65 74 68 6f 64 20 45 78 70     [mymethod Exp
30c0: 61 6e 64 53 6f 72 74 5d 0a 09 67 74 63 6f 72 65  andSort]..gtcore
30d0: 20 73 61 76 65 63 6d 64 20 20 20 5b 6d 79 6d 65   savecmd   [myme
30e0: 74 68 6f 64 20 45 78 70 61 6e 64 32 5d 0a 0a 09  thod Expand2]...
30f0: 73 65 74 20 6d 79 69 6d 70 6f 72 74 20 7b 7d 0a  set myimport {}.
3100: 09 67 74 63 6f 72 65 20 74 72 61 76 65 72 73 65  .gtcore traverse
3110: 20 24 7a 70 20 7b 47 65 6e 65 72 61 74 69 6e 67   $zp {Generating
3120: 20 72 65 76 69 73 69 6f 6e 20 6f 72 64 65 72 20   revision order 
3130: 66 6f 72 20 69 6d 70 6f 72 74 2e 2e 2e 7d 0a 09  for import...}..
3140: 73 65 74 20 66 69 6c 65 6d 61 70 20 24 6d 79 69  set filemap $myi
3150: 6d 70 6f 72 74 0a 09 75 6e 73 65 74 20 6d 79 69  mport..unset myi
3160: 6d 70 6f 72 74 0a 0a 09 23 20 41 6e 64 20 62 61  mport...# And ba
3170: 63 6b 20 74 6f 20 69 6d 70 6f 72 74 20 63 6f 6e  ck to import con
3180: 74 72 6f 6c 0a 0a 09 24 65 78 20 64 65 73 74 72  trol...$ex destr
3190: 6f 79 0a 09 24 7a 70 20 64 65 73 74 72 6f 79 0a  oy..$zp destroy.
31a0: 0a 09 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24  ..return [list $
31b0: 66 69 6c 65 6d 61 70 20 24 72 65 76 6d 61 70 5d  filemap $revmap]
31c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
31d0: 6f 64 20 45 78 70 61 6e 64 44 61 74 61 20 20 20  od ExpandData   
31e0: 7b 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 20 72  {graph node} { r
31f0: 65 74 75 72 6e 20 5b 24 67 72 61 70 68 20 6e 6f  eturn [$graph no
3200: 64 65 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76  de get $node rev
3210: 6e 72 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64  nr] }.    method
3220: 20 45 78 70 61 6e 64 46 6f 72 6d 61 74 20 7b 67   ExpandFormat {g
3230: 72 61 70 68 20 69 74 65 6d 7d 20 7b 20 72 65 74  raph item} { ret
3240: 75 72 6e 20 3c 5b 6c 69 6e 64 65 78 20 24 69 74  urn <[lindex $it
3250: 65 6d 20 31 5d 3e 20 7d 20 3b 20 23 20 72 65 76  em 1]> } ; # rev
3260: 6e 72 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78  nr.    method Ex
3270: 70 61 6e 64 53 6f 72 74 20 20 20 7b 67 72 61 70  pandSort   {grap
3280: 68 20 63 61 6e 64 69 64 61 74 65 73 7d 20 7b 0a  h candidates} {.
3290: 09 23 20 63 61 6e 64 69 64 61 74 65 73 20 3d 20  .# candidates = 
32a0: 6c 69 73 74 28 69 74 65 6d 29 2c 20 69 74 65 6d  list(item), item
32b0: 20 3d 20 6c 69 73 74 28 6e 6f 64 65 20 72 65 76   = list(node rev
32c0: 6e 72 29 0a 09 23 20 53 6f 72 74 20 62 79 20 6e  nr)..# Sort by n
32d0: 6f 64 65 20 61 6e 64 20 72 65 76 6e 72 20 2d 3e  ode and revnr ->
32e0: 20 54 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73   Trunk revisions
32f0: 20 63 6f 6d 65 20 66 69 72 73 74 2e 0a 09 72 65   come first...re
3300: 74 75 72 6e 20 5b 6c 73 6f 72 74 20 2d 69 6e 64  turn [lsort -ind
3310: 65 78 20 31 20 2d 64 69 63 74 20 5b 6c 73 6f 72  ex 1 -dict [lsor
3320: 74 20 2d 69 6e 64 65 78 20 30 20 2d 64 69 63 74  t -index 0 -dict
3330: 20 24 63 61 6e 64 69 64 61 74 65 73 5d 5d 0a 20   $candidates]]. 
3340: 20 20 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20     }.    method 
3350: 45 78 70 61 6e 64 31 20 7b 63 68 61 6e 20 64 69  Expand1 {chan di
3360: 72 20 6d 61 78 20 67 72 61 70 68 20 6e 6f 64 65  r max graph node
3370: 7d 20 7b 0a 09 6c 6f 67 20 70 72 6f 67 72 65 73  } {..log progres
3380: 73 20 33 20 66 69 6c 65 20 24 6d 79 69 6d 70 6f  s 3 file $myimpo
3390: 72 74 20 24 6d 61 78 20 3b 20 69 6e 63 72 20 6d  rt $max ; incr m
33a0: 79 69 6d 70 6f 72 74 0a 0a 09 73 65 74 20 72 65  yimport...set re
33b0: 76 6e 72 20 20 20 20 20 20 20 20 20 20 20 5b 24  vnr           [$
33c0: 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24  graph node get $
33d0: 6e 6f 64 65 20 72 65 76 6e 72 5d 0a 09 73 65 74  node revnr]..set
33e0: 20 66 6e 61 6d 65 20 20 20 20 20 20 20 20 20 20   fname          
33f0: 72 24 72 65 76 6e 72 0a 09 73 74 72 75 63 74 3a  r$revnr..struct:
3400: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b 24 67  :list assign [$g
3410: 72 61 70 68 20 6e 6f 64 65 20 67 65 74 20 24 6e  raph node get $n
3420: 6f 64 65 20 74 65 78 74 5d 20 6f 66 66 73 65 74  ode text] offset
3430: 20 6c 65 6e 67 74 68 0a 0a 09 69 66 20 7b 24 6c   length...if {$l
3440: 65 6e 67 74 68 20 3c 20 30 7d 20 7b 0a 09 20 20  ength < 0} {..  
3450: 20 20 73 65 74 20 64 61 74 61 20 22 22 0a 09 7d    set data ""..}
3460: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 65   else {..    see
3470: 6b 20 24 63 68 61 6e 20 24 6f 66 66 73 65 74 20  k $chan $offset 
3480: 73 74 61 72 74 0a 09 20 20 20 20 73 65 74 20 64  start..    set d
3490: 61 74 61 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  ata [string map 
34a0: 7b 40 40 20 40 7d 20 5b 72 65 61 64 20 24 63 68  {@@ @} [read $ch
34b0: 61 6e 20 24 6c 65 6e 67 74 68 5d 5d 0a 09 7d 0a  an $length]]..}.
34c0: 0a 09 69 66 20 7b 21 5b 24 67 72 61 70 68 20 6e  ..if {![$graph n
34d0: 6f 64 65 20 6b 65 79 65 78 69 73 74 73 20 24 6e  ode keyexists $n
34e0: 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 7b  ode __base__]} {
34f0: 0a 09 20 20 20 20 23 20 46 75 6c 6c 20 74 65 78  ..    # Full tex
3500: 74 20 6e 6f 64 65 2e 20 47 65 74 20 74 68 65 20  t node. Get the 
3510: 64 61 74 61 2c 20 64 65 63 6f 64 65 20 69 74 2c  data, decode it,
3520: 20 61 6e 64 20 73 61 76 65 2e 0a 0a 09 20 20 20   and save....   
3530: 20 6c 6f 67 20 77 72 69 74 65 20 38 20 66 69 6c   log write 8 fil
3540: 65 20 7b 45 78 70 61 6e 64 69 6e 67 20 3c 24 72  e {Expanding <$r
3550: 65 76 6e 72 3e 2c 20 66 75 6c 6c 20 74 65 78 74  evnr>, full text
3560: 7d 0a 0a 09 20 20 20 20 66 69 6c 65 75 74 69 6c  }...    fileutil
3570: 3a 3a 77 72 69 74 65 46 69 6c 65 20 2d 74 72 61  ::writeFile -tra
3580: 6e 73 6c 61 74 69 6f 6e 20 62 69 6e 61 72 79 20  nslation binary 
3590: 24 64 69 72 2f 24 66 6e 61 6d 65 20 24 64 61 74  $dir/$fname $dat
35a0: 61 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20  a..} else {..   
35b0: 20 23 20 44 65 6c 74 61 20 6e 6f 64 65 2e 20 5f   # Delta node. _
35c0: 5f 62 61 73 65 5f 5f 20 69 73 20 74 68 65 20 6e  _base__ is the n
35d0: 61 6d 65 20 6f 66 20 74 68 65 20 66 69 6c 65 20  ame of the file 
35e0: 63 6f 6e 74 61 69 6e 69 6e 67 0a 09 20 20 20 20  containing..    
35f0: 23 20 74 68 65 20 62 61 73 65 6c 69 6e 65 2e 20  # the baseline. 
3600: 54 68 65 20 70 61 74 63 68 20 69 73 20 61 74 20  The patch is at 
3610: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 6f  the specified lo
3620: 63 61 74 69 6f 6e 20 6f 66 0a 09 20 20 20 20 23  cation of..    #
3630: 20 74 68 65 20 61 72 63 68 69 76 65 20 66 69 6c   the archive fil
3640: 65 2e 0a 0a 09 20 20 20 20 73 65 74 20 66 62 61  e....    set fba
3650: 73 65 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 20  se [$graph node 
3660: 67 65 74 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65  get $node __base
3670: 5f 5f 5d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  __]..    log wri
3680: 74 65 20 38 20 66 69 6c 65 20 7b 45 78 70 61 6e  te 8 file {Expan
3690: 64 69 6e 67 20 3c 24 72 65 76 6e 72 3e 2c 20 69  ding <$revnr>, i
36a0: 73 20 64 65 6c 74 61 20 6f 66 20 3c 24 66 62 61  s delta of <$fba
36b0: 73 65 3e 7d 0a 0a 09 20 20 20 20 73 65 74 20 62  se>}...    set b
36c0: 61 73 65 20 5b 66 69 6c 65 75 74 69 6c 3a 3a 63  ase [fileutil::c
36d0: 61 74 20 2d 74 72 61 6e 73 6c 61 74 69 6f 6e 20  at -translation 
36e0: 62 69 6e 61 72 79 20 24 64 69 72 2f 24 66 62 61  binary $dir/$fba
36f0: 73 65 5d 0a 0a 09 20 20 20 20 23 20 57 72 69 74  se]...    # Writ
3700: 69 6e 67 20 74 68 65 20 70 61 74 63 68 20 74 6f  ing the patch to
3710: 20 64 69 73 6b 20 69 73 20 6a 75 73 74 20 66 6f   disk is just fo
3720: 72 20 62 65 74 74 65 72 0a 09 20 20 20 20 23 20  r better..    # 
3730: 64 65 62 75 67 67 69 6e 67 2e 20 49 74 20 69 73  debugging. It is
3740: 20 6e 6f 74 20 75 73 65 64 20 6f 74 68 65 72 77   not used otherw
3750: 69 73 65 2e 0a 09 20 20 20 20 66 69 6c 65 75 74  ise...    fileut
3760: 69 6c 3a 3a 77 72 69 74 65 46 69 6c 65 20 24 64  il::writeFile $d
3770: 69 72 2f 72 70 61 74 63 68 20 24 64 61 74 61 0a  ir/rpatch $data.
3780: 09 20 20 20 20 66 69 6c 65 75 74 69 6c 3a 3a 77  .    fileutil::w
3790: 72 69 74 65 46 69 6c 65 20 2d 74 72 61 6e 73 6c  riteFile -transl
37a0: 61 74 69 6f 6e 20 62 69 6e 61 72 79 20 24 64 69  ation binary $di
37b0: 72 2f 24 66 6e 61 6d 65 20 5c 0a 09 09 5b 41 70  r/$fname \...[Ap
37c0: 70 6c 79 20 24 62 61 73 65 20 24 64 61 74 61 5d  ply $base $data]
37d0: 0a 09 7d 0a 0a 09 23 20 50 6f 73 74 20 74 6f 20  ..}...# Post to 
37e0: 61 6c 6c 20 73 75 63 63 65 73 73 6f 72 73 20 74  all successors t
37f0: 68 61 74 20 74 68 65 20 6a 75 73 74 20 67 65 6e  hat the just gen
3800: 65 72 61 74 65 64 20 66 69 6c 65 20 69 73 20 74  erated file is t
3810: 68 65 69 72 0a 09 23 20 62 61 73 65 6c 69 6e 65  heir..# baseline
3820: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 6f 75 74 20  ....foreach out 
3830: 5b 24 67 72 61 70 68 20 6e 6f 64 65 73 20 2d 6f  [$graph nodes -o
3840: 75 74 20 24 6e 6f 64 65 5d 20 7b 0a 09 20 20 20  ut $node] {..   
3850: 20 24 67 72 61 70 68 20 6e 6f 64 65 20 73 65 74   $graph node set
3860: 20 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 20 24   $out __base__ $
3870: 66 6e 61 6d 65 0a 09 7d 0a 09 72 65 74 75 72 6e  fname..}..return
3880: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
3890: 20 41 70 70 6c 79 20 7b 62 61 73 65 20 64 65 6c   Apply {base del
38a0: 74 61 7d 20 7b 0a 09 23 20 62 61 73 65 20 20 3d  ta} {..# base  =
38b0: 20 62 61 73 65 20 74 65 78 74 2e 0a 09 23 20 64   base text...# d
38c0: 65 6c 74 61 20 3d 20 64 65 6c 74 61 20 69 6e 20  elta = delta in 
38d0: 72 63 73 20 66 6f 72 6d 61 74 2e 0a 09 23 0a 09  rcs format...#..
38e0: 23 20 42 6f 74 68 20 73 74 72 69 6e 67 73 20 61  # Both strings a
38f0: 72 65 20 75 6e 65 6e 63 6f 64 65 64 2c 20 69 2e  re unencoded, i.
3900: 65 2e 20 74 68 69 6e 67 73 20 6c 69 6b 65 20 40  e. things like @
3910: 40 2c 20 65 74 63 2e 20 68 61 76 65 0a 09 23 20  @, etc. have..# 
3920: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 72 65 70  already been rep
3930: 6c 61 63 65 64 20 77 69 74 68 20 74 68 65 69 72  laced with their
3940: 20 70 72 6f 70 65 72 20 63 68 61 72 61 63 74 65   proper characte
3950: 72 73 2e 0a 09 23 0a 09 23 20 52 65 74 75 72 6e  rs...#..# Return
3960: 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 70 61   value is the pa
3970: 74 63 68 65 64 20 74 65 78 74 2e 0a 0a 09 73 65  tched text....se
3980: 74 20 62 61 73 65 20 5b 73 70 6c 69 74 20 24 62  t base [split $b
3990: 61 73 65 20 5c 6e 5d 0a 09 73 65 74 20 62 6c 65  ase \n]..set ble
39a0: 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 62 61 73 65  n [llength $base
39b0: 5d 0a 09 73 65 74 20 6f 6f 66 66 20 30 0a 09 73  ]..set ooff 0..s
39c0: 65 74 20 72 65 73 20 22 22 0a 0a 09 73 65 74 20  et res ""...set 
39d0: 6c 69 6e 65 73 20 20 5b 73 70 6c 69 74 20 24 64  lines  [split $d
39e0: 65 6c 74 61 20 5c 6e 5d 0a 09 73 65 74 20 6e 6c  elta \n]..set nl
39f0: 69 6e 65 73 20 5b 6c 6c 65 6e 67 74 68 20 24 6c  ines [llength $l
3a00: 69 6e 65 73 5d 0a 0a 09 6c 6f 67 20 77 72 69 74  ines]...log writ
3a10: 65 20 31 31 20 66 69 6c 65 20 7b 42 61 73 65 20  e 11 file {Base 
3a20: 20 6c 69 6e 65 73 20 3d 20 24 62 6c 65 6e 7d 0a   lines = $blen}.
3a30: 09 6c 6f 67 20 77 72 69 74 65 20 31 31 20 66 69  .log write 11 fi
3a40: 6c 65 20 7b 44 65 6c 74 61 20 6c 69 6e 65 73 20  le {Delta lines 
3a50: 3d 20 24 6e 6c 69 6e 65 73 7d 0a 0a 09 66 6f 72  = $nlines}...for
3a60: 20 7b 73 65 74 20 69 20 30 7d 20 7b 24 69 20 3c   {set i 0} {$i <
3a70: 20 24 6e 6c 69 6e 65 73 7d 20 7b 7d 20 7b 0a 09   $nlines} {} {..
3a80: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31      log write 11
3a90: 20 66 69 6c 65 20 7b 20 20 20 20 40 20 24 69 20   file {    @ $i 
3aa0: 3d 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73  = [lindex $lines
3ab0: 20 24 69 5d 7d 0a 09 20 20 20 20 6c 6f 67 20 77   $i]}..    log w
3ac0: 72 69 74 65 20 31 31 20 66 69 6c 65 20 7b 20 6f  rite 11 file { o
3ad0: 6f 66 66 20 24 6f 6f 66 66 7d 0a 0a 09 20 20 20  off $ooff}...   
3ae0: 20 69 66 20 7b 21 5b 72 65 67 65 78 70 20 7b 5e   if {![regexp {^
3af0: 28 5b 61 64 5d 29 28 5c 64 2b 29 5c 73 28 5c 64  ([ad])(\d+)\s(\d
3b00: 2b 29 24 7d 20 5b 6c 69 6e 64 65 78 20 24 6c 69  +)$} [lindex $li
3b10: 6e 65 73 20 24 69 5d 20 2d 3e 20 63 6d 64 20 73  nes $i] -> cmd s
3b20: 6c 20 63 6e 5d 7d 20 7b 0a 09 09 74 72 6f 75 62  l cn]} {...troub
3b30: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 42 61 64  le internal "Bad
3b40: 20 65 64 20 63 6f 6d 6d 61 6e 64 20 27 5b 6c 69   ed command '[li
3b50: 6e 64 65 78 20 24 6c 69 6e 65 73 20 24 69 5d 27  ndex $lines $i]'
3b60: 22 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 6c  "..    }...    l
3b70: 6f 67 20 77 72 69 74 65 20 31 31 20 66 69 6c 65  og write 11 file
3b80: 20 7b 20 20 63 6d 64 20 24 63 6d 64 7d 0a 09 20   {  cmd $cmd}.. 
3b90: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 31 20     log write 11 
3ba0: 66 69 6c 65 20 7b 20 20 20 73 6c 20 24 73 6c 7d  file {   sl $sl}
3bb0: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
3bc0: 31 31 20 66 69 6c 65 20 7b 20 20 20 63 6e 20 24  11 file {   cn $
3bd0: 63 6e 7d 0a 0a 09 20 20 20 20 69 6e 63 72 20 69  cn}...    incr i
3be0: 0a 09 20 20 20 20 73 65 74 20 65 6c 20 5b 65 78  ..    set el [ex
3bf0: 70 72 20 7b 24 73 6c 20 2b 20 24 63 6e 7d 5d 0a  pr {$sl + $cn}].
3c00: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
3c10: 31 31 20 66 69 6c 65 20 7b 20 20 20 65 6c 20 24  11 file {   el $
3c20: 65 6c 7d 0a 0a 09 20 20 20 20 73 77 69 74 63 68  el}...    switch
3c30: 20 2d 65 78 61 63 74 20 2d 2d 20 24 63 6d 64 20   -exact -- $cmd 
3c40: 7b 0a 09 09 64 20 7b 0a 09 09 20 20 20 20 69 6e  {...d {...    in
3c50: 63 72 20 73 6c 20 2d 31 0a 09 09 20 20 20 20 69  cr sl -1...    i
3c60: 6e 63 72 20 65 6c 20 2d 31 0a 09 09 20 20 20 20  ncr el -1...    
3c70: 69 66 20 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 7d  if {$sl < $ooff}
3c80: 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72   { trouble inter
3c90: 6e 61 6c 20 7b 44 65 6c 65 74 69 6f 6e 20 62 65  nal {Deletion be
3ca0: 66 6f 72 65 20 6c 61 73 74 20 65 64 69 74 7d 20  fore last edit} 
3cb0: 7d 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c 20  }...    if {$sl 
3cc0: 3e 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62  > $blen} { troub
3cd0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 7b 44 65 6c  le internal {Del
3ce0: 65 74 69 6f 6e 20 70 61 73 74 20 66 69 6c 65 20  etion past file 
3cf0: 65 6e 64 7d 20 7d 0a 09 09 20 20 20 20 69 66 20  end} }...    if 
3d00: 7b 24 65 6c 20 3e 20 24 62 6c 65 6e 7d 20 7b 20  {$el > $blen} { 
3d10: 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c  trouble internal
3d20: 20 7b 44 65 6c 65 74 69 6f 6e 20 62 65 79 6f 6e   {Deletion beyon
3d30: 64 20 66 69 6c 65 20 65 6e 64 7d 20 7d 0a 09 09  d file end} }...
3d40: 20 20 20 20 66 6f 72 65 61 63 68 20 78 20 5b 6c      foreach x [l
3d50: 72 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f 66  range $base $oof
3d60: 66 20 24 73 6c 5d 20 7b 20 6c 61 70 70 65 6e 64  f $sl] { lappend
3d70: 20 72 65 73 20 24 78 20 7d 0a 09 09 20 20 20 20   res $x }...    
3d80: 73 65 74 20 20 6f 6f 66 66 20 24 65 6c 0a 09 09  set  ooff $el...
3d90: 7d 0a 09 09 61 20 7b 0a 09 09 20 20 20 20 69 66  }...a {...    if
3da0: 20 7b 24 73 6c 20 3c 20 24 6f 6f 66 66 7d 20 7b   {$sl < $ooff} {
3db0: 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61   trouble interna
3dc0: 6c 20 7b 49 6e 73 65 72 74 20 62 65 66 6f 72 65  l {Insert before
3dd0: 20 6c 61 73 74 20 65 64 69 74 7d 20 7d 0a 09 09   last edit} }...
3de0: 20 20 20 20 69 66 20 7b 24 73 6c 20 3e 20 24 62      if {$sl > $b
3df0: 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69  len} { trouble i
3e00: 6e 74 65 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20  nternal {Insert 
3e10: 70 61 73 74 20 66 69 6c 65 20 65 6e 64 7d 20 7d  past file end} }
3e20: 0a 0a 09 09 20 20 20 20 66 6f 72 65 61 63 68 20  ....    foreach 
3e30: 78 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65 20  x [lrange $base 
3e40: 24 6f 6f 66 66 20 24 73 6c 5d 20 20 20 20 20 20  $ooff $sl]      
3e50: 20 20 20 20 20 20 20 7b 20 6c 61 70 70 65 6e 64         { lappend
3e60: 20 72 65 73 20 24 78 20 7d 0a 09 09 20 20 20 20   res $x }...    
3e70: 66 6f 72 65 61 63 68 20 78 20 5b 6c 72 61 6e 67  foreach x [lrang
3e80: 65 20 24 6c 69 6e 65 73 20 24 69 20 5b 65 78 70  e $lines $i [exp
3e90: 72 20 7b 24 69 20 2b 20 24 63 6e 7d 5d 5d 20 7b  r {$i + $cn}]] {
3ea0: 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24 78 20   lappend res $x 
3eb0: 7d 0a 09 09 20 20 20 20 73 65 74 20 6f 6f 66 66  }...    set ooff
3ec0: 20 24 73 6c 0a 09 09 20 20 20 20 69 6e 63 72 20   $sl...    incr 
3ed0: 69 20 24 63 6e 0a 09 09 7d 0a 09 20 20 20 20 7d  i $cn...}..    }
3ee0: 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20 78 20 5b  ..}..foreach x [
3ef0: 6c 72 61 6e 67 65 20 24 62 61 73 65 20 24 6f 6f  lrange $base $oo
3f00: 66 66 20 65 6e 64 5d 20 7b 20 6c 61 70 70 65 6e  ff end] { lappen
3f10: 64 20 72 65 73 20 24 78 20 7d 0a 09 72 65 74 75  d res $x }..retu
3f20: 72 6e 20 5b 6a 6f 69 6e 20 24 72 65 73 20 5c 6e  rn [join $res \n
3f30: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  ].    }..    met
3f40: 68 6f 64 20 45 78 70 61 6e 64 32 20 7b 67 72 61  hod Expand2 {gra
3f50: 70 68 20 6e 6f 64 65 7d 20 7b 0a 09 73 65 74 20  ph node} {..set 
3f60: 72 65 76 6e 72 20 5b 24 67 72 61 70 68 20 6e 6f  revnr [$graph no
3f70: 64 65 20 67 65 74 20 24 6e 6f 64 65 20 72 65 76  de get $node rev
3f80: 6e 72 5d 0a 0a 09 23 20 46 69 72 73 74 20 69 6d  nr]...# First im
3f90: 70 6f 72 74 20 74 68 65 20 66 69 6c 65 2e 0a 09  port the file...
3fa0: 6c 61 70 70 65 6e 64 20 6d 79 69 6d 70 6f 72 74  lappend myimport
3fb0: 20 5b 6c 69 73 74 20 41 20 72 24 72 65 76 6e 72   [list A r$revnr
3fc0: 20 7b 7d 5d 0a 0a 09 69 66 20 7b 5b 24 67 72 61   {}]...if {[$gra
3fd0: 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 69 73 74  ph node keyexist
3fe0: 73 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f  s $node __base__
3ff0: 5d 7d 20 7b 0a 09 20 20 20 20 23 20 44 65 6c 74  ]} {..    # Delt
4000: 61 20 6e 6f 64 65 2e 20 5f 5f 62 61 73 65 5f 5f  a node. __base__
4010: 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20   is the name of 
4020: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
4030: 69 6e 67 0a 09 20 20 20 20 23 20 74 68 65 20 62  ing..    # the b
4040: 61 73 65 6c 69 6e 65 2e 20 47 65 6e 65 72 61 74  aseline. Generat
4050: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f  e instruction to
4060: 20 6d 61 6b 65 20 74 68 65 20 64 65 6c 74 61 20   make the delta 
4070: 61 73 0a 09 20 20 20 20 23 20 77 65 6c 6c 2e 0a  as..    # well..
4080: 0a 09 20 20 20 20 73 65 74 20 66 62 61 73 65 20  ..    set fbase 
4090: 5b 24 67 72 61 70 68 20 6e 6f 64 65 20 67 65 74  [$graph node get
40a0: 20 24 6e 6f 64 65 20 5f 5f 62 61 73 65 5f 5f 5d   $node __base__]
40b0: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79  ..    lappend my
40c0: 69 6d 70 6f 72 74 20 5b 6c 69 73 74 20 44 20 72  import [list D r
40d0: 24 72 65 76 6e 72 20 72 24 66 62 61 73 65 5d 0a  $revnr r$fbase].
40e0: 09 7d 0a 0a 09 23 20 50 6f 73 74 20 74 6f 20 61  .}...# Post to a
40f0: 6c 6c 20 73 75 63 63 65 73 73 6f 72 73 20 74 68  ll successors th
4100: 61 74 20 74 68 65 20 6a 75 73 74 20 67 65 6e 65  at the just gene
4110: 72 61 74 65 64 20 66 69 6c 65 20 69 73 20 74 68  rated file is th
4120: 65 69 72 0a 09 23 20 62 61 73 65 6c 69 6e 65 2e  eir..# baseline.
4130: 20 45 78 63 65 70 74 69 6f 6e 3a 20 54 68 6f 73   Exception: Thos
4140: 65 20 77 68 69 63 68 20 61 76 65 20 61 6c 72 65  e which ave alre
4150: 61 64 79 20 61 20 62 61 73 65 6c 69 6e 65 20 73  ady a baseline s
4160: 65 74 2e 0a 09 23 20 54 6f 67 65 74 68 65 72 20  et...# Together 
4170: 77 69 74 68 20 74 68 65 20 73 6f 72 74 69 6e 67  with the sorting
4180: 20 6f 66 20 74 72 75 6e 6b 20 72 65 76 69 73 69   of trunk revisi
4190: 6f 6e 73 20 66 69 72 73 74 20 74 68 65 20 74 72  ons first the tr
41a0: 75 6e 6b 0a 09 23 20 73 68 6f 75 6c 64 20 6f 6e  unk..# should on
41b0: 65 20 75 6e 69 6e 74 65 72 75 70 74 65 64 20 6c  e uninterupted l
41c0: 69 6e 65 2c 20 77 69 74 68 20 62 72 61 6e 63 68  ine, with branch
41d0: 20 72 6f 6f 74 73 20 5f 6e 6f 74 5f 20 64 65 6c   roots _not_ del
41e0: 74 61 0a 09 23 20 63 6f 6d 70 72 65 73 73 65 64  ta..# compressed
41f0: 20 70 65 72 20 74 68 65 69 72 20 62 72 61 6e 63   per their branc
4200: 68 65 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 6f  hes....foreach o
4210: 75 74 20 5b 24 67 72 61 70 68 20 6e 6f 64 65 73  ut [$graph nodes
4220: 20 2d 6f 75 74 20 24 6e 6f 64 65 5d 20 7b 0a 09   -out $node] {..
4230: 20 20 20 20 69 66 20 7b 5b 24 67 72 61 70 68 20      if {[$graph 
4240: 6e 6f 64 65 20 6b 65 79 65 78 69 73 74 73 20 24  node keyexists $
4250: 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 5d 7d 20 63  out __base__]} c
4260: 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 24 67 72  ontinue..    $gr
4270: 61 70 68 20 6e 6f 64 65 20 73 65 74 20 24 6f 75  aph node set $ou
4280: 74 20 5f 5f 62 61 73 65 5f 5f 20 24 72 65 76 6e  t __base__ $revn
4290: 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  r..}..return.   
42a0: 20 7d 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65   }..    variable
42b0: 20 6d 79 69 6d 70 6f 72 74 0a 0a 20 20 20 20 23   myimport..    #
42c0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
42d0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
42e0: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 74  ######.    ## St
42f0: 61 74 65 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  ate..    variabl
4300: 65 20 6d 79 69 64 20 20 20 20 20 20 20 20 20 20  e myid          
4310: 20 20 20 20 7b 7d 20 3b 20 23 20 46 69 6c 65 20      {} ; # File 
4320: 69 64 20 69 6e 20 74 68 65 20 70 65 72 73 69 73  id in the persis
4330: 74 65 6e 74 20 73 74 61 74 65 2e 0a 20 20 20 20  tent state..    
4340: 76 61 72 69 61 62 6c 65 20 6d 79 70 61 74 68 20  variable mypath 
4350: 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20             {} ; 
4360: 23 20 50 61 74 68 20 6f 66 20 74 68 65 20 66 69  # Path of the fi
4370: 6c 65 27 73 20 72 63 73 20 61 72 63 68 69 76 65  le's rcs archive
4380: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4390: 79 75 73 72 70 61 74 68 20 20 20 20 20 20 20 20  yusrpath        
43a0: 20 7b 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20   {} ; # Path of 
43b0: 74 68 65 20 66 69 6c 65 20 61 73 20 73 65 65 6e  the file as seen
43c0: 20 62 79 20 75 73 65 72 73 2e 0a 20 20 20 20 76   by users..    v
43d0: 61 72 69 61 62 6c 65 20 6d 79 65 78 65 63 75 74  ariable myexecut
43e0: 61 62 6c 65 20 20 20 20 20 20 30 20 20 3b 20 23  able      0  ; #
43f0: 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 20 27 66   Boolean flag 'f
4400: 69 6c 65 20 65 78 65 63 75 74 61 62 6c 65 27 2e  ile executable'.
4410: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
4420: 70 72 6f 6a 65 63 74 20 20 20 20 20 20 20 20 20  project         
4430: 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65  {} ; # Reference
4440: 20 74 6f 20 74 68 65 20 70 72 6f 6a 65 63 74 20   to the project 
4450: 6f 62 6a 65 63 74 0a 09 09 09 09 20 20 20 20 23  object.....    #
4460: 20 74 68 65 20 66 69 6c 65 20 62 65 6c 6f 6e 67   the file belong
4470: 73 20 74 6f 2e 0a 20 20 20 20 76 61 72 69 61 62  s to..    variab
4480: 6c 65 20 6d 79 72 65 76 20 2d 61 72 72 61 79 20  le myrev -array 
4490: 20 20 20 20 20 7b 7d 20 3b 20 23 20 4d 61 70 73       {} ; # Maps
44a0: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72   revision number
44b0: 20 74 6f 20 74 68 65 0a 09 09 09 09 20 20 20 20   to the.....    
44c0: 23 20 61 73 73 6f 63 69 61 74 65 64 20 72 65 76  # associated rev
44d0: 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2e 0a 20 20  ision object..  
44e0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65 76    variable myrev
44f0: 69 73 69 6f 6e 73 20 20 20 20 20 20 20 7b 7d 20  isions       {} 
4500: 3b 20 23 20 53 61 6d 65 20 61 73 20 6d 79 72 65  ; # Same as myre
4510: 76 2c 20 62 75 74 20 61 20 6c 69 73 74 2c 0a 09  v, but a list,..
4520: 09 09 09 20 20 20 20 23 20 67 69 76 69 6e 67 20  ...    # giving 
4530: 75 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 0a  us the order of.
4540: 09 09 09 09 20 20 20 20 23 20 72 65 76 69 73 69  ....    # revisi
4550: 6f 6e 73 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  ons..    variabl
4560: 65 20 6d 79 61 69 64 20 20 20 20 20 20 2d 61 72  e myaid      -ar
4570: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 72  ray {} ; # Map r
4580: 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20  evision numbers 
4590: 74 6f 20 74 68 65 20 69 64 0a 09 09 09 09 20 20  to the id.....  
45a0: 20 20 23 20 6f 66 20 74 68 65 20 61 75 74 68 6f    # of the autho
45b0: 72 20 77 68 6f 20 63 6f 6d 6d 69 74 74 65 64 0a  r who committed.
45c0: 09 09 09 09 20 20 20 20 23 20 69 74 2e 20 54 68  ....    # it. Th
45d0: 69 73 20 69 73 20 6c 61 74 65 72 20 61 67 67 72  is is later aggr
45e0: 65 67 61 74 65 64 0a 09 09 09 09 20 20 20 20 23  egated.....    #
45f0: 20 77 69 74 68 20 63 6f 6d 6d 69 74 20 6d 65 73   with commit mes
4600: 73 61 67 65 2c 20 62 72 61 6e 63 68 20 6e 61 6d  sage, branch nam
4610: 65 0a 09 09 09 09 20 20 20 20 23 20 61 6e 64 20  e.....    # and 
4620: 70 72 6f 6a 65 63 74 20 69 64 20 66 6f 72 20 61  project id for a
4630: 20 6d 65 74 61 20 69 64 2e 0a 20 20 20 20 76 61   meta id..    va
4640: 72 69 61 62 6c 65 20 6d 79 68 65 61 64 72 65 76  riable myheadrev
4650: 6e 72 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  nr       {} ; # 
4660: 48 65 61 64 20 72 65 76 69 73 69 6f 6e 20 28 72  Head revision (r
4670: 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 29 0a  evision number).
4680: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70      variable myp
4690: 72 69 6e 63 69 70 61 6c 20 20 20 20 20 20 20 7b  rincipal       {
46a0: 7d 20 3b 20 23 20 50 72 69 6e 63 69 70 61 6c 20  } ; # Principal 
46b0: 62 72 61 6e 63 68 20 28 62 72 61 6e 63 68 20 6e  branch (branch n
46c0: 75 6d 62 65 72 29 2e 0a 09 09 09 09 20 20 20 20  umber)......    
46d0: 23 20 43 6f 6e 74 72 61 72 79 20 74 6f 20 74 68  # Contrary to th
46e0: 65 20 6e 61 6d 65 20 74 68 69 73 20 69 73 20 74  e name this is t
46f0: 68 65 0a 09 09 09 09 20 20 20 20 23 20 64 65 66  he.....    # def
4700: 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a 20 20 20  ault branch..   
4710: 20 76 61 72 69 61 62 6c 65 20 6d 79 64 65 70 65   variable mydepe
4720: 6e 64 65 6e 63 69 65 73 20 20 20 20 7b 7d 20 3b  ndencies    {} ;
4730: 20 23 20 44 69 63 74 69 6f 6e 61 72 79 20 70 61   # Dictionary pa
4740: 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64 2c 0a 09  rent -> child,..
4750: 09 09 09 20 20 20 20 23 20 72 65 63 6f 72 64 73  ...    # records
4760: 20 70 72 69 6d 61 72 79 20 64 65 70 65 6e 64 65   primary depende
4770: 6e 63 69 65 73 2e 0a 20 20 20 20 76 61 72 69 61  ncies..    varia
4780: 62 6c 65 20 6d 79 69 6d 70 6f 72 74 65 64 20 20  ble myimported  
4790: 20 20 20 20 20 20 30 20 20 3b 20 23 20 42 6f 6f        0  ; # Boo
47a0: 6c 65 61 6e 20 66 6c 61 67 2e 20 53 65 74 20 69  lean flag. Set i
47b0: 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 0a 09 09  f and only if...
47c0: 09 09 20 20 20 20 23 20 72 65 76 20 31 2e 31 20  ..    # rev 1.1 
47d0: 6f 66 20 74 68 65 20 66 69 6c 65 20 73 65 65 6d  of the file seem
47e0: 69 6e 67 6c 79 0a 09 09 09 09 20 20 20 20 23 20  ingly.....    # 
47f0: 77 61 73 20 69 6d 70 6f 72 74 65 64 20 69 6e 73  was imported ins
4800: 74 65 61 64 20 6f 66 20 61 64 64 65 64 0a 09 09  tead of added...
4810: 09 09 20 20 20 20 23 20 6e 6f 72 6d 61 6c 6c 79  ..    # normally
4820: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4830: 79 72 6f 6f 74 20 20 20 20 20 20 20 20 20 20 20  yroot           
4840: 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63   {} ; # Referenc
4850: 65 20 74 6f 20 74 68 65 20 72 65 76 69 73 69 6f  e to the revisio
4860: 6e 20 6f 62 6a 65 63 74 0a 09 09 09 09 20 20 20  n object.....   
4870: 20 23 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 72   # holding the r
4880: 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 20 20 49  oot revision.  I
4890: 74 73 0a 09 09 09 09 20 20 20 20 23 20 6e 75 6d  ts.....    # num
48a0: 62 65 72 20 75 73 75 61 6c 6c 79 20 69 73 20 27  ber usually is '
48b0: 31 2e 31 27 2e 20 43 61 6e 20 62 65 0a 09 09 09  1.1'. Can be....
48c0: 09 20 20 20 20 23 20 61 20 64 69 66 66 65 72 65  .    # a differe
48d0: 6e 74 20 6e 75 6d 62 65 72 2c 20 62 65 63 61 75  nt number, becau
48e0: 73 65 20 6f 66 0a 09 09 09 09 20 20 20 20 23 20  se of.....    # 
48f0: 67 61 70 73 20 63 72 65 61 74 65 64 20 76 69 61  gaps created via
4900: 20 27 63 76 73 61 64 6d 69 6e 20 2d 6f 27 2e 0a   'cvsadmin -o'..
4910: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62      variable myb
4920: 72 61 6e 63 68 65 73 20 2d 61 72 72 61 79 20 7b  ranches -array {
4930: 7d 20 3b 20 23 20 4d 61 70 73 20 62 72 61 6e 63  } ; # Maps branc
4940: 68 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20  h number to the 
4950: 73 79 6d 62 6f 6c 0a 09 09 09 09 20 20 20 20 23  symbol.....    #
4960: 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 69 6e 67   object handling
4970: 20 74 68 65 20 62 72 61 6e 63 68 2e 0a 20 20 20   the branch..   
4980: 20 76 61 72 69 61 62 6c 65 20 6d 79 74 61 67 73   variable mytags
4990: 20 20 20 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b       -array {} ;
49a0: 20 23 20 4d 61 70 73 20 72 65 76 69 73 69 6f 6e   # Maps revision
49b0: 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6c   number to the l
49c0: 69 73 74 0a 09 09 09 09 20 20 20 20 23 20 6f 66  ist.....    # of
49d0: 20 73 79 6d 62 6f 6c 20 6f 62 6a 65 63 74 73 20   symbol objects 
49e0: 66 6f 72 20 74 68 65 20 74 61 67 73 0a 09 09 09  for the tags....
49f0: 09 20 20 20 20 23 20 61 73 73 6f 63 69 61 74 65  .    # associate
4a00: 64 20 77 69 74 68 20 74 68 65 20 72 65 76 69 73  d with the revis
4a10: 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  ion..    variabl
4a20: 65 20 6d 79 73 79 6d 62 6f 6c 73 20 20 20 20 20  e mysymbols     
4a30: 20 20 20 20 7b 7d 20 3b 20 23 20 53 65 74 20 6f      {} ; # Set o
4a40: 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 6e 61 6d  f the symbol nam
4a50: 65 73 20 66 6f 75 6e 64 20 69 6e 0a 09 09 09 09  es found in.....
4a60: 20 20 20 20 23 20 74 68 69 73 20 66 69 6c 65 2e      # this file.
4a70: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4a80: 79 62 72 61 6e 63 68 63 6e 74 20 30 20 3b 20 23  ybranchcnt 0 ; #
4a90: 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 62 72 61   Counter for bra
4aa0: 6e 63 68 65 73 2c 20 74 6f 20 72 65 63 6f 72 64  nches, to record
4ab0: 20 74 68 65 69 72 0a 09 09 09 20 20 20 20 20 23   their....     #
4ac0: 20 6f 72 64 65 72 20 6f 66 20 64 65 66 69 6e 69   order of defini
4ad0: 74 69 6f 6e 2e 20 54 68 69 73 20 61 6c 73 6f 20  tion. This also 
4ae0: 64 65 66 69 6e 65 73 0a 09 09 09 20 20 20 20 20  defines....     
4af0: 23 20 74 68 65 69 72 20 6f 72 64 65 72 20 6f 66  # their order of
4b00: 20 63 72 65 61 74 69 6f 6e 2c 20 77 68 69 63 68   creation, which
4b10: 20 69 73 20 74 68 65 0a 09 09 09 20 20 20 20 20   is the....     
4b20: 23 20 72 65 76 65 72 73 65 20 6f 66 20 64 65 66  # reverse of def
4b30: 69 6e 69 74 69 6f 6e 2e 20 20 49 2e 65 2e 20 61  inition.  I.e. a
4b40: 20 73 6d 61 6c 6c 65 72 0a 09 09 09 20 20 20 20   smaller....    
4b50: 20 23 20 6e 75 6d 62 65 72 20 6d 65 61 6e 73 20   # number means 
4b60: 27 44 65 66 69 6e 65 64 20 65 61 72 6c 69 65 72  'Defined earlier
4b70: 27 2c 20 6d 65 61 6e 73 0a 09 09 09 20 20 20 20  ', means....    
4b80: 20 23 20 27 43 72 65 61 74 65 64 20 6c 61 74 65   # 'Created late
4b90: 72 27 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  r'...    variabl
4ba0: 65 20 6d 79 74 72 75 6e 6b 20 7b 7d 20 3b 20 23  e mytrunk {} ; #
4bb0: 20 44 69 72 65 63 74 20 72 65 66 65 72 65 6e 63   Direct referenc
4bc0: 65 20 74 6f 20 6d 79 70 72 6f 6a 65 63 74 20 2d  e to myproject -
4bd0: 3e 20 74 72 75 6e 6b 2e 0a 20 20 20 20 76 61 72  > trunk..    var
4be0: 69 61 62 6c 65 20 6d 79 72 6f 6f 74 73 20 7b 7d  iable myroots {}
4bf0: 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 72 6f 6f   ; # List of roo
4c00: 74 73 20 69 6e 20 74 68 65 20 66 6f 72 65 73 74  ts in the forest
4c10: 20 6f 66 0a 09 09 09 20 20 23 20 6c 6f 64 27 73   of....  # lod's
4c20: 2e 20 4f 62 6a 65 63 74 20 72 65 66 65 72 65 6e  . Object referen
4c30: 63 65 73 20 74 6f 20 72 65 76 69 73 69 6f 6e 73  ces to revisions
4c40: 20 61 6e 64 0a 09 09 09 20 20 23 20 62 72 61 6e   and....  # bran
4c50: 63 68 65 73 2e 20 54 68 65 20 6c 61 74 74 65 72  ches. The latter
4c60: 20 63 61 6e 20 61 70 70 65 61 72 20 77 68 65 6e   can appear when
4c70: 20 74 68 65 79 0a 09 09 09 20 20 23 20 61 72 65   they....  # are
4c80: 20 73 65 76 65 72 65 64 20 66 72 6f 6d 20 74 68   severed from th
4c90: 65 69 72 20 70 61 72 65 6e 74 2e 0a 0a 20 20 20  eir parent...   
4ca0: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 6c 6f 62   variable myblob
4cb0: 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63   {} ; # Referenc
4cc0: 65 20 74 6f 20 74 68 65 20 6f 62 6a 65 63 74 20  e to the object 
4cd0: 6d 61 6e 61 67 69 6e 67 20 74 68 65 20 62 6c 6f  managing the blo
4ce0: 62 0a 09 09 09 20 23 20 69 6e 66 6f 72 6d 61 74  b.... # informat
4cf0: 69 6f 6e 20 28 74 65 78 74 72 61 6e 67 65 20 6f  ion (textrange o
4d00: 66 20 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64  f revisions, and
4d10: 0a 09 09 09 20 23 20 64 65 6c 74 61 20 64 65 70  .... # delta dep
4d20: 65 6e 64 65 6e 63 69 65 73 29 20 6f 66 20 74 68  endencies) of th
4d30: 69 73 20 66 69 6c 65 2e 0a 0a 20 20 20 20 23 20  is file...    # 
4d40: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
4d50: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
4d60: 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74  #####.    ## Int
4d70: 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20  ernal methods.. 
4d80: 20 20 20 6d 65 74 68 6f 64 20 52 65 63 6f 72 64     method Record
4d90: 42 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 7b 62  BranchCommits {b
4da0: 72 61 6e 63 68 65 73 7d 20 7b 0a 09 66 6f 72 65  ranches} {..fore
4db0: 61 63 68 20 62 72 61 6e 63 68 72 65 76 6e 72 20  ach branchrevnr 
4dc0: 24 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20  $branches {..   
4dd0: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0a 09 09   if {[catch {...
4de0: 73 65 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c  set branch [$sel
4df0: 66 20 52 65 76 32 42 72 61 6e 63 68 20 24 62 72  f Rev2Branch $br
4e00: 61 6e 63 68 72 65 76 6e 72 5d 0a 09 20 20 20 20  anchrevnr]..    
4e10: 7d 5d 7d 20 7b 0a 09 09 73 65 74 20 62 72 61 6e  }]} {...set bran
4e20: 63 68 20 5b 24 73 65 6c 66 20 41 64 64 55 6e 6c  ch [$self AddUnl
4e30: 61 62 65 6c 65 64 42 72 61 6e 63 68 20 5b 72 65  abeledBranch [re
4e40: 76 20 32 62 72 61 6e 63 68 6e 72 20 24 62 72 61  v 2branchnr $bra
4e50: 6e 63 68 72 65 76 6e 72 5d 5d 0a 09 20 20 20 20  nchrevnr]]..    
4e60: 7d 0a 0a 09 20 20 20 20 23 20 52 65 63 6f 72 64  }...    # Record
4e70: 20 74 68 65 20 63 6f 6d 6d 69 74 2c 20 6a 75 73   the commit, jus
4e80: 74 20 61 73 20 72 65 76 69 73 69 6f 6e 20 6e 75  t as revision nu
4e90: 6d 62 65 72 20 66 6f 72 0a 09 20 20 20 20 23 20  mber for..    # 
4ea0: 6e 6f 77 2e 20 50 72 6f 63 65 73 42 72 61 6e 63  now. ProcesBranc
4eb0: 68 44 65 70 65 6e 64 65 6e 63 69 65 73 20 77 69  hDependencies wi
4ec0: 6c 6c 20 65 78 74 65 6e 64 20 74 68 61 74 20 69  ll extend that i
4ed0: 74 6f 20 61 0a 09 20 20 20 20 23 20 70 72 6f 70  to a..    # prop
4ee0: 65 72 20 6f 62 6a 65 63 74 20 72 65 66 65 72 65  er object refere
4ef0: 6e 63 65 2e 0a 0a 09 20 20 20 20 24 62 72 61 6e  nce....    $bran
4f00: 63 68 20 73 65 74 63 68 69 6c 64 72 65 76 6e 72  ch setchildrevnr
4f10: 20 24 62 72 61 6e 63 68 72 65 76 6e 72 0a 09 7d   $branchrevnr..}
4f20: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
4f30: 20 20 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42      method Rev2B
4f40: 72 61 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a  ranch {revnr} {.
4f50: 20 20 20 20 20 20 20 20 69 6e 74 65 67 72 69 74          integrit
4f60: 79 20 61 73 73 65 72 74 20 7b 21 5b 72 65 76 20  y assert {![rev 
4f70: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65  istrunkrevnr $re
4f80: 76 6e 72 5d 7d 20 7b 45 78 70 65 63 74 65 64 20  vnr]} {Expected 
4f90: 61 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f  a branch revisio
4fa0: 6e 20 6e 75 6d 62 65 72 7d 0a 09 72 65 74 75 72  n number}..retur
4fb0: 6e 20 24 6d 79 62 72 61 6e 63 68 65 73 28 5b 72  n $mybranches([r
4fc0: 65 76 20 32 62 72 61 6e 63 68 6e 72 20 24 72 65  ev 2branchnr $re
4fd0: 76 6e 72 5d 29 0a 20 20 20 20 7d 0a 0a 20 20 20  vnr]).    }..   
4fe0: 20 6d 65 74 68 6f 64 20 41 64 64 55 6e 6c 61 62   method AddUnlab
4ff0: 65 6c 65 64 42 72 61 6e 63 68 20 7b 62 72 61 6e  eledBranch {bran
5000: 63 68 6e 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20  chnr} {..return 
5010: 5b 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68  [$self AddBranch
5020: 20 75 6e 6c 61 62 65 6c 65 64 2d 24 62 72 61 6e   unlabeled-$bran
5030: 63 68 6e 72 20 24 62 72 61 6e 63 68 6e 72 5d 0a  chnr $branchnr].
5040: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
5050: 64 20 41 64 64 42 72 61 6e 63 68 20 7b 6e 61 6d  d AddBranch {nam
5060: 65 20 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 69  e branchnr} {..i
5070: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists 
5080: 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e  mybranches($bran
5090: 63 68 6e 72 29 5d 7d 20 7b 0a 09 20 20 20 20 6c  chnr)]} {..    l
50a0: 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20  og write 1 file 
50b0: 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20 42  "In '$mypath': B
50c0: 72 61 6e 63 68 20 27 24 62 72 61 6e 63 68 6e 72  ranch '$branchnr
50d0: 27 20 6e 61 6d 65 64 20 27 5b 24 6d 79 62 72 61  ' named '[$mybra
50e0: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29  nches($branchnr)
50f0: 20 6e 61 6d 65 5d 27 22 0a 09 20 20 20 20 6c 6f   name]'"..    lo
5100: 67 20 77 72 69 74 65 20 31 20 66 69 6c 65 20 22  g write 1 file "
5110: 43 61 6e 6e 6f 74 20 68 61 76 65 20 73 65 63 6f  Cannot have seco
5120: 6e 64 20 6e 61 6d 65 20 27 24 6e 61 6d 65 27 2c  nd name '$name',
5130: 20 69 67 6e 6f 72 69 6e 67 20 69 74 22 0a 09 20   ignoring it".. 
5140: 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09 73 65     return..}..se
5150: 74 20 62 72 61 6e 63 68 20 5b 73 79 6d 20 25 41  t branch [sym %A
5160: 55 54 4f 25 20 62 72 61 6e 63 68 20 24 62 72 61  UTO% branch $bra
5170: 6e 63 68 6e 72 20 5b 24 6d 79 70 72 6f 6a 65 63  nchnr [$myprojec
5180: 74 20 67 65 74 73 79 6d 62 6f 6c 20 24 6e 61 6d  t getsymbol $nam
5190: 65 5d 20 24 73 65 6c 66 5d 0a 09 24 62 72 61 6e  e] $self]..$bran
51a0: 63 68 20 73 65 74 70 6f 73 69 74 69 6f 6e 20 5b  ch setposition [
51b0: 69 6e 63 72 20 6d 79 62 72 61 6e 63 68 63 6e 74  incr mybranchcnt
51c0: 5d 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65  ]..set mybranche
51d0: 73 28 24 62 72 61 6e 63 68 6e 72 29 20 24 62 72  s($branchnr) $br
51e0: 61 6e 63 68 0a 09 72 65 74 75 72 6e 20 24 62 72  anch..return $br
51f0: 61 6e 63 68 0a 20 20 20 20 7d 0a 0a 20 20 20 20  anch.    }..    
5200: 6d 65 74 68 6f 64 20 41 64 64 54 61 67 20 7b 6e  method AddTag {n
5210: 61 6d 65 20 72 65 76 6e 72 7d 20 7b 0a 09 73 65  ame revnr} {..se
5220: 74 20 74 61 67 20 5b 73 79 6d 20 25 41 55 54 4f  t tag [sym %AUTO
5230: 25 20 74 61 67 20 24 72 65 76 6e 72 20 5b 24 6d  % tag $revnr [$m
5240: 79 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62  yproject getsymb
5250: 6f 6c 20 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d  ol $name] $self]
5260: 0a 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73  ..lappend mytags
5270: 28 24 72 65 76 6e 72 29 20 24 74 61 67 0a 09 72  ($revnr) $tag..r
5280: 65 74 75 72 6e 20 24 74 61 67 0a 20 20 20 20 7d  eturn $tag.    }
5290: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 63  ..    method Rec
52a0: 6f 72 64 42 61 73 69 63 44 65 70 65 6e 64 65 6e  ordBasicDependen
52b0: 63 69 65 73 20 7b 72 65 76 6e 72 20 6e 65 78 74  cies {revnr next
52c0: 7d 20 7b 0a 09 23 20 48 61 6e 64 6c 65 20 74 68  } {..# Handle th
52d0: 65 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e  e revision depen
52e0: 64 65 6e 63 69 65 73 2e 20 52 65 63 6f 72 64 20  dencies. Record 
52f0: 74 68 65 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f  them for now, do
5300: 0a 09 23 20 6e 6f 74 68 69 6e 67 20 77 69 74 68  ..# nothing with
5310: 20 74 68 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f   them yet....# O
5320: 6e 20 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20  n the trunk the 
5330: 27 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69  'next' field poi
5340: 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69  nts to the previ
5350: 6f 75 73 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c  ous..# revision,
5360: 20 69 2e 65 2e 20 74 68 65 20 5f 70 61 72 65 6e   i.e. the _paren
5370: 74 5f 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  t_ of the curren
5380: 74 20 6f 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a  t one. Example:.
5390: 09 23 20 31 2e 36 27 73 20 6e 65 78 74 20 69 73  .# 1.6's next is
53a0: 20 31 2e 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73   1.5 (modulo cvs
53b0: 20 61 64 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20   admin -o)....# 
53c0: 43 6f 6e 74 72 61 72 69 6c 79 20 6f 6e 20 61 20  Contrarily on a 
53d0: 62 72 61 6e 63 68 20 74 68 65 20 27 6e 65 78 74  branch the 'next
53e0: 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  ' field points t
53f0: 6f 20 74 68 65 0a 09 23 20 70 72 69 6d 61 72 79  o the..# primary
5400: 20 5f 63 68 69 6c 64 5f 20 6f 66 20 74 68 65 20   _child_ of the 
5410: 63 75 72 72 65 6e 74 20 72 65 76 69 73 69 6f 6e  current revision
5420: 2e 20 41 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23  . As example,..#
5430: 20 31 2e 31 2e 33 2e 32 27 73 20 27 6e 65 78 74   1.1.3.2's 'next
5440: 27 20 77 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e  ' will be 1.1.3.
5450: 33 2e 0a 0a 09 23 20 54 68 65 20 27 6e 65 78 74  3....# The 'next
5460: 27 20 66 69 65 6c 64 20 61 63 74 75 61 6c 6c 79  ' field actually
5470: 20 61 6c 77 61 79 73 20 72 65 66 65 72 73 20 74   always refers t
5480: 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09  o the revision..
5490: 23 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  # containing the
54a0: 20 64 65 6c 74 61 20 6e 65 65 64 65 64 20 74 6f   delta needed to
54b0: 20 72 65 74 72 69 65 76 65 20 74 68 61 74 20 72   retrieve that r
54c0: 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65  evision....# The
54d0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 20 6e 65   dependencies ne
54e0: 65 64 65 64 20 68 65 72 65 20 61 72 65 20 74 68  eded here are th
54f0: 65 20 6c 6f 67 69 63 61 6c 20 73 74 72 75 63 74  e logical struct
5500: 75 72 65 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63  ure,..# parent/c
5510: 68 69 6c 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68  hild, and not th
5520: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
5530: 20 64 65 70 65 6e 64 65 6e 74 20 64 65 6c 74 61   dependent delta
5540: 0a 09 23 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09  ..# pointers....
5550: 69 66 20 7b 24 6e 65 78 74 20 65 71 20 22 22 7d  if {$next eq ""}
5560: 20 72 65 74 75 72 6e 0a 09 23 20 20 20 20 20 20   return..#      
5570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5580: 20 20 20 20 70 61 72 65 6e 74 20 2d 3e 20 63 68      parent -> ch
5590: 69 6c 64 0a 09 69 66 20 7b 5b 72 65 76 20 69 73  ild..if {[rev is
55a0: 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e  trunkrevnr $revn
55b0: 72 5d 7d 20 7b 0a 09 20 20 20 20 6c 61 70 70 65  r]} {..    lappe
55c0: 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65  nd mydependencie
55d0: 73 20 24 6e 65 78 74 20 24 72 65 76 6e 72 0a 09  s $next $revnr..
55e0: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61  } else {..    la
55f0: 70 70 65 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e  ppend mydependen
5600: 63 69 65 73 20 24 72 65 76 6e 72 20 24 6e 65 78  cies $revnr $nex
5610: 74 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  t..}..return.   
5620: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 50   }..    method P
5630: 72 6f 63 65 73 73 50 72 69 6d 61 72 79 44 65 70  rocessPrimaryDep
5640: 65 6e 64 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09  endencies {} {..
5650: 66 6f 72 65 61 63 68 20 7b 70 61 72 65 6e 74 72  foreach {parentr
5660: 65 76 6e 72 20 63 68 69 6c 64 72 65 76 6e 72 7d  evnr childrevnr}
5670: 20 24 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73   $mydependencies
5680: 20 7b 0a 09 20 20 20 20 73 65 74 20 70 61 72 65   {..    set pare
5690: 6e 74 20 24 6d 79 72 65 76 28 24 70 61 72 65 6e  nt $myrev($paren
56a0: 74 72 65 76 6e 72 29 0a 09 20 20 20 20 73 65 74  trevnr)..    set
56b0: 20 63 68 69 6c 64 20 20 24 6d 79 72 65 76 28 24   child  $myrev($
56c0: 63 68 69 6c 64 72 65 76 6e 72 29 0a 09 20 20 20  childrevnr)..   
56d0: 20 24 70 61 72 65 6e 74 20 73 65 74 63 68 69 6c   $parent setchil
56e0: 64 20 24 63 68 69 6c 64 0a 09 20 20 20 20 24 63  d $child..    $c
56f0: 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74 20 24  hild setparent $
5700: 70 61 72 65 6e 74 0a 09 7d 0a 09 72 65 74 75 72  parent..}..retur
5710: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
5720: 68 6f 64 20 50 72 6f 63 65 73 73 42 72 61 6e 63  hod ProcessBranc
5730: 68 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d  hDependencies {}
5740: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 62 72 61   {..foreach {bra
5750: 6e 63 68 6e 72 20 62 72 61 6e 63 68 7d 20 5b 61  nchnr branch} [a
5760: 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63  rray get mybranc
5770: 68 65 73 5d 20 7b 0a 09 20 20 20 20 73 65 74 20  hes] {..    set 
5780: 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68 20 70  revnr [$branch p
5790: 61 72 65 6e 74 72 65 76 6e 72 5d 0a 0a 09 20 20  arentrevnr]...  
57a0: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
57b0: 73 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e 72  sts myrev($revnr
57c0: 29 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74  )]} {...log writ
57d0: 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27 24 6d  e 1 file "In '$m
57e0: 79 70 61 74 68 27 3a 20 54 68 65 20 62 72 61 6e  ypath': The bran
57f0: 63 68 20 27 5b 24 62 72 61 6e 63 68 20 6e 61 6d  ch '[$branch nam
5800: 65 5d 27 20 72 65 66 65 72 65 6e 63 65 73 22 0a  e]' references".
5810: 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69  ..log write 1 fi
5820: 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20 72 65  le "the bogus re
5830: 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72 27 20  vision '$revnr' 
5840: 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67 6e 6f  and will be igno
5850: 72 65 64 2e 22 0a 09 09 24 62 72 61 6e 63 68 20  red."...$branch 
5860: 64 65 73 74 72 6f 79 0a 09 09 75 6e 73 65 74 20  destroy...unset 
5870: 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e  mybranches($bran
5880: 63 68 6e 72 29 0a 09 20 20 20 20 7d 20 65 6c 73  chnr)..    } els
5890: 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20 24 6d  e {...set rev $m
58a0: 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09 09 24  yrev($revnr)...$
58b0: 72 65 76 20 61 64 64 62 72 61 6e 63 68 20 24 62  rev addbranch $b
58c0: 72 61 6e 63 68 0a 09 09 24 62 72 61 6e 63 68 20  ranch...$branch 
58d0: 73 65 74 70 61 72 65 6e 74 20 24 72 65 76 0a 0a  setparent $rev..
58e0: 09 09 23 20 49 66 20 72 65 76 69 73 69 6f 6e 73  ..# If revisions
58f0: 20 77 65 72 65 20 63 6f 6d 6d 69 74 74 65 64 20   were committed 
5900: 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20 77 65  on the branch we
5910: 20 73 74 6f 72 65 20 61 0a 09 09 23 20 72 65 66   store a...# ref
5920: 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 62 72  erence to the br
5930: 61 6e 63 68 20 74 68 65 72 65 2c 20 61 6e 64 20  anch there, and 
5940: 66 75 72 74 68 65 72 20 64 65 63 6c 61 72 65 0a  further declare.
5950: 09 09 23 20 74 68 65 20 66 69 72 73 74 20 63 68  ..# the first ch
5960: 69 6c 64 27 73 20 70 61 72 65 6e 74 20 74 6f 20  ild's parent to 
5970: 62 65 20 62 72 61 6e 63 68 27 73 20 70 61 72 65  be branch's pare
5980: 6e 74 2c 20 61 6e 64 0a 09 09 23 20 6c 69 73 74  nt, and...# list
5990: 20 74 68 69 73 20 63 68 69 6c 64 20 69 6e 20 74   this child in t
59a0: 68 65 20 70 61 72 65 6e 74 20 72 65 76 69 73 69  he parent revisi
59b0: 6f 6e 2e 0a 0a 09 09 69 66 20 7b 5b 24 62 72 61  on.....if {[$bra
59c0: 6e 63 68 20 68 61 73 63 68 69 6c 64 72 65 76 5d  nch haschildrev]
59d0: 7d 20 7b 0a 09 09 20 20 20 20 73 65 74 20 63 68  } {...    set ch
59e0: 69 6c 64 72 65 76 6e 72 20 5b 24 62 72 61 6e 63  ildrevnr [$branc
59f0: 68 20 63 68 69 6c 64 72 65 76 6e 72 5d 0a 09 09  h childrevnr]...
5a00: 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 24 6d      set child $m
5a10: 79 72 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72  yrev($childrevnr
5a20: 29 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20  )...    $branch 
5a30: 73 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64 0a  setchild $child.
5a40: 0a 09 09 20 20 20 20 24 63 68 69 6c 64 20 73 65  ...    $child se
5a50: 74 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62  tparentbranch $b
5a60: 72 61 6e 63 68 0a 09 09 20 20 20 20 24 63 68 69  ranch...    $chi
5a70: 6c 64 20 73 65 74 70 61 72 65 6e 74 20 20 20 20  ld setparent    
5a80: 20 20 20 24 72 65 76 0a 09 09 20 20 20 20 24 72     $rev...    $r
5a90: 65 76 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61  ev addchildonbra
5aa0: 6e 63 68 20 24 63 68 69 6c 64 0a 09 09 7d 0a 09  nch $child...}..
5ab0: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e      }..}..return
5ac0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
5ad0: 6f 64 20 53 6f 72 74 42 72 61 6e 63 68 65 73 20  od SortBranches 
5ae0: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 72  {} {..foreach {r
5af0: 65 76 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79  evnr rev} [array
5b00: 20 67 65 74 20 6d 79 72 65 76 5d 20 7b 20 24 72   get myrev] { $r
5b10: 65 76 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20  ev sortbranches 
5b20: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
5b30: 0a 20 20 20 20 6d 65 74 68 6f 64 20 50 72 6f 63  .    method Proc
5b40: 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69  essTagDependenci
5b50: 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68  es {} {..foreach
5b60: 20 7b 72 65 76 6e 72 20 74 61 67 6c 69 73 74 7d   {revnr taglist}
5b70: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74 61   [array get myta
5b80: 67 73 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 21  gs] {..    if {!
5b90: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 72  [info exists myr
5ba0: 65 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b 0a 09  ev($revnr)]} {..
5bb0: 09 73 65 74 20 6e 20 5b 6c 6c 65 6e 67 74 68 20  .set n [llength 
5bc0: 24 74 61 67 6c 69 73 74 5d 0a 09 09 6c 6f 67 20  $taglist]...log 
5bd0: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e  write 1 file "In
5be0: 20 27 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20   '$mypath': The 
5bf0: 66 6f 6c 6c 6f 77 69 6e 67 20 5b 6e 73 70 20 24  following [nsp $
5c00: 6e 20 74 61 67 5d 20 72 65 66 65 72 65 6e 63 65  n tag] reference
5c10: 22 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20  "...log write 1 
5c20: 66 69 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20  file "the bogus 
5c30: 72 65 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72  revision '$revnr
5c40: 27 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67  ' and will be ig
5c50: 6e 6f 72 65 64 2e 22 0a 09 09 66 6f 72 65 61 63  nored."...foreac
5c60: 68 20 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b  h tag $taglist {
5c70: 0a 09 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  ...    log write
5c80: 20 31 20 66 69 6c 65 20 22 20 20 20 20 5b 24 74   1 file "    [$t
5c90: 61 67 20 6e 61 6d 65 5d 22 0a 09 09 20 20 20 20  ag name]"...    
5ca0: 24 74 61 67 20 64 65 73 74 72 6f 79 0a 09 09 7d  $tag destroy...}
5cb0: 0a 09 09 75 6e 73 65 74 20 6d 79 74 61 67 73 28  ...unset mytags(
5cc0: 24 72 65 76 6e 72 29 0a 09 20 20 20 20 7d 20 65  $revnr)..    } e
5cd0: 6c 73 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20  lse {...set rev 
5ce0: 24 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09  $myrev($revnr)..
5cf0: 09 66 6f 72 65 61 63 68 20 74 61 67 20 24 74 61  .foreach tag $ta
5d00: 67 6c 69 73 74 20 7b 0a 09 09 20 20 20 20 24 72  glist {...    $r
5d10: 65 76 20 61 64 64 74 61 67 20 20 20 20 24 74 61  ev addtag    $ta
5d20: 67 0a 09 09 20 20 20 20 24 74 61 67 20 73 65 74  g...    $tag set
5d30: 74 61 67 72 65 76 20 24 72 65 76 0a 09 09 7d 0a  tagrev $rev...}.
5d40: 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72  .    }..}..retur
5d50: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
5d60: 68 6f 64 20 44 65 74 65 72 6d 69 6e 65 54 68 65  hod DetermineThe
5d70: 52 6f 6f 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20  RootRevision {} 
5d80: 7b 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69 73  {..# The root is
5d90: 20 74 68 65 20 6f 6e 65 20 72 65 76 69 73 69 6f   the one revisio
5da0: 6e 20 77 68 69 63 68 20 68 61 73 20 6e 6f 20 70  n which has no p
5db0: 61 72 65 6e 74 2e 20 42 79 0a 09 23 20 63 68 65  arent. By..# che
5dc0: 63 6b 69 6e 67 20 61 6c 6c 20 72 65 76 69 73 69  cking all revisi
5dd0: 6f 6e 73 20 77 65 20 65 6e 73 75 72 65 20 74 68  ons we ensure th
5de0: 61 74 20 77 65 20 63 61 6e 20 64 65 74 65 63 74  at we can detect
5df0: 20 61 6e 64 0a 09 23 20 72 65 70 6f 72 74 20 74   and..# report t
5e00: 68 65 20 63 61 73 65 20 6f 66 20 6d 75 6c 74 69  he case of multi
5e10: 70 6c 65 20 72 6f 6f 74 73 2e 20 57 69 74 68 6f  ple roots. Witho
5e20: 75 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64  ut that we could
5e30: 0a 09 23 20 73 69 6d 70 6c 79 20 74 61 6b 65 20  ..# simply take 
5e40: 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 61 6e 64  one revision and
5e50: 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 61 72 65   follow the pare
5e60: 6e 74 20 6c 69 6e 6b 73 20 74 6f 0a 09 23 20 74  nt links to..# t
5e70: 68 65 69 72 20 72 6f 6f 74 20 28 73 69 63 21 29  heir root (sic!)
5e80: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76  ....foreach {rev
5e90: 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67  nr rev} [array g
5ea0: 65 74 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20  et myrev] {..   
5eb0: 20 69 66 20 7b 5b 24 72 65 76 20 68 61 73 70 61   if {[$rev haspa
5ec0: 72 65 6e 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a  rent]} continue.
5ed0: 09 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61  .    integrity a
5ee0: 73 73 65 72 74 20 7b 24 6d 79 72 6f 6f 74 20 65  ssert {$myroot e
5ef0: 71 20 22 22 7d 20 7b 4d 75 6c 74 69 70 6c 65 20  q ""} {Multiple 
5f00: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 73 20 66  root revisions f
5f10: 6f 75 6e 64 7d 0a 09 20 20 20 20 73 65 74 20 6d  ound}..    set m
5f20: 79 72 6f 6f 74 20 24 72 65 76 0a 09 7d 0a 0a 09  yroot $rev..}...
5f30: 23 20 49 6e 20 74 68 65 20 66 75 74 75 72 65 20  # In the future 
5f40: 77 65 20 61 6c 73 6f 20 6e 65 65 64 20 61 20 6c  we also need a l
5f50: 69 73 74 2c 20 61 73 20 62 72 61 6e 63 68 65 73  ist, as branches
5f60: 20 63 61 6e 20 62 65 63 6f 6d 65 0a 09 23 20 73   can become..# s
5f70: 65 76 65 72 65 64 20 66 72 6f 6d 20 74 68 65 69  evered from thei
5f80: 72 20 70 61 72 65 6e 74 2c 20 6d 61 6b 69 6e 67  r parent, making
5f90: 20 74 68 65 6d 20 74 68 65 69 72 20 6f 77 6e 20   them their own 
5fa0: 72 6f 6f 74 2e 0a 09 73 65 74 20 6d 79 72 6f 6f  root...set myroo
5fb0: 74 73 20 5b 6c 69 73 74 20 24 6d 79 72 6f 6f 74  ts [list $myroot
5fc0: 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  ]..return.    }.
5fd0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74 65  .    method Dete
5fe0: 72 6d 69 6e 65 52 65 76 69 73 69 6f 6e 4f 70 65  rmineRevisionOpe
5ff0: 72 61 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 66 6f  rations {} {..fo
6000: 72 65 61 63 68 20 72 65 76 20 24 6d 79 72 65 76  reach rev $myrev
6010: 69 73 69 6f 6e 73 20 7b 20 24 72 65 76 20 64 65  isions { $rev de
6020: 74 65 72 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e  termineoperation
6030: 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d   }..return.    }
6040: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 65 74  ..    method Det
6050: 65 72 6d 69 6e 65 4c 69 6e 65 73 4f 66 44 65 76  ermineLinesOfDev
6060: 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b 0a 09 23  elopment {} {..#
6070: 20 46 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 74   For revisions t
6080: 68 69 73 20 68 61 73 20 62 65 65 6e 20 64 6f 6e  his has been don
6090: 65 20 61 6c 72 65 61 64 79 2c 20 69 6e 20 27 65  e already, in 'e
60a0: 78 74 65 6e 64 27 2e 20 4e 6f 77 0a 09 23 20 77  xtend'. Now..# w
60b0: 65 20 64 6f 20 74 68 69 73 20 66 6f 72 20 74 68  e do this for th
60c0: 65 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74  e branches and t
60d0: 61 67 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b  ags....foreach {
60e0: 5f 20 62 72 61 6e 63 68 7d 20 5b 61 72 72 61 79  _ branch} [array
60f0: 20 67 65 74 20 6d 79 62 72 61 6e 63 68 65 73 5d   get mybranches]
6100: 20 7b 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20   {..    $branch 
6110: 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65  setlod [$self Ge
6120: 74 4c 4f 44 20 5b 24 62 72 61 6e 63 68 20 70 61  tLOD [$branch pa
6130: 72 65 6e 74 72 65 76 6e 72 5d 5d 0a 09 7d 0a 0a  rentrevnr]]..}..
6140: 09 66 6f 72 65 61 63 68 20 7b 5f 20 74 61 67 6c  .foreach {_ tagl
6150: 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20  ist} [array get 
6160: 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 66  mytags] {..    f
6170: 6f 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c  oreach tag $tagl
6180: 69 73 74 20 7b 0a 09 09 24 74 61 67 20 73 65 74  ist {...$tag set
6190: 6c 6f 64 20 5b 24 73 65 6c 66 20 47 65 74 4c 4f  lod [$self GetLO
61a0: 44 20 5b 24 74 61 67 20 74 61 67 72 65 76 6e 72  D [$tag tagrevnr
61b0: 5d 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65  ]]..    }..}..re
61c0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
61d0: 6d 65 74 68 6f 64 20 47 65 74 4c 4f 44 20 7b 72  method GetLOD {r
61e0: 65 76 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65  evnr} {..if {[re
61f0: 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24  v istrunkrevnr $
6200: 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 72  revnr]} {..    r
6210: 65 74 75 72 6e 20 24 6d 79 74 72 75 6e 6b 0a 09  eturn $mytrunk..
6220: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65  } else {..    re
6230: 74 75 72 6e 20 5b 24 73 65 6c 66 20 52 65 76 32  turn [$self Rev2
6240: 42 72 61 6e 63 68 20 24 72 65 76 6e 72 5d 0a 09  Branch $revnr]..
6250: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  }.    }..    met
6260: 68 6f 64 20 48 61 6e 64 6c 65 4e 6f 6e 54 72 75  hod HandleNonTru
6270: 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 20  nkDefaultBranch 
6280: 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 69 73  {} {..set revlis
6290: 74 20 5b 24 73 65 6c 66 20 4e 6f 6e 54 72 75 6e  t [$self NonTrun
62a0: 6b 44 65 66 61 75 6c 74 52 65 76 69 73 69 6f 6e  kDefaultRevision
62b0: 73 5d 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74  s]..if {![llengt
62c0: 68 20 24 72 65 76 6c 69 73 74 5d 7d 20 72 65 74  h $revlist]} ret
62d0: 75 72 6e 0a 0a 09 24 73 65 6c 66 20 41 64 6a 75  urn...$self Adju
62e0: 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c  stNonTrunkDefaul
62f0: 74 42 72 61 6e 63 68 20 24 72 65 76 6c 69 73 74  tBranch $revlist
6300: 0a 09 24 73 65 6c 66 20 43 68 65 63 6b 4c 4f 44  ..$self CheckLOD
6310: 73 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  s..return.    }.
6320: 0a 20 20 20 20 6d 65 74 68 6f 64 20 4e 6f 6e 54  .    method NonT
6330: 72 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69 73  runkDefaultRevis
6340: 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72 6f  ions {} {..# Fro
6350: 6d 20 63 76 73 32 73 76 6e 20 74 68 65 20 66 6f  m cvs2svn the fo
6360: 6c 6c 6f 77 69 6e 67 20 65 78 70 6c 61 6e 61 74  llowing explanat
6370: 69 6f 6e 20 28 77 69 74 68 20 6d 6f 64 69 66 69  ion (with modifi
6380: 63 61 74 69 6f 6e 73 0a 09 23 20 66 6f 72 20 6f  cations..# for o
6390: 75 72 20 61 6c 67 6f 72 69 74 68 6d 29 3a 0a 0a  ur algorithm):..
63a0: 09 23 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  .# Determine whe
63b0: 74 68 65 72 20 74 68 65 72 65 20 61 72 65 20 61  ther there are a
63c0: 6e 79 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66  ny non-trunk def
63d0: 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 72  ault branch..# r
63e0: 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 49 66  evisions....# If
63f0: 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66   a non-trunk def
6400: 61 75 6c 74 20 62 72 61 6e 63 68 20 69 73 20 64  ault branch is d
6410: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 68 61 76  etermined to hav
6420: 65 20 65 78 69 73 74 65 64 2c 0a 09 23 20 72 65  e existed,..# re
6430: 74 75 72 6e 20 61 20 6c 69 73 74 20 6f 66 20 6f  turn a list of o
6440: 62 6a 65 63 74 73 20 66 6f 72 20 61 6c 6c 20 72  bjects for all r
6450: 65 76 69 73 69 6f 6e 73 20 74 68 61 74 20 77 65  evisions that we
6460: 72 65 20 6f 6e 63 65 0a 09 23 20 6e 6f 6e 2d 74  re once..# non-t
6470: 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 72 65 76  runk default rev
6480: 69 73 69 6f 6e 73 2c 20 69 6e 20 64 65 70 65 6e  isions, in depen
6490: 64 65 6e 63 79 20 6f 72 64 65 72 20 28 69 2e 65  dency order (i.e
64a0: 2e 20 72 6f 6f 74 0a 09 23 20 66 69 72 73 74 29  . root..# first)
64b0: 2e 0a 0a 09 23 20 54 68 65 72 65 20 61 72 65 20  ....# There are 
64c0: 74 77 6f 20 63 61 73 65 73 20 74 6f 20 68 61 6e  two cases to han
64d0: 64 6c 65 3a 0a 0a 09 23 20 4f 6e 65 20 63 61 73  dle:...# One cas
64e0: 65 20 69 73 20 73 69 6d 70 6c 65 2e 20 20 54 68  e is simple.  Th
64f0: 65 20 52 43 53 20 66 69 6c 65 20 6c 69 73 74 73  e RCS file lists
6500: 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63   a default branc
6510: 68 0a 09 23 20 65 78 70 6c 69 63 69 74 6c 79 20  h..# explicitly 
6520: 69 6e 20 69 74 73 20 68 65 61 64 65 72 2c 20 73  in its header, s
6530: 75 63 68 20 61 73 20 27 31 2e 31 2e 31 27 2e 20  uch as '1.1.1'. 
6540: 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 77   In this case, w
6550: 65 0a 09 23 20 6b 6e 6f 77 20 74 68 61 74 20 65  e..# know that e
6560: 76 65 72 79 20 72 65 76 69 73 69 6f 6e 20 6f 6e  very revision on
6570: 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e   the vendor bran
6580: 63 68 20 69 73 20 74 6f 20 62 65 0a 09 23 20 74  ch is to be..# t
6590: 72 65 61 74 65 64 20 61 73 20 68 65 61 64 20 6f  reated as head o
65a0: 66 20 74 72 75 6e 6b 20 61 74 20 74 68 61 74 20  f trunk at that 
65b0: 70 6f 69 6e 74 20 69 6e 20 74 69 6d 65 2e 0a 0a  point in time...
65c0: 09 23 20 42 75 74 20 74 68 65 72 65 27 73 20 61  .# But there's a
65d0: 6c 73 6f 20 61 20 64 65 67 65 6e 65 72 61 74 65  lso a degenerate
65e0: 20 63 61 73 65 2e 20 20 54 68 65 20 52 43 53 20   case.  The RCS 
65f0: 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 0a 09 23  file does not..#
6600: 20 63 75 72 72 65 6e 74 6c 79 20 68 61 76 65 20   currently have 
6610: 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  a default branch
6620: 2c 20 79 65 74 20 77 65 20 63 61 6e 20 64 65 64  , yet we can ded
6630: 75 63 65 20 74 68 61 74 20 66 6f 72 0a 09 23 20  uce that for..# 
6640: 73 6f 6d 65 20 70 65 72 69 6f 64 20 69 6e 20 74  some period in t
6650: 68 65 20 70 61 73 74 20 69 74 20 70 72 6f 62 61  he past it proba
6660: 62 6c 79 20 2a 64 69 64 2a 20 68 61 76 65 20 6f  bly *did* have o
6670: 6e 65 2e 20 20 46 6f 72 0a 09 23 20 65 78 61 6d  ne.  For..# exam
6680: 70 6c 65 2c 20 74 68 65 20 66 69 6c 65 20 68 61  ple, the file ha
6690: 73 20 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f  s vendor revisio
66a0: 6e 73 20 31 2e 31 2e 31 2e 31 20 2d 3e 20 31 2e  ns 1.1.1.1 -> 1.
66b0: 31 2e 31 2e 39 36 2c 0a 09 23 20 61 6c 6c 20 6f  1.1.96,..# all o
66c0: 66 20 77 68 69 63 68 20 61 72 65 20 64 61 74 65  f which are date
66d0: 64 20 62 65 66 6f 72 65 20 31 2e 32 2c 20 61 6e  d before 1.2, an
66e0: 64 20 74 68 65 6e 20 69 74 20 68 61 73 20 31 2e  d then it has 1.
66f0: 31 2e 31 2e 39 37 0a 09 23 20 2d 3e 20 31 2e 31  1.1.97..# -> 1.1
6700: 2e 31 2e 31 30 30 20 64 61 74 65 64 20 61 66 74  .1.100 dated aft
6710: 65 72 20 31 2e 32 2e 20 20 49 6e 20 74 68 69 73  er 1.2.  In this
6720: 20 63 61 73 65 2c 20 77 65 20 73 68 6f 75 6c 64   case, we should
6730: 0a 09 23 20 72 65 63 6f 72 64 20 31 2e 31 2e 31  ..# record 1.1.1
6740: 2e 39 36 20 61 73 20 74 68 65 20 6c 61 73 74 20  .96 as the last 
6750: 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 20  vendor revision 
6760: 74 6f 20 68 61 76 65 20 62 65 65 6e 20 74 68 65  to have been the
6770: 0a 09 23 20 68 65 61 64 20 6f 66 20 74 68 65 20  ..# head of the 
6780: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e 0a  default branch..
6790: 0a 09 69 66 20 7b 24 6d 79 70 72 69 6e 63 69 70  ..if {$myprincip
67a0: 61 6c 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20  al ne ""} {..   
67b0: 20 23 20 54 68 65 72 65 20 69 73 20 73 74 69 6c   # There is stil
67c0: 6c 20 61 20 64 65 66 61 75 6c 74 20 62 72 61 6e  l a default bran
67d0: 63 68 3b 20 74 68 61 74 20 6d 65 61 6e 73 20 74  ch; that means t
67e0: 68 61 74 20 61 6c 6c 0a 09 20 20 20 20 23 20 72  hat all..    # r
67f0: 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 61 74  evisions on that
6800: 20 62 72 61 6e 63 68 20 67 65 74 20 6d 61 72 6b   branch get mark
6810: 65 64 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72  ed....    log wr
6820: 69 74 65 20 35 20 66 69 6c 65 20 22 46 6f 75 6e  ite 5 file "Foun
6830: 64 20 65 78 70 6c 69 63 69 74 6c 79 20 6d 61 72  d explicitly mar
6840: 6b 65 64 20 4e 54 44 42 22 0a 0a 09 20 20 20 20  ked NTDB"...    
6850: 73 65 74 20 72 6e 65 78 74 20 5b 24 6d 79 72 6f  set rnext [$myro
6860: 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 69  ot child]..    i
6870: 66 20 7b 24 72 6e 65 78 74 20 6e 65 20 22 22 7d  f {$rnext ne ""}
6880: 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 66 61 74   {...trouble fat
6890: 61 6c 20 22 46 69 6c 65 20 77 69 74 68 20 64 65  al "File with de
68a0: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 24 6d 79  fault branch $my
68b0: 70 72 69 6e 63 69 70 61 6c 20 61 6c 73 6f 20 68  principal also h
68c0: 61 73 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6e  as revision [$rn
68d0: 65 78 74 20 72 65 76 6e 72 5d 22 0a 09 09 72 65  ext revnr]"...re
68e0: 74 75 72 6e 0a 09 20 20 20 20 7d 0a 0a 09 20 20  turn..    }...  
68f0: 20 20 73 65 74 20 72 65 76 20 5b 24 6d 79 62 72    set rev [$mybr
6900: 61 6e 63 68 65 73 28 24 6d 79 70 72 69 6e 63 69  anches($myprinci
6910: 70 61 6c 29 20 63 68 69 6c 64 5d 0a 09 20 20 20  pal) child]..   
6920: 20 73 65 74 20 72 65 73 20 7b 7d 0a 0a 09 20 20   set res {}...  
6930: 20 20 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65    while {$rev ne
6940: 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e 64   ""} {...lappend
6950: 20 72 65 73 20 24 72 65 76 0a 09 09 73 65 74 20   res $rev...set 
6960: 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d  rev [$rev child]
6970: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 72 65  ..    }...    re
6980: 74 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c  turn $res...} el
6990: 73 65 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65  seif {$myimporte
69a0: 64 7d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 20 64  d} {..    # No d
69b0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20 62  efault branch, b
69c0: 75 74 20 74 68 65 20 66 69 6c 65 20 61 70 70 65  ut the file appe
69d0: 61 72 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e  ars to have been
69e0: 0a 09 20 20 20 20 23 20 69 6d 70 6f 72 74 65 64  ..    # imported
69f0: 2e 20 20 53 6f 20 6f 75 72 20 65 64 75 63 61 74  .  So our educat
6a00: 65 64 20 67 75 65 73 73 20 69 73 20 74 68 61 74  ed guess is that
6a10: 20 61 6c 6c 20 72 65 76 69 73 69 6f 6e 73 0a 09   all revisions..
6a20: 20 20 20 20 23 20 6f 6e 20 74 68 65 20 27 31 2e      # on the '1.
6a30: 31 2e 31 27 20 62 72 61 6e 63 68 20 77 69 74 68  1.1' branch with
6a40: 20 74 69 6d 65 73 74 61 6d 70 73 20 70 72 69 6f   timestamps prio
6a50: 72 20 74 6f 20 74 68 65 0a 09 20 20 20 20 23 20  r to the..    # 
6a60: 74 69 6d 65 73 74 61 6d 70 20 6f 66 20 27 31 2e  timestamp of '1.
6a70: 32 27 20 77 65 72 65 20 6e 6f 6e 2d 74 72 75 6e  2' were non-trun
6a80: 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  k default branch
6a90: 0a 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e  ..    # revision
6aa0: 73 2e 0a 0a 09 20 20 20 20 23 20 54 68 69 73 20  s....    # This 
6ab0: 72 65 61 6c 6c 79 20 6f 6e 6c 79 20 70 72 6f 63  really only proc
6ac0: 65 73 73 65 73 20 73 74 61 6e 64 61 72 64 20 27  esses standard '
6ad0: 31 2e 31 2e 31 2e 2a 27 2d 73 74 79 6c 65 0a 09  1.1.1.*'-style..
6ae0: 20 20 20 20 23 20 76 65 6e 64 6f 72 20 72 65 76      # vendor rev
6af0: 69 73 69 6f 6e 73 2e 20 20 4f 6e 65 20 63 6f 75  isions.  One cou
6b00: 6c 64 20 63 6f 6e 63 65 69 76 61 62 6c 79 20 68  ld conceivably h
6b10: 61 76 65 20 61 20 66 69 6c 65 0a 09 20 20 20 20  ave a file..    
6b20: 23 20 77 68 6f 73 65 20 64 65 66 61 75 6c 74 20  # whose default 
6b30: 62 72 61 6e 63 68 20 69 73 20 31 2e 31 2e 33 20  branch is 1.1.3 
6b40: 6f 72 20 77 68 61 74 65 76 65 72 2c 20 6f 72 20  or whatever, or 
6b50: 77 61 73 20 74 68 61 74 0a 09 20 20 20 20 23 20  was that..    # 
6b60: 61 74 20 73 6f 6d 65 20 70 6f 69 6e 74 20 69 6e  at some point in
6b70: 20 74 69 6d 65 2c 20 77 69 74 68 20 76 65 6e 64   time, with vend
6b80: 6f 72 20 72 65 76 69 73 69 6f 6e 73 20 31 2e 31  or revisions 1.1
6b90: 2e 33 2e 31 2c 0a 09 20 20 20 20 23 20 31 2e 31  .3.1,..    # 1.1
6ba0: 2e 33 2e 32 2c 20 65 74 63 2e 20 20 42 75 74 20  .3.2, etc.  But 
6bb0: 77 69 74 68 20 74 68 65 20 64 65 66 61 75 6c 74  with the default
6bc0: 20 62 72 61 6e 63 68 20 67 6f 6e 65 20 6e 6f 77   branch gone now
6bd0: 2c 0a 09 20 20 20 20 23 20 77 65 27 64 20 68 61  ,..    # we'd ha
6be0: 76 65 20 6e 6f 20 62 61 73 69 73 20 66 6f 72 20  ve no basis for 
6bf0: 61 73 73 75 6d 69 6e 67 20 74 68 61 74 20 74 68  assuming that th
6c00: 65 20 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 0a 09  e non-standard..
6c10: 20 20 20 20 23 20 76 65 6e 64 6f 72 20 62 72 61      # vendor bra
6c20: 6e 63 68 20 68 61 64 20 65 76 65 72 20 62 65 65  nch had ever bee
6c30: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72  n the default br
6c40: 61 6e 63 68 20 61 6e 79 77 61 79 2e 0a 0a 09 20  anch anyway.... 
6c50: 20 20 20 23 20 4e 6f 74 65 20 74 68 61 74 20 77     # Note that w
6c60: 65 20 72 65 6c 79 20 6f 6e 20 63 6f 6d 70 61 72  e rely on compar
6c70: 69 73 6f 6e 73 20 62 65 74 77 65 65 6e 20 74 68  isons between th
6c80: 65 20 74 69 6d 65 73 74 61 6d 70 73 0a 09 20 20  e timestamps..  
6c90: 20 20 23 20 6f 66 20 74 68 65 20 72 65 76 69 73    # of the revis
6ca0: 69 6f 6e 73 20 6f 6e 20 74 68 65 20 76 65 6e 64  ions on the vend
6cb0: 6f 72 20 62 72 61 6e 63 68 20 61 6e 64 20 74 68  or branch and th
6cc0: 61 74 20 6f 66 0a 09 20 20 20 20 23 20 72 65 76  at of..    # rev
6cd0: 69 73 69 6f 6e 20 31 2e 32 2c 20 65 76 65 6e 20  ision 1.2, even 
6ce0: 74 68 6f 75 67 68 20 74 68 65 20 74 69 6d 65 73  though the times
6cf0: 74 61 6d 70 73 20 6d 69 67 68 74 20 62 65 0a 09  tamps might be..
6d00: 20 20 20 20 23 20 69 6e 63 6f 72 72 65 63 74 20      # incorrect 
6d10: 64 75 65 20 74 6f 20 63 6c 6f 63 6b 20 73 6b 65  due to clock ske
6d20: 77 2e 20 20 57 65 20 63 6f 75 6c 64 20 64 6f 20  w.  We could do 
6d30: 61 20 73 6c 69 67 68 74 6c 79 0a 09 20 20 20 20  a slightly..    
6d40: 23 20 62 65 74 74 65 72 20 6a 6f 62 20 69 66 20  # better job if 
6d50: 77 65 20 75 73 65 64 20 74 68 65 20 63 68 61 6e  we used the chan
6d60: 67 65 73 65 74 20 74 69 6d 65 73 74 61 6d 70 73  geset timestamps
6d70: 2c 20 61 73 20 69 74 20 69 73 0a 09 20 20 20 20  , as it is..    
6d80: 23 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20  # possible that 
6d90: 74 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65 73  the dependencies
6da0: 20 74 68 61 74 20 77 65 6e 74 20 69 6e 74 6f 0a   that went into.
6db0: 09 20 20 20 20 23 20 64 65 74 65 72 6d 69 6e 69  .    # determini
6dc0: 6e 67 20 74 68 6f 73 65 20 74 69 6d 65 73 74 61  ng those timesta
6dd0: 6d 70 73 20 61 72 65 20 6d 6f 72 65 20 61 63 63  mps are more acc
6de0: 75 72 61 74 65 2e 20 20 42 75 74 0a 09 20 20 20  urate.  But..   
6df0: 20 23 20 74 68 61 74 20 77 6f 75 6c 64 20 72 65   # that would re
6e00: 71 75 69 72 65 20 61 6e 20 65 78 74 72 61 20 70  quire an extra p
6e10: 61 73 73 20 6f 72 20 74 77 6f 2e 0a 0a 09 20 20  ass or two....  
6e20: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
6e30: 73 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28 31  sts mybranches(1
6e40: 2e 31 2e 31 29 5d 7d 20 7b 20 72 65 74 75 72 6e  .1.1)]} { return
6e50: 20 7b 7d 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20   {} }...    log 
6e60: 77 72 69 74 65 20 35 20 66 69 6c 65 20 22 44 65  write 5 file "De
6e70: 64 75 63 65 64 20 65 78 69 73 74 65 6e 63 65 20  duced existence 
6e80: 6f 66 20 4e 54 44 42 22 0a 0a 09 20 20 20 20 73  of NTDB"...    s
6e90: 65 74 20 72 65 76 20 20 5b 24 6d 79 62 72 61 6e  et rev  [$mybran
6ea0: 63 68 65 73 28 31 2e 31 2e 31 29 20 63 68 69 6c  ches(1.1.1) chil
6eb0: 64 5d 0a 09 20 20 20 20 73 65 74 20 72 65 73 20  d]..    set res 
6ec0: 20 7b 7d 0a 09 20 20 20 20 73 65 74 20 73 74 6f   {}..    set sto
6ed0: 70 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64  p [$myroot child
6ee0: 5d 0a 0a 09 20 20 20 20 69 66 20 7b 24 73 74 6f  ]...    if {$sto
6ef0: 70 20 65 71 20 22 22 7d 20 7b 0a 09 09 23 20 47  p eq ""} {...# G
6f00: 65 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e  et everything on
6f10: 20 74 68 65 20 62 72 61 6e 63 68 0a 09 09 77 68   the branch...wh
6f20: 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d  ile {$rev ne ""}
6f30: 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65 6e 64   {...    lappend
6f40: 20 72 65 73 20 24 72 65 76 0a 09 09 20 20 20 20   res $rev...    
6f50: 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68  set rev [$rev ch
6f60: 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 20  ild]...}..    } 
6f70: 65 6c 73 65 20 7b 0a 09 09 23 20 43 6f 6c 6c 65  else {...# Colle
6f80: 63 74 20 65 76 65 72 79 74 68 69 6e 67 20 6f 6e  ct everything on
6f90: 20 74 68 65 20 62 72 61 6e 63 68 20 77 68 69 63   the branch whic
6fa0: 68 20 73 65 65 6d 73 20 74 6f 20 68 61 76 65 0a  h seems to have.
6fb0: 09 09 23 20 62 65 65 6e 20 63 6f 6d 6d 69 74 74  ..# been committ
6fc0: 65 64 20 62 65 66 6f 72 65 20 74 68 65 20 66 69  ed before the fi
6fd0: 72 73 74 20 70 72 69 6d 61 72 79 20 63 68 69 6c  rst primary chil
6fe0: 64 20 6f 66 20 74 68 65 0a 09 09 23 20 72 6f 6f  d of the...# roo
6ff0: 74 20 72 65 76 69 73 69 6f 6e 2e 0a 09 09 73 65  t revision....se
7000: 74 20 73 74 6f 70 64 61 74 65 20 5b 24 73 74 6f  t stopdate [$sto
7010: 70 20 64 61 74 65 5d 0a 09 09 77 68 69 6c 65 20  p date]...while 
7020: 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09  {$rev ne ""} {..
7030: 09 20 20 20 20 69 66 20 7b 5b 24 72 65 76 20 64  .    if {[$rev d
7040: 61 74 65 5d 20 3e 3d 20 24 73 74 6f 70 64 61 74  ate] >= $stopdat
7050: 65 7d 20 62 72 65 61 6b 0a 09 09 20 20 20 20 6c  e} break...    l
7060: 61 70 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a  append res $rev.
7070: 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24  ..    set rev [$
7080: 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09  rev child]...}..
7090: 20 20 20 20 7d 0a 0a 09 20 20 20 20 72 65 74 75      }...    retu
70a0: 72 6e 20 24 72 65 73 0a 0a 09 7d 20 65 6c 73 65  rn $res...} else
70b0: 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 7b   {..    return {
70c0: 7d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  }..}.    }..    
70d0: 23 20 47 65 6e 65 72 61 6c 20 6e 6f 74 65 3a 20  # General note: 
70e0: 49 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  In the following
70f0: 20 6d 65 74 68 6f 64 73 20 77 65 20 6f 6e 6c 79   methods we only
7100: 20 6d 6f 64 69 66 79 20 74 68 65 20 6c 69 6e 6b   modify the link
7110: 73 0a 20 20 20 20 23 20 62 65 74 77 65 65 6e 20  s.    # between 
7120: 72 65 76 69 73 69 6f 6e 73 20 61 6e 64 20 73 79  revisions and sy
7130: 6d 62 6f 6c 73 20 74 6f 20 72 65 73 74 72 75 63  mbols to restruc
7140: 74 75 72 65 20 74 68 65 20 72 65 76 69 73 69 6f  ture the revisio
7150: 6e 0a 20 20 20 20 23 20 74 72 65 65 2e 20 57 65  n.    # tree. We
7160: 20 64 6f 20 5f 5f 6e 6f 74 5f 5f 20 64 65 73 74   do __not__ dest
7170: 72 6f 79 20 74 68 65 20 6f 62 6a 65 63 74 73 2e  roy the objects.
7180: 20 47 69 76 65 6e 20 74 68 65 20 63 6f 6d 70 6c   Given the compl
7190: 65 78 20 6c 69 6e 6b 73 0a 20 20 20 20 23 20 47  ex links.    # G
71a0: 43 20 69 73 20 64 69 66 66 69 63 75 6c 74 20 61  C is difficult a
71b0: 74 20 74 68 69 73 20 6c 65 76 65 6c 2e 20 49 74  t this level. It
71c0: 20 69 73 20 6d 75 63 68 20 65 61 73 69 65 72 20   is much easier 
71d0: 74 6f 20 64 72 6f 70 0a 20 20 20 20 23 20 65 76  to drop.    # ev
71e0: 65 72 79 74 68 69 6e 67 20 77 68 65 6e 20 77 65  erything when we
71f0: 20 77 65 20 61 72 65 20 64 6f 6e 65 2e 20 54 68   we are done. Th
7200: 69 73 20 68 61 70 70 65 6e 73 20 69 6e 20 27 64  is happens in 'd
7210: 72 6f 70 27 2c 20 75 73 69 6e 67 0a 20 20 20 20  rop', using.    
7220: 23 20 74 68 65 20 73 74 61 74 65 20 76 61 72 69  # the state vari
7230: 61 62 6c 65 20 27 6d 79 72 65 76 27 2c 20 27 6d  able 'myrev', 'm
7240: 79 62 72 61 6e 63 68 65 73 27 2c 20 61 6e 64 20  ybranches', and 
7250: 27 6d 79 74 61 67 73 27 2e 20 57 68 61 74 20 77  'mytags'. What w
7260: 65 0a 20 20 20 20 23 20 68 61 76 65 20 74 6f 20  e.    # have to 
7270: 70 65 72 73 69 73 74 2c 20 70 65 72 66 6f 72 6d  persist, perform
7280: 65 64 20 62 79 20 27 70 65 72 73 69 73 74 27 2c  ed by 'persist',
7290: 20 77 65 20 6b 6e 6f 77 20 77 69 6c 6c 20 62 65   we know will be
72a0: 0a 20 20 20 20 23 20 72 65 61 63 68 61 62 6c 65  .    # reachable
72b0: 20 74 68 72 6f 75 67 68 20 74 68 65 20 72 65 76   through the rev
72c0: 69 73 69 6f 6e 73 20 6c 69 73 74 65 64 20 69 6e  isions listed in
72d0: 20 27 6d 79 72 6f 6f 74 73 27 20 61 6e 64 20 74   'myroots' and t
72e0: 68 65 69 72 0a 20 20 20 20 23 20 63 68 69 6c 64  heir.    # child
72f0: 72 65 6e 20 61 6e 64 20 73 79 6d 62 6f 6c 73 2e  ren and symbols.
7300: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 6a  ..    method Adj
7310: 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75  ustNonTrunkDefau
7320: 6c 74 42 72 61 6e 63 68 20 7b 72 65 76 6c 69 73  ltBranch {revlis
7330: 74 7d 20 7b 0a 09 73 65 74 20 73 74 6f 70 20 5b  t} {..set stop [
7340: 24 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 20 3b  $myroot child] ;
7350: 23 20 72 65 76 20 27 31 2e 32 27 0a 0a 09 6c 6f  # rev '1.2'...lo
7360: 67 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22  g write 5 file "
7370: 41 64 6a 75 73 74 69 6e 67 20 4e 54 44 42 20 63  Adjusting NTDB c
7380: 6f 6e 74 61 69 6e 69 6e 67 20 5b 6e 73 70 20 5b  ontaining [nsp [
7390: 6c 6c 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74  llength $revlist
73a0: 5d 20 72 65 76 69 73 69 6f 6e 5d 22 0a 0a 09 23  ] revision]"...#
73b0: 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68   From cvs2svn th
73c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c  e following expl
73d0: 61 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f  anation (with mo
73e0: 64 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66  difications..# f
73f0: 6f 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d  or our algorithm
7400: 29 3a 0a 0a 09 23 20 41 64 6a 75 73 74 20 74 68  ):...# Adjust th
7410: 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61  e non-trunk defa
7420: 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73  ult branch revis
7430: 69 6f 6e 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  ions found in th
7440: 65 0a 09 23 20 27 72 65 76 6c 69 73 74 27 2e 0a  e..# 'revlist'..
7450: 0a 09 23 20 27 6d 79 69 6d 70 6f 72 74 65 64 27  ..# 'myimported'
7460: 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c   is a boolean fl
7470: 61 67 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68  ag indicating wh
7480: 65 74 68 65 72 20 74 68 69 73 20 66 69 6c 65 0a  ether this file.
7490: 09 23 20 61 70 70 65 61 72 73 20 74 6f 20 68 61  .# appears to ha
74a0: 76 65 20 62 65 65 6e 20 69 6d 70 6f 72 74 65 64  ve been imported
74b0: 2c 20 77 68 69 63 68 20 61 6c 73 6f 20 6d 65 61  , which also mea
74c0: 6e 73 20 74 68 61 74 0a 09 23 20 72 65 76 69 73  ns that..# revis
74d0: 69 6f 6e 20 31 2e 31 20 68 61 73 20 61 20 67 65  ion 1.1 has a ge
74e0: 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65 73 73  nerated log mess
74f0: 61 67 65 20 74 68 61 74 20 6e 65 65 64 20 6e 6f  age that need no
7500: 74 20 62 65 0a 09 23 20 70 72 65 73 65 72 76 65  t be..# preserve
7510: 64 2e 20 20 27 72 65 76 6c 69 73 74 27 20 69 73  d.  'revlist' is
7520: 20 61 20 6c 69 73 74 20 6f 66 20 6f 62 6a 65 63   a list of objec
7530: 74 20 72 65 66 65 72 65 6e 63 65 73 20 66 6f 72  t references for
7540: 20 74 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e   the..# revision
7550: 73 20 74 68 61 74 20 68 61 76 65 20 62 65 65 6e  s that have been
7560: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62   determined to b
7570: 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61  e non-trunk defa
7580: 75 6c 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65  ult..# branch re
7590: 76 69 73 69 6f 6e 73 2e 0a 0a 09 23 20 4e 6f 74  visions....# Not
75a0: 65 20 74 68 61 74 20 74 68 65 20 66 69 72 73 74  e that the first
75b0: 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65   revision on the
75c0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
75d0: 69 73 0a 09 23 20 68 61 6e 64 6c 65 64 20 73 74  is..# handled st
75e0: 72 61 6e 67 65 6c 79 20 62 79 20 43 56 53 2e 20  rangely by CVS. 
75f0: 20 49 66 20 61 20 66 69 6c 65 20 69 73 20 69 6d   If a file is im
7600: 70 6f 72 74 65 64 20 28 61 73 20 6f 70 70 6f 73  ported (as oppos
7610: 65 64 0a 09 23 20 74 6f 20 62 65 69 6e 67 20 61  ed..# to being a
7620: 64 64 65 64 29 2c 20 43 56 53 20 63 72 65 61 74  dded), CVS creat
7630: 65 73 20 61 20 31 2e 31 20 72 65 76 69 73 69 6f  es a 1.1 revisio
7640: 6e 2c 20 74 68 65 6e 20 63 72 65 61 74 65 73 20  n, then creates 
7650: 61 0a 09 23 20 76 65 6e 64 6f 72 20 62 72 61 6e  a..# vendor bran
7660: 63 68 20 31 2e 31 2e 31 20 62 61 73 65 64 20 6f  ch 1.1.1 based o
7670: 6e 20 31 2e 31 2c 20 74 68 65 6e 20 63 72 65 61  n 1.1, then crea
7680: 74 65 73 20 61 20 31 2e 31 2e 31 2e 31 0a 09 23  tes a 1.1.1.1..#
7690: 20 72 65 76 69 73 69 6f 6e 20 74 68 61 74 20 69   revision that i
76a0: 73 20 69 64 65 6e 74 69 63 61 6c 20 74 6f 20 74  s identical to t
76b0: 68 65 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20  he 1.1 revision 
76c0: 28 69 2e 65 2e 2c 20 69 74 73 0a 09 23 20 64 65  (i.e., its..# de
76d0: 6c 74 61 74 65 78 74 20 69 73 20 65 6d 70 74 79  ltatext is empty
76e0: 29 2e 20 20 54 68 65 20 6c 6f 67 20 6d 65 73 73  ).  The log mess
76f0: 61 67 65 20 74 68 61 74 20 74 68 65 20 75 73 65  age that the use
7700: 72 20 74 79 70 65 64 0a 09 23 20 77 68 65 6e 20  r typed..# when 
7710: 69 6d 70 6f 72 74 69 6e 67 20 69 73 20 73 74 6f  importing is sto
7720: 72 65 64 20 77 69 74 68 20 74 68 65 20 31 2e 31  red with the 1.1
7730: 2e 31 2e 31 20 72 65 76 69 73 69 6f 6e 2e 20 20  .1.1 revision.  
7740: 54 68 65 20 31 2e 31 0a 09 23 20 72 65 76 69 73  The 1.1..# revis
7750: 69 6f 6e 20 61 6c 77 61 79 73 20 63 6f 6e 74 61  ion always conta
7760: 69 6e 73 20 61 20 73 74 61 6e 64 61 72 64 2c 20  ins a standard, 
7770: 67 65 6e 65 72 61 74 65 64 20 6c 6f 67 20 6d 65  generated log me
7780: 73 73 61 67 65 2c 0a 09 23 20 27 49 6e 69 74 69  ssage,..# 'Initi
7790: 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 27 2e 0a  al revision\n'..
77a0: 0a 09 23 20 57 68 65 6e 20 77 65 20 64 65 74 65  ..# When we dete
77b0: 63 74 20 61 20 73 74 72 61 69 67 68 74 66 6f 72  ct a straightfor
77c0: 77 61 72 64 20 69 6d 70 6f 72 74 20 6c 69 6b 65  ward import like
77d0: 20 74 68 69 73 2c 20 77 65 20 77 61 6e 74 0a 09   this, we want..
77e0: 23 20 74 6f 20 68 61 6e 64 6c 65 20 69 74 20 62  # to handle it b
77f0: 79 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 31  y deleting the 1
7800: 2e 31 20 72 65 76 69 73 69 6f 6e 20 28 77 68 69  .1 revision (whi
7810: 63 68 20 64 6f 65 73 6e 27 74 0a 09 23 20 63 6f  ch doesn't..# co
7820: 6e 74 61 69 6e 20 61 6e 79 20 75 73 65 66 75 6c  ntain any useful
7830: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 29 20 61 6e   information) an
7840: 64 20 6d 61 6b 69 6e 67 20 31 2e 31 2e 31 2e 31  d making 1.1.1.1
7850: 20 69 6e 74 6f 20 61 6e 0a 09 23 20 69 6e 64 65   into an..# inde
7860: 70 65 6e 64 65 6e 74 20 72 6f 6f 74 20 69 6e 20  pendent root in 
7870: 74 68 65 20 66 69 6c 65 27 73 20 64 65 70 65 6e  the file's depen
7880: 64 65 6e 63 79 20 74 72 65 65 2e 20 20 49 6e 20  dency tree.  In 
7890: 53 56 4e 2c 0a 09 23 20 31 2e 31 2e 31 2e 31 20  SVN,..# 1.1.1.1 
78a0: 77 69 6c 6c 20 62 65 20 61 64 64 65 64 20 64 69  will be added di
78b0: 72 65 63 74 6c 79 20 74 6f 20 74 68 65 20 76 65  rectly to the ve
78c0: 6e 64 6f 72 20 62 72 61 6e 63 68 20 77 69 74 68  ndor branch with
78d0: 20 69 74 73 0a 09 23 20 69 6e 69 74 69 61 6c 20   its..# initial 
78e0: 63 6f 6e 74 65 6e 74 2e 20 20 54 68 65 6e 20 69  content.  Then i
78f0: 6e 20 61 20 73 70 65 63 69 61 6c 20 27 70 6f 73  n a special 'pos
7900: 74 2d 63 6f 6d 6d 69 74 27 2c 20 74 68 65 0a 09  t-commit', the..
7910: 23 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69  # 1.1.1.1 revisi
7920: 6f 6e 20 69 73 20 63 6f 70 69 65 64 20 62 61 63  on is copied bac
7930: 6b 20 74 6f 20 74 72 75 6e 6b 2e 0a 0a 09 23 20  k to trunk....# 
7940: 49 66 20 74 68 65 20 75 73 65 72 20 69 6d 70 6f  If the user impo
7950: 72 74 73 20 61 67 61 69 6e 20 74 6f 20 74 68 65  rts again to the
7960: 20 73 61 6d 65 20 76 65 6e 64 6f 72 20 62 72 61   same vendor bra
7970: 6e 63 68 2c 20 74 68 65 6e 20 43 56 53 0a 09 23  nch, then CVS..#
7980: 20 63 72 65 61 74 65 73 20 72 65 76 69 73 69 6f   creates revisio
7990: 6e 73 20 31 2e 31 2e 31 2e 32 2c 20 31 2e 31 2e  ns 1.1.1.2, 1.1.
79a0: 31 2e 33 2c 20 65 74 63 2e 20 6f 6e 20 74 68 65  1.3, etc. on the
79b0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 0a   vendor branch,.
79c0: 09 23 20 2a 77 69 74 68 6f 75 74 2a 20 63 6f 75  .# *without* cou
79d0: 6e 74 65 72 70 61 72 74 73 20 69 6e 20 74 72 75  nterparts in tru
79e0: 6e 6b 20 28 65 76 65 6e 20 74 68 6f 75 67 68 20  nk (even though 
79f0: 74 68 65 73 65 20 72 65 76 69 73 69 6f 6e 73 0a  these revisions.
7a00: 09 23 20 65 66 66 65 63 74 69 76 65 6c 79 20 70  .# effectively p
7a10: 6c 61 79 20 74 68 65 20 72 6f 6c 65 20 6f 66 20  lay the role of 
7a20: 74 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 29  trunk revisions)
7a30: 2e 20 20 53 6f 20 61 66 74 65 72 20 77 65 20 61  .  So after we a
7a40: 64 64 0a 09 23 20 73 75 63 68 20 72 65 76 69 73  dd..# such revis
7a50: 69 6f 6e 73 20 74 6f 20 74 68 65 20 76 65 6e 64  ions to the vend
7a60: 6f 72 20 62 72 61 6e 63 68 2c 20 77 65 20 61 6c  or branch, we al
7a70: 73 6f 20 63 6f 70 79 20 74 68 65 6d 20 62 61 63  so copy them bac
7a80: 6b 20 74 6f 0a 09 23 20 74 72 75 6e 6b 20 69 6e  k to..# trunk in
7a90: 20 70 6f 73 74 2d 63 6f 6d 6d 69 74 73 2e 0a 0a   post-commits...
7aa0: 09 23 20 57 65 20 6d 61 72 6b 20 74 68 65 20 72  .# We mark the r
7ab0: 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69  evisions found i
7ac0: 6e 20 27 72 65 76 6c 69 73 74 27 20 61 73 20 64  n 'revlist' as d
7ad0: 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09 23  efault branch..#
7ae0: 20 72 65 76 69 73 69 6f 6e 73 2e 20 20 41 6c 73   revisions.  Als
7af0: 6f 2c 20 69 66 20 74 68 65 20 72 6f 6f 74 20 72  o, if the root r
7b00: 65 76 69 73 69 6f 6e 20 68 61 73 20 61 20 70 72  evision has a pr
7b10: 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 23 20 77  imary child..# w
7b20: 65 20 73 65 74 20 74 68 61 74 20 72 65 76 69 73  e set that revis
7b30: 69 6f 6e 20 74 6f 20 64 65 70 65 6e 64 20 6f 6e  ion to depend on
7b40: 20 74 68 65 20 6c 61 73 74 20 6e 6f 6e 2d 74 72   the last non-tr
7b50: 75 6e 6b 20 64 65 66 61 75 6c 74 0a 09 23 20 62  unk default..# b
7b60: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 61  ranch revision a
7b70: 6e 64 20 70 6f 73 73 69 62 6c 79 20 61 64 6a 75  nd possibly adju
7b80: 73 74 20 69 74 73 20 74 79 70 65 20 61 63 63 6f  st its type acco
7b90: 72 64 69 6e 67 6c 79 2e 0a 0a 09 73 65 74 20 66  rdingly....set f
7ba0: 69 72 73 74 20 5b 6c 69 6e 64 65 78 20 24 72 65  irst [lindex $re
7bb0: 76 6c 69 73 74 20 30 5d 0a 0a 09 6c 6f 67 20 77  vlist 0]...log w
7bc0: 72 69 74 65 20 36 20 66 69 6c 65 20 22 3c 5b 24  rite 6 file "<[$
7bd0: 66 69 72 73 74 20 72 65 76 6e 72 5d 3e 20 5b 65  first revnr]> [e
7be0: 78 70 72 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64  xpr {$myimported
7bf0: 20 3f 20 22 69 6d 70 6f 72 74 65 64 22 20 3a 20   ? "imported" : 
7c00: 22 6e 6f 74 20 69 6d 70 6f 72 74 65 64 22 7d 5d  "not imported"}]
7c10: 2c 20 5b 24 66 69 72 73 74 20 6f 70 65 72 61 74  , [$first operat
7c20: 69 6f 6e 5d 2c 20 5b 65 78 70 72 20 7b 5b 24 66  ion], [expr {[$f
7c30: 69 72 73 74 20 68 61 73 74 65 78 74 5d 20 3f 20  irst hastext] ? 
7c40: 22 68 61 73 20 74 65 78 74 22 20 3a 20 22 6e 6f  "has text" : "no
7c50: 20 74 65 78 74 22 7d 5d 22 0a 0a 09 69 66 20 7b   text"}]"...if {
7c60: 24 6d 79 69 6d 70 6f 72 74 65 64 20 26 26 0a 09  $myimported &&..
7c70: 20 20 20 20 5b 24 66 69 72 73 74 20 72 65 76 6e      [$first revn
7c80: 72 5d 20 65 71 20 22 31 2e 31 2e 31 2e 31 22 20  r] eq "1.1.1.1" 
7c90: 26 26 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20  &&..    [$first 
7ca0: 6f 70 65 72 61 74 69 6f 6e 5d 20 65 71 20 22 63  operation] eq "c
7cb0: 68 61 6e 67 65 22 20 26 26 0a 09 20 20 20 20 21  hange" &&..    !
7cc0: 5b 24 66 69 72 73 74 20 68 61 73 74 65 78 74 5d  [$first hastext]
7cd0: 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74 20 72 65  } {...    set re
7ce0: 76 31 31 20 5b 24 66 69 72 73 74 20 70 61 72 65  v11 [$first pare
7cf0: 6e 74 5d 20 3b 20 23 20 41 73 73 65 72 74 3a 20  nt] ; # Assert: 
7d00: 53 68 6f 75 6c 64 20 62 65 20 6d 79 72 6f 6f 74  Should be myroot
7d10: 2e 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  ...    log write
7d20: 20 33 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e   3 file "Removin
7d30: 67 20 69 72 72 65 6c 65 76 61 6e 74 20 72 65 76  g irrelevant rev
7d40: 69 73 69 6f 6e 20 5b 24 72 65 76 31 31 20 72 65  ision [$rev11 re
7d50: 76 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 43 75  vnr]"...    # Cu
7d60: 74 20 6f 75 74 20 74 68 65 20 6f 6c 64 20 6d 79  t out the old my
7d70: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a  root revision...
7d80: 09 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72  .    ldelete myr
7d90: 6f 6f 74 73 20 24 72 65 76 31 31 20 3b 20 23 20  oots $rev11 ; # 
7da0: 4e 6f 74 20 61 20 72 6f 6f 74 20 61 6e 79 20 6c  Not a root any l
7db0: 6f 6e 67 65 72 2e 0a 0a 09 20 20 20 20 24 66 69  onger....    $fi
7dc0: 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e  rst cutfromparen
7dd0: 74 20 3b 20 23 20 53 65 76 65 72 20 72 65 76 69  t ; # Sever revi
7de0: 73 69 6f 6e 20 66 72 6f 6d 20 70 61 72 65 6e 74  sion from parent
7df0: 20 72 65 76 69 73 69 6f 6e 2e 0a 09 20 20 20 20   revision...    
7e00: 69 66 20 7b 24 73 74 6f 70 20 6e 65 20 22 22 7d  if {$stop ne ""}
7e10: 20 7b 0a 09 09 24 73 74 6f 70 20 63 75 74 66 72   {...$stop cutfr
7e20: 6f 6d 70 61 72 65 6e 74 0a 09 09 6c 61 70 70 65  omparent...lappe
7e30: 6e 64 20 6d 79 72 6f 6f 74 73 20 24 73 74 6f 70  nd myroots $stop
7e40: 20 3b 20 23 20 4e 65 77 20 72 6f 6f 74 2c 20 61   ; # New root, a
7e50: 66 74 65 72 20 76 65 6e 64 6f 72 20 62 72 61 6e  fter vendor bran
7e60: 63 68 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  ch..    }...    
7e70: 23 20 43 75 74 20 6f 75 74 20 74 68 65 20 76 65  # Cut out the ve
7e80: 6e 64 6f 72 20 62 72 61 6e 63 68 20 73 79 6d 62  ndor branch symb
7e90: 6f 6c 0a 0a 09 20 20 20 20 73 65 74 20 76 65 6e  ol...    set ven
7ea0: 64 6f 72 20 5b 24 66 69 72 73 74 20 70 61 72 65  dor [$first pare
7eb0: 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20 20 20 69  ntbranch]..    i
7ec0: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20  ntegrity assert 
7ed0: 7b 24 76 65 6e 64 6f 72 20 6e 65 20 22 22 7d 20  {$vendor ne ""} 
7ee0: 7b 46 69 72 73 74 20 4e 54 44 42 20 72 65 76 69  {First NTDB revi
7ef0: 73 69 6f 6e 20 68 61 73 20 6e 6f 20 62 72 61 6e  sion has no bran
7f00: 63 68 7d 0a 09 20 20 20 20 69 66 20 7b 5b 24 76  ch}..    if {[$v
7f10: 65 6e 64 6f 72 20 70 61 72 65 6e 74 5d 20 65 71  endor parent] eq
7f20: 20 24 72 65 76 31 31 7d 20 7b 0a 09 09 24 72 65   $rev11} {...$re
7f30: 76 31 31 20 72 65 6d 6f 76 65 62 72 61 6e 63 68  v11 removebranch
7f40: 20 20 20 20 20 20 20 20 24 76 65 6e 64 6f 72 0a          $vendor.
7f50: 09 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 63  ..$rev11 removec
7f60: 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 66 69  hildonbranch $fi
7f70: 72 73 74 0a 09 09 24 76 65 6e 64 6f 72 20 63 75  rst...$vendor cu
7f80: 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 20 20  tbranchparent   
7f90: 20 3b 23 20 62 70 20 3d 20 72 65 76 31 31 2c 20   ;# bp = rev11, 
7fa0: 61 62 6f 75 74 20 74 6f 20 62 65 20 67 6f 6e 65  about to be gone
7fb0: 0a 09 09 24 66 69 72 73 74 20 63 75 74 66 72 6f  ...$first cutfro
7fc0: 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 20 3b 23  mparentbranch ;#
7fd0: 20 70 62 20 3d 20 76 65 6e 64 6f 72 2c 20 74 6f   pb = vendor, to
7fe0: 20 62 65 20 61 20 64 65 74 61 63 68 65 64 20 4c   be a detached L
7ff0: 4f 44 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72  OD...lappend myr
8000: 6f 6f 74 73 20 24 66 69 72 73 74 0a 09 20 20 20  oots $first..   
8010: 20 7d 0a 0a 09 20 20 20 20 23 20 43 68 61 6e 67   }...    # Chang
8020: 65 20 74 68 65 20 74 79 70 65 20 6f 66 20 66 69  e the type of fi
8030: 72 73 74 20 28 74 79 70 69 63 61 6c 6c 79 20 66  rst (typically f
8040: 72 6f 6d 20 43 68 61 6e 67 65 20 74 6f 20 41 64  rom Change to Ad
8050: 64 29 3a 0a 09 20 20 20 20 24 66 69 72 73 74 20  d):..    $first 
8060: 72 65 74 79 70 65 20 61 64 64 0a 0a 09 20 20 20  retype add...   
8070: 20 23 20 4d 6f 76 65 20 61 6e 79 20 74 61 67 73   # Move any tags
8080: 20 61 6e 64 20 62 72 61 6e 63 68 65 73 20 66 72   and branches fr
8090: 6f 6d 20 74 68 65 20 6f 6c 64 20 74 6f 20 74 68  om the old to th
80a0: 65 20 6e 65 77 20 72 6f 6f 74 2e 0a 09 20 20 20  e new root...   
80b0: 20 24 72 65 76 31 31 20 6d 6f 76 65 73 79 6d 62   $rev11 movesymb
80c0: 6f 6c 73 74 6f 20 24 66 69 72 73 74 0a 09 7d 0a  olsto $first..}.
80d0: 0a 09 23 20 4d 61 72 6b 20 61 6c 6c 20 74 68 65  ..# Mark all the
80e0: 20 73 70 65 63 69 61 6c 20 72 65 76 69 73 69 6f   special revisio
80f0: 6e 73 20 61 73 20 73 75 63 68 0a 09 66 6f 72 65  ns as such..fore
8100: 61 63 68 20 72 65 76 20 24 72 65 76 6c 69 73 74  ach rev $revlist
8110: 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74   {..    log writ
8120: 65 20 33 20 66 69 6c 65 20 22 52 65 76 69 73 69  e 3 file "Revisi
8130: 6f 6e 20 6f 6e 20 64 65 66 61 75 6c 74 20 62 72  on on default br
8140: 61 6e 63 68 3a 20 5b 24 72 65 76 20 72 65 76 6e  anch: [$rev revn
8150: 72 5d 22 0a 09 20 20 20 20 24 72 65 76 20 73 65  r]"..    $rev se
8160: 74 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68  tondefaultbranch
8170: 20 31 0a 09 7d 0a 0a 09 69 66 20 7b 24 73 74 6f   1..}...if {$sto
8180: 70 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20  p ne ""} {..    
8190: 23 20 52 65 76 69 73 69 6f 6e 20 31 2e 32 20 6c  # Revision 1.2 l
81a0: 6f 67 69 63 61 6c 6c 79 20 66 6f 6c 6c 6f 77 73  ogically follows
81b0: 20 74 68 65 20 69 6d 70 6f 72 74 65 64 20 72 65   the imported re
81c0: 76 69 73 69 6f 6e 73 2c 0a 09 20 20 20 20 23 20  visions,..    # 
81d0: 6e 6f 74 20 31 2e 31 2e 20 20 41 63 63 6f 72 64  not 1.1.  Accord
81e0: 69 6e 67 6c 79 2c 20 63 6f 6e 6e 65 63 74 20 69  ingly, connect i
81f0: 74 20 74 6f 20 74 68 65 20 6c 61 73 74 20 4e 54  t to the last NT
8200: 44 42 52 20 61 6e 64 0a 09 20 20 20 20 23 20 70  DBR and..    # p
8210: 6f 73 73 69 62 6c 79 20 63 68 61 6e 67 65 20 69  ossibly change i
8220: 74 73 20 74 79 70 65 2e 0a 0a 09 20 20 20 20 73  ts type....    s
8230: 65 74 20 6c 61 73 74 20 5b 6c 69 6e 64 65 78 20  et last [lindex 
8240: 24 72 65 76 6c 69 73 74 20 65 6e 64 5d 0a 09 20  $revlist end].. 
8250: 20 20 20 24 73 74 6f 70 20 73 65 74 64 65 66 61     $stop setdefa
8260: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20  ultbranchparent 
8270: 24 6c 61 73 74 20 3b 20 23 20 52 65 74 79 70 65  $last ; # Retype
8280: 73 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74  s the revision t
8290: 6f 6f 2e 0a 09 20 20 20 20 24 6c 61 73 74 20 73  oo...    $last s
82a0: 65 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63  etdefaultbranchc
82b0: 68 69 6c 64 20 20 24 73 74 6f 70 0a 09 7d 0a 09  hild  $stop..}..
82c0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
82d0: 20 20 6d 65 74 68 6f 64 20 43 68 65 63 6b 4c 4f    method CheckLO
82e0: 44 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68  Ds {} {..foreach
82f0: 20 7b 5f 20 62 72 61 6e 63 68 7d 20 20 5b 61 72   {_ branch}  [ar
8300: 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63 68  ray get mybranch
8310: 65 73 5d 20 7b 20 24 62 72 61 6e 63 68 20 63 68  es] { $branch ch
8320: 65 63 6b 6c 6f 64 20 7d 0a 09 66 6f 72 65 61 63  ecklod }..foreac
8330: 68 20 7b 5f 20 74 61 67 6c 69 73 74 7d 20 5b 61  h {_ taglist} [a
8340: 72 72 61 79 20 67 65 74 20 6d 79 74 61 67 73 5d  rray get mytags]
8350: 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20   {..    foreach 
8360: 74 61 67 20 24 74 61 67 6c 69 73 74 20 7b 20 24  tag $taglist { $
8370: 74 61 67 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09  tag checklod }..
8380: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
8390: 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f  .    method Remo
83a0: 76 65 49 72 72 65 6c 65 76 61 6e 74 44 65 6c 65  veIrrelevantDele
83b0: 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23 20 46 72  tions {} {..# Fr
83c0: 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49 66 20 61  om cvs2svn: If a
83d0: 20 66 69 6c 65 20 69 73 20 61 64 64 65 64 20 6f   file is added o
83e0: 6e 20 61 20 62 72 61 6e 63 68 2c 20 74 68 65 6e  n a branch, then
83f0: 20 61 20 74 72 75 6e 6b 0a 09 23 20 72 65 76 69   a trunk..# revi
8400: 73 69 6f 6e 20 69 73 20 61 64 64 65 64 20 61 74  sion is added at
8410: 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65 20 69   the same time i
8420: 6e 20 74 68 65 20 27 44 65 61 64 27 20 73 74 61  n the 'Dead' sta
8430: 74 65 2e 0a 09 23 20 54 68 69 73 20 72 65 76 69  te...# This revi
8440: 73 69 6f 6e 20 64 6f 65 73 6e 27 74 20 64 6f 20  sion doesn't do 
8450: 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 2c  anything useful,
8460: 20 73 6f 20 64 65 6c 65 74 65 20 69 74 2e 0a 0a   so delete it...
8470: 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d  .foreach root $m
8480: 79 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 69 66  yroots {..    if
8490: 20 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65   {[$root isneede
84a0: 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  d]} continue..  
84b0: 20 20 6c 6f 67 20 77 72 69 74 65 20 32 20 66 69    log write 2 fi
84c0: 6c 65 20 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e  le "Removing unn
84d0: 65 63 65 73 73 61 72 79 20 64 65 61 64 20 72 65  ecessary dead re
84e0: 76 69 73 69 6f 6e 20 5b 24 72 6f 6f 74 20 72 65  vision [$root re
84f0: 76 6e 72 5d 22 0a 0a 09 20 20 20 20 23 20 52 65  vnr]"...    # Re
8500: 6d 6f 76 65 20 61 73 20 72 6f 6f 74 2c 20 6d 61  move as root, ma
8510: 6b 65 20 69 74 73 20 63 68 69 6c 64 20 6e 65 77  ke its child new
8520: 20 72 6f 6f 74 20 61 66 74 65 72 0a 09 20 20 20   root after..   
8530: 20 23 20 64 69 73 63 6f 6e 6e 65 63 74 69 6e 67   # disconnecting
8540: 20 69 74 20 66 72 6f 6d 20 74 68 65 20 72 65 76   it from the rev
8550: 69 73 69 6f 6e 20 6a 75 73 74 20 67 6f 69 6e 67  ision just going
8560: 20 61 77 61 79 2e 0a 0a 09 20 20 20 20 6c 64 65   away....    lde
8570: 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 6f  lete myroots $ro
8580: 6f 74 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f  ot..    if {[$ro
8590: 6f 74 20 68 61 73 63 68 69 6c 64 5d 7d 20 7b 0a  ot haschild]} {.
85a0: 09 09 73 65 74 20 63 68 69 6c 64 20 5b 24 72 6f  ..set child [$ro
85b0: 6f 74 20 63 68 69 6c 64 5d 0a 09 09 24 63 68 69  ot child]...$chi
85c0: 6c 64 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74  ld cutfromparent
85d0: 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f  ...lappend myroo
85e0: 74 73 20 24 63 68 69 6c 64 0a 09 20 20 20 20 7d  ts $child..    }
85f0: 0a 0a 09 20 20 20 20 23 20 43 75 74 20 6f 75 74  ...    # Cut out
8600: 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 73 70   the branches sp
8610: 61 77 6e 65 64 20 62 79 20 74 68 65 20 72 65 76  awned by the rev
8620: 69 73 69 6f 6e 20 74 6f 20 62 65 0a 09 20 20 20  ision to be..   
8630: 20 23 20 64 65 6c 65 74 65 64 2e 20 49 66 20 74   # deleted. If t
8640: 68 65 20 62 72 61 6e 63 68 20 68 61 73 20 72 65  he branch has re
8650: 76 69 73 69 6f 6e 73 20 74 68 65 79 20 73 68 6f  visions they sho
8660: 75 6c 64 20 61 6c 72 65 61 64 79 0a 09 20 20 20  uld already..   
8670: 20 23 20 75 73 65 20 6f 70 65 72 61 74 69 6f 6e   # use operation
8680: 20 27 61 64 64 27 2c 20 6e 6f 20 6e 65 65 64 20   'add', no need 
8690: 74 6f 20 63 68 61 6e 67 65 20 74 68 61 74 2e 20  to change that. 
86a0: 54 68 65 20 66 69 72 73 74 0a 09 20 20 20 20 23  The first..    #
86b0: 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 65 61 63   revision on eac
86c0: 68 20 62 72 61 6e 63 68 20 62 65 63 6f 6d 65 73  h branch becomes
86d0: 20 61 20 6e 65 77 20 61 6e 64 20 64 69 73 63 6f   a new and disco
86e0: 6e 6e 65 63 74 65 64 0a 09 20 20 20 20 23 20 72  nnected..    # r
86f0: 6f 6f 74 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61  oot....    forea
8700: 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74  ch branch [$root
8710: 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 24   branches] {...$
8720: 62 72 61 6e 63 68 20 63 75 74 62 72 61 6e 63 68  branch cutbranch
8730: 70 61 72 65 6e 74 0a 09 09 69 66 20 7b 21 5b 24  parent...if {![$
8740: 62 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d  branch haschild]
8750: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 09 73 65 74  } continue...set
8760: 20 66 69 72 73 74 20 5b 24 62 72 61 6e 63 68 20   first [$branch 
8770: 63 68 69 6c 64 5d 0a 09 09 24 66 69 72 73 74 20  child]...$first 
8780: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09  cutfromparent...
8790: 6c 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20  lappend myroots 
87a0: 24 66 69 72 73 74 0a 09 20 20 20 20 7d 0a 09 20  $first..    }.. 
87b0: 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61     $root removea
87c0: 6c 6c 62 72 61 6e 63 68 65 73 0a 0a 09 20 20 20  llbranches...   
87d0: 20 23 20 54 61 67 67 69 6e 67 20 61 20 64 65 61   # Tagging a dea
87e0: 64 20 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e  d revision doesn
87f0: 27 74 20 64 6f 20 61 6e 79 74 68 69 6e 67 2c 20  't do anything, 
8800: 73 6f 20 72 65 6d 6f 76 65 0a 09 20 20 20 20 23  so remove..    #
8810: 20 61 6e 79 20 74 61 67 73 20 74 68 61 74 20 77   any tags that w
8820: 65 72 65 20 73 65 74 20 6f 6e 20 69 74 2e 0a 0a  ere set on it...
8830: 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f 76  .    $root remov
8840: 65 61 6c 6c 74 61 67 73 0a 0a 09 20 20 20 20 23  ealltags...    #
8850: 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 20 68   This can only h
8860: 61 70 70 65 6e 20 6f 6e 63 65 20 70 65 72 20 66  appen once per f
8870: 69 6c 65 2c 20 61 6e 64 20 77 65 20 6d 69 67 68  ile, and we migh
8880: 74 20 68 61 76 65 0a 09 20 20 20 20 23 20 6a 75  t have..    # ju
8890: 73 74 20 63 68 61 6e 67 65 64 20 6d 79 72 6f 6f  st changed myroo
88a0: 74 73 2c 20 73 6f 20 65 6e 64 20 74 68 65 20 6c  ts, so end the l
88b0: 6f 6f 70 0a 09 20 20 20 20 62 72 65 61 6b 0a 09  oop..    break..
88c0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
88d0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65 6d 6f  .    method Remo
88e0: 76 65 49 6e 69 74 69 61 6c 42 72 61 6e 63 68 44  veInitialBranchD
88f0: 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23  eletions {} {..#
8900: 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20 49   From cvs2svn: I
8910: 66 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69  f the first revi
8920: 73 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68  sion on a branch
8930: 20 69 73 20 61 6e 0a 09 23 20 75 6e 6e 65 63 65   is an..# unnece
8940: 73 73 61 72 79 20 64 65 6c 65 74 65 2c 20 72 65  ssary delete, re
8950: 6d 6f 76 65 20 69 74 2e 0a 09 23 0a 09 23 20 49  move it...#..# I
8960: 66 20 61 20 66 69 6c 65 20 69 73 20 61 64 64 65  f a file is adde
8970: 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 28 77  d on a branch (w
8980: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 69 74  hether or not it
8990: 20 61 6c 72 65 61 64 79 0a 09 23 20 65 78 69 73   already..# exis
89a0: 74 65 64 20 6f 6e 20 74 72 75 6e 6b 29 2c 20 74  ted on trunk), t
89b0: 68 65 6e 20 6e 65 77 20 76 65 72 73 69 6f 6e 73  hen new versions
89c0: 20 6f 66 20 43 56 53 20 61 64 64 20 61 20 66 69   of CVS add a fi
89d0: 72 73 74 0a 09 23 20 62 72 61 6e 63 68 20 72 65  rst..# branch re
89e0: 76 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 27 64  vision in the 'd
89f0: 65 61 64 27 20 73 74 61 74 65 20 28 74 6f 20 69  ead' state (to i
8a00: 6e 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65  ndicate that the
8a10: 0a 09 23 20 66 69 6c 65 20 64 69 64 20 6e 6f 74  ..# file did not
8a20: 20 65 78 69 73 74 20 6f 6e 20 74 68 65 20 62 72   exist on the br
8a30: 61 6e 63 68 20 77 68 65 6e 20 74 68 65 20 62 72  anch when the br
8a40: 61 6e 63 68 20 77 61 73 0a 09 23 20 63 72 65 61  anch was..# crea
8a50: 74 65 64 29 20 66 6f 6c 6c 6f 77 65 64 20 62 79  ted) followed by
8a60: 20 74 68 65 20 73 65 63 6f 6e 64 20 62 72 61 6e   the second bran
8a70: 63 68 20 72 65 76 69 73 69 6f 6e 2c 20 77 68 69  ch revision, whi
8a80: 63 68 20 69 73 20 61 6e 0a 09 23 20 61 64 64 2e  ch is an..# add.
8a90: 20 20 57 68 65 6e 20 77 65 20 65 6e 63 6f 75 6e    When we encoun
8aa0: 74 65 72 20 74 68 69 73 20 73 69 74 75 61 74 69  ter this situati
8ab0: 6f 6e 2c 20 77 65 20 73 65 76 65 72 20 74 68 65  on, we sever the
8ac0: 20 62 72 61 6e 63 68 0a 09 23 20 66 72 6f 6d 20   branch..# from 
8ad0: 74 72 75 6e 6b 20 61 6e 64 20 64 65 6c 65 74 65  trunk and delete
8ae0: 20 74 68 65 20 66 69 72 73 74 20 62 72 61 6e 63   the first branc
8af0: 68 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23 20  h revision....# 
8b00: 41 74 20 74 68 69 73 20 70 6f 69 6e 74 20 77 65  At this point we
8b10: 20 6d 61 79 20 68 61 76 65 20 61 6c 72 65 61 64   may have alread
8b20: 79 20 6d 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73  y multiple roots
8b30: 20 69 6e 20 6d 79 72 6f 6f 74 73 2c 0a 09 23 20   in myroots,..# 
8b40: 77 65 20 68 61 76 65 20 74 6f 20 70 72 6f 63 65  we have to proce
8b50: 73 73 20 74 68 65 6d 20 61 6c 6c 2e 0a 0a 09 66  ss them all....f
8b60: 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24 73 65  oreach root [$se
8b70: 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f  lf LinesOfDevelo
8b80: 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66  pment] {..    if
8b90: 20 7b 5b 24 72 6f 6f 74 20 69 73 6e 65 65 64 65   {[$root isneede
8ba0: 64 62 72 61 6e 63 68 64 65 6c 5d 7d 20 63 6f 6e  dbranchdel]} con
8bb0: 74 69 6e 75 65 0a 09 20 20 20 20 6c 6f 67 20 77  tinue..    log w
8bc0: 72 69 74 65 20 32 20 66 69 6c 65 20 22 52 65 6d  rite 2 file "Rem
8bd0: 6f 76 69 6e 67 20 75 6e 6e 65 63 65 73 73 61 72  oving unnecessar
8be0: 79 20 69 6e 69 74 69 61 6c 20 62 72 61 6e 63 68  y initial branch
8bf0: 20 64 65 6c 65 74 65 20 5b 24 72 6f 6f 74 20 72   delete [$root r
8c00: 65 76 6e 72 5d 22 0a 0a 09 20 20 20 20 73 65 74  evnr]"...    set
8c10: 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70   branch [$root p
8c20: 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 20 20  arentbranch]..  
8c30: 20 20 73 65 74 20 70 61 72 65 6e 74 20 5b 24 72    set parent [$r
8c40: 6f 6f 74 20 70 61 72 65 6e 74 5d 0a 09 20 20 20  oot parent]..   
8c50: 20 73 65 74 20 63 68 69 6c 64 20 20 5b 24 72 6f   set child  [$ro
8c60: 6f 74 20 63 68 69 6c 64 5d 0a 0a 09 20 20 20 20  ot child]...    
8c70: 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20  ldelete myroots 
8c80: 24 72 6f 6f 74 0a 09 20 20 20 20 6c 61 70 70 65  $root..    lappe
8c90: 6e 64 20 6d 79 72 6f 6f 74 73 20 24 63 68 69 6c  nd myroots $chil
8ca0: 64 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20  d...    $branch 
8cb0: 63 75 74 62 72 61 6e 63 68 70 61 72 65 6e 74 0a  cutbranchparent.
8cc0: 09 20 20 20 20 24 62 72 61 6e 63 68 20 63 75 74  .    $branch cut
8cd0: 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c  child..    $chil
8ce0: 64 20 20 63 75 74 66 72 6f 6d 70 61 72 65 6e 74  d  cutfromparent
8cf0: 0a 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73  ...    $branch s
8d00: 65 74 63 68 69 6c 64 20 20 20 20 20 20 20 20 24  etchild        $
8d10: 63 68 69 6c 64 0a 09 20 20 20 20 24 63 68 69 6c  child..    $chil
8d20: 64 20 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e  d  setparentbran
8d30: 63 68 20 24 62 72 61 6e 63 68 0a 0a 09 20 20 20  ch $branch...   
8d40: 20 24 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62   $parent removeb
8d50: 72 61 6e 63 68 20 20 20 20 20 20 20 20 24 62 72  ranch        $br
8d60: 61 6e 63 68 0a 09 20 20 20 20 24 70 61 72 65 6e  anch..    $paren
8d70: 74 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62  t removechildonb
8d80: 72 61 6e 63 68 20 24 72 6f 6f 74 0a 09 7d 0a 09  ranch $root..}..
8d90: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
8da0: 20 20 6d 65 74 68 6f 64 20 4c 69 6e 65 73 4f 66    method LinesOf
8db0: 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20 7b  Development {} {
8dc0: 0a 09 23 20 44 65 74 65 72 6d 69 6e 65 20 61 6c  ..# Determine al
8dd0: 6c 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c  l lines of devel
8de0: 6f 70 6d 65 6e 74 20 66 6f 72 20 74 68 65 20 66  opment for the f
8df0: 69 6c 65 2e 20 54 68 69 73 20 61 72 65 0a 09 23  ile. This are..#
8e00: 20 74 68 65 20 6b 6e 6f 77 6e 20 72 6f 6f 74 73   the known roots
8e10: 2c 20 61 6e 64 20 74 68 65 20 72 6f 6f 74 20 6f  , and the root o
8e20: 66 20 61 6c 6c 20 62 72 61 6e 63 68 65 73 20 66  f all branches f
8e30: 6f 75 6e 64 20 6f 6e 20 74 68 65 0a 09 23 20 6c  ound on the..# l
8e40: 69 6e 65 20 6f 66 20 70 72 69 6d 61 72 79 20 63  ine of primary c
8e50: 68 69 6c 64 72 65 6e 2e 0a 0a 09 73 65 74 20 6c  hildren....set l
8e60: 6f 64 72 6f 6f 74 73 20 7b 7d 0a 09 66 6f 72 65  odroots {}..fore
8e70: 61 63 68 20 72 6f 6f 74 20 24 6d 79 72 6f 6f 74  ach root $myroot
8e80: 73 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41  s {..    $self A
8e90: 64 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f  ddBranchedLinesO
8ea0: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 6c 6f 64  fDevelopment lod
8eb0: 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20  roots $root..   
8ec0: 20 6c 61 70 70 65 6e 64 20 6c 6f 64 72 6f 6f 74   lappend lodroot
8ed0: 73 20 24 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75  s $root..}..retu
8ee0: 72 6e 20 24 6c 6f 64 72 6f 6f 74 73 0a 20 20 20  rn $lodroots.   
8ef0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41   }..    method A
8f00: 64 64 42 72 61 6e 63 68 65 64 4c 69 6e 65 73 4f  ddBranchedLinesO
8f10: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 6c 76  fDevelopment {lv
8f20: 20 72 6f 6f 74 7d 20 7b 0a 09 75 70 76 61 72 20   root} {..upvar 
8f30: 31 20 24 6c 76 20 6c 6f 64 72 6f 6f 74 73 0a 09  1 $lv lodroots..
8f40: 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e 65 20  while {$root ne 
8f50: 22 22 7d 20 7b 0a 09 20 20 20 20 66 6f 72 65 61  ""} {..    forea
8f60: 63 68 20 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74  ch branch [$root
8f70: 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09 09 69   branches] {...i
8f80: 66 20 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73  f {![$branch has
8f90: 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65  child]} continue
8fa0: 0a 09 09 73 65 74 20 63 68 69 6c 64 20 5b 24 62  ...set child [$b
8fb0: 72 61 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 23  ranch child]...#
8fc0: 20 52 65 63 75 72 73 65 20 69 6e 74 6f 20 74 68   Recurse into th
8fd0: 65 20 62 72 61 6e 63 68 20 66 6f 72 20 64 65 65  e branch for dee
8fe0: 70 65 72 20 62 72 61 6e 63 68 65 73 2e 0a 09 09  per branches....
8ff0: 24 73 65 6c 66 20 41 64 64 42 72 61 6e 63 68 65  $self AddBranche
9000: 64 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d  dLinesOfDevelopm
9010: 65 6e 74 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68  ent lodroots $ch
9020: 69 6c 64 0a 09 09 6c 61 70 70 65 6e 64 20 6c 6f  ild...lappend lo
9030: 64 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20  droots $child.. 
9040: 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f     }..    set ro
9050: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d  ot [$root child]
9060: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
9070: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 45 78  }..    method Ex
9080: 63 6c 75 64 65 4e 6f 6e 54 72 75 6e 6b 49 6e 66  cludeNonTrunkInf
9090: 6f 72 6d 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23  ormation {} {..#
90a0: 20 52 65 6d 6f 76 65 20 61 6c 6c 20 6e 6f 6e 2d   Remove all non-
90b0: 74 72 75 6e 6b 20 62 72 61 6e 63 68 65 73 2c 20  trunk branches, 
90c0: 72 65 76 69 73 69 6f 6e 73 2c 20 61 6e 64 20 74  revisions, and t
90d0: 61 67 73 2e 20 57 65 20 64 6f 0a 09 23 20 6b 65  ags. We do..# ke
90e0: 65 70 20 74 68 65 20 74 61 67 73 20 77 68 69 63  ep the tags whic
90f0: 68 20 61 72 65 20 6f 6e 20 74 68 65 20 74 72 75  h are on the tru
9100: 6e 6b 2e 0a 0a 09 73 65 74 20 6e 74 64 62 72 6f  nk....set ntdbro
9110: 6f 74 20 22 22 0a 09 66 6f 72 65 61 63 68 20 72  ot ""..foreach r
9120: 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73  oot [$self Lines
9130: 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b  OfDevelopment] {
9140: 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 48 65  ..    # Note: He
9150: 72 65 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  re the order of 
9160: 74 68 65 20 72 6f 6f 74 73 20 69 73 20 69 6d 70  the roots is imp
9170: 6f 72 74 61 6e 74 2c 0a 09 20 20 20 20 23 20 69  ortant,..    # i
9180: 2e 65 2e 20 74 68 61 74 20 77 65 20 67 65 74 20  .e. that we get 
9190: 74 68 65 6d 20 69 6e 20 64 65 70 74 68 20 66 69  them in depth fi
91a0: 72 73 74 20 6f 72 64 65 72 2e 20 54 68 69 73 20  rst order. This 
91b0: 65 6e 73 75 72 65 73 0a 09 20 20 20 20 23 20 74  ensures..    # t
91c0: 68 61 74 20 74 68 65 20 72 65 6d 6f 76 61 6c 20  hat the removal 
91d0: 6f 66 20 61 20 62 72 61 6e 63 68 20 68 61 70 70  of a branch happ
91e0: 65 6e 73 20 6f 6e 6c 79 20 61 66 74 65 72 20 74  ens only after t
91f0: 68 65 0a 09 20 20 20 20 23 20 62 72 61 6e 63 68  he..    # branch
9200: 65 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20  es spawned from 
9210: 69 74 20 77 65 72 65 20 72 65 6d 6f 76 65 64 2e  it were removed.
9220: 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 0a 09   Otherwise the..
9230: 20 20 20 20 23 20 73 79 73 74 65 6d 20 6d 69 67      # system mig
9240: 68 74 20 74 72 79 20 74 6f 20 61 63 63 65 73 73  ht try to access
9250: 20 64 65 6c 65 74 65 64 20 6f 62 6a 65 63 74 73   deleted objects
9260: 2e 0a 0a 09 20 20 20 20 23 20 44 6f 20 6e 6f 74  ....    # Do not
9270: 20 65 78 63 6c 75 64 65 20 74 68 65 20 74 72 75   exclude the tru
9280: 6e 6b 2e 0a 09 20 20 20 20 69 66 20 7b 5b 5b 24  nk...    if {[[$
9290: 72 6f 6f 74 20 6c 6f 64 5d 20 69 73 74 72 75 6e  root lod] istrun
92a0: 6b 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  k]} continue..  
92b0: 20 20 24 73 65 6c 66 20 45 78 63 6c 75 64 65 42    $self ExcludeB
92c0: 72 61 6e 63 68 20 24 72 6f 6f 74 20 6e 74 64 62  ranch $root ntdb
92d0: 72 6f 6f 74 0a 09 7d 0a 0a 09 69 66 20 7b 24 6e  root..}...if {$n
92e0: 74 64 62 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b  tdbroot ne ""} {
92f0: 0a 09 20 20 20 20 24 73 65 6c 66 20 47 72 61 66  ..    $self Graf
9300: 74 4e 54 44 42 32 54 72 75 6e 6b 20 24 6e 74 64  tNTDB2Trunk $ntd
9310: 62 72 6f 6f 74 0a 09 7d 0a 09 72 65 74 75 72 6e  broot..}..return
9320: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
9330: 6f 64 20 45 78 63 6c 75 64 65 42 72 61 6e 63 68  od ExcludeBranch
9340: 20 7b 72 6f 6f 74 20 6e 76 7d 20 7b 0a 09 23 20   {root nv} {..# 
9350: 45 78 63 6c 75 64 65 20 74 68 65 20 62 72 61 6e  Exclude the bran
9360: 63 68 2f 6c 6f 64 20 73 74 61 72 74 69 6e 67 20  ch/lod starting 
9370: 61 74 20 72 6f 6f 74 2c 20 61 20 72 65 76 69 73  at root, a revis
9380: 69 6f 6e 2e 0a 09 23 0a 09 23 20 49 66 20 74 68  ion...#..# If th
9390: 65 20 4c 4f 44 20 73 74 61 72 74 73 20 77 69 74  e LOD starts wit
93a0: 68 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61  h non-trunk defa
93b0: 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76 69 73  ult branch revis
93c0: 69 6f 6e 73 2c 0a 09 23 20 77 65 20 6c 65 61 76  ions,..# we leav
93d0: 65 20 74 68 65 6d 20 69 6e 20 70 6c 61 63 65 20  e them in place 
93e0: 61 6e 64 20 64 6f 20 6e 6f 74 20 64 65 6c 65 74  and do not delet
93f0: 65 20 74 68 65 20 62 72 61 6e 63 68 2e 20 49 6e  e the branch. In
9400: 20 74 68 61 74 0a 09 23 20 63 61 73 65 20 74 68   that..# case th
9410: 65 20 63 6f 6d 6d 61 6e 64 20 73 65 74 73 20 74  e command sets t
9420: 68 65 20 76 61 72 69 61 62 6c 65 20 69 6e 20 4e  he variable in N
9430: 56 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e  V so that we can
9440: 0a 09 23 20 6c 61 74 65 72 20 72 65 77 6f 72 6b  ..# later rework
9450: 20 74 68 65 73 65 20 72 65 76 69 73 6f 6e 73 20   these revisons 
9460: 74 6f 20 62 65 20 70 75 72 65 6c 79 20 74 72 75  to be purely tru
9470: 6e 6b 2e 0a 0a 09 69 66 20 7b 5b 24 72 6f 6f 74  nk....if {[$root
9480: 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e   isondefaultbran
9490: 63 68 5d 7d 20 7b 0a 09 20 20 20 20 23 20 48 61  ch]} {..    # Ha
94a0: 6e 64 6c 69 6e 67 20 61 20 4e 54 44 42 2e 20 54  ndling a NTDB. T
94b0: 68 69 73 20 62 72 61 6e 63 68 20 6d 61 79 20 63  his branch may c
94c0: 6f 6e 73 69 73 74 73 20 6e 6f 74 20 6f 6e 6c 79  onsists not only
94d0: 20 6f 66 0a 09 20 20 20 20 23 20 4e 54 44 42 20   of..    # NTDB 
94e0: 72 65 76 69 73 69 6f 6e 73 2c 20 62 75 74 20 61  revisions, but a
94f0: 6c 73 6f 20 73 6f 6d 65 20 6e 6f 6e 2d 4e 54 44  lso some non-NTD
9500: 42 2e 20 54 68 65 20 6c 61 74 74 65 72 20 61 72  B. The latter ar
9510: 65 0a 09 20 20 20 20 23 20 74 72 75 6c 79 20 6f  e..    # truly o
9520: 6e 20 61 20 62 72 61 6e 63 68 20 61 6e 64 20 68  n a branch and h
9530: 61 76 65 20 74 6f 20 62 65 20 65 78 63 6c 75 64  ave to be exclud
9540: 65 64 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  ed. The followin
9550: 67 0a 09 20 20 20 20 23 20 6c 6f 6f 70 20 64 65  g..    # loop de
9560: 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 72  termines if ther
9570: 65 20 61 72 65 20 73 75 63 68 20 72 65 76 69 73  e are such revis
9580: 69 6f 6e 73 2e 0a 0a 09 20 20 20 20 75 70 76 61  ions....    upva
9590: 72 20 31 20 24 6e 76 20 6e 74 64 62 72 6f 6f 74  r 1 $nv ntdbroot
95a0: 0a 09 20 20 20 20 73 65 74 20 6e 74 64 62 72 6f  ..    set ntdbro
95b0: 6f 74 20 24 72 6f 6f 74 0a 09 20 20 20 20 24 72  ot $root..    $r
95c0: 6f 6f 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e  oot cutfromparen
95d0: 74 62 72 61 6e 63 68 0a 0a 09 20 20 20 20 73 65  tbranch...    se
95e0: 74 20 72 65 76 20 24 72 6f 6f 74 0a 09 20 20 20  t rev $root..   
95f0: 20 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20   while {$rev ne 
9600: 22 22 7d 20 7b 0a 09 09 24 72 65 76 20 72 65 6d  ""} {...$rev rem
9610: 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09  oveallbranches..
9620: 09 23 20 53 65 65 20 6e 6f 74 65 20 5b 78 5d 2e  .# See note [x].
9630: 0a 0a 09 09 69 66 20 7b 5b 24 72 65 76 20 69 73  ....if {[$rev is
9640: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d  ondefaultbranch]
9650: 7d 20 7b 0a 09 09 20 20 20 20 73 65 74 20 72 65  } {...    set re
9660: 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09  v [$rev child]..
9670: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 20 20 20 20  .} else {...    
9680: 62 72 65 61 6b 0a 09 09 7d 0a 09 20 20 20 20 7d  break...}..    }
9690: 0a 0a 09 20 20 20 20 23 20 72 65 76 20 6e 6f 77  ...    # rev now
96a0: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69   contains the fi
96b0: 72 73 74 20 6e 6f 6e 2d 4e 54 44 42 20 72 65 76  rst non-NTDB rev
96c0: 69 73 69 6f 6e 20 61 66 74 65 72 20 74 68 65 0a  ision after the.
96d0: 09 20 20 20 20 23 20 4e 54 44 42 2c 20 6f 72 20  .    # NTDB, or 
96e0: 69 73 20 65 6d 70 74 79 20 69 66 20 74 68 65 72  is empty if ther
96f0: 65 20 69 73 20 6e 6f 20 73 75 63 68 2e 20 49 66  e is no such. If
9700: 20 77 65 20 68 61 76 65 20 73 6f 6d 65 0a 09 20   we have some.. 
9710: 20 20 20 23 20 74 68 65 79 20 68 61 76 65 20 74     # they have t
9720: 6f 20 72 65 6d 6f 76 65 64 2e 0a 0a 09 20 20 20  o removed....   
9730: 20 69 66 20 7b 24 72 65 76 20 6e 65 20 22 22 7d   if {$rev ne ""}
9740: 20 20 7b 0a 09 09 73 65 74 20 6c 61 73 74 6e 74    {...set lastnt
9750: 64 62 20 5b 24 72 65 76 20 70 61 72 65 6e 74 5d  db [$rev parent]
9760: 0a 09 09 24 6c 61 73 74 6e 74 64 62 20 63 75 74  ...$lastntdb cut
9770: 66 72 6f 6d 63 68 69 6c 64 0a 09 09 77 68 69 6c  fromchild...whil
9780: 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20 7b  e {$rev ne ""} {
9790: 0a 09 09 20 20 20 20 24 72 65 76 20 72 65 6d 6f  ...    $rev remo
97a0: 76 65 61 6c 6c 74 61 67 73 0a 09 09 20 20 20 20  vealltags...    
97b0: 24 72 65 76 20 72 65 6d 6f 76 65 61 6c 6c 62 72  $rev removeallbr
97c0: 61 6e 63 68 65 73 0a 09 09 20 20 20 20 23 20 4e  anches...    # N
97d0: 6f 74 65 20 5b 78 5d 3a 20 57 65 20 6d 61 79 20  ote [x]: We may 
97e0: 73 74 69 6c 6c 20 68 61 76 65 20 68 61 64 20 62  still have had b
97f0: 72 61 6e 63 68 65 73 20 6f 6e 20 74 68 65 0a 09  ranches on the..
9800: 09 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2e  .    # revision.
9810: 20 42 72 61 6e 63 68 65 73 20 77 69 74 68 6f 75   Branches withou
9820: 74 20 72 65 76 69 73 69 6f 6e 73 20 63 6f 6d 6d  t revisions comm
9830: 69 74 74 65 64 0a 09 09 20 20 20 20 23 20 6f 6e  itted...    # on
9840: 20 74 68 65 6d 20 64 6f 20 6e 6f 74 20 73 68 6f   them do not sho
9850: 77 20 75 70 20 69 6e 20 74 68 65 20 6c 69 73 74  w up in the list
9860: 20 6f 66 20 72 6f 6f 74 73 20 61 6b 61 0a 09 09   of roots aka...
9870: 20 20 20 20 23 20 6c 69 6e 65 73 20 6f 66 20 64      # lines of d
9880: 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a 09 09 20 20  evelopment....  
9890: 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76 20    set rev [$rev 
98a0: 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20 20 20  child]...}..    
98b0: 7d 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d  }..    return..}
98c0: 0a 0a 09 23 20 4e 6f 20 4e 54 44 42 20 73 74 75  ...# No NTDB stu
98d0: 66 66 20 74 6f 20 64 65 61 6c 20 77 69 74 68 2e  ff to deal with.
98e0: 20 46 69 72 73 74 20 64 65 6c 65 74 65 20 74 68   First delete th
98f0: 65 20 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 0a  e branch object.
9900: 09 23 20 69 74 73 65 6c 66 2c 20 61 66 74 65 72  .# itself, after
9910: 20 63 75 74 74 69 6e 67 20 61 6c 6c 20 74 68 65   cutting all the
9920: 20 76 61 72 69 6f 75 73 20 63 6f 6e 6e 65 63 74   various connect
9930: 69 6f 6e 73 2e 0a 0a 09 73 65 74 20 62 72 61 6e  ions....set bran
9940: 63 68 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74  ch [$root parent
9950: 62 72 61 6e 63 68 5d 0a 09 69 66 20 7b 24 62 72  branch]..if {$br
9960: 61 6e 63 68 20 6e 65 20 22 22 7d 20 7b 0a 09 20  anch ne ""} {.. 
9970: 20 20 20 73 65 74 20 62 72 61 6e 63 68 70 61 72     set branchpar
9980: 65 6e 74 20 5b 24 62 72 61 6e 63 68 20 70 61 72  ent [$branch par
9990: 65 6e 74 5d 0a 09 20 20 20 20 24 62 72 61 6e 63  ent]..    $branc
99a0: 68 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 62 72  hparent removebr
99b0: 61 6e 63 68 20 20 20 20 20 20 20 20 24 62 72 61  anch        $bra
99c0: 6e 63 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68  nch..    $branch
99d0: 70 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69  parent removechi
99e0: 6c 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74  ldonbranch $root
99f0: 0a 09 7d 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74  ..}...# The root
9a00: 20 69 73 20 6e 6f 20 73 75 63 68 20 61 6e 79 20   is no such any 
9a10: 6c 6f 6e 67 65 72 20 65 69 74 68 65 72 2e 0a 09  longer either...
9a20: 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20  ldelete myroots 
9a30: 24 72 6f 6f 74 0a 0a 09 23 20 4e 6f 77 20 67 6f  $root...# Now go
9a40: 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c 69 6e   through the lin
9a50: 65 20 61 6e 64 20 72 65 6d 6f 76 65 20 61 6c 6c  e and remove all
9a60: 20 69 74 73 20 72 65 76 69 73 69 6f 6e 73 2e 0a   its revisions..
9a70: 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e  ..while {$root n
9a80: 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 24 72 6f  e ""} {..    $ro
9a90: 6f 74 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73  ot removealltags
9aa0: 0a 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d 6f  ..    $root remo
9ab0: 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 09 20  veallbranches.. 
9ac0: 20 20 20 23 20 4e 6f 74 65 3a 20 53 65 65 20 74     # Note: See t
9ad0: 68 65 20 6e 6f 74 65 20 5b 78 5d 2e 0a 0a 09 20  he note [x].... 
9ae0: 20 20 20 23 20 46 72 6f 6d 20 63 76 73 32 73 76     # From cvs2sv
9af0: 6e 3a 20 49 66 20 74 68 69 73 20 69 73 20 74 68  n: If this is th
9b00: 65 20 6c 61 73 74 20 64 65 66 61 75 6c 74 20 72  e last default r
9b10: 65 76 69 73 69 6f 6e 20 6f 6e 20 61 0a 09 20 20  evision on a..  
9b20: 20 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65    # non-trunk de
9b30: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 66 6f 6c  fault branch fol
9b40: 6c 6f 77 65 64 20 62 79 20 61 20 31 2e 32 20 72  lowed by a 1.2 r
9b50: 65 76 69 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20  evision,..    # 
9b60: 74 68 65 6e 20 74 68 65 20 31 2e 32 20 72 65 76  then the 1.2 rev
9b70: 69 73 69 6f 6e 20 64 65 70 65 6e 64 73 20 6f 6e  ision depends on
9b80: 20 74 68 69 73 20 6f 6e 65 2e 20 20 46 49 58 4d   this one.  FIXM
9b90: 45 3a 20 49 74 20 69 73 0a 09 20 20 20 20 23 20  E: It is..    # 
9ba0: 71 75 65 73 74 69 6f 6e 61 62 6c 65 20 77 68 65  questionable whe
9bb0: 74 68 65 72 20 74 68 69 73 20 68 61 6e 64 6c 69  ther this handli
9bc0: 6e 67 20 69 73 20 63 6f 72 72 65 63 74 2c 20 73  ng is correct, s
9bd0: 69 6e 63 65 20 74 68 65 0a 09 20 20 20 20 23 20  ince the..    # 
9be0: 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c  non-trunk defaul
9bf0: 74 20 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f  t branch revisio
9c00: 6e 73 20 61 66 66 65 63 74 20 74 72 75 6e 6b 20  ns affect trunk 
9c10: 61 6e 64 0a 09 20 20 20 20 23 20 73 68 6f 75 6c  and..    # shoul
9c20: 64 20 74 68 65 72 65 66 6f 72 65 20 6e 6f 74 20  d therefore not 
9c30: 6a 75 73 74 20 62 65 20 64 69 73 63 61 72 64 65  just be discarde
9c40: 64 20 65 76 65 6e 20 69 66 0a 09 20 20 20 20 23  d even if..    #
9c50: 20 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c 79 2e 0a 0a   --trunk-only...
9c60: 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20  .    if {[$root 
9c70: 68 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68  hasdefaultbranch
9c80: 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 73 65 74 20  child]} {...set 
9c90: 6e 74 64 62 63 68 69 6c 64 20 5b 24 72 6f 6f 74  ntdbchild [$root
9ca0: 20 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68   defaultbranchch
9cb0: 69 6c 64 5d 0a 09 09 69 6e 74 65 67 72 69 74 79  ild]...integrity
9cc0: 20 61 73 73 65 72 74 20 7b 0a 09 09 20 20 20 20   assert {...    
9cd0: 5b 24 6e 74 64 62 63 68 69 6c 64 20 64 65 66 61  [$ntdbchild defa
9ce0: 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 5d  ultbranchparent]
9cf0: 20 65 71 20 24 6e 74 64 62 63 68 69 6c 64 0a 09   eq $ntdbchild..
9d00: 09 7d 20 7b 6e 74 64 62 20 2d 20 74 72 75 6e 6b  .} {ntdb - trunk
9d10: 20 6c 69 6e 6b 61 67 65 20 62 72 6f 6b 65 6e 7d   linkage broken}
9d20: 0a 09 09 24 6e 74 64 62 63 68 69 6c 64 20 63 75  ...$ntdbchild cu
9d30: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61  tdefaultbranchpa
9d40: 72 65 6e 74 0a 09 09 69 66 20 7b 5b 24 6e 74 64  rent...if {[$ntd
9d50: 62 63 68 69 6c 64 20 68 61 73 70 61 72 65 6e 74  bchild hasparent
9d60: 5d 7d 20 7b 0a 09 09 20 20 20 20 6c 61 70 70 65  ]} {...    lappe
9d70: 6e 64 20 6d 79 72 6f 6f 74 73 20 5b 24 6e 74 64  nd myroots [$ntd
9d80: 62 63 68 69 6c 64 20 70 61 72 65 6e 74 5d 0a 09  bchild parent]..
9d90: 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  .}..    }...    
9da0: 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20  set root [$root 
9db0: 63 68 69 6c 64 5d 0a 09 7d 0a 0a 09 72 65 74 75  child]..}...retu
9dc0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
9dd0: 74 68 6f 64 20 47 72 61 66 74 4e 54 44 42 32 54  thod GraftNTDB2T
9de0: 72 75 6e 6b 20 7b 72 6f 6f 74 7d 20 7b 0a 09 23  runk {root} {..#
9df0: 20 57 65 20 63 61 6e 20 6e 6f 77 20 67 72 61 66   We can now graf
9e00: 74 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20  t the non-trunk 
9e10: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72  default branch r
9e20: 65 76 69 73 69 6f 6e 73 20 74 6f 0a 09 23 20 74  evisions to..# t
9e30: 72 75 6e 6b 2e 20 54 68 65 79 20 73 68 6f 75 6c  runk. They shoul
9e40: 64 20 61 6c 72 65 61 64 79 20 62 65 20 61 6c 6f  d already be alo
9e50: 6e 65 20 6f 6e 20 61 20 43 56 53 42 72 61 6e 63  ne on a CVSBranc
9e60: 68 2d 6c 65 73 73 0a 09 23 20 62 72 61 6e 63 68  h-less..# branch
9e70: 2e 0a 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73  ....integrity as
9e80: 73 65 72 74 20 7b 21 5b 24 72 6f 6f 74 20 68 61  sert {![$root ha
9e90: 73 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 7d 20  sparentbranch]} 
9ea0: 7b 4e 54 44 42 20 72 6f 6f 74 20 73 74 69 6c 6c  {NTDB root still
9eb0: 20 68 61 73 20 69 74 73 20 62 72 61 6e 63 68 20   has its branch 
9ec0: 73 79 6d 62 6f 6c 7d 0a 09 69 6e 74 65 67 72 69  symbol}..integri
9ed0: 74 79 20 61 73 73 65 72 74 20 7b 21 5b 24 72 6f  ty assert {![$ro
9ee0: 6f 74 20 68 61 73 62 72 61 6e 63 68 65 73 5d 7d  ot hasbranches]}
9ef0: 20 20 20 20 20 7b 4e 54 44 42 20 72 6f 6f 74 20       {NTDB root 
9f00: 73 74 69 6c 6c 20 68 61 73 20 73 70 61 77 6e 65  still has spawne
9f10: 64 20 62 72 61 6e 63 68 65 73 7d 0a 0a 09 73 65  d branches}...se
9f20: 74 20 6c 61 73 74 20 24 72 6f 6f 74 0a 09 77 68  t last $root..wh
9f30: 69 6c 65 20 7b 5b 24 6c 61 73 74 20 68 61 73 63  ile {[$last hasc
9f40: 68 69 6c 64 5d 7d 20 7b 73 65 74 20 6c 61 73 74  hild]} {set last
9f50: 20 5b 24 6c 61 73 74 20 63 68 69 6c 64 5d 7d 0a   [$last child]}.
9f60: 0a 09 69 66 20 7b 5b 24 6c 61 73 74 20 68 61 73  ..if {[$last has
9f70: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69  defaultbranchchi
9f80: 6c 64 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65 74  ld]} {...    set
9f90: 20 72 65 76 31 32 20 5b 24 6c 61 73 74 20 64 65   rev12 [$last de
9fa0: 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64  faultbranchchild
9fb0: 5d 0a 09 20 20 20 20 24 72 65 76 31 32 20 63 75  ]..    $rev12 cu
9fc0: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61  tdefaultbranchpa
9fd0: 72 65 6e 74 0a 09 20 20 20 20 24 6c 61 73 74 20  rent..    $last 
9fe0: 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e 63   cutdefaultbranc
9ff0: 68 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 72 65  hchild...    $re
a000: 76 31 32 20 63 68 61 6e 67 65 70 61 72 65 6e 74  v12 changeparent
a010: 20 24 6c 61 73 74 0a 09 20 20 20 20 24 6c 61 73   $last..    $las
a020: 74 20 20 63 68 61 6e 67 65 63 68 69 6c 64 20 24  t  changechild $
a030: 72 65 76 31 32 0a 0a 09 20 20 20 20 6c 64 65 6c  rev12...    ldel
a040: 65 74 65 20 6d 79 72 6f 6f 74 73 20 24 72 65 76  ete myroots $rev
a050: 31 32 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20  12...    # Note 
a060: 61 6e 64 20 72 65 6d 65 6d 62 65 72 20 74 68 61  and remember tha
a070: 74 20 74 68 65 20 74 79 70 65 20 6f 66 20 72 65  t the type of re
a080: 76 31 32 20 77 61 73 20 61 6c 72 65 61 64 79 0a  v12 was already.
a090: 09 20 20 20 20 23 20 61 64 6a 75 73 74 65 64 20  .    # adjusted 
a0a0: 62 79 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e  by AdjustNonTrun
a0b0: 6b 44 65 66 61 75 6c 74 42 72 61 6e 63 68 2c 20  kDefaultBranch, 
a0c0: 73 6f 20 77 65 20 64 6f 6e 27 74 0a 09 20 20 20  so we don't..   
a0d0: 20 23 20 68 61 76 65 20 74 6f 20 63 68 61 6e 67   # have to chang
a0e0: 65 20 69 74 73 20 74 79 70 65 20 68 65 72 65 2e  e its type here.
a0f0: 0a 09 7d 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f  ..}...while {$ro
a100: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20  ot ne ""} {..   
a110: 20 24 72 6f 6f 74 20 73 65 74 6f 6e 64 65 66 61   $root setondefa
a120: 75 6c 74 62 72 61 6e 63 68 20 30 0a 09 20 20 20  ultbranch 0..   
a130: 20 24 72 6f 6f 74 20 73 65 74 6c 6f 64 20 24 6d   $root setlod $m
a140: 79 74 72 75 6e 6b 0a 09 20 20 20 20 66 6f 72 65  ytrunk..    fore
a150: 61 63 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74  ach tag [$root t
a160: 61 67 73 5d 20 7b 0a 09 09 24 74 61 67 20 73 65  ags] {...$tag se
a170: 74 6c 6f 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20  tlod $mytrunk.. 
a180: 20 20 20 7d 0a 09 20 20 20 20 73 65 74 20 72 6f     }..    set ro
a190: 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d  ot [$root child]
a1a0: 0a 09 7d 0a 0a 20 20 20 20 20 20 20 20 72 65 74  ..}..        ret
a1b0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
a1c0: 65 74 68 6f 64 20 41 63 74 69 76 65 20 7b 7d 20  ethod Active {} 
a1d0: 7b 0a 09 73 65 74 20 72 65 76 69 73 69 6f 6e 73  {..set revisions
a1e0: 20 7b 7d 0a 09 73 65 74 20 73 79 6d 62 6f 6c 73   {}..set symbols
a1f0: 20 20 20 7b 7d 0a 0a 09 66 6f 72 65 61 63 68 20     {}...foreach 
a200: 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65  root [$self Line
a210: 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20  sOfDevelopment] 
a220: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f 6f  {..    if {[$roo
a230: 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63  t hasparentbranc
a240: 68 5d 7d 20 7b 20 6c 61 70 70 65 6e 64 20 73 79  h]} { lappend sy
a250: 6d 62 6f 6c 73 20 5b 24 72 6f 6f 74 20 70 61 72  mbols [$root par
a260: 65 6e 74 62 72 61 6e 63 68 5d 20 7d 0a 09 20 20  entbranch] }..  
a270: 20 20 77 68 69 6c 65 20 7b 24 72 6f 6f 74 20 6e    while {$root n
a280: 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70 70 65 6e  e ""} {...lappen
a290: 64 20 72 65 76 69 73 69 6f 6e 73 20 24 72 6f 6f  d revisions $roo
a2a0: 74 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67 20  t...foreach tag 
a2b0: 20 20 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20     [$root tags] 
a2c0: 20 20 20 20 7b 20 6c 61 70 70 65 6e 64 20 73 79      { lappend sy
a2d0: 6d 62 6f 6c 73 20 24 74 61 67 20 20 20 20 7d 0a  mbols $tag    }.
a2e0: 09 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68  ..foreach branch
a2f0: 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65 73   [$root branches
a300: 5d 20 7b 0a 09 09 20 20 20 20 69 6e 74 65 67 72  ] {...    integr
a310: 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09 09  ity assert {....
a320: 5b 24 62 72 61 6e 63 68 20 70 61 72 65 6e 74 5d  [$branch parent]
a330: 20 65 71 20 24 72 6f 6f 74 0a 09 09 20 20 20 20   eq $root...    
a340: 7d 20 7b 42 61 63 6b 72 65 66 65 72 65 6e 63 65  } {Backreference
a350: 20 62 72 61 6e 63 68 20 74 6f 20 69 74 73 20 72   branch to its r
a360: 6f 6f 74 20 69 73 20 6d 69 73 73 69 6e 67 20 6f  oot is missing o
a370: 72 20 77 72 6f 6e 67 7d 0a 09 09 20 20 20 20 6c  r wrong}...    l
a380: 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24  append symbols $
a390: 62 72 61 6e 63 68 0a 09 09 7d 0a 09 09 73 65 74  branch...}...set
a3a0: 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c 6f 64 5d   lod [$root lod]
a3b0: 0a 09 09 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73  ...if {![$lod is
a3c0: 74 72 75 6e 6b 5d 7d 20 7b 0a 09 09 20 20 20 20  trunk]} {...    
a3d0: 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74  integrity assert
a3e0: 20 7b 0a 09 09 09 5b 24 6c 6f 64 20 68 61 73 63   {....[$lod hasc
a3f0: 68 69 6c 64 5d 0a 09 09 20 20 20 20 7d 20 7b 42  hild]...    } {B
a400: 72 61 6e 63 68 20 69 73 20 4c 4f 44 20 73 79 6d  ranch is LOD sym
a410: 62 6f 6c 20 77 69 74 68 6f 75 74 20 72 65 76 69  bol without revi
a420: 73 69 6f 6e 73 7d 0a 09 09 20 20 20 20 6c 61 70  sions}...    lap
a430: 70 65 6e 64 20 73 79 6d 62 6f 6c 73 20 24 6c 6f  pend symbols $lo
a440: 64 0a 09 09 7d 0a 09 09 73 65 74 20 72 6f 6f 74  d...}...set root
a450: 20 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09   [$root child]..
a460: 20 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72      }..}...retur
a470: 6e 20 5b 6c 69 73 74 20 5b 6c 73 6f 72 74 20 2d  n [list [lsort -
a480: 75 6e 69 71 75 65 20 2d 64 69 63 74 20 24 72 65  unique -dict $re
a490: 76 69 73 69 6f 6e 73 5d 20 5b 6c 73 6f 72 74 20  visions] [lsort 
a4a0: 2d 75 6e 69 71 75 65 20 2d 64 69 63 74 20 24 73  -unique -dict $s
a4b0: 79 6d 62 6f 6c 73 5d 5d 0a 20 20 20 20 7d 0a 0a  ymbols]].    }..
a4c0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 67 67 72  .    method Aggr
a4d0: 65 67 61 74 65 53 79 6d 62 6f 6c 44 61 74 61 20  egateSymbolData 
a4e0: 7b 7d 20 7b 0a 09 23 20 4e 6f 77 20 74 68 61 74  {} {..# Now that
a4f0: 20 74 68 65 20 65 78 61 63 74 20 73 65 74 20 6f   the exact set o
a500: 66 20 72 65 76 69 73 69 6f 6e 73 20 28 61 6e 64  f revisions (and
a510: 20 74 68 72 6f 75 67 68 20 74 68 61 74 0a 09 23   through that..#
a520: 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 74 61   branches and ta
a530: 67 73 29 20 69 73 20 6b 6e 6f 77 6e 20 77 65 20  gs) is known we 
a540: 63 61 6e 20 75 70 64 61 74 65 20 74 68 65 20 61  can update the a
a550: 67 67 72 65 67 61 74 65 0a 09 23 20 73 79 6d 62  ggregate..# symb
a560: 6f 6c 20 73 74 61 74 69 73 74 69 63 73 2e 0a 0a  ol statistics...
a570: 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 5b 24  .foreach root [$
a580: 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65 76 65  self LinesOfDeve
a590: 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20 20 20  lopment] {..    
a5a0: 73 65 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 20 6c  set lod [$root l
a5b0: 6f 64 5d 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65  od]...    # Note
a5c0: 3a 20 49 66 20 74 68 65 20 4c 4f 44 20 69 73 20  : If the LOD is 
a5d0: 74 68 65 20 74 72 75 6e 6b 20 74 68 65 20 63 6f  the trunk the co
a5e0: 75 6e 74 2a 2c 20 65 74 63 2e 20 6d 65 74 68 6f  unt*, etc. metho
a5f0: 64 73 0a 09 20 20 20 20 23 20 77 69 6c 6c 20 64  ds..    # will d
a600: 6f 20 6e 6f 74 68 69 6e 67 2c 20 61 73 20 69 74  o nothing, as it
a610: 20 69 73 20 61 6c 77 61 79 73 20 70 72 65 73 65   is always prese
a620: 6e 74 20 28 63 61 6e 6e 6f 74 20 62 65 0a 09 20  nt (cannot be.. 
a630: 20 20 20 23 20 65 78 63 6c 75 64 65 64 29 2c 20     # excluded), 
a640: 61 6e 64 20 69 73 20 61 6c 77 61 79 73 20 61 20  and is always a 
a650: 62 72 61 6e 63 68 20 74 6f 6f 2e 0a 0a 09 20 20  branch too....  
a660: 20 20 23 20 4c 69 6e 65 73 20 6f 66 20 64 65 76    # Lines of dev
a670: 65 6c 6f 70 6d 65 6e 74 20 63 6f 75 6e 74 20 61  elopment count a
a680: 73 20 62 72 61 6e 63 68 65 73 20 61 6e 64 20 68  s branches and h
a690: 61 76 65 20 61 20 63 6f 6d 6d 69 74 0a 09 20 20  ave a commit..  
a6a0: 20 20 23 20 6f 6e 20 74 68 65 6d 20 28 72 6f 6f    # on them (roo
a6b0: 74 29 2e 20 49 66 20 74 68 65 79 20 61 72 65 20  t). If they are 
a6c0: 73 74 69 6c 6c 20 61 74 74 61 63 68 65 64 20 74  still attached t
a6d0: 6f 20 61 20 74 72 65 65 20 77 65 0a 09 20 20 20  o a tree we..   
a6e0: 20 23 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 75   # have to compu
a6f0: 74 65 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  te and register 
a700: 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73  possible parents
a710: 2e 0a 0a 09 20 20 20 20 24 6c 6f 64 20 63 6f 75  ....    $lod cou
a720: 6e 74 61 73 62 72 61 6e 63 68 0a 09 20 20 20 20  ntasbranch..    
a730: 24 6c 6f 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69  $lod countacommi
a740: 74 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 72 6f  t...    if {[$ro
a750: 6f 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e  ot hasparentbran
a760: 63 68 5d 7d 20 7b 0a 09 09 23 20 4e 6f 74 65 20  ch]} {...# Note 
a770: 6c 6f 64 20 3d 3d 20 5b 24 72 6f 6f 74 20 70 61  lod == [$root pa
a780: 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 09 24 6c  rentbranch]...$l
a790: 6f 64 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e  od possibleparen
a7a0: 74 73 0a 09 20 20 20 20 7d 20 65 6c 73 65 69 66  ts..    } elseif
a7b0: 20 7b 21 5b 24 6c 6f 64 20 69 73 74 72 75 6e 6b   {![$lod istrunk
a7c0: 5d 20 26 26 20 5b 24 72 6f 6f 74 20 69 73 6f 6e  ] && [$root ison
a7d0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 5d 7d 20  defaultbranch]} 
a7e0: 7b 0a 09 09 23 20 54 68 69 73 20 69 73 20 74 68  {...# This is th
a7f0: 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 20  e root revision 
a800: 6f 66 20 61 20 64 65 74 61 63 68 65 64 20 4e 54  of a detached NT
a810: 44 42 2e 20 57 65 0a 09 09 23 20 68 61 76 65 20  DB. We...# have 
a820: 74 6f 20 6d 61 6e 75 61 6c 6c 79 20 73 65 74 20  to manually set 
a830: 74 68 65 20 6f 6e 6c 79 20 70 6f 73 73 69 62 6c  the only possibl
a840: 65 20 70 61 72 65 6e 74 20 66 6f 72 0a 09 09 23  e parent for...#
a850: 20 74 68 69 73 20 4c 4f 44 2c 20 74 68 65 20 74   this LOD, the t
a860: 72 75 6e 6b 20 69 74 73 65 6c 66 2e 0a 0a 09 09  runk itself.....
a870: 5b 24 6c 6f 64 20 73 79 6d 62 6f 6c 5d 20 70 6f  [$lod symbol] po
a880: 73 73 69 62 6c 65 70 61 72 65 6e 74 20 24 6d 79  ssibleparent $my
a890: 74 72 75 6e 6b 0a 09 20 20 20 20 7d 0a 0a 09 20  trunk..    }... 
a8a0: 20 20 20 23 20 46 6f 72 20 74 68 65 20 72 65 76     # For the rev
a8b0: 69 73 69 6f 6e 73 20 69 6e 20 74 68 65 20 6c 69  isions in the li
a8c0: 6e 65 20 77 65 20 72 65 67 69 73 74 65 72 20 74  ne we register t
a8d0: 68 65 69 72 20 62 72 61 6e 63 68 65 73 0a 09 20  heir branches.. 
a8e0: 20 20 20 23 20 61 6e 64 20 74 61 67 73 20 61 73     # and tags as
a8f0: 20 62 6c 6f 63 6b 65 72 73 20 66 6f 72 20 74 68   blockers for th
a900: 65 20 6c 6f 64 2c 20 61 6e 64 20 75 70 64 61 74  e lod, and updat
a910: 65 20 74 68 65 20 74 79 70 65 0a 09 20 20 20 20  e the type..    
a920: 23 20 63 6f 75 6e 74 65 72 73 20 61 73 20 77 65  # counters as we
a930: 6c 6c 2e 20 41 73 20 62 72 61 6e 63 68 20 73 79  ll. As branch sy
a940: 6d 62 6f 6c 73 20 77 69 74 68 6f 75 74 20 63 6f  mbols without co
a950: 6d 6d 69 74 73 20 6f 6e 0a 09 20 20 20 20 23 20  mmits on..    # 
a960: 74 68 65 6d 20 61 72 65 20 6e 6f 74 20 6c 69 73  them are not lis
a970: 74 65 64 20 61 73 20 6c 69 6e 65 73 20 6f 66 20  ted as lines of 
a980: 64 65 76 65 6c 6f 70 6d 65 6e 74 2c 20 77 65 20  development, we 
a990: 68 61 76 65 20 74 6f 0a 09 20 20 20 20 23 20 63  have to..    # c
a9a0: 6f 75 6e 74 20 74 68 65 6d 20 68 65 72 65 20 61  ount them here a
a9b0: 73 20 77 65 6c 6c 2c 20 61 73 20 70 6c 61 69 6e  s well, as plain
a9c0: 20 62 72 61 6e 63 68 65 73 2e 20 41 74 20 6c 61   branches. At la
a9d0: 73 74 20 77 65 0a 09 20 20 20 20 23 20 68 61 76  st we..    # hav
a9e0: 65 20 74 6f 20 63 6f 6d 70 75 74 65 20 61 6e 64  e to compute and
a9f0: 20 72 65 67 69 73 74 65 72 20 74 68 65 20 70 6f   register the po
aa00: 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73 20 6f  ssible parents o
aa10: 66 20 74 68 65 0a 09 20 20 20 20 23 20 74 61 67  f the..    # tag
aa20: 73 2c 20 69 6e 20 63 61 73 65 20 74 68 65 79 20  s, in case they 
aa30: 61 72 65 20 6c 61 74 65 72 20 63 6f 6e 76 65 72  are later conver
aa40: 74 65 64 20 61 73 20 62 72 61 6e 63 68 65 73 2e  ted as branches.
aa50: 0a 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72  ...    while {$r
aa60: 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 66  oot ne ""} {...f
aa70: 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24  oreach branch [$
aa80: 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b  root branches] {
aa90: 0a 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63  ...    $lod bloc
aaa0: 6b 65 64 62 79 20 24 62 72 61 6e 63 68 0a 09 09  kedby $branch...
aab0: 20 20 20 20 24 62 72 61 6e 63 68 20 70 6f 73 73      $branch poss
aac0: 69 62 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20  ibleparents...  
aad0: 20 20 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68    if {[$branch h
aae0: 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e  aschild]} contin
aaf0: 75 65 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68  ue...    $branch
ab00: 20 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09   countasbranch..
ab10: 09 7d 0a 0a 09 09 66 6f 72 65 61 63 68 20 74 61  .}....foreach ta
ab20: 67 20 5b 24 72 6f 6f 74 20 74 61 67 73 5d 20 7b  g [$root tags] {
ab30: 0a 09 09 20 20 20 20 24 6c 6f 64 20 62 6c 6f 63  ...    $lod bloc
ab40: 6b 65 64 62 79 20 24 74 61 67 0a 09 09 20 20 20  kedby $tag...   
ab50: 20 24 74 61 67 20 70 6f 73 73 69 62 6c 65 70 61   $tag possiblepa
ab60: 72 65 6e 74 73 0a 09 09 20 20 20 20 24 74 61 67  rents...    $tag
ab70: 20 63 6f 75 6e 74 61 73 74 61 67 0a 09 09 7d 0a   countastag...}.
ab80: 0a 09 09 73 65 74 20 72 6f 6f 74 20 5b 24 72 6f  ...set root [$ro
ab90: 6f 74 20 63 68 69 6c 64 5d 0a 09 20 20 20 20 7d  ot child]..    }
aba0: 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20 20 20  ..}...return.   
abb0: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   }..    # # ## #
abc0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
abd0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
abe0: 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61      ## Configura
abf0: 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61  tion..    pragma
ac00: 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20   -hastypeinfo   
ac10: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65   no  ; # no type
ac20: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20   introspection. 
ac30: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e     pragma -hasin
ac40: 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20  fo        no  ; 
ac50: 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72  # no object intr
ac60: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72  ospection.    pr
ac70: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74  agma -hastypemet
ac80: 68 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70  hods no  ; # typ
ac90: 65 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e  e is not relevan
aca0: 74 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23  t...    # # ## #
acb0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
acc0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
acd0: 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61  }..namespace eva
ace0: 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  l ::vc::fossil::
acf0: 69 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20  import::cvs {.  
ad00: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f    namespace expo
ad10: 72 74 20 66 69 6c 65 0a 20 20 20 20 6e 61 6d 65  rt file.    name
ad20: 73 70 61 63 65 20 65 76 61 6c 20 66 69 6c 65 20  space eval file 
ad30: 7b 0a 09 23 20 49 6d 70 6f 72 74 20 6e 6f 74 20  {..# Import not 
ad40: 72 65 71 75 69 72 65 64 2c 20 61 6c 72 65 61 64  required, alread
ad50: 79 20 61 20 63 68 69 6c 64 20 6e 61 6d 65 73 70  y a child namesp
ad60: 61 63 65 2e 0a 09 23 20 6e 61 6d 65 73 70 61 63  ace...# namespac
ad70: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
ad80: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
ad90: 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 0a 09 23  vs::file::rev..#
ada0: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72   namespace impor
adb0: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  t ::vc::fossil::
adc0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c  import::cvs::fil
add0: 65 3a 3a 73 79 6d 0a 09 6e 61 6d 65 73 70 61 63  e::sym..namespac
ade0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74  e import ::vc::t
adf0: 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e  ools::misc::*..n
ae00: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
ae10: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f  ::vc::tools::tro
ae20: 75 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20  uble..namespace 
ae30: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f  import ::vc::too
ae40: 6c 73 3a 3a 6c 6f 67 0a 09 6e 61 6d 65 73 70 61  ls::log..namespa
ae50: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
ae60: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
ae70: 63 76 73 3a 3a 62 6c 6f 62 73 74 6f 72 65 0a 09  cvs::blobstore..
ae80: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
ae90: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
aea0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74  mport::cvs::stat
aeb0: 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  e..namespace imp
aec0: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  ort ::vc::fossil
aed0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69  ::import::cvs::i
aee0: 6e 74 65 67 72 69 74 79 0a 09 6e 61 6d 65 73 70  ntegrity..namesp
aef0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
af00: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
af10: 3a 63 76 73 3a 3a 67 74 63 6f 72 65 0a 20 20 20  :cvs::gtcore.   
af20: 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23   }.}..# # ## ###
af30: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
af40: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23  ############# ##
af50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
af60: 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61  ###.## Ready..pa
af70: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 63  ckage provide vc
af80: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
af90: 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30 0a  ::cvs::file 1.0.
afa0: 72 65 74 75 72 6e 0a                             return.