Hex Artifact Content
Not logged in

Artifact 880ea7b085a2144b7e2291d3cfa0c363180bbdde:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [cb70cf4ad6] - The basic work of setting up and linking revisions, tags, and branches is complete. by aku on 2007-10-13 05:39:00.

0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23  ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69  07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66  es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65  tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69  d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e  n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20  SE, which.# you 
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65  should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ived as part of 
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f  this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74  n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72   voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79  ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75   many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20  als.  For exact 
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73  contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65  tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79  vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c   and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66  able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e  ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23  com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 46 69 6c  ########..## Fil
0200: 65 2c 20 70 61 72 74 20 6f 66 20 61 20 70 72 6f  e, part of a pro
0210: 6a 65 63 74 2c 20 70 61 72 74 20 6f 66 20 61 20  ject, part of a 
0220: 43 56 53 20 72 65 70 6f 73 69 74 6f 72 79 2e 20  CVS repository. 
0230: 4d 75 6c 74 69 70 6c 65 0a 23 23 20 69 6e 73 74  Multiple.## inst
0240: 61 6e 63 65 73 20 61 72 65 20 70 6f 73 73 69 62  ances are possib
0250: 6c 65 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20  le...# # ## ### 
0260: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
0270: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
0280: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0290: 23 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e  ##.## Requiremen
02a0: 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ts..package requ
02b0: 69 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20  ire Tcl 8.4     
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 20 20 20 20 20 20 20 20 3b 20 23 20 52 65 71 75          ; # Requ
02e0: 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61  ired runtime..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 6e  ckage require sn
0300: 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  it              
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0320: 20 20 3b 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e    ; # OO system.
0330: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
0340: 20 73 74 72 75 63 74 3a 3a 73 65 74 20 20 20 20   struct::set    
0350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0360: 20 20 20 20 20 3b 20 23 20 53 65 74 20 6f 70 65       ; # Set ope
0370: 72 61 74 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65  rations..package
0380: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
0390: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
03a0: 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 20 3b 20 23  ::file::rev  ; #
03b0: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 72 65   CVS per file re
03c0: 76 69 73 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65  visions..package
03d0: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
03e0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
03f0: 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 3b 20 23  ::file::sym  ; #
0400: 20 43 56 53 20 70 65 72 20 66 69 6c 65 20 73 79   CVS per file sy
0410: 6d 62 6f 6c 73 2e 0a 70 61 63 6b 61 67 65 20 72  mbols..package r
0420: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73  equire vc::tools
0430: 3a 3a 74 72 6f 75 62 6c 65 20 20 20 20 20 20 20  ::trouble       
0440: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 45             ; # E
0450: 72 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e 0a  rror reporting..
0460: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0470: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20  vc::tools::misc 
0480: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0490: 20 20 20 20 3b 20 23 20 54 65 78 74 20 66 6f 72      ; # Text for
04a0: 6d 61 74 74 69 6e 67 0a 0a 23 20 23 20 23 23 20  matting..# # ## 
04b0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
04c0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
04d0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
04e0: 23 23 23 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74  ######.## ..snit
04f0: 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73  ::type ::vc::fos
0500: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
0510: 3a 3a 66 69 6c 65 20 7b 0a 20 20 20 20 23 20 23  ::file {.    # #
0520: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
0530: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0540: 23 23 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c  ####.    ## Publ
0550: 69 63 20 41 50 49 0a 0a 20 20 20 20 63 6f 6e 73  ic API..    cons
0560: 74 72 75 63 74 6f 72 20 7b 70 61 74 68 20 70 72  tructor {path pr
0570: 6f 6a 65 63 74 7d 20 7b 0a 09 73 65 74 20 6d 79  oject} {..set my
0580: 70 61 74 68 20 20 20 20 24 70 61 74 68 0a 09 73  path    $path..s
0590: 65 74 20 6d 79 70 72 6f 6a 65 63 74 20 24 70 72  et myproject $pr
05a0: 6f 6a 65 63 74 0a 09 72 65 74 75 72 6e 0a 20 20  oject..return.  
05b0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
05c0: 70 61 74 68 20 20 20 20 7b 7d 20 7b 20 72 65 74  path    {} { ret
05d0: 75 72 6e 20 24 6d 79 70 61 74 68 20 7d 0a 20 20  urn $mypath }.  
05e0: 20 20 6d 65 74 68 6f 64 20 70 72 6f 6a 65 63 74    method project
05f0: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79   {} { return $my
0600: 70 72 6f 6a 65 63 74 20 7d 0a 0a 20 20 20 20 23  project }..    #
0610: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0620: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0630: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 4d 65  ######.    ## Me
0640: 74 68 6f 64 73 20 72 65 71 75 69 72 65 64 20 66  thods required f
0650: 6f 72 20 74 68 65 20 63 6c 61 73 73 20 74 6f 20  or the class to 
0660: 62 65 20 61 20 73 69 6e 6b 20 6f 66 20 74 68 65  be a sink of the
0670: 20 72 63 73 20 70 61 72 73 65 72 0a 0a 20 20 20   rcs parser..   
0680: 20 23 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 7b   #method begin {
0690: 7d 20 7b 70 75 74 73 20 62 65 67 69 6e 7d 0a 20  } {puts begin}. 
06a0: 20 20 20 23 6d 65 74 68 6f 64 20 73 65 74 68 65     #method sethe
06b0: 61 64 20 7b 68 7d 20 7b 70 75 74 73 20 68 65 61  ad {h} {puts hea
06c0: 64 3d 24 68 7d 0a 20 20 20 20 23 6d 65 74 68 6f  d=$h}.    #metho
06d0: 64 20 73 65 74 70 72 69 6e 63 69 70 61 6c 62 72  d setprincipalbr
06e0: 61 6e 63 68 20 7b 62 7d 20 7b 70 75 74 73 20 70  anch {b} {puts p
06f0: 62 3d 24 62 7d 0a 20 20 20 20 23 6d 65 74 68 6f  b=$b}.    #metho
0700: 64 20 64 65 66 74 61 67 20 7b 73 20 72 7d 20 7b  d deftag {s r} {
0710: 70 75 74 73 20 24 73 3d 24 72 7d 0a 20 20 20 20  puts $s=$r}.    
0720: 23 6d 65 74 68 6f 64 20 73 65 74 63 6f 6d 6d 65  #method setcomme
0730: 6e 74 20 7b 63 7d 20 7b 70 75 74 73 20 63 6f 6d  nt {c} {puts com
0740: 6d 65 6e 74 3d 24 63 7d 0a 20 20 20 20 23 6d 65  ment=$c}.    #me
0750: 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65 20 7b  thod admindone {
0760: 7d 20 7b 70 75 74 73 20 61 64 6d 69 6e 64 6f 6e  } {puts admindon
0770: 65 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64  e}.    #method d
0780: 65 66 20 7b 72 65 76 20 64 61 74 65 20 61 75 74  ef {rev date aut
0790: 68 6f 72 20 73 74 61 74 65 20 6e 65 78 74 20 62  hor state next b
07a0: 72 61 6e 63 68 65 73 7d 20 7b 70 75 74 73 20 22  ranches} {puts "
07b0: 64 65 66 20 24 72 65 76 20 24 64 61 74 65 20 24  def $rev $date $
07c0: 61 75 74 68 6f 72 20 24 73 74 61 74 65 20 24 6e  author $state $n
07d0: 65 78 74 20 24 62 72 61 6e 63 68 65 73 22 7d 0a  ext $branches"}.
07e0: 20 20 20 20 23 6d 65 74 68 6f 64 20 64 65 66 64      #method defd
07f0: 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 65 66  one {} {puts def
0800: 2d 64 6f 6e 65 7d 0a 20 20 20 20 23 6d 65 74 68  -done}.    #meth
0810: 6f 64 20 73 65 74 64 65 73 63 20 7b 64 7d 20 7b  od setdesc {d} {
0820: 70 75 74 73 20 64 65 73 63 3d 24 64 7d 0a 20 20  puts desc=$d}.  
0830: 20 20 23 6d 65 74 68 6f 64 20 65 78 74 65 6e 64    #method extend
0840: 20 7b 72 65 76 20 63 6f 6d 6d 69 74 6d 73 67 20   {rev commitmsg 
0850: 64 65 6c 74 61 72 61 6e 67 65 7d 20 7b 70 75 74  deltarange} {put
0860: 73 20 22 65 78 74 65 6e 64 20 24 63 6f 6d 6d 69  s "extend $commi
0870: 74 6d 73 67 20 24 64 65 6c 74 61 72 61 6e 67 65  tmsg $deltarange
0880: 22 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 64  "}.    #method d
0890: 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 6f 6e  one {} {puts don
08a0: 65 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23  e}..    # # ## #
08b0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
08c0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
08d0: 20 20 20 20 23 23 20 50 65 72 73 69 73 74 65 6e      ## Persisten
08e0: 63 65 20 28 70 61 73 73 20 49 49 29 0a 0a 20 20  ce (pass II)..  
08f0: 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74    method persist
0900: 20 7b 7d 20 7b 0a 20 20 20 20 7d 0a 0a 20 20 20   {} {.    }..   
0910: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
0920: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
0930: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20  ########.    ## 
0940: 49 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 73 69  Implement the si
0950: 6e 6b 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 62  nk..    method b
0960: 65 67 69 6e 20 7b 7d 20 7b 23 69 67 6e 6f 72 65  egin {} {#ignore
0970: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65  }..    method se
0980: 74 68 65 61 64 20 7b 72 65 76 6e 72 7d 20 7b 0a  thead {revnr} {.
0990: 09 73 65 74 20 6d 79 68 65 61 64 20 24 72 65 76  .set myhead $rev
09a0: 6e 72 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  nr..return.    }
09b0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
09c0: 70 72 69 6e 63 69 70 61 6c 62 72 61 6e 63 68 20  principalbranch 
09d0: 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 73 65  {branchnr} {..se
09e0: 74 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 24 62  t myprincipal $b
09f0: 72 61 6e 63 68 6e 72 0a 09 72 65 74 75 72 6e 0a  ranchnr..return.
0a00: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
0a10: 64 20 64 65 66 74 61 67 20 7b 6e 61 6d 65 20 72  d deftag {name r
0a20: 65 76 6e 72 7d 20 7b 0a 09 23 20 46 55 54 55 52  evnr} {..# FUTUR
0a30: 45 3a 20 50 65 72 66 6f 72 6d 20 73 79 6d 62 6f  E: Perform symbo
0a40: 6c 20 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e  l transformation
0a50: 20 68 65 72 65 2e 0a 0a 09 69 66 20 7b 5b 73 74   here....if {[st
0a60: 72 75 63 74 3a 3a 73 65 74 20 63 6f 6e 74 61 69  ruct::set contai
0a70: 6e 73 20 24 6d 79 73 79 6d 62 6f 6c 73 20 24 6e  ns $mysymbols $n
0a80: 61 6d 65 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f  ame]} {..    tro
0a90: 75 62 6c 65 20 66 61 74 61 6c 20 22 4d 75 6c 74  uble fatal "Mult
0aa0: 69 70 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 73  iple definitions
0ab0: 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 20 27   of the symbol '
0ac0: 24 6e 61 6d 65 27 20 69 6e 20 27 24 6d 79 70 61  $name' in '$mypa
0ad0: 74 68 27 22 0a 09 20 20 20 20 72 65 74 75 72 6e  th'"..    return
0ae0: 0a 09 7d 0a 0a 09 73 74 72 75 63 74 3a 3a 73 65  ..}...struct::se
0af0: 74 20 61 64 64 20 6d 79 73 79 6d 62 6f 6c 73 20  t add mysymbols 
0b00: 24 6e 61 6d 65 0a 0a 09 69 66 20 7b 5b 72 65 76  $name...if {[rev
0b10: 20 69 73 62 72 61 6e 63 68 72 65 76 6e 72 20 24   isbranchrevnr $
0b20: 72 65 76 6e 72 20 2d 3e 20 62 72 61 6e 63 68 6e  revnr -> branchn
0b30: 72 5d 7d 20 7b 0a 09 20 20 20 20 24 73 65 6c 66  r]} {..    $self
0b40: 20 41 64 64 42 72 61 6e 63 68 20 24 6e 61 6d 65   AddBranch $name
0b50: 20 24 62 72 61 6e 63 68 6e 72 0a 09 7d 20 65 6c   $branchnr..} el
0b60: 73 65 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20  se {..    $self 
0b70: 41 64 64 54 61 67 20 24 6e 61 6d 65 20 24 72 65  AddTag $name $re
0b80: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  vnr..}..return. 
0b90: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
0ba0: 20 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d 20   setcomment {c} 
0bb0: 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20 20 20  {# ignore}..    
0bc0: 6d 65 74 68 6f 64 20 61 64 6d 69 6e 64 6f 6e 65  method admindone
0bd0: 20 7b 7d 20 7b 0a 09 23 20 57 65 20 64 6f 20 6e   {} {..# We do n
0be0: 6f 74 68 69 6e 67 20 61 74 20 74 68 65 20 62 6f  othing at the bo
0bf0: 75 6e 64 61 72 79 20 6f 66 20 61 64 6d 69 6e 20  undary of admin 
0c00: 61 6e 64 20 72 65 76 69 73 69 6f 6e 20 64 61 74  and revision dat
0c10: 61 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  a.    }..    met
0c20: 68 6f 64 20 64 65 66 20 7b 72 65 76 6e 72 20 64  hod def {revnr d
0c30: 61 74 65 20 61 75 74 68 6f 72 20 73 74 61 74 65  ate author state
0c40: 20 6e 65 78 74 20 62 72 61 6e 63 68 65 73 7d 20   next branches} 
0c50: 7b 0a 09 24 73 65 6c 66 20 52 65 63 6f 72 64 42  {..$self RecordB
0c60: 72 61 6e 63 68 43 6f 6d 6d 69 74 73 20 24 62 72  ranchCommits $br
0c70: 61 6e 63 68 65 73 0a 09 24 6d 79 70 72 6f 6a 65  anches..$myproje
0c80: 63 74 20 61 75 74 68 6f 72 20 24 61 75 74 68 6f  ct author $autho
0c90: 72 0a 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78  r...if {[info ex
0ca0: 69 73 74 73 20 6d 79 72 65 76 28 24 72 65 76 6e  ists myrev($revn
0cb0: 72 29 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f 75  r)]} {..    trou
0cc0: 62 6c 65 20 66 61 74 61 6c 20 22 46 69 6c 65 20  ble fatal "File 
0cd0: 24 6d 79 70 61 74 68 20 63 6f 6e 74 61 69 6e 73  $mypath contains
0ce0: 20 64 75 70 6c 69 63 61 74 65 20 64 65 66 69 6e   duplicate defin
0cf0: 69 74 69 6f 6e 73 20 66 6f 72 20 72 65 76 69 73  itions for revis
0d00: 69 6f 6e 20 24 72 65 76 6e 72 2e 22 0a 09 20 20  ion $revnr."..  
0d10: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 73 65    return..}...se
0d20: 74 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 20  t myrev($revnr) 
0d30: 5b 72 65 76 20 25 41 55 54 4f 25 20 24 72 65 76  [rev %AUTO% $rev
0d40: 6e 72 20 24 64 61 74 65 20 24 61 75 74 68 6f 72  nr $date $author
0d50: 20 24 73 74 61 74 65 20 24 73 65 6c 66 5d 0a 0a   $state $self]..
0d60: 09 52 65 63 6f 72 64 42 61 73 69 63 44 65 70 65  .RecordBasicDepe
0d70: 6e 64 65 6e 63 69 65 73 20 24 72 65 76 6e 72 20  ndencies $revnr 
0d80: 24 6e 65 78 74 0a 09 72 65 74 75 72 6e 0a 20 20  $next..return.  
0d90: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
0da0: 64 65 66 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20  defdone {} {..# 
0db0: 54 68 69 73 20 69 73 20 61 6c 6c 20 64 6f 6e 65  This is all done
0dc0: 20 61 66 74 65 72 20 74 68 65 20 72 65 76 69 73   after the revis
0dd0: 69 6f 6e 20 74 72 65 65 20 68 61 73 20 62 65 65  ion tree has bee
0de0: 6e 20 65 78 74 72 61 63 74 65 64 0a 09 23 20 66  n extracted..# f
0df0: 72 6f 6d 20 74 68 65 20 66 69 6c 65 2c 20 62 65  rom the file, be
0e00: 66 6f 72 65 20 74 68 65 20 63 6f 6d 6d 69 74 20  fore the commit 
0e10: 6d 65 73 61 67 65 73 20 61 6e 64 20 64 65 6c 74  mesages and delt
0e20: 61 20 74 65 78 74 73 20 61 72 65 0a 09 23 20 70  a texts are..# p
0e30: 72 6f 63 65 73 73 65 64 2e 0a 0a 09 50 72 6f 63  rocessed....Proc
0e40: 65 73 73 50 72 69 6d 61 72 79 44 65 70 65 6e 64  essPrimaryDepend
0e50: 65 6e 63 69 65 73 0a 09 50 72 6f 63 65 73 73 42  encies..ProcessB
0e60: 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63 69 65  ranchDependencie
0e70: 73 0a 09 53 6f 72 74 42 72 61 6e 63 68 65 73 0a  s..SortBranches.
0e80: 09 50 72 6f 63 65 73 73 54 61 67 44 65 70 65 6e  .ProcessTagDepen
0e90: 64 65 6e 63 69 65 73 0a 09 44 65 74 65 72 6d 69  dencies..Determi
0ea0: 6e 65 54 68 65 52 6f 6f 74 52 65 76 69 73 69 6f  neTheRootRevisio
0eb0: 6e 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  n..return.    }.
0ec0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 64  .    method setd
0ed0: 65 73 63 20 7b 64 7d 20 7b 23 20 69 67 6e 6f 72  esc {d} {# ignor
0ee0: 65 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 65  e}..    method e
0ef0: 78 74 65 6e 64 20 7b 72 65 76 6e 72 20 63 6f 6d  xtend {revnr com
0f00: 6d 69 74 6d 73 67 20 64 65 6c 74 61 72 61 6e 67  mitmsg deltarang
0f10: 65 7d 20 7b 0a 09 73 65 74 20 63 6d 20 5b 73 74  e} {..set cm [st
0f20: 72 69 6e 67 20 74 72 69 6d 20 24 63 6f 6d 6d 69  ring trim $commi
0f30: 74 6d 73 67 5d 0a 09 24 6d 79 70 72 6f 6a 65 63  tmsg]..$myprojec
0f40: 74 20 63 6d 65 73 73 61 67 65 20 24 63 6d 0a 0a  t cmessage $cm..
0f50: 09 73 65 74 20 72 65 76 20 24 6d 79 72 65 76 28  .set rev $myrev(
0f60: 24 72 65 76 6e 72 29 0a 0a 09 69 66 20 7b 5b 24  $revnr)...if {[$
0f70: 72 65 76 20 68 61 73 63 6f 6d 6d 69 74 6d 73 67  rev hascommitmsg
0f80: 5d 7d 20 7b 0a 09 20 20 20 20 23 20 41 70 70 61  ]} {..    # Appa
0f90: 72 65 6e 74 6c 79 20 72 65 70 6f 73 69 74 6f 72  rently repositor
0fa0: 69 65 73 20 65 78 69 73 74 20 69 6e 20 77 68 69  ies exist in whi
0fb0: 63 68 20 74 68 65 20 64 65 6c 74 61 20 64 61 74  ch the delta dat
0fc0: 61 0a 09 20 20 20 20 23 20 66 6f 72 20 72 65 76  a..    # for rev
0fd0: 69 73 69 6f 6e 20 31 2e 31 20 69 73 20 70 72 6f  ision 1.1 is pro
0fe0: 76 69 64 65 64 20 73 65 76 65 72 61 6c 20 74 69  vided several ti
0ff0: 6d 65 73 2c 20 61 74 20 6c 65 61 73 74 0a 09 20  mes, at least.. 
1000: 20 20 20 23 20 74 77 69 63 65 2e 20 54 68 65 20     # twice. The 
1010: 61 63 74 75 61 6c 20 63 61 75 73 65 20 6f 66 20  actual cause of 
1020: 74 68 69 73 20 64 75 70 6c 69 63 61 74 69 6f 6e  this duplication
1030: 20 69 73 20 6e 6f 74 0a 09 20 20 20 20 23 20 6b   is not..    # k
1040: 6e 6f 77 6e 2e 20 53 70 65 63 75 6c 61 74 69 6f  nown. Speculatio
1050: 6e 20 63 65 6e 74 65 72 73 20 6f 6e 20 52 43 53  n centers on RCS
1060: 2f 43 56 53 20 62 75 67 73 2c 20 6f 72 20 66 72  /CVS bugs, or fr
1070: 6f 6d 0a 09 20 20 20 20 23 20 6d 61 6e 75 61 6c  om..    # manual
1080: 20 65 64 69 74 73 20 6f 66 20 74 68 65 20 72 65   edits of the re
1090: 70 6f 73 69 74 6f 72 79 20 77 68 69 63 68 20 62  pository which b
10a0: 6f 72 6b 65 64 20 74 68 65 0a 09 20 20 20 20 23  orked the..    #
10b0: 20 69 6e 74 65 72 6e 61 6c 73 2e 20 57 68 61 74   internals. What
10c0: 65 76 65 72 20 74 68 65 20 63 61 75 73 65 2c 20  ever the cause, 
10d0: 74 65 73 74 69 6e 67 20 73 68 6f 77 65 64 20 74  testing showed t
10e0: 68 61 74 20 62 6f 74 68 0a 09 20 20 20 20 23 20  hat both..    # 
10f0: 63 76 73 20 61 6e 64 20 72 63 73 20 75 73 65 20  cvs and rcs use 
1100: 74 68 65 20 66 69 72 73 74 20 64 65 66 69 6e 69  the first defini
1110: 74 69 6f 6e 20 77 68 65 6e 20 70 65 72 66 6f 72  tion when perfor
1120: 6d 69 6e 67 20 61 0a 09 20 20 20 20 23 20 63 68  ming a..    # ch
1130: 65 63 6b 6f 75 74 2c 20 61 6e 64 20 77 65 20 66  eckout, and we f
1140: 6f 6c 6c 6f 77 20 74 68 65 69 72 20 6c 65 61 64  ollow their lead
1150: 2e 20 53 69 64 65 20 6e 6f 74 65 73 3a 20 27 63  . Side notes: 'c
1160: 76 73 0a 09 20 20 20 20 23 20 6c 6f 67 27 20 66  vs..    # log' f
1170: 61 69 6c 73 20 6f 6e 20 73 75 63 68 20 61 20 66  ails on such a f
1180: 69 6c 65 2c 20 61 6e 64 20 27 63 76 73 20 72 6c  ile, and 'cvs rl
1190: 6f 67 27 20 70 72 69 6e 74 73 20 74 68 65 20 6c  og' prints the l
11a0: 6f 67 0a 09 20 20 20 20 23 20 6d 65 73 73 61 67  og..    # messag
11b0: 65 20 66 72 6f 6d 20 74 68 65 20 66 69 72 73 74  e from the first
11c0: 20 64 65 6c 74 61 2c 20 69 67 6e 6f 72 69 6e 67   delta, ignoring
11d0: 20 74 68 65 20 73 65 63 6f 6e 64 2e 0a 0a 09 20   the second.... 
11e0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66     log write 1 f
11f0: 69 6c 65 20 22 49 6e 20 66 69 6c 65 20 24 6d 79  ile "In file $my
1200: 70 61 74 68 20 3a 20 44 75 70 6c 69 63 61 74 65  path : Duplicate
1210: 20 64 65 6c 74 61 20 64 61 74 61 20 66 6f 72 20   delta data for 
1220: 72 65 76 69 73 69 6f 6e 20 24 72 65 76 6e 72 22  revision $revnr"
1230: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
1240: 31 20 66 69 6c 65 20 22 49 67 6e 6f 72 69 6e 67  1 file "Ignoring
1250: 20 74 68 65 20 64 75 70 6c 69 63 61 74 65 22 0a   the duplicate".
1260: 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a  .    return..}..
1270: 09 23 20 45 78 74 65 6e 64 20 74 68 65 20 72 65  .# Extend the re
1280: 76 69 73 69 6f 6e 20 77 69 74 68 20 74 68 65 20  vision with the 
1290: 6e 65 77 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  new information.
12a0: 20 54 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23   The revision..#
12b0: 20 6f 62 6a 65 63 74 20 75 73 65 73 20 74 68 69   object uses thi
12c0: 73 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 69 74  s to complete it
12d0: 73 20 6d 65 74 61 20 64 61 74 61 20 73 65 74 2e  s meta data set.
12e0: 0a 0a 09 24 72 65 76 20 73 65 74 63 6f 6d 6d 69  ...$rev setcommi
12f0: 74 6d 73 67 20 24 63 6d 0a 09 24 72 65 76 20 73  tmsg $cm..$rev s
1300: 65 74 74 65 78 74 20 20 24 64 65 6c 74 61 72 61  ettext  $deltara
1310: 6e 67 65 0a 0a 09 69 66 20 7b 21 5b 72 65 76 20  nge...if {![rev 
1320: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65  istrunkrevnr $re
1330: 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 24 72 65  vnr]} {..    $re
1340: 76 20 73 65 74 62 72 61 6e 63 68 6e 61 6d 65 20  v setbranchname 
1350: 5b 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e  [[$self Rev2Bran
1360: 63 68 20 24 72 65 76 6e 72 5d 20 6e 61 6d 65 5d  ch $revnr] name]
1370: 0a 09 7d 0a 0a 09 23 20 49 66 20 74 68 69 73 20  ..}...# If this 
1380: 69 73 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 2c  is revision 1.1,
1390: 20 77 65 20 68 61 76 65 20 74 6f 20 64 65 74 65   we have to dete
13a0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68  rmine whether th
13b0: 65 0a 09 23 20 66 69 6c 65 20 73 65 65 6d 73 20  e..# file seems 
13c0: 74 6f 20 68 61 76 65 20 62 65 65 6e 20 63 72 65  to have been cre
13d0: 61 74 65 64 20 74 68 72 6f 75 67 68 20 27 63 76  ated through 'cv
13e0: 73 20 61 64 64 27 20 69 6e 73 74 65 61 64 20 6f  s add' instead o
13f0: 66 0a 09 23 20 27 63 76 73 20 69 6d 70 6f 72 74  f..# 'cvs import
1400: 27 2e 20 54 68 69 73 20 63 61 6e 20 62 65 20 64  '. This can be d
1410: 6f 6e 65 20 62 79 20 6c 6f 6f 6b 69 6e 67 20 61  one by looking a
1420: 74 20 74 68 65 20 75 6e 2d 0a 09 23 20 61 64 75  t the un-..# adu
1430: 6c 74 65 72 61 74 65 64 20 63 6f 6d 6d 69 74 20  lterated commit 
1440: 6d 65 73 73 61 67 65 2c 20 61 73 20 43 56 53 20  message, as CVS 
1450: 75 73 65 73 20 61 20 68 61 72 64 77 69 72 65 64  uses a hardwired
1460: 20 6d 61 67 69 63 0a 09 23 20 6d 65 73 73 61 67   magic..# messag
1470: 65 20 66 6f 72 20 74 68 65 20 6c 61 74 74 65 72  e for the latter
1480: 2c 20 69 2e 65 2e 20 22 49 6e 69 74 69 61 6c 20  , i.e. "Initial 
1490: 72 65 76 69 73 69 6f 6e 5c 6e 22 2c 20 6e 6f 0a  revision\n", no.
14a0: 09 23 20 70 65 72 69 6f 64 2e 20 20 28 54 68 69  .# period.  (Thi
14b0: 73 20 66 61 63 74 20 61 6c 73 6f 20 68 65 6c 70  s fact also help
14c0: 73 20 75 73 20 77 68 65 6e 20 74 68 65 20 74 69  s us when the ti
14d0: 6d 65 20 63 6f 6d 65 73 20 74 6f 0a 09 23 20 64  me comes to..# d
14e0: 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
14f0: 20 74 68 69 73 20 66 69 6c 65 20 6d 69 67 68 74   this file might
1500: 20 68 61 76 65 20 68 61 64 20 61 20 64 65 66 61   have had a defa
1510: 75 6c 74 20 62 72 61 6e 63 68 0a 09 23 20 69 6e  ult branch..# in
1520: 20 74 68 65 20 70 61 73 74 2e 29 0a 0a 09 69 66   the past.)...if
1530: 20 7b 24 72 65 76 6e 72 20 65 71 20 22 22 7d 20   {$revnr eq ""} 
1540: 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 69 6d 70  {..    set myimp
1550: 6f 72 74 65 64 20 5b 65 78 70 72 20 7b 24 63 6f  orted [expr {$co
1560: 6d 6d 69 74 6d 73 67 20 65 71 20 22 49 6e 69 74  mmitmsg eq "Init
1570: 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22 7d  ial revision\n"}
1580: 5d 0a 09 7d 0a 0a 09 23 20 48 65 72 65 20 77 65  ]..}...# Here we
1590: 20 61 6c 73 6f 20 6b 65 65 70 20 74 72 61 63 6b   also keep track
15a0: 20 6f 66 20 74 68 65 20 6f 72 64 65 72 20 69 6e   of the order in
15b0: 20 77 68 69 63 68 20 74 68 65 20 72 65 76 69 73   which the revis
15c0: 69 6f 6e 73 0a 09 23 20 77 65 72 65 20 61 64 64  ions..# were add
15d0: 65 64 20 74 6f 20 74 68 65 20 66 69 6c 65 2e 0a  ed to the file..
15e0: 0a 09 6c 61 70 70 65 6e 64 20 6d 79 72 65 76 69  ..lappend myrevi
15f0: 73 69 6f 6e 73 20 24 72 65 76 0a 09 72 65 74 75  sions $rev..retu
1600: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
1610: 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b 7d 0a  thod done {} {}.
1620: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
1630: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
1640: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
1650: 20 23 23 20 53 74 61 74 65 0a 0a 20 20 20 20 76   ## State..    v
1660: 61 72 69 61 62 6c 65 20 6d 79 70 61 74 68 20 20  ariable mypath  
1670: 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23            {} ; #
1680: 20 50 61 74 68 20 6f 66 20 6f 75 72 20 72 63 73   Path of our rcs
1690: 20 61 72 63 68 69 76 65 2e 0a 20 20 20 20 76 61   archive..    va
16a0: 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 65 63 74  riable myproject
16b0: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20           {} ; # 
16c0: 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65  Reference to the
16d0: 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63 74 0a   project object.
16e0: 09 09 09 09 20 20 20 20 23 20 74 68 65 20 66 69  ....    # the fi
16f0: 6c 65 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20  le belongs to.. 
1700: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65     variable myre
1710: 76 20 2d 61 72 72 61 79 20 20 20 20 20 20 7b 7d  v -array      {}
1720: 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69 73 69   ; # Maps revisi
1730: 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74 68 65  on number to the
1740: 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63  .....    # assoc
1750: 69 61 74 65 64 20 72 65 76 69 73 69 6f 6e 20 6f  iated revision o
1760: 62 6a 65 63 74 2e 0a 20 20 20 20 76 61 72 69 61  bject..    varia
1770: 62 6c 65 20 6d 79 72 65 76 69 73 69 6f 6e 73 20  ble myrevisions 
1780: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 61 6d        {} ; # Sam
1790: 65 20 61 73 20 6d 79 72 65 76 2c 20 62 75 74 20  e as myrev, but 
17a0: 61 20 6c 69 73 74 2c 0a 09 09 09 09 20 20 20 20  a list,.....    
17b0: 23 20 67 69 76 69 6e 67 20 75 73 20 74 68 65 20  # giving us the 
17c0: 6f 72 64 65 72 20 6f 66 0a 09 09 09 09 20 20 20  order of.....   
17d0: 20 23 20 72 65 76 69 73 69 6f 6e 73 2e 0a 20 20   # revisions..  
17e0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 68 65 61    variable myhea
17f0: 64 20 20 20 20 20 20 20 20 20 20 20 20 7b 7d 20  d            {} 
1800: 3b 20 23 20 48 65 61 64 20 72 65 76 69 73 69 6f  ; # Head revisio
1810: 6e 20 28 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62  n (revision numb
1820: 65 72 29 0a 20 20 20 20 76 61 72 69 61 62 6c 65  er).    variable
1830: 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 20 20 20   myprincipal    
1840: 20 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e 63 69     {} ; # Princi
1850: 70 61 6c 20 62 72 61 6e 63 68 20 28 62 72 61 6e  pal branch (bran
1860: 63 68 20 6e 75 6d 62 65 72 29 2e 0a 09 09 09 09  ch number)......
1870: 20 20 20 20 23 20 43 6f 6e 74 72 61 72 79 20 74      # Contrary t
1880: 6f 20 74 68 65 20 6e 61 6d 65 20 74 68 69 73 20  o the name this 
1890: 69 73 20 74 68 65 0a 09 09 09 09 20 20 20 20 23  is the.....    #
18a0: 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2e   default branch.
18b0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
18c0: 64 65 70 65 6e 64 65 6e 63 69 65 73 20 20 20 20  dependencies    
18d0: 7b 7d 20 3b 20 23 20 44 69 63 74 69 6f 6e 61 72  {} ; # Dictionar
18e0: 79 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c  y parent -> chil
18f0: 64 2c 0a 09 09 09 09 20 20 20 20 23 20 72 65 63  d,.....    # rec
1900: 6f 72 64 73 20 70 72 69 6d 61 72 79 20 64 65 70  ords primary dep
1910: 65 6e 64 65 6e 63 69 65 73 2e 0a 20 20 20 20 76  endencies..    v
1920: 61 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74  ariable myimport
1930: 65 64 20 20 20 20 20 20 20 20 30 20 20 3b 20 23  ed        0  ; #
1940: 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 53   Boolean flag. S
1950: 65 74 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  et if and only i
1960: 66 0a 09 09 09 09 20 20 20 20 23 20 72 65 76 20  f.....    # rev 
1970: 31 2e 31 20 6f 66 20 74 68 65 20 66 69 6c 65 20  1.1 of the file 
1980: 73 65 65 6d 69 6e 67 6c 79 0a 09 09 09 09 20 20  seemingly.....  
1990: 20 20 23 20 77 61 73 20 69 6d 70 6f 72 74 65 64    # was imported
19a0: 20 69 6e 73 74 65 61 64 20 6f 66 20 61 64 64 65   instead of adde
19b0: 64 0a 09 09 09 09 20 20 20 20 23 20 6e 6f 72 6d  d.....    # norm
19c0: 61 6c 6c 79 2e 0a 20 20 20 20 76 61 72 69 61 62  ally..    variab
19d0: 6c 65 20 6d 79 72 6f 6f 74 20 20 20 20 20 20 20  le myroot       
19e0: 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65       {} ; # Refe
19f0: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65 76  rence to the rev
1a00: 69 73 69 6f 6e 20 6f 62 6a 65 63 74 0a 09 09 09  ision object....
1a10: 09 20 20 20 20 23 20 68 6f 6c 64 69 6e 67 20 74  .    # holding t
1a20: 68 65 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e  he root revision
1a30: 2e 20 20 49 74 73 0a 09 09 09 09 20 20 20 20 23  .  Its.....    #
1a40: 20 6e 75 6d 62 65 72 20 75 73 75 61 6c 6c 79 20   number usually 
1a50: 69 73 20 27 31 2e 31 27 2e 20 43 61 6e 20 62 65  is '1.1'. Can be
1a60: 0a 09 09 09 09 20 20 20 20 23 20 61 20 64 69 66  .....    # a dif
1a70: 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 62  ferent number, b
1a80: 65 63 61 75 73 65 20 6f 66 0a 09 09 09 09 20 20  ecause of.....  
1a90: 20 20 23 20 67 61 70 73 20 63 72 65 61 74 65 64    # gaps created
1aa0: 20 76 69 61 20 27 63 76 73 61 64 6d 69 6e 20 2d   via 'cvsadmin -
1ab0: 6f 27 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  o'..    variable
1ac0: 20 6d 79 62 72 61 6e 63 68 65 73 20 2d 61 72 72   mybranches -arr
1ad0: 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 62  ay {} ; # Maps b
1ae0: 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 74 6f 20  ranch number to 
1af0: 74 68 65 20 73 79 6d 62 6f 6c 0a 09 09 09 09 20  the symbol..... 
1b00: 20 20 20 23 20 6f 62 6a 65 63 74 20 68 61 6e 64     # object hand
1b10: 6c 69 6e 67 20 74 68 65 20 62 72 61 6e 63 68 2e  ling the branch.
1b20: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
1b30: 74 61 67 73 20 20 20 20 20 2d 61 72 72 61 79 20  tags     -array 
1b40: 7b 7d 20 3b 20 23 20 4d 61 70 73 20 72 65 76 69  {} ; # Maps revi
1b50: 73 69 6f 6e 20 6e 75 6d 62 65 72 20 74 6f 20 74  sion number to t
1b60: 68 65 20 6c 69 73 74 0a 09 09 09 09 20 20 20 20  he list.....    
1b70: 23 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a 65  # of symbol obje
1b80: 63 74 73 20 66 6f 72 20 74 68 65 20 74 61 67 73  cts for the tags
1b90: 0a 09 09 09 09 20 20 20 20 23 20 61 73 73 6f 63  .....    # assoc
1ba0: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 72  iated with the r
1bb0: 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72  evision..    var
1bc0: 69 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 73 20  iable mysymbols 
1bd0: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53          {} ; # S
1be0: 65 74 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c  et of the symbol
1bf0: 20 6e 61 6d 65 73 20 66 6f 75 6e 64 20 69 6e 0a   names found in.
1c00: 09 09 09 09 20 20 20 20 23 20 74 68 69 73 20 66  ....    # this f
1c10: 69 6c 65 2e 0a 0a 20 20 20 20 76 61 72 69 61 62  ile...    variab
1c20: 6c 65 20 6d 79 62 72 61 6e 63 68 63 6e 74 20 30  le mybranchcnt 0
1c30: 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f 72   ; # Counter for
1c40: 20 62 72 61 6e 63 68 65 73 2c 20 74 6f 20 72 65   branches, to re
1c50: 63 6f 72 64 20 74 68 65 69 72 0a 09 09 09 20 20  cord their....  
1c60: 20 20 20 23 20 6f 72 64 65 72 20 6f 66 20 64 65     # order of de
1c70: 66 69 6e 69 74 69 6f 6e 2e 20 54 68 69 73 20 61  finition. This a
1c80: 6c 73 6f 20 64 65 66 69 6e 65 73 0a 09 09 09 20  lso defines.... 
1c90: 20 20 20 20 23 20 74 68 65 69 72 20 6f 72 64 65      # their orde
1ca0: 72 20 6f 66 20 63 72 65 61 74 69 6f 6e 2c 20 77  r of creation, w
1cb0: 68 69 63 68 20 69 73 20 74 68 65 0a 09 09 09 20  hich is the.... 
1cc0: 20 20 20 20 23 20 72 65 76 65 72 73 65 20 6f 66      # reverse of
1cd0: 20 64 65 66 69 6e 69 74 69 6f 6e 2e 20 20 49 2e   definition.  I.
1ce0: 65 2e 20 61 20 73 6d 61 6c 6c 65 72 0a 09 09 09  e. a smaller....
1cf0: 20 20 20 20 20 23 20 6e 75 6d 62 65 72 20 6d 65       # number me
1d00: 61 6e 73 20 27 44 65 66 69 6e 65 64 20 65 61 72  ans 'Defined ear
1d10: 6c 69 65 72 27 2c 20 6d 65 61 6e 73 0a 09 09 09  lier', means....
1d20: 20 20 20 20 20 23 20 27 43 72 65 61 74 65 64 20       # 'Created 
1d30: 6c 61 74 65 72 27 2e 0a 0a 20 20 20 20 23 23 23  later'...    ###
1d40: 20 54 4f 44 4f 20 23 23 23 0a 20 20 20 20 23 23   TODO ###.    ##
1d50: 23 20 46 69 6c 65 20 66 6c 61 67 20 2d 20 65 78  # File flag - ex
1d60: 65 63 75 74 61 62 6c 65 2c 0a 20 20 20 20 23 23  ecutable,.    ##
1d70: 23 20 52 43 53 20 6d 6f 64 65 20 69 6e 66 6f 20  # RCS mode info 
1d80: 28 6b 62 2c 20 6b 6b 62 2c 20 2e 2e 2e 29 0a 0a  (kb, kkb, ...)..
1d90: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
1da0: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
1db0: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20  ###########.    
1dc0: 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68  ## Internal meth
1dd0: 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ods..    method 
1de0: 52 65 63 6f 72 64 42 72 61 6e 63 68 43 6f 6d 6d  RecordBranchComm
1df0: 69 74 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b  its {branches} {
1e00: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68  ..foreach branch
1e10: 72 65 76 6e 72 20 24 62 72 61 6e 63 68 65 73 20  revnr $branches 
1e20: 7b 0a 09 20 20 20 20 69 66 20 7b 5b 63 61 74 63  {..    if {[catc
1e30: 68 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68  h {...set branch
1e40: 20 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e   [$self Rev2Bran
1e50: 63 68 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d  ch $branchrevnr]
1e60: 0a 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 73 65  ..    }]} {...se
1e70: 74 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20  t branch [$self 
1e80: 41 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e  AddUnlabeledBran
1e90: 63 68 20 5b 72 65 76 20 32 62 72 61 6e 63 68 6e  ch [rev 2branchn
1ea0: 72 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 5d  r $branchrevnr]]
1eb0: 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20 23 20  ..    }...    # 
1ec0: 52 65 63 6f 72 64 20 74 68 65 20 63 6f 6d 6d 69  Record the commi
1ed0: 74 2c 20 6a 75 73 74 20 61 73 20 72 65 76 69 73  t, just as revis
1ee0: 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 0a 09  ion number for..
1ef0: 20 20 20 20 23 20 6e 6f 77 2e 20 50 72 6f 63 65      # now. Proce
1f00: 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63  sBranchDependenc
1f10: 69 65 73 20 77 69 6c 6c 20 65 78 74 65 6e 64 20  ies will extend 
1f20: 74 68 61 74 20 69 74 6f 20 61 0a 09 20 20 20 20  that ito a..    
1f30: 23 20 70 72 6f 70 65 72 20 6f 62 6a 65 63 74 20  # proper object 
1f40: 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20 20 20  reference....   
1f50: 20 24 62 72 61 6e 63 68 20 73 65 74 63 68 69 6c   $branch setchil
1f60: 64 72 65 76 6e 72 20 24 62 72 61 6e 63 68 72 65  drevnr $branchre
1f70: 76 6e 72 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  vnr..}..return. 
1f80: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
1f90: 20 52 65 76 32 42 72 61 6e 63 68 20 7b 72 65 76   Rev2Branch {rev
1fa0: 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 76 20  nr} {..if {[rev 
1fb0: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 24 72 65  istrunkrevnr $re
1fc0: 76 6e 72 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f  vnr]} {..    tro
1fd0: 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 45  uble internal "E
1fe0: 78 70 65 63 74 65 64 20 61 20 62 72 61 6e 63 68  xpected a branch
1ff0: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72   revision number
2000: 22 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79  "..}..return $my
2010: 62 72 61 6e 63 68 65 73 28 5b 72 65 76 20 32 62  branches([rev 2b
2020: 72 61 6e 63 68 6e 72 20 24 72 65 76 6e 72 5d 29  ranchnr $revnr])
2030: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
2040: 6f 64 20 41 64 64 55 6e 6c 61 62 65 6c 65 64 42  od AddUnlabeledB
2050: 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 6e 72 7d  ranch {branchnr}
2060: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 73 65 6c   {..return [$sel
2070: 66 20 41 64 64 42 72 61 6e 63 68 20 75 6e 6c 61  f AddBranch unla
2080: 62 65 6c 65 64 2d 24 62 72 61 6e 63 68 6e 72 20  beled-$branchnr 
2090: 24 62 72 61 6e 63 68 6e 72 5d 0a 20 20 20 20 7d  $branchnr].    }
20a0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64  ..    method Add
20b0: 42 72 61 6e 63 68 20 7b 6e 61 6d 65 20 62 72 61  Branch {name bra
20c0: 6e 63 68 6e 72 7d 20 7b 0a 09 69 66 20 7b 5b 69  nchnr} {..if {[i
20d0: 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 62 72 61  nfo exists mybra
20e0: 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72 29  nches($branchnr)
20f0: 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72  ]} {..    log wr
2100: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27  ite 1 file "In '
2110: 24 6d 79 70 61 74 68 27 3a 20 42 72 61 6e 63 68  $mypath': Branch
2120: 20 27 24 62 72 61 6e 63 68 6e 72 27 20 6e 61 6d   '$branchnr' nam
2130: 65 64 20 27 5b 24 6d 79 62 72 61 6e 63 68 65 73  ed '[$mybranches
2140: 28 24 62 72 61 6e 63 68 6e 72 29 20 6e 61 6d 65  ($branchnr) name
2150: 5d 27 22 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  ]'"..    log wri
2160: 74 65 20 31 20 66 69 6c 65 20 22 43 61 6e 6e 6f  te 1 file "Canno
2170: 74 20 68 61 76 65 20 73 65 63 6f 6e 64 20 6e 61  t have second na
2180: 6d 65 20 27 24 6e 61 6d 65 27 2c 20 69 67 6e 6f  me '$name', igno
2190: 72 69 6e 67 20 69 74 22 0a 09 20 20 20 20 72 65  ring it"..    re
21a0: 74 75 72 6e 0a 09 7d 0a 09 73 65 74 20 62 72 61  turn..}..set bra
21b0: 6e 63 68 20 5b 73 79 6d 20 25 41 55 54 4f 25 20  nch [sym %AUTO% 
21c0: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 6e 72  branch $branchnr
21d0: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 65 74   [$myproject get
21e0: 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 5d 0a 09  symbol $name]]..
21f0: 24 62 72 61 6e 63 68 20 73 65 74 70 6f 73 69 74  $branch setposit
2200: 69 6f 6e 20 5b 69 6e 63 72 20 6d 79 62 72 61 6e  ion [incr mybran
2210: 63 68 63 6e 74 5d 0a 09 73 65 74 20 6d 79 62 72  chcnt]..set mybr
2220: 61 6e 63 68 65 73 28 24 62 72 61 6e 63 68 6e 72  anches($branchnr
2230: 29 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75 72  ) $branch..retur
2240: 6e 20 24 62 72 61 6e 63 68 0a 20 20 20 20 7d 0a  n $branch.    }.
2250: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 54  .    method AddT
2260: 61 67 20 7b 6e 61 6d 65 20 72 65 76 6e 72 7d 20  ag {name revnr} 
2270: 7b 0a 09 73 65 74 20 74 61 67 20 5b 73 79 6d 20  {..set tag [sym 
2280: 25 41 55 54 4f 25 20 74 61 67 20 24 72 65 76 6e  %AUTO% tag $revn
2290: 72 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 67 65  r [$myproject ge
22a0: 74 73 79 6d 62 6f 6c 20 24 6e 61 6d 65 5d 5d 0a  tsymbol $name]].
22b0: 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 28  .lappend mytags(
22c0: 24 72 65 76 6e 72 29 20 24 74 61 67 0a 09 72 65  $revnr) $tag..re
22d0: 74 75 72 6e 20 24 74 61 67 0a 20 20 20 20 7d 0a  turn $tag.    }.
22e0: 0a 20 20 20 20 70 72 6f 63 20 52 65 63 6f 72 64  .    proc Record
22f0: 42 61 73 69 63 44 65 70 65 6e 64 65 6e 63 69 65  BasicDependencie
2300: 73 20 7b 72 65 76 6e 72 20 6e 65 78 74 7d 20 7b  s {revnr next} {
2310: 0a 09 23 20 48 61 6e 64 6c 65 20 74 68 65 20 72  ..# Handle the r
2320: 65 76 69 73 69 6f 6e 20 64 65 70 65 6e 64 65 6e  evision dependen
2330: 63 69 65 73 2e 20 52 65 63 6f 72 64 20 74 68 65  cies. Record the
2340: 6d 20 66 6f 72 20 6e 6f 77 2c 20 64 6f 0a 09 23  m for now, do..#
2350: 20 6e 6f 74 68 69 6e 67 20 77 69 74 68 20 74 68   nothing with th
2360: 65 6d 20 79 65 74 2e 0a 0a 09 23 20 4f 6e 20 74  em yet....# On t
2370: 68 65 20 74 72 75 6e 6b 20 74 68 65 20 27 6e 65  he trunk the 'ne
2380: 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e 74 73  xt' field points
2390: 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
23a0: 0a 09 23 20 72 65 76 69 73 69 6f 6e 2c 20 69 2e  ..# revision, i.
23b0: 65 2e 20 74 68 65 20 5f 70 61 72 65 6e 74 5f 20  e. the _parent_ 
23c0: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 6f  of the current o
23d0: 6e 65 2e 20 45 78 61 6d 70 6c 65 3a 0a 09 23 20  ne. Example:..# 
23e0: 31 2e 36 27 73 20 6e 65 78 74 20 69 73 20 31 2e  1.6's next is 1.
23f0: 35 20 28 6d 6f 64 75 6c 6f 20 63 76 73 20 61 64  5 (modulo cvs ad
2400: 6d 69 6e 20 2d 6f 29 2e 0a 0a 09 23 20 43 6f 6e  min -o)....# Con
2410: 74 72 61 72 69 6c 79 20 6f 6e 20 61 20 62 72 61  trarily on a bra
2420: 6e 63 68 20 74 68 65 20 27 6e 65 78 74 27 20 66  nch the 'next' f
2430: 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
2440: 68 65 0a 09 23 20 70 72 69 6d 61 72 79 20 5f 63  he..# primary _c
2450: 68 69 6c 64 5f 20 6f 66 20 74 68 65 20 63 75 72  hild_ of the cur
2460: 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 2e 20 41  rent revision. A
2470: 73 20 65 78 61 6d 70 6c 65 2c 0a 09 23 20 31 2e  s example,..# 1.
2480: 31 2e 33 2e 32 27 73 20 27 6e 65 78 74 27 20 77  1.3.2's 'next' w
2490: 69 6c 6c 20 62 65 20 31 2e 31 2e 33 2e 33 2e 0a  ill be 1.1.3.3..
24a0: 0a 09 23 20 54 68 65 20 27 6e 65 78 74 27 20 66  ..# The 'next' f
24b0: 69 65 6c 64 20 61 63 74 75 61 6c 6c 79 20 61 6c  ield actually al
24c0: 77 61 79 73 20 72 65 66 65 72 73 20 74 6f 20 74  ways refers to t
24d0: 68 65 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 63  he revision..# c
24e0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 64 65  ontaining the de
24f0: 6c 74 61 20 6e 65 65 64 65 64 20 74 6f 20 72 65  lta needed to re
2500: 74 72 69 65 76 65 20 74 68 61 74 20 72 65 76 69  trieve that revi
2510: 73 69 6f 6e 2e 0a 0a 09 23 20 54 68 65 20 64 65  sion....# The de
2520: 70 65 6e 64 65 6e 63 69 65 73 20 6e 65 65 64 65  pendencies neede
2530: 64 20 68 65 72 65 20 61 72 65 20 74 68 65 20 6c  d here are the l
2540: 6f 67 69 63 61 6c 20 73 74 72 75 63 74 75 72 65  ogical structure
2550: 2c 0a 09 23 20 70 61 72 65 6e 74 2f 63 68 69 6c  ,..# parent/chil
2560: 64 2c 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 69  d, and not the i
2570: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 64 65  mplementation de
2580: 70 65 6e 64 65 6e 74 20 64 65 6c 74 61 0a 09 23  pendent delta..#
2590: 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 69 66 20   pointers....if 
25a0: 7b 24 6e 65 78 74 20 65 71 20 22 22 7d 20 72 65  {$next eq ""} re
25b0: 74 75 72 6e 0a 0a 09 75 70 76 61 72 20 31 20 6d  turn...upvar 1 m
25c0: 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 6d 79  ydependencies my
25d0: 64 65 70 65 6e 64 65 6e 63 69 65 73 0a 0a 09 23  dependencies...#
25e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25f0: 20 20 20 20 20 20 20 20 20 20 70 61 72 65 6e 74            parent
2600: 20 2d 3e 20 63 68 69 6c 64 0a 09 69 66 20 7b 5b   -> child..if {[
2610: 72 65 76 20 69 73 74 72 75 6e 6b 72 65 76 6e 72  rev istrunkrevnr
2620: 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20 20   $revnr]} {..   
2630: 20 6c 61 70 70 65 6e 64 20 6d 79 64 65 70 65 6e   lappend mydepen
2640: 64 65 6e 63 69 65 73 20 24 6e 65 78 74 20 24 72  dencies $next $r
2650: 65 76 6e 72 0a 09 7d 20 65 6c 73 65 20 7b 0a 09  evnr..} else {..
2660: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 64 65      lappend myde
2670: 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65 76 6e  pendencies $revn
2680: 72 20 24 6e 65 78 74 0a 09 7d 0a 09 72 65 74 75  r $next..}..retu
2690: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  rn.    }..    pr
26a0: 6f 63 20 50 72 6f 63 65 73 73 50 72 69 6d 61 72  oc ProcessPrimar
26b0: 79 44 65 70 65 6e 64 65 6e 63 69 65 73 20 7b 7d  yDependencies {}
26c0: 20 7b 0a 09 75 70 76 61 72 20 31 20 6d 79 64 65   {..upvar 1 myde
26d0: 70 65 6e 64 65 6e 63 69 65 73 20 6d 79 64 65 70  pendencies mydep
26e0: 65 6e 64 65 6e 63 69 65 73 20 6d 79 72 65 76 20  endencies myrev 
26f0: 6d 79 72 65 76 0a 0a 09 66 6f 72 65 61 63 68 20  myrev...foreach 
2700: 7b 70 61 72 65 6e 74 72 65 76 6e 72 20 63 68 69  {parentrevnr chi
2710: 6c 64 72 65 76 6e 72 7d 20 24 6d 79 64 65 70 65  ldrevnr} $mydepe
2720: 6e 64 65 6e 63 69 65 73 20 7b 0a 09 20 20 20 20  ndencies {..    
2730: 73 65 74 20 70 61 72 65 6e 74 20 24 6d 79 72 65  set parent $myre
2740: 76 28 24 70 61 72 65 6e 74 72 65 76 6e 72 29 0a  v($parentrevnr).
2750: 09 20 20 20 20 73 65 74 20 63 68 69 6c 64 20 20  .    set child  
2760: 24 6d 79 72 65 76 28 24 63 68 69 6c 64 72 65 76  $myrev($childrev
2770: 6e 72 29 0a 09 20 20 20 20 24 70 61 72 65 6e 74  nr)..    $parent
2780: 20 73 65 74 63 68 69 6c 64 20 24 63 68 69 6c 64   setchild $child
2790: 0a 09 20 20 20 20 24 63 68 69 6c 64 20 73 65 74  ..    $child set
27a0: 70 61 72 65 6e 74 20 24 70 61 72 65 6e 74 0a 09  parent $parent..
27b0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
27c0: 0a 20 20 20 20 70 72 6f 63 20 50 72 6f 63 65 73  .    proc Proces
27d0: 73 42 72 61 6e 63 68 44 65 70 65 6e 64 65 6e 63  sBranchDependenc
27e0: 69 65 73 20 7b 7d 20 7b 0a 09 75 70 76 61 72 20  ies {} {..upvar 
27f0: 31 20 6d 79 62 72 61 6e 63 68 65 73 20 6d 79 62  1 mybranches myb
2800: 72 61 6e 63 68 65 73 20 6d 79 72 65 76 20 6d 79  ranches myrev my
2810: 72 65 76 0a 0a 09 66 6f 72 65 61 63 68 20 7b 62  rev...foreach {b
2820: 72 61 6e 63 68 6e 72 20 62 72 61 6e 63 68 7d 20  ranchnr branch} 
2830: 5b 61 72 72 61 79 20 67 65 74 20 6d 79 62 72 61  [array get mybra
2840: 6e 63 68 65 73 5d 20 7b 0a 09 20 20 20 20 73 65  nches] {..    se
2850: 74 20 72 65 76 6e 72 20 5b 24 62 72 61 6e 63 68  t revnr [$branch
2860: 20 70 61 72 65 6e 74 72 65 76 6e 72 5d 0a 0a 09   parentrevnr]...
2870: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
2880: 78 69 73 74 73 20 6d 79 72 65 76 28 24 72 65 76  xists myrev($rev
2890: 6e 72 29 5d 7d 20 7b 0a 09 09 6c 6f 67 20 77 72  nr)]} {...log wr
28a0: 69 74 65 20 31 20 66 69 6c 65 20 22 49 6e 20 27  ite 1 file "In '
28b0: 24 6d 79 70 61 74 68 27 3a 20 54 68 65 20 62 72  $mypath': The br
28c0: 61 6e 63 68 20 27 5b 24 62 72 61 6e 63 68 20 6e  anch '[$branch n
28d0: 61 6d 65 5d 27 20 72 65 66 65 72 65 6e 63 65 73  ame]' references
28e0: 22 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 31 20  "...log write 1 
28f0: 66 69 6c 65 20 22 74 68 65 20 62 6f 67 75 73 20  file "the bogus 
2900: 72 65 76 69 73 69 6f 6e 20 27 24 72 65 76 6e 72  revision '$revnr
2910: 27 20 61 6e 64 20 77 69 6c 6c 20 62 65 20 69 67  ' and will be ig
2920: 6e 6f 72 65 64 2e 22 0a 09 09 24 62 72 61 6e 63  nored."...$branc
2930: 68 20 64 65 73 74 72 6f 79 0a 09 09 75 6e 73 65  h destroy...unse
2940: 74 20 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72  t mybranches($br
2950: 61 6e 63 68 6e 72 29 0a 09 20 20 20 20 7d 20 65  anchnr)..    } e
2960: 6c 73 65 20 7b 0a 09 09 73 65 74 20 72 65 76 20  lse {...set rev 
2970: 24 6d 79 72 65 76 28 24 72 65 76 6e 72 29 0a 09  $myrev($revnr)..
2980: 09 24 72 65 76 20 61 64 64 62 72 61 6e 63 68 20  .$rev addbranch 
2990: 24 62 72 61 6e 63 68 0a 0a 09 09 23 20 49 66 20  $branch....# If 
29a0: 72 65 76 69 73 69 6f 6e 73 20 77 65 72 65 20 63  revisions were c
29b0: 6f 6d 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20  ommitted on the 
29c0: 62 72 61 6e 63 68 20 77 65 20 73 74 6f 72 65 20  branch we store 
29d0: 61 0a 09 09 23 20 72 65 66 65 72 65 6e 63 65 20  a...# reference 
29e0: 74 6f 20 74 68 65 20 62 72 61 6e 63 68 20 74 68  to the branch th
29f0: 65 72 65 2c 20 61 6e 64 20 66 75 72 74 68 65 72  ere, and further
2a00: 20 64 65 63 6c 61 72 65 0a 09 09 23 20 74 68 65   declare...# the
2a10: 20 66 69 72 73 74 20 63 68 69 6c 64 27 73 20 70   first child's p
2a20: 61 72 65 6e 74 20 74 6f 20 62 65 20 62 72 61 6e  arent to be bran
2a30: 63 68 27 73 20 70 61 72 65 6e 74 2c 20 61 6e 64  ch's parent, and
2a40: 0a 09 09 23 20 6c 69 73 74 20 74 68 69 73 20 63  ...# list this c
2a50: 68 69 6c 64 20 69 6e 20 74 68 65 20 70 61 72 65  hild in the pare
2a60: 6e 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 09  nt revision.....
2a70: 69 66 20 7b 5b 24 62 72 61 6e 63 68 20 68 61 73  if {[$branch has
2a80: 63 68 69 6c 64 5d 7d 20 7b 0a 09 09 20 20 20 20  child]} {...    
2a90: 73 65 74 20 63 68 69 6c 64 72 65 76 6e 72 20 5b  set childrevnr [
2aa0: 24 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 76  $branch childrev
2ab0: 6e 72 5d 0a 09 09 20 20 20 20 73 65 74 20 63 68  nr]...    set ch
2ac0: 69 6c 64 20 24 6d 79 72 65 76 28 24 63 68 69 6c  ild $myrev($chil
2ad0: 64 72 65 76 6e 72 29 0a 0a 09 09 20 20 20 20 24  drevnr)....    $
2ae0: 63 68 69 6c 64 20 73 65 74 70 61 72 65 6e 74 62  child setparentb
2af0: 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 09  ranch $branch...
2b00: 20 20 20 20 24 63 68 69 6c 64 20 73 65 74 70 61      $child setpa
2b10: 72 65 6e 74 20 20 20 20 20 20 20 24 72 65 76 0a  rent       $rev.
2b20: 09 09 20 20 20 20 24 72 65 76 20 61 64 64 63 68  ..    $rev addch
2b30: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 63 68 69  ildonbranch $chi
2b40: 6c 64 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d  ld...}..    }..}
2b50: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
2b60: 20 20 20 20 70 72 6f 63 20 53 6f 72 74 42 72 61      proc SortBra
2b70: 6e 63 68 65 73 20 7b 7d 20 7b 0a 09 75 70 76 61  nches {} {..upva
2b80: 72 20 31 20 6d 79 72 65 76 20 6d 79 72 65 76 0a  r 1 myrev myrev.
2b90: 0a 09 66 6f 72 65 61 63 68 20 7b 72 65 76 6e 72  ..foreach {revnr
2ba0: 20 72 65 76 7d 20 5b 61 72 72 61 79 20 67 65 74   rev} [array get
2bb0: 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20 20 20 24   myrev] {..    $
2bc0: 72 65 76 20 73 6f 72 74 62 72 61 6e 63 68 65 73  rev sortbranches
2bd0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
2be0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 50 72 6f 63  }..    proc Proc
2bf0: 65 73 73 54 61 67 44 65 70 65 6e 64 65 6e 63 69  essTagDependenci
2c00: 65 73 20 7b 7d 20 7b 0a 09 75 70 76 61 72 20 31  es {} {..upvar 1
2c10: 20 6d 79 74 61 67 73 20 6d 79 74 61 67 73 20 6d   mytags mytags m
2c20: 79 72 65 76 20 6d 79 72 65 76 0a 0a 09 66 6f 72  yrev myrev...for
2c30: 65 61 63 68 20 7b 72 65 76 6e 72 20 74 61 67 6c  each {revnr tagl
2c40: 69 73 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20  ist} [array get 
2c50: 6d 79 74 61 67 73 5d 20 7b 0a 09 20 20 20 20 69  mytags] {..    i
2c60: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
2c70: 20 6d 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d   myrev($revnr)]}
2c80: 20 7b 0a 09 09 73 65 74 20 6e 20 5b 6c 6c 65 6e   {...set n [llen
2c90: 67 74 68 20 24 74 61 67 6c 69 73 74 5d 0a 09 09  gth $taglist]...
2ca0: 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69 6c 65  log write 1 file
2cb0: 20 22 49 6e 20 27 24 6d 79 70 61 74 68 27 3a 20   "In '$mypath': 
2cc0: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 5b 6e  The following [n
2cd0: 73 70 20 24 6e 20 74 61 67 5d 20 72 65 66 65 72  sp $n tag] refer
2ce0: 65 6e 63 65 22 0a 09 09 6c 6f 67 20 77 72 69 74  ence"...log writ
2cf0: 65 20 31 20 66 69 6c 65 20 22 74 68 65 20 62 6f  e 1 file "the bo
2d00: 67 75 73 20 72 65 76 69 73 69 6f 6e 20 27 24 72  gus revision '$r
2d10: 65 76 6e 72 27 20 61 6e 64 20 77 69 6c 6c 20 62  evnr' and will b
2d20: 65 20 69 67 6e 6f 72 65 64 2e 22 0a 09 09 66 6f  e ignored."...fo
2d30: 72 65 61 63 68 20 74 61 67 20 24 74 61 67 6c 69  reach tag $tagli
2d40: 73 74 20 7b 0a 09 09 20 20 20 20 6c 6f 67 20 77  st {...    log w
2d50: 72 69 74 65 20 31 20 66 69 6c 65 20 22 20 20 20  rite 1 file "   
2d60: 20 5b 24 74 61 67 20 6e 61 6d 65 5d 22 0a 09 09   [$tag name]"...
2d70: 20 20 20 20 24 74 61 67 20 64 65 73 74 72 6f 79      $tag destroy
2d80: 0a 09 09 7d 0a 09 09 75 6e 73 65 74 20 6d 79 74  ...}...unset myt
2d90: 61 67 73 28 24 72 65 76 6e 72 29 0a 09 20 20 20  ags($revnr)..   
2da0: 20 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 20   } else {...set 
2db0: 72 65 76 20 24 6d 79 72 65 76 28 24 72 65 76 6e  rev $myrev($revn
2dc0: 72 29 0a 09 09 66 6f 72 65 61 63 68 20 74 61 67  r)...foreach tag
2dd0: 20 24 74 61 67 6c 69 73 74 20 7b 20 24 72 65 76   $taglist { $rev
2de0: 20 61 64 64 74 61 67 20 24 74 61 67 20 7d 0a 09   addtag $tag }..
2df0: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e      }..}..return
2e00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
2e10: 20 44 65 74 65 72 6d 69 6e 65 54 68 65 52 6f 6f   DetermineTheRoo
2e20: 74 52 65 76 69 73 69 6f 6e 20 7b 7d 20 7b 0a 09  tRevision {} {..
2e30: 75 70 76 61 72 20 31 20 6d 79 72 65 76 20 6d 79  upvar 1 myrev my
2e40: 72 65 76 20 6d 79 72 6f 6f 74 20 6d 79 72 6f 6f  rev myroot myroo
2e50: 74 0a 0a 09 23 20 54 68 65 20 72 6f 6f 74 20 69  t...# The root i
2e60: 73 20 74 68 65 20 6f 6e 65 20 72 65 76 69 73 69  s the one revisi
2e70: 6f 6e 20 77 68 69 63 68 20 68 61 73 20 6e 6f 20  on which has no 
2e80: 70 61 72 65 6e 74 2e 20 42 79 0a 09 23 20 63 68  parent. By..# ch
2e90: 65 63 6b 69 6e 67 20 61 6c 6c 20 72 65 76 69 73  ecking all revis
2ea0: 69 6f 6e 73 20 77 65 20 65 6e 73 75 72 65 20 74  ions we ensure t
2eb0: 68 61 74 20 77 65 20 63 61 6e 20 64 65 74 65 63  hat we can detec
2ec0: 74 20 61 6e 64 0a 09 23 20 72 65 70 6f 72 74 20  t and..# report 
2ed0: 74 68 65 20 63 61 73 65 20 6f 66 20 6d 75 6c 74  the case of mult
2ee0: 69 70 6c 65 20 72 6f 6f 74 73 2e 20 57 69 74 68  iple roots. With
2ef0: 6f 75 74 20 74 68 61 74 20 77 65 20 63 6f 75 6c  out that we coul
2f00: 64 0a 09 23 20 73 69 6d 70 6c 79 20 74 61 6b 65  d..# simply take
2f10: 20 6f 6e 65 20 72 65 76 69 73 69 6f 6e 20 61 6e   one revision an
2f20: 64 20 66 6f 6c 6c 6f 77 20 74 68 65 20 70 61 72  d follow the par
2f30: 65 6e 74 20 6c 69 6e 6b 73 20 74 6f 0a 09 23 20  ent links to..# 
2f40: 74 68 65 69 72 20 72 6f 6f 74 20 28 73 69 63 21  their root (sic!
2f50: 29 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 72 65  )....foreach {re
2f60: 76 6e 72 20 72 65 76 7d 20 5b 61 72 72 61 79 20  vnr rev} [array 
2f70: 67 65 74 20 6d 79 72 65 76 5d 20 7b 0a 09 20 20  get myrev] {..  
2f80: 20 20 69 66 20 7b 5b 24 72 65 76 20 68 61 73 70    if {[$rev hasp
2f90: 61 72 65 6e 74 5d 7d 20 63 6f 6e 74 69 6e 75 65  arent]} continue
2fa0: 0a 09 20 20 20 20 69 66 20 7b 24 6d 79 72 6f 6f  ..    if {$myroo
2fb0: 74 20 6e 65 20 22 22 7d 20 7b 20 74 72 6f 75 62  t ne ""} { troub
2fc0: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 4d 75 6c  le internal "Mul
2fd0: 74 69 70 6c 65 20 72 6f 6f 74 20 72 65 76 69 73  tiple root revis
2fe0: 69 6f 6e 73 20 66 6f 75 6e 64 22 20 7d 0a 09 20  ions found" }.. 
2ff0: 20 20 20 73 65 74 20 6d 79 72 6f 6f 74 20 24 72     set myroot $r
3000: 65 76 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  ev..}..return.  
3010: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20    }..    # # ## 
3020: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
3030: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
3040: 0a 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72  .    ## Configur
3050: 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d  ation..    pragm
3060: 61 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20  a -hastypeinfo  
3070: 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70    no  ; # no typ
3080: 65 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a  e introspection.
3090: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69      pragma -hasi
30a0: 6e 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b  nfo        no  ;
30b0: 20 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74   # no object int
30c0: 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70  rospection.    p
30d0: 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 6d 65  ragma -hastypeme
30e0: 74 68 6f 64 73 20 6e 6f 20 20 3b 20 23 20 74 79  thods no  ; # ty
30f0: 70 65 20 69 73 20 6e 6f 74 20 72 65 6c 65 76 61  pe is not releva
3100: 6e 74 2e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d  nt..    pragma -
3110: 73 69 6d 70 6c 65 64 69 73 70 61 74 63 68 20 79  simpledispatch y
3120: 65 73 20 3b 20 23 20 73 69 6d 70 6c 65 20 66 61  es ; # simple fa
3130: 73 74 20 64 69 73 70 61 74 63 68 0a 0a 20 20 20  st dispatch..   
3140: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
3150: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
3160: 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65  ########.}..name
3170: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a  space eval ::vc:
3180: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
3190: 3a 63 76 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73  :cvs {.    names
31a0: 70 61 63 65 20 65 78 70 6f 72 74 20 66 69 6c 65  pace export file
31b0: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  .    namespace e
31c0: 76 61 6c 20 66 69 6c 65 20 7b 0a 09 23 20 49 6d  val file {..# Im
31d0: 70 6f 72 74 20 6e 6f 74 20 72 65 71 75 69 72 65  port not require
31e0: 64 2c 20 61 6c 72 65 61 64 79 20 61 20 63 68 69  d, already a chi
31f0: 6c 64 20 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23  ld namespace...#
3200: 20 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72   namespace impor
3210: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  t ::vc::fossil::
3220: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c  import::cvs::fil
3230: 65 3a 3a 72 65 76 0a 09 23 20 6e 61 6d 65 73 70  e::rev..# namesp
3240: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
3250: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
3260: 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 0a  :cvs::file::sym.
3270: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
3280: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d  t ::vc::tools::m
3290: 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63  isc::*..namespac
32a0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74  e import ::vc::t
32b0: 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 20 20  ools::trouble.  
32c0: 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23    }.}..# # ## ##
32d0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
32e0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
32f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3300: 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70  ####.## Ready..p
3310: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76  ackage provide v
3320: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
3330: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 31 2e 30  t::cvs::file 1.0
3340: 0a 72 65 74 75 72 6e 0a                          .return.