Hex Artifact Content
Not logged in

Artifact 72b07e1bd51da1c7273808716c20a00e09c3a8c4:

File tools/cvs2fossil/lib/c2f_frev.tcl part of check-in [47d52d1efd] - Added convenience method for assertions and used it in place of the existing if/trouble internal constructions. Changed API of 'log write' so that we can defer substituation of the message to when the write actually happen, and converted all places which would be hit by double-substitution. The remaining 'log write' calls will be converted incrementally. by aku on 2007-11-28 05:39:49.

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 70 61 63 6b 61 67 65 20 72 65  tting.package re
0340: 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c  quire vc::fossil
0350: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73  ::import::cvs::s
0360: 74 61 74 65 20 20 20 20 20 20 3b 20 23 20 53 74  tate      ; # St
0370: 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63  ate storage..pac
0380: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a  kage require vc:
0390: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
03a0: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 20  :cvs::integrity 
03b0: 20 3b 20 23 20 53 74 61 74 65 20 69 6e 74 65 67   ; # State integ
03c0: 72 69 74 79 20 63 68 65 63 6b 73 2e 0a 0a 23 20  rity checks...# 
03d0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
03e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
03f0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0400: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 0a 0a  ###########.##..
0410: 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a  snit::type ::vc:
0420: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
0430: 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 20  :cvs::file::rev 
0440: 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  {.    # # ## ###
0450: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
0460: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
0470: 20 20 23 23 20 50 75 62 6c 69 63 20 41 50 49 0a    ## Public API.
0480: 0a 20 20 20 20 63 6f 6e 73 74 72 75 63 74 6f 72  .    constructor
0490: 20 7b 72 65 76 6e 72 20 64 61 74 65 20 73 74 61   {revnr date sta
04a0: 74 65 20 74 68 65 66 69 6c 65 7d 20 7b 0a 09 73  te thefile} {..s
04b0: 65 74 20 6d 79 72 65 76 6e 72 20 20 20 20 24 72  et myrevnr    $r
04c0: 65 76 6e 72 0a 09 73 65 74 20 6d 79 64 61 74 65  evnr..set mydate
04d0: 20 20 20 20 20 24 64 61 74 65 0a 09 73 65 74 20       $date..set 
04e0: 6d 79 6f 72 69 67 64 61 74 65 20 24 64 61 74 65  myorigdate $date
04f0: 0a 09 73 65 74 20 6d 79 73 74 61 74 65 20 20 20  ..set mystate   
0500: 20 24 73 74 61 74 65 0a 09 73 65 74 20 6d 79 66   $state..set myf
0510: 69 6c 65 20 20 20 20 20 24 74 68 65 66 69 6c 65  ile     $thefile
0520: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
0530: 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 69 64      method defid
0540: 20 7b 7d 20 7b 0a 09 73 65 74 20 6d 79 69 64 20   {} {..set myid 
0550: 5b 69 6e 63 72 20 6d 79 69 64 63 6f 75 6e 74 65  [incr myidcounte
0560: 72 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  r]..return.    }
0570: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 64 20  ..    method id 
0580: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69  {} { return $myi
0590: 64 20 7d 0a 0a 20 20 20 20 23 20 42 61 73 69 63  d }..    # Basic
05a0: 20 70 69 65 63 65 73 20 5f 5f 5f 5f 5f 5f 5f 5f   pieces ________
05b0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
05c0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61 73  ..    method has
05d0: 6d 65 74 61 20 7b 7d 20 7b 20 72 65 74 75 72 6e  meta {} { return
05e0: 20 5b 65 78 70 72 20 7b 24 6d 79 6d 65 74 61 69   [expr {$mymetai
05f0: 64 20 6e 65 20 22 22 7d 5d 20 7d 0a 20 20 20 20  d ne ""}] }.    
0600: 6d 65 74 68 6f 64 20 68 61 73 74 65 78 74 20 7b  method hastext {
0610: 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69 73  } {..struct::lis
0620: 74 20 61 73 73 69 67 6e 20 24 6d 79 74 65 78 74  t assign $mytext
0630: 20 73 20 65 0a 09 72 65 74 75 72 6e 20 5b 65 78   s e..return [ex
0640: 70 72 20 7b 24 73 20 3c 3d 20 24 65 7d 5d 0a 20  pr {$s <= $e}]. 
0650: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
0660: 20 73 65 74 6d 65 74 61 20 7b 6d 65 74 61 7d 20   setmeta {meta} 
0670: 7b 20 73 65 74 20 6d 79 6d 65 74 61 69 64 20 24  { set mymetaid $
0680: 6d 65 74 61 20 3b 20 72 65 74 75 72 6e 20 7d 0a  meta ; return }.
0690: 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 74 65      method sette
06a0: 78 74 20 7b 74 65 78 74 7d 20 7b 20 73 65 74 20  xt {text} { set 
06b0: 6d 79 74 65 78 74 20 20 20 24 74 65 78 74 20 3b  mytext   $text ;
06c0: 20 72 65 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65   return }.    me
06d0: 74 68 6f 64 20 73 65 74 6c 6f 64 20 20 7b 6c 6f  thod setlod  {lo
06e0: 64 7d 20 20 7b 20 73 65 74 20 6d 79 6c 6f 64 20  d}  { set mylod 
06f0: 20 20 20 24 6c 6f 64 20 20 3b 20 72 65 74 75 72     $lod  ; retur
0700: 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  n }..    method 
0710: 72 65 76 6e 72 20 7b 7d 20 7b 20 72 65 74 75 72  revnr {} { retur
0720: 6e 20 24 6d 79 72 65 76 6e 72 20 7d 0a 20 20 20  n $myrevnr }.   
0730: 20 6d 65 74 68 6f 64 20 73 74 61 74 65 20 7b 7d   method state {}
0740: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 73 74 61   { return $mysta
0750: 74 65 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  te }.    method 
0760: 6c 6f 64 20 20 20 7b 7d 20 7b 20 72 65 74 75 72  lod   {} { retur
0770: 6e 20 24 6d 79 6c 6f 64 20 20 20 7d 0a 20 20 20  n $mylod   }.   
0780: 20 6d 65 74 68 6f 64 20 64 61 74 65 20 20 7b 7d   method date  {}
0790: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 64 61 74   { return $mydat
07a0: 65 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64  e  }..    method
07b0: 20 69 73 6e 65 65 64 65 64 20 7b 7d 20 7b 0a 09   isneeded {} {..
07c0: 69 66 20 7b 24 6d 79 6f 70 65 72 61 74 69 6f 6e  if {$myoperation
07d0: 20 6e 65 20 22 6e 6f 74 68 69 6e 67 22 7d 20 20   ne "nothing"}  
07e0: 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31         {return 1
07f0: 7d 0a 09 69 66 20 7b 24 6d 79 72 65 76 6e 72 20  }..if {$myrevnr 
0800: 6e 65 20 22 31 2e 31 22 7d 20 20 20 20 20 20 20  ne "1.1"}       
0810: 20 20 20 20 20 20 20 20 20 20 7b 72 65 74 75 72            {retur
0820: 6e 20 31 7d 0a 09 69 66 20 7b 21 5b 24 6d 79 6c  n 1}..if {![$myl
0830: 6f 64 20 69 73 74 72 75 6e 6b 5d 7d 20 20 20 20  od istrunk]}    
0840: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 72 65               {re
0850: 74 75 72 6e 20 31 7d 0a 09 69 66 20 7b 21 5b 6c  turn 1}..if {![l
0860: 6c 65 6e 67 74 68 20 24 6d 79 62 72 61 6e 63 68  length $mybranch
0870: 65 73 5d 7d 20 20 20 20 20 20 20 20 20 20 20 20  es]}            
0880: 7b 72 65 74 75 72 6e 20 31 7d 0a 09 73 65 74 20  {return 1}..set 
0890: 66 69 72 73 74 62 72 61 6e 63 68 20 5b 6c 69 6e  firstbranch [lin
08a0: 64 65 78 20 24 6d 79 62 72 61 6e 63 68 65 73 20  dex $mybranches 
08b0: 30 5d 0a 09 69 66 20 7b 21 5b 24 66 69 72 73 74  0]..if {![$first
08c0: 62 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d  branch haschild]
08d0: 7d 20 20 20 20 20 20 20 20 20 20 7b 72 65 74 75  }          {retu
08e0: 72 6e 20 31 7d 0a 09 69 66 20 7b 24 6d 79 69 73  rn 1}..if {$myis
08f0: 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 7d  ondefaultbranch}
0900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 72                {r
0910: 65 74 75 72 6e 20 31 7d 0a 0a 09 23 20 46 49 58  eturn 1}...# FIX
0920: 3a 20 54 68 69 73 20 6d 65 73 73 61 67 65 20 77  : This message w
0930: 69 6c 6c 20 6e 6f 74 20 6d 61 74 63 68 20 69 66  ill not match if
0940: 20 74 68 65 20 52 43 53 20 66 69 6c 65 20 77 61   the RCS file wa
0950: 73 20 72 65 6e 61 6d 65 64 0a 09 23 20 6d 61 6e  s renamed..# man
0960: 75 61 6c 6c 79 20 61 66 74 65 72 20 69 74 20 77  ually after it w
0970: 61 73 20 63 72 65 61 74 65 64 2e 0a 0a 09 73 65  as created....se
0980: 74 20 67 65 6e 20 22 66 69 6c 65 20 5b 66 69 6c  t gen "file [fil
0990: 65 20 74 61 69 6c 20 5b 24 6d 79 66 69 6c 65 20  e tail [$myfile 
09a0: 75 73 72 70 61 74 68 5d 5d 20 77 61 73 20 69 6e  usrpath]] was in
09b0: 69 74 69 61 6c 6c 79 20 61 64 64 65 64 20 6f 6e  itially added on
09c0: 20 62 72 61 6e 63 68 20 5b 24 66 69 72 73 74 62   branch [$firstb
09d0: 72 61 6e 63 68 20 6e 61 6d 65 5d 2e 22 0a 09 73  ranch name]."..s
09e0: 65 74 20 6c 6f 67 20 5b 24 6d 79 66 69 6c 65 20  et log [$myfile 
09f0: 63 6f 6d 6d 69 74 6d 65 73 73 61 67 65 6f 66 20  commitmessageof 
0a00: 24 6d 79 6d 65 74 61 69 64 5d 0a 0a 09 72 65 74  $mymetaid]...ret
0a10: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6c 6f 67 20  urn [expr {$log 
0a20: 6e 65 20 24 67 65 6e 7d 5d 0a 20 20 20 20 7d 0a  ne $gen}].    }.
0a30: 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 73 6e 65  .    method isne
0a40: 65 64 65 64 62 72 61 6e 63 68 64 65 6c 20 7b 7d  ededbranchdel {}
0a50: 20 7b 0a 09 69 66 20 7b 24 6d 79 70 61 72 65 6e   {..if {$myparen
0a60: 74 62 72 61 6e 63 68 20 65 71 20 22 22 7d 20 20  tbranch eq ""}  
0a70: 20 20 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e           {return
0a80: 20 31 7d 20 3b 20 23 20 6e 6f 74 20 66 69 72 73   1} ; # not firs
0a90: 74 20 6f 6e 20 61 20 62 72 61 6e 63 68 2c 20 6e  t on a branch, n
0aa0: 65 65 64 65 64 0a 09 73 65 74 20 62 61 73 65 20  eeded..set base 
0ab0: 5b 24 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68  [$myparentbranch
0ac0: 20 70 61 72 65 6e 74 5d 0a 09 69 66 20 7b 24 62   parent]..if {$b
0ad0: 61 73 65 20 20 20 20 20 20 20 20 20 20 20 65 71  ase           eq
0ae0: 20 22 22 7d 20 20 20 20 20 20 20 20 20 20 20 7b   ""}           {
0af0: 72 65 74 75 72 6e 20 31 7d 20 3b 20 23 20 62 72  return 1} ; # br
0b00: 61 6e 63 68 20 68 61 73 20 70 61 72 65 6e 74 20  anch has parent 
0b10: 6c 6f 64 2c 20 6e 65 65 64 65 64 0a 09 69 66 20  lod, needed..if 
0b20: 7b 5b 24 73 65 6c 66 20 4c 4f 44 4c 65 6e 67 74  {[$self LODLengt
0b30: 68 5d 20 3c 20 32 7d 20 20 20 20 20 20 20 20 20  h] < 2}         
0b40: 20 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b 20 23    {return 1} ; #
0b50: 20 6f 75 72 20 6c 6f 64 20 63 6f 6e 74 61 69 6e   our lod contain
0b60: 73 20 6f 6e 6c 79 20 6f 75 72 73 65 6c 76 65 73  s only ourselves
0b70: 2c 20 6e 65 65 64 65 64 2e 0a 09 69 66 20 7b 24  , needed...if {$
0b80: 6d 79 6f 70 65 72 61 74 69 6f 6e 20 6e 65 20 22  myoperation ne "
0b90: 64 65 6c 65 74 65 22 7d 20 20 20 20 20 20 20 20  delete"}        
0ba0: 7b 72 65 74 75 72 6e 20 31 7d 20 3b 20 23 20 4e  {return 1} ; # N
0bb0: 6f 74 20 61 20 64 65 6c 65 74 69 6f 6e 2c 20 6e  ot a deletion, n
0bc0: 65 65 64 65 64 0a 09 69 66 20 7b 5b 6c 6c 65 6e  eeded..if {[llen
0bd0: 67 74 68 20 24 6d 79 74 61 67 73 5d 7d 20 20 20  gth $mytags]}   
0be0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 72 65 74              {ret
0bf0: 75 72 6e 20 31 7d 20 3b 20 23 20 48 61 76 65 20  urn 1} ; # Have 
0c00: 74 61 67 73 2c 20 6e 65 65 64 65 64 0a 09 69 66  tags, needed..if
0c10: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 62 72   {[llength $mybr
0c20: 61 6e 63 68 65 73 5d 7d 20 20 20 20 20 20 20 20  anches]}        
0c30: 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b 20     {return 1} ; 
0c40: 23 20 48 61 76 65 20 6f 74 68 65 72 20 62 72 61  # Have other bra
0c50: 6e 63 68 65 73 2c 20 6e 65 65 64 65 64 0a 09 69  nches, needed..i
0c60: 66 20 7b 61 62 73 28 24 6d 79 64 61 74 65 20 2d  f {abs($mydate -
0c70: 20 5b 24 62 61 73 65 20 64 61 74 65 5d 29 20 3e   [$base date]) >
0c80: 20 32 7d 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b   2} {return 1} ;
0c90: 20 23 20 4e 65 78 74 20 72 65 76 20 3e 20 32 20   # Next rev > 2 
0ca0: 73 65 63 6f 6e 64 73 20 61 70 61 72 74 2c 20 6e  seconds apart, n
0cb0: 65 65 64 65 64 0a 0a 20 20 20 20 20 20 20 20 23  eeded..        #
0cc0: 20 46 49 58 4d 45 3a 20 54 68 69 73 20 6d 65 73   FIXME: This mes
0cd0: 73 61 67 65 20 77 69 6c 6c 20 6e 6f 74 20 6d 61  sage will not ma
0ce0: 74 63 68 20 69 66 20 74 68 65 20 52 43 53 20 66  tch if the RCS f
0cf0: 69 6c 65 20 77 61 73 0a 20 20 20 20 20 20 20 20  ile was.        
0d00: 23 20 72 65 6e 61 6d 65 64 20 6d 61 6e 75 61 6c  # renamed manual
0d10: 6c 79 20 61 66 74 65 72 20 69 74 20 77 61 73 20  ly after it was 
0d20: 63 72 65 61 74 65 64 2e 0a 0a 09 73 65 74 20 71  created....set q
0d30: 66 69 6c 65 20 5b 73 74 72 69 6e 67 20 6d 61 70  file [string map
0d40: 20 7b 0a 09 20 20 20 20 2e 20 20 5c 5c 2e 20 20   {..    .  \\.  
0d50: 3f 20 20 5c 5c 3f 20 20 2a 20 20 5c 5c 2a 20 20  ?  \\?  *  \\*  
0d60: 5c 5c 20 5c 5c 5c 5c 20 2b 20 20 5c 5c 2b 20 20  \\ \\\\ +  \\+  
0d70: 5e 20 5c 5c 5e 20 24 20 5c 5c 24 0a 09 20 20 20  ^ \\^ $ \\$..   
0d80: 20 5c 5b 20 5c 5c 5c 5b 20 5c 5d 20 5c 5c 5c 5d   \[ \\\[ \] \\\]
0d90: 20 28 20 20 5c 5c 28 20 20 20 29 20 5c 5c 29 20   (  \\(   ) \\) 
0da0: 20 5c 7b 20 5c 5c 5c 7b 20 5c 7d 20 5c 5c 5c 7d   \{ \\\{ \} \\\}
0db0: 0a 09 7d 20 5b 66 69 6c 65 20 74 61 69 6c 20 5b  ..} [file tail [
0dc0: 24 6d 79 66 69 6c 65 20 75 73 72 70 61 74 68 5d  $myfile usrpath]
0dd0: 5d 5d 0a 09 73 65 74 20 70 61 74 74 65 72 6e 20  ]]..set pattern 
0de0: 22 66 69 6c 65 20 24 71 66 69 6c 65 20 77 61 73  "file $qfile was
0df0: 20 61 64 64 65 64 20 6f 6e 20 62 72 61 6e 63 68   added on branch
0e00: 20 2e 2a 20 6f 6e 20 5c 5c 64 7b 34 7d 2d 5c 5c   .* on \\d{4}-\\
0e10: 64 7b 32 7d 2d 5c 5c 64 7b 32 7d 20 5c 5c 64 7b  d{2}-\\d{2} \\d{
0e20: 32 7d 3a 5c 5c 64 7b 32 7d 3a 5c 5c 64 7b 32 7d  2}:\\d{2}:\\d{2}
0e30: 28 20 5c 5b 2b 2d 5c 5d 5c 5c 64 7b 34 7d 29 3f  ( \[+-\]\\d{4})?
0e40: 22 0a 09 73 65 74 20 6c 6f 67 20 20 20 20 20 5b  "..set log     [
0e50: 24 6d 79 66 69 6c 65 20 63 6f 6d 6d 69 74 6d 65  $myfile commitme
0e60: 73 73 61 67 65 6f 66 20 24 6d 79 6d 65 74 61 69  ssageof $mymetai
0e70: 64 5d 0a 0a 09 23 20 4e 6f 74 20 74 68 65 20 73  d]...# Not the s
0e80: 70 65 63 69 61 6c 20 6d 65 73 73 61 67 65 2c 20  pecial message, 
0e90: 6e 65 65 64 65 64 0a 09 69 66 20 7b 21 5b 72 65  needed..if {![re
0ea0: 67 65 78 70 20 2d 2d 20 24 70 61 74 74 65 72 6e  gexp -- $pattern
0eb0: 20 24 6c 6f 67 5d 7d 20 7b 72 65 74 75 72 6e 20   $log]} {return 
0ec0: 31 7d 0a 0a 09 23 20 54 68 69 73 20 69 73 20 61  1}...# This is a
0ed0: 6e 20 75 6e 6e 65 65 64 65 64 20 69 6e 69 74 69  n unneeded initi
0ee0: 61 6c 20 62 72 61 6e 63 68 20 64 65 6c 65 74 65  al branch delete
0ef0: 2e 0a 09 72 65 74 75 72 6e 20 30 0a 20 20 20 20  ...return 0.    
0f00: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 4c 4f  }..    method LO
0f10: 44 4c 65 6e 67 74 68 20 7b 7d 20 7b 0a 09 73 65  DLength {} {..se
0f20: 74 20 6e 20 31 20 3b 20 23 20 63 6f 75 6e 74 20  t n 1 ; # count 
0f30: 73 65 6c 66 0a 09 73 65 74 20 72 65 76 20 24 6d  self..set rev $m
0f40: 79 63 68 69 6c 64 0a 09 77 68 69 6c 65 20 7b 24  ychild..while {$
0f50: 72 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20  rev ne ""} {..  
0f60: 20 20 69 6e 63 72 20 6e 0a 09 20 20 20 20 73 65    incr n..    se
0f70: 74 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c  t rev [$rev chil
0f80: 64 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6e  d]..}..return $n
0f90: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 42 61  .    }..    # Ba
0fa0: 73 69 63 20 70 61 72 65 6e 74 2f 63 68 69 6c 64  sic parent/child
0fb0: 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f   linkage _______
0fc0: 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ___..    method 
0fd0: 68 61 73 70 61 72 65 6e 74 20 7b 7d 20 7b 20 72  hasparent {} { r
0fe0: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79  eturn [expr {$my
0ff0: 70 61 72 65 6e 74 20 6e 65 20 22 22 7d 5d 20 7d  parent ne ""}] }
1000: 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61 73 63  .    method hasc
1010: 68 69 6c 64 20 20 7b 7d 20 7b 20 72 65 74 75 72  hild  {} { retur
1020: 6e 20 5b 65 78 70 72 20 7b 24 6d 79 63 68 69 6c  n [expr {$mychil
1030: 64 20 20 6e 65 20 22 22 7d 5d 20 7d 0a 0a 20 20  d  ne ""}] }..  
1040: 20 20 6d 65 74 68 6f 64 20 73 65 74 70 61 72 65    method setpare
1050: 6e 74 20 7b 70 61 72 65 6e 74 7d 20 7b 0a 09 69  nt {parent} {..i
1060: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20  ntegrity assert 
1070: 7b 24 6d 79 70 61 72 65 6e 74 20 65 71 20 22 22  {$myparent eq ""
1080: 7d 20 7b 50 61 72 65 6e 74 20 61 6c 72 65 61 64  } {Parent alread
1090: 79 20 64 65 66 69 6e 65 64 7d 0a 09 73 65 74 20  y defined}..set 
10a0: 6d 79 70 61 72 65 6e 74 20 24 70 61 72 65 6e 74  myparent $parent
10b0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
10c0: 20 20 20 20 6d 65 74 68 6f 64 20 63 75 74 66 72      method cutfr
10d0: 6f 6d 70 61 72 65 6e 74 20 7b 7d 20 7b 20 73 65  omparent {} { se
10e0: 74 20 6d 79 70 61 72 65 6e 74 20 22 22 20 3b 20  t myparent "" ; 
10f0: 72 65 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74  return }.    met
1100: 68 6f 64 20 63 75 74 66 72 6f 6d 63 68 69 6c 64  hod cutfromchild
1110: 20 20 7b 7d 20 7b 20 73 65 74 20 6d 79 63 68 69    {} { set mychi
1120: 6c 64 20 20 22 22 20 3b 20 72 65 74 75 72 6e 20  ld  "" ; return 
1130: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65  }..    method se
1140: 74 63 68 69 6c 64 20 7b 63 68 69 6c 64 7d 20 7b  tchild {child} {
1150: 0a 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65  ..integrity asse
1160: 72 74 20 7b 24 6d 79 63 68 69 6c 64 20 65 71 20  rt {$mychild eq 
1170: 22 22 7d 20 7b 43 68 69 6c 64 20 61 6c 72 65 61  ""} {Child alrea
1180: 64 79 20 64 65 66 69 6e 65 64 7d 0a 09 73 65 74  dy defined}..set
1190: 20 6d 79 63 68 69 6c 64 20 24 63 68 69 6c 64 0a   mychild $child.
11a0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
11b0: 20 20 20 6d 65 74 68 6f 64 20 63 68 61 6e 67 65     method change
11c0: 70 61 72 65 6e 74 20 7b 70 61 72 65 6e 74 7d 20  parent {parent} 
11d0: 7b 20 73 65 74 20 6d 79 70 61 72 65 6e 74 20 24  { set myparent $
11e0: 70 61 72 65 6e 74 20 3b 20 72 65 74 75 72 6e 20  parent ; return 
11f0: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 68 61  }.    method cha
1200: 6e 67 65 63 68 69 6c 64 20 20 7b 63 68 69 6c 64  ngechild  {child
1210: 7d 20 20 7b 20 73 65 74 20 6d 79 63 68 69 6c 64  }  { set mychild
1220: 20 20 24 63 68 69 6c 64 20 20 3b 20 72 65 74 75    $child  ; retu
1230: 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64  rn }..    method
1240: 20 70 61 72 65 6e 74 20 7b 7d 20 7b 20 72 65 74   parent {} { ret
1250: 75 72 6e 20 24 6d 79 70 61 72 65 6e 74 20 7d 0a  urn $myparent }.
1260: 20 20 20 20 6d 65 74 68 6f 64 20 63 68 69 6c 64      method child
1270: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d    {} { return $m
1280: 79 63 68 69 6c 64 20 20 7d 0a 0a 20 20 20 20 23  ychild  }..    #
1290: 20 42 72 61 6e 63 68 20 6c 69 6e 6b 61 67 65 20   Branch linkage 
12a0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
12b0: 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68  ______..    meth
12c0: 6f 64 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e  od setparentbran
12d0: 63 68 20 7b 62 72 61 6e 63 68 7d 20 7b 0a 09 69  ch {branch} {..i
12e0: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20  ntegrity assert 
12f0: 7b 24 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68  {$myparentbranch
1300: 20 65 71 20 22 22 7d 20 7b 42 72 61 6e 63 68 20   eq ""} {Branch 
1310: 70 61 72 65 6e 74 20 61 6c 72 65 61 64 79 20 64  parent already d
1320: 65 66 69 6e 65 64 7d 0a 09 73 65 74 20 6d 79 70  efined}..set myp
1330: 61 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61  arentbranch $bra
1340: 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  nch..return.    
1350: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61  }..    method ha
1360: 73 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d  sparentbranch {}
1370: 20 7b 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20   { return [expr 
1380: 7b 24 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68  {$myparentbranch
1390: 20 6e 65 20 22 22 7d 5d 20 7d 0a 20 20 20 20 6d   ne ""}] }.    m
13a0: 65 74 68 6f 64 20 68 61 73 62 72 61 6e 63 68 65  ethod hasbranche
13b0: 73 20 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72  s     {} { retur
13c0: 6e 20 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 62 72  n [llength $mybr
13d0: 61 6e 63 68 65 73 5d 20 7d 0a 0a 20 20 20 20 6d  anches] }..    m
13e0: 65 74 68 6f 64 20 70 61 72 65 6e 74 62 72 61 6e  ethod parentbran
13f0: 63 68 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24  ch {} { return $
1400: 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7d  myparentbranch }
1410: 0a 20 20 20 20 6d 65 74 68 6f 64 20 62 72 61 6e  .    method bran
1420: 63 68 65 73 20 20 20 20 20 7b 7d 20 7b 20 72 65  ches     {} { re
1430: 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 65 73  turn $mybranches
1440: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 61   }..    method a
1450: 64 64 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68  ddbranch {branch
1460: 7d 20 7b 0a 09 6c 61 70 70 65 6e 64 20 6d 79 62  } {..lappend myb
1470: 72 61 6e 63 68 65 73 20 24 62 72 61 6e 63 68 0a  ranches $branch.
1480: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1490: 20 20 20 6d 65 74 68 6f 64 20 61 64 64 63 68 69     method addchi
14a0: 6c 64 6f 6e 62 72 61 6e 63 68 20 7b 63 68 69 6c  ldonbranch {chil
14b0: 64 7d 20 7b 0a 09 6c 61 70 70 65 6e 64 20 6d 79  d} {..lappend my
14c0: 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 24  branchchildren $
14d0: 63 68 69 6c 64 0a 09 72 65 74 75 72 6e 0a 20 20  child..return.  
14e0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
14f0: 63 75 74 66 72 6f 6d 70 61 72 65 6e 74 62 72 61  cutfromparentbra
1500: 6e 63 68 20 7b 7d 20 7b 20 73 65 74 20 6d 79 70  nch {} { set myp
1510: 61 72 65 6e 74 62 72 61 6e 63 68 20 22 22 20 3b  arentbranch "" ;
1520: 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d   return }..    m
1530: 65 74 68 6f 64 20 72 65 6d 6f 76 65 62 72 61 6e  ethod removebran
1540: 63 68 20 7b 62 72 61 6e 63 68 7d 20 7b 0a 09 6c  ch {branch} {..l
1550: 64 65 6c 65 74 65 20 6d 79 62 72 61 6e 63 68 65  delete mybranche
1560: 73 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75 72  s $branch..retur
1570: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
1580: 68 6f 64 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f  hod removechildo
1590: 6e 62 72 61 6e 63 68 20 7b 72 65 76 7d 20 7b 0a  nbranch {rev} {.
15a0: 09 6c 64 65 6c 65 74 65 20 6d 79 62 72 61 6e 63  .ldelete mybranc
15b0: 68 63 68 69 6c 64 72 65 6e 20 24 72 65 76 0a 09  hchildren $rev..
15c0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
15d0: 20 20 6d 65 74 68 6f 64 20 73 6f 72 74 62 72 61    method sortbra
15e0: 6e 63 68 65 73 20 7b 7d 20 7b 0a 09 23 20 50 61  nches {} {..# Pa
15f0: 73 73 20 32 3a 20 43 6f 6c 6c 65 63 74 52 65 76  ss 2: CollectRev
1600: 0a 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20  ...if {[llength 
1610: 24 6d 79 62 72 61 6e 63 68 65 73 5d 20 3c 20 32  $mybranches] < 2
1620: 7d 20 72 65 74 75 72 6e 0a 0a 09 23 20 53 6f 72  } return...# Sor
1630: 74 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 73  t the branches s
1640: 70 61 77 6e 65 64 20 62 79 20 74 68 69 73 20 72  pawned by this r
1650: 65 76 69 73 69 6f 6e 20 69 6e 20 63 72 65 61 74  evision in creat
1660: 69 6f 6e 0a 09 23 20 6f 72 64 65 72 2e 20 54 6f  ion..# order. To
1670: 20 68 65 6c 70 20 69 6e 20 74 68 69 73 20 6f 75   help in this ou
1680: 72 20 66 69 6c 65 20 67 61 76 65 20 61 6c 6c 20  r file gave all 
1690: 62 72 61 6e 63 68 65 73 20 61 20 70 6f 73 69 74  branches a posit
16a0: 69 6f 6e 0a 09 23 20 69 64 2c 20 69 6e 20 6f 72  ion..# id, in or
16b0: 64 65 72 20 6f 66 20 74 68 65 69 72 20 64 65 66  der of their def
16c0: 69 6e 69 74 69 6f 6e 20 62 79 20 74 68 65 20 52  inition by the R
16d0: 43 53 20 61 72 63 68 69 76 65 2e 0a 09 23 0a 09  CS archive...#..
16e0: 23 20 54 68 65 20 63 72 65 61 74 69 6f 6e 20 6f  # The creation o
16f0: 72 64 65 72 20 69 73 20 28 61 70 70 61 72 65 6e  rder is (apparen
1700: 74 6c 79 29 20 74 68 65 20 72 65 76 65 72 73 65  tly) the reverse
1710: 20 6f 66 20 74 68 65 0a 09 23 20 64 65 66 69 6e   of the..# defin
1720: 69 74 69 6f 6e 20 6f 72 64 65 72 2e 20 28 49 66  ition order. (If
1730: 20 61 20 62 72 61 6e 63 68 20 69 73 20 63 72 65   a branch is cre
1740: 61 74 65 64 20 74 68 65 6e 20 64 65 6c 65 74 65  ated then delete
1750: 64 2c 20 61 0a 09 23 20 6c 61 74 65 72 20 62 72  d, a..# later br
1760: 61 6e 63 68 20 63 61 6e 20 62 65 20 61 73 73 69  anch can be assi
1770: 67 6e 65 64 20 74 68 65 20 72 65 63 79 63 6c 65  gned the recycle
1780: 64 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 3b  d branch number;
1790: 0a 09 23 20 74 68 65 72 65 66 6f 72 65 20 62 72  ..# therefore br
17a0: 61 6e 63 68 20 6e 75 6d 62 65 72 73 20 61 72 65  anch numbers are
17b0: 20 6e 6f 74 20 61 6e 20 69 6e 64 69 63 61 74 69   not an indicati
17c0: 6f 6e 20 6f 66 20 63 72 65 61 74 69 6f 6e 0a 09  on of creation..
17d0: 23 20 6f 72 64 65 72 2e 29 0a 0a 09 73 65 74 20  # order.)...set 
17e0: 74 6d 70 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20  tmp {}..foreach 
17f0: 62 72 61 6e 63 68 20 24 6d 79 62 72 61 6e 63 68  branch $mybranch
1800: 65 73 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e  es {..    lappen
1810: 64 20 74 6d 70 20 5b 6c 69 73 74 20 24 62 72 61  d tmp [list $bra
1820: 6e 63 68 20 5b 24 62 72 61 6e 63 68 20 70 6f 73  nch [$branch pos
1830: 69 74 69 6f 6e 5d 5d 0a 09 7d 0a 0a 09 73 65 74  ition]]..}...set
1840: 20 6d 79 62 72 61 6e 63 68 65 73 20 7b 7d 0a 09   mybranches {}..
1850: 66 6f 72 65 61 63 68 20 69 74 65 6d 20 5b 6c 73  foreach item [ls
1860: 6f 72 74 20 2d 69 6e 64 65 78 20 31 20 2d 64 65  ort -index 1 -de
1870: 63 72 65 61 73 69 6e 67 20 24 74 6d 70 5d 20 7b  creasing $tmp] {
1880: 0a 09 20 20 20 20 73 74 72 75 63 74 3a 3a 6c 69  ..    struct::li
1890: 73 74 20 61 73 73 69 67 6e 20 24 69 74 65 6d 20  st assign $item 
18a0: 62 72 61 6e 63 68 20 70 6f 73 69 74 69 6f 6e 0a  branch position.
18b0: 09 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 62  .    lappend myb
18c0: 72 61 6e 63 68 65 73 20 24 62 72 61 6e 63 68 0a  ranches $branch.
18d0: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
18e0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6d 6f 76  ..    method mov
18f0: 65 62 72 61 6e 63 68 65 73 74 6f 20 7b 72 65 76  ebranchesto {rev
1900: 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c 6f 64 20  } {..set revlod 
1910: 5b 24 72 65 76 20 6c 6f 64 5d 0a 09 66 6f 72 65  [$rev lod]..fore
1920: 61 63 68 20 62 72 61 6e 63 68 20 24 6d 79 62 72  ach branch $mybr
1930: 61 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 24 72  anches {..    $r
1940: 65 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 72  ev addbranch $br
1950: 61 6e 63 68 0a 09 20 20 20 20 24 62 72 61 6e 63  anch..    $branc
1960: 68 20 73 65 74 70 61 72 65 6e 74 20 24 72 65 76  h setparent $rev
1970: 0a 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65  ..    $branch se
1980: 74 6c 6f 64 20 24 72 65 76 6c 6f 64 0a 09 7d 0a  tlod $revlod..}.
1990: 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 72  .foreach branchr
19a0: 65 76 20 24 6d 79 62 72 61 6e 63 68 63 68 69 6c  ev $mybranchchil
19b0: 64 72 65 6e 20 7b 0a 09 20 20 20 20 24 72 65 76  dren {..    $rev
19c0: 20 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63   addchildonbranc
19d0: 68 20 24 62 72 61 6e 63 68 72 65 76 0a 09 20 20  h $branchrev..  
19e0: 20 20 24 62 72 61 6e 63 68 72 65 76 20 63 75 74    $branchrev cut
19f0: 66 72 6f 6d 70 61 72 65 6e 74 0a 09 20 20 20 20  fromparent..    
1a00: 24 62 72 61 6e 63 68 72 65 76 20 73 65 74 70 61  $branchrev setpa
1a10: 72 65 6e 74 20 24 72 65 76 0a 09 7d 0a 09 73 65  rent $rev..}..se
1a20: 74 20 6d 79 62 72 61 6e 63 68 65 73 20 20 20 20  t mybranches    
1a30: 20 20 20 7b 7d 0a 09 73 65 74 20 6d 79 62 72 61     {}..set mybra
1a40: 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d 0a 09  nchchildren {}..
1a50: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
1a60: 20 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65 61    method removea
1a70: 6c 6c 62 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a  llbranches {} {.
1a80: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 20  .set mybranches 
1a90: 20 20 20 20 20 20 7b 7d 0a 09 73 65 74 20 6d 79        {}..set my
1aa0: 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b  branchchildren {
1ab0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
1ac0: 0a 20 20 20 20 23 20 54 61 67 20 6c 69 6e 6b 61  .    # Tag linka
1ad0: 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ge _____________
1ae0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20  ____________..  
1af0: 20 20 6d 65 74 68 6f 64 20 61 64 64 74 61 67 20    method addtag 
1b00: 7b 74 61 67 7d 20 7b 0a 09 6c 61 70 70 65 6e 64  {tag} {..lappend
1b10: 20 6d 79 74 61 67 73 20 24 74 61 67 0a 09 72 65   mytags $tag..re
1b20: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
1b30: 6d 65 74 68 6f 64 20 74 61 67 73 20 7b 7d 20 7b  method tags {} {
1b40: 20 72 65 74 75 72 6e 20 24 6d 79 74 61 67 73 20   return $mytags 
1b50: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65  }..    method re
1b60: 6d 6f 76 65 61 6c 6c 74 61 67 73 20 7b 7d 20 7b  movealltags {} {
1b70: 0a 09 73 65 74 20 6d 79 74 61 67 73 20 7b 7d 0a  ..set mytags {}.
1b80: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1b90: 20 20 20 6d 65 74 68 6f 64 20 6d 6f 76 65 74 61     method moveta
1ba0: 67 73 74 6f 20 7b 72 65 76 7d 20 7b 0a 09 73 65  gsto {rev} {..se
1bb0: 74 20 72 65 76 6c 6f 64 20 5b 24 72 65 76 20 6c  t revlod [$rev l
1bc0: 6f 64 5d 0a 09 66 6f 72 65 61 63 68 20 74 61 67  od]..foreach tag
1bd0: 20 24 6d 79 74 61 67 73 20 7b 0a 09 20 20 20 20   $mytags {..    
1be0: 24 72 65 76 20 61 64 64 74 61 67 20 24 74 61 67  $rev addtag $tag
1bf0: 0a 09 20 20 20 20 24 74 61 67 20 73 65 74 74 61  ..    $tag setta
1c00: 67 72 65 76 20 24 72 65 76 0a 09 20 20 20 20 24  grev $rev..    $
1c10: 74 61 67 20 73 65 74 6c 6f 64 20 24 72 65 76 6c  tag setlod $revl
1c20: 6f 64 0a 09 7d 0a 09 73 65 74 20 6d 79 74 61 67  od..}..set mytag
1c30: 73 20 7b 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  s {}..return.   
1c40: 20 7d 0a 0a 20 20 20 20 23 20 67 65 6e 65 72 61   }..    # genera
1c50: 6c 20 73 79 6d 62 6f 6c 20 6f 70 65 72 61 74 69  l symbol operati
1c60: 6f 6e 73 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a  ons ___________.
1c70: 0a 20 20 20 20 6d 65 74 68 6f 64 20 6d 6f 76 65  .    method move
1c80: 73 79 6d 62 6f 6c 73 74 6f 20 7b 72 65 76 7d 20  symbolsto {rev} 
1c90: 7b 0a 09 23 20 4d 6f 76 65 20 74 68 65 20 74 61  {..# Move the ta
1ca0: 67 73 20 61 6e 64 20 62 72 61 6e 63 68 65 73 20  gs and branches 
1cb0: 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73  attached to this
1cc0: 20 72 65 76 69 73 69 6f 6e 20 74 6f 20 74 68 65   revision to the
1cd0: 0a 09 23 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  ..# destination 
1ce0: 61 6e 64 20 66 69 78 20 61 6c 6c 20 70 6f 69 6e  and fix all poin
1cf0: 74 65 72 73 2e 0a 0a 09 24 73 65 6c 66 20 6d 6f  ters....$self mo
1d00: 76 65 74 61 67 73 74 6f 20 20 20 20 20 24 72 65  vetagsto     $re
1d10: 76 0a 09 24 73 65 6c 66 20 6d 6f 76 65 62 72 61  v..$self movebra
1d20: 6e 63 68 65 73 74 6f 20 24 72 65 76 0a 09 72 65  nchesto $rev..re
1d30: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
1d40: 23 20 44 65 72 69 76 65 64 20 73 74 75 66 66 20  # Derived stuff 
1d50: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1d60: 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74  _______..    met
1d70: 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 6f 70 65  hod determineope
1d80: 72 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 4c  ration {} {..# L
1d90: 6f 6f 6b 20 61 74 20 74 68 65 20 73 74 61 74 65  ook at the state
1da0: 20 6f 66 20 62 6f 74 68 20 74 68 69 73 20 72 65   of both this re
1db0: 76 69 73 69 6f 6e 20 61 6e 64 20 69 74 73 20 70  vision and its p
1dc0: 61 72 65 6e 74 20 74 6f 0a 09 23 20 64 65 74 65  arent to..# dete
1dd0: 72 6d 69 6e 65 20 74 68 65 20 74 79 70 65 20 6f  rmine the type o
1de0: 70 66 20 6f 70 65 72 61 74 69 6f 6e 20 77 68 69  pf operation whi
1df0: 63 68 20 77 61 73 20 70 65 72 66 6f 72 6d 65 64  ch was performed
1e00: 20 28 61 64 64 2c 0a 09 23 20 6d 6f 64 69 66 79   (add,..# modify
1e10: 2c 20 64 65 6c 65 74 65 2c 20 6e 6f 6e 65 29 2e  , delete, none).
1e20: 0a 09 23 0a 09 23 20 54 68 65 20 69 6d 70 6f 72  ..#..# The impor
1e30: 74 61 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  tant information
1e40: 20 69 73 20 64 65 61 64 20 76 73 20 6e 6f 74 2d   is dead vs not-
1e50: 64 65 61 64 20 66 6f 72 20 62 6f 74 68 2c 0a 09  dead for both,..
1e60: 23 20 67 69 76 69 6e 67 20 72 69 73 65 20 74 6f  # giving rise to
1e70: 20 66 6f 75 72 20 70 6f 73 73 69 62 6c 65 20 74   four possible t
1e80: 79 70 65 73 2e 0a 0a 09 73 65 74 20 73 64 65 61  ypes....set sdea
1e90: 64 20 5b 65 78 70 72 20 7b 24 6d 79 73 74 61 74  d [expr {$mystat
1ea0: 65 20 65 71 20 22 64 65 61 64 22 7d 5d 0a 09 73  e eq "dead"}]..s
1eb0: 65 74 20 70 64 65 61 64 20 5b 65 78 70 72 20 7b  et pdead [expr {
1ec0: 24 6d 79 70 61 72 65 6e 74 20 65 71 20 22 22 20  $myparent eq "" 
1ed0: 7c 7c 20 5b 24 6d 79 70 61 72 65 6e 74 20 73 74  || [$myparent st
1ee0: 61 74 65 5d 20 65 71 20 22 64 65 61 64 22 7d 5d  ate] eq "dead"}]
1ef0: 0a 0a 09 73 65 74 20 6d 79 6f 70 65 72 61 74 69  ...set myoperati
1f00: 6f 6e 20 24 6d 79 6f 70 73 74 61 74 65 28 5b 6c  on $myopstate([l
1f10: 69 73 74 20 24 70 64 65 61 64 20 24 73 64 65 61  ist $pdead $sdea
1f20: 64 5d 29 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  d])..return.    
1f30: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6f 70  }..    method op
1f40: 65 72 61 74 69 6f 6e 20 7b 7d 20 7b 20 72 65 74  eration {} { ret
1f50: 75 72 6e 20 24 6d 79 6f 70 65 72 61 74 69 6f 6e  urn $myoperation
1f60: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65   }.    method re
1f70: 74 79 70 65 20 7b 78 7d 20 7b 20 73 65 74 20 6d  type {x} { set m
1f80: 79 6f 70 65 72 61 74 69 6f 6e 20 24 78 20 3b 20  yoperation $x ; 
1f90: 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65  return }..    me
1fa0: 74 68 6f 64 20 69 73 6f 6e 64 65 66 61 75 6c 74  thod isondefault
1fb0: 62 72 61 6e 63 68 20 20 20 20 7b 7d 20 7b 20 72  branch    {} { r
1fc0: 65 74 75 72 6e 20 24 6d 79 69 73 6f 6e 64 65 66  eturn $myisondef
1fd0: 61 75 6c 74 62 72 61 6e 63 68 20 7d 0a 0a 20 20  aultbranch }..  
1fe0: 20 20 6d 65 74 68 6f 64 20 73 65 74 6f 6e 64 65    method setonde
1ff0: 66 61 75 6c 74 62 72 61 6e 63 68 20 20 20 7b 78  faultbranch   {x
2000: 7d 20 7b 20 73 65 74 20 6d 79 69 73 6f 6e 64 65  } { set myisonde
2010: 66 61 75 6c 74 62 72 61 6e 63 68 20 24 78 20 3b  faultbranch $x ;
2020: 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d   return }..    m
2030: 65 74 68 6f 64 20 73 65 74 64 65 66 61 75 6c 74  ethod setdefault
2040: 62 72 61 6e 63 68 63 68 69 6c 64 20 20 7b 72 65  branchchild  {re
2050: 76 7d 20 7b 20 73 65 74 20 6d 79 64 62 63 68 69  v} { set mydbchi
2060: 6c 64 20 24 72 65 76 20 3b 20 72 65 74 75 72 6e  ld $rev ; return
2070: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65   }.    method se
2080: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61  tdefaultbranchpa
2090: 72 65 6e 74 20 7b 72 65 76 7d 20 7b 0a 09 73 65  rent {rev} {..se
20a0: 74 20 6d 79 64 62 70 61 72 65 6e 74 20 24 72 65  t mydbparent $re
20b0: 76 0a 0a 09 23 20 52 65 74 79 70 65 20 74 68 65  v...# Retype the
20c0: 20 72 65 76 69 73 69 6f 6e 20 28 6d 61 79 20 63   revision (may c
20d0: 68 61 6e 67 65 20 66 72 6f 6d 20 27 61 64 64 27  hange from 'add'
20e0: 20 74 6f 20 27 63 68 61 6e 67 65 27 29 2e 0a 0a   to 'change')...
20f0: 09 73 65 74 20 73 64 65 61 64 20 5b 65 78 70 72  .set sdead [expr
2100: 20 7b 24 6d 79 6f 70 65 72 61 74 69 6f 6e 20 20   {$myoperation  
2110: 20 20 20 6e 65 20 22 63 68 61 6e 67 65 22 7d 5d     ne "change"}]
2120: 0a 09 73 65 74 20 70 64 65 61 64 20 5b 65 78 70  ..set pdead [exp
2130: 72 20 7b 5b 24 72 65 76 20 6f 70 65 72 61 74 69  r {[$rev operati
2140: 6f 6e 5d 20 6e 65 20 22 63 68 61 6e 67 65 22 7d  on] ne "change"}
2150: 5d 0a 09 73 65 74 20 6d 79 6f 70 65 72 61 74 69  ]..set myoperati
2160: 6f 6e 20 24 6d 79 6f 70 73 74 61 74 65 28 5b 6c  on $myopstate([l
2170: 69 73 74 20 24 70 64 65 61 64 20 24 73 64 65 61  ist $pdead $sdea
2180: 64 5d 29 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  d])..return.    
2190: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 75  }..    method cu
21a0: 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61  tdefaultbranchpa
21b0: 72 65 6e 74 20 7b 7d 20 7b 20 73 65 74 20 6d 79  rent {} { set my
21c0: 64 62 70 61 72 65 6e 74 20 22 22 20 3b 20 72 65  dbparent "" ; re
21d0: 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f  turn }.    metho
21e0: 64 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e  d cutdefaultbran
21f0: 63 68 63 68 69 6c 64 20 20 7b 7d 20 7b 20 73 65  chchild  {} { se
2200: 74 20 6d 79 64 62 63 68 69 6c 64 20 20 22 22 20  t mydbchild  "" 
2210: 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20  ; return }..    
2220: 6d 65 74 68 6f 64 20 64 65 66 61 75 6c 74 62 72  method defaultbr
2230: 61 6e 63 68 63 68 69 6c 64 20 20 7b 7d 20 7b 20  anchchild  {} { 
2240: 72 65 74 75 72 6e 20 24 6d 79 64 62 63 68 69 6c  return $mydbchil
2250: 64 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 64  d }.    method d
2260: 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65  efaultbranchpare
2270: 6e 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24  nt {} { return $
2280: 6d 79 64 62 70 61 72 65 6e 74 20 7d 0a 0a 20 20  mydbparent }..  
2290: 20 20 6d 65 74 68 6f 64 20 68 61 73 64 65 66 61    method hasdefa
22a0: 75 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 20 20  ultbranchchild  
22b0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 5b 65 78 70  {} { return [exp
22c0: 72 20 7b 24 6d 79 64 62 63 68 69 6c 64 20 20 6e  r {$mydbchild  n
22d0: 65 20 22 22 7d 5d 20 7d 0a 20 20 20 20 6d 65 74  e ""}] }.    met
22e0: 68 6f 64 20 68 61 73 64 65 66 61 75 6c 74 62 72  hod hasdefaultbr
22f0: 61 6e 63 68 70 61 72 65 6e 74 20 7b 7d 20 7b 20  anchparent {} { 
2300: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d  return [expr {$m
2310: 79 64 62 70 61 72 65 6e 74 20 6e 65 20 22 22 7d  ydbparent ne ""}
2320: 5d 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20  ] }..    # # ## 
2330: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
2340: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
2350: 0a 20 20 20 20 23 23 20 54 79 70 65 20 41 50 49  .    ## Type API
2360: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64  ..    typemethod
2370: 20 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 7b 72   istrunkrevnr {r
2380: 65 76 6e 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20  evnr} {..return 
2390: 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20  [expr {[llength 
23a0: 5b 73 70 6c 69 74 20 24 72 65 76 6e 72 20 2e 5d  [split $revnr .]
23b0: 5d 20 3d 3d 20 32 7d 5d 0a 20 20 20 20 7d 0a 0a  ] == 2}].    }..
23c0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69      typemethod i
23d0: 73 62 72 61 6e 63 68 72 65 76 6e 72 20 7b 72 65  sbranchrevnr {re
23e0: 76 6e 72 20 5f 20 62 76 7d 20 7b 0a 09 69 66 20  vnr _ bv} {..if 
23f0: 7b 5b 72 65 67 65 78 70 20 24 6d 79 62 72 61 6e  {[regexp $mybran
2400: 63 68 70 61 74 74 65 72 6e 20 24 72 65 76 6e 72  chpattern $revnr
2410: 20 2d 3e 20 68 65 61 64 20 74 61 69 6c 5d 7d 20   -> head tail]} 
2420: 7b 0a 09 20 20 20 20 75 70 76 61 72 20 31 20 24  {..    upvar 1 $
2430: 62 76 20 62 72 61 6e 63 68 6e 72 0a 09 20 20 20  bv branchnr..   
2440: 20 73 65 74 20 62 72 61 6e 63 68 6e 72 20 24 7b   set branchnr ${
2450: 68 65 61 64 7d 24 74 61 69 6c 0a 09 20 20 20 20  head}$tail..    
2460: 72 65 74 75 72 6e 20 31 0a 09 7d 0a 09 72 65 74  return 1..}..ret
2470: 75 72 6e 20 30 0a 20 20 20 20 7d 0a 0a 20 20 20  urn 0.    }..   
2480: 20 74 79 70 65 6d 65 74 68 6f 64 20 32 62 72 61   typemethod 2bra
2490: 6e 63 68 6e 72 20 7b 72 65 76 6e 72 7d 20 7b 0a  nchnr {revnr} {.
24a0: 09 23 20 49 6e 70 75 74 20 69 73 20 61 20 62 72  .# Input is a br
24b0: 61 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 6e 75  anch revision nu
24c0: 6d 62 65 72 2c 20 69 2e 65 2e 20 61 20 72 65 76  mber, i.e. a rev
24d0: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 0a 09 23 20  ision number..# 
24e0: 77 69 74 68 20 61 6e 20 65 76 65 6e 20 6e 75 6d  with an even num
24f0: 62 65 72 20 6f 66 20 63 6f 6d 70 6f 6e 65 6e 74  ber of component
2500: 73 3b 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 27  s; for example '
2510: 32 2e 39 2e 32 2e 31 27 0a 09 23 20 28 6e 65 76  2.9.2.1'..# (nev
2520: 65 72 20 27 32 2e 39 2e 32 27 20 6e 6f 72 20 27  er '2.9.2' nor '
2530: 32 2e 39 2e 30 2e 32 27 29 2e 20 20 54 68 65 20  2.9.0.2').  The 
2540: 72 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20  return value is 
2550: 74 68 65 0a 09 23 20 62 72 61 6e 63 68 20 6e 75  the..# branch nu
2560: 6d 62 65 72 20 28 66 6f 72 20 65 78 61 6d 70 6c  mber (for exampl
2570: 65 2c 20 27 32 2e 39 2e 32 27 29 2e 20 20 46 6f  e, '2.9.2').  Fo
2580: 72 20 74 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e  r trunk revision
2590: 73 2c 0a 09 23 20 6c 69 6b 65 20 27 33 2e 34 27  s,..# like '3.4'
25a0: 2c 20 77 65 20 72 65 74 75 72 6e 20 74 68 65 20  , we return the 
25b0: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 0a 09  empty string....
25c0: 69 66 20 7b 5b 24 74 79 70 65 20 69 73 74 72 75  if {[$type istru
25d0: 6e 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d  nkrevnr $revnr]}
25e0: 20 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 22   {..    return "
25f0: 22 0a 09 7d 0a 09 72 65 74 75 72 6e 20 5b 6a 6f  "..}..return [jo
2600: 69 6e 20 5b 6c 72 61 6e 67 65 20 5b 73 70 6c 69  in [lrange [spli
2610: 74 20 24 72 65 76 6e 72 20 2e 5d 20 30 20 65 6e  t $revnr .] 0 en
2620: 64 2d 31 5d 20 2e 5d 0a 20 20 20 20 7d 0a 0a 20  d-1] .].    }.. 
2630: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 32 62     typemethod 2b
2640: 72 61 6e 63 68 70 61 72 65 6e 74 72 65 76 6e 72  ranchparentrevnr
2650: 20 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 23   {branchnr} {..#
2660: 20 43 68 6f 70 20 74 68 65 20 6c 61 73 74 20 73   Chop the last s
2670: 65 67 6d 65 6e 74 20 6f 66 66 0a 09 72 65 74 75  egment off..retu
2680: 72 6e 20 5b 6a 6f 69 6e 20 5b 6c 72 61 6e 67 65  rn [join [lrange
2690: 20 5b 73 70 6c 69 74 20 24 62 72 61 6e 63 68 6e   [split $branchn
26a0: 72 20 2e 5d 20 30 20 65 6e 64 2d 31 5d 20 2e 5d  r .] 0 end-1] .]
26b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20  .    }..    # # 
26c0: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
26d0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
26e0: 23 23 23 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ###..    method 
26f0: 70 65 72 73 69 73 74 20 7b 7d 20 7b 0a 09 73 65  persist {} {..se
2700: 74 20 66 69 64 20 5b 24 6d 79 66 69 6c 65 20 69  t fid [$myfile i
2710: 64 5d 0a 09 73 65 74 20 6c 6f 64 20 5b 24 6d 79  d]..set lod [$my
2720: 6c 6f 64 20 69 64 5d 0a 09 73 65 74 20 6f 70 20  lod id]..set op 
2730: 20 24 6d 79 6f 70 63 6f 64 65 28 24 6d 79 6f 70   $myopcode($myop
2740: 65 72 61 74 69 6f 6e 29 0a 09 73 65 74 20 69 64  eration)..set id
2750: 62 20 24 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74  b $myisondefault
2760: 62 72 61 6e 63 68 0a 0a 09 73 74 72 75 63 74 3a  branch...struct:
2770: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 6d 79  :list assign $my
2780: 74 65 78 74 20 63 6f 66 66 20 65 6e 64 0a 09 73  text coff end..s
2790: 65 74 20 63 6c 65 6e 20 5b 65 78 70 72 20 7b 24  et clen [expr {$
27a0: 65 6e 64 20 2d 20 24 63 6f 66 66 7d 5d 0a 0a 09  end - $coff}]...
27b0: 6c 61 70 70 65 6e 64 20 6d 61 70 20 40 50 40 20  lappend map @P@ 
27c0: 5b 65 78 70 72 20 7b 20 28 24 6d 79 70 61 72 65  [expr { ($mypare
27d0: 6e 74 20 20 20 20 20 20 20 65 71 20 22 22 29 20  nt       eq "") 
27e0: 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b 24 6d 79 70  ? "NULL" : [$myp
27f0: 61 72 65 6e 74 20 20 20 20 20 20 20 69 64 5d 20  arent       id] 
2800: 7d 5d 0a 09 6c 61 70 70 65 6e 64 20 6d 61 70 20  }]..lappend map 
2810: 40 43 40 20 5b 65 78 70 72 20 7b 20 28 24 6d 79  @C@ [expr { ($my
2820: 63 68 69 6c 64 20 20 20 20 20 20 20 20 65 71 20  child        eq 
2830: 22 22 29 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b  "") ? "NULL" : [
2840: 24 6d 79 63 68 69 6c 64 20 20 20 20 20 20 20 20  $mychild        
2850: 69 64 5d 20 7d 5d 0a 09 6c 61 70 70 65 6e 64 20  id] }]..lappend 
2860: 6d 61 70 20 40 44 50 20 5b 65 78 70 72 20 7b 20  map @DP [expr { 
2870: 28 24 6d 79 64 62 70 61 72 65 6e 74 20 20 20 20  ($mydbparent    
2880: 20 65 71 20 22 22 29 20 3f 20 22 4e 55 4c 4c 22   eq "") ? "NULL"
2890: 20 3a 20 5b 24 6d 79 64 62 70 61 72 65 6e 74 20   : [$mydbparent 
28a0: 20 20 20 20 69 64 5d 20 7d 5d 0a 09 6c 61 70 70      id] }]..lapp
28b0: 65 6e 64 20 6d 61 70 20 40 44 43 20 5b 65 78 70  end map @DC [exp
28c0: 72 20 7b 20 28 24 6d 79 64 62 63 68 69 6c 64 20  r { ($mydbchild 
28d0: 20 20 20 20 20 65 71 20 22 22 29 20 3f 20 22 4e       eq "") ? "N
28e0: 55 4c 4c 22 20 3a 20 5b 24 6d 79 64 62 63 68 69  ULL" : [$mydbchi
28f0: 6c 64 20 20 20 20 20 20 69 64 5d 20 7d 5d 0a 09  ld      id] }]..
2900: 6c 61 70 70 65 6e 64 20 6d 61 70 20 40 42 50 20  lappend map @BP 
2910: 5b 65 78 70 72 20 7b 20 28 24 6d 79 70 61 72 65  [expr { ($mypare
2920: 6e 74 62 72 61 6e 63 68 20 65 71 20 22 22 29 20  ntbranch eq "") 
2930: 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b 24 6d 79 70  ? "NULL" : [$myp
2940: 61 72 65 6e 74 62 72 61 6e 63 68 20 69 64 5d 20  arentbranch id] 
2950: 7d 5d 0a 0a 09 73 65 74 20 63 6d 64 20 7b 0a 09  }]...set cmd {..
2960: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2970: 72 65 76 69 73 69 6f 6e 20 28 20 72 69 64 2c 20  revision ( rid, 
2980: 20 20 66 69 64 2c 20 20 72 65 76 2c 20 20 20 20    fid,  rev,    
2990: 20 20 6c 6f 64 2c 20 70 61 72 65 6e 74 2c 20 63    lod, parent, c
29a0: 68 69 6c 64 2c 20 20 69 73 64 65 66 61 75 6c 74  hild,  isdefault
29b0: 2c 20 64 62 70 61 72 65 6e 74 2c 20 64 62 63 68  , dbparent, dbch
29c0: 69 6c 64 2c 20 62 70 61 72 65 6e 74 2c 20 20 6f  ild, bparent,  o
29d0: 70 2c 20 20 64 61 74 65 2c 20 20 20 20 73 74 61  p,  date,    sta
29e0: 74 65 2c 20 20 20 20 6d 69 64 2c 20 20 20 20 20  te,    mid,     
29f0: 20 20 63 6f 66 66 2c 20 20 63 6c 65 6e 29 0a 09    coff,  clen)..
2a00: 20 20 20 20 56 41 4c 55 45 53 20 20 20 20 20 20      VALUES      
2a10: 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 64 2c           ($myid,
2a20: 20 24 66 69 64 2c 20 24 6d 79 72 65 76 6e 72 2c   $fid, $myrevnr,
2a30: 20 24 6c 6f 64 2c 20 40 50 40 2c 20 20 20 20 40   $lod, @P@,    @
2a40: 43 40 2c 20 20 20 24 69 64 62 2c 20 20 20 20 20  C@,   $idb,     
2a50: 20 20 40 44 50 2c 20 20 20 20 20 20 40 44 43 2c    @DP,      @DC,
2a60: 20 20 20 20 20 40 42 50 20 20 20 20 2c 20 24 6f       @BP    , $o
2a70: 70 2c 20 24 6d 79 64 61 74 65 2c 20 24 6d 79 73  p, $mydate, $mys
2a80: 74 61 74 65 2c 20 24 6d 79 6d 65 74 61 69 64 2c  tate, $mymetaid,
2a90: 20 24 63 6f 66 66 2c 20 24 63 6c 65 6e 29 3b 0a   $coff, $clen);.
2aa0: 09 7d 0a 0a 09 73 74 61 74 65 20 74 72 61 6e 73  .}...state trans
2ab0: 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 73 74  action {..    st
2ac0: 61 74 65 20 72 75 6e 20 5b 73 74 72 69 6e 67 20  ate run [string 
2ad0: 6d 61 70 20 24 6d 61 70 20 24 63 6d 64 5d 0a 0a  map $map $cmd]..
2ae0: 09 20 20 20 20 23 20 41 6e 64 20 74 68 65 20 62  .    # And the b
2af0: 72 61 6e 63 68 20 63 68 69 6c 64 72 65 6e 20 61  ranch children a
2b00: 73 20 77 65 6c 6c 2c 20 66 6f 72 20 70 61 73 73  s well, for pass
2b10: 20 35 2e 0a 09 20 20 20 20 66 6f 72 65 61 63 68   5...    foreach
2b20: 20 62 63 20 24 6d 79 62 72 61 6e 63 68 63 68 69   bc $mybranchchi
2b30: 6c 64 72 65 6e 20 7b 0a 09 09 73 65 74 20 62 63  ldren {...set bc
2b40: 69 64 20 5b 24 62 63 20 69 64 5d 0a 09 09 73 74  id [$bc id]...st
2b50: 61 74 65 20 72 75 6e 20 7b 0a 09 09 20 20 20 20  ate run {...    
2b60: 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 65 76 69  INSERT INTO revi
2b70: 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c 64 72  sionbranchchildr
2b80: 65 6e 20 28 72 69 64 2c 20 20 20 62 72 69 64 29  en (rid,   brid)
2b90: 0a 09 09 20 20 20 20 56 41 4c 55 45 53 20 20 20  ...    VALUES   
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb0: 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 64            ($myid
2bc0: 2c 20 24 62 63 69 64 29 3b 0a 09 09 7d 0a 09 20  , $bcid);...}.. 
2bd0: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a     }..}..return.
2be0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23      }..    # # #
2bf0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
2c00: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
2c10: 23 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a  ##.    ## State.
2c20: 0a 20 20 20 20 23 20 50 65 72 73 69 73 74 65 6e  .    # Persisten
2c30: 74 3a 20 6d 79 69 64 20 20 20 20 20 20 20 20 20  t: myid         
2c40: 20 20 20 20 20 20 20 2d 20 72 65 76 69 73 69 6f         - revisio
2c50: 6e 2e 72 69 64 0a 20 20 20 20 23 20 20 20 20 20  n.rid.    #     
2c60: 20 20 20 20 20 20 20 20 6d 79 66 69 6c 65 20 20          myfile  
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 2d 20 72 65              - re
2c80: 76 69 73 69 6f 6e 2e 66 69 64 0a 20 20 20 20 23  vision.fid.    #
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 79 6c               myl
2ca0: 6f 64 20 20 20 20 20 20 20 20 20 20 20 20 20 20  od              
2cb0: 20 2d 20 72 65 76 69 73 69 6f 6e 2e 6c 6f 64 0a   - revision.lod.
2cc0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
2cd0: 20 20 6d 79 72 65 76 6e 72 20 20 20 20 20 20 20    myrevnr       
2ce0: 20 20 20 20 20 20 2d 20 72 65 76 69 73 69 6f 6e        - revision
2cf0: 2e 72 65 76 0a 20 20 20 20 23 20 20 20 20 20 20  .rev.    #      
2d00: 20 20 20 20 20 20 20 6d 79 64 61 74 65 20 20 20         mydate   
2d10: 20 20 20 20 20 20 20 20 20 20 20 2d 20 72 65 76             - rev
2d20: 69 73 69 6f 6e 2e 64 61 74 65 0a 20 20 20 20 23  ision.date.    #
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 79 73               mys
2d40: 74 61 74 65 20 20 20 20 20 20 20 20 20 20 20 20  tate            
2d50: 20 2d 20 72 65 76 69 73 69 6f 6e 2e 73 74 61 74   - revision.stat
2d60: 65 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20  e.    #         
2d70: 20 20 20 20 6d 79 6d 65 74 61 69 64 20 20 20 20      mymetaid    
2d80: 20 20 20 20 20 20 20 20 2d 20 72 65 76 69 73 69          - revisi
2d90: 6f 6e 2e 6d 69 64 0a 20 20 20 20 23 20 20 20 20  on.mid.    #    
2da0: 20 20 20 20 20 20 20 20 20 6d 79 74 65 78 74 20           mytext 
2db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20 72               - r
2dc0: 65 76 69 73 69 6f 6e 2e 7b 63 73 2c 63 6c 7d 0a  evision.{cs,cl}.
2dd0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
2de0: 20 20 6d 79 70 61 72 65 6e 74 20 20 20 20 20 20    myparent      
2df0: 20 20 20 20 20 20 2d 20 72 65 76 69 73 69 6f 6e        - revision
2e00: 2e 70 61 72 65 6e 74 0a 20 20 20 20 23 20 20 20  .parent.    #   
2e10: 20 20 20 20 20 20 20 20 20 20 6d 79 63 68 69 6c            mychil
2e20: 64 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20  d             - 
2e30: 72 65 76 69 73 69 6f 6e 2e 63 68 69 6c 64 0a 20  revision.child. 
2e40: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20     #            
2e50: 20 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20   myparentbranch 
2e60: 20 20 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e       - revision.
2e70: 62 70 61 72 65 6e 74 0a 20 20 20 20 23 20 20 20  bparent.    #   
2e80: 20 20 20 20 20 20 20 20 20 20 6d 79 6f 70 65 72            myoper
2e90: 61 74 69 6f 6e 20 20 20 20 20 20 20 20 20 2d 20  ation         - 
2ea0: 72 65 76 69 73 69 6f 6e 2e 6f 70 0a 20 20 20 20  revision.op.    
2eb0: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 79  #             my
2ec0: 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63  isondefaultbranc
2ed0: 68 20 2d 20 72 65 76 69 73 69 6f 6e 2e 69 73 64  h - revision.isd
2ee0: 65 66 61 75 6c 74 0a 20 20 20 20 23 20 20 20 20  efault.    #    
2ef0: 20 20 20 20 20 20 20 20 20 6d 79 64 62 70 61 72           mydbpar
2f00: 65 6e 74 20 20 20 20 20 20 20 20 20 20 2d 20 72  ent          - r
2f10: 65 76 69 73 69 6f 6e 2e 64 62 70 61 72 65 6e 74  evision.dbparent
2f20: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
2f30: 20 20 20 6d 79 64 62 63 68 69 6c 64 20 20 20 20     mydbchild    
2f40: 20 20 20 20 20 20 20 2d 20 72 65 76 69 73 69 6f         - revisio
2f50: 6e 2e 64 62 63 68 69 6c 64 0a 0a 0a 20 20 20 20  n.dbchild...    
2f60: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 62  typevariable myb
2f70: 72 61 6e 63 68 70 61 74 74 65 72 6e 20 7b 5e 28  ranchpattern {^(
2f80: 28 3f 3a 5c 64 2b 5c 2e 5c 64 2b 5c 2e 29 2b 29  (?:\d+\.\d+\.)+)
2f90: 28 3f 3a 30 5c 2e 29 3f 28 5c 64 2b 29 24 7d 0a  (?:0\.)?(\d+)$}.
2fa0: 20 20 20 20 23 20 46 69 72 73 74 20 61 20 6e 6f      # First a no
2fb0: 6e 7a 65 72 6f 20 65 76 65 6e 20 6e 75 6d 62 65  nzero even numbe
2fc0: 72 20 6f 66 20 64 69 67 69 74 20 67 72 6f 75 70  r of digit group
2fd0: 73 20 77 69 74 68 20 74 72 61 69 6c 69 6e 67 20  s with trailing 
2fe0: 64 6f 74 0a 20 20 20 20 23 20 43 56 53 20 74 68  dot.    # CVS th
2ff0: 65 6e 20 73 74 69 63 6b 73 20 61 6e 20 65 78 74  en sticks an ext
3000: 72 61 20 30 20 69 6e 20 68 65 72 65 3b 20 52 43  ra 0 in here; RC
3010: 53 20 64 6f 65 73 20 6e 6f 74 2e 0a 20 20 20 20  S does not..    
3020: 23 20 41 6e 64 20 74 68 65 20 6c 61 73 74 20 64  # And the last d
3030: 69 67 69 74 20 67 72 6f 75 70 2e 0a 0a 20 20 20  igit group...   
3040: 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79   typevariable my
3050: 69 64 63 6f 75 6e 74 65 72 20 30 20 3b 20 23 20  idcounter 0 ; # 
3060: 43 6f 75 6e 74 65 72 20 66 6f 72 20 72 65 76 69  Counter for revi
3070: 73 69 6f 6e 20 69 64 73 2e 0a 20 20 20 20 76 61  sion ids..    va
3080: 72 69 61 62 6c 65 20 6d 79 69 64 20 20 20 20 20  riable myid     
3090: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 76        {} ; # Rev
30a0: 69 73 69 6f 6e 20 69 64 2e 0a 0a 20 20 20 20 76  ision id...    v
30b0: 61 72 69 61 62 6c 65 20 6d 79 72 65 76 6e 72 20  ariable myrevnr 
30c0: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 76 69 73      {} ; # Revis
30d0: 69 6f 6e 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  ion number of th
30e0: 65 20 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20  e revision..    
30f0: 76 61 72 69 61 62 6c 65 20 6d 79 64 61 74 65 20  variable mydate 
3100: 20 20 20 20 20 7b 7d 20 3b 20 23 20 54 69 6d 65       {} ; # Time
3110: 73 74 61 6d 70 20 6f 66 20 74 68 65 20 72 65 76  stamp of the rev
3120: 69 73 69 6f 6e 2c 20 73 65 63 6f 6e 64 73 20 73  ision, seconds s
3130: 69 6e 63 65 20 65 70 6f 63 68 0a 20 20 20 20 76  ince epoch.    v
3140: 61 72 69 61 62 6c 65 20 6d 79 6f 72 69 67 64 61  ariable myorigda
3150: 74 65 20 20 7b 7d 20 3b 20 23 20 4f 72 69 67 69  te  {} ; # Origi
3160: 6e 61 6c 20 75 6e 6d 6f 64 69 66 69 65 64 20 74  nal unmodified t
3170: 69 6d 65 73 74 61 6d 70 2e 0a 20 20 20 20 76 61  imestamp..    va
3180: 72 69 61 62 6c 65 20 6d 79 73 74 61 74 65 20 20  riable mystate  
3190: 20 20 20 7b 7d 20 3b 20 23 20 53 74 61 74 65 20     {} ; # State 
31a0: 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2e  of the revision.
31b0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
31c0: 66 69 6c 65 20 20 20 20 20 20 7b 7d 20 3b 20 23  file      {} ; #
31d0: 20 52 65 66 20 74 6f 20 74 68 65 20 66 69 6c 65   Ref to the file
31e0: 20 6f 62 6a 65 63 74 20 74 68 65 20 72 65 76 69   object the revi
31f0: 73 69 6f 6e 20 62 65 6c 6f 6e 67 73 20 74 6f 2e  sion belongs to.
3200: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
3210: 74 65 78 74 20 20 20 20 20 20 7b 7d 20 3b 20 23  text      {} ; #
3220: 20 52 61 6e 67 65 20 6f 66 20 74 68 65 20 28 64   Range of the (d
3230: 65 6c 74 61 29 20 74 65 78 74 20 66 6f 72 20 74  elta) text for t
3240: 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69 6e 20  his revision in 
3250: 74 68 65 20 66 69 6c 65 2e 0a 20 20 20 20 76 61  the file..    va
3260: 72 69 61 62 6c 65 20 6d 79 6d 65 74 61 69 64 20  riable mymetaid 
3270: 20 20 20 7b 7d 20 3b 20 23 20 49 64 20 6f 66 20     {} ; # Id of 
3280: 74 68 65 20 6d 65 74 61 20 64 61 74 61 20 67 72  the meta data gr
3290: 6f 75 70 20 74 68 65 20 72 65 76 69 73 69 6f 6e  oup the revision
32a0: 0a 09 09 09 20 20 20 20 20 20 23 20 62 65 6c 6f  ....      # belo
32b0: 6e 67 73 20 74 6f 2e 20 54 68 69 73 20 69 73 20  ngs to. This is 
32c0: 6c 61 74 65 72 20 75 73 65 64 20 74 6f 20 70 75  later used to pu
32d0: 74 0a 09 09 09 20 20 20 20 20 20 23 20 74 68 65  t....      # the
32e0: 20 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 73 20   file revisions 
32f0: 69 6e 74 6f 20 70 72 65 6c 69 6d 69 6e 61 72 79  into preliminary
3300: 0a 09 09 09 20 20 20 20 20 20 23 20 63 68 61 6e  ....      # chan
3310: 67 65 73 65 74 73 20 28 61 6b 61 20 70 72 6f 6a  gesets (aka proj
3320: 65 63 74 20 72 65 76 69 73 69 6f 6e 73 29 2e 0a  ect revisions)..
3330: 09 09 09 20 20 20 20 20 20 23 20 54 68 69 73 20  ...      # This 
3340: 69 64 20 65 6e 63 6f 64 65 73 20 34 20 70 69 65  id encodes 4 pie
3350: 63 65 73 20 6f 66 20 64 61 74 61 2c 0a 09 09 09  ces of data,....
3360: 20 20 20 20 20 20 23 20 6e 61 6d 65 6c 79 3a 20        # namely: 
3370: 74 68 65 20 70 72 6f 6a 65 63 74 20 61 6e 64 20  the project and 
3380: 62 72 61 6e 63 68 20 74 68 65 0a 09 09 09 20 20  branch the....  
3390: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 77      # revision w
33a0: 61 73 20 63 6f 6d 6d 69 74 74 65 64 20 74 6f 2c  as committed to,
33b0: 20 74 68 65 20 61 75 74 68 6f 72 0a 09 09 09 20   the author.... 
33c0: 20 20 20 20 20 23 20 77 68 6f 20 64 69 64 20 74       # who did t
33d0: 68 65 20 63 6f 6d 6d 69 74 2c 20 61 6e 64 20 74  he commit, and t
33e0: 68 65 20 6d 65 73 73 61 67 65 0a 09 09 09 20 20  he message....  
33f0: 20 20 20 20 23 20 75 73 65 64 2e 0a 20 20 20 20      # used..    
3400: 76 61 72 69 61 62 6c 65 20 6d 79 6c 6f 64 20 20  variable mylod  
3410: 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65       {} ; # Refe
3420: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 6c 69 6e  rence to the lin
3430: 65 2d 6f 66 2d 64 65 76 65 6c 6f 70 6d 65 6e 74  e-of-development
3440: 0a 09 09 09 20 20 20 20 20 20 23 20 6f 62 6a 65  ....      # obje
3450: 63 74 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20  ct the revision 
3460: 62 65 6c 6f 6e 67 73 20 74 6f 2e 20 41 6e 0a 09  belongs to. An..
3470: 09 09 20 20 20 20 20 20 23 20 61 6c 74 65 72 6e  ..      # altern
3480: 61 74 69 76 65 20 69 64 69 6f 6d 20 77 6f 75 6c  ative idiom woul
3490: 64 20 62 65 20 74 6f 20 63 61 6c 6c 20 69 74 0a  d be to call it.
34a0: 09 09 09 20 20 20 20 20 20 23 20 74 68 65 20 62  ...      # the b
34b0: 72 61 6e 63 68 20 74 68 65 20 72 65 76 69 73 69  ranch the revisi
34c0: 6f 6e 20 69 73 20 6f 6e 2e 20 54 68 69 73 0a 09  on is on. This..
34d0: 09 09 20 20 20 20 20 20 23 20 72 65 66 65 72 65  ..      # refere
34e0: 6e 63 65 20 69 73 20 74 6f 20 61 20 70 72 6f 6a  nce is to a proj
34f0: 65 63 74 2d 6c 65 76 65 6c 20 6f 62 6a 65 63 74  ect-level object
3500: 0a 09 09 09 20 20 20 20 20 20 23 20 28 73 79 6d  ....      # (sym
3510: 62 6f 6c 20 6f 72 20 74 72 75 6e 6b 29 2e 0a 0a  bol or trunk)...
3520: 20 20 20 20 23 20 42 61 73 69 63 20 70 61 72 65      # Basic pare
3530: 6e 74 2f 63 68 69 6c 64 20 6c 69 6e 6b 61 67 65  nt/child linkage
3540: 20 28 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c   (lines of devel
3550: 6f 70 6d 65 6e 74 29 0a 0a 20 20 20 20 76 61 72  opment)..    var
3560: 69 61 62 6c 65 20 6d 79 70 61 72 65 6e 74 20 7b  iable myparent {
3570: 7d 20 3b 20 23 20 52 65 66 20 74 6f 20 70 61 72  } ; # Ref to par
3580: 65 6e 74 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a  ent revision obj
3590: 65 63 74 2e 20 4c 69 6e 6b 20 72 65 71 75 69 72  ect. Link requir
35a0: 65 64 20 62 65 63 61 75 73 65 20 6f 66 0a 20 20  ed because of.  
35b0: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
35c0: 20 20 20 20 20 20 20 3b 20 23 20 27 63 76 73 61         ; # 'cvsa
35d0: 64 6d 69 6e 20 2d 6f 27 2c 20 77 68 69 63 68 20  dmin -o', which 
35e0: 63 61 6e 20 63 72 65 61 74 65 20 61 72 62 69 74  can create arbit
35f0: 72 61 72 79 20 67 61 70 73 20 69 6e 20 74 68 65  rary gaps in the
3600: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
3610: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 6e 75            ; # nu
3620: 6d 62 65 72 69 6e 67 20 73 65 71 75 65 6e 63 65  mbering sequence
3630: 2e 20 54 68 69 73 20 69 73 20 69 6e 20 74 68 65  . This is in the
3640: 20 73 61 6d 65 20 6c 69 6e 65 20 6f 66 20 64 65   same line of de
3650: 76 65 6c 6f 70 6d 65 6e 74 0a 20 20 20 20 23 20  velopment.    # 
3660: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3670: 20 20 20 3b 20 23 20 4e 6f 74 65 3a 20 46 6f 72     ; # Note: For
3680: 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69 73   the first revis
3690: 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20  ion on a branch 
36a0: 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 20 20 20  the revision.   
36b0: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
36c0: 20 20 20 20 20 20 3b 20 23 20 69 74 20 77 61 73        ; # it was
36d0: 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69 73   spawned from is
36e0: 20 74 68 65 20 70 61 72 65 6e 74 2e 20 4f 6e 6c   the parent. Onl
36f0: 79 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73  y the root revis
3700: 69 6f 6e 0a 20 20 20 20 23 20 20 20 20 20 20 20  ion.    #       
3710: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
3720: 20 6f 66 20 6d 79 66 69 6c 65 27 73 20 72 65 76   of myfile's rev
3730: 69 73 69 6f 6e 20 74 72 65 65 20 68 61 73 20 6e  ision tree has n
3740: 6f 74 68 69 6e 67 20 73 65 74 20 68 65 72 65 2e  othing set here.
3750: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
3760: 20 20 20 20 20 20 20 20 20 20 3b 20 23 0a 0a 20            ; #.. 
3770: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 63 68     variable mych
3780: 69 6c 64 20 20 7b 7d 20 3b 20 23 20 52 65 66 20  ild  {} ; # Ref 
3790: 74 6f 20 74 68 65 20 70 72 69 6d 61 72 79 20 63  to the primary c
37a0: 68 69 6c 64 20 72 65 76 69 73 69 6f 6e 20 6f 62  hild revision ob
37b0: 6a 65 63 74 2c 20 69 2e 65 2e 20 74 68 65 20 6e  ject, i.e. the n
37c0: 65 78 74 0a 20 20 20 20 23 20 20 20 20 20 20 20  ext.    #       
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
37e0: 20 72 65 76 69 73 69 6f 6e 20 69 6e 20 74 68 65   revision in the
37f0: 20 73 61 6d 65 20 6c 69 6e 65 20 6f 66 20 64 65   same line of de
3800: 76 65 6c 6f 70 6d 65 6e 74 2e 0a 0a 20 20 20 20  velopment...    
3810: 23 20 42 72 61 6e 63 68 20 6c 69 6e 6b 61 67 65  # Branch linkage
3820: 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f   _______________
3830: 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 76 61 72 69 61  _____..    varia
3840: 62 6c 65 20 6d 79 62 72 61 6e 63 68 65 73 20 20  ble mybranches  
3850: 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f     {} ; # List o
3860: 66 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 28  f the branches (
3870: 6f 62 6a 73 29 20 73 70 61 77 6e 65 64 20 62 79  objs) spawned by
3880: 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 2e 0a   this revision..
3890: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70      variable myp
38a0: 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d 20 3b  arentbranch {} ;
38b0: 20 23 20 46 6f 72 20 74 68 65 20 66 69 72 73 74   # For the first
38c0: 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61 20 62   revision on a b
38d0: 72 61 6e 63 68 20 74 68 65 20 72 65 6c 65 76 61  ranch the releva
38e0: 6e 74 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  nt.    #        
38f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3900: 20 20 3b 20 23 20 62 72 61 6e 63 68 20 6f 62 6a    ; # branch obj
3910: 65 63 74 2e 20 54 68 69 73 20 61 6c 73 6f 20 61  ect. This also a
3920: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 64 65 74 65  llows us to dete
3930: 72 6d 69 6e 65 20 69 66 0a 20 20 20 20 23 20 20  rmine if.    #  
3940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3950: 20 20 20 20 20 20 20 20 3b 20 23 20 6d 79 70 61          ; # mypa
3960: 72 65 6e 74 20 69 73 20 69 6e 20 74 68 65 20 73  rent is in the s
3970: 61 6d 65 20 4c 4f 44 2c 20 6f 72 20 74 68 65 20  ame LOD, or the 
3980: 72 65 76 69 73 69 6f 6e 20 74 68 65 0a 20 20 20  revision the.   
3990: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
39a0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20              ; # 
39b0: 62 72 61 6e 63 68 20 73 70 61 77 6e 65 64 20 66  branch spawned f
39c0: 72 6f 6d 2e 0a 0a 20 20 20 20 23 20 4c 69 73 74  rom...    # List
39d0: 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e   of the revision
39e0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 65 20   objects of the 
39f0: 66 69 72 73 74 20 63 6f 6d 6d 69 74 73 20 6f 6e  first commits on
3a00: 20 61 6e 79 0a 20 20 20 20 23 20 62 72 61 6e 63   any.    # branc
3a10: 68 65 73 20 73 70 61 77 6e 65 64 20 62 79 20 74  hes spawned by t
3a20: 68 69 73 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20  his revision on 
3a30: 77 68 69 63 68 20 63 6f 6d 6d 69 74 73 20 6f 63  which commits oc
3a40: 63 75 72 72 65 64 2e 0a 20 20 20 20 23 20 54 68  curred..    # Th
3a50: 69 73 20 64 65 70 65 6e 64 65 6e 63 79 20 69 73  is dependency is
3a60: 20 6b 65 70 74 20 65 78 70 6c 69 63 69 74 6c 79   kept explicitly
3a70: 20 62 65 63 61 75 73 65 20 6f 74 68 65 72 77 69   because otherwi
3a80: 73 65 20 61 0a 20 20 20 20 23 20 72 65 76 69 73  se a.    # revis
3a90: 69 6f 6e 2d 6f 6e 6c 79 20 74 6f 70 6f 6c 6f 67  ion-only topolog
3aa0: 69 63 61 6c 20 73 6f 72 74 20 77 6f 75 6c 64 20  ical sort would 
3ab0: 6d 69 73 73 20 74 68 65 20 64 65 70 65 6e 64 65  miss the depende
3ac0: 6e 63 79 20 74 68 61 74 0a 20 20 20 20 23 20 65  ncy that.    # e
3ad0: 78 69 73 74 73 20 76 69 61 20 2d 3e 20 6d 79 62  xists via -> myb
3ae0: 72 61 6e 63 68 65 73 2e 0a 0a 20 20 20 20 76 61  ranches...    va
3af0: 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 63  riable mybranchc
3b00: 68 69 6c 64 72 65 6e 20 7b 7d 20 3b 20 23 20 4c  hildren {} ; # L
3b10: 69 73 74 20 6f 66 20 74 68 65 20 72 65 76 69 73  ist of the revis
3b20: 69 6f 6e 73 20 28 6f 62 6a 73 29 20 77 68 69 63  ions (objs) whic
3b30: 68 20 61 72 65 20 74 68 65 20 66 69 72 73 74 0a  h are the first.
3b40: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b60: 20 3b 20 23 20 63 6f 6d 6d 69 74 73 20 6f 6e 20   ; # commits on 
3b70: 61 6e 79 20 6f 66 20 74 68 65 20 62 72 61 6e 63  any of the branc
3b80: 68 65 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d  hes spawned from
3b90: 20 74 68 69 73 0a 20 20 20 20 23 20 20 20 20 20   this.    #     
3ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bb0: 20 20 20 20 20 20 20 3b 20 23 20 72 65 76 69 73         ; # revis
3bc0: 69 6f 6e 2e 20 54 68 65 20 64 65 70 65 6e 64 65  ion. The depende
3bd0: 6e 63 79 20 69 73 20 6b 65 70 74 20 65 78 70 6c  ncy is kept expl
3be0: 69 63 69 74 6c 79 20 74 6f 0a 20 20 20 20 23 20  icitly to.    # 
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c00: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 65             ; # e
3c10: 6e 73 75 72 65 20 74 68 61 74 20 61 20 72 65 76  nsure that a rev
3c20: 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74 6f 70 6f 6c  ision-only topol
3c30: 6f 67 69 63 61 6c 20 73 6f 72 74 20 77 69 6c 6c  ogical sort will
3c40: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
3c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3c60: 20 20 3b 20 23 20 6e 6f 74 20 6d 69 73 73 20 69    ; # not miss i
3c70: 74 2c 20 61 73 20 69 74 20 6f 74 68 65 72 77 69  t, as it otherwi
3c80: 73 65 20 65 78 69 73 74 73 20 6f 6e 6c 79 20 76  se exists only v
3c90: 69 61 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  ia.    #        
3ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3cb0: 20 20 20 20 3b 20 23 20 6d 79 62 72 61 6e 63 68      ; # mybranch
3cc0: 65 73 2e 0a 0a 20 20 20 20 23 20 54 61 67 20 6c  es...    # Tag l
3cd0: 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f  inkage _________
3ce0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a  _______________.
3cf0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
3d00: 74 61 67 73 20 7b 7d 20 3b 20 23 20 4c 69 73 74  tags {} ; # List
3d10: 20 6f 66 20 74 61 67 73 20 28 6f 62 6a 73 29 20   of tags (objs) 
3d20: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
3d30: 74 68 69 73 20 72 65 76 69 73 69 6f 6e 2e 0a 0a  this revision...
3d40: 20 20 20 20 23 20 4d 6f 72 65 20 64 65 72 69 76      # More deriv
3d50: 65 64 20 64 61 74 61 0a 0a 20 20 20 20 76 61 72  ed data..    var
3d60: 69 61 62 6c 65 20 6d 79 6f 70 65 72 61 74 69 6f  iable myoperatio
3d70: 6e 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  n        {} ; # 
3d80: 4f 6e 65 20 6f 66 20 27 61 64 64 27 2c 20 27 63  One of 'add', 'c
3d90: 68 61 6e 67 65 27 2c 20 27 64 65 6c 65 74 65 27  hange', 'delete'
3da0: 2c 20 6f 72 0a 09 09 09 20 20 20 20 20 20 20 20  , or....        
3db0: 20 20 20 20 20 23 20 27 6e 6f 74 68 69 6e 67 27       # 'nothing'
3dc0: 2e 20 44 65 72 69 76 65 64 20 66 72 6f 6d 20 6f  . Derived from o
3dd0: 75 72 20 61 6e 64 0a 09 09 09 20 20 20 20 20 20  ur and....      
3de0: 20 20 20 20 20 20 20 23 20 69 74 73 20 70 61 72         # its par
3df0: 65 6e 74 27 73 20 73 74 61 74 65 2e 0a 20 20 20  ent's state..   
3e00: 20 76 61 72 69 61 62 6c 65 20 6d 79 69 73 6f 6e   variable myison
3e10: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 30 20  defaultbranch 0 
3e20: 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67  ; # Boolean flag
3e30: 2c 20 73 65 74 20 69 66 20 74 68 65 0a 09 09 09  , set if the....
3e40: 09 20 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e  .     # revision
3e50: 20 69 73 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 74   is on the non-t
3e60: 72 75 6e 6b 0a 09 09 09 09 20 20 20 20 20 23 20  runk.....     # 
3e70: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20  default branch, 
3e80: 61 6b 61 20 76 65 6e 64 6f 72 0a 09 09 09 09 20  aka vendor..... 
3e90: 20 20 20 20 23 20 62 72 61 6e 63 68 2e 0a 20 20      # branch..  
3ea0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 62 70    variable mydbp
3eb0: 61 72 65 6e 74 20 20 20 20 20 20 20 20 20 7b 7d  arent         {}
3ec0: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74   ; # Reference t
3ed0: 6f 20 74 68 65 20 6c 61 73 74 20 72 65 76 69 73  o the last revis
3ee0: 69 6f 6e 0a 09 09 09 09 20 20 20 20 20 23 20 6f  ion.....     # o
3ef0: 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61  n the vendor bra
3f00: 6e 63 68 20 69 66 20 74 68 69 73 20 69 73 0a 09  nch if this is..
3f10: 09 09 09 20 20 20 20 20 23 20 74 68 65 20 70 72  ...     # the pr
3f20: 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 20 74  imary child of t
3f30: 68 65 0a 09 09 09 09 20 20 20 20 20 23 20 72 65  he.....     # re
3f40: 67 75 6c 61 72 20 72 6f 6f 74 2e 0a 20 20 20 20  gular root..    
3f50: 76 61 72 69 61 62 6c 65 20 6d 79 64 62 63 68 69  variable mydbchi
3f60: 6c 64 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b  ld          {} ;
3f70: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20   # Reference to 
3f80: 74 68 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c  the primary chil
3f90: 64 0a 09 09 09 09 20 20 20 20 20 23 20 6f 66 20  d.....     # of 
3fa0: 74 68 65 20 72 65 67 75 6c 61 72 20 72 6f 6f 74  the regular root
3fb0: 20 69 66 20 74 68 69 73 20 69 73 0a 09 09 09 09   if this is.....
3fc0: 20 20 20 20 20 23 20 74 68 65 20 6c 61 73 74 20       # the last 
3fd0: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20  revision on the 
3fe0: 76 65 6e 64 6f 72 0a 09 09 09 09 20 20 20 20 20  vendor.....     
3ff0: 23 20 62 72 61 6e 63 68 2e 0a 0a 20 20 20 20 23  # branch...    #
4000: 20 64 65 61 64 28 73 65 6c 66 29 20 78 20 64 65   dead(self) x de
4010: 61 64 28 70 61 72 65 6e 74 29 20 2d 3e 20 6f 70  ad(parent) -> op
4020: 65 72 61 74 69 6f 6e 0a 20 20 20 20 74 79 70 65  eration.    type
4030: 76 61 72 69 61 62 6c 65 20 6d 79 6f 70 73 74 61  variable myopsta
4040: 74 65 20 2d 61 72 72 61 79 20 7b 0a 09 7b 30 20  te -array {..{0 
4050: 30 7d 20 63 68 61 6e 67 65 0a 09 7b 30 20 31 7d  0} change..{0 1}
4060: 20 64 65 6c 65 74 65 0a 09 7b 31 20 30 7d 20 61   delete..{1 0} a
4070: 64 64 0a 09 7b 31 20 31 7d 20 6e 6f 74 68 69 6e  dd..{1 1} nothin
4080: 67 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70  g.    }..    typ
4090: 65 6d 65 74 68 6f 64 20 67 65 74 6f 70 63 6f 64  emethod getopcod
40a0: 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68  es {} {..foreach
40b0: 20 7b 69 64 20 6e 61 6d 65 7d 20 5b 73 74 61 74   {id name} [stat
40c0: 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c  e run {..    SEL
40d0: 45 43 54 20 6f 69 64 2c 20 6e 61 6d 65 20 46 52  ECT oid, name FR
40e0: 4f 4d 20 6f 70 74 79 70 65 3b 0a 09 7d 5d 20 7b  OM optype;..}] {
40f0: 20 73 65 74 20 6d 79 6f 70 63 6f 64 65 28 24 6e   set myopcode($n
4100: 61 6d 65 29 20 24 69 64 20 7d 0a 09 72 65 74 75  ame) $id }..retu
4110: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79  rn.    }..    ty
4120: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6f 70 63  pevariable myopc
4130: 6f 64 65 20 2d 61 72 72 61 79 20 7b 7d 0a 0a 20  ode -array {}.. 
4140: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
4150: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
4160: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
4170: 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f  # Internal metho
4180: 64 73 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23  ds..    # # ## #
4190: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
41a0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
41b0: 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61      ## Configura
41c0: 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61  tion..    pragma
41d0: 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20   -hastypeinfo   
41e0: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65   no  ; # no type
41f0: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20   introspection. 
4200: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e     pragma -hasin
4210: 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20  fo        no  ; 
4220: 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72  # no object intr
4230: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72  ospection.    pr
4240: 61 67 6d 61 20 2d 73 69 6d 70 6c 65 64 69 73 70  agma -simpledisp
4250: 61 74 63 68 20 79 65 73 20 3b 20 23 20 73 69 6d  atch yes ; # sim
4260: 70 6c 65 20 66 61 73 74 20 64 69 73 70 61 74 63  ple fast dispatc
4270: 68 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  h..    # # ## ##
4280: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
4290: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d   #############.}
42a0: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
42b0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
42c0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65  mport::cvs::file
42d0: 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65   {.    namespace
42e0: 20 65 78 70 6f 72 74 20 72 65 76 0a 20 20 20 20   export rev.    
42f0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 72  namespace eval r
4300: 65 76 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20  ev {..namespace 
4310: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f  import ::vc::too
4320: 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d  ls::misc::*..nam
4330: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
4340: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
4350: 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09  rt::cvs::state..
4360: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
4370: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
4380: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65  mport::cvs::inte
4390: 67 72 69 74 79 0a 20 20 20 20 7d 0a 7d 0a 0a 23  grity.    }.}..#
43a0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
43b0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
43c0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
43d0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
43e0: 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70  Ready..package p
43f0: 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69  rovide vc::fossi
4400: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
4410: 66 69 6c 65 3a 3a 72 65 76 20 31 2e 30 0a 72 65  file::rev 1.0.re
4420: 74 75 72 6e 0a                                   turn.