Hex Artifact Content
Not logged in

Artifact 89b75955163e25f331c5222922dfa8aaa6497be9:

File tools/cvs2fossil/lib/c2f_frev.tcl part of check-in [177a0cc55c] - Fix setting of myimported, wrong condition. Fix item assignment when sorting branches. Fix parent/child linkage when setting up branch dependencies. Completed processes on non-trunk default branch revisions. Added skeleton code for the deletion of superfluous revisions. by aku on 2007-10-17 03:15:12.

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 23  mydate  }..    #
06b0: 20 42 61 73 69 63 20 70 61 72 65 6e 74 2f 63 68   Basic parent/ch
06c0: 69 6c 64 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f  ild linkage ____
06d0: 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68  ______..    meth
06e0: 6f 64 20 68 61 73 70 61 72 65 6e 74 20 7b 7d 20  od hasparent {} 
06f0: 7b 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b  { return [expr {
0700: 24 6d 79 70 61 72 65 6e 74 20 6e 65 20 22 22 7d  $myparent ne ""}
0710: 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 68  ] }.    method h
0720: 61 73 63 68 69 6c 64 20 20 7b 7d 20 7b 20 72 65  aschild  {} { re
0730: 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 63  turn [expr {$myc
0740: 68 69 6c 64 20 20 6e 65 20 22 22 7d 5d 20 7d 0a  hild  ne ""}] }.
0750: 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 70  .    method setp
0760: 61 72 65 6e 74 20 7b 70 61 72 65 6e 74 7d 20 7b  arent {parent} {
0770: 0a 09 69 66 20 7b 24 6d 79 70 61 72 65 6e 74 20  ..if {$myparent 
0780: 6e 65 20 22 22 7d 20 7b 20 74 72 6f 75 62 6c 65  ne ""} { trouble
0790: 20 69 6e 74 65 72 6e 61 6c 20 22 50 61 72 65 6e   internal "Paren
07a0: 74 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e 65  t already define
07b0: 64 22 20 7d 0a 09 73 65 74 20 6d 79 70 61 72 65  d" }..set mypare
07c0: 6e 74 20 24 70 61 72 65 6e 74 0a 09 72 65 74 75  nt $parent..retu
07d0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
07e0: 74 68 6f 64 20 63 75 74 66 72 6f 6d 70 61 72 65  thod cutfrompare
07f0: 6e 74 20 7b 7d 20 7b 20 73 65 74 20 6d 79 70 61  nt {} { set mypa
0800: 72 65 6e 74 20 22 22 20 3b 20 72 65 74 75 72 6e  rent "" ; return
0810: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 75   }.    method cu
0820: 74 66 72 6f 6d 63 68 69 6c 64 20 20 7b 7d 20 7b  tfromchild  {} {
0830: 20 73 65 74 20 6d 79 63 68 69 6c 64 20 20 22 22   set mychild  ""
0840: 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20   ; return }..   
0850: 20 6d 65 74 68 6f 64 20 73 65 74 63 68 69 6c 64   method setchild
0860: 20 7b 63 68 69 6c 64 7d 20 7b 0a 09 69 66 20 7b   {child} {..if {
0870: 24 6d 79 63 68 69 6c 64 20 6e 65 20 22 22 7d 20  $mychild ne ""} 
0880: 7b 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e  { trouble intern
0890: 61 6c 20 22 43 68 69 6c 64 20 61 6c 72 65 61 64  al "Child alread
08a0: 79 20 64 65 66 69 6e 65 64 22 20 7d 0a 09 73 65  y defined" }..se
08b0: 74 20 6d 79 63 68 69 6c 64 20 24 63 68 69 6c 64  t mychild $child
08c0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
08d0: 20 20 20 20 6d 65 74 68 6f 64 20 70 61 72 65 6e      method paren
08e0: 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  t {} { return $m
08f0: 79 70 61 72 65 6e 74 20 7d 0a 20 20 20 20 6d 65  yparent }.    me
0900: 74 68 6f 64 20 63 68 69 6c 64 20 20 7b 7d 20 7b  thod child  {} {
0910: 20 72 65 74 75 72 6e 20 24 6d 79 63 68 69 6c 64   return $mychild
0920: 20 20 7d 0a 0a 20 20 20 20 23 20 42 72 61 6e 63    }..    # Branc
0930: 68 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f  h linkage ______
0940: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
0950: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
0960: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 62 72  parentbranch {br
0970: 61 6e 63 68 7d 20 7b 0a 09 69 66 20 7b 24 6d 79  anch} {..if {$my
0980: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 6e 65 20  parentbranch ne 
0990: 22 22 7d 20 7b 20 74 72 6f 75 62 6c 65 20 69 6e  ""} { trouble in
09a0: 74 65 72 6e 61 6c 20 22 42 72 61 6e 63 68 20 70  ternal "Branch p
09b0: 61 72 65 6e 74 20 61 6c 72 65 61 64 79 20 64 65  arent already de
09c0: 66 69 6e 65 64 22 20 7d 0a 09 73 65 74 20 6d 79  fined" }..set my
09d0: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72  parentbranch $br
09e0: 61 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20 20 20  anch..return.   
09f0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70   }..    method p
0a00: 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d 20 7b  arentbranch {} {
0a10: 20 72 65 74 75 72 6e 20 24 6d 79 70 61 72 65 6e   return $myparen
0a20: 74 62 72 61 6e 63 68 20 7d 0a 0a 20 20 20 20 6d  tbranch }..    m
0a30: 65 74 68 6f 64 20 61 64 64 62 72 61 6e 63 68 20  ethod addbranch 
0a40: 7b 62 72 61 6e 63 68 7d 20 7b 0a 09 6c 61 70 70  {branch} {..lapp
0a50: 65 6e 64 20 6d 79 62 72 61 6e 63 68 65 73 20 24  end mybranches $
0a60: 62 72 61 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20  branch..return. 
0a70: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
0a80: 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63   addchildonbranc
0a90: 68 20 7b 63 68 69 6c 64 7d 20 7b 0a 09 6c 61 70  h {child} {..lap
0aa0: 70 65 6e 64 20 6d 79 62 72 61 6e 63 68 63 68 69  pend mybranchchi
0ab0: 6c 64 72 65 6e 20 24 63 68 69 6c 64 0a 09 72 65  ldren $child..re
0ac0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
0ad0: 6d 65 74 68 6f 64 20 63 75 74 66 72 6f 6d 70 61  method cutfrompa
0ae0: 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d 20 7b 20  rentbranch {} { 
0af0: 73 65 74 20 6d 79 70 61 72 65 6e 74 62 72 61 6e  set myparentbran
0b00: 63 68 20 22 22 20 3b 20 72 65 74 75 72 6e 20 7d  ch "" ; return }
0b10: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65 6d  ..    method rem
0b20: 6f 76 65 62 72 61 6e 63 68 20 7b 62 72 61 6e 63  ovebranch {branc
0b30: 68 7d 20 7b 0a 09 6c 64 65 6c 65 74 65 20 6d 79  h} {..ldelete my
0b40: 62 72 61 6e 63 68 65 73 20 24 62 72 61 6e 63 68  branches $branch
0b50: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
0b60: 20 20 20 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76      method remov
0b70: 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 7b  echildonbranch {
0b80: 72 65 76 7d 20 7b 0a 09 6c 64 65 6c 65 74 65 20  rev} {..ldelete 
0b90: 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e  mybranchchildren
0ba0: 20 24 72 65 76 0a 09 72 65 74 75 72 6e 0a 20 20   $rev..return.  
0bb0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
0bc0: 73 6f 72 74 62 72 61 6e 63 68 65 73 20 7b 7d 20  sortbranches {} 
0bd0: 7b 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68  {..if {![llength
0be0: 20 24 6d 79 62 72 61 6e 63 68 65 73 5d 7d 20 72   $mybranches]} r
0bf0: 65 74 75 72 6e 0a 0a 09 23 20 53 6f 72 74 20 74  eturn...# Sort t
0c00: 68 65 20 62 72 61 6e 63 68 65 73 20 73 70 61 77  he branches spaw
0c10: 6e 65 64 20 62 79 20 74 68 69 73 20 72 65 76 69  ned by this revi
0c20: 73 69 6f 6e 20 69 6e 20 63 72 65 61 74 69 6f 6e  sion in creation
0c30: 0a 09 23 20 6f 72 64 65 72 2e 20 54 6f 20 68 65  ..# order. To he
0c40: 6c 70 20 69 6e 20 74 68 69 73 20 6f 75 72 20 66  lp in this our f
0c50: 69 6c 65 20 67 61 76 65 20 61 6c 6c 20 62 72 61  ile gave all bra
0c60: 6e 63 68 65 73 20 61 20 70 6f 73 69 74 69 6f 6e  nches a position
0c70: 0a 09 23 20 69 64 2c 20 69 6e 20 6f 72 64 65 72  ..# id, in order
0c80: 20 6f 66 20 74 68 65 69 72 20 64 65 66 69 6e 69   of their defini
0c90: 74 69 6f 6e 20 62 79 20 74 68 65 20 52 43 53 20  tion by the RCS 
0ca0: 61 72 63 68 69 76 65 2e 0a 09 23 0a 09 23 20 54  archive...#..# T
0cb0: 68 65 20 63 72 65 61 74 69 6f 6e 20 6f 72 64 65  he creation orde
0cc0: 72 20 69 73 20 28 61 70 70 61 72 65 6e 74 6c 79  r is (apparently
0cd0: 29 20 74 68 65 20 72 65 76 65 72 73 65 20 6f 66  ) the reverse of
0ce0: 20 74 68 65 0a 09 23 20 64 65 66 69 6e 69 74 69   the..# definiti
0cf0: 6f 6e 20 6f 72 64 65 72 2e 20 28 49 66 20 61 20  on order. (If a 
0d00: 62 72 61 6e 63 68 20 69 73 20 63 72 65 61 74 65  branch is create
0d10: 64 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2c 20  d then deleted, 
0d20: 61 0a 09 23 20 6c 61 74 65 72 20 62 72 61 6e 63  a..# later branc
0d30: 68 20 63 61 6e 20 62 65 20 61 73 73 69 67 6e 65  h can be assigne
0d40: 64 20 74 68 65 20 72 65 63 79 63 6c 65 64 20 62  d the recycled b
0d50: 72 61 6e 63 68 20 6e 75 6d 62 65 72 3b 0a 09 23  ranch number;..#
0d60: 20 74 68 65 72 65 66 6f 72 65 20 62 72 61 6e 63   therefore branc
0d70: 68 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6e 6f  h numbers are no
0d80: 74 20 61 6e 20 69 6e 64 69 63 61 74 69 6f 6e 20  t an indication 
0d90: 6f 66 20 63 72 65 61 74 69 6f 6e 0a 09 23 20 6f  of creation..# o
0da0: 72 64 65 72 2e 29 0a 0a 09 73 65 74 20 74 6d 70  rder.)...set tmp
0db0: 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 62 72 61   {}..foreach bra
0dc0: 6e 63 68 20 24 6d 79 62 72 61 6e 63 68 65 73 20  nch $mybranches 
0dd0: 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64 20 74  {..    lappend t
0de0: 6d 70 20 5b 6c 69 73 74 20 24 62 72 61 6e 63 68  mp [list $branch
0df0: 20 5b 24 62 72 61 6e 63 68 20 70 6f 73 69 74 69   [$branch positi
0e00: 6f 6e 5d 5d 0a 09 7d 0a 0a 09 73 65 74 20 6d 79  on]]..}...set my
0e10: 62 72 61 6e 63 68 65 73 20 7b 7d 0a 09 66 6f 72  branches {}..for
0e20: 65 61 63 68 20 69 74 65 6d 20 5b 6c 73 6f 72 74  each item [lsort
0e30: 20 2d 69 6e 64 65 78 20 31 20 2d 64 65 63 72 65   -index 1 -decre
0e40: 61 73 69 6e 67 20 24 74 6d 70 5d 20 7b 0a 09 20  asing $tmp] {.. 
0e50: 20 20 20 73 74 72 75 63 74 3a 3a 6c 69 73 74 20     struct::list 
0e60: 61 73 73 69 67 6e 20 24 69 74 65 6d 20 62 72 61  assign $item bra
0e70: 6e 63 68 20 70 6f 73 69 74 69 6f 6e 0a 09 20 20  nch position..  
0e80: 20 20 6c 61 70 70 65 6e 64 20 6d 79 62 72 61 6e    lappend mybran
0e90: 63 68 65 73 20 24 62 72 61 6e 63 68 0a 09 7d 0a  ches $branch..}.
0ea0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
0eb0: 20 20 20 6d 65 74 68 6f 64 20 6d 6f 76 65 62 72     method movebr
0ec0: 61 6e 63 68 65 73 74 6f 20 7b 72 65 76 7d 20 7b  anchesto {rev} {
0ed0: 0a 09 73 65 74 20 72 65 76 6c 6f 64 20 5b 24 72  ..set revlod [$r
0ee0: 65 76 20 6c 6f 64 5d 0a 09 66 6f 72 65 61 63 68  ev lod]..foreach
0ef0: 20 62 72 61 6e 63 68 20 24 6d 79 62 72 61 6e 63   branch $mybranc
0f00: 68 65 73 20 7b 0a 09 20 20 20 20 24 72 65 76 20  hes {..    $rev 
0f10: 61 64 64 62 72 61 6e 63 68 20 24 62 72 61 6e 63  addbranch $branc
0f20: 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73  h..    $branch s
0f30: 65 74 70 61 72 65 6e 74 20 24 72 65 76 0a 09 20  etparent $rev.. 
0f40: 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 6c 6f     $branch setlo
0f50: 64 20 24 72 65 76 6c 6f 64 0a 09 7d 0a 09 66 6f  d $revlod..}..fo
0f60: 72 65 61 63 68 20 62 72 61 6e 63 68 72 65 76 20  reach branchrev 
0f70: 24 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 72 65  $mybranchchildre
0f80: 6e 20 7b 0a 09 20 20 20 20 24 72 65 76 20 61 64  n {..    $rev ad
0f90: 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24  dchildonbranch $
0fa0: 62 72 61 6e 63 68 72 65 76 0a 09 20 20 20 20 24  branchrev..    $
0fb0: 62 72 61 6e 63 68 72 65 76 20 63 75 74 66 72 6f  branchrev cutfro
0fc0: 6d 70 61 72 65 6e 74 0a 09 20 20 20 20 24 62 72  mparent..    $br
0fd0: 61 6e 63 68 72 65 76 20 73 65 74 70 61 72 65 6e  anchrev setparen
0fe0: 74 20 24 72 65 76 0a 09 7d 0a 09 73 65 74 20 6d  t $rev..}..set m
0ff0: 79 62 72 61 6e 63 68 65 73 20 20 20 20 20 20 20  ybranches       
1000: 7b 7d 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68  {}..set mybranch
1010: 63 68 69 6c 64 72 65 6e 20 7b 7d 0a 09 72 65 74  children {}..ret
1020: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
1030: 20 54 61 67 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f   Tag linkage ___
1040: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1050: 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68  ______..    meth
1060: 6f 64 20 61 64 64 74 61 67 20 7b 74 61 67 7d 20  od addtag {tag} 
1070: 7b 0a 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67  {..lappend mytag
1080: 73 20 24 74 61 67 0a 09 72 65 74 75 72 6e 0a 20  s $tag..return. 
1090: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
10a0: 20 6d 6f 76 65 74 61 67 73 74 6f 20 7b 72 65 76   movetagsto {rev
10b0: 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 6f 64 20  } {..set revlod 
10c0: 5b 24 72 65 76 20 6c 6f 64 5d 0a 09 66 6f 72 65  [$rev lod]..fore
10d0: 61 63 68 20 74 61 67 20 24 6d 79 74 61 67 73 20  ach tag $mytags 
10e0: 7b 0a 09 20 20 20 20 24 72 65 76 20 61 64 64 74  {..    $rev addt
10f0: 61 67 20 24 74 61 67 0a 09 20 20 20 20 24 74 61  ag $tag..    $ta
1100: 67 20 73 65 74 74 61 67 72 65 76 20 24 72 65 76  g settagrev $rev
1110: 0a 09 20 20 20 20 24 74 61 67 20 73 65 74 6c 6f  ..    $tag setlo
1120: 64 20 24 72 65 76 6c 6f 64 0a 09 7d 0a 09 73 65  d $revlod..}..se
1130: 74 20 6d 79 74 61 67 73 20 7b 7d 0a 09 72 65 74  t mytags {}..ret
1140: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
1150: 20 67 65 6e 65 72 61 6c 20 73 79 6d 62 6f 6c 20   general symbol 
1160: 6f 70 65 72 61 74 69 6f 6e 73 20 5f 5f 5f 5f 5f  operations _____
1170: 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68  ______..    meth
1180: 6f 64 20 6d 6f 76 65 73 79 6d 62 6f 6c 73 74 6f  od movesymbolsto
1190: 20 7b 72 65 76 7d 20 7b 0a 09 23 20 4d 6f 76 65   {rev} {..# Move
11a0: 20 74 68 65 20 74 61 67 73 20 61 6e 64 20 62 72   the tags and br
11b0: 61 6e 63 68 65 73 20 61 74 74 61 63 68 65 64 20  anches attached 
11c0: 74 6f 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e  to this revision
11d0: 20 74 6f 20 74 68 65 0a 09 23 20 64 65 73 74 69   to the..# desti
11e0: 6e 61 74 69 6f 6e 20 61 6e 64 20 66 69 78 20 61  nation and fix a
11f0: 6c 6c 20 70 6f 69 6e 74 65 72 73 2e 0a 0a 09 24  ll pointers....$
1200: 73 65 6c 66 20 6d 6f 76 65 74 61 67 73 74 6f 20  self movetagsto 
1210: 20 20 20 20 24 72 65 76 0a 09 24 73 65 6c 66 20      $rev..$self 
1220: 6d 6f 76 65 62 72 61 6e 63 68 65 73 74 6f 20 24  movebranchesto $
1230: 72 65 76 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  rev..return.    
1240: 7d 0a 0a 20 20 20 20 23 20 44 65 72 69 76 65 64  }..    # Derived
1250: 20 73 74 75 66 66 20 5f 5f 5f 5f 5f 5f 5f 5f 5f   stuff _________
1260: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a  ______________..
1270: 20 20 20 20 6d 65 74 68 6f 64 20 64 65 74 65 72      method deter
1280: 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e 20 7b 7d  mineoperation {}
1290: 20 7b 0a 09 23 20 4c 6f 6f 6b 20 61 74 20 74 68   {..# Look at th
12a0: 65 20 73 74 61 74 65 20 6f 66 20 62 6f 74 68 20  e state of both 
12b0: 74 68 69 73 20 72 65 76 69 73 69 6f 6e 20 61 6e  this revision an
12c0: 64 20 69 74 73 20 70 61 72 65 6e 74 20 74 6f 0a  d its parent to.
12d0: 09 23 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  .# determine the
12e0: 20 74 79 70 65 20 6f 70 66 20 6f 70 65 72 61 74   type opf operat
12f0: 69 6f 6e 20 77 68 69 63 68 20 77 61 73 20 70 65  ion which was pe
1300: 72 66 6f 72 6d 65 64 20 28 61 64 64 2c 0a 09 23  rformed (add,..#
1310: 20 6d 6f 64 69 66 79 2c 20 64 65 6c 65 74 65 2c   modify, delete,
1320: 20 6e 6f 6e 65 29 2e 0a 09 23 0a 09 23 20 54 68   none)...#..# Th
1330: 65 20 69 6d 70 6f 72 74 61 6e 74 20 69 6e 66 6f  e important info
1340: 72 6d 61 74 69 6f 6e 20 69 73 20 64 65 61 64 20  rmation is dead 
1350: 76 73 20 6e 6f 74 2d 64 65 61 64 20 66 6f 72 20  vs not-dead for 
1360: 62 6f 74 68 2c 0a 09 23 20 67 69 76 69 6e 67 20  both,..# giving 
1370: 72 69 73 65 20 74 6f 20 66 6f 75 72 20 70 6f 73  rise to four pos
1380: 73 69 62 6c 65 20 74 79 70 65 73 2e 0a 0a 09 73  sible types....s
1390: 65 74 20 73 64 65 61 64 20 5b 65 78 70 72 20 7b  et sdead [expr {
13a0: 24 6d 79 73 74 61 74 65 20 65 71 20 22 64 65 61  $mystate eq "dea
13b0: 64 22 7d 5d 0a 09 73 65 74 20 70 64 65 61 64 20  d"}]..set pdead 
13c0: 5b 65 78 70 72 20 7b 24 6d 79 70 61 72 65 6e 74  [expr {$myparent
13d0: 20 65 71 20 22 22 20 7c 7c 20 5b 24 6d 79 70 61   eq "" || [$mypa
13e0: 72 65 6e 74 20 73 74 61 74 65 5d 20 65 71 20 22  rent state] eq "
13f0: 64 65 61 64 22 7d 5d 0a 0a 09 73 65 74 20 6d 79  dead"}]...set my
1400: 6f 70 65 72 61 74 69 6f 6e 20 24 6d 79 6f 70 73  operation $myops
1410: 74 61 74 65 28 5b 6c 69 73 74 20 24 70 64 65 61  tate([list $pdea
1420: 64 20 24 73 64 65 61 64 5d 29 0a 09 72 65 74 75  d $sdead])..retu
1430: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
1440: 74 68 6f 64 20 6f 70 65 72 61 74 69 6f 6e 20 7b  thod operation {
1450: 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 6f 70  } { return $myop
1460: 65 72 61 74 69 6f 6e 20 7d 0a 20 20 20 20 6d 65  eration }.    me
1470: 74 68 6f 64 20 72 65 74 79 70 65 20 7b 78 7d 20  thod retype {x} 
1480: 7b 20 73 65 74 20 6d 79 6f 70 65 72 61 74 69 6f  { set myoperatio
1490: 6e 20 24 78 20 3b 20 72 65 74 75 72 6e 20 7d 0a  n $x ; return }.
14a0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 73 6f 6e  .    method ison
14b0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 7b 7d  defaultbranch {}
14c0: 20 7b 20 73 65 74 20 6d 79 69 73 6f 6e 64 65 66   { set myisondef
14d0: 61 75 6c 74 62 72 61 6e 63 68 20 31 20 3b 20 72  aultbranch 1 ; r
14e0: 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74  eturn }..    met
14f0: 68 6f 64 20 73 65 74 64 65 66 61 75 6c 74 62 72  hod setdefaultbr
1500: 61 6e 63 68 63 68 69 6c 64 20 20 7b 72 65 76 7d  anchchild  {rev}
1510: 20 7b 20 73 65 74 20 6d 79 64 62 63 68 69 6c 64   { set mydbchild
1520: 20 24 72 65 76 20 3b 20 72 65 74 75 72 6e 20 7d   $rev ; return }
1530: 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 64  .    method setd
1540: 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65  efaultbranchpare
1550: 6e 74 20 7b 72 65 76 7d 20 7b 0a 09 73 65 74 20  nt {rev} {..set 
1560: 6d 79 64 62 70 61 72 65 6e 74 20 24 72 65 76 0a  mydbparent $rev.
1570: 0a 09 23 20 52 65 74 79 70 65 20 74 68 65 20 72  ..# Retype the r
1580: 65 76 69 73 69 6f 6e 20 28 6d 61 79 20 63 68 61  evision (may cha
1590: 6e 67 65 20 66 72 6f 6d 20 27 61 64 64 27 20 74  nge from 'add' t
15a0: 6f 20 27 63 68 61 6e 67 65 27 29 2e 0a 0a 09 73  o 'change')....s
15b0: 65 74 20 73 64 65 61 64 20 5b 65 78 70 72 20 7b  et sdead [expr {
15c0: 24 6d 79 6f 70 65 72 61 74 69 6f 6e 20 20 20 20  $myoperation    
15d0: 20 6e 65 20 22 63 68 61 6e 67 65 22 7d 5d 0a 09   ne "change"}]..
15e0: 73 65 74 20 70 64 65 61 64 20 5b 65 78 70 72 20  set pdead [expr 
15f0: 7b 5b 24 72 65 76 20 6f 70 65 72 61 74 69 6f 6e  {[$rev operation
1600: 5d 20 6e 65 20 22 63 68 61 6e 67 65 22 7d 5d 0a  ] ne "change"}].
1610: 09 73 65 74 20 6d 79 6f 70 65 72 61 74 69 6f 6e  .set myoperation
1620: 20 24 6d 79 6f 70 73 74 61 74 65 28 5b 6c 69 73   $myopstate([lis
1630: 74 20 24 70 64 65 61 64 20 24 73 64 65 61 64 5d  t $pdead $sdead]
1640: 29 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  )..return.    }.
1650: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
1660: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
1670: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
1680: 20 23 23 20 54 79 70 65 20 41 50 49 0a 0a 20 20   ## Type API..  
1690: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73 74    typemethod ist
16a0: 72 75 6e 6b 72 65 76 6e 72 20 7b 72 65 76 6e 72  runkrevnr {revnr
16b0: 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 65 78 70  } {..return [exp
16c0: 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 73 70 6c  r {[llength [spl
16d0: 69 74 20 24 72 65 76 6e 72 20 2e 5d 5d 20 3d 3d  it $revnr .]] ==
16e0: 20 32 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20   2}].    }..    
16f0: 74 79 70 65 6d 65 74 68 6f 64 20 69 73 62 72 61  typemethod isbra
1700: 6e 63 68 72 65 76 6e 72 20 7b 72 65 76 6e 72 20  nchrevnr {revnr 
1710: 5f 20 62 76 7d 20 7b 0a 09 69 66 20 7b 5b 72 65  _ bv} {..if {[re
1720: 67 65 78 70 20 24 6d 79 62 72 61 6e 63 68 70 61  gexp $mybranchpa
1730: 74 74 65 72 6e 20 24 72 65 76 6e 72 20 2d 3e 20  ttern $revnr -> 
1740: 68 65 61 64 20 74 61 69 6c 5d 7d 20 7b 0a 09 20  head tail]} {.. 
1750: 20 20 20 75 70 76 61 72 20 31 20 24 62 76 20 62     upvar 1 $bv b
1760: 72 61 6e 63 68 6e 72 0a 09 20 20 20 20 73 65 74  ranchnr..    set
1770: 20 62 72 61 6e 63 68 6e 72 20 24 7b 68 65 61 64   branchnr ${head
1780: 7d 24 74 61 69 6c 0a 09 20 20 20 20 72 65 74 75  }$tail..    retu
1790: 72 6e 20 31 0a 09 7d 0a 09 72 65 74 75 72 6e 20  rn 1..}..return 
17a0: 30 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70  0.    }..    typ
17b0: 65 6d 65 74 68 6f 64 20 32 62 72 61 6e 63 68 6e  emethod 2branchn
17c0: 72 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 23 20 49  r {revnr} {..# I
17d0: 6e 70 75 74 20 69 73 20 61 20 62 72 61 6e 63 68  nput is a branch
17e0: 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72   revision number
17f0: 2c 20 69 2e 65 2e 20 61 20 72 65 76 69 73 69 6f  , i.e. a revisio
1800: 6e 20 6e 75 6d 62 65 72 0a 09 23 20 77 69 74 68  n number..# with
1810: 20 61 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72 20   an even number 
1820: 6f 66 20 63 6f 6d 70 6f 6e 65 6e 74 73 3b 20 66  of components; f
1830: 6f 72 20 65 78 61 6d 70 6c 65 20 27 32 2e 39 2e  or example '2.9.
1840: 32 2e 31 27 0a 09 23 20 28 6e 65 76 65 72 20 27  2.1'..# (never '
1850: 32 2e 39 2e 32 27 20 6e 6f 72 20 27 32 2e 39 2e  2.9.2' nor '2.9.
1860: 30 2e 32 27 29 2e 20 20 54 68 65 20 72 65 74 75  0.2').  The retu
1870: 72 6e 20 76 61 6c 75 65 20 69 73 20 74 68 65 0a  rn value is the.
1880: 09 23 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72  .# branch number
1890: 20 28 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 27   (for example, '
18a0: 32 2e 39 2e 32 27 29 2e 20 20 46 6f 72 20 74 72  2.9.2').  For tr
18b0: 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09  unk revisions,..
18c0: 23 20 6c 69 6b 65 20 27 33 2e 34 27 2c 20 77 65  # like '3.4', we
18d0: 20 72 65 74 75 72 6e 20 74 68 65 20 65 6d 70 74   return the empt
18e0: 79 20 73 74 72 69 6e 67 2e 0a 0a 09 69 66 20 7b  y string....if {
18f0: 5b 24 74 79 70 65 20 69 73 74 72 75 6e 6b 72 65  [$type istrunkre
1900: 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09  vnr $revnr]} {..
1910: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0a 09 7d      return ""..}
1920: 0a 09 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b  ..return [join [
1930: 6c 72 61 6e 67 65 20 5b 73 70 6c 69 74 20 24 72  lrange [split $r
1940: 65 76 6e 72 20 2e 5d 20 30 20 65 6e 64 2d 31 5d  evnr .] 0 end-1]
1950: 20 2e 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74   .].    }..    t
1960: 79 70 65 6d 65 74 68 6f 64 20 32 62 72 61 6e 63  ypemethod 2branc
1970: 68 70 61 72 65 6e 74 72 65 76 6e 72 20 7b 62 72  hparentrevnr {br
1980: 61 6e 63 68 6e 72 7d 20 7b 0a 09 23 20 43 68 6f  anchnr} {..# Cho
1990: 70 20 74 68 65 20 6c 61 73 74 20 73 65 67 6d 65  p the last segme
19a0: 6e 74 20 6f 66 66 0a 09 72 65 74 75 72 6e 20 5b  nt off..return [
19b0: 6a 6f 69 6e 20 5b 6c 72 61 6e 67 65 20 5b 73 70  join [lrange [sp
19c0: 6c 69 74 20 24 62 72 61 6e 63 68 6e 72 20 2e 5d  lit $branchnr .]
19d0: 20 30 20 65 6e 64 2d 31 5d 20 2e 5d 0a 20 20 20   0 end-1] .].   
19e0: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   }..    # # ## #
19f0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
1a00: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
1a10: 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20 20      ## State..  
1a20: 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d    typevariable m
1a30: 79 62 72 61 6e 63 68 70 61 74 74 65 72 6e 20 7b  ybranchpattern {
1a40: 5e 28 28 3f 3a 5c 64 2b 5c 2e 5c 64 2b 5c 2e 29  ^((?:\d+\.\d+\.)
1a50: 2b 29 28 3f 3a 30 5c 2e 29 3f 28 5c 64 2b 29 24  +)(?:0\.)?(\d+)$
1a60: 7d 0a 20 20 20 20 23 20 46 69 72 73 74 20 61 20  }.    # First a 
1a70: 6e 6f 6e 7a 65 72 6f 20 65 76 65 6e 20 6e 75 6d  nonzero even num
1a80: 62 65 72 20 6f 66 20 64 69 67 69 74 20 67 72 6f  ber of digit gro
1a90: 75 70 73 20 77 69 74 68 20 74 72 61 69 6c 69 6e  ups with trailin
1aa0: 67 20 64 6f 74 0a 20 20 20 20 23 20 43 56 53 20  g dot.    # CVS 
1ab0: 74 68 65 6e 20 73 74 69 63 6b 73 20 61 6e 20 65  then sticks an e
1ac0: 78 74 72 61 20 30 20 69 6e 20 68 65 72 65 3b 20  xtra 0 in here; 
1ad0: 52 43 53 20 64 6f 65 73 20 6e 6f 74 2e 0a 20 20  RCS does not..  
1ae0: 20 20 23 20 41 6e 64 20 74 68 65 20 6c 61 73 74    # And the last
1af0: 20 64 69 67 69 74 20 67 72 6f 75 70 2e 0a 0a 20   digit group... 
1b00: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65     variable myre
1b10: 76 6e 72 20 20 20 20 20 7b 7d 20 3b 20 23 20 52  vnr     {} ; # R
1b20: 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 6f  evision number o
1b30: 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a  f the revision..
1b40: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64      variable myd
1b50: 61 74 65 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  ate      {} ; # 
1b60: 54 69 6d 65 73 74 61 6d 70 20 6f 66 20 74 68 65  Timestamp of the
1b70: 20 72 65 76 69 73 69 6f 6e 2c 20 73 65 63 6f 6e   revision, secon
1b80: 64 73 20 73 69 6e 63 65 20 65 70 6f 63 68 0a 20  ds since epoch. 
1b90: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6f 72     variable myor
1ba0: 69 67 64 61 74 65 20 20 7b 7d 20 3b 20 23 20 4f  igdate  {} ; # O
1bb0: 72 69 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66 69  riginal unmodifi
1bc0: 65 64 20 74 69 6d 65 73 74 61 6d 70 2e 0a 20 20  ed timestamp..  
1bd0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 73 74 61    variable mysta
1be0: 74 65 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 74  te     {} ; # St
1bf0: 61 74 65 20 6f 66 20 74 68 65 20 72 65 76 69 73  ate of the revis
1c00: 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  ion..    variabl
1c10: 65 20 6d 79 66 69 6c 65 20 20 20 20 20 20 7b 7d  e myfile      {}
1c20: 20 3b 20 23 20 52 65 66 20 74 6f 20 74 68 65 20   ; # Ref to the 
1c30: 66 69 6c 65 20 6f 62 6a 65 63 74 20 74 68 65 20  file object the 
1c40: 72 65 76 69 73 69 6f 6e 20 62 65 6c 6f 6e 67 73  revision belongs
1c50: 20 74 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c   to..    variabl
1c60: 65 20 6d 79 74 65 78 74 20 20 20 20 20 20 7b 7d  e mytext      {}
1c70: 20 3b 20 23 20 52 61 6e 67 65 20 6f 66 20 74 68   ; # Range of th
1c80: 65 20 28 64 65 6c 74 61 29 20 74 65 78 74 20 66  e (delta) text f
1c90: 6f 72 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e  or this revision
1ca0: 20 69 6e 20 74 68 65 20 66 69 6c 65 2e 0a 20 20   in the file..  
1cb0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6d 65 74    variable mymet
1cc0: 61 69 64 20 20 20 20 7b 7d 20 3b 20 23 20 49 64  aid    {} ; # Id
1cd0: 20 6f 66 20 74 68 65 20 6d 65 74 61 20 64 61 74   of the meta dat
1ce0: 61 20 67 72 6f 75 70 20 74 68 65 20 72 65 76 69  a group the revi
1cf0: 73 69 6f 6e 0a 09 09 09 20 20 20 20 20 20 23 20  sion....      # 
1d00: 62 65 6c 6f 6e 67 73 20 74 6f 2e 20 54 68 69 73  belongs to. This
1d10: 20 69 73 20 6c 61 74 65 72 20 75 73 65 64 20 74   is later used t
1d20: 6f 20 70 75 74 0a 09 09 09 20 20 20 20 20 20 23  o put....      #
1d30: 20 74 68 65 20 66 69 6c 65 20 72 65 76 69 73 69   the file revisi
1d40: 6f 6e 73 20 69 6e 74 6f 20 70 72 65 6c 69 6d 69  ons into prelimi
1d50: 6e 61 72 79 0a 09 09 09 20 20 20 20 20 20 23 20  nary....      # 
1d60: 63 68 61 6e 67 65 73 65 74 73 20 28 61 6b 61 20  changesets (aka 
1d70: 70 72 6f 6a 65 63 74 20 72 65 76 69 73 69 6f 6e  project revision
1d80: 73 29 2e 0a 09 09 09 20 20 20 20 20 20 23 20 54  s).....      # T
1d90: 68 69 73 20 69 64 20 65 6e 63 6f 64 65 73 20 34  his id encodes 4
1da0: 20 70 69 65 63 65 73 20 6f 66 20 64 61 74 61 2c   pieces of data,
1db0: 0a 09 09 09 20 20 20 20 20 20 23 20 6e 61 6d 65  ....      # name
1dc0: 6c 79 3a 20 74 68 65 20 70 72 6f 6a 65 63 74 20  ly: the project 
1dd0: 61 6e 64 20 62 72 61 6e 63 68 20 74 68 65 0a 09  and branch the..
1de0: 09 09 20 20 20 20 20 20 23 20 72 65 76 69 73 69  ..      # revisi
1df0: 6f 6e 20 77 61 73 20 63 6f 6d 6d 69 74 74 65 64  on was committed
1e00: 20 74 6f 2c 20 74 68 65 20 61 75 74 68 6f 72 0a   to, the author.
1e10: 09 09 09 20 20 20 20 20 20 23 20 77 68 6f 20 64  ...      # who d
1e20: 69 64 20 74 68 65 20 63 6f 6d 6d 69 74 2c 20 61  id the commit, a
1e30: 6e 64 20 74 68 65 20 6d 65 73 73 61 67 65 0a 09  nd the message..
1e40: 09 09 20 20 20 20 20 20 23 20 75 73 65 64 2e 0a  ..      # used..
1e50: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6c      variable myl
1e60: 6f 64 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  od       {} ; # 
1e70: 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65  Reference to the
1e80: 20 6c 69 6e 65 2d 6f 66 2d 64 65 76 65 6c 6f 70   line-of-develop
1e90: 6d 65 6e 74 0a 09 09 09 20 20 20 20 20 20 23 20  ment....      # 
1ea0: 6f 62 6a 65 63 74 20 74 68 65 20 72 65 76 69 73  object the revis
1eb0: 69 6f 6e 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 20  ion belongs to. 
1ec0: 41 6e 0a 09 09 09 20 20 20 20 20 20 23 20 61 6c  An....      # al
1ed0: 74 65 72 6e 61 74 69 76 65 20 69 64 69 6f 6d 20  ternative idiom 
1ee0: 77 6f 75 6c 64 20 62 65 20 74 6f 20 63 61 6c 6c  would be to call
1ef0: 20 69 74 0a 09 09 09 20 20 20 20 20 20 23 20 74   it....      # t
1f00: 68 65 20 62 72 61 6e 63 68 20 74 68 65 20 72 65  he branch the re
1f10: 76 69 73 69 6f 6e 20 69 73 20 6f 6e 2e 20 54 68  vision is on. Th
1f20: 69 73 0a 09 09 09 20 20 20 20 20 20 23 20 72 65  is....      # re
1f30: 66 65 72 65 6e 63 65 20 69 73 20 74 6f 20 61 20  ference is to a 
1f40: 70 72 6f 6a 65 63 74 2d 6c 65 76 65 6c 20 6f 62  project-level ob
1f50: 6a 65 63 74 0a 09 09 09 20 20 20 20 20 20 23 20  ject....      # 
1f60: 28 73 79 6d 62 6f 6c 20 6f 72 20 74 72 75 6e 6b  (symbol or trunk
1f70: 29 2e 0a 0a 20 20 20 20 23 20 42 61 73 69 63 20  )...    # Basic 
1f80: 70 61 72 65 6e 74 2f 63 68 69 6c 64 20 6c 69 6e  parent/child lin
1f90: 6b 61 67 65 20 28 6c 69 6e 65 73 20 6f 66 20 64  kage (lines of d
1fa0: 65 76 65 6c 6f 70 6d 65 6e 74 29 0a 0a 20 20 20  evelopment)..   
1fb0: 20 76 61 72 69 61 62 6c 65 20 6d 79 70 61 72 65   variable mypare
1fc0: 6e 74 20 7b 7d 20 3b 20 23 20 52 65 66 20 74 6f  nt {} ; # Ref to
1fd0: 20 70 61 72 65 6e 74 20 72 65 76 69 73 69 6f 6e   parent revision
1fe0: 20 6f 62 6a 65 63 74 2e 20 4c 69 6e 6b 20 72 65   object. Link re
1ff0: 71 75 69 72 65 64 20 62 65 63 61 75 73 65 20 6f  quired because o
2000: 66 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20  f.    #         
2010: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 27             ; # '
2020: 63 76 73 61 64 6d 69 6e 20 2d 6f 27 2c 20 77 68  cvsadmin -o', wh
2030: 69 63 68 20 63 61 6e 20 63 72 65 61 74 65 20 61  ich can create a
2040: 72 62 69 74 72 61 72 79 20 67 61 70 73 20 69 6e  rbitrary gaps in
2050: 20 74 68 65 0a 20 20 20 20 23 20 20 20 20 20 20   the.    #      
2060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
2070: 23 20 6e 75 6d 62 65 72 69 6e 67 20 73 65 71 75  # numbering sequ
2080: 65 6e 63 65 2e 20 54 68 69 73 20 69 73 20 69 6e  ence. This is in
2090: 20 74 68 65 20 73 61 6d 65 20 6c 69 6e 65 20 6f   the same line o
20a0: 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 0a 20 20  f development.  
20b0: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
20c0: 20 20 20 20 20 20 20 3b 20 23 20 4e 6f 74 65 3a         ; # Note:
20d0: 20 46 6f 72 20 74 68 65 20 66 69 72 73 74 20 72   For the first r
20e0: 65 76 69 73 69 6f 6e 20 6f 6e 20 61 20 62 72 61  evision on a bra
20f0: 6e 63 68 20 74 68 65 20 72 65 76 69 73 69 6f 6e  nch the revision
2100: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
2110: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 69 74            ; # it
2120: 20 77 61 73 20 73 70 61 77 6e 65 64 20 66 72 6f   was spawned fro
2130: 6d 20 69 73 20 74 68 65 20 70 61 72 65 6e 74 2e  m is the parent.
2140: 20 4f 6e 6c 79 20 74 68 65 20 72 6f 6f 74 20 72   Only the root r
2150: 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 20 20  evision.    #   
2160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2170: 20 3b 20 23 20 6f 66 20 6d 79 66 69 6c 65 27 73   ; # of myfile's
2180: 20 72 65 76 69 73 69 6f 6e 20 74 72 65 65 20 68   revision tree h
2190: 61 73 20 6e 6f 74 68 69 6e 67 20 73 65 74 20 68  as nothing set h
21a0: 65 72 65 2e 0a 20 20 20 20 23 20 20 20 20 20 20  ere..    #      
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
21c0: 23 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  #..    variable 
21d0: 6d 79 63 68 69 6c 64 20 20 7b 7d 20 3b 20 23 20  mychild  {} ; # 
21e0: 52 65 66 20 74 6f 20 74 68 65 20 70 72 69 6d 61  Ref to the prima
21f0: 72 79 20 63 68 69 6c 64 20 72 65 76 69 73 69 6f  ry child revisio
2200: 6e 20 6f 62 6a 65 63 74 2c 20 69 2e 65 2e 20 74  n object, i.e. t
2210: 68 65 20 6e 65 78 74 0a 20 20 20 20 23 20 20 20  he next.    #   
2220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2230: 20 3b 20 23 20 72 65 76 69 73 69 6f 6e 20 69 6e   ; # revision in
2240: 20 74 68 65 20 73 61 6d 65 20 6c 69 6e 65 20 6f   the same line o
2250: 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e 0a 0a  f development...
2260: 20 20 20 20 23 20 42 72 61 6e 63 68 20 6c 69 6e      # Branch lin
2270: 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  kage ___________
2280: 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 76  _________..    v
2290: 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68  ariable mybranch
22a0: 65 73 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69  es     {} ; # Li
22b0: 73 74 20 6f 66 20 74 68 65 20 62 72 61 6e 63 68  st of the branch
22c0: 65 73 20 28 6f 62 6a 73 29 20 73 70 61 77 6e 65  es (objs) spawne
22d0: 64 20 62 79 20 74 68 69 73 20 72 65 76 69 73 69  d by this revisi
22e0: 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  on..    variable
22f0: 20 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20   myparentbranch 
2300: 7b 7d 20 3b 20 23 20 46 6f 72 20 74 68 65 20 66  {} ; # For the f
2310: 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e  irst revision on
2320: 20 61 20 62 72 61 6e 63 68 20 74 68 65 20 72 65   a branch the re
2330: 6c 65 76 61 6e 74 0a 20 20 20 20 23 20 20 20 20  levant.    #    
2340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2350: 20 20 20 20 20 20 3b 20 23 20 62 72 61 6e 63 68        ; # branch
2360: 20 6f 62 6a 65 63 74 2e 20 54 68 69 73 20 61 6c   object. This al
2370: 73 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74 6f 20  so allows us to 
2380: 64 65 74 65 72 6d 69 6e 65 20 69 66 0a 20 20 20  determine if.   
2390: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20              ; # 
23b0: 6d 79 70 61 72 65 6e 74 20 69 73 20 69 6e 20 74  myparent is in t
23c0: 68 65 20 73 61 6d 65 20 4c 4f 44 2c 20 6f 72 20  he same LOD, or 
23d0: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74 68 65  the revision the
23e0: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2400: 3b 20 23 20 62 72 61 6e 63 68 20 73 70 61 77 6e  ; # branch spawn
2410: 65 64 20 66 72 6f 6d 2e 0a 0a 20 20 20 20 23 20  ed from...    # 
2420: 4c 69 73 74 20 6f 66 20 74 68 65 20 72 65 76 69  List of the revi
2430: 73 69 6f 6e 20 6f 62 6a 65 63 74 73 20 6f 66 20  sion objects of 
2440: 74 68 65 20 66 69 72 73 74 20 63 6f 6d 6d 69 74  the first commit
2450: 73 20 6f 6e 20 61 6e 79 0a 20 20 20 20 23 20 62  s on any.    # b
2460: 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20  ranches spawned 
2470: 62 79 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e  by this revision
2480: 20 6f 6e 20 77 68 69 63 68 20 63 6f 6d 6d 69 74   on which commit
2490: 73 20 6f 63 63 75 72 72 65 64 2e 0a 20 20 20 20  s occurred..    
24a0: 23 20 54 68 69 73 20 64 65 70 65 6e 64 65 6e 63  # This dependenc
24b0: 79 20 69 73 20 6b 65 70 74 20 65 78 70 6c 69 63  y is kept explic
24c0: 69 74 6c 79 20 62 65 63 61 75 73 65 20 6f 74 68  itly because oth
24d0: 65 72 77 69 73 65 20 61 0a 20 20 20 20 23 20 72  erwise a.    # r
24e0: 65 76 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74 6f 70  evision-only top
24f0: 6f 6c 6f 67 69 63 61 6c 20 73 6f 72 74 20 77 6f  ological sort wo
2500: 75 6c 64 20 6d 69 73 73 20 74 68 65 20 64 65 70  uld miss the dep
2510: 65 6e 64 65 6e 63 79 20 74 68 61 74 0a 20 20 20  endency that.   
2520: 20 23 20 65 78 69 73 74 73 20 76 69 61 20 2d 3e   # exists via ->
2530: 20 6d 79 62 72 61 6e 63 68 65 73 2e 0a 0a 20 20   mybranches...  
2540: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61    variable mybra
2550: 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d 20 3b  nchchildren {} ;
2560: 20 23 20 4c 69 73 74 20 6f 66 20 74 68 65 20 72   # List of the r
2570: 65 76 69 73 69 6f 6e 73 20 28 6f 62 6a 73 29 20  evisions (objs) 
2580: 77 68 69 63 68 20 61 72 65 20 74 68 65 20 66 69  which are the fi
2590: 72 73 74 0a 20 20 20 20 23 20 20 20 20 20 20 20  rst.    #       
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b0: 20 20 20 20 20 3b 20 23 20 63 6f 6d 6d 69 74 73       ; # commits
25c0: 20 6f 6e 20 61 6e 79 20 6f 66 20 74 68 65 20 62   on any of the b
25d0: 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64 20  ranches spawned 
25e0: 66 72 6f 6d 20 74 68 69 73 0a 20 20 20 20 23 20  from this.    # 
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2600: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 72             ; # r
2610: 65 76 69 73 69 6f 6e 2e 20 54 68 65 20 64 65 70  evision. The dep
2620: 65 6e 64 65 6e 63 79 20 69 73 20 6b 65 70 74 20  endency is kept 
2630: 65 78 70 6c 69 63 69 74 6c 79 20 74 6f 0a 20 20  explicitly to.  
2640: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b                 ;
2660: 20 23 20 65 6e 73 75 72 65 20 74 68 61 74 20 61   # ensure that a
2670: 20 72 65 76 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74   revision-only t
2680: 6f 70 6f 6c 6f 67 69 63 61 6c 20 73 6f 72 74 20  opological sort 
2690: 77 69 6c 6c 0a 20 20 20 20 23 20 20 20 20 20 20  will.    #      
26a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26b0: 20 20 20 20 20 20 3b 20 23 20 6e 6f 74 20 6d 69        ; # not mi
26c0: 73 73 20 69 74 2c 20 61 73 20 69 74 20 6f 74 68  ss it, as it oth
26d0: 65 72 77 69 73 65 20 65 78 69 73 74 73 20 6f 6e  erwise exists on
26e0: 6c 79 20 76 69 61 0a 20 20 20 20 23 20 20 20 20  ly via.    #    
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2700: 20 20 20 20 20 20 20 20 3b 20 23 20 6d 79 62 72          ; # mybr
2710: 61 6e 63 68 65 73 2e 0a 0a 20 20 20 20 23 20 54  anches...    # T
2720: 61 67 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f  ag linkage _____
2730: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
2740: 5f 5f 5f 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  ___..    variabl
2750: 65 20 6d 79 74 61 67 73 20 7b 7d 20 3b 20 23 20  e mytags {} ; # 
2760: 4c 69 73 74 20 6f 66 20 74 61 67 73 20 28 6f 62  List of tags (ob
2770: 6a 73 29 20 61 73 73 6f 63 69 61 74 65 64 20 77  js) associated w
2780: 69 74 68 20 74 68 69 73 20 72 65 76 69 73 69 6f  ith this revisio
2790: 6e 2e 0a 0a 20 20 20 20 23 20 4d 6f 72 65 20 64  n...    # More d
27a0: 65 72 69 76 65 64 20 64 61 74 61 0a 0a 20 20 20  erived data..   
27b0: 20 76 61 72 69 61 62 6c 65 20 6d 79 6f 70 65 72   variable myoper
27c0: 61 74 69 6f 6e 20 20 20 20 20 20 20 20 7b 7d 20  ation        {} 
27d0: 3b 20 23 20 4f 6e 65 20 6f 66 20 27 61 64 64 27  ; # One of 'add'
27e0: 2c 20 27 63 68 61 6e 67 65 27 2c 20 27 64 65 6c  , 'change', 'del
27f0: 65 74 65 27 2c 20 6f 72 0a 09 09 09 20 20 20 20  ete', or....    
2800: 20 20 20 20 20 20 20 20 20 23 20 27 6e 6f 74 68           # 'noth
2810: 69 6e 67 27 2e 20 44 65 72 69 76 65 64 20 66 72  ing'. Derived fr
2820: 6f 6d 20 6f 75 72 20 61 6e 64 0a 09 09 09 20 20  om our and....  
2830: 20 20 20 20 20 20 20 20 20 20 20 23 20 69 74 73             # its
2840: 20 70 61 72 65 6e 74 27 73 20 73 74 61 74 65 2e   parent's state.
2850: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
2860: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63  isondefaultbranc
2870: 68 20 30 20 3b 20 23 20 42 6f 6f 6c 65 61 6e 20  h 0 ; # Boolean 
2880: 66 6c 61 67 2c 20 73 65 74 20 69 66 20 74 68 65  flag, set if the
2890: 0a 09 09 09 09 20 20 20 20 20 23 20 72 65 76 69  .....     # revi
28a0: 73 69 6f 6e 20 69 73 20 6f 6e 20 74 68 65 20 6e  sion is on the n
28b0: 6f 6e 2d 74 72 75 6e 6b 0a 09 09 09 09 20 20 20  on-trunk.....   
28c0: 20 20 23 20 64 65 66 61 75 6c 74 20 62 72 61 6e    # default bran
28d0: 63 68 2c 20 61 6b 61 20 76 65 6e 64 6f 72 0a 09  ch, aka vendor..
28e0: 09 09 09 20 20 20 20 20 23 20 62 72 61 6e 63 68  ...     # branch
28f0: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
2900: 79 64 62 70 61 72 65 6e 74 20 20 20 20 20 20 20  ydbparent       
2910: 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e    {} ; # Referen
2920: 63 65 20 74 6f 20 74 68 65 20 6c 61 73 74 20 72  ce to the last r
2930: 65 76 69 73 69 6f 6e 0a 09 09 09 09 20 20 20 20  evision.....    
2940: 20 23 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f 72   # on the vendor
2950: 20 62 72 61 6e 63 68 20 69 66 20 74 68 69 73 20   branch if this 
2960: 69 73 0a 09 09 09 09 20 20 20 20 20 23 20 74 68  is.....     # th
2970: 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20  e primary child 
2980: 6f 66 20 74 68 65 0a 09 09 09 09 20 20 20 20 20  of the.....     
2990: 23 20 72 65 67 75 6c 61 72 20 72 6f 6f 74 2e 0a  # regular root..
29a0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64      variable myd
29b0: 62 63 68 69 6c 64 20 20 20 20 20 20 20 20 20 20  bchild          
29c0: 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65  {} ; # Reference
29d0: 20 74 6f 20 74 68 65 20 70 72 69 6d 61 72 79 20   to the primary 
29e0: 63 68 69 6c 64 0a 09 09 09 09 20 20 20 20 20 23  child.....     #
29f0: 20 6f 66 20 74 68 65 20 72 65 67 75 6c 61 72 20   of the regular 
2a00: 72 6f 6f 74 20 69 66 20 74 68 69 73 20 69 73 0a  root if this is.
2a10: 09 09 09 09 20 20 20 20 20 23 20 74 68 65 20 6c  ....     # the l
2a20: 61 73 74 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20  ast revision on 
2a30: 74 68 65 20 76 65 6e 64 6f 72 0a 09 09 09 09 20  the vendor..... 
2a40: 20 20 20 20 23 20 62 72 61 6e 63 68 2e 0a 0a 20      # branch... 
2a50: 20 20 20 23 20 64 65 61 64 28 73 65 6c 66 29 20     # dead(self) 
2a60: 78 20 64 65 61 64 28 70 61 72 65 6e 74 29 20 2d  x dead(parent) -
2a70: 3e 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20 20 20  > operation.    
2a80: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6f  typevariable myo
2a90: 70 73 74 61 74 65 20 2d 61 72 72 61 79 20 7b 0a  pstate -array {.
2aa0: 09 7b 30 20 30 7d 20 63 68 61 6e 67 65 0a 09 7b  .{0 0} change..{
2ab0: 30 20 31 7d 20 64 65 6c 65 74 65 0a 09 7b 31 20  0 1} delete..{1 
2ac0: 30 7d 20 61 64 64 0a 09 7b 31 20 31 7d 20 6e 6f  0} add..{1 1} no
2ad0: 74 68 69 6e 67 0a 20 20 20 20 7d 0a 0a 20 20 20  thing.    }..   
2ae0: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
2af0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
2b00: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20  ########.    ## 
2b10: 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73  Internal methods
2b20: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
2b30: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
2b40: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
2b50: 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69    ## Configurati
2b60: 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d  on..    pragma -
2b70: 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e  hastypeinfo    n
2b80: 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 20 69  o  ; # no type i
2b90: 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20  ntrospection.   
2ba0: 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f   pragma -hasinfo
2bb0: 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 23 20          no  ; # 
2bc0: 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73  no object intros
2bd0: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67  pection.    prag
2be0: 6d 61 20 2d 73 69 6d 70 6c 65 64 69 73 70 61 74  ma -simpledispat
2bf0: 63 68 20 79 65 73 20 3b 20 23 20 73 69 6d 70 6c  ch yes ; # simpl
2c00: 65 20 66 61 73 74 20 64 69 73 70 61 74 63 68 0a  e fast dispatch.
2c10: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
2c20: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
2c30: 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a  ############.}..
2c40: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
2c50: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
2c60: 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 7b  ort::cvs::file {
2c70: 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65  .    namespace e
2c80: 78 70 6f 72 74 20 72 65 76 0a 20 20 20 20 6e 61  xport rev.    na
2c90: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 72 65 76  mespace eval rev
2ca0: 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d   {..namespace im
2cb0: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73  port ::vc::tools
2cc0: 3a 3a 6d 69 73 63 3a 3a 2a 0a 20 20 20 20 7d 0a  ::misc::*.    }.
2cd0: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  }..# # ## ### ##
2ce0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
2cf0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
2d00: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d10: 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61  .## Ready..packa
2d20: 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66  ge provide vc::f
2d30: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
2d40: 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 20 31 2e  vs::file::rev 1.
2d50: 30 0a 72 65 74 75 72 6e 0a                       0.return.