Hex Artifact Content
Not logged in

Artifact f4f21fda7f279277c72eccdfafc6bf8464046765:

File tools/cvs2fossil/lib/c2f_frev.tcl part of check-in [510cd02303] - Continued the work on pass II, wrangling a file into shape. Completed handling of unnecessary initial deletions on branches. by aku on 2007-10-19 07:23:57.

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 52 65 76  ########..## Rev
0200: 69 73 69 6f 6e 73 20 70 65 72 20 66 69 6c 65 2e  isions per file.
0210: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
0220: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0230: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
0250: 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 0a  ## Requirements.
0260: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
0270: 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 20 20   Tcl 8.4        
0280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0290: 20 20 20 20 20 3b 20 23 20 52 65 71 75 69 72 65       ; # Require
02a0: 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61 63 6b 61  d runtime..packa
02b0: 67 65 20 72 65 71 75 69 72 65 20 73 6e 69 74 20  ge require snit 
02c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b                 ;
02e0: 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61   # OO system..pa
02f0: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63  ckage require vc
0300: 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20  ::tools::misc   
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0320: 20 20 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61    ; # Text forma
0330: 74 74 69 6e 67 0a 0a 23 20 23 20 23 23 20 23 23  tting..# # ## ##
0340: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
0350: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
0360: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0370: 23 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74 3a 3a  ####.## ..snit::
0380: 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69  type ::vc::fossi
0390: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
03a0: 66 69 6c 65 3a 3a 72 65 76 20 7b 0a 20 20 20 20  file::rev {.    
03b0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
03c0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
03d0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 50  #######.    ## P
03e0: 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 63  ublic API..    c
03f0: 6f 6e 73 74 72 75 63 74 6f 72 20 7b 72 65 76 6e  onstructor {revn
0400: 72 20 64 61 74 65 20 73 74 61 74 65 20 74 68 65  r date state the
0410: 66 69 6c 65 7d 20 7b 0a 09 73 65 74 20 6d 79 72  file} {..set myr
0420: 65 76 6e 72 20 20 20 20 24 72 65 76 6e 72 0a 09  evnr    $revnr..
0430: 73 65 74 20 6d 79 64 61 74 65 20 20 20 20 20 24  set mydate     $
0440: 64 61 74 65 0a 09 73 65 74 20 6d 79 6f 72 69 67  date..set myorig
0450: 64 61 74 65 20 24 64 61 74 65 0a 09 73 65 74 20  date $date..set 
0460: 6d 79 73 74 61 74 65 20 20 20 20 24 73 74 61 74  mystate    $stat
0470: 65 0a 09 73 65 74 20 6d 79 66 69 6c 65 20 20 20  e..set myfile   
0480: 20 20 24 74 68 65 66 69 6c 65 0a 09 72 65 74 75    $thefile..retu
0490: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  rn.    }..    # 
04a0: 42 61 73 69 63 20 70 69 65 63 65 73 20 5f 5f 5f  Basic pieces ___
04b0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
04c0: 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f  _____..    metho
04d0: 64 20 68 61 73 6d 65 74 61 20 7b 7d 20 7b 20 72  d hasmeta {} { r
04e0: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79  eturn [expr {$my
04f0: 6d 65 74 61 69 64 20 6e 65 20 22 22 7d 5d 20 7d  metaid ne ""}] }
0500: 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61 73 74  .    method hast
0510: 65 78 74 20 7b 7d 20 7b 0a 09 73 74 72 75 63 74  ext {} {..struct
0520: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 6d  ::list assign $m
0530: 79 74 65 78 74 20 73 20 65 0a 09 72 65 74 75 72  ytext s e..retur
0540: 6e 20 5b 65 78 70 72 20 7b 24 73 20 3c 3d 20 24  n [expr {$s <= $
0550: 65 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  e}].    }..    m
0560: 65 74 68 6f 64 20 73 65 74 6d 65 74 61 20 7b 6d  ethod setmeta {m
0570: 65 74 61 7d 20 7b 20 73 65 74 20 6d 79 6d 65 74  eta} { set mymet
0580: 61 69 64 20 24 6d 65 74 61 20 3b 20 72 65 74 75  aid $meta ; retu
0590: 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  rn }.    method 
05a0: 73 65 74 74 65 78 74 20 7b 74 65 78 74 7d 20 7b  settext {text} {
05b0: 20 73 65 74 20 6d 79 74 65 78 74 20 20 20 24 74   set mytext   $t
05c0: 65 78 74 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20  ext ; return }. 
05d0: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 6c 6f 64     method setlod
05e0: 20 20 7b 6c 6f 64 7d 20 20 7b 20 73 65 74 20 6d    {lod}  { set m
05f0: 79 6c 6f 64 20 20 20 20 24 6c 6f 64 20 20 3b 20  ylod    $lod  ; 
0600: 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65  return }..    me
0610: 74 68 6f 64 20 72 65 76 6e 72 20 7b 7d 20 7b 20  thod revnr {} { 
0620: 72 65 74 75 72 6e 20 24 6d 79 72 65 76 6e 72 20  return $myrevnr 
0630: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 74 61  }.    method sta
0640: 74 65 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24  te {} { return $
0650: 6d 79 73 74 61 74 65 20 7d 0a 20 20 20 20 6d 65  mystate }.    me
0660: 74 68 6f 64 20 6c 6f 64 20 20 20 7b 7d 20 7b 20  thod lod   {} { 
0670: 72 65 74 75 72 6e 20 24 6d 79 6c 6f 64 20 20 20  return $mylod   
0680: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 61 74  }.    method dat
0690: 65 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24  e  {} { return $
06a0: 6d 79 64 61 74 65 20 20 7d 0a 0a 20 20 20 20 6d  mydate  }..    m
06b0: 65 74 68 6f 64 20 69 73 6e 65 65 64 65 64 20 7b  ethod isneeded {
06c0: 7d 20 7b 0a 09 69 66 20 7b 24 6d 79 6f 70 65 72  } {..if {$myoper
06d0: 61 74 69 6f 6e 20 6e 65 20 22 6e 6f 74 68 69 6e  ation ne "nothin
06e0: 67 22 7d 20 20 20 20 20 20 20 20 20 7b 72 65 74  g"}         {ret
06f0: 75 72 6e 20 31 7d 0a 09 69 66 20 7b 24 6d 79 72  urn 1}..if {$myr
0700: 65 76 6e 72 20 6e 65 20 22 31 2e 31 22 7d 20 20  evnr ne "1.1"}  
0710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
0720: 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 20 7b 21  return 1}..if {!
0730: 5b 24 6d 79 6c 6f 64 20 69 73 74 72 75 6e 6b 5d  [$mylod istrunk]
0740: 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  }               
0750: 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a 09 69 66    {return 1}..if
0760: 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 62   {![llength $myb
0770: 72 61 6e 63 68 65 73 5d 7d 20 20 20 20 20 20 20  ranches]}       
0780: 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a       {return 1}.
0790: 09 73 65 74 20 66 69 72 73 74 62 72 61 6e 63 68  .set firstbranch
07a0: 20 5b 6c 69 6e 64 65 78 20 24 6d 79 62 72 61 6e   [lindex $mybran
07b0: 63 68 65 73 20 30 5d 0a 09 69 66 20 7b 21 5b 24  ches 0]..if {![$
07c0: 66 69 72 73 74 62 72 61 6e 63 68 20 68 61 73 63  firstbranch hasc
07d0: 68 69 6c 64 5d 7d 20 20 20 20 20 20 20 20 20 20  hild]}          
07e0: 7b 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 20 7b  {return 1}..if {
07f0: 24 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74 62 72  $myisondefaultbr
0800: 61 6e 63 68 7d 20 20 20 20 20 20 20 20 20 20 20  anch}           
0810: 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a 0a 09     {return 1}...
0820: 23 20 46 49 58 3a 20 54 68 69 73 20 6d 65 73 73  # FIX: This mess
0830: 61 67 65 20 77 69 6c 6c 20 6e 6f 74 20 6d 61 74  age will not mat
0840: 63 68 20 69 66 20 74 68 65 20 52 43 53 20 66 69  ch if the RCS fi
0850: 6c 65 20 77 61 73 20 72 65 6e 61 6d 65 64 0a 09  le was renamed..
0860: 23 20 6d 61 6e 75 61 6c 6c 79 20 61 66 74 65 72  # manually after
0870: 20 69 74 20 77 61 73 20 63 72 65 61 74 65 64 2e   it was created.
0880: 0a 0a 09 73 65 74 20 67 65 6e 20 22 66 69 6c 65  ...set gen "file
0890: 20 5b 66 69 6c 65 20 74 61 69 6c 20 5b 24 6d 79   [file tail [$my
08a0: 66 69 6c 65 20 75 73 72 70 61 74 68 5d 5d 20 77  file usrpath]] w
08b0: 61 73 20 69 6e 69 74 69 61 6c 6c 79 20 61 64 64  as initially add
08c0: 65 64 20 6f 6e 20 62 72 61 6e 63 68 20 5b 24 66  ed on branch [$f
08d0: 69 72 73 74 62 72 61 6e 63 68 20 6e 61 6d 65 5d  irstbranch name]
08e0: 2e 22 0a 09 73 65 74 20 6c 6f 67 20 5b 24 6d 79  ."..set log [$my
08f0: 66 69 6c 65 20 63 6f 6d 6d 69 74 6d 65 73 73 61  file commitmessa
0900: 67 65 6f 66 20 24 6d 79 6d 65 74 61 69 64 5d 0a  geof $mymetaid].
0910: 0a 09 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b  ..return [expr {
0920: 24 6c 6f 67 20 6e 65 20 24 67 65 6e 7d 5d 0a 20  $log ne $gen}]. 
0930: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
0940: 20 69 73 6e 65 65 64 65 64 62 72 61 6e 63 68 64   isneededbranchd
0950: 65 6c 20 7b 7d 20 7b 0a 09 69 66 20 7b 24 6d 79  el {} {..if {$my
0960: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 65 71 20  parentbranch eq 
0970: 22 22 7d 20 20 20 20 20 20 20 20 20 20 20 7b 72  ""}           {r
0980: 65 74 75 72 6e 20 31 7d 20 3b 20 23 20 6e 6f 74  eturn 1} ; # not
0990: 20 66 69 72 73 74 20 6f 6e 20 61 20 62 72 61 6e   first on a bran
09a0: 63 68 2c 20 6e 65 65 64 65 64 0a 09 73 65 74 20  ch, needed..set 
09b0: 62 61 73 65 20 5b 24 6d 79 70 61 72 65 6e 74 62  base [$myparentb
09c0: 72 61 6e 63 68 20 70 61 72 65 6e 74 5d 0a 09 69  ranch parent]..i
09d0: 66 20 7b 24 62 61 73 65 20 20 20 20 20 20 20 20  f {$base        
09e0: 20 20 20 65 71 20 22 22 7d 20 20 20 20 20 20 20     eq ""}       
09f0: 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b      {return 1} ;
0a00: 20 23 20 62 72 61 6e 63 68 20 68 61 73 20 70 61   # branch has pa
0a10: 72 65 6e 74 20 6c 6f 64 2c 20 6e 65 65 64 65 64  rent lod, needed
0a20: 0a 09 69 66 20 7b 5b 24 73 65 6c 66 20 4c 4f 44  ..if {[$self LOD
0a30: 4c 65 6e 67 74 68 5d 20 3c 20 32 7d 20 20 20 20  Length] < 2}    
0a40: 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31         {return 1
0a50: 7d 20 3b 20 23 20 6f 75 72 20 6c 6f 64 20 63 6f  } ; # our lod co
0a60: 6e 74 61 69 6e 73 20 6f 6e 6c 79 20 6f 75 72 73  ntains only ours
0a70: 65 6c 76 65 73 2c 20 6e 65 65 64 65 64 2e 0a 09  elves, needed...
0a80: 69 66 20 7b 24 6d 79 6f 70 65 72 61 74 69 6f 6e  if {$myoperation
0a90: 20 6e 65 20 22 64 65 6c 65 74 65 22 7d 20 20 20   ne "delete"}   
0aa0: 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 20       {return 1} 
0ab0: 3b 20 23 20 4e 6f 74 20 61 20 64 65 6c 65 74 69  ; # Not a deleti
0ac0: 6f 6e 2c 20 6e 65 65 64 65 64 0a 09 69 66 20 7b  on, needed..if {
0ad0: 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 74 61 67 73  [llength $mytags
0ae0: 5d 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ]}              
0af0: 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b 20 23 20   {return 1} ; # 
0b00: 48 61 76 65 20 74 61 67 73 2c 20 6e 65 65 64 65  Have tags, neede
0b10: 64 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  d..if {[llength 
0b20: 24 6d 79 62 72 61 6e 63 68 65 73 5d 7d 20 20 20  $mybranches]}   
0b30: 20 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e 20          {return 
0b40: 31 7d 20 3b 20 23 20 48 61 76 65 20 6f 74 68 65  1} ; # Have othe
0b50: 72 20 62 72 61 6e 63 68 65 73 2c 20 6e 65 65 64  r branches, need
0b60: 65 64 0a 09 69 66 20 7b 61 62 73 28 24 6d 79 64  ed..if {abs($myd
0b70: 61 74 65 20 2d 20 5b 24 62 61 73 65 20 64 61 74  ate - [$base dat
0b80: 65 5d 29 20 3e 20 32 7d 20 7b 72 65 74 75 72 6e  e]) > 2} {return
0b90: 20 31 7d 20 3b 20 23 20 4e 65 78 74 20 72 65 76   1} ; # Next rev
0ba0: 20 3e 20 32 20 73 65 63 6f 6e 64 73 20 61 70 61   > 2 seconds apa
0bb0: 72 74 2c 20 6e 65 65 64 65 64 0a 0a 20 20 20 20  rt, needed..    
0bc0: 20 20 20 20 23 20 46 49 58 4d 45 3a 20 54 68 69      # FIXME: Thi
0bd0: 73 20 6d 65 73 73 61 67 65 20 77 69 6c 6c 20 6e  s message will n
0be0: 6f 74 20 6d 61 74 63 68 20 69 66 20 74 68 65 20  ot match if the 
0bf0: 52 43 53 20 66 69 6c 65 20 77 61 73 0a 20 20 20  RCS file was.   
0c00: 20 20 20 20 20 23 20 72 65 6e 61 6d 65 64 20 6d       # renamed m
0c10: 61 6e 75 61 6c 6c 79 20 61 66 74 65 72 20 69 74  anually after it
0c20: 20 77 61 73 20 63 72 65 61 74 65 64 2e 0a 0a 09   was created....
0c30: 73 65 74 20 71 66 69 6c 65 20 5b 73 74 72 69 6e  set qfile [strin
0c40: 67 20 6d 61 70 20 7b 0a 09 20 20 20 20 2e 20 20  g map {..    .  
0c50: 5c 5c 2e 20 20 3f 20 20 5c 5c 3f 20 20 2a 20 20  \\.  ?  \\?  *  
0c60: 5c 5c 2a 20 20 5c 5c 20 5c 5c 5c 5c 20 2b 20 20  \\*  \\ \\\\ +  
0c70: 5c 5c 2b 20 20 5e 20 5c 5c 5e 20 24 20 5c 5c 24  \\+  ^ \\^ $ \\$
0c80: 0a 09 20 20 20 20 5c 5b 20 5c 5c 5c 5b 20 5c 5d  ..    \[ \\\[ \]
0c90: 20 5c 5c 5c 5d 20 28 20 20 5c 5c 28 20 20 20 29   \\\] (  \\(   )
0ca0: 20 5c 5c 29 20 20 5c 7b 20 5c 5c 5c 7b 20 5c 7d   \\)  \{ \\\{ \}
0cb0: 20 5c 5c 5c 7d 0a 09 7d 20 5b 66 69 6c 65 20 74   \\\}..} [file t
0cc0: 61 69 6c 20 5b 24 6d 79 66 69 6c 65 20 75 73 72  ail [$myfile usr
0cd0: 70 61 74 68 5d 5d 5d 0a 09 73 65 74 20 70 61 74  path]]]..set pat
0ce0: 74 65 72 6e 20 22 66 69 6c 65 20 24 71 66 69 6c  tern "file $qfil
0cf0: 65 20 77 61 73 20 61 64 64 65 64 20 6f 6e 20 62  e was added on b
0d00: 72 61 6e 63 68 20 2e 2a 20 6f 6e 20 5c 5c 64 7b  ranch .* on \\d{
0d10: 34 7d 2d 5c 5c 64 7b 32 7d 2d 5c 5c 64 7b 32 7d  4}-\\d{2}-\\d{2}
0d20: 20 5c 5c 64 7b 32 7d 3a 5c 5c 64 7b 32 7d 3a 5c   \\d{2}:\\d{2}:\
0d30: 5c 64 7b 32 7d 28 20 5c 5b 2b 2d 5c 5d 5c 5c 64  \d{2}( \[+-\]\\d
0d40: 7b 34 7d 29 3f 22 0a 09 73 65 74 20 6c 6f 67 20  {4})?"..set log 
0d50: 20 20 20 20 5b 24 6d 79 66 69 6c 65 20 63 6f 6d      [$myfile com
0d60: 6d 69 74 6d 65 73 73 61 67 65 6f 66 20 24 6d 79  mitmessageof $my
0d70: 6d 65 74 61 69 64 5d 0a 0a 09 23 20 4e 6f 74 20  metaid]...# Not 
0d80: 74 68 65 20 73 70 65 63 69 61 6c 20 6d 65 73 73  the special mess
0d90: 61 67 65 2c 20 6e 65 65 64 65 64 0a 09 69 66 20  age, needed..if 
0da0: 7b 21 5b 72 65 67 65 78 70 20 2d 2d 20 24 70 61  {![regexp -- $pa
0db0: 74 74 65 72 6e 20 24 6c 6f 67 5d 7d 20 7b 72 65  ttern $log]} {re
0dc0: 74 75 72 6e 20 31 7d 0a 0a 09 23 20 54 68 69 73  turn 1}...# This
0dd0: 20 69 73 20 61 6e 20 75 6e 6e 65 65 64 65 64 20   is an unneeded 
0de0: 69 6e 69 74 69 61 6c 20 62 72 61 6e 63 68 20 64  initial branch d
0df0: 65 6c 65 74 65 2e 0a 09 72 65 74 75 72 6e 20 30  elete...return 0
0e00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
0e10: 6f 64 20 4c 4f 44 4c 65 6e 67 74 68 20 7b 7d 20  od LODLength {} 
0e20: 7b 0a 09 73 65 74 20 6e 20 31 20 3b 20 23 20 63  {..set n 1 ; # c
0e30: 6f 75 6e 74 20 73 65 6c 66 0a 09 73 65 74 20 72  ount self..set r
0e40: 65 76 20 24 6d 79 63 68 69 6c 64 0a 09 77 68 69  ev $mychild..whi
0e50: 6c 65 20 7b 24 72 65 76 20 6e 65 20 22 22 7d 20  le {$rev ne ""} 
0e60: 7b 0a 09 20 20 20 20 69 6e 63 72 20 6e 0a 09 20  {..    incr n.. 
0e70: 20 20 20 73 65 74 20 72 65 76 20 5b 24 72 65 76     set rev [$rev
0e80: 20 63 68 69 6c 64 5d 0a 09 7d 0a 09 72 65 74 75   child]..}..retu
0e90: 72 6e 20 24 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  rn $n.    }..   
0ea0: 20 23 20 42 61 73 69 63 20 70 61 72 65 6e 74 2f   # Basic parent/
0eb0: 63 68 69 6c 64 20 6c 69 6e 6b 61 67 65 20 5f 5f  child linkage __
0ec0: 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65  ________..    me
0ed0: 74 68 6f 64 20 68 61 73 70 61 72 65 6e 74 20 7b  thod hasparent {
0ee0: 7d 20 7b 20 72 65 74 75 72 6e 20 5b 65 78 70 72  } { return [expr
0ef0: 20 7b 24 6d 79 70 61 72 65 6e 74 20 6e 65 20 22   {$myparent ne "
0f00: 22 7d 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64  "}] }.    method
0f10: 20 68 61 73 63 68 69 6c 64 20 20 7b 7d 20 7b 20   haschild  {} { 
0f20: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d  return [expr {$m
0f30: 79 63 68 69 6c 64 20 20 6e 65 20 22 22 7d 5d 20  ychild  ne ""}] 
0f40: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65  }..    method se
0f50: 74 70 61 72 65 6e 74 20 7b 70 61 72 65 6e 74 7d  tparent {parent}
0f60: 20 7b 0a 09 69 66 20 7b 24 6d 79 70 61 72 65 6e   {..if {$myparen
0f70: 74 20 6e 65 20 22 22 7d 20 7b 20 74 72 6f 75 62  t ne ""} { troub
0f80: 6c 65 20 69 6e 74 65 72 6e 61 6c 20 22 50 61 72  le internal "Par
0f90: 65 6e 74 20 61 6c 72 65 61 64 79 20 64 65 66 69  ent already defi
0fa0: 6e 65 64 22 20 7d 0a 09 73 65 74 20 6d 79 70 61  ned" }..set mypa
0fb0: 72 65 6e 74 20 24 70 61 72 65 6e 74 0a 09 72 65  rent $parent..re
0fc0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
0fd0: 6d 65 74 68 6f 64 20 63 75 74 66 72 6f 6d 70 61  method cutfrompa
0fe0: 72 65 6e 74 20 7b 7d 20 7b 20 73 65 74 20 6d 79  rent {} { set my
0ff0: 70 61 72 65 6e 74 20 22 22 20 3b 20 72 65 74 75  parent "" ; retu
1000: 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  rn }.    method 
1010: 63 75 74 66 72 6f 6d 63 68 69 6c 64 20 20 7b 7d  cutfromchild  {}
1020: 20 7b 20 73 65 74 20 6d 79 63 68 69 6c 64 20 20   { set mychild  
1030: 22 22 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20  "" ; return }.. 
1040: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 63 68 69     method setchi
1050: 6c 64 20 7b 63 68 69 6c 64 7d 20 7b 0a 09 69 66  ld {child} {..if
1060: 20 7b 24 6d 79 63 68 69 6c 64 20 6e 65 20 22 22   {$mychild ne ""
1070: 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65  } { trouble inte
1080: 72 6e 61 6c 20 22 43 68 69 6c 64 20 61 6c 72 65  rnal "Child alre
1090: 61 64 79 20 64 65 66 69 6e 65 64 22 20 7d 0a 09  ady defined" }..
10a0: 73 65 74 20 6d 79 63 68 69 6c 64 20 24 63 68 69  set mychild $chi
10b0: 6c 64 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  ld..return.    }
10c0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 61 72  ..    method par
10d0: 65 6e 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20  ent {} { return 
10e0: 24 6d 79 70 61 72 65 6e 74 20 7d 0a 20 20 20 20  $myparent }.    
10f0: 6d 65 74 68 6f 64 20 63 68 69 6c 64 20 20 7b 7d  method child  {}
1100: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 63 68 69   { return $mychi
1110: 6c 64 20 20 7d 0a 0a 20 20 20 20 23 20 42 72 61  ld  }..    # Bra
1120: 6e 63 68 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f  nch linkage ____
1130: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1140: 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73  __..    method s
1150: 65 74 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b  etparentbranch {
1160: 62 72 61 6e 63 68 7d 20 7b 0a 09 69 66 20 7b 24  branch} {..if {$
1170: 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20 6e  myparentbranch n
1180: 65 20 22 22 7d 20 7b 20 74 72 6f 75 62 6c 65 20  e ""} { trouble 
1190: 69 6e 74 65 72 6e 61 6c 20 22 42 72 61 6e 63 68  internal "Branch
11a0: 20 70 61 72 65 6e 74 20 61 6c 72 65 61 64 79 20   parent already 
11b0: 64 65 66 69 6e 65 64 22 20 7d 0a 09 73 65 74 20  defined" }..set 
11c0: 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24  myparentbranch $
11d0: 62 72 61 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20  branch..return. 
11e0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
11f0: 20 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d   parentbranch {}
1200: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 61 72   { return $mypar
1210: 65 6e 74 62 72 61 6e 63 68 20 7d 0a 20 20 20 20  entbranch }.    
1220: 6d 65 74 68 6f 64 20 62 72 61 6e 63 68 65 73 20  method branches 
1230: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20      {} { return 
1240: 24 6d 79 62 72 61 6e 63 68 65 73 20 7d 0a 0a 20  $mybranches }.. 
1250: 20 20 20 6d 65 74 68 6f 64 20 61 64 64 62 72 61     method addbra
1260: 6e 63 68 20 7b 62 72 61 6e 63 68 7d 20 7b 0a 09  nch {branch} {..
1270: 6c 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63 68  lappend mybranch
1280: 65 73 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75  es $branch..retu
1290: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
12a0: 74 68 6f 64 20 61 64 64 63 68 69 6c 64 6f 6e 62  thod addchildonb
12b0: 72 61 6e 63 68 20 7b 63 68 69 6c 64 7d 20 7b 0a  ranch {child} {.
12c0: 09 6c 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63  .lappend mybranc
12d0: 68 63 68 69 6c 64 72 65 6e 20 24 63 68 69 6c 64  hchildren $child
12e0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
12f0: 20 20 20 20 6d 65 74 68 6f 64 20 63 75 74 66 72      method cutfr
1300: 6f 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b  omparentbranch {
1310: 7d 20 7b 20 73 65 74 20 6d 79 70 61 72 65 6e 74  } { set myparent
1320: 62 72 61 6e 63 68 20 22 22 20 3b 20 72 65 74 75  branch "" ; retu
1330: 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64  rn }..    method
1340: 20 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 7b 62   removebranch {b
1350: 72 61 6e 63 68 7d 20 7b 0a 09 6c 64 65 6c 65 74  ranch} {..ldelet
1360: 65 20 6d 79 62 72 61 6e 63 68 65 73 20 24 62 72  e mybranches $br
1370: 61 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20 20 20  anch..return.   
1380: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72   }..    method r
1390: 65 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e  emovechildonbran
13a0: 63 68 20 7b 72 65 76 7d 20 7b 0a 09 6c 64 65 6c  ch {rev} {..ldel
13b0: 65 74 65 20 6d 79 62 72 61 6e 63 68 63 68 69 6c  ete mybranchchil
13c0: 64 72 65 6e 20 24 72 65 76 0a 09 72 65 74 75 72  dren $rev..retur
13d0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
13e0: 68 6f 64 20 73 6f 72 74 62 72 61 6e 63 68 65 73  hod sortbranches
13f0: 20 7b 7d 20 7b 0a 09 69 66 20 7b 21 5b 6c 6c 65   {} {..if {![lle
1400: 6e 67 74 68 20 24 6d 79 62 72 61 6e 63 68 65 73  ngth $mybranches
1410: 5d 7d 20 72 65 74 75 72 6e 0a 0a 09 23 20 53 6f  ]} return...# So
1420: 72 74 20 74 68 65 20 62 72 61 6e 63 68 65 73 20  rt the branches 
1430: 73 70 61 77 6e 65 64 20 62 79 20 74 68 69 73 20  spawned by this 
1440: 72 65 76 69 73 69 6f 6e 20 69 6e 20 63 72 65 61  revision in crea
1450: 74 69 6f 6e 0a 09 23 20 6f 72 64 65 72 2e 20 54  tion..# order. T
1460: 6f 20 68 65 6c 70 20 69 6e 20 74 68 69 73 20 6f  o help in this o
1470: 75 72 20 66 69 6c 65 20 67 61 76 65 20 61 6c 6c  ur file gave all
1480: 20 62 72 61 6e 63 68 65 73 20 61 20 70 6f 73 69   branches a posi
1490: 74 69 6f 6e 0a 09 23 20 69 64 2c 20 69 6e 20 6f  tion..# id, in o
14a0: 72 64 65 72 20 6f 66 20 74 68 65 69 72 20 64 65  rder of their de
14b0: 66 69 6e 69 74 69 6f 6e 20 62 79 20 74 68 65 20  finition by the 
14c0: 52 43 53 20 61 72 63 68 69 76 65 2e 0a 09 23 0a  RCS archive...#.
14d0: 09 23 20 54 68 65 20 63 72 65 61 74 69 6f 6e 20  .# The creation 
14e0: 6f 72 64 65 72 20 69 73 20 28 61 70 70 61 72 65  order is (appare
14f0: 6e 74 6c 79 29 20 74 68 65 20 72 65 76 65 72 73  ntly) the revers
1500: 65 20 6f 66 20 74 68 65 0a 09 23 20 64 65 66 69  e of the..# defi
1510: 6e 69 74 69 6f 6e 20 6f 72 64 65 72 2e 20 28 49  nition order. (I
1520: 66 20 61 20 62 72 61 6e 63 68 20 69 73 20 63 72  f a branch is cr
1530: 65 61 74 65 64 20 74 68 65 6e 20 64 65 6c 65 74  eated then delet
1540: 65 64 2c 20 61 0a 09 23 20 6c 61 74 65 72 20 62  ed, a..# later b
1550: 72 61 6e 63 68 20 63 61 6e 20 62 65 20 61 73 73  ranch can be ass
1560: 69 67 6e 65 64 20 74 68 65 20 72 65 63 79 63 6c  igned the recycl
1570: 65 64 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72  ed branch number
1580: 3b 0a 09 23 20 74 68 65 72 65 66 6f 72 65 20 62  ;..# therefore b
1590: 72 61 6e 63 68 20 6e 75 6d 62 65 72 73 20 61 72  ranch numbers ar
15a0: 65 20 6e 6f 74 20 61 6e 20 69 6e 64 69 63 61 74  e not an indicat
15b0: 69 6f 6e 20 6f 66 20 63 72 65 61 74 69 6f 6e 0a  ion of creation.
15c0: 09 23 20 6f 72 64 65 72 2e 29 0a 0a 09 73 65 74  .# order.)...set
15d0: 20 74 6d 70 20 7b 7d 0a 09 66 6f 72 65 61 63 68   tmp {}..foreach
15e0: 20 62 72 61 6e 63 68 20 24 6d 79 62 72 61 6e 63   branch $mybranc
15f0: 68 65 73 20 7b 0a 09 20 20 20 20 6c 61 70 70 65  hes {..    lappe
1600: 6e 64 20 74 6d 70 20 5b 6c 69 73 74 20 24 62 72  nd tmp [list $br
1610: 61 6e 63 68 20 5b 24 62 72 61 6e 63 68 20 70 6f  anch [$branch po
1620: 73 69 74 69 6f 6e 5d 5d 0a 09 7d 0a 0a 09 73 65  sition]]..}...se
1630: 74 20 6d 79 62 72 61 6e 63 68 65 73 20 7b 7d 0a  t mybranches {}.
1640: 09 66 6f 72 65 61 63 68 20 69 74 65 6d 20 5b 6c  .foreach item [l
1650: 73 6f 72 74 20 2d 69 6e 64 65 78 20 31 20 2d 64  sort -index 1 -d
1660: 65 63 72 65 61 73 69 6e 67 20 24 74 6d 70 5d 20  ecreasing $tmp] 
1670: 7b 0a 09 20 20 20 20 73 74 72 75 63 74 3a 3a 6c  {..    struct::l
1680: 69 73 74 20 61 73 73 69 67 6e 20 24 69 74 65 6d  ist assign $item
1690: 20 62 72 61 6e 63 68 20 70 6f 73 69 74 69 6f 6e   branch position
16a0: 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79  ..    lappend my
16b0: 62 72 61 6e 63 68 65 73 20 24 62 72 61 6e 63 68  branches $branch
16c0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
16d0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6d 6f  }..    method mo
16e0: 76 65 62 72 61 6e 63 68 65 73 74 6f 20 7b 72 65  vebranchesto {re
16f0: 76 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 6f 64  v} {..set revlod
1700: 20 5b 24 72 65 76 20 6c 6f 64 5d 0a 09 66 6f 72   [$rev lod]..for
1710: 65 61 63 68 20 62 72 61 6e 63 68 20 24 6d 79 62  each branch $myb
1720: 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 24  ranches {..    $
1730: 72 65 76 20 61 64 64 62 72 61 6e 63 68 20 24 62  rev addbranch $b
1740: 72 61 6e 63 68 0a 09 20 20 20 20 24 62 72 61 6e  ranch..    $bran
1750: 63 68 20 73 65 74 70 61 72 65 6e 74 20 24 72 65  ch setparent $re
1760: 76 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73  v..    $branch s
1770: 65 74 6c 6f 64 20 24 72 65 76 6c 6f 64 0a 09 7d  etlod $revlod..}
1780: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68  ..foreach branch
1790: 72 65 76 20 24 6d 79 62 72 61 6e 63 68 63 68 69  rev $mybranchchi
17a0: 6c 64 72 65 6e 20 7b 0a 09 20 20 20 20 24 72 65  ldren {..    $re
17b0: 76 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e  v addchildonbran
17c0: 63 68 20 24 62 72 61 6e 63 68 72 65 76 0a 09 20  ch $branchrev.. 
17d0: 20 20 20 24 62 72 61 6e 63 68 72 65 76 20 63 75     $branchrev cu
17e0: 74 66 72 6f 6d 70 61 72 65 6e 74 0a 09 20 20 20  tfromparent..   
17f0: 20 24 62 72 61 6e 63 68 72 65 76 20 73 65 74 70   $branchrev setp
1800: 61 72 65 6e 74 20 24 72 65 76 0a 09 7d 0a 09 73  arent $rev..}..s
1810: 65 74 20 6d 79 62 72 61 6e 63 68 65 73 20 20 20  et mybranches   
1820: 20 20 20 20 7b 7d 0a 09 73 65 74 20 6d 79 62 72      {}..set mybr
1830: 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d 0a  anchchildren {}.
1840: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1850: 20 20 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65     method remove
1860: 61 6c 6c 62 72 61 6e 63 68 65 73 20 7b 7d 20 7b  allbranches {} {
1870: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68  ..foreach branch
1880: 20 24 6d 79 62 72 61 6e 63 68 65 73 20 7b 0a 09   $mybranches {..
1890: 20 20 20 20 24 62 72 61 6e 63 68 20 64 65 73 74      $branch dest
18a0: 72 6f 79 0a 09 7d 0a 09 73 65 74 20 6d 79 62 72  roy..}..set mybr
18b0: 61 6e 63 68 65 73 20 20 20 20 20 20 20 7b 7d 0a  anches       {}.
18c0: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 63 68 69  .set mybranchchi
18d0: 6c 64 72 65 6e 20 7b 7d 0a 09 72 65 74 75 72 6e  ldren {}..return
18e0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 54 61  .    }..    # Ta
18f0: 67 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f  g linkage ______
1900: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1910: 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ___..    method 
1920: 61 64 64 74 61 67 20 7b 74 61 67 7d 20 7b 0a 09  addtag {tag} {..
1930: 6c 61 70 70 65 6e 64 20 6d 79 74 61 67 73 20 24  lappend mytags $
1940: 74 61 67 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  tag..return.    
1950: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65  }..    method re
1960: 6d 6f 76 65 61 6c 6c 74 61 67 73 20 7b 7d 20 7b  movealltags {} {
1970: 0a 09 66 6f 72 65 61 63 68 20 74 61 67 20 24 6d  ..foreach tag $m
1980: 79 74 61 67 73 20 7b 20 24 74 61 67 20 64 65 73  ytags { $tag des
1990: 74 72 6f 79 20 7d 0a 09 73 65 74 20 6d 79 74 61  troy }..set myta
19a0: 67 73 20 7b 7d 0a 09 72 65 74 75 72 6e 0a 20 20  gs {}..return.  
19b0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
19c0: 6d 6f 76 65 74 61 67 73 74 6f 20 7b 72 65 76 7d  movetagsto {rev}
19d0: 20 7b 0a 09 73 65 74 20 72 65 76 6c 6f 64 20 5b   {..set revlod [
19e0: 24 72 65 76 20 6c 6f 64 5d 0a 09 66 6f 72 65 61  $rev lod]..forea
19f0: 63 68 20 74 61 67 20 24 6d 79 74 61 67 73 20 7b  ch tag $mytags {
1a00: 0a 09 20 20 20 20 24 72 65 76 20 61 64 64 74 61  ..    $rev addta
1a10: 67 20 24 74 61 67 0a 09 20 20 20 20 24 74 61 67  g $tag..    $tag
1a20: 20 73 65 74 74 61 67 72 65 76 20 24 72 65 76 0a   settagrev $rev.
1a30: 09 20 20 20 20 24 74 61 67 20 73 65 74 6c 6f 64  .    $tag setlod
1a40: 20 24 72 65 76 6c 6f 64 0a 09 7d 0a 09 73 65 74   $revlod..}..set
1a50: 20 6d 79 74 61 67 73 20 7b 7d 0a 09 72 65 74 75   mytags {}..retu
1a60: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  rn.    }..    # 
1a70: 67 65 6e 65 72 61 6c 20 73 79 6d 62 6f 6c 20 6f  general symbol o
1a80: 70 65 72 61 74 69 6f 6e 73 20 5f 5f 5f 5f 5f 5f  perations ______
1a90: 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f  _____..    metho
1aa0: 64 20 6d 6f 76 65 73 79 6d 62 6f 6c 73 74 6f 20  d movesymbolsto 
1ab0: 7b 72 65 76 7d 20 7b 0a 09 23 20 4d 6f 76 65 20  {rev} {..# Move 
1ac0: 74 68 65 20 74 61 67 73 20 61 6e 64 20 62 72 61  the tags and bra
1ad0: 6e 63 68 65 73 20 61 74 74 61 63 68 65 64 20 74  nches attached t
1ae0: 6f 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20  o this revision 
1af0: 74 6f 20 74 68 65 0a 09 23 20 64 65 73 74 69 6e  to the..# destin
1b00: 61 74 69 6f 6e 20 61 6e 64 20 66 69 78 20 61 6c  ation and fix al
1b10: 6c 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 24 73  l pointers....$s
1b20: 65 6c 66 20 6d 6f 76 65 74 61 67 73 74 6f 20 20  elf movetagsto  
1b30: 20 20 20 24 72 65 76 0a 09 24 73 65 6c 66 20 6d     $rev..$self m
1b40: 6f 76 65 62 72 61 6e 63 68 65 73 74 6f 20 24 72  ovebranchesto $r
1b50: 65 76 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  ev..return.    }
1b60: 0a 0a 20 20 20 20 23 20 44 65 72 69 76 65 64 20  ..    # Derived 
1b70: 73 74 75 66 66 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  stuff __________
1b80: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20  _____________.. 
1b90: 20 20 20 6d 65 74 68 6f 64 20 64 65 74 65 72 6d     method determ
1ba0: 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20 7b 7d 20  ineoperation {} 
1bb0: 7b 0a 09 23 20 4c 6f 6f 6b 20 61 74 20 74 68 65  {..# Look at the
1bc0: 20 73 74 61 74 65 20 6f 66 20 62 6f 74 68 20 74   state of both t
1bd0: 68 69 73 20 72 65 76 69 73 69 6f 6e 20 61 6e 64  his revision and
1be0: 20 69 74 73 20 70 61 72 65 6e 74 20 74 6f 0a 09   its parent to..
1bf0: 23 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  # determine the 
1c00: 74 79 70 65 20 6f 70 66 20 6f 70 65 72 61 74 69  type opf operati
1c10: 6f 6e 20 77 68 69 63 68 20 77 61 73 20 70 65 72  on which was per
1c20: 66 6f 72 6d 65 64 20 28 61 64 64 2c 0a 09 23 20  formed (add,..# 
1c30: 6d 6f 64 69 66 79 2c 20 64 65 6c 65 74 65 2c 20  modify, delete, 
1c40: 6e 6f 6e 65 29 2e 0a 09 23 0a 09 23 20 54 68 65  none)...#..# The
1c50: 20 69 6d 70 6f 72 74 61 6e 74 20 69 6e 66 6f 72   important infor
1c60: 6d 61 74 69 6f 6e 20 69 73 20 64 65 61 64 20 76  mation is dead v
1c70: 73 20 6e 6f 74 2d 64 65 61 64 20 66 6f 72 20 62  s not-dead for b
1c80: 6f 74 68 2c 0a 09 23 20 67 69 76 69 6e 67 20 72  oth,..# giving r
1c90: 69 73 65 20 74 6f 20 66 6f 75 72 20 70 6f 73 73  ise to four poss
1ca0: 69 62 6c 65 20 74 79 70 65 73 2e 0a 0a 09 73 65  ible types....se
1cb0: 74 20 73 64 65 61 64 20 5b 65 78 70 72 20 7b 24  t sdead [expr {$
1cc0: 6d 79 73 74 61 74 65 20 65 71 20 22 64 65 61 64  mystate eq "dead
1cd0: 22 7d 5d 0a 09 73 65 74 20 70 64 65 61 64 20 5b  "}]..set pdead [
1ce0: 65 78 70 72 20 7b 24 6d 79 70 61 72 65 6e 74 20  expr {$myparent 
1cf0: 65 71 20 22 22 20 7c 7c 20 5b 24 6d 79 70 61 72  eq "" || [$mypar
1d00: 65 6e 74 20 73 74 61 74 65 5d 20 65 71 20 22 64  ent state] eq "d
1d10: 65 61 64 22 7d 5d 0a 0a 09 73 65 74 20 6d 79 6f  ead"}]...set myo
1d20: 70 65 72 61 74 69 6f 6e 20 24 6d 79 6f 70 73 74  peration $myopst
1d30: 61 74 65 28 5b 6c 69 73 74 20 24 70 64 65 61 64  ate([list $pdead
1d40: 20 24 73 64 65 61 64 5d 29 0a 09 72 65 74 75 72   $sdead])..retur
1d50: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
1d60: 68 6f 64 20 6f 70 65 72 61 74 69 6f 6e 20 7b 7d  hod operation {}
1d70: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 6f 70 65   { return $myope
1d80: 72 61 74 69 6f 6e 20 7d 0a 20 20 20 20 6d 65 74  ration }.    met
1d90: 68 6f 64 20 72 65 74 79 70 65 20 7b 78 7d 20 7b  hod retype {x} {
1da0: 20 73 65 74 20 6d 79 6f 70 65 72 61 74 69 6f 6e   set myoperation
1db0: 20 24 78 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a   $x ; return }..
1dc0: 20 20 20 20 6d 65 74 68 6f 64 20 69 73 6f 6e 64      method isond
1dd0: 65 66 61 75 6c 74 62 72 61 6e 63 68 20 7b 7d 20  efaultbranch {} 
1de0: 7b 20 73 65 74 20 6d 79 69 73 6f 6e 64 65 66 61  { set myisondefa
1df0: 75 6c 74 62 72 61 6e 63 68 20 31 20 3b 20 72 65  ultbranch 1 ; re
1e00: 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68  turn }..    meth
1e10: 6f 64 20 73 65 74 64 65 66 61 75 6c 74 62 72 61  od setdefaultbra
1e20: 6e 63 68 63 68 69 6c 64 20 20 7b 72 65 76 7d 20  nchchild  {rev} 
1e30: 7b 20 73 65 74 20 6d 79 64 62 63 68 69 6c 64 20  { set mydbchild 
1e40: 24 72 65 76 20 3b 20 72 65 74 75 72 6e 20 7d 0a  $rev ; return }.
1e50: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 64 65      method setde
1e60: 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e  faultbranchparen
1e70: 74 20 7b 72 65 76 7d 20 7b 0a 09 73 65 74 20 6d  t {rev} {..set m
1e80: 79 64 62 70 61 72 65 6e 74 20 24 72 65 76 0a 0a  ydbparent $rev..
1e90: 09 23 20 52 65 74 79 70 65 20 74 68 65 20 72 65  .# Retype the re
1ea0: 76 69 73 69 6f 6e 20 28 6d 61 79 20 63 68 61 6e  vision (may chan
1eb0: 67 65 20 66 72 6f 6d 20 27 61 64 64 27 20 74 6f  ge from 'add' to
1ec0: 20 27 63 68 61 6e 67 65 27 29 2e 0a 0a 09 73 65   'change')....se
1ed0: 74 20 73 64 65 61 64 20 5b 65 78 70 72 20 7b 24  t sdead [expr {$
1ee0: 6d 79 6f 70 65 72 61 74 69 6f 6e 20 20 20 20 20  myoperation     
1ef0: 6e 65 20 22 63 68 61 6e 67 65 22 7d 5d 0a 09 73  ne "change"}]..s
1f00: 65 74 20 70 64 65 61 64 20 5b 65 78 70 72 20 7b  et pdead [expr {
1f10: 5b 24 72 65 76 20 6f 70 65 72 61 74 69 6f 6e 5d  [$rev operation]
1f20: 20 6e 65 20 22 63 68 61 6e 67 65 22 7d 5d 0a 09   ne "change"}]..
1f30: 73 65 74 20 6d 79 6f 70 65 72 61 74 69 6f 6e 20  set myoperation 
1f40: 24 6d 79 6f 70 73 74 61 74 65 28 5b 6c 69 73 74  $myopstate([list
1f50: 20 24 70 64 65 61 64 20 24 73 64 65 61 64 5d 29   $pdead $sdead])
1f60: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
1f70: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
1f80: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
1f90: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20  ###########.    
1fa0: 23 23 20 54 79 70 65 20 41 50 49 0a 0a 20 20 20  ## Type API..   
1fb0: 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 74 72   typemethod istr
1fc0: 75 6e 6b 72 65 76 6e 72 20 7b 72 65 76 6e 72 7d  unkrevnr {revnr}
1fd0: 20 7b 0a 09 72 65 74 75 72 6e 20 5b 65 78 70 72   {..return [expr
1fe0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 73 70 6c 69   {[llength [spli
1ff0: 74 20 24 72 65 76 6e 72 20 2e 5d 5d 20 3d 3d 20  t $revnr .]] == 
2000: 32 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74  2}].    }..    t
2010: 79 70 65 6d 65 74 68 6f 64 20 69 73 62 72 61 6e  ypemethod isbran
2020: 63 68 72 65 76 6e 72 20 7b 72 65 76 6e 72 20 5f  chrevnr {revnr _
2030: 20 62 76 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 67   bv} {..if {[reg
2040: 65 78 70 20 24 6d 79 62 72 61 6e 63 68 70 61 74  exp $mybranchpat
2050: 74 65 72 6e 20 24 72 65 76 6e 72 20 2d 3e 20 68  tern $revnr -> h
2060: 65 61 64 20 74 61 69 6c 5d 7d 20 7b 0a 09 20 20  ead tail]} {..  
2070: 20 20 75 70 76 61 72 20 31 20 24 62 76 20 62 72    upvar 1 $bv br
2080: 61 6e 63 68 6e 72 0a 09 20 20 20 20 73 65 74 20  anchnr..    set 
2090: 62 72 61 6e 63 68 6e 72 20 24 7b 68 65 61 64 7d  branchnr ${head}
20a0: 24 74 61 69 6c 0a 09 20 20 20 20 72 65 74 75 72  $tail..    retur
20b0: 6e 20 31 0a 09 7d 0a 09 72 65 74 75 72 6e 20 30  n 1..}..return 0
20c0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65  .    }..    type
20d0: 6d 65 74 68 6f 64 20 32 62 72 61 6e 63 68 6e 72  method 2branchnr
20e0: 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 23 20 49 6e   {revnr} {..# In
20f0: 70 75 74 20 69 73 20 61 20 62 72 61 6e 63 68 20  put is a branch 
2100: 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 2c  revision number,
2110: 20 69 2e 65 2e 20 61 20 72 65 76 69 73 69 6f 6e   i.e. a revision
2120: 20 6e 75 6d 62 65 72 0a 09 23 20 77 69 74 68 20   number..# with 
2130: 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f  an even number o
2140: 66 20 63 6f 6d 70 6f 6e 65 6e 74 73 3b 20 66 6f  f components; fo
2150: 72 20 65 78 61 6d 70 6c 65 20 27 32 2e 39 2e 32  r example '2.9.2
2160: 2e 31 27 0a 09 23 20 28 6e 65 76 65 72 20 27 32  .1'..# (never '2
2170: 2e 39 2e 32 27 20 6e 6f 72 20 27 32 2e 39 2e 30  .9.2' nor '2.9.0
2180: 2e 32 27 29 2e 20 20 54 68 65 20 72 65 74 75 72  .2').  The retur
2190: 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 0a 09  n value is the..
21a0: 23 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 20  # branch number 
21b0: 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 27 32  (for example, '2
21c0: 2e 39 2e 32 27 29 2e 20 20 46 6f 72 20 74 72 75  .9.2').  For tru
21d0: 6e 6b 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 23  nk revisions,..#
21e0: 20 6c 69 6b 65 20 27 33 2e 34 27 2c 20 77 65 20   like '3.4', we 
21f0: 72 65 74 75 72 6e 20 74 68 65 20 65 6d 70 74 79  return the empty
2200: 20 73 74 72 69 6e 67 2e 0a 0a 09 69 66 20 7b 5b   string....if {[
2210: 24 74 79 70 65 20 69 73 74 72 75 6e 6b 72 65 76  $type istrunkrev
2220: 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20  nr $revnr]} {.. 
2230: 20 20 20 72 65 74 75 72 6e 20 22 22 0a 09 7d 0a     return ""..}.
2240: 09 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b 6c  .return [join [l
2250: 72 61 6e 67 65 20 5b 73 70 6c 69 74 20 24 72 65  range [split $re
2260: 76 6e 72 20 2e 5d 20 30 20 65 6e 64 2d 31 5d 20  vnr .] 0 end-1] 
2270: 2e 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79  .].    }..    ty
2280: 70 65 6d 65 74 68 6f 64 20 32 62 72 61 6e 63 68  pemethod 2branch
2290: 70 61 72 65 6e 74 72 65 76 6e 72 20 7b 62 72 61  parentrevnr {bra
22a0: 6e 63 68 6e 72 7d 20 7b 0a 09 23 20 43 68 6f 70  nchnr} {..# Chop
22b0: 20 74 68 65 20 6c 61 73 74 20 73 65 67 6d 65 6e   the last segmen
22c0: 74 20 6f 66 66 0a 09 72 65 74 75 72 6e 20 5b 6a  t off..return [j
22d0: 6f 69 6e 20 5b 6c 72 61 6e 67 65 20 5b 73 70 6c  oin [lrange [spl
22e0: 69 74 20 24 62 72 61 6e 63 68 6e 72 20 2e 5d 20  it $branchnr .] 
22f0: 30 20 65 6e 64 2d 31 5d 20 2e 5d 0a 20 20 20 20  0 end-1] .].    
2300: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  }..    # # ## ##
2310: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
2320: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
2330: 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20 20 20     ## State..   
2340: 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79   typevariable my
2350: 62 72 61 6e 63 68 70 61 74 74 65 72 6e 20 7b 5e  branchpattern {^
2360: 28 28 3f 3a 5c 64 2b 5c 2e 5c 64 2b 5c 2e 29 2b  ((?:\d+\.\d+\.)+
2370: 29 28 3f 3a 30 5c 2e 29 3f 28 5c 64 2b 29 24 7d  )(?:0\.)?(\d+)$}
2380: 0a 20 20 20 20 23 20 46 69 72 73 74 20 61 20 6e  .    # First a n
2390: 6f 6e 7a 65 72 6f 20 65 76 65 6e 20 6e 75 6d 62  onzero even numb
23a0: 65 72 20 6f 66 20 64 69 67 69 74 20 67 72 6f 75  er of digit grou
23b0: 70 73 20 77 69 74 68 20 74 72 61 69 6c 69 6e 67  ps with trailing
23c0: 20 64 6f 74 0a 20 20 20 20 23 20 43 56 53 20 74   dot.    # CVS t
23d0: 68 65 6e 20 73 74 69 63 6b 73 20 61 6e 20 65 78  hen sticks an ex
23e0: 74 72 61 20 30 20 69 6e 20 68 65 72 65 3b 20 52  tra 0 in here; R
23f0: 43 53 20 64 6f 65 73 20 6e 6f 74 2e 0a 20 20 20  CS does not..   
2400: 20 23 20 41 6e 64 20 74 68 65 20 6c 61 73 74 20   # And the last 
2410: 64 69 67 69 74 20 67 72 6f 75 70 2e 0a 0a 20 20  digit group...  
2420: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65 76    variable myrev
2430: 6e 72 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65  nr     {} ; # Re
2440: 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 6f 66  vision number of
2450: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a 20   the revision.. 
2460: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 61     variable myda
2470: 74 65 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 54  te      {} ; # T
2480: 69 6d 65 73 74 61 6d 70 20 6f 66 20 74 68 65 20  imestamp of the 
2490: 72 65 76 69 73 69 6f 6e 2c 20 73 65 63 6f 6e 64  revision, second
24a0: 73 20 73 69 6e 63 65 20 65 70 6f 63 68 0a 20 20  s since epoch.  
24b0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6f 72 69    variable myori
24c0: 67 64 61 74 65 20 20 7b 7d 20 3b 20 23 20 4f 72  gdate  {} ; # Or
24d0: 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66 69 65  iginal unmodifie
24e0: 64 20 74 69 6d 65 73 74 61 6d 70 2e 0a 20 20 20  d timestamp..   
24f0: 20 76 61 72 69 61 62 6c 65 20 6d 79 73 74 61 74   variable mystat
2500: 65 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 74 61  e     {} ; # Sta
2510: 74 65 20 6f 66 20 74 68 65 20 72 65 76 69 73 69  te of the revisi
2520: 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  on..    variable
2530: 20 6d 79 66 69 6c 65 20 20 20 20 20 20 7b 7d 20   myfile      {} 
2540: 3b 20 23 20 52 65 66 20 74 6f 20 74 68 65 20 66  ; # Ref to the f
2550: 69 6c 65 20 6f 62 6a 65 63 74 20 74 68 65 20 72  ile object the r
2560: 65 76 69 73 69 6f 6e 20 62 65 6c 6f 6e 67 73 20  evision belongs 
2570: 74 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  to..    variable
2580: 20 6d 79 74 65 78 74 20 20 20 20 20 20 7b 7d 20   mytext      {} 
2590: 3b 20 23 20 52 61 6e 67 65 20 6f 66 20 74 68 65  ; # Range of the
25a0: 20 28 64 65 6c 74 61 29 20 74 65 78 74 20 66 6f   (delta) text fo
25b0: 72 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20  r this revision 
25c0: 69 6e 20 74 68 65 20 66 69 6c 65 2e 0a 20 20 20  in the file..   
25d0: 20 76 61 72 69 61 62 6c 65 20 6d 79 6d 65 74 61   variable mymeta
25e0: 69 64 20 20 20 20 7b 7d 20 3b 20 23 20 49 64 20  id    {} ; # Id 
25f0: 6f 66 20 74 68 65 20 6d 65 74 61 20 64 61 74 61  of the meta data
2600: 20 67 72 6f 75 70 20 74 68 65 20 72 65 76 69 73   group the revis
2610: 69 6f 6e 0a 09 09 09 20 20 20 20 20 20 23 20 62  ion....      # b
2620: 65 6c 6f 6e 67 73 20 74 6f 2e 20 54 68 69 73 20  elongs to. This 
2630: 69 73 20 6c 61 74 65 72 20 75 73 65 64 20 74 6f  is later used to
2640: 20 70 75 74 0a 09 09 09 20 20 20 20 20 20 23 20   put....      # 
2650: 74 68 65 20 66 69 6c 65 20 72 65 76 69 73 69 6f  the file revisio
2660: 6e 73 20 69 6e 74 6f 20 70 72 65 6c 69 6d 69 6e  ns into prelimin
2670: 61 72 79 0a 09 09 09 20 20 20 20 20 20 23 20 63  ary....      # c
2680: 68 61 6e 67 65 73 65 74 73 20 28 61 6b 61 20 70  hangesets (aka p
2690: 72 6f 6a 65 63 74 20 72 65 76 69 73 69 6f 6e 73  roject revisions
26a0: 29 2e 0a 09 09 09 20 20 20 20 20 20 23 20 54 68  ).....      # Th
26b0: 69 73 20 69 64 20 65 6e 63 6f 64 65 73 20 34 20  is id encodes 4 
26c0: 70 69 65 63 65 73 20 6f 66 20 64 61 74 61 2c 0a  pieces of data,.
26d0: 09 09 09 20 20 20 20 20 20 23 20 6e 61 6d 65 6c  ...      # namel
26e0: 79 3a 20 74 68 65 20 70 72 6f 6a 65 63 74 20 61  y: the project a
26f0: 6e 64 20 62 72 61 6e 63 68 20 74 68 65 0a 09 09  nd branch the...
2700: 09 20 20 20 20 20 20 23 20 72 65 76 69 73 69 6f  .      # revisio
2710: 6e 20 77 61 73 20 63 6f 6d 6d 69 74 74 65 64 20  n was committed 
2720: 74 6f 2c 20 74 68 65 20 61 75 74 68 6f 72 0a 09  to, the author..
2730: 09 09 20 20 20 20 20 20 23 20 77 68 6f 20 64 69  ..      # who di
2740: 64 20 74 68 65 20 63 6f 6d 6d 69 74 2c 20 61 6e  d the commit, an
2750: 64 20 74 68 65 20 6d 65 73 73 61 67 65 0a 09 09  d the message...
2760: 09 20 20 20 20 20 20 23 20 75 73 65 64 2e 0a 20  .      # used.. 
2770: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6c 6f     variable mylo
2780: 64 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52  d       {} ; # R
2790: 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20  eference to the 
27a0: 6c 69 6e 65 2d 6f 66 2d 64 65 76 65 6c 6f 70 6d  line-of-developm
27b0: 65 6e 74 0a 09 09 09 20 20 20 20 20 20 23 20 6f  ent....      # o
27c0: 62 6a 65 63 74 20 74 68 65 20 72 65 76 69 73 69  bject the revisi
27d0: 6f 6e 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 20 41  on belongs to. A
27e0: 6e 0a 09 09 09 20 20 20 20 20 20 23 20 61 6c 74  n....      # alt
27f0: 65 72 6e 61 74 69 76 65 20 69 64 69 6f 6d 20 77  ernative idiom w
2800: 6f 75 6c 64 20 62 65 20 74 6f 20 63 61 6c 6c 20  ould be to call 
2810: 69 74 0a 09 09 09 20 20 20 20 20 20 23 20 74 68  it....      # th
2820: 65 20 62 72 61 6e 63 68 20 74 68 65 20 72 65 76  e branch the rev
2830: 69 73 69 6f 6e 20 69 73 20 6f 6e 2e 20 54 68 69  ision is on. Thi
2840: 73 0a 09 09 09 20 20 20 20 20 20 23 20 72 65 66  s....      # ref
2850: 65 72 65 6e 63 65 20 69 73 20 74 6f 20 61 20 70  erence is to a p
2860: 72 6f 6a 65 63 74 2d 6c 65 76 65 6c 20 6f 62 6a  roject-level obj
2870: 65 63 74 0a 09 09 09 20 20 20 20 20 20 23 20 28  ect....      # (
2880: 73 79 6d 62 6f 6c 20 6f 72 20 74 72 75 6e 6b 29  symbol or trunk)
2890: 2e 0a 0a 20 20 20 20 23 20 42 61 73 69 63 20 70  ...    # Basic p
28a0: 61 72 65 6e 74 2f 63 68 69 6c 64 20 6c 69 6e 6b  arent/child link
28b0: 61 67 65 20 28 6c 69 6e 65 73 20 6f 66 20 64 65  age (lines of de
28c0: 76 65 6c 6f 70 6d 65 6e 74 29 0a 0a 20 20 20 20  velopment)..    
28d0: 76 61 72 69 61 62 6c 65 20 6d 79 70 61 72 65 6e  variable myparen
28e0: 74 20 7b 7d 20 3b 20 23 20 52 65 66 20 74 6f 20  t {} ; # Ref to 
28f0: 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e 20  parent revision 
2900: 6f 62 6a 65 63 74 2e 20 4c 69 6e 6b 20 72 65 71  object. Link req
2910: 75 69 72 65 64 20 62 65 63 61 75 73 65 20 6f 66  uired because of
2920: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
2930: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 27 63            ; # 'c
2940: 76 73 61 64 6d 69 6e 20 2d 6f 27 2c 20 77 68 69  vsadmin -o', whi
2950: 63 68 20 63 61 6e 20 63 72 65 61 74 65 20 61 72  ch can create ar
2960: 62 69 74 72 61 72 79 20 67 61 70 73 20 69 6e 20  bitrary gaps in 
2970: 74 68 65 0a 20 20 20 20 23 20 20 20 20 20 20 20  the.    #       
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
2990: 20 6e 75 6d 62 65 72 69 6e 67 20 73 65 71 75 65   numbering seque
29a0: 6e 63 65 2e 20 54 68 69 73 20 69 73 20 69 6e 20  nce. This is in 
29b0: 74 68 65 20 73 61 6d 65 20 6c 69 6e 65 20 6f 66  the same line of
29c0: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 0a 20 20 20   development.   
29d0: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
29e0: 20 20 20 20 20 20 3b 20 23 20 4e 6f 74 65 3a 20        ; # Note: 
29f0: 46 6f 72 20 74 68 65 20 66 69 72 73 74 20 72 65  For the first re
2a00: 76 69 73 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e  vision on a bran
2a10: 63 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a  ch the revision.
2a20: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
2a30: 20 20 20 20 20 20 20 20 20 3b 20 23 20 69 74 20           ; # it 
2a40: 77 61 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d  was spawned from
2a50: 20 69 73 20 74 68 65 20 70 61 72 65 6e 74 2e 20   is the parent. 
2a60: 4f 6e 6c 79 20 74 68 65 20 72 6f 6f 74 20 72 65  Only the root re
2a70: 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 20 20 20  vision.    #    
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a90: 3b 20 23 20 6f 66 20 6d 79 66 69 6c 65 27 73 20  ; # of myfile's 
2aa0: 72 65 76 69 73 69 6f 6e 20 74 72 65 65 20 68 61  revision tree ha
2ab0: 73 20 6e 6f 74 68 69 6e 67 20 73 65 74 20 68 65  s nothing set he
2ac0: 72 65 2e 0a 20 20 20 20 23 20 20 20 20 20 20 20  re..    #       
2ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
2ae0: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
2af0: 79 63 68 69 6c 64 20 20 7b 7d 20 3b 20 23 20 52  ychild  {} ; # R
2b00: 65 66 20 74 6f 20 74 68 65 20 70 72 69 6d 61 72  ef to the primar
2b10: 79 20 63 68 69 6c 64 20 72 65 76 69 73 69 6f 6e  y child revision
2b20: 20 6f 62 6a 65 63 74 2c 20 69 2e 65 2e 20 74 68   object, i.e. th
2b30: 65 20 6e 65 78 74 0a 20 20 20 20 23 20 20 20 20  e next.    #    
2b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b50: 3b 20 23 20 72 65 76 69 73 69 6f 6e 20 69 6e 20  ; # revision in 
2b60: 74 68 65 20 73 61 6d 65 20 6c 69 6e 65 20 6f 66  the same line of
2b70: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a 0a 20   development... 
2b80: 20 20 20 23 20 42 72 61 6e 63 68 20 6c 69 6e 6b     # Branch link
2b90: 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  age ____________
2ba0: 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 76 61  ________..    va
2bb0: 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 65  riable mybranche
2bc0: 73 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73  s     {} ; # Lis
2bd0: 74 20 6f 66 20 74 68 65 20 62 72 61 6e 63 68 65  t of the branche
2be0: 73 20 28 6f 62 6a 73 29 20 73 70 61 77 6e 65 64  s (objs) spawned
2bf0: 20 62 79 20 74 68 69 73 20 72 65 76 69 73 69 6f   by this revisio
2c00: 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  n..    variable 
2c10: 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b  myparentbranch {
2c20: 7d 20 3b 20 23 20 46 6f 72 20 74 68 65 20 66 69  } ; # For the fi
2c30: 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20  rst revision on 
2c40: 61 20 62 72 61 6e 63 68 20 74 68 65 20 72 65 6c  a branch the rel
2c50: 65 76 61 6e 74 0a 20 20 20 20 23 20 20 20 20 20  evant.    #     
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c70: 20 20 20 20 20 3b 20 23 20 62 72 61 6e 63 68 20       ; # branch 
2c80: 6f 62 6a 65 63 74 2e 20 54 68 69 73 20 61 6c 73  object. This als
2c90: 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20 64  o allows us to d
2ca0: 65 74 65 72 6d 69 6e 65 20 69 66 0a 20 20 20 20  etermine if.    
2cb0: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
2cc0: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 6d             ; # m
2cd0: 79 70 61 72 65 6e 74 20 69 73 20 69 6e 20 74 68  yparent is in th
2ce0: 65 20 73 61 6d 65 20 4c 4f 44 2c 20 6f 72 20 74  e same LOD, or t
2cf0: 68 65 20 72 65 76 69 73 69 6f 6e 20 74 68 65 0a  he revision the.
2d00: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
2d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b                 ;
2d20: 20 23 20 62 72 61 6e 63 68 20 73 70 61 77 6e 65   # branch spawne
2d30: 64 20 66 72 6f 6d 2e 0a 0a 20 20 20 20 23 20 4c  d from...    # L
2d40: 69 73 74 20 6f 66 20 74 68 65 20 72 65 76 69 73  ist of the revis
2d50: 69 6f 6e 20 6f 62 6a 65 63 74 73 20 6f 66 20 74  ion objects of t
2d60: 68 65 20 66 69 72 73 74 20 63 6f 6d 6d 69 74 73  he first commits
2d70: 20 6f 6e 20 61 6e 79 0a 20 20 20 20 23 20 62 72   on any.    # br
2d80: 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 62  anches spawned b
2d90: 79 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20  y this revision 
2da0: 6f 6e 20 77 68 69 63 68 20 63 6f 6d 6d 69 74 73  on which commits
2db0: 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20 23   occurred..    #
2dc0: 20 54 68 69 73 20 64 65 70 65 6e 64 65 6e 63 79   This dependency
2dd0: 20 69 73 20 6b 65 70 74 20 65 78 70 6c 69 63 69   is kept explici
2de0: 74 6c 79 20 62 65 63 61 75 73 65 20 6f 74 68 65  tly because othe
2df0: 72 77 69 73 65 20 61 0a 20 20 20 20 23 20 72 65  rwise a.    # re
2e00: 76 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74 6f 70 6f  vision-only topo
2e10: 6c 6f 67 69 63 61 6c 20 73 6f 72 74 20 77 6f 75  logical sort wou
2e20: 6c 64 20 6d 69 73 73 20 74 68 65 20 64 65 70 65  ld miss the depe
2e30: 6e 64 65 6e 63 79 20 74 68 61 74 0a 20 20 20 20  ndency that.    
2e40: 23 20 65 78 69 73 74 73 20 76 69 61 20 2d 3e 20  # exists via -> 
2e50: 6d 79 62 72 61 6e 63 68 65 73 2e 0a 0a 20 20 20  mybranches...   
2e60: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e   variable mybran
2e70: 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d 20 3b 20  chchildren {} ; 
2e80: 23 20 4c 69 73 74 20 6f 66 20 74 68 65 20 72 65  # List of the re
2e90: 76 69 73 69 6f 6e 73 20 28 6f 62 6a 73 29 20 77  visions (objs) w
2ea0: 68 69 63 68 20 61 72 65 20 74 68 65 20 66 69 72  hich are the fir
2eb0: 73 74 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  st.    #        
2ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ed0: 20 20 20 20 3b 20 23 20 63 6f 6d 6d 69 74 73 20      ; # commits 
2ee0: 6f 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 62 72  on any of the br
2ef0: 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20 66  anches spawned f
2f00: 72 6f 6d 20 74 68 69 73 0a 20 20 20 20 23 20 20  rom this.    #  
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f20: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 72 65            ; # re
2f30: 76 69 73 69 6f 6e 2e 20 54 68 65 20 64 65 70 65  vision. The depe
2f40: 6e 64 65 6e 63 79 20 69 73 20 6b 65 70 74 20 65  ndency is kept e
2f50: 78 70 6c 69 63 69 74 6c 79 20 74 6f 0a 20 20 20  xplicitly to.   
2f60: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
2f80: 23 20 65 6e 73 75 72 65 20 74 68 61 74 20 61 20  # ensure that a 
2f90: 72 65 76 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74 6f  revision-only to
2fa0: 70 6f 6c 6f 67 69 63 61 6c 20 73 6f 72 74 20 77  pological sort w
2fb0: 69 6c 6c 0a 20 20 20 20 23 20 20 20 20 20 20 20  ill.    #       
2fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2fd0: 20 20 20 20 20 3b 20 23 20 6e 6f 74 20 6d 69 73       ; # not mis
2fe0: 73 20 69 74 2c 20 61 73 20 69 74 20 6f 74 68 65  s it, as it othe
2ff0: 72 77 69 73 65 20 65 78 69 73 74 73 20 6f 6e 6c  rwise exists onl
3000: 79 20 76 69 61 0a 20 20 20 20 23 20 20 20 20 20  y via.    #     
3010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3020: 20 20 20 20 20 20 20 3b 20 23 20 6d 79 62 72 61         ; # mybra
3030: 6e 63 68 65 73 2e 0a 0a 20 20 20 20 23 20 54 61  nches...    # Ta
3040: 67 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f  g linkage ______
3050: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
3060: 5f 5f 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65  __..    variable
3070: 20 6d 79 74 61 67 73 20 7b 7d 20 3b 20 23 20 4c   mytags {} ; # L
3080: 69 73 74 20 6f 66 20 74 61 67 73 20 28 6f 62 6a  ist of tags (obj
3090: 73 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  s) associated wi
30a0: 74 68 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e  th this revision
30b0: 2e 0a 0a 20 20 20 20 23 20 4d 6f 72 65 20 64 65  ...    # More de
30c0: 72 69 76 65 64 20 64 61 74 61 0a 0a 20 20 20 20  rived data..    
30d0: 76 61 72 69 61 62 6c 65 20 6d 79 6f 70 65 72 61  variable myopera
30e0: 74 69 6f 6e 20 20 20 20 20 20 20 20 7b 7d 20 3b  tion        {} ;
30f0: 20 23 20 4f 6e 65 20 6f 66 20 27 61 64 64 27 2c   # One of 'add',
3100: 20 27 63 68 61 6e 67 65 27 2c 20 27 64 65 6c 65   'change', 'dele
3110: 74 65 27 2c 20 6f 72 0a 09 09 09 20 20 20 20 20  te', or....     
3120: 20 20 20 20 20 20 20 20 23 20 27 6e 6f 74 68 69          # 'nothi
3130: 6e 67 27 2e 20 44 65 72 69 76 65 64 20 66 72 6f  ng'. Derived fro
3140: 6d 20 6f 75 72 20 61 6e 64 0a 09 09 09 20 20 20  m our and....   
3150: 20 20 20 20 20 20 20 20 20 20 23 20 69 74 73 20            # its 
3160: 70 61 72 65 6e 74 27 73 20 73 74 61 74 65 2e 0a  parent's state..
3170: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69      variable myi
3180: 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68  sondefaultbranch
3190: 20 30 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66   0 ; # Boolean f
31a0: 6c 61 67 2c 20 73 65 74 20 69 66 20 74 68 65 0a  lag, set if the.
31b0: 09 09 09 09 20 20 20 20 20 23 20 72 65 76 69 73  ....     # revis
31c0: 69 6f 6e 20 69 73 20 6f 6e 20 74 68 65 20 6e 6f  ion is on the no
31d0: 6e 2d 74 72 75 6e 6b 0a 09 09 09 09 20 20 20 20  n-trunk.....    
31e0: 20 23 20 64 65 66 61 75 6c 74 20 62 72 61 6e 63   # default branc
31f0: 68 2c 20 61 6b 61 20 76 65 6e 64 6f 72 0a 09 09  h, aka vendor...
3200: 09 09 20 20 20 20 20 23 20 62 72 61 6e 63 68 2e  ..     # branch.
3210: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
3220: 64 62 70 61 72 65 6e 74 20 20 20 20 20 20 20 20  dbparent        
3230: 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63   {} ; # Referenc
3240: 65 20 74 6f 20 74 68 65 20 6c 61 73 74 20 72 65  e to the last re
3250: 76 69 73 69 6f 6e 0a 09 09 09 09 20 20 20 20 20  vision.....     
3260: 23 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72 20  # on the vendor 
3270: 62 72 61 6e 63 68 20 69 66 20 74 68 69 73 20 69  branch if this i
3280: 73 0a 09 09 09 09 20 20 20 20 20 23 20 74 68 65  s.....     # the
3290: 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20 6f   primary child o
32a0: 66 20 74 68 65 0a 09 09 09 09 20 20 20 20 20 23  f the.....     #
32b0: 20 72 65 67 75 6c 61 72 20 72 6f 6f 74 2e 0a 20   regular root.. 
32c0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 62     variable mydb
32d0: 63 68 69 6c 64 20 20 20 20 20 20 20 20 20 20 7b  child          {
32e0: 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20  } ; # Reference 
32f0: 74 6f 20 74 68 65 20 70 72 69 6d 61 72 79 20 63  to the primary c
3300: 68 69 6c 64 0a 09 09 09 09 20 20 20 20 20 23 20  hild.....     # 
3310: 6f 66 20 74 68 65 20 72 65 67 75 6c 61 72 20 72  of the regular r
3320: 6f 6f 74 20 69 66 20 74 68 69 73 20 69 73 0a 09  oot if this is..
3330: 09 09 09 20 20 20 20 20 23 20 74 68 65 20 6c 61  ...     # the la
3340: 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74  st revision on t
3350: 68 65 20 76 65 6e 64 6f 72 0a 09 09 09 09 20 20  he vendor.....  
3360: 20 20 20 23 20 62 72 61 6e 63 68 2e 0a 0a 20 20     # branch...  
3370: 20 20 23 20 64 65 61 64 28 73 65 6c 66 29 20 78    # dead(self) x
3380: 20 64 65 61 64 28 70 61 72 65 6e 74 29 20 2d 3e   dead(parent) ->
3390: 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 20 20 74   operation.    t
33a0: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6f 70  ypevariable myop
33b0: 73 74 61 74 65 20 2d 61 72 72 61 79 20 7b 0a 09  state -array {..
33c0: 7b 30 20 30 7d 20 63 68 61 6e 67 65 0a 09 7b 30  {0 0} change..{0
33d0: 20 31 7d 20 64 65 6c 65 74 65 0a 09 7b 31 20 30   1} delete..{1 0
33e0: 7d 20 61 64 64 0a 09 7b 31 20 31 7d 20 6e 6f 74  } add..{1 1} not
33f0: 68 69 6e 67 0a 20 20 20 20 7d 0a 0a 20 20 20 20  hing.    }..    
3400: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
3410: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
3420: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49  #######.    ## I
3430: 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a  nternal methods.
3440: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
3450: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
3460: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
3470: 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f   ## Configuratio
3480: 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68  n..    pragma -h
3490: 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f  astypeinfo    no
34a0: 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69 6e    ; # no type in
34b0: 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20  trospection.    
34c0: 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f 20  pragma -hasinfo 
34d0: 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e         no  ; # n
34e0: 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 70  o object introsp
34f0: 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d  ection.    pragm
3500: 61 20 2d 73 69 6d 70 6c 65 64 69 73 70 61 74 63  a -simpledispatc
3510: 68 20 79 65 73 20 3b 20 23 20 73 69 6d 70 6c 65  h yes ; # simple
3520: 20 66 61 73 74 20 64 69 73 70 61 74 63 68 0a 0a   fast dispatch..
3530: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
3540: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
3550: 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e  ###########.}..n
3560: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a  amespace eval ::
3570: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
3580: 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 7b 0a  rt::cvs::file {.
3590: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78      namespace ex
35a0: 70 6f 72 74 20 72 65 76 0a 20 20 20 20 6e 61 6d  port rev.    nam
35b0: 65 73 70 61 63 65 20 65 76 61 6c 20 72 65 76 20  espace eval rev 
35c0: 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  {..namespace imp
35d0: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a  ort ::vc::tools:
35e0: 3a 6d 69 73 63 3a 3a 2a 0a 20 20 20 20 7d 0a 7d  :misc::*.    }.}
35f0: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
3600: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
3610: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
3620: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
3630: 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67  ## Ready..packag
3640: 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f  e provide vc::fo
3650: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
3660: 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 31 2e 30  s::file::rev 1.0
3670: 0a 72 65 74 75 72 6e 0a                          .return.