Hex Artifact Content
Not logged in

Artifact 383bf3739a2794d4f51a2b0b1b85c2c8f68fa47c:

File tools/cvs2fossil/lib/c2f_frev.tcl part of check-in [436f17a5f0] - Simplified the code for excluding non-trunk revisions a bit, using higher-level methods for some changes. Added missing revision destruction. by aku on 2007-10-21 07:08:28.

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 63 68 61  ..    method cha
10d0: 6e 67 65 70 61 72 65 6e 74 20 7b 70 61 72 65 6e  ngeparent {paren
10e0: 74 7d 20 7b 20 73 65 74 20 6d 79 70 61 72 65 6e  t} { set myparen
10f0: 74 20 24 70 61 72 65 6e 74 20 3b 20 72 65 74 75  t $parent ; retu
1100: 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  rn }.    method 
1110: 63 68 61 6e 67 65 63 68 69 6c 64 20 20 7b 63 68  changechild  {ch
1120: 69 6c 64 7d 20 20 7b 20 73 65 74 20 6d 79 63 68  ild}  { set mych
1130: 69 6c 64 20 20 24 63 68 69 6c 64 20 20 3b 20 72  ild  $child  ; r
1140: 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74  eturn }..    met
1150: 68 6f 64 20 70 61 72 65 6e 74 20 7b 7d 20 7b 20  hod parent {} { 
1160: 72 65 74 75 72 6e 20 24 6d 79 70 61 72 65 6e 74  return $myparent
1170: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 68   }.    method ch
1180: 69 6c 64 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e  ild  {} { return
1190: 20 24 6d 79 63 68 69 6c 64 20 20 7d 0a 0a 20 20   $mychild  }..  
11a0: 20 20 23 20 42 72 61 6e 63 68 20 6c 69 6e 6b 61    # Branch linka
11b0: 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ge _____________
11c0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d  _________..    m
11d0: 65 74 68 6f 64 20 73 65 74 70 61 72 65 6e 74 62  ethod setparentb
11e0: 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 7d 20 7b  ranch {branch} {
11f0: 0a 09 69 66 20 7b 24 6d 79 70 61 72 65 6e 74 62  ..if {$myparentb
1200: 72 61 6e 63 68 20 6e 65 20 22 22 7d 20 7b 20 74  ranch ne ""} { t
1210: 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61 6c 20  rouble internal 
1220: 22 42 72 61 6e 63 68 20 70 61 72 65 6e 74 20 61  "Branch parent a
1230: 6c 72 65 61 64 79 20 64 65 66 69 6e 65 64 22 20  lready defined" 
1240: 7d 0a 09 73 65 74 20 6d 79 70 61 72 65 6e 74 62  }..set myparentb
1250: 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 72  ranch $branch..r
1260: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
1270: 20 6d 65 74 68 6f 64 20 68 61 73 70 61 72 65 6e   method hasparen
1280: 74 62 72 61 6e 63 68 20 7b 7d 20 7b 20 72 65 74  tbranch {} { ret
1290: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 70 61  urn [expr {$mypa
12a0: 72 65 6e 74 62 72 61 6e 63 68 20 6e 65 20 22 22  rentbranch ne ""
12b0: 7d 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  }] }.    method 
12c0: 68 61 73 62 72 61 6e 63 68 65 73 20 20 20 20 20  hasbranches     
12d0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 5b 6c 6c 65  {} { return [lle
12e0: 6e 67 74 68 20 24 6d 79 62 72 61 6e 63 68 65 73  ngth $mybranches
12f0: 5d 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ] }..    method 
1300: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d 20  parentbranch {} 
1310: 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 61 72 65  { return $mypare
1320: 6e 74 62 72 61 6e 63 68 20 7d 0a 20 20 20 20 6d  ntbranch }.    m
1330: 65 74 68 6f 64 20 62 72 61 6e 63 68 65 73 20 20  ethod branches  
1340: 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24     {} { return $
1350: 6d 79 62 72 61 6e 63 68 65 73 20 7d 0a 0a 20 20  mybranches }..  
1360: 20 20 6d 65 74 68 6f 64 20 61 64 64 62 72 61 6e    method addbran
1370: 63 68 20 7b 62 72 61 6e 63 68 7d 20 7b 0a 09 6c  ch {branch} {..l
1380: 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63 68 65  append mybranche
1390: 73 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75 72  s $branch..retur
13a0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
13b0: 68 6f 64 20 61 64 64 63 68 69 6c 64 6f 6e 62 72  hod addchildonbr
13c0: 61 6e 63 68 20 7b 63 68 69 6c 64 7d 20 7b 0a 09  anch {child} {..
13d0: 6c 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63 68  lappend mybranch
13e0: 63 68 69 6c 64 72 65 6e 20 24 63 68 69 6c 64 0a  children $child.
13f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1400: 20 20 20 6d 65 74 68 6f 64 20 63 75 74 66 72 6f     method cutfro
1410: 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d  mparentbranch {}
1420: 20 7b 20 73 65 74 20 6d 79 70 61 72 65 6e 74 62   { set myparentb
1430: 72 61 6e 63 68 20 22 22 20 3b 20 72 65 74 75 72  ranch "" ; retur
1440: 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  n }..    method 
1450: 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 7b 62 72  removebranch {br
1460: 61 6e 63 68 7d 20 7b 0a 09 6c 64 65 6c 65 74 65  anch} {..ldelete
1470: 20 6d 79 62 72 61 6e 63 68 65 73 20 24 62 72 61   mybranches $bra
1480: 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  nch..return.    
1490: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65  }..    method re
14a0: 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63  movechildonbranc
14b0: 68 20 7b 72 65 76 7d 20 7b 0a 09 6c 64 65 6c 65  h {rev} {..ldele
14c0: 74 65 20 6d 79 62 72 61 6e 63 68 63 68 69 6c 64  te mybranchchild
14d0: 72 65 6e 20 24 72 65 76 0a 09 72 65 74 75 72 6e  ren $rev..return
14e0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
14f0: 6f 64 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20  od sortbranches 
1500: 7b 7d 20 7b 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e  {} {..if {![llen
1510: 67 74 68 20 24 6d 79 62 72 61 6e 63 68 65 73 5d  gth $mybranches]
1520: 7d 20 72 65 74 75 72 6e 0a 0a 09 23 20 53 6f 72  } return...# Sor
1530: 74 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 73  t the branches s
1540: 70 61 77 6e 65 64 20 62 79 20 74 68 69 73 20 72  pawned by this r
1550: 65 76 69 73 69 6f 6e 20 69 6e 20 63 72 65 61 74  evision in creat
1560: 69 6f 6e 0a 09 23 20 6f 72 64 65 72 2e 20 54 6f  ion..# order. To
1570: 20 68 65 6c 70 20 69 6e 20 74 68 69 73 20 6f 75   help in this ou
1580: 72 20 66 69 6c 65 20 67 61 76 65 20 61 6c 6c 20  r file gave all 
1590: 62 72 61 6e 63 68 65 73 20 61 20 70 6f 73 69 74  branches a posit
15a0: 69 6f 6e 0a 09 23 20 69 64 2c 20 69 6e 20 6f 72  ion..# id, in or
15b0: 64 65 72 20 6f 66 20 74 68 65 69 72 20 64 65 66  der of their def
15c0: 69 6e 69 74 69 6f 6e 20 62 79 20 74 68 65 20 52  inition by the R
15d0: 43 53 20 61 72 63 68 69 76 65 2e 0a 09 23 0a 09  CS archive...#..
15e0: 23 20 54 68 65 20 63 72 65 61 74 69 6f 6e 20 6f  # The creation o
15f0: 72 64 65 72 20 69 73 20 28 61 70 70 61 72 65 6e  rder is (apparen
1600: 74 6c 79 29 20 74 68 65 20 72 65 76 65 72 73 65  tly) the reverse
1610: 20 6f 66 20 74 68 65 0a 09 23 20 64 65 66 69 6e   of the..# defin
1620: 69 74 69 6f 6e 20 6f 72 64 65 72 2e 20 28 49 66  ition order. (If
1630: 20 61 20 62 72 61 6e 63 68 20 69 73 20 63 72 65   a branch is cre
1640: 61 74 65 64 20 74 68 65 6e 20 64 65 6c 65 74 65  ated then delete
1650: 64 2c 20 61 0a 09 23 20 6c 61 74 65 72 20 62 72  d, a..# later br
1660: 61 6e 63 68 20 63 61 6e 20 62 65 20 61 73 73 69  anch can be assi
1670: 67 6e 65 64 20 74 68 65 20 72 65 63 79 63 6c 65  gned the recycle
1680: 64 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 3b  d branch number;
1690: 0a 09 23 20 74 68 65 72 65 66 6f 72 65 20 62 72  ..# therefore br
16a0: 61 6e 63 68 20 6e 75 6d 62 65 72 73 20 61 72 65  anch numbers are
16b0: 20 6e 6f 74 20 61 6e 20 69 6e 64 69 63 61 74 69   not an indicati
16c0: 6f 6e 20 6f 66 20 63 72 65 61 74 69 6f 6e 0a 09  on of creation..
16d0: 23 20 6f 72 64 65 72 2e 29 0a 0a 09 73 65 74 20  # order.)...set 
16e0: 74 6d 70 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20  tmp {}..foreach 
16f0: 62 72 61 6e 63 68 20 24 6d 79 62 72 61 6e 63 68  branch $mybranch
1700: 65 73 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e  es {..    lappen
1710: 64 20 74 6d 70 20 5b 6c 69 73 74 20 24 62 72 61  d tmp [list $bra
1720: 6e 63 68 20 5b 24 62 72 61 6e 63 68 20 70 6f 73  nch [$branch pos
1730: 69 74 69 6f 6e 5d 5d 0a 09 7d 0a 0a 09 73 65 74  ition]]..}...set
1740: 20 6d 79 62 72 61 6e 63 68 65 73 20 7b 7d 0a 09   mybranches {}..
1750: 66 6f 72 65 61 63 68 20 69 74 65 6d 20 5b 6c 73  foreach item [ls
1760: 6f 72 74 20 2d 69 6e 64 65 78 20 31 20 2d 64 65  ort -index 1 -de
1770: 63 72 65 61 73 69 6e 67 20 24 74 6d 70 5d 20 7b  creasing $tmp] {
1780: 0a 09 20 20 20 20 73 74 72 75 63 74 3a 3a 6c 69  ..    struct::li
1790: 73 74 20 61 73 73 69 67 6e 20 24 69 74 65 6d 20  st assign $item 
17a0: 62 72 61 6e 63 68 20 70 6f 73 69 74 69 6f 6e 0a  branch position.
17b0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 62  .    lappend myb
17c0: 72 61 6e 63 68 65 73 20 24 62 72 61 6e 63 68 0a  ranches $branch.
17d0: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
17e0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6d 6f 76  ..    method mov
17f0: 65 62 72 61 6e 63 68 65 73 74 6f 20 7b 72 65 76  ebranchesto {rev
1800: 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 6f 64 20  } {..set revlod 
1810: 5b 24 72 65 76 20 6c 6f 64 5d 0a 09 66 6f 72 65  [$rev lod]..fore
1820: 61 63 68 20 62 72 61 6e 63 68 20 24 6d 79 62 72  ach branch $mybr
1830: 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 24 72  anches {..    $r
1840: 65 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 72  ev addbranch $br
1850: 61 6e 63 68 0a 09 20 20 20 20 24 62 72 61 6e 63  anch..    $branc
1860: 68 20 73 65 74 70 61 72 65 6e 74 20 24 72 65 76  h setparent $rev
1870: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65  ..    $branch se
1880: 74 6c 6f 64 20 24 72 65 76 6c 6f 64 0a 09 7d 0a  tlod $revlod..}.
1890: 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 72  .foreach branchr
18a0: 65 76 20 24 6d 79 62 72 61 6e 63 68 63 68 69 6c  ev $mybranchchil
18b0: 64 72 65 6e 20 7b 0a 09 20 20 20 20 24 72 65 76  dren {..    $rev
18c0: 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63   addchildonbranc
18d0: 68 20 24 62 72 61 6e 63 68 72 65 76 0a 09 20 20  h $branchrev..  
18e0: 20 20 24 62 72 61 6e 63 68 72 65 76 20 63 75 74    $branchrev cut
18f0: 66 72 6f 6d 70 61 72 65 6e 74 0a 09 20 20 20 20  fromparent..    
1900: 24 62 72 61 6e 63 68 72 65 76 20 73 65 74 70 61  $branchrev setpa
1910: 72 65 6e 74 20 24 72 65 76 0a 09 7d 0a 09 73 65  rent $rev..}..se
1920: 74 20 6d 79 62 72 61 6e 63 68 65 73 20 20 20 20  t mybranches    
1930: 20 20 20 7b 7d 0a 09 73 65 74 20 6d 79 62 72 61     {}..set mybra
1940: 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d 0a 09  nchchildren {}..
1950: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
1960: 20 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65 61    method removea
1970: 6c 6c 62 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a  llbranches {} {.
1980: 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 20  .foreach branch 
1990: 24 6d 79 62 72 61 6e 63 68 65 73 20 7b 0a 09 20  $mybranches {.. 
19a0: 20 20 20 24 62 72 61 6e 63 68 20 64 65 73 74 72     $branch destr
19b0: 6f 79 0a 09 7d 0a 09 73 65 74 20 6d 79 62 72 61  oy..}..set mybra
19c0: 6e 63 68 65 73 20 20 20 20 20 20 20 7b 7d 0a 09  nches       {}..
19d0: 73 65 74 20 6d 79 62 72 61 6e 63 68 63 68 69 6c  set mybranchchil
19e0: 64 72 65 6e 20 7b 7d 0a 09 72 65 74 75 72 6e 0a  dren {}..return.
19f0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 54 61 67      }..    # Tag
1a00: 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f   linkage _______
1a10: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1a20: 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 61  __..    method a
1a30: 64 64 74 61 67 20 7b 74 61 67 7d 20 7b 0a 09 6c  ddtag {tag} {..l
1a40: 61 70 70 65 6e 64 20 6d 79 74 61 67 73 20 24 74  append mytags $t
1a50: 61 67 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  ag..return.    }
1a60: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 74 61 67  ..    method tag
1a70: 73 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  s {} { return $m
1a80: 79 74 61 67 73 20 7d 0a 0a 20 20 20 20 6d 65 74  ytags }..    met
1a90: 68 6f 64 20 72 65 6d 6f 76 65 61 6c 6c 74 61 67  hod removealltag
1aa0: 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20  s {} {..foreach 
1ab0: 74 61 67 20 24 6d 79 74 61 67 73 20 7b 20 24 74  tag $mytags { $t
1ac0: 61 67 20 64 65 73 74 72 6f 79 20 7d 0a 09 73 65  ag destroy }..se
1ad0: 74 20 6d 79 74 61 67 73 20 7b 7d 0a 09 72 65 74  t mytags {}..ret
1ae0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
1af0: 65 74 68 6f 64 20 6d 6f 76 65 74 61 67 73 74 6f  ethod movetagsto
1b00: 20 7b 72 65 76 7d 20 7b 0a 09 73 65 74 20 72 65   {rev} {..set re
1b10: 76 6c 6f 64 20 5b 24 72 65 76 20 6c 6f 64 5d 0a  vlod [$rev lod].
1b20: 09 66 6f 72 65 61 63 68 20 74 61 67 20 24 6d 79  .foreach tag $my
1b30: 74 61 67 73 20 7b 0a 09 20 20 20 20 24 72 65 76  tags {..    $rev
1b40: 20 61 64 64 74 61 67 20 24 74 61 67 0a 09 20 20   addtag $tag..  
1b50: 20 20 24 74 61 67 20 73 65 74 74 61 67 72 65 76    $tag settagrev
1b60: 20 24 72 65 76 0a 09 20 20 20 20 24 74 61 67 20   $rev..    $tag 
1b70: 73 65 74 6c 6f 64 20 24 72 65 76 6c 6f 64 0a 09  setlod $revlod..
1b80: 7d 0a 09 73 65 74 20 6d 79 74 61 67 73 20 7b 7d  }..set mytags {}
1b90: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
1ba0: 20 20 20 20 23 20 67 65 6e 65 72 61 6c 20 73 79      # general sy
1bb0: 6d 62 6f 6c 20 6f 70 65 72 61 74 69 6f 6e 73 20  mbol operations 
1bc0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20  ___________..   
1bd0: 20 6d 65 74 68 6f 64 20 6d 6f 76 65 73 79 6d 62   method movesymb
1be0: 6f 6c 73 74 6f 20 7b 72 65 76 7d 20 7b 0a 09 23  olsto {rev} {..#
1bf0: 20 4d 6f 76 65 20 74 68 65 20 74 61 67 73 20 61   Move the tags a
1c00: 6e 64 20 62 72 61 6e 63 68 65 73 20 61 74 74 61  nd branches atta
1c10: 63 68 65 64 20 74 6f 20 74 68 69 73 20 72 65 76  ched to this rev
1c20: 69 73 69 6f 6e 20 74 6f 20 74 68 65 0a 09 23 20  ision to the..# 
1c30: 64 65 73 74 69 6e 61 74 69 6f 6e 20 61 6e 64 20  destination and 
1c40: 66 69 78 20 61 6c 6c 20 70 6f 69 6e 74 65 72 73  fix all pointers
1c50: 2e 0a 0a 09 24 73 65 6c 66 20 6d 6f 76 65 74 61  ....$self moveta
1c60: 67 73 74 6f 20 20 20 20 20 24 72 65 76 0a 09 24  gsto     $rev..$
1c70: 73 65 6c 66 20 6d 6f 76 65 62 72 61 6e 63 68 65  self movebranche
1c80: 73 74 6f 20 24 72 65 76 0a 09 72 65 74 75 72 6e  sto $rev..return
1c90: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 44 65  .    }..    # De
1ca0: 72 69 76 65 64 20 73 74 75 66 66 20 5f 5f 5f 5f  rived stuff ____
1cb0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1cc0: 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ___..    method 
1cd0: 64 65 74 65 72 6d 69 6e 65 6f 70 65 72 61 74 69  determineoperati
1ce0: 6f 6e 20 7b 7d 20 7b 0a 09 23 20 4c 6f 6f 6b 20  on {} {..# Look 
1cf0: 61 74 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  at the state of 
1d00: 62 6f 74 68 20 74 68 69 73 20 72 65 76 69 73 69  both this revisi
1d10: 6f 6e 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e  on and its paren
1d20: 74 20 74 6f 0a 09 23 20 64 65 74 65 72 6d 69 6e  t to..# determin
1d30: 65 20 74 68 65 20 74 79 70 65 20 6f 70 66 20 6f  e the type opf o
1d40: 70 65 72 61 74 69 6f 6e 20 77 68 69 63 68 20 77  peration which w
1d50: 61 73 20 70 65 72 66 6f 72 6d 65 64 20 28 61 64  as performed (ad
1d60: 64 2c 0a 09 23 20 6d 6f 64 69 66 79 2c 20 64 65  d,..# modify, de
1d70: 6c 65 74 65 2c 20 6e 6f 6e 65 29 2e 0a 09 23 0a  lete, none)...#.
1d80: 09 23 20 54 68 65 20 69 6d 70 6f 72 74 61 6e 74  .# The important
1d90: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
1da0: 64 65 61 64 20 76 73 20 6e 6f 74 2d 64 65 61 64  dead vs not-dead
1db0: 20 66 6f 72 20 62 6f 74 68 2c 0a 09 23 20 67 69   for both,..# gi
1dc0: 76 69 6e 67 20 72 69 73 65 20 74 6f 20 66 6f 75  ving rise to fou
1dd0: 72 20 70 6f 73 73 69 62 6c 65 20 74 79 70 65 73  r possible types
1de0: 2e 0a 0a 09 73 65 74 20 73 64 65 61 64 20 5b 65  ....set sdead [e
1df0: 78 70 72 20 7b 24 6d 79 73 74 61 74 65 20 65 71  xpr {$mystate eq
1e00: 20 22 64 65 61 64 22 7d 5d 0a 09 73 65 74 20 70   "dead"}]..set p
1e10: 64 65 61 64 20 5b 65 78 70 72 20 7b 24 6d 79 70  dead [expr {$myp
1e20: 61 72 65 6e 74 20 65 71 20 22 22 20 7c 7c 20 5b  arent eq "" || [
1e30: 24 6d 79 70 61 72 65 6e 74 20 73 74 61 74 65 5d  $myparent state]
1e40: 20 65 71 20 22 64 65 61 64 22 7d 5d 0a 0a 09 73   eq "dead"}]...s
1e50: 65 74 20 6d 79 6f 70 65 72 61 74 69 6f 6e 20 24  et myoperation $
1e60: 6d 79 6f 70 73 74 61 74 65 28 5b 6c 69 73 74 20  myopstate([list 
1e70: 24 70 64 65 61 64 20 24 73 64 65 61 64 5d 29 0a  $pdead $sdead]).
1e80: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1e90: 20 20 20 6d 65 74 68 6f 64 20 6f 70 65 72 61 74     method operat
1ea0: 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20  ion {} { return 
1eb0: 24 6d 79 6f 70 65 72 61 74 69 6f 6e 20 7d 0a 20  $myoperation }. 
1ec0: 20 20 20 6d 65 74 68 6f 64 20 72 65 74 79 70 65     method retype
1ed0: 20 7b 78 7d 20 7b 20 73 65 74 20 6d 79 6f 70 65   {x} { set myope
1ee0: 72 61 74 69 6f 6e 20 24 78 20 3b 20 72 65 74 75  ration $x ; retu
1ef0: 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64  rn }..    method
1f00: 20 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e   isondefaultbran
1f10: 63 68 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72  ch    {} { retur
1f20: 6e 20 24 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74  n $myisondefault
1f30: 62 72 61 6e 63 68 20 7d 0a 0a 20 20 20 20 6d 65  branch }..    me
1f40: 74 68 6f 64 20 73 65 74 6f 6e 64 65 66 61 75 6c  thod setondefaul
1f50: 74 62 72 61 6e 63 68 20 20 20 7b 78 7d 20 7b 20  tbranch   {x} { 
1f60: 73 65 74 20 6d 79 69 73 6f 6e 64 65 66 61 75 6c  set myisondefaul
1f70: 74 62 72 61 6e 63 68 20 24 78 20 3b 20 72 65 74  tbranch $x ; ret
1f80: 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f  urn }..    metho
1f90: 64 20 73 65 74 64 65 66 61 75 6c 74 62 72 61 6e  d setdefaultbran
1fa0: 63 68 63 68 69 6c 64 20 20 7b 72 65 76 7d 20 7b  chchild  {rev} {
1fb0: 20 73 65 74 20 6d 79 64 62 63 68 69 6c 64 20 24   set mydbchild $
1fc0: 72 65 76 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20  rev ; return }. 
1fd0: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 64 65 66     method setdef
1fe0: 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74  aultbranchparent
1ff0: 20 7b 72 65 76 7d 20 7b 0a 09 73 65 74 20 6d 79   {rev} {..set my
2000: 64 62 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09  dbparent $rev...
2010: 23 20 52 65 74 79 70 65 20 74 68 65 20 72 65 76  # Retype the rev
2020: 69 73 69 6f 6e 20 28 6d 61 79 20 63 68 61 6e 67  ision (may chang
2030: 65 20 66 72 6f 6d 20 27 61 64 64 27 20 74 6f 20  e from 'add' to 
2040: 27 63 68 61 6e 67 65 27 29 2e 0a 0a 09 73 65 74  'change')....set
2050: 20 73 64 65 61 64 20 5b 65 78 70 72 20 7b 24 6d   sdead [expr {$m
2060: 79 6f 70 65 72 61 74 69 6f 6e 20 20 20 20 20 6e  yoperation     n
2070: 65 20 22 63 68 61 6e 67 65 22 7d 5d 0a 09 73 65  e "change"}]..se
2080: 74 20 70 64 65 61 64 20 5b 65 78 70 72 20 7b 5b  t pdead [expr {[
2090: 24 72 65 76 20 6f 70 65 72 61 74 69 6f 6e 5d 20  $rev operation] 
20a0: 6e 65 20 22 63 68 61 6e 67 65 22 7d 5d 0a 09 73  ne "change"}]..s
20b0: 65 74 20 6d 79 6f 70 65 72 61 74 69 6f 6e 20 24  et myoperation $
20c0: 6d 79 6f 70 73 74 61 74 65 28 5b 6c 69 73 74 20  myopstate([list 
20d0: 24 70 64 65 61 64 20 24 73 64 65 61 64 5d 29 0a  $pdead $sdead]).
20e0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
20f0: 20 20 20 6d 65 74 68 6f 64 20 63 75 74 64 65 66     method cutdef
2100: 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74  aultbranchparent
2110: 20 7b 7d 20 7b 20 73 65 74 20 6d 79 64 62 70 61   {} { set mydbpa
2120: 72 65 6e 74 20 22 22 20 3b 20 72 65 74 75 72 6e  rent "" ; return
2130: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 75   }.    method cu
2140: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68  tdefaultbranchch
2150: 69 6c 64 20 20 7b 7d 20 7b 20 73 65 74 20 6d 79  ild  {} { set my
2160: 64 62 63 68 69 6c 64 20 20 22 22 20 3b 20 72 65  dbchild  "" ; re
2170: 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68  turn }..    meth
2180: 6f 64 20 64 65 66 61 75 6c 74 62 72 61 6e 63 68  od defaultbranch
2190: 63 68 69 6c 64 20 20 7b 7d 20 7b 20 72 65 74 75  child  {} { retu
21a0: 72 6e 20 24 6d 79 64 62 63 68 69 6c 64 20 7d 0a  rn $mydbchild }.
21b0: 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 61 75      method defau
21c0: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 7b  ltbranchparent {
21d0: 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 64 62  } { return $mydb
21e0: 70 61 72 65 6e 74 20 7d 0a 0a 20 20 20 20 6d 65  parent }..    me
21f0: 74 68 6f 64 20 68 61 73 64 65 66 61 75 6c 74 62  thod hasdefaultb
2200: 72 61 6e 63 68 63 68 69 6c 64 20 20 7b 7d 20 7b  ranchchild  {} {
2210: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24   return [expr {$
2220: 6d 79 64 62 63 68 69 6c 64 20 20 6e 65 20 22 22  mydbchild  ne ""
2230: 7d 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  }] }.    method 
2240: 68 61 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68  hasdefaultbranch
2250: 70 61 72 65 6e 74 20 7b 7d 20 7b 20 72 65 74 75  parent {} { retu
2260: 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 64 62 70  rn [expr {$mydbp
2270: 61 72 65 6e 74 20 6e 65 20 22 22 7d 5d 20 7d 0a  arent ne ""}] }.
2280: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
2290: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
22a0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
22b0: 20 23 23 20 54 79 70 65 20 41 50 49 0a 0a 20 20   ## Type API..  
22c0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 74    typemethod ist
22d0: 72 75 6e 6b 72 65 76 6e 72 20 7b 72 65 76 6e 72  runkrevnr {revnr
22e0: 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 65 78 70  } {..return [exp
22f0: 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 73 70 6c  r {[llength [spl
2300: 69 74 20 24 72 65 76 6e 72 20 2e 5d 5d 20 3d 3d  it $revnr .]] ==
2310: 20 32 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20   2}].    }..    
2320: 74 79 70 65 6d 65 74 68 6f 64 20 69 73 62 72 61  typemethod isbra
2330: 6e 63 68 72 65 76 6e 72 20 7b 72 65 76 6e 72 20  nchrevnr {revnr 
2340: 5f 20 62 76 7d 20 7b 0a 09 69 66 20 7b 5b 72 65  _ bv} {..if {[re
2350: 67 65 78 70 20 24 6d 79 62 72 61 6e 63 68 70 61  gexp $mybranchpa
2360: 74 74 65 72 6e 20 24 72 65 76 6e 72 20 2d 3e 20  ttern $revnr -> 
2370: 68 65 61 64 20 74 61 69 6c 5d 7d 20 7b 0a 09 20  head tail]} {.. 
2380: 20 20 20 75 70 76 61 72 20 31 20 24 62 76 20 62     upvar 1 $bv b
2390: 72 61 6e 63 68 6e 72 0a 09 20 20 20 20 73 65 74  ranchnr..    set
23a0: 20 62 72 61 6e 63 68 6e 72 20 24 7b 68 65 61 64   branchnr ${head
23b0: 7d 24 74 61 69 6c 0a 09 20 20 20 20 72 65 74 75  }$tail..    retu
23c0: 72 6e 20 31 0a 09 7d 0a 09 72 65 74 75 72 6e 20  rn 1..}..return 
23d0: 30 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70  0.    }..    typ
23e0: 65 6d 65 74 68 6f 64 20 32 62 72 61 6e 63 68 6e  emethod 2branchn
23f0: 72 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 23 20 49  r {revnr} {..# I
2400: 6e 70 75 74 20 69 73 20 61 20 62 72 61 6e 63 68  nput is a branch
2410: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72   revision number
2420: 2c 20 69 2e 65 2e 20 61 20 72 65 76 69 73 69 6f  , i.e. a revisio
2430: 6e 20 6e 75 6d 62 65 72 0a 09 23 20 77 69 74 68  n number..# with
2440: 20 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72 20   an even number 
2450: 6f 66 20 63 6f 6d 70 6f 6e 65 6e 74 73 3b 20 66  of components; f
2460: 6f 72 20 65 78 61 6d 70 6c 65 20 27 32 2e 39 2e  or example '2.9.
2470: 32 2e 31 27 0a 09 23 20 28 6e 65 76 65 72 20 27  2.1'..# (never '
2480: 32 2e 39 2e 32 27 20 6e 6f 72 20 27 32 2e 39 2e  2.9.2' nor '2.9.
2490: 30 2e 32 27 29 2e 20 20 54 68 65 20 72 65 74 75  0.2').  The retu
24a0: 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 0a  rn value is the.
24b0: 09 23 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72  .# branch number
24c0: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 27   (for example, '
24d0: 32 2e 39 2e 32 27 29 2e 20 20 46 6f 72 20 74 72  2.9.2').  For tr
24e0: 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09  unk revisions,..
24f0: 23 20 6c 69 6b 65 20 27 33 2e 34 27 2c 20 77 65  # like '3.4', we
2500: 20 72 65 74 75 72 6e 20 74 68 65 20 65 6d 70 74   return the empt
2510: 79 20 73 74 72 69 6e 67 2e 0a 0a 09 69 66 20 7b  y string....if {
2520: 5b 24 74 79 70 65 20 69 73 74 72 75 6e 6b 72 65  [$type istrunkre
2530: 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09  vnr $revnr]} {..
2540: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 09 7d      return ""..}
2550: 0a 09 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b  ..return [join [
2560: 6c 72 61 6e 67 65 20 5b 73 70 6c 69 74 20 24 72  lrange [split $r
2570: 65 76 6e 72 20 2e 5d 20 30 20 65 6e 64 2d 31 5d  evnr .] 0 end-1]
2580: 20 2e 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74   .].    }..    t
2590: 79 70 65 6d 65 74 68 6f 64 20 32 62 72 61 6e 63  ypemethod 2branc
25a0: 68 70 61 72 65 6e 74 72 65 76 6e 72 20 7b 62 72  hparentrevnr {br
25b0: 61 6e 63 68 6e 72 7d 20 7b 0a 09 23 20 43 68 6f  anchnr} {..# Cho
25c0: 70 20 74 68 65 20 6c 61 73 74 20 73 65 67 6d 65  p the last segme
25d0: 6e 74 20 6f 66 66 0a 09 72 65 74 75 72 6e 20 5b  nt off..return [
25e0: 6a 6f 69 6e 20 5b 6c 72 61 6e 67 65 20 5b 73 70  join [lrange [sp
25f0: 6c 69 74 20 24 62 72 61 6e 63 68 6e 72 20 2e 5d  lit $branchnr .]
2600: 20 30 20 65 6e 64 2d 31 5d 20 2e 5d 0a 20 20 20   0 end-1] .].   
2610: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   }..    # # ## #
2620: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
2630: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
2640: 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20 20      ## State..  
2650: 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d    typevariable m
2660: 79 62 72 61 6e 63 68 70 61 74 74 65 72 6e 20 7b  ybranchpattern {
2670: 5e 28 28 3f 3a 5c 64 2b 5c 2e 5c 64 2b 5c 2e 29  ^((?:\d+\.\d+\.)
2680: 2b 29 28 3f 3a 30 5c 2e 29 3f 28 5c 64 2b 29 24  +)(?:0\.)?(\d+)$
2690: 7d 0a 20 20 20 20 23 20 46 69 72 73 74 20 61 20  }.    # First a 
26a0: 6e 6f 6e 7a 65 72 6f 20 65 76 65 6e 20 6e 75 6d  nonzero even num
26b0: 62 65 72 20 6f 66 20 64 69 67 69 74 20 67 72 6f  ber of digit gro
26c0: 75 70 73 20 77 69 74 68 20 74 72 61 69 6c 69 6e  ups with trailin
26d0: 67 20 64 6f 74 0a 20 20 20 20 23 20 43 56 53 20  g dot.    # CVS 
26e0: 74 68 65 6e 20 73 74 69 63 6b 73 20 61 6e 20 65  then sticks an e
26f0: 78 74 72 61 20 30 20 69 6e 20 68 65 72 65 3b 20  xtra 0 in here; 
2700: 52 43 53 20 64 6f 65 73 20 6e 6f 74 2e 0a 20 20  RCS does not..  
2710: 20 20 23 20 41 6e 64 20 74 68 65 20 6c 61 73 74    # And the last
2720: 20 64 69 67 69 74 20 67 72 6f 75 70 2e 0a 0a 20   digit group... 
2730: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65     variable myre
2740: 76 6e 72 20 20 20 20 20 7b 7d 20 3b 20 23 20 52  vnr     {} ; # R
2750: 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 6f  evision number o
2760: 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a  f the revision..
2770: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64      variable myd
2780: 61 74 65 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  ate      {} ; # 
2790: 54 69 6d 65 73 74 61 6d 70 20 6f 66 20 74 68 65  Timestamp of the
27a0: 20 72 65 76 69 73 69 6f 6e 2c 20 73 65 63 6f 6e   revision, secon
27b0: 64 73 20 73 69 6e 63 65 20 65 70 6f 63 68 0a 20  ds since epoch. 
27c0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6f 72     variable myor
27d0: 69 67 64 61 74 65 20 20 7b 7d 20 3b 20 23 20 4f  igdate  {} ; # O
27e0: 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66 69  riginal unmodifi
27f0: 65 64 20 74 69 6d 65 73 74 61 6d 70 2e 0a 20 20  ed timestamp..  
2800: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 73 74 61    variable mysta
2810: 74 65 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 74  te     {} ; # St
2820: 61 74 65 20 6f 66 20 74 68 65 20 72 65 76 69 73  ate of the revis
2830: 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  ion..    variabl
2840: 65 20 6d 79 66 69 6c 65 20 20 20 20 20 20 7b 7d  e myfile      {}
2850: 20 3b 20 23 20 52 65 66 20 74 6f 20 74 68 65 20   ; # Ref to the 
2860: 66 69 6c 65 20 6f 62 6a 65 63 74 20 74 68 65 20  file object the 
2870: 72 65 76 69 73 69 6f 6e 20 62 65 6c 6f 6e 67 73  revision belongs
2880: 20 74 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c   to..    variabl
2890: 65 20 6d 79 74 65 78 74 20 20 20 20 20 20 7b 7d  e mytext      {}
28a0: 20 3b 20 23 20 52 61 6e 67 65 20 6f 66 20 74 68   ; # Range of th
28b0: 65 20 28 64 65 6c 74 61 29 20 74 65 78 74 20 66  e (delta) text f
28c0: 6f 72 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e  or this revision
28d0: 20 69 6e 20 74 68 65 20 66 69 6c 65 2e 0a 20 20   in the file..  
28e0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6d 65 74    variable mymet
28f0: 61 69 64 20 20 20 20 7b 7d 20 3b 20 23 20 49 64  aid    {} ; # Id
2900: 20 6f 66 20 74 68 65 20 6d 65 74 61 20 64 61 74   of the meta dat
2910: 61 20 67 72 6f 75 70 20 74 68 65 20 72 65 76 69  a group the revi
2920: 73 69 6f 6e 0a 09 09 09 20 20 20 20 20 20 23 20  sion....      # 
2930: 62 65 6c 6f 6e 67 73 20 74 6f 2e 20 54 68 69 73  belongs to. This
2940: 20 69 73 20 6c 61 74 65 72 20 75 73 65 64 20 74   is later used t
2950: 6f 20 70 75 74 0a 09 09 09 20 20 20 20 20 20 23  o put....      #
2960: 20 74 68 65 20 66 69 6c 65 20 72 65 76 69 73 69   the file revisi
2970: 6f 6e 73 20 69 6e 74 6f 20 70 72 65 6c 69 6d 69  ons into prelimi
2980: 6e 61 72 79 0a 09 09 09 20 20 20 20 20 20 23 20  nary....      # 
2990: 63 68 61 6e 67 65 73 65 74 73 20 28 61 6b 61 20  changesets (aka 
29a0: 70 72 6f 6a 65 63 74 20 72 65 76 69 73 69 6f 6e  project revision
29b0: 73 29 2e 0a 09 09 09 20 20 20 20 20 20 23 20 54  s).....      # T
29c0: 68 69 73 20 69 64 20 65 6e 63 6f 64 65 73 20 34  his id encodes 4
29d0: 20 70 69 65 63 65 73 20 6f 66 20 64 61 74 61 2c   pieces of data,
29e0: 0a 09 09 09 20 20 20 20 20 20 23 20 6e 61 6d 65  ....      # name
29f0: 6c 79 3a 20 74 68 65 20 70 72 6f 6a 65 63 74 20  ly: the project 
2a00: 61 6e 64 20 62 72 61 6e 63 68 20 74 68 65 0a 09  and branch the..
2a10: 09 09 20 20 20 20 20 20 23 20 72 65 76 69 73 69  ..      # revisi
2a20: 6f 6e 20 77 61 73 20 63 6f 6d 6d 69 74 74 65 64  on was committed
2a30: 20 74 6f 2c 20 74 68 65 20 61 75 74 68 6f 72 0a   to, the author.
2a40: 09 09 09 20 20 20 20 20 20 23 20 77 68 6f 20 64  ...      # who d
2a50: 69 64 20 74 68 65 20 63 6f 6d 6d 69 74 2c 20 61  id the commit, a
2a60: 6e 64 20 74 68 65 20 6d 65 73 73 61 67 65 0a 09  nd the message..
2a70: 09 09 20 20 20 20 20 20 23 20 75 73 65 64 2e 0a  ..      # used..
2a80: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6c      variable myl
2a90: 6f 64 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  od       {} ; # 
2aa0: 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65  Reference to the
2ab0: 20 6c 69 6e 65 2d 6f 66 2d 64 65 76 65 6c 6f 70   line-of-develop
2ac0: 6d 65 6e 74 0a 09 09 09 20 20 20 20 20 20 23 20  ment....      # 
2ad0: 6f 62 6a 65 63 74 20 74 68 65 20 72 65 76 69 73  object the revis
2ae0: 69 6f 6e 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 20  ion belongs to. 
2af0: 41 6e 0a 09 09 09 20 20 20 20 20 20 23 20 61 6c  An....      # al
2b00: 74 65 72 6e 61 74 69 76 65 20 69 64 69 6f 6d 20  ternative idiom 
2b10: 77 6f 75 6c 64 20 62 65 20 74 6f 20 63 61 6c 6c  would be to call
2b20: 20 69 74 0a 09 09 09 20 20 20 20 20 20 23 20 74   it....      # t
2b30: 68 65 20 62 72 61 6e 63 68 20 74 68 65 20 72 65  he branch the re
2b40: 76 69 73 69 6f 6e 20 69 73 20 6f 6e 2e 20 54 68  vision is on. Th
2b50: 69 73 0a 09 09 09 20 20 20 20 20 20 23 20 72 65  is....      # re
2b60: 66 65 72 65 6e 63 65 20 69 73 20 74 6f 20 61 20  ference is to a 
2b70: 70 72 6f 6a 65 63 74 2d 6c 65 76 65 6c 20 6f 62  project-level ob
2b80: 6a 65 63 74 0a 09 09 09 20 20 20 20 20 20 23 20  ject....      # 
2b90: 28 73 79 6d 62 6f 6c 20 6f 72 20 74 72 75 6e 6b  (symbol or trunk
2ba0: 29 2e 0a 0a 20 20 20 20 23 20 42 61 73 69 63 20  )...    # Basic 
2bb0: 70 61 72 65 6e 74 2f 63 68 69 6c 64 20 6c 69 6e  parent/child lin
2bc0: 6b 61 67 65 20 28 6c 69 6e 65 73 20 6f 66 20 64  kage (lines of d
2bd0: 65 76 65 6c 6f 70 6d 65 6e 74 29 0a 0a 20 20 20  evelopment)..   
2be0: 20 76 61 72 69 61 62 6c 65 20 6d 79 70 61 72 65   variable mypare
2bf0: 6e 74 20 7b 7d 20 3b 20 23 20 52 65 66 20 74 6f  nt {} ; # Ref to
2c00: 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e   parent revision
2c10: 20 6f 62 6a 65 63 74 2e 20 4c 69 6e 6b 20 72 65   object. Link re
2c20: 71 75 69 72 65 64 20 62 65 63 61 75 73 65 20 6f  quired because o
2c30: 66 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20  f.    #         
2c40: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 27             ; # '
2c50: 63 76 73 61 64 6d 69 6e 20 2d 6f 27 2c 20 77 68  cvsadmin -o', wh
2c60: 69 63 68 20 63 61 6e 20 63 72 65 61 74 65 20 61  ich can create a
2c70: 72 62 69 74 72 61 72 79 20 67 61 70 73 20 69 6e  rbitrary gaps in
2c80: 20 74 68 65 0a 20 20 20 20 23 20 20 20 20 20 20   the.    #      
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
2ca0: 23 20 6e 75 6d 62 65 72 69 6e 67 20 73 65 71 75  # numbering sequ
2cb0: 65 6e 63 65 2e 20 54 68 69 73 20 69 73 20 69 6e  ence. This is in
2cc0: 20 74 68 65 20 73 61 6d 65 20 6c 69 6e 65 20 6f   the same line o
2cd0: 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 0a 20 20  f development.  
2ce0: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
2cf0: 20 20 20 20 20 20 20 3b 20 23 20 4e 6f 74 65 3a         ; # Note:
2d00: 20 46 6f 72 20 74 68 65 20 66 69 72 73 74 20 72   For the first r
2d10: 65 76 69 73 69 6f 6e 20 6f 6e 20 61 20 62 72 61  evision on a bra
2d20: 6e 63 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e  nch the revision
2d30: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
2d40: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 69 74            ; # it
2d50: 20 77 61 73 20 73 70 61 77 6e 65 64 20 66 72 6f   was spawned fro
2d60: 6d 20 69 73 20 74 68 65 20 70 61 72 65 6e 74 2e  m is the parent.
2d70: 20 4f 6e 6c 79 20 74 68 65 20 72 6f 6f 74 20 72   Only the root r
2d80: 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 20 20  evision.    #   
2d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2da0: 20 3b 20 23 20 6f 66 20 6d 79 66 69 6c 65 27 73   ; # of myfile's
2db0: 20 72 65 76 69 73 69 6f 6e 20 74 72 65 65 20 68   revision tree h
2dc0: 61 73 20 6e 6f 74 68 69 6e 67 20 73 65 74 20 68  as nothing set h
2dd0: 65 72 65 2e 0a 20 20 20 20 23 20 20 20 20 20 20  ere..    #      
2de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
2df0: 23 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  #..    variable 
2e00: 6d 79 63 68 69 6c 64 20 20 7b 7d 20 3b 20 23 20  mychild  {} ; # 
2e10: 52 65 66 20 74 6f 20 74 68 65 20 70 72 69 6d 61  Ref to the prima
2e20: 72 79 20 63 68 69 6c 64 20 72 65 76 69 73 69 6f  ry child revisio
2e30: 6e 20 6f 62 6a 65 63 74 2c 20 69 2e 65 2e 20 74  n object, i.e. t
2e40: 68 65 20 6e 65 78 74 0a 20 20 20 20 23 20 20 20  he next.    #   
2e50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e60: 20 3b 20 23 20 72 65 76 69 73 69 6f 6e 20 69 6e   ; # revision in
2e70: 20 74 68 65 20 73 61 6d 65 20 6c 69 6e 65 20 6f   the same line o
2e80: 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a 0a  f development...
2e90: 20 20 20 20 23 20 42 72 61 6e 63 68 20 6c 69 6e      # Branch lin
2ea0: 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  kage ___________
2eb0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 76  _________..    v
2ec0: 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68  ariable mybranch
2ed0: 65 73 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69  es     {} ; # Li
2ee0: 73 74 20 6f 66 20 74 68 65 20 62 72 61 6e 63 68  st of the branch
2ef0: 65 73 20 28 6f 62 6a 73 29 20 73 70 61 77 6e 65  es (objs) spawne
2f00: 64 20 62 79 20 74 68 69 73 20 72 65 76 69 73 69  d by this revisi
2f10: 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  on..    variable
2f20: 20 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20   myparentbranch 
2f30: 7b 7d 20 3b 20 23 20 46 6f 72 20 74 68 65 20 66  {} ; # For the f
2f40: 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e  irst revision on
2f50: 20 61 20 62 72 61 6e 63 68 20 74 68 65 20 72 65   a branch the re
2f60: 6c 65 76 61 6e 74 0a 20 20 20 20 23 20 20 20 20  levant.    #    
2f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f80: 20 20 20 20 20 20 3b 20 23 20 62 72 61 6e 63 68        ; # branch
2f90: 20 6f 62 6a 65 63 74 2e 20 54 68 69 73 20 61 6c   object. This al
2fa0: 73 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20  so allows us to 
2fb0: 64 65 74 65 72 6d 69 6e 65 20 69 66 0a 20 20 20  determine if.   
2fc0: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
2fd0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20              ; # 
2fe0: 6d 79 70 61 72 65 6e 74 20 69 73 20 69 6e 20 74  myparent is in t
2ff0: 68 65 20 73 61 6d 65 20 4c 4f 44 2c 20 6f 72 20  he same LOD, or 
3000: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 68 65  the revision the
3010: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
3020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3030: 3b 20 23 20 62 72 61 6e 63 68 20 73 70 61 77 6e  ; # branch spawn
3040: 65 64 20 66 72 6f 6d 2e 0a 0a 20 20 20 20 23 20  ed from...    # 
3050: 4c 69 73 74 20 6f 66 20 74 68 65 20 72 65 76 69  List of the revi
3060: 73 69 6f 6e 20 6f 62 6a 65 63 74 73 20 6f 66 20  sion objects of 
3070: 74 68 65 20 66 69 72 73 74 20 63 6f 6d 6d 69 74  the first commit
3080: 73 20 6f 6e 20 61 6e 79 0a 20 20 20 20 23 20 62  s on any.    # b
3090: 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20  ranches spawned 
30a0: 62 79 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e  by this revision
30b0: 20 6f 6e 20 77 68 69 63 68 20 63 6f 6d 6d 69 74   on which commit
30c0: 73 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20  s occurred..    
30d0: 23 20 54 68 69 73 20 64 65 70 65 6e 64 65 6e 63  # This dependenc
30e0: 79 20 69 73 20 6b 65 70 74 20 65 78 70 6c 69 63  y is kept explic
30f0: 69 74 6c 79 20 62 65 63 61 75 73 65 20 6f 74 68  itly because oth
3100: 65 72 77 69 73 65 20 61 0a 20 20 20 20 23 20 72  erwise a.    # r
3110: 65 76 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74 6f 70  evision-only top
3120: 6f 6c 6f 67 69 63 61 6c 20 73 6f 72 74 20 77 6f  ological sort wo
3130: 75 6c 64 20 6d 69 73 73 20 74 68 65 20 64 65 70  uld miss the dep
3140: 65 6e 64 65 6e 63 79 20 74 68 61 74 0a 20 20 20  endency that.   
3150: 20 23 20 65 78 69 73 74 73 20 76 69 61 20 2d 3e   # exists via ->
3160: 20 6d 79 62 72 61 6e 63 68 65 73 2e 0a 0a 20 20   mybranches...  
3170: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61    variable mybra
3180: 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d 20 3b  nchchildren {} ;
3190: 20 23 20 4c 69 73 74 20 6f 66 20 74 68 65 20 72   # List of the r
31a0: 65 76 69 73 69 6f 6e 73 20 28 6f 62 6a 73 29 20  evisions (objs) 
31b0: 77 68 69 63 68 20 61 72 65 20 74 68 65 20 66 69  which are the fi
31c0: 72 73 74 0a 20 20 20 20 23 20 20 20 20 20 20 20  rst.    #       
31d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31e0: 20 20 20 20 20 3b 20 23 20 63 6f 6d 6d 69 74 73       ; # commits
31f0: 20 6f 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 62   on any of the b
3200: 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20  ranches spawned 
3210: 66 72 6f 6d 20 74 68 69 73 0a 20 20 20 20 23 20  from this.    # 
3220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3230: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 72             ; # r
3240: 65 76 69 73 69 6f 6e 2e 20 54 68 65 20 64 65 70  evision. The dep
3250: 65 6e 64 65 6e 63 79 20 69 73 20 6b 65 70 74 20  endency is kept 
3260: 65 78 70 6c 69 63 69 74 6c 79 20 74 6f 0a 20 20  explicitly to.  
3270: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
3280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b                 ;
3290: 20 23 20 65 6e 73 75 72 65 20 74 68 61 74 20 61   # ensure that a
32a0: 20 72 65 76 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74   revision-only t
32b0: 6f 70 6f 6c 6f 67 69 63 61 6c 20 73 6f 72 74 20  opological sort 
32c0: 77 69 6c 6c 0a 20 20 20 20 23 20 20 20 20 20 20  will.    #      
32d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32e0: 20 20 20 20 20 20 3b 20 23 20 6e 6f 74 20 6d 69        ; # not mi
32f0: 73 73 20 69 74 2c 20 61 73 20 69 74 20 6f 74 68  ss it, as it oth
3300: 65 72 77 69 73 65 20 65 78 69 73 74 73 20 6f 6e  erwise exists on
3310: 6c 79 20 76 69 61 0a 20 20 20 20 23 20 20 20 20  ly via.    #    
3320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3330: 20 20 20 20 20 20 20 20 3b 20 23 20 6d 79 62 72          ; # mybr
3340: 61 6e 63 68 65 73 2e 0a 0a 20 20 20 20 23 20 54  anches...    # T
3350: 61 67 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f  ag linkage _____
3360: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
3370: 5f 5f 5f 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  ___..    variabl
3380: 65 20 6d 79 74 61 67 73 20 7b 7d 20 3b 20 23 20  e mytags {} ; # 
3390: 4c 69 73 74 20 6f 66 20 74 61 67 73 20 28 6f 62  List of tags (ob
33a0: 6a 73 29 20 61 73 73 6f 63 69 61 74 65 64 20 77  js) associated w
33b0: 69 74 68 20 74 68 69 73 20 72 65 76 69 73 69 6f  ith this revisio
33c0: 6e 2e 0a 0a 20 20 20 20 23 20 4d 6f 72 65 20 64  n...    # More d
33d0: 65 72 69 76 65 64 20 64 61 74 61 0a 0a 20 20 20  erived data..   
33e0: 20 76 61 72 69 61 62 6c 65 20 6d 79 6f 70 65 72   variable myoper
33f0: 61 74 69 6f 6e 20 20 20 20 20 20 20 20 7b 7d 20  ation        {} 
3400: 3b 20 23 20 4f 6e 65 20 6f 66 20 27 61 64 64 27  ; # One of 'add'
3410: 2c 20 27 63 68 61 6e 67 65 27 2c 20 27 64 65 6c  , 'change', 'del
3420: 65 74 65 27 2c 20 6f 72 0a 09 09 09 20 20 20 20  ete', or....    
3430: 20 20 20 20 20 20 20 20 20 23 20 27 6e 6f 74 68           # 'noth
3440: 69 6e 67 27 2e 20 44 65 72 69 76 65 64 20 66 72  ing'. Derived fr
3450: 6f 6d 20 6f 75 72 20 61 6e 64 0a 09 09 09 20 20  om our and....  
3460: 20 20 20 20 20 20 20 20 20 20 20 23 20 69 74 73             # its
3470: 20 70 61 72 65 6e 74 27 73 20 73 74 61 74 65 2e   parent's state.
3480: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
3490: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63  isondefaultbranc
34a0: 68 20 30 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20  h 0 ; # Boolean 
34b0: 66 6c 61 67 2c 20 73 65 74 20 69 66 20 74 68 65  flag, set if the
34c0: 0a 09 09 09 09 20 20 20 20 20 23 20 72 65 76 69  .....     # revi
34d0: 73 69 6f 6e 20 69 73 20 6f 6e 20 74 68 65 20 6e  sion is on the n
34e0: 6f 6e 2d 74 72 75 6e 6b 0a 09 09 09 09 20 20 20  on-trunk.....   
34f0: 20 20 23 20 64 65 66 61 75 6c 74 20 62 72 61 6e    # default bran
3500: 63 68 2c 20 61 6b 61 20 76 65 6e 64 6f 72 0a 09  ch, aka vendor..
3510: 09 09 09 20 20 20 20 20 23 20 62 72 61 6e 63 68  ...     # branch
3520: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
3530: 79 64 62 70 61 72 65 6e 74 20 20 20 20 20 20 20  ydbparent       
3540: 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e    {} ; # Referen
3550: 63 65 20 74 6f 20 74 68 65 20 6c 61 73 74 20 72  ce to the last r
3560: 65 76 69 73 69 6f 6e 0a 09 09 09 09 20 20 20 20  evision.....    
3570: 20 23 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72   # on the vendor
3580: 20 62 72 61 6e 63 68 20 69 66 20 74 68 69 73 20   branch if this 
3590: 69 73 0a 09 09 09 09 20 20 20 20 20 23 20 74 68  is.....     # th
35a0: 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20  e primary child 
35b0: 6f 66 20 74 68 65 0a 09 09 09 09 20 20 20 20 20  of the.....     
35c0: 23 20 72 65 67 75 6c 61 72 20 72 6f 6f 74 2e 0a  # regular root..
35d0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64      variable myd
35e0: 62 63 68 69 6c 64 20 20 20 20 20 20 20 20 20 20  bchild          
35f0: 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65  {} ; # Reference
3600: 20 74 6f 20 74 68 65 20 70 72 69 6d 61 72 79 20   to the primary 
3610: 63 68 69 6c 64 0a 09 09 09 09 20 20 20 20 20 23  child.....     #
3620: 20 6f 66 20 74 68 65 20 72 65 67 75 6c 61 72 20   of the regular 
3630: 72 6f 6f 74 20 69 66 20 74 68 69 73 20 69 73 0a  root if this is.
3640: 09 09 09 09 20 20 20 20 20 23 20 74 68 65 20 6c  ....     # the l
3650: 61 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20  ast revision on 
3660: 74 68 65 20 76 65 6e 64 6f 72 0a 09 09 09 09 20  the vendor..... 
3670: 20 20 20 20 23 20 62 72 61 6e 63 68 2e 0a 0a 20      # branch... 
3680: 20 20 20 23 20 64 65 61 64 28 73 65 6c 66 29 20     # dead(self) 
3690: 78 20 64 65 61 64 28 70 61 72 65 6e 74 29 20 2d  x dead(parent) -
36a0: 3e 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 20 20  > operation.    
36b0: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6f  typevariable myo
36c0: 70 73 74 61 74 65 20 2d 61 72 72 61 79 20 7b 0a  pstate -array {.
36d0: 09 7b 30 20 30 7d 20 63 68 61 6e 67 65 0a 09 7b  .{0 0} change..{
36e0: 30 20 31 7d 20 64 65 6c 65 74 65 0a 09 7b 31 20  0 1} delete..{1 
36f0: 30 7d 20 61 64 64 0a 09 7b 31 20 31 7d 20 6e 6f  0} add..{1 1} no
3700: 74 68 69 6e 67 0a 20 20 20 20 7d 0a 0a 20 20 20  thing.    }..   
3710: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
3720: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
3730: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20  ########.    ## 
3740: 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73  Internal methods
3750: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
3760: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
3770: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
3780: 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69    ## Configurati
3790: 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d  on..    pragma -
37a0: 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e  hastypeinfo    n
37b0: 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69  o  ; # no type i
37c0: 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20  ntrospection.   
37d0: 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f   pragma -hasinfo
37e0: 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20          no  ; # 
37f0: 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73  no object intros
3800: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67  pection.    prag
3810: 6d 61 20 2d 73 69 6d 70 6c 65 64 69 73 70 61 74  ma -simpledispat
3820: 63 68 20 79 65 73 20 3b 20 23 20 73 69 6d 70 6c  ch yes ; # simpl
3830: 65 20 66 61 73 74 20 64 69 73 70 61 74 63 68 0a  e fast dispatch.
3840: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
3850: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
3860: 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a  ############.}..
3870: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
3880: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
3890: 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 7b  ort::cvs::file {
38a0: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  .    namespace e
38b0: 78 70 6f 72 74 20 72 65 76 0a 20 20 20 20 6e 61  xport rev.    na
38c0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 72 65 76  mespace eval rev
38d0: 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d   {..namespace im
38e0: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73  port ::vc::tools
38f0: 3a 3a 6d 69 73 63 3a 3a 2a 0a 20 20 20 20 7d 0a  ::misc::*.    }.
3900: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  }..# # ## ### ##
3910: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
3920: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
3930: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3940: 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61  .## Ready..packa
3950: 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66  ge provide vc::f
3960: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
3970: 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 31 2e  vs::file::rev 1.
3980: 30 0a 72 65 74 75 72 6e 0a                       0.return.