Hex Artifact Content
Not logged in

Artifact 43f6a2b4c2c2c71a7eb62dea1168cd3f4f33c75b:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [68cf3ecdb7] - cvs2fossil, fixed off-by-one errors in the application of RCS patches. by aku on 2008-03-05 05:28:16.

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 5b 65 78 70 72 20 7b 24 73 6c 20 2d 20 31  f [expr {$sl - 1
3d70: 7d 5d 5d 20 7b 0a 09 09 09 6c 6f 67 20 77 72 69  }]] {....log wri
3d80: 74 65 20 31 35 20 66 69 6c 65 20 7b 2e 7c 24 78  te 15 file {.|$x
3d90: 7c 7d 0a 09 09 09 6c 61 70 70 65 6e 64 20 72 65  |}....lappend re
3da0: 73 20 24 78 0a 09 09 20 20 20 20 7d 0a 09 09 20  s $x...    }... 
3db0: 20 20 20 73 65 74 20 20 6f 6f 66 66 20 24 65 6c     set  ooff $el
3dc0: 0a 09 09 7d 0a 09 09 61 20 7b 0a 09 09 20 20 20  ...}...a {...   
3dd0: 20 69 66 20 7b 24 73 6c 20 3c 20 24 6f 6f 66 66   if {$sl < $ooff
3de0: 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65  } { trouble inte
3df0: 72 6e 61 6c 20 7b 49 6e 73 65 72 74 20 62 65 66  rnal {Insert bef
3e00: 6f 72 65 20 6c 61 73 74 20 65 64 69 74 7d 20 7d  ore last edit} }
3e10: 0a 09 09 20 20 20 20 69 66 20 7b 24 73 6c 20 3e  ...    if {$sl >
3e20: 20 24 62 6c 65 6e 7d 20 7b 20 74 72 6f 75 62 6c   $blen} { troubl
3e30: 65 20 69 6e 74 65 72 6e 61 6c 20 7b 49 6e 73 65  e internal {Inse
3e40: 72 74 20 70 61 73 74 20 66 69 6c 65 20 65 6e 64  rt past file end
3e50: 7d 20 7d 0a 0a 09 09 20 20 20 20 66 6f 72 65 61  } }....    forea
3e60: 63 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 62 61  ch x [lrange $ba
3e70: 73 65 20 24 6f 6f 66 66 20 5b 65 78 70 72 20 7b  se $ooff [expr {
3e80: 24 73 6c 20 2d 20 31 7d 5d 5d 20 7b 0a 09 09 09  $sl - 1}]] {....
3e90: 6c 6f 67 20 77 72 69 74 65 20 31 35 20 66 69 6c  log write 15 fil
3ea0: 65 20 7b 2e 7c 24 78 7c 7d 0a 09 09 09 6c 61 70  e {.|$x|}....lap
3eb0: 70 65 6e 64 20 72 65 73 20 24 78 0a 09 09 20 20  pend res $x...  
3ec0: 20 20 7d 0a 09 09 20 20 20 20 66 6f 72 65 61 63    }...    foreac
3ed0: 68 20 78 20 5b 6c 72 61 6e 67 65 20 24 6c 69 6e  h x [lrange $lin
3ee0: 65 73 20 24 69 20 5b 65 78 70 72 20 7b 24 69 20  es $i [expr {$i 
3ef0: 2b 20 24 63 6e 20 2d 20 31 7d 5d 5d 20 7b 0a 09  + $cn - 1}]] {..
3f00: 09 09 6c 6f 67 20 77 72 69 74 65 20 31 35 20 66  ..log write 15 f
3f10: 69 6c 65 20 7b 2b 7c 24 78 7c 7d 0a 09 09 09 6c  ile {+|$x|}....l
3f20: 61 70 70 65 6e 64 20 72 65 73 20 24 78 0a 09 09  append res $x...
3f30: 20 20 20 20 7d 0a 09 09 20 20 20 20 73 65 74 20      }...    set 
3f40: 6f 6f 66 66 20 24 73 6c 0a 09 09 20 20 20 20 69  ooff $sl...    i
3f50: 6e 63 72 20 69 20 24 63 6e 0a 09 09 7d 0a 09 20  ncr i $cn...}.. 
3f60: 20 20 20 7d 0a 09 7d 0a 09 66 6f 72 65 61 63 68     }..}..foreach
3f70: 20 78 20 5b 6c 72 61 6e 67 65 20 24 62 61 73 65   x [lrange $base
3f80: 20 24 6f 6f 66 66 20 65 6e 64 5d 20 7b 20 6c 61   $ooff end] { la
3f90: 70 70 65 6e 64 20 72 65 73 20 24 78 20 7d 0a 09  ppend res $x }..
3fa0: 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 24 72 65  return [join $re
3fb0: 73 20 5c 6e 5d 0a 20 20 20 20 7d 0a 0a 20 20 20  s \n].    }..   
3fc0: 20 6d 65 74 68 6f 64 20 45 78 70 61 6e 64 32 20   method Expand2 
3fd0: 7b 67 72 61 70 68 20 6e 6f 64 65 7d 20 7b 0a 09  {graph node} {..
3fe0: 73 65 74 20 72 65 76 6e 72 20 5b 24 67 72 61 70  set revnr [$grap
3ff0: 68 20 6e 6f 64 65 20 67 65 74 20 24 6e 6f 64 65  h node get $node
4000: 20 72 65 76 6e 72 5d 0a 0a 09 23 20 46 69 72 73   revnr]...# Firs
4010: 74 20 69 6d 70 6f 72 74 20 74 68 65 20 66 69 6c  t import the fil
4020: 65 2e 0a 09 6c 61 70 70 65 6e 64 20 6d 79 69 6d  e...lappend myim
4030: 70 6f 72 74 20 5b 6c 69 73 74 20 41 20 72 24 72  port [list A r$r
4040: 65 76 6e 72 20 7b 7d 5d 0a 0a 09 69 66 20 7b 5b  evnr {}]...if {[
4050: 24 67 72 61 70 68 20 6e 6f 64 65 20 6b 65 79 65  $graph node keye
4060: 78 69 73 74 73 20 24 6e 6f 64 65 20 5f 5f 62 61  xists $node __ba
4070: 73 65 5f 5f 5d 7d 20 7b 0a 09 20 20 20 20 23 20  se__]} {..    # 
4080: 44 65 6c 74 61 20 6e 6f 64 65 2e 20 5f 5f 62 61  Delta node. __ba
4090: 73 65 5f 5f 20 69 73 20 74 68 65 20 6e 61 6d 65  se__ is the name
40a0: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 63 6f 6e   of the file con
40b0: 74 61 69 6e 69 6e 67 0a 09 20 20 20 20 23 20 74  taining..    # t
40c0: 68 65 20 62 61 73 65 6c 69 6e 65 2e 20 47 65 6e  he baseline. Gen
40d0: 65 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f  erate instructio
40e0: 6e 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 64 65  n to make the de
40f0: 6c 74 61 20 61 73 0a 09 20 20 20 20 23 20 77 65  lta as..    # we
4100: 6c 6c 2e 0a 0a 09 20 20 20 20 73 65 74 20 66 62  ll....    set fb
4110: 61 73 65 20 5b 24 67 72 61 70 68 20 6e 6f 64 65  ase [$graph node
4120: 20 67 65 74 20 24 6e 6f 64 65 20 5f 5f 62 61 73   get $node __bas
4130: 65 5f 5f 5d 0a 09 20 20 20 20 6c 61 70 70 65 6e  e__]..    lappen
4140: 64 20 6d 79 69 6d 70 6f 72 74 20 5b 6c 69 73 74  d myimport [list
4150: 20 44 20 72 24 72 65 76 6e 72 20 72 24 66 62 61   D r$revnr r$fba
4160: 73 65 5d 0a 09 7d 0a 0a 09 23 20 50 6f 73 74 20  se]..}...# Post 
4170: 74 6f 20 61 6c 6c 20 73 75 63 63 65 73 73 6f 72  to all successor
4180: 73 20 74 68 61 74 20 74 68 65 20 6a 75 73 74 20  s that the just 
4190: 67 65 6e 65 72 61 74 65 64 20 66 69 6c 65 20 69  generated file i
41a0: 73 20 74 68 65 69 72 0a 09 23 20 62 61 73 65 6c  s their..# basel
41b0: 69 6e 65 2e 20 45 78 63 65 70 74 69 6f 6e 3a 20  ine. Exception: 
41c0: 54 68 6f 73 65 20 77 68 69 63 68 20 61 76 65 20  Those which ave 
41d0: 61 6c 72 65 61 64 79 20 61 20 62 61 73 65 6c 69  already a baseli
41e0: 6e 65 20 73 65 74 2e 0a 09 23 20 54 6f 67 65 74  ne set...# Toget
41f0: 68 65 72 20 77 69 74 68 20 74 68 65 20 73 6f 72  her with the sor
4200: 74 69 6e 67 20 6f 66 20 74 72 75 6e 6b 20 72 65  ting of trunk re
4210: 76 69 73 69 6f 6e 73 20 66 69 72 73 74 20 74 68  visions first th
4220: 65 20 74 72 75 6e 6b 0a 09 23 20 73 68 6f 75 6c  e trunk..# shoul
4230: 64 20 6f 6e 65 20 75 6e 69 6e 74 65 72 75 70 74  d one uninterupt
4240: 65 64 20 6c 69 6e 65 2c 20 77 69 74 68 20 62 72  ed line, with br
4250: 61 6e 63 68 20 72 6f 6f 74 73 20 5f 6e 6f 74 5f  anch roots _not_
4260: 20 64 65 6c 74 61 0a 09 23 20 63 6f 6d 70 72 65   delta..# compre
4270: 73 73 65 64 20 70 65 72 20 74 68 65 69 72 20 62  ssed per their b
4280: 72 61 6e 63 68 65 73 2e 0a 0a 09 66 6f 72 65 61  ranches....forea
4290: 63 68 20 6f 75 74 20 5b 24 67 72 61 70 68 20 6e  ch out [$graph n
42a0: 6f 64 65 73 20 2d 6f 75 74 20 24 6e 6f 64 65 5d  odes -out $node]
42b0: 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b 24 67 72   {..    if {[$gr
42c0: 61 70 68 20 6e 6f 64 65 20 6b 65 79 65 78 69 73  aph node keyexis
42d0: 74 73 20 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f  ts $out __base__
42e0: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20  ]} continue..   
42f0: 20 24 67 72 61 70 68 20 6e 6f 64 65 20 73 65 74   $graph node set
4300: 20 24 6f 75 74 20 5f 5f 62 61 73 65 5f 5f 20 24   $out __base__ $
4310: 72 65 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e  revnr..}..return
4320: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 76 61 72 69  .    }..    vari
4330: 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74 0a 0a 20  able myimport.. 
4340: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
4350: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
4360: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
4370: 23 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72  # State..    var
4380: 69 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20 20  iable myid      
4390: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 46          {} ; # F
43a0: 69 6c 65 20 69 64 20 69 6e 20 74 68 65 20 70 65  ile id in the pe
43b0: 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 2e 0a  rsistent state..
43c0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70      variable myp
43d0: 61 74 68 20 20 20 20 20 20 20 20 20 20 20 20 7b  ath            {
43e0: 7d 20 3b 20 23 20 50 61 74 68 20 6f 66 20 74 68  } ; # Path of th
43f0: 65 20 66 69 6c 65 27 73 20 72 63 73 20 61 72 63  e file's rcs arc
4400: 68 69 76 65 2e 0a 20 20 20 20 76 61 72 69 61 62  hive..    variab
4410: 6c 65 20 6d 79 75 73 72 70 61 74 68 20 20 20 20  le myusrpath    
4420: 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61 74 68       {} ; # Path
4430: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 61 73 20   of the file as 
4440: 73 65 65 6e 20 62 79 20 75 73 65 72 73 2e 0a 20  seen by users.. 
4450: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 65 78     variable myex
4460: 65 63 75 74 61 62 6c 65 20 20 20 20 20 20 30 20  ecutable      0 
4470: 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61   ; # Boolean fla
4480: 67 20 27 66 69 6c 65 20 65 78 65 63 75 74 61 62  g 'file executab
4490: 6c 65 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  le'..    variabl
44a0: 65 20 6d 79 70 72 6f 6a 65 63 74 20 20 20 20 20  e myproject     
44b0: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72      {} ; # Refer
44c0: 65 6e 63 65 20 74 6f 20 74 68 65 20 70 72 6f 6a  ence to the proj
44d0: 65 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 09 20  ect object..... 
44e0: 20 20 20 23 20 74 68 65 20 66 69 6c 65 20 62 65     # the file be
44f0: 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76 61  longs to..    va
4500: 72 69 61 62 6c 65 20 6d 79 72 65 76 20 2d 61 72  riable myrev -ar
4510: 72 61 79 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  ray      {} ; # 
4520: 4d 61 70 73 20 72 65 76 69 73 69 6f 6e 20 6e 75  Maps revision nu
4530: 6d 62 65 72 20 74 6f 20 74 68 65 0a 09 09 09 09  mber to the.....
4540: 20 20 20 20 23 20 61 73 73 6f 63 69 61 74 65 64      # associated
4550: 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74   revision object
4560: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4570: 79 72 65 76 69 73 69 6f 6e 73 20 20 20 20 20 20  yrevisions      
4580: 20 7b 7d 20 3b 20 23 20 53 61 6d 65 20 61 73 20   {} ; # Same as 
4590: 6d 79 72 65 76 2c 20 62 75 74 20 61 20 6c 69 73  myrev, but a lis
45a0: 74 2c 0a 09 09 09 09 20 20 20 20 23 20 67 69 76  t,.....    # giv
45b0: 69 6e 67 20 75 73 20 74 68 65 20 6f 72 64 65 72  ing us the order
45c0: 20 6f 66 0a 09 09 09 09 20 20 20 20 23 20 72 65   of.....    # re
45d0: 76 69 73 69 6f 6e 73 2e 0a 20 20 20 20 76 61 72  visions..    var
45e0: 69 61 62 6c 65 20 6d 79 61 69 64 20 20 20 20 20  iable myaid     
45f0: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d   -array {} ; # M
4600: 61 70 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62  ap revision numb
4610: 65 72 73 20 74 6f 20 74 68 65 20 69 64 0a 09 09  ers to the id...
4620: 09 09 20 20 20 20 23 20 6f 66 20 74 68 65 20 61  ..    # of the a
4630: 75 74 68 6f 72 20 77 68 6f 20 63 6f 6d 6d 69 74  uthor who commit
4640: 74 65 64 0a 09 09 09 09 20 20 20 20 23 20 69 74  ted.....    # it
4650: 2e 20 54 68 69 73 20 69 73 20 6c 61 74 65 72 20  . This is later 
4660: 61 67 67 72 65 67 61 74 65 64 0a 09 09 09 09 20  aggregated..... 
4670: 20 20 20 23 20 77 69 74 68 20 63 6f 6d 6d 69 74     # with commit
4680: 20 6d 65 73 73 61 67 65 2c 20 62 72 61 6e 63 68   message, branch
4690: 20 6e 61 6d 65 0a 09 09 09 09 20 20 20 20 23 20   name.....    # 
46a0: 61 6e 64 20 70 72 6f 6a 65 63 74 20 69 64 20 66  and project id f
46b0: 6f 72 20 61 20 6d 65 74 61 20 69 64 2e 0a 20 20  or a meta id..  
46c0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65 61    variable myhea
46d0: 64 72 65 76 6e 72 20 20 20 20 20 20 20 7b 7d 20  drevnr       {} 
46e0: 3b 20 23 20 48 65 61 64 20 72 65 76 69 73 69 6f  ; # Head revisio
46f0: 6e 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62  n (revision numb
4700: 65 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c 65  er).    variable
4710: 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20 20   myprincipal    
4720: 20 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63 69     {} ; # Princi
4730: 70 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61 6e  pal branch (bran
4740: 63 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09 09  ch number)......
4750: 20 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20 74      # Contrary t
4760: 6f 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73 20  o the name this 
4770: 69 73 20 74 68 65 0a 09 09 09 09 20 20 20 20 23  is the.....    #
4780: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e   default branch.
4790: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
47a0: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20 20  dependencies    
47b0: 7b 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61 72  {} ; # Dictionar
47c0: 79 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c  y parent -> chil
47d0: 64 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65 63  d,.....    # rec
47e0: 6f 72 64 73 20 70 72 69 6d 61 72 79 20 64 65 70  ords primary dep
47f0: 65 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20 76  endencies..    v
4800: 61 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74  ariable myimport
4810: 65 64 20 20 20 20 20 20 20 20 30 20 20 3b 20 23  ed        0  ; #
4820: 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 53   Boolean flag. S
4830: 65 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  et if and only i
4840: 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 20  f.....    # rev 
4850: 31 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65 20  1.1 of the file 
4860: 73 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20 20  seemingly.....  
4870: 20 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65 64    # was imported
4880: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64 65   instead of adde
4890: 64 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72 6d  d.....    # norm
48a0: 61 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61 62  ally..    variab
48b0: 6c 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20 20  le myroot       
48c0: 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65       {} ; # Refe
48d0: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65 76  rence to the rev
48e0: 69 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09 09  ision object....
48f0: 09 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20 74  .    # holding t
4900: 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e  he root revision
4910: 2e 20 20 49 74 73 0a 09 09 09 09 20 20 20 20 23  .  Its.....    #
4920: 20 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79 20   number usually 
4930: 69 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62 65  is '1.1'. Can be
4940: 0a 09 09 09 09 20 20 20 20 23 20 61 20 64 69 66  .....    # a dif
4950: 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 62  ferent number, b
4960: 65 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20 20  ecause of.....  
4970: 20 20 23 20 67 61 70 73 20 63 72 65 61 74 65 64    # gaps created
4980: 20 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20 2d   via 'cvsadmin -
4990: 6f 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  o'..    variable
49a0: 20 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72 72   mybranches -arr
49b0: 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 62  ay {} ; # Maps b
49c0: 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f 20  ranch number to 
49d0: 74 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09 20  the symbol..... 
49e0: 20 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e 64     # object hand
49f0: 6c 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 2e  ling the branch.
4a00: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
4a10: 74 61 67 73 20 20 20 20 20 2d 61 72 72 61 79 20  tags     -array 
4a20: 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69  {} ; # Maps revi
4a30: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74  sion number to t
4a40: 68 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20 20  he list.....    
4a50: 23 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a 65  # of symbol obje
4a60: 63 74 73 20 66 6f 72 20 74 68 65 20 74 61 67 73  cts for the tags
4a70: 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63  .....    # assoc
4a80: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 72  iated with the r
4a90: 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72  evision..    var
4aa0: 69 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73 20  iable mysymbols 
4ab0: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53          {} ; # S
4ac0: 65 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c  et of the symbol
4ad0: 20 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e 0a   names found in.
4ae0: 09 09 09 09 20 20 20 20 23 20 74 68 69 73 20 66  ....    # this f
4af0: 69 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61 62  ile...    variab
4b00: 6c 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20 30  le mybranchcnt 0
4b10: 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f 72   ; # Counter for
4b20: 20 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72 65   branches, to re
4b30: 63 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20 20  cord their....  
4b40: 20 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64 65     # order of de
4b50: 66 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20 61  finition. This a
4b60: 6c 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09 20  lso defines.... 
4b70: 20 20 20 20 23 20 74 68 65 69 72 20 6f 72 64 65      # their orde
4b80: 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20 77  r of creation, w
4b90: 68 69 63 68 20 69 73 20 74 68 65 0a 09 09 09 20  hich is the.... 
4ba0: 20 20 20 20 23 20 72 65 76 65 72 73 65 20 6f 66      # reverse of
4bb0: 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 2e   definition.  I.
4bc0: 65 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09 09  e. a smaller....
4bd0: 20 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d 65       # number me
4be0: 61 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61 72  ans 'Defined ear
4bf0: 6c 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09 09  lier', means....
4c00: 20 20 20 20 20 23 20 27 43 72 65 61 74 65 64 20       # 'Created 
4c10: 6c 61 74 65 72 27 2e 0a 0a 20 20 20 20 76 61 72  later'...    var
4c20: 69 61 62 6c 65 20 6d 79 74 72 75 6e 6b 20 7b 7d  iable mytrunk {}
4c30: 20 3b 20 23 20 44 69 72 65 63 74 20 72 65 66 65   ; # Direct refe
4c40: 72 65 6e 63 65 20 74 6f 20 6d 79 70 72 6f 6a 65  rence to myproje
4c50: 63 74 20 2d 3e 20 74 72 75 6e 6b 2e 0a 20 20 20  ct -> trunk..   
4c60: 20 76 61 72 69 61 62 6c 65 20 6d 79 72 6f 6f 74   variable myroot
4c70: 73 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66  s {} ; # List of
4c80: 20 72 6f 6f 74 73 20 69 6e 20 74 68 65 20 66 6f   roots in the fo
4c90: 72 65 73 74 20 6f 66 0a 09 09 09 20 20 23 20 6c  rest of....  # l
4ca0: 6f 64 27 73 2e 20 4f 62 6a 65 63 74 20 72 65 66  od's. Object ref
4cb0: 65 72 65 6e 63 65 73 20 74 6f 20 72 65 76 69 73  erences to revis
4cc0: 69 6f 6e 73 20 61 6e 64 0a 09 09 09 20 20 23 20  ions and....  # 
4cd0: 62 72 61 6e 63 68 65 73 2e 20 54 68 65 20 6c 61  branches. The la
4ce0: 74 74 65 72 20 63 61 6e 20 61 70 70 65 61 72 20  tter can appear 
4cf0: 77 68 65 6e 20 74 68 65 79 0a 09 09 09 20 20 23  when they....  #
4d00: 20 61 72 65 20 73 65 76 65 72 65 64 20 66 72 6f   are severed fro
4d10: 6d 20 74 68 65 69 72 20 70 61 72 65 6e 74 2e 0a  m their parent..
4d20: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
4d30: 62 6c 6f 62 20 7b 7d 20 3b 20 23 20 52 65 66 65  blob {} ; # Refe
4d40: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 6f 62 6a  rence to the obj
4d50: 65 63 74 20 6d 61 6e 61 67 69 6e 67 20 74 68 65  ect managing the
4d60: 20 62 6c 6f 62 0a 09 09 09 20 23 20 69 6e 66 6f   blob.... # info
4d70: 72 6d 61 74 69 6f 6e 20 28 74 65 78 74 72 61 6e  rmation (textran
4d80: 67 65 20 6f 66 20 72 65 76 69 73 69 6f 6e 73 2c  ge of revisions,
4d90: 20 61 6e 64 0a 09 09 09 20 23 20 64 65 6c 74 61   and.... # delta
4da0: 20 64 65 70 65 6e 64 65 6e 63 69 65 73 29 20 6f   dependencies) o
4db0: 66 20 74 68 69 73 20 66 69 6c 65 2e 0a 0a 20 20  f this file...  
4dc0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
4dd0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
4de0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
4df0: 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64   Internal method
4e00: 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 52 65  s..    method Re
4e10: 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d 69 74  cordBranchCommit
4e20: 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b 0a 09  s {branches} {..
4e30: 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 72 65  foreach branchre
4e40: 76 6e 72 20 24 62 72 61 6e 63 68 65 73 20 7b 0a  vnr $branches {.
4e50: 09 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20  .    if {[catch 
4e60: 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68 20 5b  {...set branch [
4e70: 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e 63 68  $self Rev2Branch
4e80: 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 0a 09   $branchrevnr]..
4e90: 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 73 65 74 20      }]} {...set 
4ea0: 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 41 64  branch [$self Ad
4eb0: 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63 68  dUnlabeledBranch
4ec0: 20 5b 72 65 76 20 32 62 72 61 6e 63 68 6e 72 20   [rev 2branchnr 
4ed0: 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 5d 0a 09  $branchrevnr]]..
4ee0: 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 52 65      }...    # Re
4ef0: 63 6f 72 64 20 74 68 65 20 63 6f 6d 6d 69 74 2c  cord the commit,
4f00: 20 6a 75 73 74 20 61 73 20 72 65 76 69 73 69 6f   just as revisio
4f10: 6e 20 6e 75 6d 62 65 72 20 66 6f 72 0a 09 20 20  n number for..  
4f20: 20 20 23 20 6e 6f 77 2e 20 50 72 6f 63 65 73 42    # now. ProcesB
4f30: 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 65  ranchDependencie
4f40: 73 20 77 69 6c 6c 20 65 78 74 65 6e 64 20 74 68  s will extend th
4f50: 61 74 20 69 74 6f 20 61 0a 09 20 20 20 20 23 20  at ito a..    # 
4f60: 70 72 6f 70 65 72 20 6f 62 6a 65 63 74 20 72 65  proper object re
4f70: 66 65 72 65 6e 63 65 2e 0a 0a 09 20 20 20 20 24  ference....    $
4f80: 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c 64 72  branch setchildr
4f90: 65 76 6e 72 20 24 62 72 61 6e 63 68 72 65 76 6e  evnr $branchrevn
4fa0: 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  r..}..return.   
4fb0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 52   }..    method R
4fc0: 65 76 32 42 72 61 6e 63 68 20 7b 72 65 76 6e 72  ev2Branch {revnr
4fd0: 7d 20 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 65  } {.        inte
4fe0: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 21 5b  grity assert {![
4ff0: 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72  rev istrunkrevnr
5000: 20 24 72 65 76 6e 72 5d 7d 20 7b 45 78 70 65 63   $revnr]} {Expec
5010: 74 65 64 20 61 20 62 72 61 6e 63 68 20 72 65 76  ted a branch rev
5020: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 7d 0a 09 72  ision number}..r
5030: 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 65  eturn $mybranche
5040: 73 28 5b 72 65 76 20 32 62 72 61 6e 63 68 6e 72  s([rev 2branchnr
5050: 20 24 72 65 76 6e 72 5d 29 0a 20 20 20 20 7d 0a   $revnr]).    }.
5060: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 55  .    method AddU
5070: 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63 68 20 7b  nlabeledBranch {
5080: 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 72 65 74  branchnr} {..ret
5090: 75 72 6e 20 5b 24 73 65 6c 66 20 41 64 64 42 72  urn [$self AddBr
50a0: 61 6e 63 68 20 75 6e 6c 61 62 65 6c 65 64 2d 24  anch unlabeled-$
50b0: 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 68  branchnr $branch
50c0: 6e 72 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  nr].    }..    m
50d0: 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63 68 20  ethod AddBranch 
50e0: 7b 6e 61 6d 65 20 62 72 61 6e 63 68 6e 72 7d 20  {name branchnr} 
50f0: 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  {..if {[info exi
5100: 73 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28 24  sts mybranches($
5110: 62 72 61 6e 63 68 6e 72 29 5d 7d 20 7b 0a 09 20  branchnr)]} {.. 
5120: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66     log write 1 f
5130: 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68  ile "In '$mypath
5140: 27 3a 20 42 72 61 6e 63 68 20 27 24 62 72 61 6e  ': Branch '$bran
5150: 63 68 6e 72 27 20 6e 61 6d 65 64 20 27 5b 24 6d  chnr' named '[$m
5160: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63  ybranches($branc
5170: 68 6e 72 29 20 6e 61 6d 65 5d 27 22 0a 09 20 20  hnr) name]'"..  
5180: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69    log write 1 fi
5190: 6c 65 20 22 43 61 6e 6e 6f 74 20 68 61 76 65 20  le "Cannot have 
51a0: 73 65 63 6f 6e 64 20 6e 61 6d 65 20 27 24 6e 61  second name '$na
51b0: 6d 65 27 2c 20 69 67 6e 6f 72 69 6e 67 20 69 74  me', ignoring it
51c0: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d  "..    return..}
51d0: 0a 09 73 65 74 20 62 72 61 6e 63 68 20 5b 73 79  ..set branch [sy
51e0: 6d 20 25 41 55 54 4f 25 20 62 72 61 6e 63 68 20  m %AUTO% branch 
51f0: 24 62 72 61 6e 63 68 6e 72 20 5b 24 6d 79 70 72  $branchnr [$mypr
5200: 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20  oject getsymbol 
5210: 24 6e 61 6d 65 5d 20 24 73 65 6c 66 5d 0a 09 24  $name] $self]..$
5220: 62 72 61 6e 63 68 20 73 65 74 70 6f 73 69 74 69  branch setpositi
5230: 6f 6e 20 5b 69 6e 63 72 20 6d 79 62 72 61 6e 63  on [incr mybranc
5240: 68 63 6e 74 5d 0a 09 73 65 74 20 6d 79 62 72 61  hcnt]..set mybra
5250: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29  nches($branchnr)
5260: 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75 72 6e   $branch..return
5270: 20 24 62 72 61 6e 63 68 0a 20 20 20 20 7d 0a 0a   $branch.    }..
5280: 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 54 61      method AddTa
5290: 67 20 7b 6e 61 6d 65 20 72 65 76 6e 72 7d 20 7b  g {name revnr} {
52a0: 0a 09 73 65 74 20 74 61 67 20 5b 73 79 6d 20 25  ..set tag [sym %
52b0: 41 55 54 4f 25 20 74 61 67 20 24 72 65 76 6e 72  AUTO% tag $revnr
52c0: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 65 74   [$myproject get
52d0: 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 20 24 73  symbol $name] $s
52e0: 65 6c 66 5d 0a 09 6c 61 70 70 65 6e 64 20 6d 79  elf]..lappend my
52f0: 74 61 67 73 28 24 72 65 76 6e 72 29 20 24 74 61  tags($revnr) $ta
5300: 67 0a 09 72 65 74 75 72 6e 20 24 74 61 67 0a 20  g..return $tag. 
5310: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
5320: 20 52 65 63 6f 72 64 42 61 73 69 63 44 65 70 65   RecordBasicDepe
5330: 6e 64 65 6e 63 69 65 73 20 7b 72 65 76 6e 72 20  ndencies {revnr 
5340: 6e 65 78 74 7d 20 7b 0a 09 23 20 48 61 6e 64 6c  next} {..# Handl
5350: 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 64  e the revision d
5360: 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 52 65 63  ependencies. Rec
5370: 6f 72 64 20 74 68 65 6d 20 66 6f 72 20 6e 6f 77  ord them for now
5380: 2c 20 64 6f 0a 09 23 20 6e 6f 74 68 69 6e 67 20  , do..# nothing 
5390: 77 69 74 68 20 74 68 65 6d 20 79 65 74 2e 0a 0a  with them yet...
53a0: 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b 20  .# On the trunk 
53b0: 74 68 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64  the 'next' field
53c0: 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
53d0: 72 65 76 69 6f 75 73 0a 09 23 20 72 65 76 69 73  revious..# revis
53e0: 69 6f 6e 2c 20 69 2e 65 2e 20 74 68 65 20 5f 70  ion, i.e. the _p
53f0: 61 72 65 6e 74 5f 20 6f 66 20 74 68 65 20 63 75  arent_ of the cu
5400: 72 72 65 6e 74 20 6f 6e 65 2e 20 45 78 61 6d 70  rrent one. Examp
5410: 6c 65 3a 0a 09 23 20 31 2e 36 27 73 20 6e 65 78  le:..# 1.6's nex
5420: 74 20 69 73 20 31 2e 35 20 28 6d 6f 64 75 6c 6f  t is 1.5 (modulo
5430: 20 63 76 73 20 61 64 6d 69 6e 20 2d 6f 29 2e 0a   cvs admin -o)..
5440: 0a 09 23 20 43 6f 6e 74 72 61 72 69 6c 79 20 6f  ..# Contrarily o
5450: 6e 20 61 20 62 72 61 6e 63 68 20 74 68 65 20 27  n a branch the '
5460: 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e  next' field poin
5470: 74 73 20 74 6f 20 74 68 65 0a 09 23 20 70 72 69  ts to the..# pri
5480: 6d 61 72 79 20 5f 63 68 69 6c 64 5f 20 6f 66 20  mary _child_ of 
5490: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 76 69  the current revi
54a0: 73 69 6f 6e 2e 20 41 73 20 65 78 61 6d 70 6c 65  sion. As example
54b0: 2c 0a 09 23 20 31 2e 31 2e 33 2e 32 27 73 20 27  ,..# 1.1.3.2's '
54c0: 6e 65 78 74 27 20 77 69 6c 6c 20 62 65 20 31 2e  next' will be 1.
54d0: 31 2e 33 2e 33 2e 0a 0a 09 23 20 54 68 65 20 27  1.3.3....# The '
54e0: 6e 65 78 74 27 20 66 69 65 6c 64 20 61 63 74 75  next' field actu
54f0: 61 6c 6c 79 20 61 6c 77 61 79 73 20 72 65 66 65  ally always refe
5500: 72 73 20 74 6f 20 74 68 65 20 72 65 76 69 73 69  rs to the revisi
5510: 6f 6e 0a 09 23 20 63 6f 6e 74 61 69 6e 69 6e 67  on..# containing
5520: 20 74 68 65 20 64 65 6c 74 61 20 6e 65 65 64 65   the delta neede
5530: 64 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68  d to retrieve th
5540: 61 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23  at revision....#
5550: 20 54 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65   The dependencie
5560: 73 20 6e 65 65 64 65 64 20 68 65 72 65 20 61 72  s needed here ar
5570: 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 73 74  e the logical st
5580: 72 75 63 74 75 72 65 2c 0a 09 23 20 70 61 72 65  ructure,..# pare
5590: 6e 74 2f 63 68 69 6c 64 2c 20 61 6e 64 20 6e 6f  nt/child, and no
55a0: 74 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  t the implementa
55b0: 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 20 64  tion dependent d
55c0: 65 6c 74 61 0a 09 23 20 70 6f 69 6e 74 65 72 73  elta..# pointers
55d0: 2e 0a 0a 09 69 66 20 7b 24 6e 65 78 74 20 65 71  ....if {$next eq
55e0: 20 22 22 7d 20 72 65 74 75 72 6e 0a 09 23 20 20   ""} return..#  
55f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5600: 20 20 20 20 20 20 20 20 70 61 72 65 6e 74 20 2d          parent -
5610: 3e 20 63 68 69 6c 64 0a 09 69 66 20 7b 5b 72 65  > child..if {[re
5620: 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24  v istrunkrevnr $
5630: 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 6c  revnr]} {..    l
5640: 61 70 70 65 6e 64 20 6d 79 64 65 70 65 6e 64 65  append mydepende
5650: 6e 63 69 65 73 20 24 6e 65 78 74 20 24 72 65 76  ncies $next $rev
5660: 6e 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20  nr..} else {..  
5670: 20 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 70 65    lappend mydepe
5680: 6e 64 65 6e 63 69 65 73 20 24 72 65 76 6e 72 20  ndencies $revnr 
5690: 24 6e 65 78 74 0a 09 7d 0a 09 72 65 74 75 72 6e  $next..}..return
56a0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
56b0: 6f 64 20 50 72 6f 63 65 73 73 50 72 69 6d 61 72  od ProcessPrimar
56c0: 79 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d  yDependencies {}
56d0: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 70 61 72   {..foreach {par
56e0: 65 6e 74 72 65 76 6e 72 20 63 68 69 6c 64 72 65  entrevnr childre
56f0: 76 6e 72 7d 20 24 6d 79 64 65 70 65 6e 64 65 6e  vnr} $mydependen
5700: 63 69 65 73 20 7b 0a 09 20 20 20 20 73 65 74 20  cies {..    set 
5710: 70 61 72 65 6e 74 20 24 6d 79 72 65 76 28 24 70  parent $myrev($p
5720: 61 72 65 6e 74 72 65 76 6e 72 29 0a 09 20 20 20  arentrevnr)..   
5730: 20 73 65 74 20 63 68 69 6c 64 20 20 24 6d 79 72   set child  $myr
5740: 65 76 28 24 63 68 69 6c 64 72 65 76 6e 72 29 0a  ev($childrevnr).
5750: 09 20 20 20 20 24 70 61 72 65 6e 74 20 73 65 74  .    $parent set
5760: 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 09 20 20  child $child..  
5770: 20 20 24 63 68 69 6c 64 20 73 65 74 70 61 72 65    $child setpare
5780: 6e 74 20 24 70 61 72 65 6e 74 0a 09 7d 0a 09 72  nt $parent..}..r
5790: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
57a0: 20 6d 65 74 68 6f 64 20 50 72 6f 63 65 73 73 42   method ProcessB
57b0: 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 65  ranchDependencie
57c0: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20  s {} {..foreach 
57d0: 7b 62 72 61 6e 63 68 6e 72 20 62 72 61 6e 63 68  {branchnr branch
57e0: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62  } [array get myb
57f0: 72 61 6e 63 68 65 73 5d 20 7b 0a 09 20 20 20 20  ranches] {..    
5800: 73 65 74 20 72 65 76 6e 72 20 5b 24 62 72 61 6e  set revnr [$bran
5810: 63 68 20 70 61 72 65 6e 74 72 65 76 6e 72 5d 0a  ch parentrevnr].
5820: 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f  ..    if {![info
5830: 20 65 78 69 73 74 73 20 6d 79 72 65 76 28 24 72   exists myrev($r
5840: 65 76 6e 72 29 5d 7d 20 7b 0a 09 09 6c 6f 67 20  evnr)]} {...log 
5850: 77 72 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e  write 1 file "In
5860: 20 27 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20   '$mypath': The 
5870: 62 72 61 6e 63 68 20 27 5b 24 62 72 61 6e 63 68  branch '[$branch
5880: 20 6e 61 6d 65 5d 27 20 72 65 66 65 72 65 6e 63   name]' referenc
5890: 65 73 22 0a 09 09 6c 6f 67 20 77 72 69 74 65 20  es"...log write 
58a0: 31 20 66 69 6c 65 20 22 74 68 65 20 62 6f 67 75  1 file "the bogu
58b0: 73 20 72 65 76 69 73 69 6f 6e 20 27 24 72 65 76  s revision '$rev
58c0: 6e 72 27 20 61 6e 64 20 77 69 6c 6c 20 62 65 20  nr' and will be 
58d0: 69 67 6e 6f 72 65 64 2e 22 0a 09 09 24 62 72 61  ignored."...$bra
58e0: 6e 63 68 20 64 65 73 74 72 6f 79 0a 09 09 75 6e  nch destroy...un
58f0: 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24  set mybranches($
5900: 62 72 61 6e 63 68 6e 72 29 0a 09 20 20 20 20 7d  branchnr)..    }
5910: 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20 72 65   else {...set re
5920: 76 20 24 6d 79 72 65 76 28 24 72 65 76 6e 72 29  v $myrev($revnr)
5930: 0a 09 09 24 72 65 76 20 61 64 64 62 72 61 6e 63  ...$rev addbranc
5940: 68 20 24 62 72 61 6e 63 68 0a 09 09 24 62 72 61  h $branch...$bra
5950: 6e 63 68 20 73 65 74 70 61 72 65 6e 74 20 24 72  nch setparent $r
5960: 65 76 0a 0a 09 09 23 20 49 66 20 72 65 76 69 73  ev....# If revis
5970: 69 6f 6e 73 20 77 65 72 65 20 63 6f 6d 6d 69 74  ions were commit
5980: 74 65 64 20 6f 6e 20 74 68 65 20 62 72 61 6e 63  ted on the branc
5990: 68 20 77 65 20 73 74 6f 72 65 20 61 0a 09 09 23  h we store a...#
59a0: 20 72 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68   reference to th
59b0: 65 20 62 72 61 6e 63 68 20 74 68 65 72 65 2c 20  e branch there, 
59c0: 61 6e 64 20 66 75 72 74 68 65 72 20 64 65 63 6c  and further decl
59d0: 61 72 65 0a 09 09 23 20 74 68 65 20 66 69 72 73  are...# the firs
59e0: 74 20 63 68 69 6c 64 27 73 20 70 61 72 65 6e 74  t child's parent
59f0: 20 74 6f 20 62 65 20 62 72 61 6e 63 68 27 73 20   to be branch's 
5a00: 70 61 72 65 6e 74 2c 20 61 6e 64 0a 09 09 23 20  parent, and...# 
5a10: 6c 69 73 74 20 74 68 69 73 20 63 68 69 6c 64 20  list this child 
5a20: 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 72 65  in the parent re
5a30: 76 69 73 69 6f 6e 2e 0a 0a 09 09 69 66 20 7b 5b  vision.....if {[
5a40: 24 62 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64  $branch haschild
5a50: 72 65 76 5d 7d 20 7b 0a 09 09 20 20 20 20 73 65  rev]} {...    se
5a60: 74 20 63 68 69 6c 64 72 65 76 6e 72 20 5b 24 62  t childrevnr [$b
5a70: 72 61 6e 63 68 20 63 68 69 6c 64 72 65 76 6e 72  ranch childrevnr
5a80: 5d 0a 09 09 20 20 20 20 73 65 74 20 63 68 69 6c  ]...    set chil
5a90: 64 20 24 6d 79 72 65 76 28 24 63 68 69 6c 64 72  d $myrev($childr
5aa0: 65 76 6e 72 29 0a 09 09 20 20 20 20 24 62 72 61  evnr)...    $bra
5ab0: 6e 63 68 20 73 65 74 63 68 69 6c 64 20 24 63 68  nch setchild $ch
5ac0: 69 6c 64 0a 0a 09 09 20 20 20 20 24 63 68 69 6c  ild....    $chil
5ad0: 64 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63  d setparentbranc
5ae0: 68 20 24 62 72 61 6e 63 68 0a 09 09 20 20 20 20  h $branch...    
5af0: 24 63 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74  $child setparent
5b00: 20 20 20 20 20 20 20 24 72 65 76 0a 09 09 20 20         $rev...  
5b10: 20 20 24 72 65 76 20 61 64 64 63 68 69 6c 64 6f    $rev addchildo
5b20: 6e 62 72 61 6e 63 68 20 24 63 68 69 6c 64 0a 09  nbranch $child..
5b30: 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65  .}..    }..}..re
5b40: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
5b50: 6d 65 74 68 6f 64 20 53 6f 72 74 42 72 61 6e 63  method SortBranc
5b60: 68 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63  hes {} {..foreac
5b70: 68 20 7b 72 65 76 6e 72 20 72 65 76 7d 20 5b 61  h {revnr rev} [a
5b80: 72 72 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20  rray get myrev] 
5b90: 7b 20 24 72 65 76 20 73 6f 72 74 62 72 61 6e 63  { $rev sortbranc
5ba0: 68 65 73 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20  hes }..return.  
5bb0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
5bc0: 50 72 6f 63 65 73 73 54 61 67 44 65 70 65 6e 64  ProcessTagDepend
5bd0: 65 6e 63 69 65 73 20 7b 7d 20 7b 0a 09 66 6f 72  encies {} {..for
5be0: 65 61 63 68 20 7b 72 65 76 6e 72 20 74 61 67 6c  each {revnr tagl
5bf0: 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20  ist} [array get 
5c00: 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 69  mytags] {..    i
5c10: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
5c20: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d   myrev($revnr)]}
5c30: 20 7b 0a 09 09 73 65 74 20 6e 20 5b 6c 6c 65 6e   {...set n [llen
5c40: 67 74 68 20 24 74 61 67 6c 69 73 74 5d 0a 09 09  gth $taglist]...
5c50: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65  log write 1 file
5c60: 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20   "In '$mypath': 
5c70: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 5b 6e  The following [n
5c80: 73 70 20 24 6e 20 74 61 67 5d 20 72 65 66 65 72  sp $n tag] refer
5c90: 65 6e 63 65 22 0a 09 09 6c 6f 67 20 77 72 69 74  ence"...log writ
5ca0: 65 20 31 20 66 69 6c 65 20 22 74 68 65 20 62 6f  e 1 file "the bo
5cb0: 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27 24 72  gus revision '$r
5cc0: 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c 20 62  evnr' and will b
5cd0: 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09 66 6f  e ignored."...fo
5ce0: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69  reach tag $tagli
5cf0: 73 74 20 7b 0a 09 09 20 20 20 20 6c 6f 67 20 77  st {...    log w
5d00: 72 69 74 65 20 31 20 66 69 6c 65 20 22 20 20 20  rite 1 file "   
5d10: 20 5b 24 74 61 67 20 6e 61 6d 65 5d 22 0a 09 09   [$tag name]"...
5d20: 20 20 20 20 24 74 61 67 20 64 65 73 74 72 6f 79      $tag destroy
5d30: 0a 09 09 7d 0a 09 09 75 6e 73 65 74 20 6d 79 74  ...}...unset myt
5d40: 61 67 73 28 24 72 65 76 6e 72 29 0a 09 20 20 20  ags($revnr)..   
5d50: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20   } else {...set 
5d60: 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 76 6e  rev $myrev($revn
5d70: 72 29 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67  r)...foreach tag
5d80: 20 24 74 61 67 6c 69 73 74 20 7b 0a 09 09 20 20   $taglist {...  
5d90: 20 20 24 72 65 76 20 61 64 64 74 61 67 20 20 20    $rev addtag   
5da0: 20 24 74 61 67 0a 09 09 20 20 20 20 24 74 61 67   $tag...    $tag
5db0: 20 73 65 74 74 61 67 72 65 76 20 24 72 65 76 0a   settagrev $rev.
5dc0: 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 72  ..}..    }..}..r
5dd0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
5de0: 20 6d 65 74 68 6f 64 20 44 65 74 65 72 6d 69 6e   method Determin
5df0: 65 54 68 65 52 6f 6f 74 52 65 76 69 73 69 6f 6e  eTheRootRevision
5e00: 20 7b 7d 20 7b 0a 09 23 20 54 68 65 20 72 6f 6f   {} {..# The roo
5e10: 74 20 69 73 20 74 68 65 20 6f 6e 65 20 72 65 76  t is the one rev
5e20: 69 73 69 6f 6e 20 77 68 69 63 68 20 68 61 73 20  ision which has 
5e30: 6e 6f 20 70 61 72 65 6e 74 2e 20 42 79 0a 09 23  no parent. By..#
5e40: 20 63 68 65 63 6b 69 6e 67 20 61 6c 6c 20 72 65   checking all re
5e50: 76 69 73 69 6f 6e 73 20 77 65 20 65 6e 73 75 72  visions we ensur
5e60: 65 20 74 68 61 74 20 77 65 20 63 61 6e 20 64 65  e that we can de
5e70: 74 65 63 74 20 61 6e 64 0a 09 23 20 72 65 70 6f  tect and..# repo
5e80: 72 74 20 74 68 65 20 63 61 73 65 20 6f 66 20 6d  rt the case of m
5e90: 75 6c 74 69 70 6c 65 20 72 6f 6f 74 73 2e 20 57  ultiple roots. W
5ea0: 69 74 68 6f 75 74 20 74 68 61 74 20 77 65 20 63  ithout that we c
5eb0: 6f 75 6c 64 0a 09 23 20 73 69 6d 70 6c 79 20 74  ould..# simply t
5ec0: 61 6b 65 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e  ake one revision
5ed0: 20 61 6e 64 20 66 6f 6c 6c 6f 77 20 74 68 65 20   and follow the 
5ee0: 70 61 72 65 6e 74 20 6c 69 6e 6b 73 20 74 6f 0a  parent links to.
5ef0: 09 23 20 74 68 65 69 72 20 72 6f 6f 74 20 28 73  .# their root (s
5f00: 69 63 21 29 2e 0a 0a 09 66 6f 72 65 61 63 68 20  ic!)....foreach 
5f10: 7b 72 65 76 6e 72 20 72 65 76 7d 20 5b 61 72 72  {revnr rev} [arr
5f20: 61 79 20 67 65 74 20 6d 79 72 65 76 5d 20 7b 0a  ay get myrev] {.
5f30: 09 20 20 20 20 69 66 20 7b 5b 24 72 65 76 20 68  .    if {[$rev h
5f40: 61 73 70 61 72 65 6e 74 5d 7d 20 63 6f 6e 74 69  asparent]} conti
5f50: 6e 75 65 0a 09 20 20 20 20 69 6e 74 65 67 72 69  nue..    integri
5f60: 74 79 20 61 73 73 65 72 74 20 7b 24 6d 79 72 6f  ty assert {$myro
5f70: 6f 74 20 65 71 20 22 22 7d 20 7b 4d 75 6c 74 69  ot eq ""} {Multi
5f80: 70 6c 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f  ple root revisio
5f90: 6e 73 20 66 6f 75 6e 64 7d 0a 09 20 20 20 20 73  ns found}..    s
5fa0: 65 74 20 6d 79 72 6f 6f 74 20 24 72 65 76 0a 09  et myroot $rev..
5fb0: 7d 0a 0a 09 23 20 49 6e 20 74 68 65 20 66 75 74  }...# In the fut
5fc0: 75 72 65 20 77 65 20 61 6c 73 6f 20 6e 65 65 64  ure we also need
5fd0: 20 61 20 6c 69 73 74 2c 20 61 73 20 62 72 61 6e   a list, as bran
5fe0: 63 68 65 73 20 63 61 6e 20 62 65 63 6f 6d 65 0a  ches can become.
5ff0: 09 23 20 73 65 76 65 72 65 64 20 66 72 6f 6d 20  .# severed from 
6000: 74 68 65 69 72 20 70 61 72 65 6e 74 2c 20 6d 61  their parent, ma
6010: 6b 69 6e 67 20 74 68 65 6d 20 74 68 65 69 72 20  king them their 
6020: 6f 77 6e 20 72 6f 6f 74 2e 0a 09 73 65 74 20 6d  own root...set m
6030: 79 72 6f 6f 74 73 20 5b 6c 69 73 74 20 24 6d 79  yroots [list $my
6040: 72 6f 6f 74 5d 0a 09 72 65 74 75 72 6e 0a 20 20  root]..return.  
6050: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
6060: 44 65 74 65 72 6d 69 6e 65 52 65 76 69 73 69 6f  DetermineRevisio
6070: 6e 4f 70 65 72 61 74 69 6f 6e 73 20 7b 7d 20 7b  nOperations {} {
6080: 0a 09 66 6f 72 65 61 63 68 20 72 65 76 20 24 6d  ..foreach rev $m
6090: 79 72 65 76 69 73 69 6f 6e 73 20 7b 20 24 72 65  yrevisions { $re
60a0: 76 20 64 65 74 65 72 6d 69 6e 65 6f 70 65 72 61  v determineopera
60b0: 74 69 6f 6e 20 7d 0a 09 72 65 74 75 72 6e 0a 20  tion }..return. 
60c0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
60d0: 20 44 65 74 65 72 6d 69 6e 65 4c 69 6e 65 73 4f   DetermineLinesO
60e0: 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20 7b 7d 20  fDevelopment {} 
60f0: 7b 0a 09 23 20 46 6f 72 20 72 65 76 69 73 69 6f  {..# For revisio
6100: 6e 73 20 74 68 69 73 20 68 61 73 20 62 65 65 6e  ns this has been
6110: 20 64 6f 6e 65 20 61 6c 72 65 61 64 79 2c 20 69   done already, i
6120: 6e 20 27 65 78 74 65 6e 64 27 2e 20 4e 6f 77 0a  n 'extend'. Now.
6130: 09 23 20 77 65 20 64 6f 20 74 68 69 73 20 66 6f  .# we do this fo
6140: 72 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 61  r the branches a
6150: 6e 64 20 74 61 67 73 2e 0a 0a 09 66 6f 72 65 61  nd tags....forea
6160: 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20 5b 61  ch {_ branch} [a
6170: 72 72 61 79 20 67 65 74 20 6d 79 62 72 61 6e 63  rray get mybranc
6180: 68 65 73 5d 20 7b 0a 09 20 20 20 20 24 62 72 61  hes] {..    $bra
6190: 6e 63 68 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c  nch setlod [$sel
61a0: 66 20 47 65 74 4c 4f 44 20 5b 24 62 72 61 6e 63  f GetLOD [$branc
61b0: 68 20 70 61 72 65 6e 74 72 65 76 6e 72 5d 5d 0a  h parentrevnr]].
61c0: 09 7d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 5f 20  .}...foreach {_ 
61d0: 74 61 67 6c 69 73 74 7d 20 5b 61 72 72 61 79 20  taglist} [array 
61e0: 67 65 74 20 6d 79 74 61 67 73 5d 20 7b 0a 09 20  get mytags] {.. 
61f0: 20 20 20 66 6f 72 65 61 63 68 20 74 61 67 20 24     foreach tag $
6200: 74 61 67 6c 69 73 74 20 7b 0a 09 09 24 74 61 67  taglist {...$tag
6210: 20 73 65 74 6c 6f 64 20 5b 24 73 65 6c 66 20 47   setlod [$self G
6220: 65 74 4c 4f 44 20 5b 24 74 61 67 20 74 61 67 72  etLOD [$tag tagr
6230: 65 76 6e 72 5d 5d 0a 09 20 20 20 20 7d 0a 09 7d  evnr]]..    }..}
6240: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
6250: 20 20 20 20 6d 65 74 68 6f 64 20 47 65 74 4c 4f      method GetLO
6260: 44 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 69 66 20  D {revnr} {..if 
6270: 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76  {[rev istrunkrev
6280: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20  nr $revnr]} {.. 
6290: 20 20 20 72 65 74 75 72 6e 20 24 6d 79 74 72 75     return $mytru
62a0: 6e 6b 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20  nk..} else {..  
62b0: 20 20 72 65 74 75 72 6e 20 5b 24 73 65 6c 66 20    return [$self 
62c0: 52 65 76 32 42 72 61 6e 63 68 20 24 72 65 76 6e  Rev2Branch $revn
62d0: 72 5d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20  r]..}.    }..   
62e0: 20 6d 65 74 68 6f 64 20 48 61 6e 64 6c 65 4e 6f   method HandleNo
62f0: 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61  nTrunkDefaultBra
6300: 6e 63 68 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65  nch {} {..set re
6310: 76 6c 69 73 74 20 5b 24 73 65 6c 66 20 4e 6f 6e  vlist [$self Non
6320: 54 72 75 6e 6b 44 65 66 61 75 6c 74 52 65 76 69  TrunkDefaultRevi
6330: 73 69 6f 6e 73 5d 0a 09 69 66 20 7b 21 5b 6c 6c  sions]..if {![ll
6340: 65 6e 67 74 68 20 24 72 65 76 6c 69 73 74 5d 7d  ength $revlist]}
6350: 20 72 65 74 75 72 6e 0a 0a 09 24 73 65 6c 66 20   return...$self 
6360: 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44 65  AdjustNonTrunkDe
6370: 66 61 75 6c 74 42 72 61 6e 63 68 20 24 72 65 76  faultBranch $rev
6380: 6c 69 73 74 0a 09 24 73 65 6c 66 20 43 68 65 63  list..$self Chec
6390: 6b 4c 4f 44 73 0a 09 72 65 74 75 72 6e 0a 20 20  kLODs..return.  
63a0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
63b0: 4e 6f 6e 54 72 75 6e 6b 44 65 66 61 75 6c 74 52  NonTrunkDefaultR
63c0: 65 76 69 73 69 6f 6e 73 20 7b 7d 20 7b 0a 09 23  evisions {} {..#
63d0: 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 20 74 68   From cvs2svn th
63e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 65 78 70 6c  e following expl
63f0: 61 6e 61 74 69 6f 6e 20 28 77 69 74 68 20 6d 6f  anation (with mo
6400: 64 69 66 69 63 61 74 69 6f 6e 73 0a 09 23 20 66  difications..# f
6410: 6f 72 20 6f 75 72 20 61 6c 67 6f 72 69 74 68 6d  or our algorithm
6420: 29 3a 0a 0a 09 23 20 44 65 74 65 72 6d 69 6e 65  ):...# Determine
6430: 20 77 68 65 74 68 65 72 20 74 68 65 72 65 20 61   whether there a
6440: 72 65 20 61 6e 79 20 6e 6f 6e 2d 74 72 75 6e 6b  re any non-trunk
6450: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a   default branch.
6460: 09 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09  .# revisions....
6470: 23 20 49 66 20 61 20 6e 6f 6e 2d 74 72 75 6e 6b  # If a non-trunk
6480: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20   default branch 
6490: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f  is determined to
64a0: 20 68 61 76 65 20 65 78 69 73 74 65 64 2c 0a 09   have existed,..
64b0: 23 20 72 65 74 75 72 6e 20 61 20 6c 69 73 74 20  # return a list 
64c0: 6f 66 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 61  of objects for a
64d0: 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20 74 68 61  ll revisions tha
64e0: 74 20 77 65 72 65 20 6f 6e 63 65 0a 09 23 20 6e  t were once..# n
64f0: 6f 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74  on-trunk default
6500: 20 72 65 76 69 73 69 6f 6e 73 2c 20 69 6e 20 64   revisions, in d
6510: 65 70 65 6e 64 65 6e 63 79 20 6f 72 64 65 72 20  ependency order 
6520: 28 69 2e 65 2e 20 72 6f 6f 74 0a 09 23 20 66 69  (i.e. root..# fi
6530: 72 73 74 29 2e 0a 0a 09 23 20 54 68 65 72 65 20  rst)....# There 
6540: 61 72 65 20 74 77 6f 20 63 61 73 65 73 20 74 6f  are two cases to
6550: 20 68 61 6e 64 6c 65 3a 0a 0a 09 23 20 4f 6e 65   handle:...# One
6560: 20 63 61 73 65 20 69 73 20 73 69 6d 70 6c 65 2e   case is simple.
6570: 20 20 54 68 65 20 52 43 53 20 66 69 6c 65 20 6c    The RCS file l
6580: 69 73 74 73 20 61 20 64 65 66 61 75 6c 74 20 62  ists a default b
6590: 72 61 6e 63 68 0a 09 23 20 65 78 70 6c 69 63 69  ranch..# explici
65a0: 74 6c 79 20 69 6e 20 69 74 73 20 68 65 61 64 65  tly in its heade
65b0: 72 2c 20 73 75 63 68 20 61 73 20 27 31 2e 31 2e  r, such as '1.1.
65c0: 31 27 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73  1'.  In this cas
65d0: 65 2c 20 77 65 0a 09 23 20 6b 6e 6f 77 20 74 68  e, we..# know th
65e0: 61 74 20 65 76 65 72 79 20 72 65 76 69 73 69 6f  at every revisio
65f0: 6e 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20  n on the vendor 
6600: 62 72 61 6e 63 68 20 69 73 20 74 6f 20 62 65 0a  branch is to be.
6610: 09 23 20 74 72 65 61 74 65 64 20 61 73 20 68 65  .# treated as he
6620: 61 64 20 6f 66 20 74 72 75 6e 6b 20 61 74 20 74  ad of trunk at t
6630: 68 61 74 20 70 6f 69 6e 74 20 69 6e 20 74 69 6d  hat point in tim
6640: 65 2e 0a 0a 09 23 20 42 75 74 20 74 68 65 72 65  e....# But there
6650: 27 73 20 61 6c 73 6f 20 61 20 64 65 67 65 6e 65  's also a degene
6660: 72 61 74 65 20 63 61 73 65 2e 20 20 54 68 65 20  rate case.  The 
6670: 52 43 53 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f  RCS file does no
6680: 74 0a 09 23 20 63 75 72 72 65 6e 74 6c 79 20 68  t..# currently h
6690: 61 76 65 20 61 20 64 65 66 61 75 6c 74 20 62 72  ave a default br
66a0: 61 6e 63 68 2c 20 79 65 74 20 77 65 20 63 61 6e  anch, yet we can
66b0: 20 64 65 64 75 63 65 20 74 68 61 74 20 66 6f 72   deduce that for
66c0: 0a 09 23 20 73 6f 6d 65 20 70 65 72 69 6f 64 20  ..# some period 
66d0: 69 6e 20 74 68 65 20 70 61 73 74 20 69 74 20 70  in the past it p
66e0: 72 6f 62 61 62 6c 79 20 2a 64 69 64 2a 20 68 61  robably *did* ha
66f0: 76 65 20 6f 6e 65 2e 20 20 46 6f 72 0a 09 23 20  ve one.  For..# 
6700: 65 78 61 6d 70 6c 65 2c 20 74 68 65 20 66 69 6c  example, the fil
6710: 65 20 68 61 73 20 76 65 6e 64 6f 72 20 72 65 76  e has vendor rev
6720: 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 31 20 2d  isions 1.1.1.1 -
6730: 3e 20 31 2e 31 2e 31 2e 39 36 2c 0a 09 23 20 61  > 1.1.1.96,..# a
6740: 6c 6c 20 6f 66 20 77 68 69 63 68 20 61 72 65 20  ll of which are 
6750: 64 61 74 65 64 20 62 65 66 6f 72 65 20 31 2e 32  dated before 1.2
6760: 2c 20 61 6e 64 20 74 68 65 6e 20 69 74 20 68 61  , and then it ha
6770: 73 20 31 2e 31 2e 31 2e 39 37 0a 09 23 20 2d 3e  s 1.1.1.97..# ->
6780: 20 31 2e 31 2e 31 2e 31 30 30 20 64 61 74 65 64   1.1.1.100 dated
6790: 20 61 66 74 65 72 20 31 2e 32 2e 20 20 49 6e 20   after 1.2.  In 
67a0: 74 68 69 73 20 63 61 73 65 2c 20 77 65 20 73 68  this case, we sh
67b0: 6f 75 6c 64 0a 09 23 20 72 65 63 6f 72 64 20 31  ould..# record 1
67c0: 2e 31 2e 31 2e 39 36 20 61 73 20 74 68 65 20 6c  .1.1.96 as the l
67d0: 61 73 74 20 76 65 6e 64 6f 72 20 72 65 76 69 73  ast vendor revis
67e0: 69 6f 6e 20 74 6f 20 68 61 76 65 20 62 65 65 6e  ion to have been
67f0: 20 74 68 65 0a 09 23 20 68 65 61 64 20 6f 66 20   the..# head of 
6800: 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e  the default bran
6810: 63 68 2e 0a 0a 09 69 66 20 7b 24 6d 79 70 72 69  ch....if {$mypri
6820: 6e 63 69 70 61 6c 20 6e 65 20 22 22 7d 20 7b 0a  ncipal ne ""} {.
6830: 09 20 20 20 20 23 20 54 68 65 72 65 20 69 73 20  .    # There is 
6840: 73 74 69 6c 6c 20 61 20 64 65 66 61 75 6c 74 20  still a default 
6850: 62 72 61 6e 63 68 3b 20 74 68 61 74 20 6d 65 61  branch; that mea
6860: 6e 73 20 74 68 61 74 20 61 6c 6c 0a 09 20 20 20  ns that all..   
6870: 20 23 20 72 65 76 69 73 69 6f 6e 73 20 6f 6e 20   # revisions on 
6880: 74 68 61 74 20 62 72 61 6e 63 68 20 67 65 74 20  that branch get 
6890: 6d 61 72 6b 65 64 2e 0a 0a 09 20 20 20 20 6c 6f  marked....    lo
68a0: 67 20 77 72 69 74 65 20 35 20 66 69 6c 65 20 22  g write 5 file "
68b0: 46 6f 75 6e 64 20 65 78 70 6c 69 63 69 74 6c 79  Found explicitly
68c0: 20 6d 61 72 6b 65 64 20 4e 54 44 42 22 0a 0a 09   marked NTDB"...
68d0: 20 20 20 20 73 65 74 20 72 6e 65 78 74 20 5b 24      set rnext [$
68e0: 6d 79 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20  myroot child].. 
68f0: 20 20 20 69 66 20 7b 24 72 6e 65 78 74 20 6e 65     if {$rnext ne
6900: 20 22 22 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65   ""} {...trouble
6910: 20 66 61 74 61 6c 20 22 46 69 6c 65 20 77 69 74   fatal "File wit
6920: 68 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  h default branch
6930: 20 24 6d 79 70 72 69 6e 63 69 70 61 6c 20 61 6c   $myprincipal al
6940: 73 6f 20 68 61 73 20 72 65 76 69 73 69 6f 6e 20  so has revision 
6950: 5b 24 72 6e 65 78 74 20 72 65 76 6e 72 5d 22 0a  [$rnext revnr]".
6960: 09 09 72 65 74 75 72 6e 0a 09 20 20 20 20 7d 0a  ..return..    }.
6970: 0a 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24  ..    set rev [$
6980: 6d 79 62 72 61 6e 63 68 65 73 28 24 6d 79 70 72  mybranches($mypr
6990: 69 6e 63 69 70 61 6c 29 20 63 68 69 6c 64 5d 0a  incipal) child].
69a0: 09 20 20 20 20 73 65 74 20 72 65 73 20 7b 7d 0a  .    set res {}.
69b0: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65  ..    while {$re
69c0: 76 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61 70  v ne ""} {...lap
69d0: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09  pend res $rev...
69e0: 73 65 74 20 72 65 76 20 5b 24 72 65 76 20 63 68  set rev [$rev ch
69f0: 69 6c 64 5d 0a 09 20 20 20 20 7d 0a 0a 09 20 20  ild]..    }...  
6a00: 20 20 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09    return $res...
6a10: 7d 20 65 6c 73 65 69 66 20 7b 24 6d 79 69 6d 70  } elseif {$myimp
6a20: 6f 72 74 65 64 7d 20 7b 0a 09 20 20 20 20 23 20  orted} {..    # 
6a30: 4e 6f 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  No default branc
6a40: 68 2c 20 62 75 74 20 74 68 65 20 66 69 6c 65 20  h, but the file 
6a50: 61 70 70 65 61 72 73 20 74 6f 20 68 61 76 65 20  appears to have 
6a60: 62 65 65 6e 0a 09 20 20 20 20 23 20 69 6d 70 6f  been..    # impo
6a70: 72 74 65 64 2e 20 20 53 6f 20 6f 75 72 20 65 64  rted.  So our ed
6a80: 75 63 61 74 65 64 20 67 75 65 73 73 20 69 73 20  ucated guess is 
6a90: 74 68 61 74 20 61 6c 6c 20 72 65 76 69 73 69 6f  that all revisio
6aa0: 6e 73 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 65  ns..    # on the
6ab0: 20 27 31 2e 31 2e 31 27 20 62 72 61 6e 63 68 20   '1.1.1' branch 
6ac0: 77 69 74 68 20 74 69 6d 65 73 74 61 6d 70 73 20  with timestamps 
6ad0: 70 72 69 6f 72 20 74 6f 20 74 68 65 0a 09 20 20  prior to the..  
6ae0: 20 20 23 20 74 69 6d 65 73 74 61 6d 70 20 6f 66    # timestamp of
6af0: 20 27 31 2e 32 27 20 77 65 72 65 20 6e 6f 6e 2d   '1.2' were non-
6b00: 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72  trunk default br
6b10: 61 6e 63 68 0a 09 20 20 20 20 23 20 72 65 76 69  anch..    # revi
6b20: 73 69 6f 6e 73 2e 0a 0a 09 20 20 20 20 23 20 54  sions....    # T
6b30: 68 69 73 20 72 65 61 6c 6c 79 20 6f 6e 6c 79 20  his really only 
6b40: 70 72 6f 63 65 73 73 65 73 20 73 74 61 6e 64 61  processes standa
6b50: 72 64 20 27 31 2e 31 2e 31 2e 2a 27 2d 73 74 79  rd '1.1.1.*'-sty
6b60: 6c 65 0a 09 20 20 20 20 23 20 76 65 6e 64 6f 72  le..    # vendor
6b70: 20 72 65 76 69 73 69 6f 6e 73 2e 20 20 4f 6e 65   revisions.  One
6b80: 20 63 6f 75 6c 64 20 63 6f 6e 63 65 69 76 61 62   could conceivab
6b90: 6c 79 20 68 61 76 65 20 61 20 66 69 6c 65 0a 09  ly have a file..
6ba0: 20 20 20 20 23 20 77 68 6f 73 65 20 64 65 66 61      # whose defa
6bb0: 75 6c 74 20 62 72 61 6e 63 68 20 69 73 20 31 2e  ult branch is 1.
6bc0: 31 2e 33 20 6f 72 20 77 68 61 74 65 76 65 72 2c  1.3 or whatever,
6bd0: 20 6f 72 20 77 61 73 20 74 68 61 74 0a 09 20 20   or was that..  
6be0: 20 20 23 20 61 74 20 73 6f 6d 65 20 70 6f 69 6e    # at some poin
6bf0: 74 20 69 6e 20 74 69 6d 65 2c 20 77 69 74 68 20  t in time, with 
6c00: 76 65 6e 64 6f 72 20 72 65 76 69 73 69 6f 6e 73  vendor revisions
6c10: 20 31 2e 31 2e 33 2e 31 2c 0a 09 20 20 20 20 23   1.1.3.1,..    #
6c20: 20 31 2e 31 2e 33 2e 32 2c 20 65 74 63 2e 20 20   1.1.3.2, etc.  
6c30: 42 75 74 20 77 69 74 68 20 74 68 65 20 64 65 66  But with the def
6c40: 61 75 6c 74 20 62 72 61 6e 63 68 20 67 6f 6e 65  ault branch gone
6c50: 20 6e 6f 77 2c 0a 09 20 20 20 20 23 20 77 65 27   now,..    # we'
6c60: 64 20 68 61 76 65 20 6e 6f 20 62 61 73 69 73 20  d have no basis 
6c70: 66 6f 72 20 61 73 73 75 6d 69 6e 67 20 74 68 61  for assuming tha
6c80: 74 20 74 68 65 20 6e 6f 6e 2d 73 74 61 6e 64 61  t the non-standa
6c90: 72 64 0a 09 20 20 20 20 23 20 76 65 6e 64 6f 72  rd..    # vendor
6ca0: 20 62 72 61 6e 63 68 20 68 61 64 20 65 76 65 72   branch had ever
6cb0: 20 62 65 65 6e 20 74 68 65 20 64 65 66 61 75 6c   been the defaul
6cc0: 74 20 62 72 61 6e 63 68 20 61 6e 79 77 61 79 2e  t branch anyway.
6cd0: 0a 0a 09 20 20 20 20 23 20 4e 6f 74 65 20 74 68  ...    # Note th
6ce0: 61 74 20 77 65 20 72 65 6c 79 20 6f 6e 20 63 6f  at we rely on co
6cf0: 6d 70 61 72 69 73 6f 6e 73 20 62 65 74 77 65 65  mparisons betwee
6d00: 6e 20 74 68 65 20 74 69 6d 65 73 74 61 6d 70 73  n the timestamps
6d10: 0a 09 20 20 20 20 23 20 6f 66 20 74 68 65 20 72  ..    # of the r
6d20: 65 76 69 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20  evisions on the 
6d30: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 61 6e  vendor branch an
6d40: 64 20 74 68 61 74 20 6f 66 0a 09 20 20 20 20 23  d that of..    #
6d50: 20 72 65 76 69 73 69 6f 6e 20 31 2e 32 2c 20 65   revision 1.2, e
6d60: 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 20 74  ven though the t
6d70: 69 6d 65 73 74 61 6d 70 73 20 6d 69 67 68 74 20  imestamps might 
6d80: 62 65 0a 09 20 20 20 20 23 20 69 6e 63 6f 72 72  be..    # incorr
6d90: 65 63 74 20 64 75 65 20 74 6f 20 63 6c 6f 63 6b  ect due to clock
6da0: 20 73 6b 65 77 2e 20 20 57 65 20 63 6f 75 6c 64   skew.  We could
6db0: 20 64 6f 20 61 20 73 6c 69 67 68 74 6c 79 0a 09   do a slightly..
6dc0: 20 20 20 20 23 20 62 65 74 74 65 72 20 6a 6f 62      # better job
6dd0: 20 69 66 20 77 65 20 75 73 65 64 20 74 68 65 20   if we used the 
6de0: 63 68 61 6e 67 65 73 65 74 20 74 69 6d 65 73 74  changeset timest
6df0: 61 6d 70 73 2c 20 61 73 20 69 74 20 69 73 0a 09  amps, as it is..
6e00: 20 20 20 20 23 20 70 6f 73 73 69 62 6c 65 20 74      # possible t
6e10: 68 61 74 20 74 68 65 20 64 65 70 65 6e 64 65 6e  hat the dependen
6e20: 63 69 65 73 20 74 68 61 74 20 77 65 6e 74 20 69  cies that went i
6e30: 6e 74 6f 0a 09 20 20 20 20 23 20 64 65 74 65 72  nto..    # deter
6e40: 6d 69 6e 69 6e 67 20 74 68 6f 73 65 20 74 69 6d  mining those tim
6e50: 65 73 74 61 6d 70 73 20 61 72 65 20 6d 6f 72 65  estamps are more
6e60: 20 61 63 63 75 72 61 74 65 2e 20 20 42 75 74 0a   accurate.  But.
6e70: 09 20 20 20 20 23 20 74 68 61 74 20 77 6f 75 6c  .    # that woul
6e80: 64 20 72 65 71 75 69 72 65 20 61 6e 20 65 78 74  d require an ext
6e90: 72 61 20 70 61 73 73 20 6f 72 20 74 77 6f 2e 0a  ra pass or two..
6ea0: 0a 09 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f  ..    if {![info
6eb0: 20 65 78 69 73 74 73 20 6d 79 62 72 61 6e 63 68   exists mybranch
6ec0: 65 73 28 31 2e 31 2e 31 29 5d 7d 20 7b 20 72 65  es(1.1.1)]} { re
6ed0: 74 75 72 6e 20 7b 7d 20 7d 0a 0a 09 20 20 20 20  turn {} }...    
6ee0: 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69 6c 65  log write 5 file
6ef0: 20 22 44 65 64 75 63 65 64 20 65 78 69 73 74 65   "Deduced existe
6f00: 6e 63 65 20 6f 66 20 4e 54 44 42 22 0a 0a 09 20  nce of NTDB"... 
6f10: 20 20 20 73 65 74 20 72 65 76 20 20 5b 24 6d 79     set rev  [$my
6f20: 62 72 61 6e 63 68 65 73 28 31 2e 31 2e 31 29 20  branches(1.1.1) 
6f30: 63 68 69 6c 64 5d 0a 09 20 20 20 20 73 65 74 20  child]..    set 
6f40: 72 65 73 20 20 7b 7d 0a 09 20 20 20 20 73 65 74  res  {}..    set
6f50: 20 73 74 6f 70 20 5b 24 6d 79 72 6f 6f 74 20 63   stop [$myroot c
6f60: 68 69 6c 64 5d 0a 0a 09 20 20 20 20 69 66 20 7b  hild]...    if {
6f70: 24 73 74 6f 70 20 65 71 20 22 22 7d 20 7b 0a 09  $stop eq ""} {..
6f80: 09 23 20 47 65 74 20 65 76 65 72 79 74 68 69 6e  .# Get everythin
6f90: 67 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a  g on the branch.
6fa0: 09 09 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65  ..while {$rev ne
6fb0: 20 22 22 7d 20 7b 0a 09 09 20 20 20 20 6c 61 70   ""} {...    lap
6fc0: 70 65 6e 64 20 72 65 73 20 24 72 65 76 0a 09 09  pend res $rev...
6fd0: 20 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65      set rev [$re
6fe0: 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09 20 20  v child]...}..  
6ff0: 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 23 20 43    } else {...# C
7000: 6f 6c 6c 65 63 74 20 65 76 65 72 79 74 68 69 6e  ollect everythin
7010: 67 20 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 20  g on the branch 
7020: 77 68 69 63 68 20 73 65 65 6d 73 20 74 6f 20 68  which seems to h
7030: 61 76 65 0a 09 09 23 20 62 65 65 6e 20 63 6f 6d  ave...# been com
7040: 6d 69 74 74 65 64 20 62 65 66 6f 72 65 20 74 68  mitted before th
7050: 65 20 66 69 72 73 74 20 70 72 69 6d 61 72 79 20  e first primary 
7060: 63 68 69 6c 64 20 6f 66 20 74 68 65 0a 09 09 23  child of the...#
7070: 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 0a   root revision..
7080: 09 09 73 65 74 20 73 74 6f 70 64 61 74 65 20 5b  ..set stopdate [
7090: 24 73 74 6f 70 20 64 61 74 65 5d 0a 09 09 77 68  $stop date]...wh
70a0: 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d  ile {$rev ne ""}
70b0: 20 7b 0a 09 09 20 20 20 20 69 66 20 7b 5b 24 72   {...    if {[$r
70c0: 65 76 20 64 61 74 65 5d 20 3e 3d 20 24 73 74 6f  ev date] >= $sto
70d0: 70 64 61 74 65 7d 20 62 72 65 61 6b 0a 09 09 20  pdate} break... 
70e0: 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 20 24     lappend res $
70f0: 72 65 76 0a 09 09 20 20 20 20 73 65 74 20 72 65  rev...    set re
7100: 76 20 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09  v [$rev child]..
7110: 09 7d 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  .}..    }...    
7120: 72 65 74 75 72 6e 20 24 72 65 73 0a 0a 09 7d 20  return $res...} 
7130: 65 6c 73 65 20 7b 0a 09 20 20 20 20 72 65 74 75  else {..    retu
7140: 72 6e 20 7b 7d 0a 09 7d 0a 20 20 20 20 7d 0a 0a  rn {}..}.    }..
7150: 20 20 20 20 23 20 47 65 6e 65 72 61 6c 20 6e 6f      # General no
7160: 74 65 3a 20 49 6e 20 74 68 65 20 66 6f 6c 6c 6f  te: In the follo
7170: 77 69 6e 67 20 6d 65 74 68 6f 64 73 20 77 65 20  wing methods we 
7180: 6f 6e 6c 79 20 6d 6f 64 69 66 79 20 74 68 65 20  only modify the 
7190: 6c 69 6e 6b 73 0a 20 20 20 20 23 20 62 65 74 77  links.    # betw
71a0: 65 65 6e 20 72 65 76 69 73 69 6f 6e 73 20 61 6e  een revisions an
71b0: 64 20 73 79 6d 62 6f 6c 73 20 74 6f 20 72 65 73  d symbols to res
71c0: 74 72 75 63 74 75 72 65 20 74 68 65 20 72 65 76  tructure the rev
71d0: 69 73 69 6f 6e 0a 20 20 20 20 23 20 74 72 65 65  ision.    # tree
71e0: 2e 20 57 65 20 64 6f 20 5f 5f 6e 6f 74 5f 5f 20  . We do __not__ 
71f0: 64 65 73 74 72 6f 79 20 74 68 65 20 6f 62 6a 65  destroy the obje
7200: 63 74 73 2e 20 47 69 76 65 6e 20 74 68 65 20 63  cts. Given the c
7210: 6f 6d 70 6c 65 78 20 6c 69 6e 6b 73 0a 20 20 20  omplex links.   
7220: 20 23 20 47 43 20 69 73 20 64 69 66 66 69 63 75   # GC is difficu
7230: 6c 74 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c  lt at this level
7240: 2e 20 49 74 20 69 73 20 6d 75 63 68 20 65 61 73  . It is much eas
7250: 69 65 72 20 74 6f 20 64 72 6f 70 0a 20 20 20 20  ier to drop.    
7260: 23 20 65 76 65 72 79 74 68 69 6e 67 20 77 68 65  # everything whe
7270: 6e 20 77 65 20 77 65 20 61 72 65 20 64 6f 6e 65  n we we are done
7280: 2e 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69  . This happens i
7290: 6e 20 27 64 72 6f 70 27 2c 20 75 73 69 6e 67 0a  n 'drop', using.
72a0: 20 20 20 20 23 20 74 68 65 20 73 74 61 74 65 20      # the state 
72b0: 76 61 72 69 61 62 6c 65 20 27 6d 79 72 65 76 27  variable 'myrev'
72c0: 2c 20 27 6d 79 62 72 61 6e 63 68 65 73 27 2c 20  , 'mybranches', 
72d0: 61 6e 64 20 27 6d 79 74 61 67 73 27 2e 20 57 68  and 'mytags'. Wh
72e0: 61 74 20 77 65 0a 20 20 20 20 23 20 68 61 76 65  at we.    # have
72f0: 20 74 6f 20 70 65 72 73 69 73 74 2c 20 70 65 72   to persist, per
7300: 66 6f 72 6d 65 64 20 62 79 20 27 70 65 72 73 69  formed by 'persi
7310: 73 74 27 2c 20 77 65 20 6b 6e 6f 77 20 77 69 6c  st', we know wil
7320: 6c 20 62 65 0a 20 20 20 20 23 20 72 65 61 63 68  l be.    # reach
7330: 61 62 6c 65 20 74 68 72 6f 75 67 68 20 74 68 65  able through the
7340: 20 72 65 76 69 73 69 6f 6e 73 20 6c 69 73 74 65   revisions liste
7350: 64 20 69 6e 20 27 6d 79 72 6f 6f 74 73 27 20 61  d in 'myroots' a
7360: 6e 64 20 74 68 65 69 72 0a 20 20 20 20 23 20 63  nd their.    # c
7370: 68 69 6c 64 72 65 6e 20 61 6e 64 20 73 79 6d 62  hildren and symb
7380: 6f 6c 73 2e 0a 0a 20 20 20 20 6d 65 74 68 6f 64  ols...    method
7390: 20 41 64 6a 75 73 74 4e 6f 6e 54 72 75 6e 6b 44   AdjustNonTrunkD
73a0: 65 66 61 75 6c 74 42 72 61 6e 63 68 20 7b 72 65  efaultBranch {re
73b0: 76 6c 69 73 74 7d 20 7b 0a 09 73 65 74 20 73 74  vlist} {..set st
73c0: 6f 70 20 5b 24 6d 79 72 6f 6f 74 20 63 68 69 6c  op [$myroot chil
73d0: 64 5d 20 3b 23 20 72 65 76 20 27 31 2e 32 27 0a  d] ;# rev '1.2'.
73e0: 0a 09 6c 6f 67 20 77 72 69 74 65 20 35 20 66 69  ..log write 5 fi
73f0: 6c 65 20 22 41 64 6a 75 73 74 69 6e 67 20 4e 54  le "Adjusting NT
7400: 44 42 20 63 6f 6e 74 61 69 6e 69 6e 67 20 5b 6e  DB containing [n
7410: 73 70 20 5b 6c 6c 65 6e 67 74 68 20 24 72 65 76  sp [llength $rev
7420: 6c 69 73 74 5d 20 72 65 76 69 73 69 6f 6e 5d 22  list] revision]"
7430: 0a 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76  ...# From cvs2sv
7440: 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  n the following 
7450: 65 78 70 6c 61 6e 61 74 69 6f 6e 20 28 77 69 74  explanation (wit
7460: 68 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 73 0a  h modifications.
7470: 09 23 20 66 6f 72 20 6f 75 72 20 61 6c 67 6f 72  .# for our algor
7480: 69 74 68 6d 29 3a 0a 0a 09 23 20 41 64 6a 75 73  ithm):...# Adjus
7490: 74 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20  t the non-trunk 
74a0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72  default branch r
74b0: 65 76 69 73 69 6f 6e 73 20 66 6f 75 6e 64 20 69  evisions found i
74c0: 6e 20 74 68 65 0a 09 23 20 27 72 65 76 6c 69 73  n the..# 'revlis
74d0: 74 27 2e 0a 0a 09 23 20 27 6d 79 69 6d 70 6f 72  t'....# 'myimpor
74e0: 74 65 64 27 20 69 73 20 61 20 62 6f 6f 6c 65 61  ted' is a boolea
74f0: 6e 20 66 6c 61 67 20 69 6e 64 69 63 61 74 69 6e  n flag indicatin
7500: 67 20 77 68 65 74 68 65 72 20 74 68 69 73 20 66  g whether this f
7510: 69 6c 65 0a 09 23 20 61 70 70 65 61 72 73 20 74  ile..# appears t
7520: 6f 20 68 61 76 65 20 62 65 65 6e 20 69 6d 70 6f  o have been impo
7530: 72 74 65 64 2c 20 77 68 69 63 68 20 61 6c 73 6f  rted, which also
7540: 20 6d 65 61 6e 73 20 74 68 61 74 0a 09 23 20 72   means that..# r
7550: 65 76 69 73 69 6f 6e 20 31 2e 31 20 68 61 73 20  evision 1.1 has 
7560: 61 20 67 65 6e 65 72 61 74 65 64 20 6c 6f 67 20  a generated log 
7570: 6d 65 73 73 61 67 65 20 74 68 61 74 20 6e 65 65  message that nee
7580: 64 20 6e 6f 74 20 62 65 0a 09 23 20 70 72 65 73  d not be..# pres
7590: 65 72 76 65 64 2e 20 20 27 72 65 76 6c 69 73 74  erved.  'revlist
75a0: 27 20 69 73 20 61 20 6c 69 73 74 20 6f 66 20 6f  ' is a list of o
75b0: 62 6a 65 63 74 20 72 65 66 65 72 65 6e 63 65 73  bject references
75c0: 20 66 6f 72 20 74 68 65 0a 09 23 20 72 65 76 69   for the..# revi
75d0: 73 69 6f 6e 73 20 74 68 61 74 20 68 61 76 65 20  sions that have 
75e0: 62 65 65 6e 20 64 65 74 65 72 6d 69 6e 65 64 20  been determined 
75f0: 74 6f 20 62 65 20 6e 6f 6e 2d 74 72 75 6e 6b 20  to be non-trunk 
7600: 64 65 66 61 75 6c 74 0a 09 23 20 62 72 61 6e 63  default..# branc
7610: 68 20 72 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 23  h revisions....#
7620: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 66   Note that the f
7630: 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e  irst revision on
7640: 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61   the default bra
7650: 6e 63 68 20 69 73 0a 09 23 20 68 61 6e 64 6c 65  nch is..# handle
7660: 64 20 73 74 72 61 6e 67 65 6c 79 20 62 79 20 43  d strangely by C
7670: 56 53 2e 20 20 49 66 20 61 20 66 69 6c 65 20 69  VS.  If a file i
7680: 73 20 69 6d 70 6f 72 74 65 64 20 28 61 73 20 6f  s imported (as o
7690: 70 70 6f 73 65 64 0a 09 23 20 74 6f 20 62 65 69  pposed..# to bei
76a0: 6e 67 20 61 64 64 65 64 29 2c 20 43 56 53 20 63  ng added), CVS c
76b0: 72 65 61 74 65 73 20 61 20 31 2e 31 20 72 65 76  reates a 1.1 rev
76c0: 69 73 69 6f 6e 2c 20 74 68 65 6e 20 63 72 65 61  ision, then crea
76d0: 74 65 73 20 61 0a 09 23 20 76 65 6e 64 6f 72 20  tes a..# vendor 
76e0: 62 72 61 6e 63 68 20 31 2e 31 2e 31 20 62 61 73  branch 1.1.1 bas
76f0: 65 64 20 6f 6e 20 31 2e 31 2c 20 74 68 65 6e 20  ed on 1.1, then 
7700: 63 72 65 61 74 65 73 20 61 20 31 2e 31 2e 31 2e  creates a 1.1.1.
7710: 31 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 74 68  1..# revision th
7720: 61 74 20 69 73 20 69 64 65 6e 74 69 63 61 6c 20  at is identical 
7730: 74 6f 20 74 68 65 20 31 2e 31 20 72 65 76 69 73  to the 1.1 revis
7740: 69 6f 6e 20 28 69 2e 65 2e 2c 20 69 74 73 0a 09  ion (i.e., its..
7750: 23 20 64 65 6c 74 61 74 65 78 74 20 69 73 20 65  # deltatext is e
7760: 6d 70 74 79 29 2e 20 20 54 68 65 20 6c 6f 67 20  mpty).  The log 
7770: 6d 65 73 73 61 67 65 20 74 68 61 74 20 74 68 65  message that the
7780: 20 75 73 65 72 20 74 79 70 65 64 0a 09 23 20 77   user typed..# w
7790: 68 65 6e 20 69 6d 70 6f 72 74 69 6e 67 20 69 73  hen importing is
77a0: 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68 65   stored with the
77b0: 20 31 2e 31 2e 31 2e 31 20 72 65 76 69 73 69 6f   1.1.1.1 revisio
77c0: 6e 2e 20 20 54 68 65 20 31 2e 31 0a 09 23 20 72  n.  The 1.1..# r
77d0: 65 76 69 73 69 6f 6e 20 61 6c 77 61 79 73 20 63  evision always c
77e0: 6f 6e 74 61 69 6e 73 20 61 20 73 74 61 6e 64 61  ontains a standa
77f0: 72 64 2c 20 67 65 6e 65 72 61 74 65 64 20 6c 6f  rd, generated lo
7800: 67 20 6d 65 73 73 61 67 65 2c 0a 09 23 20 27 49  g message,..# 'I
7810: 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c  nitial revision\
7820: 6e 27 2e 0a 0a 09 23 20 57 68 65 6e 20 77 65 20  n'....# When we 
7830: 64 65 74 65 63 74 20 61 20 73 74 72 61 69 67 68  detect a straigh
7840: 74 66 6f 72 77 61 72 64 20 69 6d 70 6f 72 74 20  tforward import 
7850: 6c 69 6b 65 20 74 68 69 73 2c 20 77 65 20 77 61  like this, we wa
7860: 6e 74 0a 09 23 20 74 6f 20 68 61 6e 64 6c 65 20  nt..# to handle 
7870: 69 74 20 62 79 20 64 65 6c 65 74 69 6e 67 20 74  it by deleting t
7880: 68 65 20 31 2e 31 20 72 65 76 69 73 69 6f 6e 20  he 1.1 revision 
7890: 28 77 68 69 63 68 20 64 6f 65 73 6e 27 74 0a 09  (which doesn't..
78a0: 23 20 63 6f 6e 74 61 69 6e 20 61 6e 79 20 75 73  # contain any us
78b0: 65 66 75 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  eful information
78c0: 29 20 61 6e 64 20 6d 61 6b 69 6e 67 20 31 2e 31  ) and making 1.1
78d0: 2e 31 2e 31 20 69 6e 74 6f 20 61 6e 0a 09 23 20  .1.1 into an..# 
78e0: 69 6e 64 65 70 65 6e 64 65 6e 74 20 72 6f 6f 74  independent root
78f0: 20 69 6e 20 74 68 65 20 66 69 6c 65 27 73 20 64   in the file's d
7900: 65 70 65 6e 64 65 6e 63 79 20 74 72 65 65 2e 20  ependency tree. 
7910: 20 49 6e 20 53 56 4e 2c 0a 09 23 20 31 2e 31 2e   In SVN,..# 1.1.
7920: 31 2e 31 20 77 69 6c 6c 20 62 65 20 61 64 64 65  1.1 will be adde
7930: 64 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74 68  d directly to th
7940: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20  e vendor branch 
7950: 77 69 74 68 20 69 74 73 0a 09 23 20 69 6e 69 74  with its..# init
7960: 69 61 6c 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68  ial content.  Th
7970: 65 6e 20 69 6e 20 61 20 73 70 65 63 69 61 6c 20  en in a special 
7980: 27 70 6f 73 74 2d 63 6f 6d 6d 69 74 27 2c 20 74  'post-commit', t
7990: 68 65 0a 09 23 20 31 2e 31 2e 31 2e 31 20 72 65  he..# 1.1.1.1 re
79a0: 76 69 73 69 6f 6e 20 69 73 20 63 6f 70 69 65 64  vision is copied
79b0: 20 62 61 63 6b 20 74 6f 20 74 72 75 6e 6b 2e 0a   back to trunk..
79c0: 0a 09 23 20 49 66 20 74 68 65 20 75 73 65 72 20  ..# If the user 
79d0: 69 6d 70 6f 72 74 73 20 61 67 61 69 6e 20 74 6f  imports again to
79e0: 20 74 68 65 20 73 61 6d 65 20 76 65 6e 64 6f 72   the same vendor
79f0: 20 62 72 61 6e 63 68 2c 20 74 68 65 6e 20 43 56   branch, then CV
7a00: 53 0a 09 23 20 63 72 65 61 74 65 73 20 72 65 76  S..# creates rev
7a10: 69 73 69 6f 6e 73 20 31 2e 31 2e 31 2e 32 2c 20  isions 1.1.1.2, 
7a20: 31 2e 31 2e 31 2e 33 2c 20 65 74 63 2e 20 6f 6e  1.1.1.3, etc. on
7a30: 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61 6e   the vendor bran
7a40: 63 68 2c 0a 09 23 20 2a 77 69 74 68 6f 75 74 2a  ch,..# *without*
7a50: 20 63 6f 75 6e 74 65 72 70 61 72 74 73 20 69 6e   counterparts in
7a60: 20 74 72 75 6e 6b 20 28 65 76 65 6e 20 74 68 6f   trunk (even tho
7a70: 75 67 68 20 74 68 65 73 65 20 72 65 76 69 73 69  ugh these revisi
7a80: 6f 6e 73 0a 09 23 20 65 66 66 65 63 74 69 76 65  ons..# effective
7a90: 6c 79 20 70 6c 61 79 20 74 68 65 20 72 6f 6c 65  ly play the role
7aa0: 20 6f 66 20 74 72 75 6e 6b 20 72 65 76 69 73 69   of trunk revisi
7ab0: 6f 6e 73 29 2e 20 20 53 6f 20 61 66 74 65 72 20  ons).  So after 
7ac0: 77 65 20 61 64 64 0a 09 23 20 73 75 63 68 20 72  we add..# such r
7ad0: 65 76 69 73 69 6f 6e 73 20 74 6f 20 74 68 65 20  evisions to the 
7ae0: 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 2c 20 77  vendor branch, w
7af0: 65 20 61 6c 73 6f 20 63 6f 70 79 20 74 68 65 6d  e also copy them
7b00: 20 62 61 63 6b 20 74 6f 0a 09 23 20 74 72 75 6e   back to..# trun
7b10: 6b 20 69 6e 20 70 6f 73 74 2d 63 6f 6d 6d 69 74  k in post-commit
7b20: 73 2e 0a 0a 09 23 20 57 65 20 6d 61 72 6b 20 74  s....# We mark t
7b30: 68 65 20 72 65 76 69 73 69 6f 6e 73 20 66 6f 75  he revisions fou
7b40: 6e 64 20 69 6e 20 27 72 65 76 6c 69 73 74 27 20  nd in 'revlist' 
7b50: 61 73 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63  as default branc
7b60: 68 0a 09 23 20 72 65 76 69 73 69 6f 6e 73 2e 20  h..# revisions. 
7b70: 20 41 6c 73 6f 2c 20 69 66 20 74 68 65 20 72 6f   Also, if the ro
7b80: 6f 74 20 72 65 76 69 73 69 6f 6e 20 68 61 73 20  ot revision has 
7b90: 61 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 0a  a primary child.
7ba0: 09 23 20 77 65 20 73 65 74 20 74 68 61 74 20 72  .# we set that r
7bb0: 65 76 69 73 69 6f 6e 20 74 6f 20 64 65 70 65 6e  evision to depen
7bc0: 64 20 6f 6e 20 74 68 65 20 6c 61 73 74 20 6e 6f  d on the last no
7bd0: 6e 2d 74 72 75 6e 6b 20 64 65 66 61 75 6c 74 0a  n-trunk default.
7be0: 09 23 20 62 72 61 6e 63 68 20 72 65 76 69 73 69  .# branch revisi
7bf0: 6f 6e 20 61 6e 64 20 70 6f 73 73 69 62 6c 79 20  on and possibly 
7c00: 61 64 6a 75 73 74 20 69 74 73 20 74 79 70 65 20  adjust its type 
7c10: 61 63 63 6f 72 64 69 6e 67 6c 79 2e 0a 0a 09 73  accordingly....s
7c20: 65 74 20 66 69 72 73 74 20 5b 6c 69 6e 64 65 78  et first [lindex
7c30: 20 24 72 65 76 6c 69 73 74 20 30 5d 0a 0a 09 6c   $revlist 0]...l
7c40: 6f 67 20 77 72 69 74 65 20 36 20 66 69 6c 65 20  og write 6 file 
7c50: 22 3c 5b 24 66 69 72 73 74 20 72 65 76 6e 72 5d  "<[$first revnr]
7c60: 3e 20 5b 65 78 70 72 20 7b 24 6d 79 69 6d 70 6f  > [expr {$myimpo
7c70: 72 74 65 64 20 3f 20 22 69 6d 70 6f 72 74 65 64  rted ? "imported
7c80: 22 20 3a 20 22 6e 6f 74 20 69 6d 70 6f 72 74 65  " : "not importe
7c90: 64 22 7d 5d 2c 20 5b 24 66 69 72 73 74 20 6f 70  d"}], [$first op
7ca0: 65 72 61 74 69 6f 6e 5d 2c 20 5b 65 78 70 72 20  eration], [expr 
7cb0: 7b 5b 24 66 69 72 73 74 20 68 61 73 74 65 78 74  {[$first hastext
7cc0: 5d 20 3f 20 22 68 61 73 20 74 65 78 74 22 20 3a  ] ? "has text" :
7cd0: 20 22 6e 6f 20 74 65 78 74 22 7d 5d 22 0a 0a 09   "no text"}]"...
7ce0: 69 66 20 7b 24 6d 79 69 6d 70 6f 72 74 65 64 20  if {$myimported 
7cf0: 26 26 0a 09 20 20 20 20 5b 24 66 69 72 73 74 20  &&..    [$first 
7d00: 72 65 76 6e 72 5d 20 65 71 20 22 31 2e 31 2e 31  revnr] eq "1.1.1
7d10: 2e 31 22 20 26 26 0a 09 20 20 20 20 5b 24 66 69  .1" &&..    [$fi
7d20: 72 73 74 20 6f 70 65 72 61 74 69 6f 6e 5d 20 65  rst operation] e
7d30: 71 20 22 63 68 61 6e 67 65 22 20 26 26 0a 09 20  q "change" &&.. 
7d40: 20 20 20 21 5b 24 66 69 72 73 74 20 68 61 73 74     ![$first hast
7d50: 65 78 74 5d 7d 20 7b 0a 0a 09 20 20 20 20 73 65  ext]} {...    se
7d60: 74 20 72 65 76 31 31 20 5b 24 66 69 72 73 74 20  t rev11 [$first 
7d70: 70 61 72 65 6e 74 5d 20 3b 20 23 20 41 73 73 65  parent] ; # Asse
7d80: 72 74 3a 20 53 68 6f 75 6c 64 20 62 65 20 6d 79  rt: Should be my
7d90: 72 6f 6f 74 2e 0a 09 20 20 20 20 6c 6f 67 20 77  root...    log w
7da0: 72 69 74 65 20 33 20 66 69 6c 65 20 22 52 65 6d  rite 3 file "Rem
7db0: 6f 76 69 6e 67 20 69 72 72 65 6c 65 76 61 6e 74  oving irrelevant
7dc0: 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 65 76 31   revision [$rev1
7dd0: 31 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 20 20  1 revnr]"...    
7de0: 23 20 43 75 74 20 6f 75 74 20 74 68 65 20 6f 6c  # Cut out the ol
7df0: 64 20 6d 79 72 6f 6f 74 20 72 65 76 69 73 69 6f  d myroot revisio
7e00: 6e 2e 0a 0a 09 20 20 20 20 6c 64 65 6c 65 74 65  n....    ldelete
7e10: 20 6d 79 72 6f 6f 74 73 20 24 72 65 76 31 31 20   myroots $rev11 
7e20: 3b 20 23 20 4e 6f 74 20 61 20 72 6f 6f 74 20 61  ; # Not a root a
7e30: 6e 79 20 6c 6f 6e 67 65 72 2e 0a 0a 09 20 20 20  ny longer....   
7e40: 20 24 66 69 72 73 74 20 63 75 74 66 72 6f 6d 70   $first cutfromp
7e50: 61 72 65 6e 74 20 3b 20 23 20 53 65 76 65 72 20  arent ; # Sever 
7e60: 72 65 76 69 73 69 6f 6e 20 66 72 6f 6d 20 70 61  revision from pa
7e70: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 0a 09  rent revision...
7e80: 20 20 20 20 69 66 20 7b 24 73 74 6f 70 20 6e 65      if {$stop ne
7e90: 20 22 22 7d 20 7b 0a 09 09 24 73 74 6f 70 20 63   ""} {...$stop c
7ea0: 75 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 09 6c  utfromparent...l
7eb0: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24  append myroots $
7ec0: 73 74 6f 70 20 3b 20 23 20 4e 65 77 20 72 6f 6f  stop ; # New roo
7ed0: 74 2c 20 61 66 74 65 72 20 76 65 6e 64 6f 72 20  t, after vendor 
7ee0: 62 72 61 6e 63 68 0a 09 20 20 20 20 7d 0a 0a 09  branch..    }...
7ef0: 20 20 20 20 23 20 43 75 74 20 6f 75 74 20 74 68      # Cut out th
7f00: 65 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20  e vendor branch 
7f10: 73 79 6d 62 6f 6c 0a 0a 09 20 20 20 20 73 65 74  symbol...    set
7f20: 20 76 65 6e 64 6f 72 20 5b 24 66 69 72 73 74 20   vendor [$first 
7f30: 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 20  parentbranch].. 
7f40: 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73 73     integrity ass
7f50: 65 72 74 20 7b 24 76 65 6e 64 6f 72 20 6e 65 20  ert {$vendor ne 
7f60: 22 22 7d 20 7b 46 69 72 73 74 20 4e 54 44 42 20  ""} {First NTDB 
7f70: 72 65 76 69 73 69 6f 6e 20 68 61 73 20 6e 6f 20  revision has no 
7f80: 62 72 61 6e 63 68 7d 0a 09 20 20 20 20 69 66 20  branch}..    if 
7f90: 7b 5b 24 76 65 6e 64 6f 72 20 70 61 72 65 6e 74  {[$vendor parent
7fa0: 5d 20 65 71 20 24 72 65 76 31 31 7d 20 7b 0a 09  ] eq $rev11} {..
7fb0: 09 24 72 65 76 31 31 20 72 65 6d 6f 76 65 62 72  .$rev11 removebr
7fc0: 61 6e 63 68 20 20 20 20 20 20 20 20 24 76 65 6e  anch        $ven
7fd0: 64 6f 72 0a 09 09 24 72 65 76 31 31 20 72 65 6d  dor...$rev11 rem
7fe0: 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68  ovechildonbranch
7ff0: 20 24 66 69 72 73 74 0a 09 09 24 76 65 6e 64 6f   $first...$vendo
8000: 72 20 63 75 74 62 72 61 6e 63 68 70 61 72 65 6e  r cutbranchparen
8010: 74 20 20 20 20 3b 23 20 62 70 20 3d 20 72 65 76  t    ;# bp = rev
8020: 31 31 2c 20 61 62 6f 75 74 20 74 6f 20 62 65 20  11, about to be 
8030: 67 6f 6e 65 0a 09 09 24 66 69 72 73 74 20 63 75  gone...$first cu
8040: 74 66 72 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63  tfromparentbranc
8050: 68 20 3b 23 20 70 62 20 3d 20 76 65 6e 64 6f 72  h ;# pb = vendor
8060: 2c 20 74 6f 20 62 65 20 61 20 64 65 74 61 63 68  , to be a detach
8070: 65 64 20 4c 4f 44 0a 09 09 6c 61 70 70 65 6e 64  ed LOD...lappend
8080: 20 6d 79 72 6f 6f 74 73 20 24 66 69 72 73 74 0a   myroots $first.
8090: 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43  .    }...    # C
80a0: 68 61 6e 67 65 20 74 68 65 20 74 79 70 65 20 6f  hange the type o
80b0: 66 20 66 69 72 73 74 20 28 74 79 70 69 63 61 6c  f first (typical
80c0: 6c 79 20 66 72 6f 6d 20 43 68 61 6e 67 65 20 74  ly from Change t
80d0: 6f 20 41 64 64 29 3a 0a 09 20 20 20 20 24 66 69  o Add):..    $fi
80e0: 72 73 74 20 72 65 74 79 70 65 20 61 64 64 0a 0a  rst retype add..
80f0: 09 20 20 20 20 23 20 4d 6f 76 65 20 61 6e 79 20  .    # Move any 
8100: 74 61 67 73 20 61 6e 64 20 62 72 61 6e 63 68 65  tags and branche
8110: 73 20 66 72 6f 6d 20 74 68 65 20 6f 6c 64 20 74  s from the old t
8120: 6f 20 74 68 65 20 6e 65 77 20 72 6f 6f 74 2e 0a  o the new root..
8130: 09 20 20 20 20 24 72 65 76 31 31 20 6d 6f 76 65  .    $rev11 move
8140: 73 79 6d 62 6f 6c 73 74 6f 20 24 66 69 72 73 74  symbolsto $first
8150: 0a 09 7d 0a 0a 09 23 20 4d 61 72 6b 20 61 6c 6c  ..}...# Mark all
8160: 20 74 68 65 20 73 70 65 63 69 61 6c 20 72 65 76   the special rev
8170: 69 73 69 6f 6e 73 20 61 73 20 73 75 63 68 0a 09  isions as such..
8180: 66 6f 72 65 61 63 68 20 72 65 76 20 24 72 65 76  foreach rev $rev
8190: 6c 69 73 74 20 7b 0a 09 20 20 20 20 6c 6f 67 20  list {..    log 
81a0: 77 72 69 74 65 20 33 20 66 69 6c 65 20 22 52 65  write 3 file "Re
81b0: 76 69 73 69 6f 6e 20 6f 6e 20 64 65 66 61 75 6c  vision on defaul
81c0: 74 20 62 72 61 6e 63 68 3a 20 5b 24 72 65 76 20  t branch: [$rev 
81d0: 72 65 76 6e 72 5d 22 0a 09 20 20 20 20 24 72 65  revnr]"..    $re
81e0: 76 20 73 65 74 6f 6e 64 65 66 61 75 6c 74 62 72  v setondefaultbr
81f0: 61 6e 63 68 20 31 0a 09 7d 0a 0a 09 69 66 20 7b  anch 1..}...if {
8200: 24 73 74 6f 70 20 6e 65 20 22 22 7d 20 7b 0a 09  $stop ne ""} {..
8210: 20 20 20 20 23 20 52 65 76 69 73 69 6f 6e 20 31      # Revision 1
8220: 2e 32 20 6c 6f 67 69 63 61 6c 6c 79 20 66 6f 6c  .2 logically fol
8230: 6c 6f 77 73 20 74 68 65 20 69 6d 70 6f 72 74 65  lows the importe
8240: 64 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 20 20  d revisions,..  
8250: 20 20 23 20 6e 6f 74 20 31 2e 31 2e 20 20 41 63    # not 1.1.  Ac
8260: 63 6f 72 64 69 6e 67 6c 79 2c 20 63 6f 6e 6e 65  cordingly, conne
8270: 63 74 20 69 74 20 74 6f 20 74 68 65 20 6c 61 73  ct it to the las
8280: 74 20 4e 54 44 42 52 20 61 6e 64 0a 09 20 20 20  t NTDBR and..   
8290: 20 23 20 70 6f 73 73 69 62 6c 79 20 63 68 61 6e   # possibly chan
82a0: 67 65 20 69 74 73 20 74 79 70 65 2e 0a 0a 09 20  ge its type.... 
82b0: 20 20 20 73 65 74 20 6c 61 73 74 20 5b 6c 69 6e     set last [lin
82c0: 64 65 78 20 24 72 65 76 6c 69 73 74 20 65 6e 64  dex $revlist end
82d0: 5d 0a 09 20 20 20 20 24 73 74 6f 70 20 73 65 74  ]..    $stop set
82e0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72  defaultbranchpar
82f0: 65 6e 74 20 24 6c 61 73 74 20 3b 20 23 20 52 65  ent $last ; # Re
8300: 74 79 70 65 73 20 74 68 65 20 72 65 76 69 73 69  types the revisi
8310: 6f 6e 20 74 6f 6f 2e 0a 09 20 20 20 20 24 6c 61  on too...    $la
8320: 73 74 20 73 65 74 64 65 66 61 75 6c 74 62 72 61  st setdefaultbra
8330: 6e 63 68 63 68 69 6c 64 20 20 24 73 74 6f 70 0a  nchchild  $stop.
8340: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
8350: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 43 68 65  ..    method Che
8360: 63 6b 4c 4f 44 73 20 7b 7d 20 7b 0a 09 66 6f 72  ckLODs {} {..for
8370: 65 61 63 68 20 7b 5f 20 62 72 61 6e 63 68 7d 20  each {_ branch} 
8380: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62 72   [array get mybr
8390: 61 6e 63 68 65 73 5d 20 7b 20 24 62 72 61 6e 63  anches] { $branc
83a0: 68 20 63 68 65 63 6b 6c 6f 64 20 7d 0a 09 66 6f  h checklod }..fo
83b0: 72 65 61 63 68 20 7b 5f 20 74 61 67 6c 69 73 74  reach {_ taglist
83c0: 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 74  } [array get myt
83d0: 61 67 73 5d 20 7b 0a 09 20 20 20 20 66 6f 72 65  ags] {..    fore
83e0: 61 63 68 20 74 61 67 20 24 74 61 67 6c 69 73 74  ach tag $taglist
83f0: 20 7b 20 24 74 61 67 20 63 68 65 63 6b 6c 6f 64   { $tag checklod
8400: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20   }..}..return.  
8410: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
8420: 52 65 6d 6f 76 65 49 72 72 65 6c 65 76 61 6e 74  RemoveIrrelevant
8430: 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20 7b 0a 09  Deletions {} {..
8440: 23 20 46 72 6f 6d 20 63 76 73 32 73 76 6e 3a 20  # From cvs2svn: 
8450: 49 66 20 61 20 66 69 6c 65 20 69 73 20 61 64 64  If a file is add
8460: 65 64 20 6f 6e 20 61 20 62 72 61 6e 63 68 2c 20  ed on a branch, 
8470: 74 68 65 6e 20 61 20 74 72 75 6e 6b 0a 09 23 20  then a trunk..# 
8480: 72 65 76 69 73 69 6f 6e 20 69 73 20 61 64 64 65  revision is adde
8490: 64 20 61 74 20 74 68 65 20 73 61 6d 65 20 74 69  d at the same ti
84a0: 6d 65 20 69 6e 20 74 68 65 20 27 44 65 61 64 27  me in the 'Dead'
84b0: 20 73 74 61 74 65 2e 0a 09 23 20 54 68 69 73 20   state...# This 
84c0: 72 65 76 69 73 69 6f 6e 20 64 6f 65 73 6e 27 74  revision doesn't
84d0: 20 64 6f 20 61 6e 79 74 68 69 6e 67 20 75 73 65   do anything use
84e0: 66 75 6c 2c 20 73 6f 20 64 65 6c 65 74 65 20 69  ful, so delete i
84f0: 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f  t....foreach roo
8500: 74 20 24 6d 79 72 6f 6f 74 73 20 7b 0a 09 20 20  t $myroots {..  
8510: 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 69 73 6e    if {[$root isn
8520: 65 65 64 65 64 5d 7d 20 63 6f 6e 74 69 6e 75 65  eeded]} continue
8530: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
8540: 32 20 66 69 6c 65 20 22 52 65 6d 6f 76 69 6e 67  2 file "Removing
8550: 20 75 6e 6e 65 63 65 73 73 61 72 79 20 64 65 61   unnecessary dea
8560: 64 20 72 65 76 69 73 69 6f 6e 20 5b 24 72 6f 6f  d revision [$roo
8570: 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 20 20  t revnr]"...    
8580: 23 20 52 65 6d 6f 76 65 20 61 73 20 72 6f 6f 74  # Remove as root
8590: 2c 20 6d 61 6b 65 20 69 74 73 20 63 68 69 6c 64  , make its child
85a0: 20 6e 65 77 20 72 6f 6f 74 20 61 66 74 65 72 0a   new root after.
85b0: 09 20 20 20 20 23 20 64 69 73 63 6f 6e 6e 65 63  .    # disconnec
85c0: 74 69 6e 67 20 69 74 20 66 72 6f 6d 20 74 68 65  ting it from the
85d0: 20 72 65 76 69 73 69 6f 6e 20 6a 75 73 74 20 67   revision just g
85e0: 6f 69 6e 67 20 61 77 61 79 2e 0a 0a 09 20 20 20  oing away....   
85f0: 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73   ldelete myroots
8600: 20 24 72 6f 6f 74 0a 09 20 20 20 20 69 66 20 7b   $root..    if {
8610: 5b 24 72 6f 6f 74 20 68 61 73 63 68 69 6c 64 5d  [$root haschild]
8620: 7d 20 7b 0a 09 09 73 65 74 20 63 68 69 6c 64 20  } {...set child 
8630: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 09  [$root child]...
8640: 24 63 68 69 6c 64 20 63 75 74 66 72 6f 6d 70 61  $child cutfrompa
8650: 72 65 6e 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d  rent...lappend m
8660: 79 72 6f 6f 74 73 20 24 63 68 69 6c 64 0a 09 20  yroots $child.. 
8670: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 43 75 74     }...    # Cut
8680: 20 6f 75 74 20 74 68 65 20 62 72 61 6e 63 68 65   out the branche
8690: 73 20 73 70 61 77 6e 65 64 20 62 79 20 74 68 65  s spawned by the
86a0: 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 62 65 0a   revision to be.
86b0: 09 20 20 20 20 23 20 64 65 6c 65 74 65 64 2e 20  .    # deleted. 
86c0: 49 66 20 74 68 65 20 62 72 61 6e 63 68 20 68 61  If the branch ha
86d0: 73 20 72 65 76 69 73 69 6f 6e 73 20 74 68 65 79  s revisions they
86e0: 20 73 68 6f 75 6c 64 20 61 6c 72 65 61 64 79 0a   should already.
86f0: 09 20 20 20 20 23 20 75 73 65 20 6f 70 65 72 61  .    # use opera
8700: 74 69 6f 6e 20 27 61 64 64 27 2c 20 6e 6f 20 6e  tion 'add', no n
8710: 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68  eed to change th
8720: 61 74 2e 20 54 68 65 20 66 69 72 73 74 0a 09 20  at. The first.. 
8730: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 6f 6e     # revision on
8740: 20 65 61 63 68 20 62 72 61 6e 63 68 20 62 65 63   each branch bec
8750: 6f 6d 65 73 20 61 20 6e 65 77 20 61 6e 64 20 64  omes a new and d
8760: 69 73 63 6f 6e 6e 65 63 74 65 64 0a 09 20 20 20  isconnected..   
8770: 20 23 20 72 6f 6f 74 2e 0a 0a 09 20 20 20 20 66   # root....    f
8780: 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24  oreach branch [$
8790: 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b  root branches] {
87a0: 0a 09 09 24 62 72 61 6e 63 68 20 63 75 74 62 72  ...$branch cutbr
87b0: 61 6e 63 68 70 61 72 65 6e 74 0a 09 09 69 66 20  anchparent...if 
87c0: 7b 21 5b 24 62 72 61 6e 63 68 20 68 61 73 63 68  {![$branch hasch
87d0: 69 6c 64 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09  ild]} continue..
87e0: 09 73 65 74 20 66 69 72 73 74 20 5b 24 62 72 61  .set first [$bra
87f0: 6e 63 68 20 63 68 69 6c 64 5d 0a 09 09 24 66 69  nch child]...$fi
8800: 72 73 74 20 63 75 74 66 72 6f 6d 70 61 72 65 6e  rst cutfromparen
8810: 74 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 72 6f  t...lappend myro
8820: 6f 74 73 20 24 66 69 72 73 74 0a 09 20 20 20 20  ots $first..    
8830: 7d 0a 09 20 20 20 20 24 72 6f 6f 74 20 72 65 6d  }..    $root rem
8840: 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65 73 0a 0a  oveallbranches..
8850: 09 20 20 20 20 23 20 54 61 67 67 69 6e 67 20 61  .    # Tagging a
8860: 20 64 65 61 64 20 72 65 76 69 73 69 6f 6e 20 64   dead revision d
8870: 6f 65 73 6e 27 74 20 64 6f 20 61 6e 79 74 68 69  oesn't do anythi
8880: 6e 67 2c 20 73 6f 20 72 65 6d 6f 76 65 0a 09 20  ng, so remove.. 
8890: 20 20 20 23 20 61 6e 79 20 74 61 67 73 20 74 68     # any tags th
88a0: 61 74 20 77 65 72 65 20 73 65 74 20 6f 6e 20 69  at were set on i
88b0: 74 2e 0a 0a 09 20 20 20 20 24 72 6f 6f 74 20 72  t....    $root r
88c0: 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 0a 09 20  emovealltags... 
88d0: 20 20 20 23 20 54 68 69 73 20 63 61 6e 20 6f 6e     # This can on
88e0: 6c 79 20 68 61 70 70 65 6e 20 6f 6e 63 65 20 70  ly happen once p
88f0: 65 72 20 66 69 6c 65 2c 20 61 6e 64 20 77 65 20  er file, and we 
8900: 6d 69 67 68 74 20 68 61 76 65 0a 09 20 20 20 20  might have..    
8910: 23 20 6a 75 73 74 20 63 68 61 6e 67 65 64 20 6d  # just changed m
8920: 79 72 6f 6f 74 73 2c 20 73 6f 20 65 6e 64 20 74  yroots, so end t
8930: 68 65 20 6c 6f 6f 70 0a 09 20 20 20 20 62 72 65  he loop..    bre
8940: 61 6b 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  ak..}..return.  
8950: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
8960: 52 65 6d 6f 76 65 49 6e 69 74 69 61 6c 42 72 61  RemoveInitialBra
8970: 6e 63 68 44 65 6c 65 74 69 6f 6e 73 20 7b 7d 20  nchDeletions {} 
8980: 7b 0a 09 23 20 46 72 6f 6d 20 63 76 73 32 73 76  {..# From cvs2sv
8990: 6e 3a 20 49 66 20 74 68 65 20 66 69 72 73 74 20  n: If the first 
89a0: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61 20 62 72  revision on a br
89b0: 61 6e 63 68 20 69 73 20 61 6e 0a 09 23 20 75 6e  anch is an..# un
89c0: 6e 65 63 65 73 73 61 72 79 20 64 65 6c 65 74 65  necessary delete
89d0: 2c 20 72 65 6d 6f 76 65 20 69 74 2e 0a 09 23 0a  , remove it...#.
89e0: 09 23 20 49 66 20 61 20 66 69 6c 65 20 69 73 20  .# If a file is 
89f0: 61 64 64 65 64 20 6f 6e 20 61 20 62 72 61 6e 63  added on a branc
8a00: 68 20 28 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  h (whether or no
8a10: 74 20 69 74 20 61 6c 72 65 61 64 79 0a 09 23 20  t it already..# 
8a20: 65 78 69 73 74 65 64 20 6f 6e 20 74 72 75 6e 6b  existed on trunk
8a30: 29 2c 20 74 68 65 6e 20 6e 65 77 20 76 65 72 73  ), then new vers
8a40: 69 6f 6e 73 20 6f 66 20 43 56 53 20 61 64 64 20  ions of CVS add 
8a50: 61 20 66 69 72 73 74 0a 09 23 20 62 72 61 6e 63  a first..# branc
8a60: 68 20 72 65 76 69 73 69 6f 6e 20 69 6e 20 74 68  h revision in th
8a70: 65 20 27 64 65 61 64 27 20 73 74 61 74 65 20 28  e 'dead' state (
8a80: 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74  to indicate that
8a90: 20 74 68 65 0a 09 23 20 66 69 6c 65 20 64 69 64   the..# file did
8aa0: 20 6e 6f 74 20 65 78 69 73 74 20 6f 6e 20 74 68   not exist on th
8ab0: 65 20 62 72 61 6e 63 68 20 77 68 65 6e 20 74 68  e branch when th
8ac0: 65 20 62 72 61 6e 63 68 20 77 61 73 0a 09 23 20  e branch was..# 
8ad0: 63 72 65 61 74 65 64 29 20 66 6f 6c 6c 6f 77 65  created) followe
8ae0: 64 20 62 79 20 74 68 65 20 73 65 63 6f 6e 64 20  d by the second 
8af0: 62 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 2c  branch revision,
8b00: 20 77 68 69 63 68 20 69 73 20 61 6e 0a 09 23 20   which is an..# 
8b10: 61 64 64 2e 20 20 57 68 65 6e 20 77 65 20 65 6e  add.  When we en
8b20: 63 6f 75 6e 74 65 72 20 74 68 69 73 20 73 69 74  counter this sit
8b30: 75 61 74 69 6f 6e 2c 20 77 65 20 73 65 76 65 72  uation, we sever
8b40: 20 74 68 65 20 62 72 61 6e 63 68 0a 09 23 20 66   the branch..# f
8b50: 72 6f 6d 20 74 72 75 6e 6b 20 61 6e 64 20 64 65  rom trunk and de
8b60: 6c 65 74 65 20 74 68 65 20 66 69 72 73 74 20 62  lete the first b
8b70: 72 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 2e 0a  ranch revision..
8b80: 0a 09 23 20 41 74 20 74 68 69 73 20 70 6f 69 6e  ..# At this poin
8b90: 74 20 77 65 20 6d 61 79 20 68 61 76 65 20 61 6c  t we may have al
8ba0: 72 65 61 64 79 20 6d 75 6c 74 69 70 6c 65 20 72  ready multiple r
8bb0: 6f 6f 74 73 20 69 6e 20 6d 79 72 6f 6f 74 73 2c  oots in myroots,
8bc0: 0a 09 23 20 77 65 20 68 61 76 65 20 74 6f 20 70  ..# we have to p
8bd0: 72 6f 63 65 73 73 20 74 68 65 6d 20 61 6c 6c 2e  rocess them all.
8be0: 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f 74 20  ...foreach root 
8bf0: 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66 44 65  [$self LinesOfDe
8c00: 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09 20 20  velopment] {..  
8c10: 20 20 69 66 20 7b 5b 24 72 6f 6f 74 20 69 73 6e    if {[$root isn
8c20: 65 65 64 65 64 62 72 61 6e 63 68 64 65 6c 5d 7d  eededbranchdel]}
8c30: 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 6c   continue..    l
8c40: 6f 67 20 77 72 69 74 65 20 32 20 66 69 6c 65 20  og write 2 file 
8c50: 22 52 65 6d 6f 76 69 6e 67 20 75 6e 6e 65 63 65  "Removing unnece
8c60: 73 73 61 72 79 20 69 6e 69 74 69 61 6c 20 62 72  ssary initial br
8c70: 61 6e 63 68 20 64 65 6c 65 74 65 20 5b 24 72 6f  anch delete [$ro
8c80: 6f 74 20 72 65 76 6e 72 5d 22 0a 0a 09 20 20 20  ot revnr]"...   
8c90: 20 73 65 74 20 62 72 61 6e 63 68 20 5b 24 72 6f   set branch [$ro
8ca0: 6f 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d  ot parentbranch]
8cb0: 0a 09 20 20 20 20 73 65 74 20 70 61 72 65 6e 74  ..    set parent
8cc0: 20 5b 24 72 6f 6f 74 20 70 61 72 65 6e 74 5d 0a   [$root parent].
8cd0: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 20  .    set child  
8ce0: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 0a 09  [$root child]...
8cf0: 20 20 20 20 6c 64 65 6c 65 74 65 20 6d 79 72 6f      ldelete myro
8d00: 6f 74 73 20 24 72 6f 6f 74 0a 09 20 20 20 20 6c  ots $root..    l
8d10: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 24  append myroots $
8d20: 63 68 69 6c 64 0a 0a 09 20 20 20 20 24 62 72 61  child...    $bra
8d30: 6e 63 68 20 63 75 74 62 72 61 6e 63 68 70 61 72  nch cutbranchpar
8d40: 65 6e 74 0a 09 20 20 20 20 24 62 72 61 6e 63 68  ent..    $branch
8d50: 20 63 75 74 63 68 69 6c 64 0a 09 20 20 20 20 24   cutchild..    $
8d60: 63 68 69 6c 64 20 20 63 75 74 66 72 6f 6d 70 61  child  cutfrompa
8d70: 72 65 6e 74 0a 0a 09 20 20 20 20 24 62 72 61 6e  rent...    $bran
8d80: 63 68 20 73 65 74 63 68 69 6c 64 20 20 20 20 20  ch setchild     
8d90: 20 20 20 24 63 68 69 6c 64 0a 09 20 20 20 20 24     $child..    $
8da0: 63 68 69 6c 64 20 20 73 65 74 70 61 72 65 6e 74  child  setparent
8db0: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 0a  branch $branch..
8dc0: 09 20 20 20 20 24 70 61 72 65 6e 74 20 72 65 6d  .    $parent rem
8dd0: 6f 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 20  ovebranch       
8de0: 20 24 62 72 61 6e 63 68 0a 09 20 20 20 20 24 70   $branch..    $p
8df0: 61 72 65 6e 74 20 72 65 6d 6f 76 65 63 68 69 6c  arent removechil
8e00: 64 6f 6e 62 72 61 6e 63 68 20 24 72 6f 6f 74 0a  donbranch $root.
8e10: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
8e20: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 4c 69 6e  ..    method Lin
8e30: 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74 20  esOfDevelopment 
8e40: 7b 7d 20 7b 0a 09 23 20 44 65 74 65 72 6d 69 6e  {} {..# Determin
8e50: 65 20 61 6c 6c 20 6c 69 6e 65 73 20 6f 66 20 64  e all lines of d
8e60: 65 76 65 6c 6f 70 6d 65 6e 74 20 66 6f 72 20 74  evelopment for t
8e70: 68 65 20 66 69 6c 65 2e 20 54 68 69 73 20 61 72  he file. This ar
8e80: 65 0a 09 23 20 74 68 65 20 6b 6e 6f 77 6e 20 72  e..# the known r
8e90: 6f 6f 74 73 2c 20 61 6e 64 20 74 68 65 20 72 6f  oots, and the ro
8ea0: 6f 74 20 6f 66 20 61 6c 6c 20 62 72 61 6e 63 68  ot of all branch
8eb0: 65 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 0a  es found on the.
8ec0: 09 23 20 6c 69 6e 65 20 6f 66 20 70 72 69 6d 61  .# line of prima
8ed0: 72 79 20 63 68 69 6c 64 72 65 6e 2e 0a 0a 09 73  ry children....s
8ee0: 65 74 20 6c 6f 64 72 6f 6f 74 73 20 7b 7d 0a 09  et lodroots {}..
8ef0: 66 6f 72 65 61 63 68 20 72 6f 6f 74 20 24 6d 79  foreach root $my
8f00: 72 6f 6f 74 73 20 7b 0a 09 20 20 20 20 24 73 65  roots {..    $se
8f10: 6c 66 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69  lf AddBranchedLi
8f20: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74  nesOfDevelopment
8f30: 20 6c 6f 64 72 6f 6f 74 73 20 24 72 6f 6f 74 0a   lodroots $root.
8f40: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6c 6f 64  .    lappend lod
8f50: 72 6f 6f 74 73 20 24 72 6f 6f 74 0a 09 7d 0a 09  roots $root..}..
8f60: 72 65 74 75 72 6e 20 24 6c 6f 64 72 6f 6f 74 73  return $lodroots
8f70: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
8f80: 6f 64 20 41 64 64 42 72 61 6e 63 68 65 64 4c 69  od AddBranchedLi
8f90: 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e 74  nesOfDevelopment
8fa0: 20 7b 6c 76 20 72 6f 6f 74 7d 20 7b 0a 09 75 70   {lv root} {..up
8fb0: 76 61 72 20 31 20 24 6c 76 20 6c 6f 64 72 6f 6f  var 1 $lv lodroo
8fc0: 74 73 0a 09 77 68 69 6c 65 20 7b 24 72 6f 6f 74  ts..while {$root
8fd0: 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20 20 66   ne ""} {..    f
8fe0: 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20 5b 24  oreach branch [$
8ff0: 72 6f 6f 74 20 62 72 61 6e 63 68 65 73 5d 20 7b  root branches] {
9000: 0a 09 09 69 66 20 7b 21 5b 24 62 72 61 6e 63 68  ...if {![$branch
9010: 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f 6e 74   haschild]} cont
9020: 69 6e 75 65 0a 09 09 73 65 74 20 63 68 69 6c 64  inue...set child
9030: 20 5b 24 62 72 61 6e 63 68 20 63 68 69 6c 64 5d   [$branch child]
9040: 0a 09 09 23 20 52 65 63 75 72 73 65 20 69 6e 74  ...# Recurse int
9050: 6f 20 74 68 65 20 62 72 61 6e 63 68 20 66 6f 72  o the branch for
9060: 20 64 65 65 70 65 72 20 62 72 61 6e 63 68 65 73   deeper branches
9070: 2e 0a 09 09 24 73 65 6c 66 20 41 64 64 42 72 61  ....$self AddBra
9080: 6e 63 68 65 64 4c 69 6e 65 73 4f 66 44 65 76 65  nchedLinesOfDeve
9090: 6c 6f 70 6d 65 6e 74 20 6c 6f 64 72 6f 6f 74 73  lopment lodroots
90a0: 20 24 63 68 69 6c 64 0a 09 09 6c 61 70 70 65 6e   $child...lappen
90b0: 64 20 6c 6f 64 72 6f 6f 74 73 20 24 63 68 69 6c  d lodroots $chil
90c0: 64 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65  d..    }..    se
90d0: 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68  t root [$root ch
90e0: 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  ild]..}..return.
90f0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
9100: 64 20 45 78 63 6c 75 64 65 4e 6f 6e 54 72 75 6e  d ExcludeNonTrun
9110: 6b 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 7b 7d 20  kInformation {} 
9120: 7b 0a 09 23 20 52 65 6d 6f 76 65 20 61 6c 6c 20  {..# Remove all 
9130: 6e 6f 6e 2d 74 72 75 6e 6b 20 62 72 61 6e 63 68  non-trunk branch
9140: 65 73 2c 20 72 65 76 69 73 69 6f 6e 73 2c 20 61  es, revisions, a
9150: 6e 64 20 74 61 67 73 2e 20 57 65 20 64 6f 0a 09  nd tags. We do..
9160: 23 20 6b 65 65 70 20 74 68 65 20 74 61 67 73 20  # keep the tags 
9170: 77 68 69 63 68 20 61 72 65 20 6f 6e 20 74 68 65  which are on the
9180: 20 74 72 75 6e 6b 2e 0a 0a 09 73 65 74 20 6e 74   trunk....set nt
9190: 64 62 72 6f 6f 74 20 22 22 0a 09 66 6f 72 65 61  dbroot ""..forea
91a0: 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20 4c  ch root [$self L
91b0: 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65 6e  inesOfDevelopmen
91c0: 74 5d 20 7b 0a 09 20 20 20 20 23 20 4e 6f 74 65  t] {..    # Note
91d0: 3a 20 48 65 72 65 20 74 68 65 20 6f 72 64 65 72  : Here the order
91e0: 20 6f 66 20 74 68 65 20 72 6f 6f 74 73 20 69 73   of the roots is
91f0: 20 69 6d 70 6f 72 74 61 6e 74 2c 0a 09 20 20 20   important,..   
9200: 20 23 20 69 2e 65 2e 20 74 68 61 74 20 77 65 20   # i.e. that we 
9210: 67 65 74 20 74 68 65 6d 20 69 6e 20 64 65 70 74  get them in dept
9220: 68 20 66 69 72 73 74 20 6f 72 64 65 72 2e 20 54  h first order. T
9230: 68 69 73 20 65 6e 73 75 72 65 73 0a 09 20 20 20  his ensures..   
9240: 20 23 20 74 68 61 74 20 74 68 65 20 72 65 6d 6f   # that the remo
9250: 76 61 6c 20 6f 66 20 61 20 62 72 61 6e 63 68 20  val of a branch 
9260: 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 61 66 74  happens only aft
9270: 65 72 20 74 68 65 0a 09 20 20 20 20 23 20 62 72  er the..    # br
9280: 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 66  anches spawned f
9290: 72 6f 6d 20 69 74 20 77 65 72 65 20 72 65 6d 6f  rom it were remo
92a0: 76 65 64 2e 20 4f 74 68 65 72 77 69 73 65 20 74  ved. Otherwise t
92b0: 68 65 0a 09 20 20 20 20 23 20 73 79 73 74 65 6d  he..    # system
92c0: 20 6d 69 67 68 74 20 74 72 79 20 74 6f 20 61 63   might try to ac
92d0: 63 65 73 73 20 64 65 6c 65 74 65 64 20 6f 62 6a  cess deleted obj
92e0: 65 63 74 73 2e 0a 0a 09 20 20 20 20 23 20 44 6f  ects....    # Do
92f0: 20 6e 6f 74 20 65 78 63 6c 75 64 65 20 74 68 65   not exclude the
9300: 20 74 72 75 6e 6b 2e 0a 09 20 20 20 20 69 66 20   trunk...    if 
9310: 7b 5b 5b 24 72 6f 6f 74 20 6c 6f 64 5d 20 69 73  {[[$root lod] is
9320: 74 72 75 6e 6b 5d 7d 20 63 6f 6e 74 69 6e 75 65  trunk]} continue
9330: 0a 09 20 20 20 20 24 73 65 6c 66 20 45 78 63 6c  ..    $self Excl
9340: 75 64 65 42 72 61 6e 63 68 20 24 72 6f 6f 74 20  udeBranch $root 
9350: 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 0a 09 69 66  ntdbroot..}...if
9360: 20 7b 24 6e 74 64 62 72 6f 6f 74 20 6e 65 20 22   {$ntdbroot ne "
9370: 22 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20  "} {..    $self 
9380: 47 72 61 66 74 4e 54 44 42 32 54 72 75 6e 6b 20  GraftNTDB2Trunk 
9390: 24 6e 74 64 62 72 6f 6f 74 0a 09 7d 0a 09 72 65  $ntdbroot..}..re
93a0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
93b0: 6d 65 74 68 6f 64 20 45 78 63 6c 75 64 65 42 72  method ExcludeBr
93c0: 61 6e 63 68 20 7b 72 6f 6f 74 20 6e 76 7d 20 7b  anch {root nv} {
93d0: 0a 09 23 20 45 78 63 6c 75 64 65 20 74 68 65 20  ..# Exclude the 
93e0: 62 72 61 6e 63 68 2f 6c 6f 64 20 73 74 61 72 74  branch/lod start
93f0: 69 6e 67 20 61 74 20 72 6f 6f 74 2c 20 61 20 72  ing at root, a r
9400: 65 76 69 73 69 6f 6e 2e 0a 09 23 0a 09 23 20 49  evision...#..# I
9410: 66 20 74 68 65 20 4c 4f 44 20 73 74 61 72 74 73  f the LOD starts
9420: 20 77 69 74 68 20 6e 6f 6e 2d 74 72 75 6e 6b 20   with non-trunk 
9430: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72  default branch r
9440: 65 76 69 73 69 6f 6e 73 2c 0a 09 23 20 77 65 20  evisions,..# we 
9450: 6c 65 61 76 65 20 74 68 65 6d 20 69 6e 20 70 6c  leave them in pl
9460: 61 63 65 20 61 6e 64 20 64 6f 20 6e 6f 74 20 64  ace and do not d
9470: 65 6c 65 74 65 20 74 68 65 20 62 72 61 6e 63 68  elete the branch
9480: 2e 20 49 6e 20 74 68 61 74 0a 09 23 20 63 61 73  . In that..# cas
9490: 65 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 73 65  e the command se
94a0: 74 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20  ts the variable 
94b0: 69 6e 20 4e 56 20 73 6f 20 74 68 61 74 20 77 65  in NV so that we
94c0: 20 63 61 6e 0a 09 23 20 6c 61 74 65 72 20 72 65   can..# later re
94d0: 77 6f 72 6b 20 74 68 65 73 65 20 72 65 76 69 73  work these revis
94e0: 6f 6e 73 20 74 6f 20 62 65 20 70 75 72 65 6c 79  ons to be purely
94f0: 20 74 72 75 6e 6b 2e 0a 0a 09 69 66 20 7b 5b 24   trunk....if {[$
9500: 72 6f 6f 74 20 69 73 6f 6e 64 65 66 61 75 6c 74  root isondefault
9510: 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 20 20 20 20  branch]} {..    
9520: 23 20 48 61 6e 64 6c 69 6e 67 20 61 20 4e 54 44  # Handling a NTD
9530: 42 2e 20 54 68 69 73 20 62 72 61 6e 63 68 20 6d  B. This branch m
9540: 61 79 20 63 6f 6e 73 69 73 74 73 20 6e 6f 74 20  ay consists not 
9550: 6f 6e 6c 79 20 6f 66 0a 09 20 20 20 20 23 20 4e  only of..    # N
9560: 54 44 42 20 72 65 76 69 73 69 6f 6e 73 2c 20 62  TDB revisions, b
9570: 75 74 20 61 6c 73 6f 20 73 6f 6d 65 20 6e 6f 6e  ut also some non
9580: 2d 4e 54 44 42 2e 20 54 68 65 20 6c 61 74 74 65  -NTDB. The latte
9590: 72 20 61 72 65 0a 09 20 20 20 20 23 20 74 72 75  r are..    # tru
95a0: 6c 79 20 6f 6e 20 61 20 62 72 61 6e 63 68 20 61  ly on a branch a
95b0: 6e 64 20 68 61 76 65 20 74 6f 20 62 65 20 65 78  nd have to be ex
95c0: 63 6c 75 64 65 64 2e 20 54 68 65 20 66 6f 6c 6c  cluded. The foll
95d0: 6f 77 69 6e 67 0a 09 20 20 20 20 23 20 6c 6f 6f  owing..    # loo
95e0: 70 20 64 65 74 65 72 6d 69 6e 65 73 20 69 66 20  p determines if 
95f0: 74 68 65 72 65 20 61 72 65 20 73 75 63 68 20 72  there are such r
9600: 65 76 69 73 69 6f 6e 73 2e 0a 0a 09 20 20 20 20  evisions....    
9610: 75 70 76 61 72 20 31 20 24 6e 76 20 6e 74 64 62  upvar 1 $nv ntdb
9620: 72 6f 6f 74 0a 09 20 20 20 20 73 65 74 20 6e 74  root..    set nt
9630: 64 62 72 6f 6f 74 20 24 72 6f 6f 74 0a 09 20 20  dbroot $root..  
9640: 20 20 24 72 6f 6f 74 20 63 75 74 66 72 6f 6d 70    $root cutfromp
9650: 61 72 65 6e 74 62 72 61 6e 63 68 0a 0a 09 20 20  arentbranch...  
9660: 20 20 73 65 74 20 72 65 76 20 24 72 6f 6f 74 0a    set rev $root.
9670: 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 65 76  .    while {$rev
9680: 20 6e 65 20 22 22 7d 20 7b 0a 09 09 24 72 65 76   ne ""} {...$rev
9690: 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68   removeallbranch
96a0: 65 73 0a 09 09 23 20 53 65 65 20 6e 6f 74 65 20  es...# See note 
96b0: 5b 78 5d 2e 0a 0a 09 09 69 66 20 7b 5b 24 72 65  [x].....if {[$re
96c0: 76 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61  v isondefaultbra
96d0: 6e 63 68 5d 7d 20 7b 0a 09 09 20 20 20 20 73 65  nch]} {...    se
96e0: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c  t rev [$rev chil
96f0: 64 5d 0a 09 09 7d 20 65 6c 73 65 20 7b 0a 09 09  d]...} else {...
9700: 20 20 20 20 62 72 65 61 6b 0a 09 09 7d 0a 09 20      break...}.. 
9710: 20 20 20 7d 0a 0a 09 20 20 20 20 23 20 72 65 76     }...    # rev
9720: 20 6e 6f 77 20 63 6f 6e 74 61 69 6e 73 20 74 68   now contains th
9730: 65 20 66 69 72 73 74 20 6e 6f 6e 2d 4e 54 44 42  e first non-NTDB
9740: 20 72 65 76 69 73 69 6f 6e 20 61 66 74 65 72 20   revision after 
9750: 74 68 65 0a 09 20 20 20 20 23 20 4e 54 44 42 2c  the..    # NTDB,
9760: 20 6f 72 20 69 73 20 65 6d 70 74 79 20 69 66 20   or is empty if 
9770: 74 68 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68  there is no such
9780: 2e 20 49 66 20 77 65 20 68 61 76 65 20 73 6f 6d  . If we have som
9790: 65 0a 09 20 20 20 20 23 20 74 68 65 79 20 68 61  e..    # they ha
97a0: 76 65 20 74 6f 20 72 65 6d 6f 76 65 64 2e 0a 0a  ve to removed...
97b0: 09 20 20 20 20 69 66 20 7b 24 72 65 76 20 6e 65  .    if {$rev ne
97c0: 20 22 22 7d 20 20 7b 0a 09 09 73 65 74 20 6c 61   ""}  {...set la
97d0: 73 74 6e 74 64 62 20 5b 24 72 65 76 20 70 61 72  stntdb [$rev par
97e0: 65 6e 74 5d 0a 09 09 24 6c 61 73 74 6e 74 64 62  ent]...$lastntdb
97f0: 20 63 75 74 66 72 6f 6d 63 68 69 6c 64 0a 09 09   cutfromchild...
9800: 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65 20 22  while {$rev ne "
9810: 22 7d 20 7b 0a 09 09 20 20 20 20 24 72 65 76 20  "} {...    $rev 
9820: 72 65 6d 6f 76 65 61 6c 6c 74 61 67 73 0a 09 09  removealltags...
9830: 20 20 20 20 24 72 65 76 20 72 65 6d 6f 76 65 61      $rev removea
9840: 6c 6c 62 72 61 6e 63 68 65 73 0a 09 09 20 20 20  llbranches...   
9850: 20 23 20 4e 6f 74 65 20 5b 78 5d 3a 20 57 65 20   # Note [x]: We 
9860: 6d 61 79 20 73 74 69 6c 6c 20 68 61 76 65 20 68  may still have h
9870: 61 64 20 62 72 61 6e 63 68 65 73 20 6f 6e 20 74  ad branches on t
9880: 68 65 0a 09 09 20 20 20 20 23 20 72 65 76 69 73  he...    # revis
9890: 69 6f 6e 2e 20 42 72 61 6e 63 68 65 73 20 77 69  ion. Branches wi
98a0: 74 68 6f 75 74 20 72 65 76 69 73 69 6f 6e 73 20  thout revisions 
98b0: 63 6f 6d 6d 69 74 74 65 64 0a 09 09 20 20 20 20  committed...    
98c0: 23 20 6f 6e 20 74 68 65 6d 20 64 6f 20 6e 6f 74  # on them do not
98d0: 20 73 68 6f 77 20 75 70 20 69 6e 20 74 68 65 20   show up in the 
98e0: 6c 69 73 74 20 6f 66 20 72 6f 6f 74 73 20 61 6b  list of roots ak
98f0: 61 0a 09 09 20 20 20 20 23 20 6c 69 6e 65 73 20  a...    # lines 
9900: 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a  of development..
9910: 09 09 20 20 20 20 73 65 74 20 72 65 76 20 5b 24  ..    set rev [$
9920: 72 65 76 20 63 68 69 6c 64 5d 0a 09 09 7d 0a 09  rev child]...}..
9930: 20 20 20 20 7d 0a 09 20 20 20 20 72 65 74 75 72      }..    retur
9940: 6e 0a 09 7d 0a 0a 09 23 20 4e 6f 20 4e 54 44 42  n..}...# No NTDB
9950: 20 73 74 75 66 66 20 74 6f 20 64 65 61 6c 20 77   stuff to deal w
9960: 69 74 68 2e 20 46 69 72 73 74 20 64 65 6c 65 74  ith. First delet
9970: 65 20 74 68 65 20 62 72 61 6e 63 68 20 6f 62 6a  e the branch obj
9980: 65 63 74 0a 09 23 20 69 74 73 65 6c 66 2c 20 61  ect..# itself, a
9990: 66 74 65 72 20 63 75 74 74 69 6e 67 20 61 6c 6c  fter cutting all
99a0: 20 74 68 65 20 76 61 72 69 6f 75 73 20 63 6f 6e   the various con
99b0: 6e 65 63 74 69 6f 6e 73 2e 0a 0a 09 73 65 74 20  nections....set 
99c0: 62 72 61 6e 63 68 20 5b 24 72 6f 6f 74 20 70 61  branch [$root pa
99d0: 72 65 6e 74 62 72 61 6e 63 68 5d 0a 09 69 66 20  rentbranch]..if 
99e0: 7b 24 62 72 61 6e 63 68 20 6e 65 20 22 22 7d 20  {$branch ne ""} 
99f0: 7b 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e 63  {..    set branc
9a00: 68 70 61 72 65 6e 74 20 5b 24 62 72 61 6e 63 68  hparent [$branch
9a10: 20 70 61 72 65 6e 74 5d 0a 09 20 20 20 20 24 62   parent]..    $b
9a20: 72 61 6e 63 68 70 61 72 65 6e 74 20 72 65 6d 6f  ranchparent remo
9a30: 76 65 62 72 61 6e 63 68 20 20 20 20 20 20 20 20  vebranch        
9a40: 24 62 72 61 6e 63 68 0a 09 20 20 20 20 24 62 72  $branch..    $br
9a50: 61 6e 63 68 70 61 72 65 6e 74 20 72 65 6d 6f 76  anchparent remov
9a60: 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24  echildonbranch $
9a70: 72 6f 6f 74 0a 09 7d 0a 0a 09 23 20 54 68 65 20  root..}...# The 
9a80: 72 6f 6f 74 20 69 73 20 6e 6f 20 73 75 63 68 20  root is no such 
9a90: 61 6e 79 20 6c 6f 6e 67 65 72 20 65 69 74 68 65  any longer eithe
9aa0: 72 2e 0a 09 6c 64 65 6c 65 74 65 20 6d 79 72 6f  r...ldelete myro
9ab0: 6f 74 73 20 24 72 6f 6f 74 0a 0a 09 23 20 4e 6f  ots $root...# No
9ac0: 77 20 67 6f 20 74 68 72 6f 75 67 68 20 74 68 65  w go through the
9ad0: 20 6c 69 6e 65 20 61 6e 64 20 72 65 6d 6f 76 65   line and remove
9ae0: 20 61 6c 6c 20 69 74 73 20 72 65 76 69 73 69 6f   all its revisio
9af0: 6e 73 2e 0a 0a 09 77 68 69 6c 65 20 7b 24 72 6f  ns....while {$ro
9b00: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20  ot ne ""} {..   
9b10: 20 24 72 6f 6f 74 20 72 65 6d 6f 76 65 61 6c 6c   $root removeall
9b20: 74 61 67 73 0a 09 20 20 20 20 24 72 6f 6f 74 20  tags..    $root 
9b30: 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e 63 68 65  removeallbranche
9b40: 73 0a 09 20 20 20 20 23 20 4e 6f 74 65 3a 20 53  s..    # Note: S
9b50: 65 65 20 74 68 65 20 6e 6f 74 65 20 5b 78 5d 2e  ee the note [x].
9b60: 0a 0a 09 20 20 20 20 23 20 46 72 6f 6d 20 63 76  ...    # From cv
9b70: 73 32 73 76 6e 3a 20 49 66 20 74 68 69 73 20 69  s2svn: If this i
9b80: 73 20 74 68 65 20 6c 61 73 74 20 64 65 66 61 75  s the last defau
9b90: 6c 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61  lt revision on a
9ba0: 0a 09 20 20 20 20 23 20 6e 6f 6e 2d 74 72 75 6e  ..    # non-trun
9bb0: 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68  k default branch
9bc0: 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61 20 31   followed by a 1
9bd0: 2e 32 20 72 65 76 69 73 69 6f 6e 2c 0a 09 20 20  .2 revision,..  
9be0: 20 20 23 20 74 68 65 6e 20 74 68 65 20 31 2e 32    # then the 1.2
9bf0: 20 72 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64   revision depend
9c00: 73 20 6f 6e 20 74 68 69 73 20 6f 6e 65 2e 20 20  s on this one.  
9c10: 46 49 58 4d 45 3a 20 49 74 20 69 73 0a 09 20 20  FIXME: It is..  
9c20: 20 20 23 20 71 75 65 73 74 69 6f 6e 61 62 6c 65    # questionable
9c30: 20 77 68 65 74 68 65 72 20 74 68 69 73 20 68 61   whether this ha
9c40: 6e 64 6c 69 6e 67 20 69 73 20 63 6f 72 72 65 63  ndling is correc
9c50: 74 2c 20 73 69 6e 63 65 20 74 68 65 0a 09 20 20  t, since the..  
9c60: 20 20 23 20 6e 6f 6e 2d 74 72 75 6e 6b 20 64 65    # non-trunk de
9c70: 66 61 75 6c 74 20 62 72 61 6e 63 68 20 72 65 76  fault branch rev
9c80: 69 73 69 6f 6e 73 20 61 66 66 65 63 74 20 74 72  isions affect tr
9c90: 75 6e 6b 20 61 6e 64 0a 09 20 20 20 20 23 20 73  unk and..    # s
9ca0: 68 6f 75 6c 64 20 74 68 65 72 65 66 6f 72 65 20  hould therefore 
9cb0: 6e 6f 74 20 6a 75 73 74 20 62 65 20 64 69 73 63  not just be disc
9cc0: 61 72 64 65 64 20 65 76 65 6e 20 69 66 0a 09 20  arded even if.. 
9cd0: 20 20 20 23 20 2d 2d 74 72 75 6e 6b 2d 6f 6e 6c     # --trunk-onl
9ce0: 79 2e 0a 0a 09 20 20 20 20 69 66 20 7b 5b 24 72  y....    if {[$r
9cf0: 6f 6f 74 20 68 61 73 64 65 66 61 75 6c 74 62 72  oot hasdefaultbr
9d00: 61 6e 63 68 63 68 69 6c 64 5d 7d 20 7b 0a 09 09  anchchild]} {...
9d10: 73 65 74 20 6e 74 64 62 63 68 69 6c 64 20 5b 24  set ntdbchild [$
9d20: 72 6f 6f 74 20 64 65 66 61 75 6c 74 62 72 61 6e  root defaultbran
9d30: 63 68 63 68 69 6c 64 5d 0a 09 09 69 6e 74 65 67  chchild]...integ
9d40: 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09 09  rity assert {...
9d50: 20 20 20 20 5b 24 6e 74 64 62 63 68 69 6c 64 20      [$ntdbchild 
9d60: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72  defaultbranchpar
9d70: 65 6e 74 5d 20 65 71 20 24 6e 74 64 62 63 68 69  ent] eq $ntdbchi
9d80: 6c 64 0a 09 09 7d 20 7b 6e 74 64 62 20 2d 20 74  ld...} {ntdb - t
9d90: 72 75 6e 6b 20 6c 69 6e 6b 61 67 65 20 62 72 6f  runk linkage bro
9da0: 6b 65 6e 7d 0a 09 09 24 6e 74 64 62 63 68 69 6c  ken}...$ntdbchil
9db0: 64 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e  d cutdefaultbran
9dc0: 63 68 70 61 72 65 6e 74 0a 09 09 69 66 20 7b 5b  chparent...if {[
9dd0: 24 6e 74 64 62 63 68 69 6c 64 20 68 61 73 70 61  $ntdbchild haspa
9de0: 72 65 6e 74 5d 7d 20 7b 0a 09 09 20 20 20 20 6c  rent]} {...    l
9df0: 61 70 70 65 6e 64 20 6d 79 72 6f 6f 74 73 20 5b  append myroots [
9e00: 24 6e 74 64 62 63 68 69 6c 64 20 70 61 72 65 6e  $ntdbchild paren
9e10: 74 5d 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 0a 09  t]...}..    }...
9e20: 20 20 20 20 73 65 74 20 72 6f 6f 74 20 5b 24 72      set root [$r
9e30: 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 7d 0a 0a 09  oot child]..}...
9e40: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
9e50: 20 20 6d 65 74 68 6f 64 20 47 72 61 66 74 4e 54    method GraftNT
9e60: 44 42 32 54 72 75 6e 6b 20 7b 72 6f 6f 74 7d 20  DB2Trunk {root} 
9e70: 7b 0a 09 23 20 57 65 20 63 61 6e 20 6e 6f 77 20  {..# We can now 
9e80: 67 72 61 66 74 20 74 68 65 20 6e 6f 6e 2d 74 72  graft the non-tr
9e90: 75 6e 6b 20 64 65 66 61 75 6c 74 20 62 72 61 6e  unk default bran
9ea0: 63 68 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 0a  ch revisions to.
9eb0: 09 23 20 74 72 75 6e 6b 2e 20 54 68 65 79 20 73  .# trunk. They s
9ec0: 68 6f 75 6c 64 20 61 6c 72 65 61 64 79 20 62 65  hould already be
9ed0: 20 61 6c 6f 6e 65 20 6f 6e 20 61 20 43 56 53 42   alone on a CVSB
9ee0: 72 61 6e 63 68 2d 6c 65 73 73 0a 09 23 20 62 72  ranch-less..# br
9ef0: 61 6e 63 68 2e 0a 0a 09 69 6e 74 65 67 72 69 74  anch....integrit
9f00: 79 20 61 73 73 65 72 74 20 7b 21 5b 24 72 6f 6f  y assert {![$roo
9f10: 74 20 68 61 73 70 61 72 65 6e 74 62 72 61 6e 63  t hasparentbranc
9f20: 68 5d 7d 20 7b 4e 54 44 42 20 72 6f 6f 74 20 73  h]} {NTDB root s
9f30: 74 69 6c 6c 20 68 61 73 20 69 74 73 20 62 72 61  till has its bra
9f40: 6e 63 68 20 73 79 6d 62 6f 6c 7d 0a 09 69 6e 74  nch symbol}..int
9f50: 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 21  egrity assert {!
9f60: 5b 24 72 6f 6f 74 20 68 61 73 62 72 61 6e 63 68  [$root hasbranch
9f70: 65 73 5d 7d 20 20 20 20 20 7b 4e 54 44 42 20 72  es]}     {NTDB r
9f80: 6f 6f 74 20 73 74 69 6c 6c 20 68 61 73 20 73 70  oot still has sp
9f90: 61 77 6e 65 64 20 62 72 61 6e 63 68 65 73 7d 0a  awned branches}.
9fa0: 0a 09 73 65 74 20 6c 61 73 74 20 24 72 6f 6f 74  ..set last $root
9fb0: 0a 09 77 68 69 6c 65 20 7b 5b 24 6c 61 73 74 20  ..while {[$last 
9fc0: 68 61 73 63 68 69 6c 64 5d 7d 20 7b 73 65 74 20  haschild]} {set 
9fd0: 6c 61 73 74 20 5b 24 6c 61 73 74 20 63 68 69 6c  last [$last chil
9fe0: 64 5d 7d 0a 0a 09 69 66 20 7b 5b 24 6c 61 73 74  d]}...if {[$last
9ff0: 20 68 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63   hasdefaultbranc
a000: 68 63 68 69 6c 64 5d 7d 20 7b 0a 0a 09 20 20 20  hchild]} {...   
a010: 20 73 65 74 20 72 65 76 31 32 20 5b 24 6c 61 73   set rev12 [$las
a020: 74 20 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63  t defaultbranchc
a030: 68 69 6c 64 5d 0a 09 20 20 20 20 24 72 65 76 31  hild]..    $rev1
a040: 32 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e  2 cutdefaultbran
a050: 63 68 70 61 72 65 6e 74 0a 09 20 20 20 20 24 6c  chparent..    $l
a060: 61 73 74 20 20 63 75 74 64 65 66 61 75 6c 74 62  ast  cutdefaultb
a070: 72 61 6e 63 68 63 68 69 6c 64 0a 0a 09 20 20 20  ranchchild...   
a080: 20 24 72 65 76 31 32 20 63 68 61 6e 67 65 70 61   $rev12 changepa
a090: 72 65 6e 74 20 24 6c 61 73 74 0a 09 20 20 20 20  rent $last..    
a0a0: 24 6c 61 73 74 20 20 63 68 61 6e 67 65 63 68 69  $last  changechi
a0b0: 6c 64 20 24 72 65 76 31 32 0a 0a 09 20 20 20 20  ld $rev12...    
a0c0: 6c 64 65 6c 65 74 65 20 6d 79 72 6f 6f 74 73 20  ldelete myroots 
a0d0: 24 72 65 76 31 32 0a 0a 09 20 20 20 20 23 20 4e  $rev12...    # N
a0e0: 6f 74 65 20 61 6e 64 20 72 65 6d 65 6d 62 65 72  ote and remember
a0f0: 20 74 68 61 74 20 74 68 65 20 74 79 70 65 20 6f   that the type o
a100: 66 20 72 65 76 31 32 20 77 61 73 20 61 6c 72 65  f rev12 was alre
a110: 61 64 79 0a 09 20 20 20 20 23 20 61 64 6a 75 73  ady..    # adjus
a120: 74 65 64 20 62 79 20 41 64 6a 75 73 74 4e 6f 6e  ted by AdjustNon
a130: 54 72 75 6e 6b 44 65 66 61 75 6c 74 42 72 61 6e  TrunkDefaultBran
a140: 63 68 2c 20 73 6f 20 77 65 20 64 6f 6e 27 74 0a  ch, so we don't.
a150: 09 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 63  .    # have to c
a160: 68 61 6e 67 65 20 69 74 73 20 74 79 70 65 20 68  hange its type h
a170: 65 72 65 2e 0a 09 7d 0a 0a 09 77 68 69 6c 65 20  ere...}...while 
a180: 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b 0a  {$root ne ""} {.
a190: 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74 6f 6e  .    $root seton
a1a0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 30 0a  defaultbranch 0.
a1b0: 09 20 20 20 20 24 72 6f 6f 74 20 73 65 74 6c 6f  .    $root setlo
a1c0: 64 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20  d $mytrunk..    
a1d0: 66 6f 72 65 61 63 68 20 74 61 67 20 5b 24 72 6f  foreach tag [$ro
a1e0: 6f 74 20 74 61 67 73 5d 20 7b 0a 09 09 24 74 61  ot tags] {...$ta
a1f0: 67 20 73 65 74 6c 6f 64 20 24 6d 79 74 72 75 6e  g setlod $mytrun
a200: 6b 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 73 65  k..    }..    se
a210: 74 20 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68  t root [$root ch
a220: 69 6c 64 5d 0a 09 7d 0a 0a 20 20 20 20 20 20 20  ild]..}..       
a230: 20 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20   return.    }.. 
a240: 20 20 20 6d 65 74 68 6f 64 20 41 63 74 69 76 65     method Active
a250: 20 7b 7d 20 7b 0a 09 73 65 74 20 72 65 76 69 73   {} {..set revis
a260: 69 6f 6e 73 20 7b 7d 0a 09 73 65 74 20 73 79 6d  ions {}..set sym
a270: 62 6f 6c 73 20 20 20 7b 7d 0a 0a 09 66 6f 72 65  bols   {}...fore
a280: 61 63 68 20 72 6f 6f 74 20 5b 24 73 65 6c 66 20  ach root [$self 
a290: 4c 69 6e 65 73 4f 66 44 65 76 65 6c 6f 70 6d 65  LinesOfDevelopme
a2a0: 6e 74 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 5b  nt] {..    if {[
a2b0: 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74 62  $root hasparentb
a2c0: 72 61 6e 63 68 5d 7d 20 7b 20 6c 61 70 70 65 6e  ranch]} { lappen
a2d0: 64 20 73 79 6d 62 6f 6c 73 20 5b 24 72 6f 6f 74  d symbols [$root
a2e0: 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 20 7d   parentbranch] }
a2f0: 0a 09 20 20 20 20 77 68 69 6c 65 20 7b 24 72 6f  ..    while {$ro
a300: 6f 74 20 6e 65 20 22 22 7d 20 7b 0a 09 09 6c 61  ot ne ""} {...la
a310: 70 70 65 6e 64 20 72 65 76 69 73 69 6f 6e 73 20  ppend revisions 
a320: 24 72 6f 6f 74 0a 09 09 66 6f 72 65 61 63 68 20  $root...foreach 
a330: 74 61 67 20 20 20 20 5b 24 72 6f 6f 74 20 74 61  tag    [$root ta
a340: 67 73 5d 20 20 20 20 20 7b 20 6c 61 70 70 65 6e  gs]     { lappen
a350: 64 20 73 79 6d 62 6f 6c 73 20 24 74 61 67 20 20  d symbols $tag  
a360: 20 20 7d 0a 09 09 66 6f 72 65 61 63 68 20 62 72    }...foreach br
a370: 61 6e 63 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e  anch [$root bran
a380: 63 68 65 73 5d 20 7b 0a 09 09 20 20 20 20 69 6e  ches] {...    in
a390: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b  tegrity assert {
a3a0: 0a 09 09 09 5b 24 62 72 61 6e 63 68 20 70 61 72  ....[$branch par
a3b0: 65 6e 74 5d 20 65 71 20 24 72 6f 6f 74 0a 09 09  ent] eq $root...
a3c0: 20 20 20 20 7d 20 7b 42 61 63 6b 72 65 66 65 72      } {Backrefer
a3d0: 65 6e 63 65 20 62 72 61 6e 63 68 20 74 6f 20 69  ence branch to i
a3e0: 74 73 20 72 6f 6f 74 20 69 73 20 6d 69 73 73 69  ts root is missi
a3f0: 6e 67 20 6f 72 20 77 72 6f 6e 67 7d 0a 09 09 20  ng or wrong}... 
a400: 20 20 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f     lappend symbo
a410: 6c 73 20 24 62 72 61 6e 63 68 0a 09 09 7d 0a 09  ls $branch...}..
a420: 09 73 65 74 20 6c 6f 64 20 5b 24 72 6f 6f 74 20  .set lod [$root 
a430: 6c 6f 64 5d 0a 09 09 69 66 20 7b 21 5b 24 6c 6f  lod]...if {![$lo
a440: 64 20 69 73 74 72 75 6e 6b 5d 7d 20 7b 0a 09 09  d istrunk]} {...
a450: 20 20 20 20 69 6e 74 65 67 72 69 74 79 20 61 73      integrity as
a460: 73 65 72 74 20 7b 0a 09 09 09 5b 24 6c 6f 64 20  sert {....[$lod 
a470: 68 61 73 63 68 69 6c 64 5d 0a 09 09 20 20 20 20  haschild]...    
a480: 7d 20 7b 42 72 61 6e 63 68 20 69 73 20 4c 4f 44  } {Branch is LOD
a490: 20 73 79 6d 62 6f 6c 20 77 69 74 68 6f 75 74 20   symbol without 
a4a0: 72 65 76 69 73 69 6f 6e 73 7d 0a 09 09 20 20 20  revisions}...   
a4b0: 20 6c 61 70 70 65 6e 64 20 73 79 6d 62 6f 6c 73   lappend symbols
a4c0: 20 24 6c 6f 64 0a 09 09 7d 0a 09 09 73 65 74 20   $lod...}...set 
a4d0: 72 6f 6f 74 20 5b 24 72 6f 6f 74 20 63 68 69 6c  root [$root chil
a4e0: 64 5d 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72  d]..    }..}...r
a4f0: 65 74 75 72 6e 20 5b 6c 69 73 74 20 5b 6c 73 6f  eturn [list [lso
a500: 72 74 20 2d 75 6e 69 71 75 65 20 2d 64 69 63 74  rt -unique -dict
a510: 20 24 72 65 76 69 73 69 6f 6e 73 5d 20 5b 6c 73   $revisions] [ls
a520: 6f 72 74 20 2d 75 6e 69 71 75 65 20 2d 64 69 63  ort -unique -dic
a530: 74 20 24 73 79 6d 62 6f 6c 73 5d 5d 0a 20 20 20  t $symbols]].   
a540: 20 7d 0a 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20   }...    method 
a550: 41 67 67 72 65 67 61 74 65 53 79 6d 62 6f 6c 44  AggregateSymbolD
a560: 61 74 61 20 7b 7d 20 7b 0a 09 23 20 4e 6f 77 20  ata {} {..# Now 
a570: 74 68 61 74 20 74 68 65 20 65 78 61 63 74 20 73  that the exact s
a580: 65 74 20 6f 66 20 72 65 76 69 73 69 6f 6e 73 20  et of revisions 
a590: 28 61 6e 64 20 74 68 72 6f 75 67 68 20 74 68 61  (and through tha
a5a0: 74 0a 09 23 20 62 72 61 6e 63 68 65 73 20 61 6e  t..# branches an
a5b0: 64 20 74 61 67 73 29 20 69 73 20 6b 6e 6f 77 6e  d tags) is known
a5c0: 20 77 65 20 63 61 6e 20 75 70 64 61 74 65 20 74   we can update t
a5d0: 68 65 20 61 67 67 72 65 67 61 74 65 0a 09 23 20  he aggregate..# 
a5e0: 73 79 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63  symbol statistic
a5f0: 73 2e 0a 0a 09 66 6f 72 65 61 63 68 20 72 6f 6f  s....foreach roo
a600: 74 20 5b 24 73 65 6c 66 20 4c 69 6e 65 73 4f 66  t [$self LinesOf
a610: 44 65 76 65 6c 6f 70 6d 65 6e 74 5d 20 7b 0a 09  Development] {..
a620: 20 20 20 20 73 65 74 20 6c 6f 64 20 5b 24 72 6f      set lod [$ro
a630: 6f 74 20 6c 6f 64 5d 0a 0a 09 20 20 20 20 23 20  ot lod]...    # 
a640: 4e 6f 74 65 3a 20 49 66 20 74 68 65 20 4c 4f 44  Note: If the LOD
a650: 20 69 73 20 74 68 65 20 74 72 75 6e 6b 20 74 68   is the trunk th
a660: 65 20 63 6f 75 6e 74 2a 2c 20 65 74 63 2e 20 6d  e count*, etc. m
a670: 65 74 68 6f 64 73 0a 09 20 20 20 20 23 20 77 69  ethods..    # wi
a680: 6c 6c 20 64 6f 20 6e 6f 74 68 69 6e 67 2c 20 61  ll do nothing, a
a690: 73 20 69 74 20 69 73 20 61 6c 77 61 79 73 20 70  s it is always p
a6a0: 72 65 73 65 6e 74 20 28 63 61 6e 6e 6f 74 20 62  resent (cannot b
a6b0: 65 0a 09 20 20 20 20 23 20 65 78 63 6c 75 64 65  e..    # exclude
a6c0: 64 29 2c 20 61 6e 64 20 69 73 20 61 6c 77 61 79  d), and is alway
a6d0: 73 20 61 20 62 72 61 6e 63 68 20 74 6f 6f 2e 0a  s a branch too..
a6e0: 0a 09 20 20 20 20 23 20 4c 69 6e 65 73 20 6f 66  ..    # Lines of
a6f0: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 20 63 6f 75   development cou
a700: 6e 74 20 61 73 20 62 72 61 6e 63 68 65 73 20 61  nt as branches a
a710: 6e 64 20 68 61 76 65 20 61 20 63 6f 6d 6d 69 74  nd have a commit
a720: 0a 09 20 20 20 20 23 20 6f 6e 20 74 68 65 6d 20  ..    # on them 
a730: 28 72 6f 6f 74 29 2e 20 49 66 20 74 68 65 79 20  (root). If they 
a740: 61 72 65 20 73 74 69 6c 6c 20 61 74 74 61 63 68  are still attach
a750: 65 64 20 74 6f 20 61 20 74 72 65 65 20 77 65 0a  ed to a tree we.
a760: 09 20 20 20 20 23 20 68 61 76 65 20 74 6f 20 63  .    # have to c
a770: 6f 6d 70 75 74 65 20 61 6e 64 20 72 65 67 69 73  ompute and regis
a780: 74 65 72 20 70 6f 73 73 69 62 6c 65 20 70 61 72  ter possible par
a790: 65 6e 74 73 2e 0a 0a 09 20 20 20 20 24 6c 6f 64  ents....    $lod
a7a0: 20 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 0a 09   countasbranch..
a7b0: 20 20 20 20 24 6c 6f 64 20 63 6f 75 6e 74 61 63      $lod countac
a7c0: 6f 6d 6d 69 74 0a 0a 09 20 20 20 20 69 66 20 7b  ommit...    if {
a7d0: 5b 24 72 6f 6f 74 20 68 61 73 70 61 72 65 6e 74  [$root hasparent
a7e0: 62 72 61 6e 63 68 5d 7d 20 7b 0a 09 09 23 20 4e  branch]} {...# N
a7f0: 6f 74 65 20 6c 6f 64 20 3d 3d 20 5b 24 72 6f 6f  ote lod == [$roo
a800: 74 20 70 61 72 65 6e 74 62 72 61 6e 63 68 5d 0a  t parentbranch].
a810: 09 09 24 6c 6f 64 20 70 6f 73 73 69 62 6c 65 70  ..$lod possiblep
a820: 61 72 65 6e 74 73 0a 09 20 20 20 20 7d 20 65 6c  arents..    } el
a830: 73 65 69 66 20 7b 21 5b 24 6c 6f 64 20 69 73 74  seif {![$lod ist
a840: 72 75 6e 6b 5d 20 26 26 20 5b 24 72 6f 6f 74 20  runk] && [$root 
a850: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63  isondefaultbranc
a860: 68 5d 7d 20 7b 0a 09 09 23 20 54 68 69 73 20 69  h]} {...# This i
a870: 73 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73  s the root revis
a880: 69 6f 6e 20 6f 66 20 61 20 64 65 74 61 63 68 65  ion of a detache
a890: 64 20 4e 54 44 42 2e 20 57 65 0a 09 09 23 20 68  d NTDB. We...# h
a8a0: 61 76 65 20 74 6f 20 6d 61 6e 75 61 6c 6c 79 20  ave to manually 
a8b0: 73 65 74 20 74 68 65 20 6f 6e 6c 79 20 70 6f 73  set the only pos
a8c0: 73 69 62 6c 65 20 70 61 72 65 6e 74 20 66 6f 72  sible parent for
a8d0: 0a 09 09 23 20 74 68 69 73 20 4c 4f 44 2c 20 74  ...# this LOD, t
a8e0: 68 65 20 74 72 75 6e 6b 20 69 74 73 65 6c 66 2e  he trunk itself.
a8f0: 0a 0a 09 09 5b 24 6c 6f 64 20 73 79 6d 62 6f 6c  ....[$lod symbol
a900: 5d 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74  ] possibleparent
a910: 20 24 6d 79 74 72 75 6e 6b 0a 09 20 20 20 20 7d   $mytrunk..    }
a920: 0a 0a 09 20 20 20 20 23 20 46 6f 72 20 74 68 65  ...    # For the
a930: 20 72 65 76 69 73 69 6f 6e 73 20 69 6e 20 74 68   revisions in th
a940: 65 20 6c 69 6e 65 20 77 65 20 72 65 67 69 73 74  e line we regist
a950: 65 72 20 74 68 65 69 72 20 62 72 61 6e 63 68 65  er their branche
a960: 73 0a 09 20 20 20 20 23 20 61 6e 64 20 74 61 67  s..    # and tag
a970: 73 20 61 73 20 62 6c 6f 63 6b 65 72 73 20 66 6f  s as blockers fo
a980: 72 20 74 68 65 20 6c 6f 64 2c 20 61 6e 64 20 75  r the lod, and u
a990: 70 64 61 74 65 20 74 68 65 20 74 79 70 65 0a 09  pdate the type..
a9a0: 20 20 20 20 23 20 63 6f 75 6e 74 65 72 73 20 61      # counters a
a9b0: 73 20 77 65 6c 6c 2e 20 41 73 20 62 72 61 6e 63  s well. As branc
a9c0: 68 20 73 79 6d 62 6f 6c 73 20 77 69 74 68 6f 75  h symbols withou
a9d0: 74 20 63 6f 6d 6d 69 74 73 20 6f 6e 0a 09 20 20  t commits on..  
a9e0: 20 20 23 20 74 68 65 6d 20 61 72 65 20 6e 6f 74    # them are not
a9f0: 20 6c 69 73 74 65 64 20 61 73 20 6c 69 6e 65 73   listed as lines
aa00: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2c   of development,
aa10: 20 77 65 20 68 61 76 65 20 74 6f 0a 09 20 20 20   we have to..   
aa20: 20 23 20 63 6f 75 6e 74 20 74 68 65 6d 20 68 65   # count them he
aa30: 72 65 20 61 73 20 77 65 6c 6c 2c 20 61 73 20 70  re as well, as p
aa40: 6c 61 69 6e 20 62 72 61 6e 63 68 65 73 2e 20 41  lain branches. A
aa50: 74 20 6c 61 73 74 20 77 65 0a 09 20 20 20 20 23  t last we..    #
aa60: 20 68 61 76 65 20 74 6f 20 63 6f 6d 70 75 74 65   have to compute
aa70: 20 61 6e 64 20 72 65 67 69 73 74 65 72 20 74 68   and register th
aa80: 65 20 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e  e possible paren
aa90: 74 73 20 6f 66 20 74 68 65 0a 09 20 20 20 20 23  ts of the..    #
aaa0: 20 74 61 67 73 2c 20 69 6e 20 63 61 73 65 20 74   tags, in case t
aab0: 68 65 79 20 61 72 65 20 6c 61 74 65 72 20 63 6f  hey are later co
aac0: 6e 76 65 72 74 65 64 20 61 73 20 62 72 61 6e 63  nverted as branc
aad0: 68 65 73 2e 0a 0a 09 20 20 20 20 77 68 69 6c 65  hes....    while
aae0: 20 7b 24 72 6f 6f 74 20 6e 65 20 22 22 7d 20 7b   {$root ne ""} {
aaf0: 0a 09 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63  ...foreach branc
ab00: 68 20 5b 24 72 6f 6f 74 20 62 72 61 6e 63 68 65  h [$root branche
ab10: 73 5d 20 7b 0a 09 09 20 20 20 20 24 6c 6f 64 20  s] {...    $lod 
ab20: 62 6c 6f 63 6b 65 64 62 79 20 24 62 72 61 6e 63  blockedby $branc
ab30: 68 0a 09 09 20 20 20 20 24 62 72 61 6e 63 68 20  h...    $branch 
ab40: 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 73 0a  possibleparents.
ab50: 09 09 20 20 20 20 69 66 20 7b 5b 24 62 72 61 6e  ..    if {[$bran
ab60: 63 68 20 68 61 73 63 68 69 6c 64 5d 7d 20 63 6f  ch haschild]} co
ab70: 6e 74 69 6e 75 65 0a 09 09 20 20 20 20 24 62 72  ntinue...    $br
ab80: 61 6e 63 68 20 63 6f 75 6e 74 61 73 62 72 61 6e  anch countasbran
ab90: 63 68 0a 09 09 7d 0a 0a 09 09 66 6f 72 65 61 63  ch...}....foreac
aba0: 68 20 74 61 67 20 5b 24 72 6f 6f 74 20 74 61 67  h tag [$root tag
abb0: 73 5d 20 7b 0a 09 09 20 20 20 20 24 6c 6f 64 20  s] {...    $lod 
abc0: 62 6c 6f 63 6b 65 64 62 79 20 24 74 61 67 0a 09  blockedby $tag..
abd0: 09 20 20 20 20 24 74 61 67 20 70 6f 73 73 69 62  .    $tag possib
abe0: 6c 65 70 61 72 65 6e 74 73 0a 09 09 20 20 20 20  leparents...    
abf0: 24 74 61 67 20 63 6f 75 6e 74 61 73 74 61 67 0a  $tag countastag.
ac00: 09 09 7d 0a 0a 09 09 73 65 74 20 72 6f 6f 74 20  ..}....set root 
ac10: 5b 24 72 6f 6f 74 20 63 68 69 6c 64 5d 0a 09 20  [$root child].. 
ac20: 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e     }..}...return
ac30: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20  .    }..    # # 
ac40: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
ac50: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
ac60: 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e 66 69  ###.    ## Confi
ac70: 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72  guration..    pr
ac80: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69 6e 66  agma -hastypeinf
ac90: 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20  o    no  ; # no 
aca0: 74 79 70 65 20 69 6e 74 72 6f 73 70 65 63 74 69  type introspecti
acb0: 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68  on.    pragma -h
acc0: 61 73 69 6e 66 6f 20 20 20 20 20 20 20 20 6e 6f  asinfo        no
acd0: 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 63 74 20    ; # no object 
ace0: 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20  introspection.  
acf0: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70    pragma -hastyp
ad00: 65 6d 65 74 68 6f 64 73 20 6e 6f 20 20 3b 20 23  emethods no  ; #
ad10: 20 74 79 70 65 20 69 73 20 6e 6f 74 20 72 65 6c   type is not rel
ad20: 65 76 61 6e 74 2e 0a 0a 20 20 20 20 23 20 23 20  evant...    # # 
ad30: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
ad40: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
ad50: 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65  ###.}..namespace
ad60: 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73   eval ::vc::foss
ad70: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 20  il::import::cvs 
ad80: 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  {.    namespace 
ad90: 65 78 70 6f 72 74 20 66 69 6c 65 0a 20 20 20 20  export file.    
ada0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 66  namespace eval f
adb0: 69 6c 65 20 7b 0a 09 23 20 49 6d 70 6f 72 74 20  ile {..# Import 
adc0: 6e 6f 74 20 72 65 71 75 69 72 65 64 2c 20 61 6c  not required, al
add0: 72 65 61 64 79 20 61 20 63 68 69 6c 64 20 6e 61  ready a child na
ade0: 6d 65 73 70 61 63 65 2e 0a 09 23 20 6e 61 6d 65  mespace...# name
adf0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
ae00: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
ae10: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 72 65  t::cvs::file::re
ae20: 76 0a 09 23 20 6e 61 6d 65 73 70 61 63 65 20 69  v..# namespace i
ae30: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73  mport ::vc::foss
ae40: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
ae50: 3a 66 69 6c 65 3a 3a 73 79 6d 0a 09 6e 61 6d 65  :file::sym..name
ae60: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
ae70: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a  c::tools::misc::
ae80: 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  *..namespace imp
ae90: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a  ort ::vc::tools:
aea0: 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 6d 65 73 70  :trouble..namesp
aeb0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
aec0: 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6e 61 6d  :tools::log..nam
aed0: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
aee0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
aef0: 72 74 3a 3a 63 76 73 3a 3a 62 6c 6f 62 73 74 6f  rt::cvs::blobsto
af00: 72 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d  re..namespace im
af10: 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69  port ::vc::fossi
af20: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
af30: 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 65  state..namespace
af40: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
af50: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
af60: 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 6e 61  s::integrity..na
af70: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
af80: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
af90: 6f 72 74 3a 3a 63 76 73 3a 3a 67 74 63 6f 72 65  ort::cvs::gtcore
afa0: 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23  .    }.}..# # ##
afb0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
afc0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
afd0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
afe0: 23 23 23 23 23 23 23 0a 23 23 20 52 65 61 64 79  #######.## Ready
aff0: 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64  ..package provid
b000: 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  e vc::fossil::im
b010: 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20  port::cvs::file 
b020: 31 2e 30 0a 72 65 74 75 72 6e 0a                 1.0.return.