Hex Artifact Content
Not logged in

Artifact a86b5d44240190335a9fc532e08f62a8af73cbec:

File tools/cvs2fossil/lib/c2f_file.tcl part of check-in [bd131addb9] - Started to flesh out the handling symbols and revisions coming in from the rcs parser. First fragments of revision object. Type methods for classification of revision numb ers. by aku on 2007-10-12 05:56:46.

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 0a 23 20 23 20 23 23  visions...# # ##
03d0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
03e0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
03f0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
0400: 23 23 23 23 23 23 23 0a 23 23 20 0a 0a 73 6e 69  #######.## ..sni
0410: 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f  t::type ::vc::fo
0420: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
0430: 73 3a 3a 66 69 6c 65 20 7b 0a 20 20 20 20 23 20  s::file {.    # 
0440: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
0450: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0460: 23 23 23 23 23 0a 20 20 20 20 23 23 20 50 75 62  #####.    ## Pub
0470: 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 63 6f 6e  lic API..    con
0480: 73 74 72 75 63 74 6f 72 20 7b 70 61 74 68 20 70  structor {path p
0490: 72 6f 6a 65 63 74 7d 20 7b 0a 09 73 65 74 20 6d  roject} {..set m
04a0: 79 70 61 74 68 20 20 20 20 24 70 61 74 68 0a 09  ypath    $path..
04b0: 73 65 74 20 6d 79 70 72 6f 6a 65 63 74 20 24 70  set myproject $p
04c0: 72 6f 6a 65 63 74 0a 09 72 65 74 75 72 6e 0a 20  roject..return. 
04d0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
04e0: 20 70 61 74 68 20 20 20 20 7b 7d 20 7b 20 72 65   path    {} { re
04f0: 74 75 72 6e 20 24 6d 79 70 61 74 68 20 7d 0a 20  turn $mypath }. 
0500: 20 20 20 6d 65 74 68 6f 64 20 70 72 6f 6a 65 63     method projec
0510: 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  t {} { return $m
0520: 79 70 72 6f 6a 65 63 74 20 7d 0a 0a 20 20 20 20  yproject }..    
0530: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
0540: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
0550: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 4d  #######.    ## M
0560: 65 74 68 6f 64 73 20 72 65 71 75 69 72 65 64 20  ethods required 
0570: 66 6f 72 20 74 68 65 20 63 6c 61 73 73 20 74 6f  for the class to
0580: 20 62 65 20 61 20 73 69 6e 6b 20 6f 66 20 74 68   be a sink of th
0590: 65 20 72 63 73 20 70 61 72 73 65 72 0a 0a 20 20  e rcs parser..  
05a0: 20 20 6d 65 74 68 6f 64 20 62 65 67 69 6e 20 20    method begin  
05b0: 20 20 20 7b 7d 20 7b 7d 0a 20 20 20 20 6d 65 74     {} {}.    met
05c0: 68 6f 64 20 64 6f 6e 65 20 20 20 20 20 20 7b 7d  hod done      {}
05d0: 20 7b 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 61   {}.    method a
05e0: 64 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 7d 0a 0a  dmindone {} {}..
05f0: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 68 65      method sethe
0600: 61 64 20 20 20 20 20 20 20 20 20 20 20 20 7b 68  ad            {h
0610: 7d 20 7b 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  } {}.    method 
0620: 73 65 74 70 72 69 6e 63 69 70 61 6c 62 72 61 6e  setprincipalbran
0630: 63 68 20 7b 62 7d 20 7b 7d 0a 0a 20 20 20 20 6d  ch {b} {}..    m
0640: 65 74 68 6f 64 20 64 65 66 74 61 67 20 20 20 20  ethod deftag    
0650: 20 7b 73 20 72 7d 20 7b 7d 0a 20 20 20 20 6d 65   {s r} {}.    me
0660: 74 68 6f 64 20 73 65 74 63 6f 6d 6d 65 6e 74 20  thod setcomment 
0670: 7b 63 7d 20 20 20 7b 7d 0a 20 20 20 20 6d 65 74  {c}   {}.    met
0680: 68 6f 64 20 73 65 74 64 65 73 63 20 20 20 20 7b  hod setdesc    {
0690: 64 7d 20 20 20 7b 7d 0a 0a 20 20 20 20 6d 65 74  d}   {}..    met
06a0: 68 6f 64 20 64 65 66 20 20 20 20 7b 72 65 76 20  hod def    {rev 
06b0: 64 61 74 65 20 61 75 74 68 6f 72 20 73 74 61 74  date author stat
06c0: 65 20 6e 65 78 74 20 62 72 61 6e 63 68 65 73 7d  e next branches}
06d0: 20 7b 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 65   {}.    method e
06e0: 78 74 65 6e 64 20 7b 72 65 76 20 63 6f 6d 6d 69  xtend {rev commi
06f0: 74 6d 73 67 20 64 65 6c 74 61 72 61 6e 67 65 7d  tmsg deltarange}
0700: 20 7b 7d 0a 0a 20 20 20 20 23 6d 65 74 68 6f 64   {}..    #method
0710: 20 62 65 67 69 6e 20 7b 7d 20 7b 70 75 74 73 20   begin {} {puts 
0720: 62 65 67 69 6e 7d 0a 20 20 20 20 23 6d 65 74 68  begin}.    #meth
0730: 6f 64 20 73 65 74 68 65 61 64 20 7b 68 7d 20 7b  od sethead {h} {
0740: 70 75 74 73 20 68 65 61 64 3d 24 68 7d 0a 20 20  puts head=$h}.  
0750: 20 20 23 6d 65 74 68 6f 64 20 73 65 74 70 72 69    #method setpri
0760: 6e 63 69 70 61 6c 62 72 61 6e 63 68 20 7b 62 7d  ncipalbranch {b}
0770: 20 7b 70 75 74 73 20 70 62 3d 24 62 7d 0a 20 20   {puts pb=$b}.  
0780: 20 20 23 6d 65 74 68 6f 64 20 64 65 66 74 61 67    #method deftag
0790: 20 7b 73 20 72 7d 20 7b 70 75 74 73 20 24 73 3d   {s r} {puts $s=
07a0: 24 72 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20  $r}.    #method 
07b0: 73 65 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d 20 7b  setcomment {c} {
07c0: 70 75 74 73 20 63 6f 6d 6d 65 6e 74 3d 24 63 7d  puts comment=$c}
07d0: 0a 20 20 20 20 23 6d 65 74 68 6f 64 20 61 64 6d  .    #method adm
07e0: 69 6e 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20  indone {} {puts 
07f0: 61 64 6d 69 6e 64 6f 6e 65 7d 0a 20 20 20 20 23  admindone}.    #
0800: 6d 65 74 68 6f 64 20 64 65 66 20 7b 72 65 76 20  method def {rev 
0810: 64 61 74 65 20 61 75 74 68 6f 72 20 73 74 61 74  date author stat
0820: 65 20 6e 65 78 74 20 62 72 61 6e 63 68 65 73 7d  e next branches}
0830: 20 7b 70 75 74 73 20 22 64 65 66 20 24 72 65 76   {puts "def $rev
0840: 20 24 64 61 74 65 20 24 61 75 74 68 6f 72 20 24   $date $author $
0850: 73 74 61 74 65 20 24 6e 65 78 74 20 24 62 72 61  state $next $bra
0860: 6e 63 68 65 73 22 7d 0a 20 20 20 20 23 6d 65 74  nches"}.    #met
0870: 68 6f 64 20 73 65 74 64 65 73 63 20 7b 64 7d 20  hod setdesc {d} 
0880: 7b 70 75 74 73 20 64 65 73 63 3d 24 64 7d 0a 20  {puts desc=$d}. 
0890: 20 20 20 23 6d 65 74 68 6f 64 20 65 78 74 65 6e     #method exten
08a0: 64 20 7b 72 65 76 20 63 6f 6d 6d 69 74 6d 73 67  d {rev commitmsg
08b0: 20 64 65 6c 74 61 72 61 6e 67 65 7d 20 7b 70 75   deltarange} {pu
08c0: 74 73 20 22 65 78 74 65 6e 64 20 24 63 6f 6d 6d  ts "extend $comm
08d0: 69 74 6d 73 67 20 24 64 65 6c 74 61 72 61 6e 67  itmsg $deltarang
08e0: 65 22 7d 0a 20 20 20 20 23 6d 65 74 68 6f 64 20  e"}.    #method 
08f0: 64 6f 6e 65 20 7b 7d 20 7b 70 75 74 73 20 64 6f  done {} {puts do
0900: 6e 65 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20  ne}..    # # ## 
0910: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
0920: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
0930: 0a 20 20 20 20 23 23 20 50 65 72 73 69 73 74 65  .    ## Persiste
0940: 6e 63 65 20 28 70 61 73 73 20 49 49 29 0a 0a 20  nce (pass II).. 
0950: 20 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73     method persis
0960: 74 20 7b 7d 20 7b 0a 20 20 20 20 7d 0a 0a 20 20  t {} {.    }..  
0970: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
0980: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0990: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
09a0: 20 49 6d 70 6c 65 6d 65 6e 74 20 74 68 65 20 73   Implement the s
09b0: 69 6e 6b 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ink..    method 
09c0: 62 65 67 69 6e 20 7b 7d 20 7b 7d 0a 20 20 20 20  begin {} {}.    
09d0: 6d 65 74 68 6f 64 20 64 6f 6e 65 20 7b 7d 20 7b  method done {} {
09e0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 61 64  }..    method ad
09f0: 6d 69 6e 64 6f 6e 65 20 7b 7d 20 7b 0a 09 23 20  mindone {} {..# 
0a00: 57 65 20 64 6f 20 6e 6f 74 68 69 6e 67 20 61 74  We do nothing at
0a10: 20 74 68 65 20 62 6f 75 6e 64 61 72 79 20 6f 66   the boundary of
0a20: 20 61 64 6d 69 6e 20 61 6e 64 20 72 65 76 69 73   admin and revis
0a30: 69 6f 6e 20 64 61 74 61 0a 20 20 20 20 7d 0a 0a  ion data.    }..
0a40: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 68 65      method sethe
0a50: 61 64 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 73 65  ad {revnr} {..se
0a60: 74 20 6d 79 68 65 61 64 20 24 72 65 76 6e 72 0a  t myhead $revnr.
0a70: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
0a80: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 70 72 69     method setpri
0a90: 6e 63 69 70 61 6c 62 72 61 6e 63 68 20 7b 62 72  ncipalbranch {br
0aa0: 61 6e 63 68 6e 72 7d 20 7b 0a 09 73 65 74 20 6d  anchnr} {..set m
0ab0: 79 70 72 69 6e 63 69 70 61 6c 20 24 62 72 61 6e  yprincipal $bran
0ac0: 63 68 6e 72 0a 09 72 65 74 75 72 6e 0a 20 20 20  chnr..return.   
0ad0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64   }..    method d
0ae0: 65 66 74 61 67 20 7b 6e 61 6d 65 20 72 65 76 6e  eftag {name revn
0af0: 72 7d 20 7b 0a 09 23 20 46 55 54 55 52 45 3a 20  r} {..# FUTURE: 
0b00: 50 65 72 66 6f 72 6d 20 73 79 6d 62 6f 6c 20 74  Perform symbol t
0b10: 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 20 68 65  ransformation he
0b20: 72 65 2e 0a 0a 09 69 66 20 7b 5b 73 74 72 75 63  re....if {[struc
0b30: 74 3a 3a 73 65 74 20 63 6f 6e 74 61 69 6e 73 20  t::set contains 
0b40: 24 6d 79 73 79 6d 62 6f 6c 73 20 24 6e 61 6d 65  $mysymbols $name
0b50: 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c  ]} {..    troubl
0b60: 65 20 66 61 74 61 6c 20 22 4d 75 6c 74 69 70 6c  e fatal "Multipl
0b70: 65 20 64 65 66 69 6e 69 74 69 6f 6e 73 20 6f 66  e definitions of
0b80: 20 74 68 65 20 73 79 6d 62 6f 6c 20 27 24 6e 61   the symbol '$na
0b90: 6d 65 27 20 69 6e 20 27 24 6d 79 70 61 74 68 27  me' in '$mypath'
0ba0: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d  "..    return..}
0bb0: 0a 0a 09 73 74 72 75 63 74 3a 3a 73 65 74 20 61  ...struct::set a
0bc0: 64 64 20 6d 79 73 79 6d 62 6f 6c 73 20 24 6e 61  dd mysymbols $na
0bd0: 6d 65 0a 0a 09 69 66 20 7b 5b 72 65 76 20 69 73  me...if {[rev is
0be0: 62 72 61 6e 63 68 72 65 76 6e 72 20 24 72 65 76  branchrevnr $rev
0bf0: 6e 72 20 2d 3e 20 62 72 61 6e 63 68 6e 72 5d 7d  nr -> branchnr]}
0c00: 20 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64   {..    $self Ad
0c10: 64 42 72 61 6e 63 68 20 24 6e 61 6d 65 20 24 62  dBranch $name $b
0c20: 72 61 6e 63 68 6e 72 0a 09 7d 20 65 6c 73 65 20  ranchnr..} else 
0c30: 7b 0a 09 20 20 20 20 24 73 65 6c 66 20 41 64 64  {..    $self Add
0c40: 54 61 67 20 24 6e 61 6d 65 20 24 72 65 76 6e 72  Tag $name $revnr
0c50: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
0c60: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65  }..    method se
0c70: 74 63 6f 6d 6d 65 6e 74 20 7b 63 7d 20 7b 23 20  tcomment {c} {# 
0c80: 69 67 6e 6f 72 65 7d 0a 20 20 20 20 6d 65 74 68  ignore}.    meth
0c90: 6f 64 20 73 65 74 64 65 73 63 20 20 20 20 7b 64  od setdesc    {d
0ca0: 7d 20 7b 23 20 69 67 6e 6f 72 65 7d 0a 0a 20 20  } {# ignore}..  
0cb0: 20 20 6d 65 74 68 6f 64 20 64 65 66 20 7b 72 65    method def {re
0cc0: 76 6e 72 20 64 61 74 65 20 61 75 74 68 6f 72 20  vnr date author 
0cd0: 73 74 61 74 65 20 6e 65 78 74 20 62 72 61 6e 63  state next branc
0ce0: 68 65 73 7d 20 7b 0a 09 24 73 65 6c 66 20 4c 6f  hes} {..$self Lo
0cf0: 6f 6b 46 6f 72 55 6e 6c 61 62 65 6c 65 64 42 72  okForUnlabeledBr
0d00: 61 6e 63 68 65 73 20 24 62 72 61 6e 63 68 65 73  anches $branches
0d10: 0a 09 24 6d 79 70 72 6f 6a 65 63 74 20 61 75 74  ..$myproject aut
0d20: 68 6f 72 20 24 61 75 74 68 6f 72 0a 0a 09 69 66  hor $author...if
0d30: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d   {[info exists m
0d40: 79 72 65 76 28 24 72 65 76 6e 72 29 5d 7d 20 7b  yrev($revnr)]} {
0d50: 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 66 61  ..    trouble fa
0d60: 74 61 6c 20 22 46 69 6c 65 20 24 6d 79 70 61 74  tal "File $mypat
0d70: 68 20 63 6f 6e 74 61 69 6e 73 20 64 75 70 6c 69  h contains dupli
0d80: 63 61 74 65 20 64 65 66 69 6e 69 74 69 6f 6e 73  cate definitions
0d90: 20 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 24 72   for revision $r
0da0: 65 76 6e 72 2e 22 0a 09 20 20 20 20 72 65 74 75  evnr."..    retu
0db0: 72 6e 0a 09 7d 0a 0a 09 73 65 74 20 6d 79 72 65  rn..}...set myre
0dc0: 76 28 24 72 65 76 6e 72 29 20 5b 72 65 76 20 25  v($revnr) [rev %
0dd0: 41 55 54 4f 25 20 24 64 61 74 65 20 24 61 75 74  AUTO% $date $aut
0de0: 68 6f 72 20 24 73 74 61 74 65 20 24 73 65 6c 66  hor $state $self
0df0: 5d 0a 0a 09 52 65 63 6f 72 64 42 61 73 69 63 44  ]...RecordBasicD
0e00: 65 70 65 6e 64 65 6e 63 69 65 73 20 24 72 65 76  ependencies $rev
0e10: 6e 72 20 24 6e 65 78 74 0a 09 72 65 74 75 72 6e  nr $next..return
0e20: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
0e30: 6f 64 20 65 78 74 65 6e 64 20 7b 72 65 76 6e 72  od extend {revnr
0e40: 20 63 6f 6d 6d 69 74 6d 73 67 20 64 65 6c 74 61   commitmsg delta
0e50: 72 61 6e 67 65 7d 20 7b 0a 09 73 65 74 20 63 6d  range} {..set cm
0e60: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 24 63   [string trim $c
0e70: 6f 6d 6d 69 74 6d 73 67 5d 0a 09 24 6d 79 70 72  ommitmsg]..$mypr
0e80: 6f 6a 65 63 74 20 63 6d 65 73 73 61 67 65 20 24  oject cmessage $
0e90: 63 6d 0a 0a 09 73 65 74 20 72 65 76 20 24 6d 79  cm...set rev $my
0ea0: 72 65 76 28 24 72 65 76 6e 72 29 0a 0a 09 69 66  rev($revnr)...if
0eb0: 20 7b 5b 24 72 65 76 20 68 61 73 63 6f 6d 6d 69   {[$rev hascommi
0ec0: 74 6d 73 67 5d 7d 20 7b 0a 09 20 20 20 20 23 20  tmsg]} {..    # 
0ed0: 41 70 70 61 72 65 6e 74 6c 79 20 72 65 70 6f 73  Apparently repos
0ee0: 69 74 6f 72 69 65 73 20 65 78 69 73 74 20 69 6e  itories exist in
0ef0: 20 77 68 69 63 68 20 74 68 65 20 64 65 6c 74 61   which the delta
0f00: 20 64 61 74 61 0a 09 20 20 20 20 23 20 66 6f 72   data..    # for
0f10: 20 72 65 76 69 73 69 6f 6e 20 31 2e 31 20 69 73   revision 1.1 is
0f20: 20 70 72 6f 76 69 64 65 64 20 73 65 76 65 72 61   provided severa
0f30: 6c 20 74 69 6d 65 73 2c 20 61 74 20 6c 65 61 73  l times, at leas
0f40: 74 0a 09 20 20 20 20 23 20 74 77 69 63 65 2e 20  t..    # twice. 
0f50: 54 68 65 20 61 63 74 75 61 6c 20 63 61 75 73 65  The actual cause
0f60: 20 6f 66 20 74 68 69 73 20 64 75 70 6c 69 63 61   of this duplica
0f70: 74 69 6f 6e 20 69 73 20 6e 6f 74 0a 09 20 20 20  tion is not..   
0f80: 20 23 20 6b 6e 6f 77 6e 2e 20 53 70 65 63 75 6c   # known. Specul
0f90: 61 74 69 6f 6e 20 63 65 6e 74 65 72 73 20 6f 6e  ation centers on
0fa0: 20 52 43 53 2f 43 56 53 20 62 75 67 73 2c 20 6f   RCS/CVS bugs, o
0fb0: 72 20 66 72 6f 6d 0a 09 20 20 20 20 23 20 6d 61  r from..    # ma
0fc0: 6e 75 61 6c 20 65 64 69 74 73 20 6f 66 20 74 68  nual edits of th
0fd0: 65 20 72 65 70 6f 73 69 74 6f 72 79 20 77 68 69  e repository whi
0fe0: 63 68 20 62 6f 72 6b 65 64 20 74 68 65 0a 09 20  ch borked the.. 
0ff0: 20 20 20 23 20 69 6e 74 65 72 6e 61 6c 73 2e 20     # internals. 
1000: 57 68 61 74 65 76 65 72 20 74 68 65 20 63 61 75  Whatever the cau
1010: 73 65 2c 20 74 65 73 74 69 6e 67 20 73 68 6f 77  se, testing show
1020: 65 64 20 74 68 61 74 20 62 6f 74 68 0a 09 20 20  ed that both..  
1030: 20 20 23 20 63 76 73 20 61 6e 64 20 72 63 73 20    # cvs and rcs 
1040: 75 73 65 20 74 68 65 20 66 69 72 73 74 20 64 65  use the first de
1050: 66 69 6e 69 74 69 6f 6e 20 77 68 65 6e 20 70 65  finition when pe
1060: 72 66 6f 72 6d 69 6e 67 20 61 0a 09 20 20 20 20  rforming a..    
1070: 23 20 63 68 65 63 6b 6f 75 74 2c 20 61 6e 64 20  # checkout, and 
1080: 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 69 72 20  we follow their 
1090: 6c 65 61 64 2e 20 53 69 64 65 20 6e 6f 74 65 73  lead. Side notes
10a0: 3a 20 27 63 76 73 0a 09 20 20 20 20 23 20 6c 6f  : 'cvs..    # lo
10b0: 67 27 20 66 61 69 6c 73 20 6f 6e 20 73 75 63 68  g' fails on such
10c0: 20 61 20 66 69 6c 65 2c 20 61 6e 64 20 27 63 76   a file, and 'cv
10d0: 73 20 72 6c 6f 67 27 20 70 72 69 6e 74 73 20 74  s rlog' prints t
10e0: 68 65 20 6c 6f 67 0a 09 20 20 20 20 23 20 6d 65  he log..    # me
10f0: 73 73 61 67 65 20 66 72 6f 6d 20 74 68 65 20 66  ssage from the f
1100: 69 72 73 74 20 64 65 6c 74 61 2c 20 69 67 6e 6f  irst delta, igno
1110: 72 69 6e 67 20 74 68 65 20 73 65 63 6f 6e 64 2e  ring the second.
1120: 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  ...    log write
1130: 20 31 20 66 69 6c 65 20 22 49 6e 20 66 69 6c 65   1 file "In file
1140: 20 24 6d 79 70 61 74 68 20 3a 20 44 75 70 6c 69   $mypath : Dupli
1150: 63 61 74 65 20 64 65 6c 74 61 20 64 61 74 61 20  cate delta data 
1160: 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 24 72 65  for revision $re
1170: 76 6e 72 22 0a 09 20 20 20 20 6c 6f 67 20 77 72  vnr"..    log wr
1180: 69 74 65 20 31 20 66 69 6c 65 20 22 49 67 6e 6f  ite 1 file "Igno
1190: 72 69 6e 67 20 74 68 65 20 64 75 70 6c 69 63 61  ring the duplica
11a0: 74 65 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a  te"..    return.
11b0: 09 7d 0a 0a 09 23 20 45 78 74 65 6e 64 20 74 68  .}...# Extend th
11c0: 65 20 72 65 76 69 73 69 6f 6e 20 77 69 74 68 20  e revision with 
11d0: 74 68 65 20 6e 65 77 20 69 6e 66 6f 72 6d 61 74  the new informat
11e0: 69 6f 6e 2e 20 54 68 65 20 72 65 76 69 73 69 6f  ion. The revisio
11f0: 6e 0a 09 23 20 6f 62 6a 65 63 74 20 75 73 65 73  n..# object uses
1200: 20 74 68 69 73 20 74 6f 20 63 6f 6d 70 6c 65 74   this to complet
1210: 65 20 69 74 73 20 6d 65 74 61 20 64 61 74 61 20  e its meta data 
1220: 73 65 74 2e 0a 0a 09 24 72 65 76 20 73 65 74 63  set....$rev setc
1230: 6f 6d 6d 69 74 6d 73 67 20 24 63 6d 0a 09 24 72  ommitmsg $cm..$r
1240: 65 76 20 73 65 74 74 65 78 74 20 20 24 64 65 6c  ev settext  $del
1250: 74 61 72 61 6e 67 65 0a 0a 09 23 20 49 66 20 74  tarange...# If t
1260: 68 69 73 20 69 73 20 72 65 76 69 73 69 6f 6e 20  his is revision 
1270: 31 2e 31 2c 20 77 65 20 68 61 76 65 20 74 6f 20  1.1, we have to 
1280: 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  determine whethe
1290: 72 20 74 68 65 0a 09 23 20 66 69 6c 65 20 73 65  r the..# file se
12a0: 65 6d 73 20 74 6f 20 68 61 76 65 20 62 65 65 6e  ems to have been
12b0: 20 63 72 65 61 74 65 64 20 74 68 72 6f 75 67 68   created through
12c0: 20 27 63 76 73 20 61 64 64 27 20 69 6e 73 74 65   'cvs add' inste
12d0: 61 64 20 6f 66 0a 09 23 20 27 63 76 73 20 69 6d  ad of..# 'cvs im
12e0: 70 6f 72 74 27 2e 20 54 68 69 73 20 63 61 6e 20  port'. This can 
12f0: 62 65 20 64 6f 6e 65 20 62 79 20 6c 6f 6f 6b 69  be done by looki
1300: 6e 67 20 61 74 20 74 68 65 20 75 6e 2d 0a 09 23  ng at the un-..#
1310: 20 61 64 75 6c 74 65 72 61 74 65 64 20 63 6f 6d   adulterated com
1320: 6d 69 74 20 6d 65 73 73 61 67 65 2c 20 61 73 20  mit message, as 
1330: 43 56 53 20 75 73 65 73 20 61 20 68 61 72 64 77  CVS uses a hardw
1340: 69 72 65 64 20 6d 61 67 69 63 0a 09 23 20 6d 65  ired magic..# me
1350: 73 73 61 67 65 20 66 6f 72 20 74 68 65 20 6c 61  ssage for the la
1360: 74 74 65 72 2c 20 69 2e 65 2e 20 22 49 6e 69 74  tter, i.e. "Init
1370: 69 61 6c 20 72 65 76 69 73 69 6f 6e 5c 6e 22 2c  ial revision\n",
1380: 20 6e 6f 0a 09 23 20 70 65 72 69 6f 64 2e 20 20   no..# period.  
1390: 28 54 68 69 73 20 66 61 63 74 20 61 6c 73 6f 20  (This fact also 
13a0: 68 65 6c 70 73 20 75 73 20 77 68 65 6e 20 74 68  helps us when th
13b0: 65 20 74 69 6d 65 20 63 6f 6d 65 73 20 74 6f 0a  e time comes to.
13c0: 09 23 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65  .# determine whe
13d0: 74 68 65 72 20 74 68 69 73 20 66 69 6c 65 20 6d  ther this file m
13e0: 69 67 68 74 20 68 61 76 65 20 68 61 64 20 61 20  ight have had a 
13f0: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 0a 09  default branch..
1400: 23 20 69 6e 20 74 68 65 20 70 61 73 74 2e 29 0a  # in the past.).
1410: 0a 09 69 66 20 7b 24 72 65 76 6e 72 20 65 71 20  ..if {$revnr eq 
1420: 22 22 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d  ""} {..    set m
1430: 79 69 6d 70 6f 72 74 65 64 20 5b 65 78 70 72 20  yimported [expr 
1440: 7b 24 63 6f 6d 6d 69 74 6d 73 67 20 65 71 20 22  {$commitmsg eq "
1450: 49 6e 69 74 69 61 6c 20 72 65 76 69 73 69 6f 6e  Initial revision
1460: 5c 6e 22 7d 5d 0a 09 7d 0a 0a 09 23 20 48 65 72  \n"}]..}...# Her
1470: 65 20 77 65 20 61 6c 73 6f 20 6b 65 65 70 20 74  e we also keep t
1480: 72 61 63 6b 20 6f 66 20 74 68 65 20 6f 72 64 65  rack of the orde
1490: 72 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 72  r in which the r
14a0: 65 76 69 73 69 6f 6e 73 0a 09 23 20 77 65 72 65  evisions..# were
14b0: 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 66 69   added to the fi
14c0: 6c 65 2e 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79  le....lappend my
14d0: 72 65 76 69 73 69 6f 6e 73 20 24 72 65 76 0a 09  revisions $rev..
14e0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
14f0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
1500: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
1510: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
1520: 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69   State..    vari
1530: 61 62 6c 65 20 6d 79 70 61 74 68 20 20 20 20 20  able mypath     
1540: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 61         {} ; # Pa
1550: 74 68 20 6f 66 20 72 63 73 20 61 72 63 68 69 76  th of rcs archiv
1560: 65 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  e.    variable m
1570: 79 70 72 6f 6a 65 63 74 20 20 20 20 20 20 20 20  yproject        
1580: 20 7b 7d 20 3b 20 23 20 50 72 6f 6a 65 63 74 20   {} ; # Project 
1590: 6f 62 6a 65 63 74 20 74 68 65 20 66 69 6c 65 20  object the file 
15a0: 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20  belongs to..    
15b0: 76 61 72 69 61 62 6c 65 20 6d 79 72 65 76 20 2d  variable myrev -
15c0: 61 72 72 61 79 20 20 20 20 20 20 7b 7d 20 3b 20  array      {} ; 
15d0: 23 20 41 6c 6c 20 72 65 76 69 73 69 6f 6e 73 20  # All revisions 
15e0: 61 6e 64 20 74 68 65 69 72 20 63 6f 6e 6e 65 63  and their connec
15f0: 74 69 6f 6e 73 2e 0a 20 20 20 20 76 61 72 69 61  tions..    varia
1600: 62 6c 65 20 6d 79 72 65 76 69 73 69 6f 6e 73 20  ble myrevisions 
1610: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 61 6d        {} ; # Sam
1620: 65 20 61 73 20 6d 79 72 65 76 2c 20 62 75 74 20  e as myrev, but 
1630: 61 20 6c 69 73 74 2c 20 67 69 76 69 6e 67 20 75  a list, giving u
1640: 73 20 74 68 65 20 6f 72 64 65 72 0a 20 20 20 20  s the order.    
1650: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
1660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
1670: 23 20 6f 66 20 72 65 76 69 73 69 6f 6e 73 2e 0a  # of revisions..
1680: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 68      variable myh
1690: 65 61 64 20 20 20 20 20 20 20 20 20 20 20 20 7b  ead            {
16a0: 7d 20 3b 20 23 20 48 65 61 64 20 72 65 76 69 73  } ; # Head revis
16b0: 69 6f 6e 20 28 72 65 76 69 73 69 6f 6e 20 6e 75  ion (revision nu
16c0: 6d 62 65 72 29 0a 20 20 20 20 76 61 72 69 61 62  mber).    variab
16d0: 6c 65 20 6d 79 70 72 69 6e 63 69 70 61 6c 20 20  le myprincipal  
16e0: 20 20 20 20 20 7b 7d 20 3b 20 23 20 50 72 69 6e       {} ; # Prin
16f0: 63 69 70 61 6c 20 62 72 61 6e 63 68 20 28 62 72  cipal branch (br
1700: 61 6e 63 68 20 6e 75 6d 62 65 72 29 0a 20 20 20  anch number).   
1710: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
1720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b                 ;
1730: 20 23 20 43 6f 6e 74 72 61 72 79 20 74 6f 20 74   # Contrary to t
1740: 68 65 20 6e 61 6d 65 20 74 68 69 73 20 69 73 20  he name this is 
1750: 74 68 65 20 64 65 66 61 75 6c 74 20 62 72 61 6e  the default bran
1760: 63 68 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  ch..    variable
1770: 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20   mydependencies 
1780: 20 20 20 7b 7d 20 3b 20 23 20 44 69 63 74 69 6f     {} ; # Dictio
1790: 6e 61 72 79 20 70 61 72 65 6e 74 20 2d 3e 20 63  nary parent -> c
17a0: 68 69 6c 64 2c 20 64 65 70 65 6e 64 65 6e 63 79  hild, dependency
17b0: 20 72 65 63 6f 72 64 65 72 2e 0a 20 20 20 20 76   recorder..    v
17c0: 61 72 69 61 62 6c 65 20 6d 79 69 6d 70 6f 72 74  ariable myimport
17d0: 65 64 20 20 20 20 20 20 20 20 30 20 20 3b 20 23  ed        0  ; #
17e0: 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 53   Boolean flag. S
17f0: 65 74 20 69 66 66 20 72 65 76 20 31 2e 31 20 6f  et iff rev 1.1 o
1800: 66 20 74 68 65 20 66 69 6c 65 20 73 65 65 6d 69  f the file seemi
1810: 6e 67 6c 79 0a 20 20 20 20 23 20 20 20 20 20 20  ngly.    #      
1820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1830: 20 20 20 20 20 20 20 3b 20 23 20 77 61 73 20 69         ; # was i
1840: 6d 70 6f 72 74 65 64 20 69 6e 73 74 65 61 64 20  mported instead 
1850: 6f 66 20 61 64 64 65 64 20 6e 6f 72 6d 61 6c 6c  of added normall
1860: 79 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  y..    variable 
1870: 6d 79 72 6f 6f 74 20 20 20 20 20 20 20 20 20 20  myroot          
1880: 20 20 7b 7d 20 3b 20 23 20 52 65 76 69 73 69 6f    {} ; # Revisio
1890: 6e 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  n number of the 
18a0: 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 2e 20 55  root revision. U
18b0: 73 75 61 6c 6c 79 20 27 31 2e 31 27 2e 0a 20 20  sually '1.1'..  
18c0: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18e0: 3b 20 23 20 43 61 6e 20 62 65 20 61 20 64 69 66  ; # Can be a dif
18f0: 66 65 72 65 6e 74 20 6e 75 6d 62 65 72 2c 20 62  ferent number, b
1900: 65 63 61 75 73 65 20 6f 66 20 27 63 76 73 61 64  ecause of 'cvsad
1910: 6d 69 6e 20 2d 6f 27 2e 0a 20 20 20 20 76 61 72  min -o'..    var
1920: 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 65 73  iable mybranches
1930: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 62   -array {} ; # b
1940: 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 20 20 2d  ranch number   -
1950: 3e 20 73 79 6d 62 6f 6c 20 6f 62 6a 65 63 74 20  > symbol object 
1960: 68 61 6e 64 6c 69 6e 67 20 74 68 65 20 62 72 61  handling the bra
1970: 6e 63 68 0a 20 20 20 20 76 61 72 69 61 62 6c 65  nch.    variable
1980: 20 6d 79 74 61 67 73 20 20 20 20 20 2d 61 72 72   mytags     -arr
1990: 61 79 20 7b 7d 20 3b 20 23 20 72 65 76 69 73 69  ay {} ; # revisi
19a0: 6f 6e 20 6e 75 6d 62 65 72 20 2d 3e 20 6c 69 73  on number -> lis
19b0: 74 20 6f 66 20 73 79 6d 62 6f 6c 20 6f 62 6a 65  t of symbol obje
19c0: 63 74 20 66 6f 72 20 74 68 65 20 74 61 67 73 0a  ct for the tags.
19d0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
19e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19f0: 20 20 3b 20 23 20 61 73 73 6f 63 69 61 74 65 64    ; # associated
1a00: 20 77 69 74 68 20 74 68 65 20 72 65 76 69 73 69   with the revisi
1a10: 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  on..    variable
1a20: 20 6d 79 73 79 6d 62 6f 6c 73 20 20 20 20 20 20   mysymbols      
1a30: 20 20 20 7b 7d 20 3b 20 23 20 53 65 74 20 6f 66     {} ; # Set of
1a40: 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20 66 6f   symbol names fo
1a50: 75 6e 64 20 69 6e 20 74 68 69 73 20 66 69 6c 65  und in this file
1a60: 2e 0a 0a 20 20 20 20 23 23 23 20 54 4f 44 4f 20  ...    ### TODO 
1a70: 23 23 23 0a 20 20 20 20 23 23 23 20 46 69 6c 65  ###.    ### File
1a80: 20 66 6c 61 67 20 2d 20 65 78 65 63 75 74 61 62   flag - executab
1a90: 6c 65 2c 0a 20 20 20 20 23 23 23 20 52 43 53 20  le,.    ### RCS 
1aa0: 6d 6f 64 65 20 69 6e 66 6f 20 28 6b 62 2c 20 6b  mode info (kb, k
1ab0: 6b 62 2c 20 2e 2e 2e 29 0a 0a 20 20 20 20 23 20  kb, ...)..    # 
1ac0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
1ad0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
1ae0: 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74  #####.    ## Int
1af0: 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20  ernal methods.. 
1b00: 20 20 20 6d 65 74 68 6f 64 20 4c 6f 6f 6b 46 6f     method LookFo
1b10: 72 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63 68  rUnlabeledBranch
1b20: 65 73 20 7b 62 72 61 6e 63 68 65 73 7d 20 7b 0a  es {branches} {.
1b30: 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 72  .foreach branchr
1b40: 65 76 6e 72 20 24 62 72 61 6e 63 68 65 73 20 7b  evnr $branches {
1b50: 0a 09 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68  ..    if {[catch
1b60: 20 7b 0a 09 09 73 65 74 20 62 72 61 6e 63 68 20   {...set branch 
1b70: 5b 24 73 65 6c 66 20 52 65 76 32 42 72 61 6e 63  [$self Rev2Branc
1b80: 68 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 0a  h $branchrevnr].
1b90: 09 20 20 20 20 7d 5d 7d 20 7b 0a 09 09 73 65 74  .    }]} {...set
1ba0: 20 62 72 61 6e 63 68 20 5b 24 73 65 6c 66 20 41   branch [$self A
1bb0: 64 64 55 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63  ddUnlabeledBranc
1bc0: 68 20 5b 72 65 76 20 32 62 72 61 6e 63 68 6e 72  h [rev 2branchnr
1bd0: 20 24 62 72 61 6e 63 68 72 65 76 6e 72 5d 5d 0a   $branchrevnr]].
1be0: 09 20 20 20 20 7d 0a 09 20 20 20 20 23 20 54 4f  .    }..    # TO
1bf0: 44 4f 20 24 62 72 61 6e 63 68 20 63 68 69 6c 64  DO $branch child
1c00: 20 24 62 72 61 6e 63 68 72 65 76 6e 72 20 2d 20   $branchrevnr - 
1c10: 77 68 65 6e 20 61 64 64 2d 75 6e 6c 61 62 65 6c  when add-unlabel
1c20: 65 64 20 68 61 73 20 73 65 6e 73 69 62 6c 65 20  ed has sensible 
1c30: 72 65 74 75 72 6e 20 76 61 6c 75 65 0a 09 7d 0a  return value..}.
1c40: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1c50: 20 20 20 6d 65 74 68 6f 64 20 52 65 76 32 42 72     method Rev2Br
1c60: 61 6e 63 68 20 7b 72 65 76 6e 72 7d 20 7b 0a 09  anch {revnr} {..
1c70: 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75 6e 6b  if {[rev istrunk
1c80: 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b  revnr $revnr]} {
1c90: 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 69 6e  ..    trouble in
1ca0: 74 65 72 6e 61 6c 20 22 45 78 70 65 63 74 65 64  ternal "Expected
1cb0: 20 61 20 62 72 61 6e 63 68 20 72 65 76 69 73 69   a branch revisi
1cc0: 6f 6e 20 6e 75 6d 62 65 72 22 0a 09 7d 0a 09 72  on number"..}..r
1cd0: 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 65  eturn $mybranche
1ce0: 73 28 5b 72 65 76 20 32 62 72 61 6e 63 68 6e 72  s([rev 2branchnr
1cf0: 20 24 72 65 76 6e 72 5d 29 0a 20 20 20 20 7d 0a   $revnr]).    }.
1d00: 0a 20 20 20 20 6d 65 74 68 6f 64 20 41 64 64 55  .    method AddU
1d10: 6e 6c 61 62 65 6c 65 64 42 72 61 6e 63 68 20 7b  nlabeledBranch {
1d20: 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 72 65 74  branchnr} {..ret
1d30: 75 72 6e 20 5b 24 73 65 6c 66 20 41 64 64 42 72  urn [$self AddBr
1d40: 61 6e 63 68 20 75 6e 6c 61 62 65 6c 65 64 2d 24  anch unlabeled-$
1d50: 62 72 61 6e 63 68 6e 72 20 24 62 72 61 6e 63 68  branchnr $branch
1d60: 6e 72 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  nr].    }..    m
1d70: 65 74 68 6f 64 20 41 64 64 42 72 61 6e 63 68 20  ethod AddBranch 
1d80: 7b 6e 61 6d 65 20 62 72 61 6e 63 68 6e 72 7d 20  {name branchnr} 
1d90: 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  {..if {[info exi
1da0: 73 74 73 20 6d 79 62 72 61 6e 63 68 65 73 28 24  sts mybranches($
1db0: 62 72 61 6e 63 68 6e 72 29 5d 7d 20 7b 0a 09 20  branchnr)]} {.. 
1dc0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66     log write 1 f
1dd0: 69 6c 65 20 22 49 6e 20 27 24 6d 79 70 61 74 68  ile "In '$mypath
1de0: 27 3a 20 42 72 61 6e 63 68 20 27 24 62 72 61 6e  ': Branch '$bran
1df0: 63 68 6e 72 27 20 6e 61 6d 65 64 20 27 5b 24 6d  chnr' named '[$m
1e00: 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e 63  ybranches($branc
1e10: 68 6e 72 29 20 6e 61 6d 65 5d 27 22 0a 09 20 20  hnr) name]'"..  
1e20: 20 20 6c 6f 67 20 77 72 69 74 65 20 31 20 66 69    log write 1 fi
1e30: 6c 65 20 22 43 61 6e 6e 6f 74 20 68 61 76 65 20  le "Cannot have 
1e40: 73 65 63 6f 6e 64 20 6e 61 6d 65 20 27 24 6e 61  second name '$na
1e50: 6d 65 27 2c 20 69 67 6e 6f 72 69 6e 67 20 69 74  me', ignoring it
1e60: 22 0a 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d  "..    return..}
1e70: 0a 09 73 65 74 20 73 79 6d 20 22 22 0a 09 73 65  ..set sym ""..se
1e80: 74 20 62 72 61 6e 63 68 20 22 22 0a 09 23 54 4f  t branch ""..#TO
1e90: 44 4f 20 73 65 74 20 73 79 6d 20 5b 24 6d 79 70  DO set sym [$myp
1ea0: 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c  roject getsymbol
1eb0: 20 24 6e 61 6d 65 20 5d 0a 09 23 54 4f 44 4f 20   $name ]..#TODO 
1ec0: 73 65 74 20 74 61 67 20 5b 73 79 6d 20 25 41 55  set tag [sym %AU
1ed0: 54 4f 25 20 62 72 61 6e 63 68 20 24 73 79 6d 20  TO% branch $sym 
1ee0: 24 62 72 61 6e 63 68 6e 72 5d 0a 09 73 65 74 20  $branchnr]..set 
1ef0: 6d 79 62 72 61 6e 63 68 65 73 28 24 62 72 61 6e  mybranches($bran
1f00: 63 68 6e 72 29 20 24 62 72 61 6e 63 68 0a 09 72  chnr) $branch..r
1f10: 65 74 75 72 6e 20 24 62 72 61 6e 63 68 0a 20 20  eturn $branch.  
1f20: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
1f30: 41 64 64 54 61 67 20 7b 6e 61 6d 65 20 72 65 76  AddTag {name rev
1f40: 6e 72 7d 20 7b 0a 09 73 65 74 20 73 79 6d 20 22  nr} {..set sym "
1f50: 22 0a 09 73 65 74 20 74 61 67 20 22 22 0a 09 23  "..set tag ""..#
1f60: 54 4f 44 4f 20 73 65 74 20 73 79 6d 20 5b 24 6d  TODO set sym [$m
1f70: 79 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62  yproject getsymb
1f80: 6f 6c 20 24 6e 61 6d 65 20 5d 0a 09 23 54 4f 44  ol $name ]..#TOD
1f90: 4f 20 73 65 74 20 74 61 67 20 5b 73 79 6d 20 25  O set tag [sym %
1fa0: 41 55 54 4f 25 20 74 61 67 20 24 73 79 6d 20 24  AUTO% tag $sym $
1fb0: 72 65 76 6e 72 5d 0a 09 6c 61 70 70 65 6e 64 20  revnr]..lappend 
1fc0: 6d 79 74 61 67 73 28 24 72 65 76 6e 72 29 20 24  mytags($revnr) $
1fd0: 74 61 67 0a 09 72 65 74 75 72 6e 20 24 74 61 67  tag..return $tag
1fe0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
1ff0: 20 52 65 63 6f 72 64 42 61 73 69 63 44 65 70 65   RecordBasicDepe
2000: 6e 64 65 6e 63 69 65 73 20 7b 72 65 76 6e 72 20  ndencies {revnr 
2010: 6e 65 78 74 7d 20 7b 0a 09 23 20 48 61 6e 64 6c  next} {..# Handl
2020: 65 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 64  e the revision d
2030: 65 70 65 6e 64 65 6e 63 69 65 73 2e 20 52 65 63  ependencies. Rec
2040: 6f 72 64 20 74 68 65 6d 20 66 6f 72 20 6e 6f 77  ord them for now
2050: 2c 20 64 6f 0a 09 23 20 6e 6f 74 68 69 6e 67 20  , do..# nothing 
2060: 77 69 74 68 20 74 68 65 6d 20 79 65 74 2e 0a 0a  with them yet...
2070: 09 23 20 4f 6e 20 74 68 65 20 74 72 75 6e 6b 20  .# On the trunk 
2080: 74 68 65 20 27 6e 65 78 74 27 20 66 69 65 6c 64  the 'next' field
2090: 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70   points to the p
20a0: 72 65 76 69 6f 75 73 0a 09 23 20 72 65 76 69 73  revious..# revis
20b0: 69 6f 6e 2c 20 69 2e 65 2e 20 74 68 65 20 5f 70  ion, i.e. the _p
20c0: 61 72 65 6e 74 5f 20 6f 66 20 74 68 65 20 63 75  arent_ of the cu
20d0: 72 72 65 6e 74 20 6f 6e 65 2e 20 45 78 61 6d 70  rrent one. Examp
20e0: 6c 65 3a 0a 09 23 20 31 2e 36 27 73 20 6e 65 78  le:..# 1.6's nex
20f0: 74 20 69 73 20 31 2e 35 20 28 6d 6f 64 75 6c 6f  t is 1.5 (modulo
2100: 20 63 76 73 20 61 64 6d 69 6e 20 2d 6f 29 2e 0a   cvs admin -o)..
2110: 0a 09 23 20 43 6f 6e 74 72 61 72 69 6c 79 20 6f  ..# Contrarily o
2120: 6e 20 61 20 62 72 61 6e 63 68 20 74 68 65 20 27  n a branch the '
2130: 6e 65 78 74 27 20 66 69 65 6c 64 20 70 6f 69 6e  next' field poin
2140: 74 73 20 74 6f 20 74 68 65 0a 09 23 20 70 72 69  ts to the..# pri
2150: 6d 61 72 79 20 5f 63 68 69 6c 64 5f 20 6f 66 20  mary _child_ of 
2160: 74 68 65 20 63 75 72 72 65 6e 74 20 72 65 76 69  the current revi
2170: 73 69 6f 6e 2e 20 41 73 20 65 78 61 6d 70 6c 65  sion. As example
2180: 2c 0a 09 23 20 31 2e 31 2e 33 2e 32 27 73 20 27  ,..# 1.1.3.2's '
2190: 6e 65 78 74 27 20 77 69 6c 6c 20 62 65 20 31 2e  next' will be 1.
21a0: 31 2e 33 2e 33 2e 0a 0a 09 23 20 54 68 65 20 27  1.3.3....# The '
21b0: 6e 65 78 74 27 20 66 69 65 6c 64 20 61 63 74 75  next' field actu
21c0: 61 6c 6c 79 20 61 6c 77 61 79 73 20 72 65 66 65  ally always refe
21d0: 72 73 20 74 6f 20 74 68 65 20 72 65 76 69 73 69  rs to the revisi
21e0: 6f 6e 0a 09 23 20 63 6f 6e 74 61 69 6e 69 6e 67  on..# containing
21f0: 20 74 68 65 20 64 65 6c 74 61 20 6e 65 65 64 65   the delta neede
2200: 64 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68  d to retrieve th
2210: 61 74 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 23  at revision....#
2220: 20 54 68 65 20 64 65 70 65 6e 64 65 6e 63 69 65   The dependencie
2230: 73 20 6e 65 65 64 65 64 20 68 65 72 65 20 61 72  s needed here ar
2240: 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 73 74  e the logical st
2250: 72 75 63 74 75 72 65 2c 0a 09 23 20 70 61 72 65  ructure,..# pare
2260: 6e 74 2f 63 68 69 6c 64 2c 20 61 6e 64 20 6e 6f  nt/child, and no
2270: 74 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  t the implementa
2280: 74 69 6f 6e 20 64 65 70 65 6e 64 65 6e 74 20 64  tion dependent d
2290: 65 6c 74 61 0a 09 23 20 70 6f 69 6e 74 65 72 73  elta..# pointers
22a0: 2e 0a 0a 09 69 66 20 7b 24 6e 65 78 74 20 65 71  ....if {$next eq
22b0: 20 22 22 7d 20 72 65 74 75 72 6e 0a 0a 09 75 70   ""} return...up
22c0: 76 61 72 20 31 20 6d 79 64 65 70 65 6e 64 65 6e  var 1 mydependen
22d0: 63 69 65 73 20 6d 79 64 65 70 65 6e 64 65 6e 63  cies mydependenc
22e0: 69 65 73 0a 0a 09 23 20 20 20 20 20 20 20 20 20  ies...#         
22f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2300: 20 70 61 72 65 6e 74 20 2d 3e 20 63 68 69 6c 64   parent -> child
2310: 0a 09 69 66 20 7b 5b 72 65 76 20 69 73 74 72 75  ..if {[rev istru
2320: 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d  nkrevnr $revnr]}
2330: 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20   {..    lappend 
2340: 6d 79 64 65 70 65 6e 64 65 6e 63 69 65 73 20 24  mydependencies $
2350: 6e 65 78 74 20 24 72 65 76 6e 72 0a 09 7d 20 65  next $revnr..} e
2360: 6c 73 65 20 7b 0a 09 20 20 20 20 6c 61 70 70 65  lse {..    lappe
2370: 6e 64 20 6d 79 64 65 70 65 6e 64 65 6e 63 69 65  nd mydependencie
2380: 73 20 24 72 65 76 6e 72 20 24 6e 65 78 74 0a 09  s $revnr $next..
2390: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
23a0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
23b0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
23c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
23d0: 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69    ## Configurati
23e0: 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d  on..    pragma -
23f0: 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e  hastypeinfo    n
2400: 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69  o  ; # no type i
2410: 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20  ntrospection.   
2420: 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f   pragma -hasinfo
2430: 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20          no  ; # 
2440: 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73  no object intros
2450: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67  pection.    prag
2460: 6d 61 20 2d 68 61 73 74 79 70 65 6d 65 74 68 6f  ma -hastypemetho
2470: 64 73 20 6e 6f 20 20 3b 20 23 20 74 79 70 65 20  ds no  ; # type 
2480: 69 73 20 6e 6f 74 20 72 65 6c 65 76 61 6e 74 2e  is not relevant.
2490: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 73 69 6d  .    pragma -sim
24a0: 70 6c 65 64 69 73 70 61 74 63 68 20 79 65 73 20  pledispatch yes 
24b0: 3b 20 23 20 73 69 6d 70 6c 65 20 66 61 73 74 20  ; # simple fast 
24c0: 64 69 73 70 61 74 63 68 0a 0a 20 20 20 20 23 20  dispatch..    # 
24d0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
24e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
24f0: 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61  #####.}..namespa
2500: 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f  ce eval ::vc::fo
2510: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
2520: 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63  s {.    namespac
2530: 65 20 65 78 70 6f 72 74 20 66 69 6c 65 0a 20 20  e export file.  
2540: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c    namespace eval
2550: 20 66 69 6c 65 20 7b 0a 09 23 20 49 6d 70 6f 72   file {..# Impor
2560: 74 20 6e 6f 74 20 72 65 71 75 69 72 65 64 2c 20  t not required, 
2570: 61 6c 72 65 61 64 79 20 61 20 63 68 69 6c 64 20  already a child 
2580: 6e 61 6d 65 73 70 61 63 65 2e 0a 09 23 20 6e 61  namespace...# na
2590: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 76  mespace import v
25a0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
25b0: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 72 65  t::cvs::file::re
25c0: 76 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23  v.    }.}..# # #
25d0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
25e0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
25f0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
2600: 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 61 64  ########.## Read
2610: 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69  y..package provi
2620: 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69  de vc::fossil::i
2630: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65  mport::cvs::file
2640: 20 31 2e 30 0a 72 65 74 75 72 6e 0a               1.0.return.