Hex Artifact Content
Not logged in

Artifact f35156ab47e5aa9dd05676905a5cd582c4ec6346:

File tools/cvs2fossil/lib/c2f_frev.tcl part of check-in [66235f2430] - Updated the copyright information of all files touched in the new year. by aku on 2008-02-06 05:04:12. Also file tools/cvs2fossil/lib/c2f_frev.tcl part of check-in [6b78df3861] - Merge in changes from Andreas's branch. by drh on 2008-02-08 21:52:21.

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 2d 32 30 30 38 20 41 6e 64 72 65 61 73 20  07-2008 Andreas 
0070: 4b 75 70 72 69 65 73 2e 0a 23 0a 23 20 54 68 69  Kupries..#.# Thi
0080: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 6c 69  s software is li
0090: 63 65 6e 73 65 64 20 61 73 20 64 65 73 63 72 69  censed as descri
00a0: 62 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 20  bed in the file 
00b0: 4c 49 43 45 4e 53 45 2c 20 77 68 69 63 68 0a 23  LICENSE, which.#
00c0: 20 79 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65   you should have
00d0: 20 72 65 63 65 69 76 65 64 20 61 73 20 70 61 72   received as par
00e0: 74 20 6f 66 20 74 68 69 73 20 64 69 73 74 72 69  t of this distri
00f0: 62 75 74 69 6f 6e 2e 0a 23 0a 23 20 54 68 69 73  bution..#.# This
0100: 20 73 6f 66 74 77 61 72 65 20 63 6f 6e 73 69 73   software consis
0110: 74 73 20 6f 66 20 76 6f 6c 75 6e 74 61 72 79 20  ts of voluntary 
0120: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 20 6d 61  contributions ma
0130: 64 65 20 62 79 20 6d 61 6e 79 0a 23 20 69 6e 64  de by many.# ind
0140: 69 76 69 64 75 61 6c 73 2e 20 20 46 6f 72 20 65  ividuals.  For e
0150: 78 61 63 74 20 63 6f 6e 74 72 69 62 75 74 69 6f  xact contributio
0160: 6e 20 68 69 73 74 6f 72 79 2c 20 73 65 65 20 74  n history, see t
0170: 68 65 20 72 65 76 69 73 69 6f 6e 0a 23 20 68 69  he revision.# hi
0180: 73 74 6f 72 79 20 61 6e 64 20 6c 6f 67 73 2c 20  story and logs, 
0190: 61 76 61 69 6c 61 62 6c 65 20 61 74 20 68 74 74  available at htt
01a0: 70 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e 68  p://fossil-scm.h
01b0: 77 61 63 69 2e 63 6f 6d 2f 66 6f 73 73 69 6c 0a  waci.com/fossil.
01c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
01d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
01e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23  #############..#
0200: 23 20 52 65 76 69 73 69 6f 6e 73 20 70 65 72 20  # Revisions per 
0210: 66 69 6c 65 2e 0a 0a 23 20 23 20 23 23 20 23 23  file...# # ## ##
0220: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
0230: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 0a 23 23 20 52 65 71 75 69 72 65 6d  ####.## Requirem
0260: 65 6e 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65  ents..package re
0270: 71 75 69 72 65 20 54 63 6c 20 38 2e 34 20 20 20  quire 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 20 20 20 20 20 3b 20 23 20 52 65            ; # Re
02a0: 71 75 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a  quired runtime..
02b0: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
02c0: 73 6e 69 74 20 20 20 20 20 20 20 20 20 20 20 20  snit            
02d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02e0: 20 20 20 20 3b 20 23 20 4f 4f 20 73 79 73 74 65      ; # OO syste
02f0: 6d 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  m..package requi
0300: 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69  re vc::tools::mi
0310: 73 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  sc              
0320: 20 20 20 20 20 20 20 3b 20 23 20 54 65 78 74 20         ; # Text 
0330: 66 6f 72 6d 61 74 74 69 6e 67 0a 70 61 63 6b 61  formatting.packa
0340: 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66  ge require vc::f
0350: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
0360: 76 73 3a 3a 73 74 61 74 65 20 20 20 20 20 20 3b  vs::state      ;
0370: 20 23 20 53 74 61 74 65 20 73 74 6f 72 61 67 65   # State storage
0380: 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72  ..package requir
0390: 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  e vc::fossil::im
03a0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67  port::cvs::integ
03b0: 72 69 74 79 20 20 3b 20 23 20 53 74 61 74 65 20  rity  ; # State 
03c0: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 73  integrity checks
03d0: 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  ...# # ## ### ##
03e0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
03f0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
0400: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0410: 0a 23 23 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20  .##..snit::type 
0420: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
0430: 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a  port::cvs::file:
0440: 3a 72 65 76 20 7b 0a 20 20 20 20 23 20 23 20 23  :rev {.    # # #
0450: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
0460: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
0470: 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63  ##.    ## Public
0480: 20 41 50 49 0a 0a 20 20 20 20 63 6f 6e 73 74 72   API..    constr
0490: 75 63 74 6f 72 20 7b 72 65 76 6e 72 20 64 61 74  uctor {revnr dat
04a0: 65 20 73 74 61 74 65 20 74 68 65 66 69 6c 65 7d  e state thefile}
04b0: 20 7b 0a 09 73 65 74 20 6d 79 72 65 76 6e 72 20   {..set myrevnr 
04c0: 20 20 20 24 72 65 76 6e 72 0a 09 73 65 74 20 6d     $revnr..set m
04d0: 79 64 61 74 65 20 20 20 20 20 24 64 61 74 65 0a  ydate     $date.
04e0: 09 73 65 74 20 6d 79 6f 72 69 67 64 61 74 65 20  .set myorigdate 
04f0: 24 64 61 74 65 0a 09 73 65 74 20 6d 79 73 74 61  $date..set mysta
0500: 74 65 20 20 20 20 24 73 74 61 74 65 0a 09 73 65  te    $state..se
0510: 74 20 6d 79 66 69 6c 65 20 20 20 20 20 24 74 68  t myfile     $th
0520: 65 66 69 6c 65 0a 09 72 65 74 75 72 6e 0a 20 20  efile..return.  
0530: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
0540: 64 65 66 69 64 20 7b 7d 20 7b 0a 09 73 65 74 20  defid {} {..set 
0550: 6d 79 69 64 20 5b 69 6e 63 72 20 6d 79 69 64 63  myid [incr myidc
0560: 6f 75 6e 74 65 72 5d 0a 09 72 65 74 75 72 6e 0a  ounter]..return.
0570: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
0580: 64 20 69 64 20 20 20 7b 7d 20 7b 20 72 65 74 75  d id   {} { retu
0590: 72 6e 20 24 6d 79 69 64 20 7d 0a 20 20 20 20 6d  rn $myid }.    m
05a0: 65 74 68 6f 64 20 66 69 6c 65 20 7b 7d 20 7b 20  ethod file {} { 
05b0: 72 65 74 75 72 6e 20 24 6d 79 66 69 6c 65 20 7d  return $myfile }
05c0: 0a 0a 20 20 20 20 23 20 42 61 73 69 63 20 70 69  ..    # Basic pi
05d0: 65 63 65 73 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  eces ___________
05e0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20  _____________.. 
05f0: 20 20 20 6d 65 74 68 6f 64 20 68 61 73 6d 65 74     method hasmet
0600: 61 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 5b 65  a {} { return [e
0610: 78 70 72 20 7b 24 6d 79 6d 65 74 61 69 64 20 6e  xpr {$mymetaid n
0620: 65 20 22 22 7d 5d 20 7d 0a 20 20 20 20 6d 65 74  e ""}] }.    met
0630: 68 6f 64 20 68 61 73 74 65 78 74 20 7b 7d 20 7b  hod hastext {} {
0640: 0a 09 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b  ..return [expr {
0650: 24 6d 79 74 65 78 74 73 74 61 72 74 20 3c 3d 20  $mytextstart <= 
0660: 24 6d 79 74 65 78 74 65 6e 64 7d 5d 0a 20 20 20  $mytextend}].   
0670: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73   }..    method s
0680: 65 74 6d 65 74 61 20 7b 6d 65 74 61 7d 20 7b 20  etmeta {meta} { 
0690: 73 65 74 20 6d 79 6d 65 74 61 69 64 20 24 6d 65  set mymetaid $me
06a0: 74 61 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20 20  ta ; return }.  
06b0: 20 20 6d 65 74 68 6f 64 20 73 65 74 74 65 78 74    method settext
06c0: 20 7b 74 65 78 74 7d 20 7b 0a 09 73 74 72 75 63   {text} {..struc
06d0: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24  t::list assign $
06e0: 74 65 78 74 20 6d 79 74 65 78 74 73 74 61 72 74  text mytextstart
06f0: 20 6d 79 74 65 78 74 65 6e 64 0a 09 72 65 74 75   mytextend..retu
0700: 72 6e 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 74  rn.    }.    met
0710: 68 6f 64 20 73 65 74 6c 6f 64 20 20 7b 6c 6f 64  hod setlod  {lod
0720: 7d 20 20 7b 20 73 65 74 20 6d 79 6c 6f 64 20 20  }  { set mylod  
0730: 20 20 24 6c 6f 64 20 20 3b 20 72 65 74 75 72 6e    $lod  ; return
0740: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72   }..    method r
0750: 65 76 6e 72 20 7b 7d 20 7b 20 72 65 74 75 72 6e  evnr {} { return
0760: 20 24 6d 79 72 65 76 6e 72 20 7d 0a 20 20 20 20   $myrevnr }.    
0770: 6d 65 74 68 6f 64 20 73 74 61 74 65 20 7b 7d 20  method state {} 
0780: 7b 20 72 65 74 75 72 6e 20 24 6d 79 73 74 61 74  { return $mystat
0790: 65 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 6c  e }.    method l
07a0: 6f 64 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e  od   {} { return
07b0: 20 24 6d 79 6c 6f 64 20 20 20 7d 0a 20 20 20 20   $mylod   }.    
07c0: 6d 65 74 68 6f 64 20 64 61 74 65 20 20 7b 7d 20  method date  {} 
07d0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 64 61 74 65  { return $mydate
07e0: 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20    }..    method 
07f0: 69 73 6e 65 65 64 65 64 20 7b 7d 20 7b 0a 09 69  isneeded {} {..i
0800: 66 20 7b 24 6d 79 6f 70 65 72 61 74 69 6f 6e 20  f {$myoperation 
0810: 6e 65 20 22 6e 6f 74 68 69 6e 67 22 7d 20 20 20  ne "nothing"}   
0820: 20 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d        {return 1}
0830: 0a 09 69 66 20 7b 24 6d 79 72 65 76 6e 72 20 6e  ..if {$myrevnr n
0840: 65 20 22 31 2e 31 22 7d 20 20 20 20 20 20 20 20  e "1.1"}        
0850: 20 20 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e           {return
0860: 20 31 7d 0a 09 69 66 20 7b 21 5b 24 6d 79 6c 6f   1}..if {![$mylo
0870: 64 20 69 73 74 72 75 6e 6b 5d 7d 20 20 20 20 20  d istrunk]}     
0880: 20 20 20 20 20 20 20 20 20 20 20 20 7b 72 65 74              {ret
0890: 75 72 6e 20 31 7d 0a 09 69 66 20 7b 21 5b 6c 6c  urn 1}..if {![ll
08a0: 65 6e 67 74 68 20 24 6d 79 62 72 61 6e 63 68 65  ength $mybranche
08b0: 73 5d 7d 20 20 20 20 20 20 20 20 20 20 20 20 7b  s]}            {
08c0: 72 65 74 75 72 6e 20 31 7d 0a 09 73 65 74 20 66  return 1}..set f
08d0: 69 72 73 74 62 72 61 6e 63 68 20 5b 6c 69 6e 64  irstbranch [lind
08e0: 65 78 20 24 6d 79 62 72 61 6e 63 68 65 73 20 30  ex $mybranches 0
08f0: 5d 0a 09 69 66 20 7b 21 5b 24 66 69 72 73 74 62  ]..if {![$firstb
0900: 72 61 6e 63 68 20 68 61 73 63 68 69 6c 64 5d 7d  ranch haschild]}
0910: 20 20 20 20 20 20 20 20 20 20 7b 72 65 74 75 72            {retur
0920: 6e 20 31 7d 0a 09 69 66 20 7b 24 6d 79 69 73 6f  n 1}..if {$myiso
0930: 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 7d 20  ndefaultbranch} 
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 72 65               {re
0950: 74 75 72 6e 20 31 7d 0a 0a 09 23 20 46 49 58 3a  turn 1}...# FIX:
0960: 20 54 68 69 73 20 6d 65 73 73 61 67 65 20 77 69   This message wi
0970: 6c 6c 20 6e 6f 74 20 6d 61 74 63 68 20 69 66 20  ll not match if 
0980: 74 68 65 20 52 43 53 20 66 69 6c 65 20 77 61 73  the RCS file was
0990: 20 72 65 6e 61 6d 65 64 0a 09 23 20 6d 61 6e 75   renamed..# manu
09a0: 61 6c 6c 79 20 61 66 74 65 72 20 69 74 20 77 61  ally after it wa
09b0: 73 20 63 72 65 61 74 65 64 2e 0a 0a 09 73 65 74  s created....set
09c0: 20 67 65 6e 20 22 66 69 6c 65 20 5b 66 69 6c 65   gen "file [file
09d0: 20 74 61 69 6c 20 5b 24 6d 79 66 69 6c 65 20 75   tail [$myfile u
09e0: 73 72 70 61 74 68 5d 5d 20 77 61 73 20 69 6e 69  srpath]] was ini
09f0: 74 69 61 6c 6c 79 20 61 64 64 65 64 20 6f 6e 20  tially added on 
0a00: 62 72 61 6e 63 68 20 5b 24 66 69 72 73 74 62 72  branch [$firstbr
0a10: 61 6e 63 68 20 6e 61 6d 65 5d 2e 22 0a 09 73 65  anch name]."..se
0a20: 74 20 6c 6f 67 20 5b 24 6d 79 66 69 6c 65 20 63  t log [$myfile c
0a30: 6f 6d 6d 69 74 6d 65 73 73 61 67 65 6f 66 20 24  ommitmessageof $
0a40: 6d 79 6d 65 74 61 69 64 5d 0a 0a 09 72 65 74 75  mymetaid]...retu
0a50: 72 6e 20 5b 65 78 70 72 20 7b 24 6c 6f 67 20 6e  rn [expr {$log n
0a60: 65 20 24 67 65 6e 7d 5d 0a 20 20 20 20 7d 0a 0a  e $gen}].    }..
0a70: 20 20 20 20 6d 65 74 68 6f 64 20 69 73 6e 65 65      method isnee
0a80: 64 65 64 62 72 61 6e 63 68 64 65 6c 20 7b 7d 20  dedbranchdel {} 
0a90: 7b 0a 09 69 66 20 7b 24 6d 79 70 61 72 65 6e 74  {..if {$myparent
0aa0: 62 72 61 6e 63 68 20 65 71 20 22 22 7d 20 20 20  branch eq ""}   
0ab0: 20 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e 20          {return 
0ac0: 31 7d 20 3b 20 23 20 6e 6f 74 20 66 69 72 73 74  1} ; # not first
0ad0: 20 6f 6e 20 61 20 62 72 61 6e 63 68 2c 20 6e 65   on a branch, ne
0ae0: 65 64 65 64 0a 09 73 65 74 20 62 61 73 65 20 5b  eded..set base [
0af0: 24 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20  $myparentbranch 
0b00: 70 61 72 65 6e 74 5d 0a 09 69 66 20 7b 24 62 61  parent]..if {$ba
0b10: 73 65 20 20 20 20 20 20 20 20 20 20 20 65 71 20  se           eq 
0b20: 22 22 7d 20 20 20 20 20 20 20 20 20 20 20 7b 72  ""}           {r
0b30: 65 74 75 72 6e 20 31 7d 20 3b 20 23 20 62 72 61  eturn 1} ; # bra
0b40: 6e 63 68 20 68 61 73 20 70 61 72 65 6e 74 20 6c  nch has parent l
0b50: 6f 64 2c 20 6e 65 65 64 65 64 0a 09 69 66 20 7b  od, needed..if {
0b60: 5b 24 73 65 6c 66 20 4c 4f 44 4c 65 6e 67 74 68  [$self LODLength
0b70: 5d 20 3c 20 32 7d 20 20 20 20 20 20 20 20 20 20  ] < 2}          
0b80: 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b 20 23 20   {return 1} ; # 
0b90: 6f 75 72 20 6c 6f 64 20 63 6f 6e 74 61 69 6e 73  our lod contains
0ba0: 20 6f 6e 6c 79 20 6f 75 72 73 65 6c 76 65 73 2c   only ourselves,
0bb0: 20 6e 65 65 64 65 64 2e 0a 09 69 66 20 7b 24 6d   needed...if {$m
0bc0: 79 6f 70 65 72 61 74 69 6f 6e 20 6e 65 20 22 64  yoperation ne "d
0bd0: 65 6c 65 74 65 22 7d 20 20 20 20 20 20 20 20 7b  elete"}        {
0be0: 72 65 74 75 72 6e 20 31 7d 20 3b 20 23 20 4e 6f  return 1} ; # No
0bf0: 74 20 61 20 64 65 6c 65 74 69 6f 6e 2c 20 6e 65  t a deletion, ne
0c00: 65 64 65 64 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67  eded..if {[lleng
0c10: 74 68 20 24 6d 79 74 61 67 73 5d 7d 20 20 20 20  th $mytags]}    
0c20: 20 20 20 20 20 20 20 20 20 20 20 7b 72 65 74 75             {retu
0c30: 72 6e 20 31 7d 20 3b 20 23 20 48 61 76 65 20 74  rn 1} ; # Have t
0c40: 61 67 73 2c 20 6e 65 65 64 65 64 0a 09 69 66 20  ags, needed..if 
0c50: 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 62 72 61  {[llength $mybra
0c60: 6e 63 68 65 73 5d 7d 20 20 20 20 20 20 20 20 20  nches]}         
0c70: 20 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b 20 23    {return 1} ; #
0c80: 20 48 61 76 65 20 6f 74 68 65 72 20 62 72 61 6e   Have other bran
0c90: 63 68 65 73 2c 20 6e 65 65 64 65 64 0a 09 69 66  ches, needed..if
0ca0: 20 7b 61 62 73 28 24 6d 79 64 61 74 65 20 2d 20   {abs($mydate - 
0cb0: 5b 24 62 61 73 65 20 64 61 74 65 5d 29 20 3e 20  [$base date]) > 
0cc0: 32 7d 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b 20  2} {return 1} ; 
0cd0: 23 20 4e 65 78 74 20 72 65 76 20 3e 20 32 20 73  # Next rev > 2 s
0ce0: 65 63 6f 6e 64 73 20 61 70 61 72 74 2c 20 6e 65  econds apart, ne
0cf0: 65 64 65 64 0a 0a 20 20 20 20 20 20 20 20 23 20  eded..        # 
0d00: 46 49 58 4d 45 3a 20 54 68 69 73 20 6d 65 73 73  FIXME: This mess
0d10: 61 67 65 20 77 69 6c 6c 20 6e 6f 74 20 6d 61 74  age will not mat
0d20: 63 68 20 69 66 20 74 68 65 20 52 43 53 20 66 69  ch if the RCS fi
0d30: 6c 65 20 77 61 73 0a 20 20 20 20 20 20 20 20 23  le was.        #
0d40: 20 72 65 6e 61 6d 65 64 20 6d 61 6e 75 61 6c 6c   renamed manuall
0d50: 79 20 61 66 74 65 72 20 69 74 20 77 61 73 20 63  y after it was c
0d60: 72 65 61 74 65 64 2e 0a 0a 09 73 65 74 20 71 66  reated....set qf
0d70: 69 6c 65 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  ile [string map 
0d80: 7b 0a 09 20 20 20 20 2e 20 20 5c 5c 2e 20 20 3f  {..    .  \\.  ?
0d90: 20 20 5c 5c 3f 20 20 2a 20 20 5c 5c 2a 20 20 5c    \\?  *  \\*  \
0da0: 5c 20 5c 5c 5c 5c 20 2b 20 20 5c 5c 2b 20 20 5e  \ \\\\ +  \\+  ^
0db0: 20 5c 5c 5e 20 24 20 5c 5c 24 0a 09 20 20 20 20   \\^ $ \\$..    
0dc0: 5c 5b 20 5c 5c 5c 5b 20 5c 5d 20 5c 5c 5c 5d 20  \[ \\\[ \] \\\] 
0dd0: 28 20 20 5c 5c 28 20 20 20 29 20 5c 5c 29 20 20  (  \\(   ) \\)  
0de0: 5c 7b 20 5c 5c 5c 7b 20 5c 7d 20 5c 5c 5c 7d 0a  \{ \\\{ \} \\\}.
0df0: 09 7d 20 5b 66 69 6c 65 20 74 61 69 6c 20 5b 24  .} [file tail [$
0e00: 6d 79 66 69 6c 65 20 75 73 72 70 61 74 68 5d 5d  myfile usrpath]]
0e10: 5d 0a 09 73 65 74 20 70 61 74 74 65 72 6e 20 22  ]..set pattern "
0e20: 66 69 6c 65 20 24 71 66 69 6c 65 20 77 61 73 20  file $qfile was 
0e30: 61 64 64 65 64 20 6f 6e 20 62 72 61 6e 63 68 20  added on branch 
0e40: 2e 2a 20 6f 6e 20 5c 5c 64 7b 34 7d 2d 5c 5c 64  .* on \\d{4}-\\d
0e50: 7b 32 7d 2d 5c 5c 64 7b 32 7d 20 5c 5c 64 7b 32  {2}-\\d{2} \\d{2
0e60: 7d 3a 5c 5c 64 7b 32 7d 3a 5c 5c 64 7b 32 7d 28  }:\\d{2}:\\d{2}(
0e70: 20 5c 5b 2b 2d 5c 5d 5c 5c 64 7b 34 7d 29 3f 22   \[+-\]\\d{4})?"
0e80: 0a 09 73 65 74 20 6c 6f 67 20 20 20 20 20 5b 24  ..set log     [$
0e90: 6d 79 66 69 6c 65 20 63 6f 6d 6d 69 74 6d 65 73  myfile commitmes
0ea0: 73 61 67 65 6f 66 20 24 6d 79 6d 65 74 61 69 64  sageof $mymetaid
0eb0: 5d 0a 0a 09 23 20 4e 6f 74 20 74 68 65 20 73 70  ]...# Not the sp
0ec0: 65 63 69 61 6c 20 6d 65 73 73 61 67 65 2c 20 6e  ecial message, n
0ed0: 65 65 64 65 64 0a 09 69 66 20 7b 21 5b 72 65 67  eeded..if {![reg
0ee0: 65 78 70 20 2d 2d 20 24 70 61 74 74 65 72 6e 20  exp -- $pattern 
0ef0: 24 6c 6f 67 5d 7d 20 7b 72 65 74 75 72 6e 20 31  $log]} {return 1
0f00: 7d 0a 0a 09 23 20 54 68 69 73 20 69 73 20 61 6e  }...# This is an
0f10: 20 75 6e 6e 65 65 64 65 64 20 69 6e 69 74 69 61   unneeded initia
0f20: 6c 20 62 72 61 6e 63 68 20 64 65 6c 65 74 65 2e  l branch delete.
0f30: 0a 09 72 65 74 75 72 6e 20 30 0a 20 20 20 20 7d  ..return 0.    }
0f40: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 4c 4f 44  ..    method LOD
0f50: 4c 65 6e 67 74 68 20 7b 7d 20 7b 0a 09 73 65 74  Length {} {..set
0f60: 20 6e 20 31 20 3b 20 23 20 63 6f 75 6e 74 20 73   n 1 ; # count s
0f70: 65 6c 66 0a 09 73 65 74 20 72 65 76 20 24 6d 79  elf..set rev $my
0f80: 63 68 69 6c 64 0a 09 77 68 69 6c 65 20 7b 24 72  child..while {$r
0f90: 65 76 20 6e 65 20 22 22 7d 20 7b 0a 09 20 20 20  ev ne ""} {..   
0fa0: 20 69 6e 63 72 20 6e 0a 09 20 20 20 20 73 65 74   incr n..    set
0fb0: 20 72 65 76 20 5b 24 72 65 76 20 63 68 69 6c 64   rev [$rev child
0fc0: 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6e 0a  ]..}..return $n.
0fd0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 42 61 73      }..    # Bas
0fe0: 69 63 20 70 61 72 65 6e 74 2f 63 68 69 6c 64 20  ic parent/child 
0ff0: 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f  linkage ________
1000: 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 68  __..    method h
1010: 61 73 70 61 72 65 6e 74 20 7b 7d 20 7b 20 72 65  asparent {} { re
1020: 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 70  turn [expr {$myp
1030: 61 72 65 6e 74 20 6e 65 20 22 22 7d 5d 20 7d 0a  arent ne ""}] }.
1040: 20 20 20 20 6d 65 74 68 6f 64 20 68 61 73 63 68      method hasch
1050: 69 6c 64 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e  ild  {} { return
1060: 20 5b 65 78 70 72 20 7b 24 6d 79 63 68 69 6c 64   [expr {$mychild
1070: 20 20 6e 65 20 22 22 7d 5d 20 7d 0a 0a 20 20 20    ne ""}] }..   
1080: 20 6d 65 74 68 6f 64 20 73 65 74 70 61 72 65 6e   method setparen
1090: 74 20 7b 70 61 72 65 6e 74 7d 20 7b 0a 09 69 6e  t {parent} {..in
10a0: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b  tegrity assert {
10b0: 24 6d 79 70 61 72 65 6e 74 20 65 71 20 22 22 7d  $myparent eq ""}
10c0: 20 7b 50 61 72 65 6e 74 20 61 6c 72 65 61 64 79   {Parent already
10d0: 20 64 65 66 69 6e 65 64 7d 0a 09 73 65 74 20 6d   defined}..set m
10e0: 79 70 61 72 65 6e 74 20 24 70 61 72 65 6e 74 0a  yparent $parent.
10f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1100: 20 20 20 6d 65 74 68 6f 64 20 63 75 74 66 72 6f     method cutfro
1110: 6d 70 61 72 65 6e 74 20 7b 7d 20 7b 20 73 65 74  mparent {} { set
1120: 20 6d 79 70 61 72 65 6e 74 20 22 22 20 3b 20 72   myparent "" ; r
1130: 65 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68  eturn }.    meth
1140: 6f 64 20 63 75 74 66 72 6f 6d 63 68 69 6c 64 20  od cutfromchild 
1150: 20 7b 7d 20 7b 20 73 65 74 20 6d 79 63 68 69 6c   {} { set mychil
1160: 64 20 20 22 22 20 3b 20 72 65 74 75 72 6e 20 7d  d  "" ; return }
1170: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
1180: 63 68 69 6c 64 20 7b 63 68 69 6c 64 7d 20 7b 0a  child {child} {.
1190: 09 69 6e 74 65 67 72 69 74 79 20 61 73 73 65 72  .integrity asser
11a0: 74 20 7b 24 6d 79 63 68 69 6c 64 20 65 71 20 22  t {$mychild eq "
11b0: 22 7d 20 7b 43 68 69 6c 64 20 61 6c 72 65 61 64  "} {Child alread
11c0: 79 20 64 65 66 69 6e 65 64 7d 0a 09 73 65 74 20  y defined}..set 
11d0: 6d 79 63 68 69 6c 64 20 24 63 68 69 6c 64 0a 09  mychild $child..
11e0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
11f0: 20 20 6d 65 74 68 6f 64 20 63 68 61 6e 67 65 70    method changep
1200: 61 72 65 6e 74 20 7b 70 61 72 65 6e 74 7d 20 7b  arent {parent} {
1210: 20 73 65 74 20 6d 79 70 61 72 65 6e 74 20 24 70   set myparent $p
1220: 61 72 65 6e 74 20 3b 20 72 65 74 75 72 6e 20 7d  arent ; return }
1230: 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 68 61 6e  .    method chan
1240: 67 65 63 68 69 6c 64 20 20 7b 63 68 69 6c 64 7d  gechild  {child}
1250: 20 20 7b 20 73 65 74 20 6d 79 63 68 69 6c 64 20    { set mychild 
1260: 20 24 63 68 69 6c 64 20 20 3b 20 72 65 74 75 72   $child  ; retur
1270: 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  n }..    method 
1280: 70 61 72 65 6e 74 20 7b 7d 20 7b 20 72 65 74 75  parent {} { retu
1290: 72 6e 20 24 6d 79 70 61 72 65 6e 74 20 7d 0a 20  rn $myparent }. 
12a0: 20 20 20 6d 65 74 68 6f 64 20 63 68 69 6c 64 20     method child 
12b0: 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79   {} { return $my
12c0: 63 68 69 6c 64 20 20 7d 0a 0a 20 20 20 20 23 20  child  }..    # 
12d0: 42 72 61 6e 63 68 20 6c 69 6e 6b 61 67 65 20 5f  Branch linkage _
12e0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
12f0: 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68 6f  _____..    metho
1300: 64 20 73 65 74 70 61 72 65 6e 74 62 72 61 6e 63  d setparentbranc
1310: 68 20 7b 62 72 61 6e 63 68 7d 20 7b 0a 09 69 6e  h {branch} {..in
1320: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 7b  tegrity assert {
1330: 24 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20  $myparentbranch 
1340: 65 71 20 22 22 7d 20 7b 42 72 61 6e 63 68 20 70  eq ""} {Branch p
1350: 61 72 65 6e 74 20 61 6c 72 65 61 64 79 20 64 65  arent already de
1360: 66 69 6e 65 64 7d 0a 09 73 65 74 20 6d 79 70 61  fined}..set mypa
1370: 72 65 6e 74 62 72 61 6e 63 68 20 24 62 72 61 6e  rentbranch $bran
1380: 63 68 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  ch..return.    }
1390: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61 73  ..    method has
13a0: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d 20  parentbranch {} 
13b0: 7b 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b  { return [expr {
13c0: 24 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20  $myparentbranch 
13d0: 6e 65 20 22 22 7d 5d 20 7d 0a 20 20 20 20 6d 65  ne ""}] }.    me
13e0: 74 68 6f 64 20 68 61 73 62 72 61 6e 63 68 65 73  thod hasbranches
13f0: 20 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e       {} { return
1400: 20 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 62 72 61   [llength $mybra
1410: 6e 63 68 65 73 5d 20 7d 0a 0a 20 20 20 20 6d 65  nches] }..    me
1420: 74 68 6f 64 20 70 61 72 65 6e 74 62 72 61 6e 63  thod parentbranc
1430: 68 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  h {} { return $m
1440: 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7d 0a  yparentbranch }.
1450: 20 20 20 20 6d 65 74 68 6f 64 20 62 72 61 6e 63      method branc
1460: 68 65 73 20 20 20 20 20 7b 7d 20 7b 20 72 65 74  hes     {} { ret
1470: 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 65 73 20  urn $mybranches 
1480: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 61 64  }..    method ad
1490: 64 62 72 61 6e 63 68 20 7b 62 72 61 6e 63 68 7d  dbranch {branch}
14a0: 20 7b 0a 09 6c 61 70 70 65 6e 64 20 6d 79 62 72   {..lappend mybr
14b0: 61 6e 63 68 65 73 20 24 62 72 61 6e 63 68 0a 09  anches $branch..
14c0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
14d0: 20 20 6d 65 74 68 6f 64 20 61 64 64 63 68 69 6c    method addchil
14e0: 64 6f 6e 62 72 61 6e 63 68 20 7b 63 68 69 6c 64  donbranch {child
14f0: 7d 20 7b 0a 09 6c 61 70 70 65 6e 64 20 6d 79 62  } {..lappend myb
1500: 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 24 63  ranchchildren $c
1510: 68 69 6c 64 0a 09 72 65 74 75 72 6e 0a 20 20 20  hild..return.   
1520: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 63   }..    method c
1530: 75 74 66 72 6f 6d 70 61 72 65 6e 74 62 72 61 6e  utfromparentbran
1540: 63 68 20 7b 7d 20 7b 20 73 65 74 20 6d 79 70 61  ch {} { set mypa
1550: 72 65 6e 74 62 72 61 6e 63 68 20 22 22 20 3b 20  rentbranch "" ; 
1560: 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65  return }..    me
1570: 74 68 6f 64 20 72 65 6d 6f 76 65 62 72 61 6e 63  thod removebranc
1580: 68 20 7b 62 72 61 6e 63 68 7d 20 7b 0a 09 6c 64  h {branch} {..ld
1590: 65 6c 65 74 65 20 6d 79 62 72 61 6e 63 68 65 73  elete mybranches
15a0: 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75 72 6e   $branch..return
15b0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
15c0: 6f 64 20 72 65 6d 6f 76 65 63 68 69 6c 64 6f 6e  od removechildon
15d0: 62 72 61 6e 63 68 20 7b 72 65 76 7d 20 7b 0a 09  branch {rev} {..
15e0: 6c 64 65 6c 65 74 65 20 6d 79 62 72 61 6e 63 68  ldelete mybranch
15f0: 63 68 69 6c 64 72 65 6e 20 24 72 65 76 0a 09 72  children $rev..r
1600: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
1610: 20 6d 65 74 68 6f 64 20 73 6f 72 74 62 72 61 6e   method sortbran
1620: 63 68 65 73 20 7b 7d 20 7b 0a 09 23 20 50 61 73  ches {} {..# Pas
1630: 73 20 32 3a 20 43 6f 6c 6c 65 63 74 52 65 76 0a  s 2: CollectRev.
1640: 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24  ..if {[llength $
1650: 6d 79 62 72 61 6e 63 68 65 73 5d 20 3c 20 32 7d  mybranches] < 2}
1660: 20 72 65 74 75 72 6e 0a 0a 09 23 20 53 6f 72 74   return...# Sort
1670: 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 73 70   the branches sp
1680: 61 77 6e 65 64 20 62 79 20 74 68 69 73 20 72 65  awned by this re
1690: 76 69 73 69 6f 6e 20 69 6e 20 63 72 65 61 74 69  vision in creati
16a0: 6f 6e 0a 09 23 20 6f 72 64 65 72 2e 20 54 6f 20  on..# order. To 
16b0: 68 65 6c 70 20 69 6e 20 74 68 69 73 20 6f 75 72  help in this our
16c0: 20 66 69 6c 65 20 67 61 76 65 20 61 6c 6c 20 62   file gave all b
16d0: 72 61 6e 63 68 65 73 20 61 20 70 6f 73 69 74 69  ranches a positi
16e0: 6f 6e 0a 09 23 20 69 64 2c 20 69 6e 20 6f 72 64  on..# id, in ord
16f0: 65 72 20 6f 66 20 74 68 65 69 72 20 64 65 66 69  er of their defi
1700: 6e 69 74 69 6f 6e 20 62 79 20 74 68 65 20 52 43  nition by the RC
1710: 53 20 61 72 63 68 69 76 65 2e 0a 09 23 0a 09 23  S archive...#..#
1720: 20 54 68 65 20 63 72 65 61 74 69 6f 6e 20 6f 72   The creation or
1730: 64 65 72 20 69 73 20 28 61 70 70 61 72 65 6e 74  der is (apparent
1740: 6c 79 29 20 74 68 65 20 72 65 76 65 72 73 65 20  ly) the reverse 
1750: 6f 66 20 74 68 65 0a 09 23 20 64 65 66 69 6e 69  of the..# defini
1760: 74 69 6f 6e 20 6f 72 64 65 72 2e 20 28 49 66 20  tion order. (If 
1770: 61 20 62 72 61 6e 63 68 20 69 73 20 63 72 65 61  a branch is crea
1780: 74 65 64 20 74 68 65 6e 20 64 65 6c 65 74 65 64  ted then deleted
1790: 2c 20 61 0a 09 23 20 6c 61 74 65 72 20 62 72 61  , a..# later bra
17a0: 6e 63 68 20 63 61 6e 20 62 65 20 61 73 73 69 67  nch can be assig
17b0: 6e 65 64 20 74 68 65 20 72 65 63 79 63 6c 65 64  ned the recycled
17c0: 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 3b 0a   branch number;.
17d0: 09 23 20 74 68 65 72 65 66 6f 72 65 20 62 72 61  .# therefore bra
17e0: 6e 63 68 20 6e 75 6d 62 65 72 73 20 61 72 65 20  nch numbers are 
17f0: 6e 6f 74 20 61 6e 20 69 6e 64 69 63 61 74 69 6f  not an indicatio
1800: 6e 20 6f 66 20 63 72 65 61 74 69 6f 6e 0a 09 23  n of creation..#
1810: 20 6f 72 64 65 72 2e 29 0a 0a 09 73 65 74 20 74   order.)...set t
1820: 6d 70 20 7b 7d 0a 09 66 6f 72 65 61 63 68 20 62  mp {}..foreach b
1830: 72 61 6e 63 68 20 24 6d 79 62 72 61 6e 63 68 65  ranch $mybranche
1840: 73 20 7b 0a 09 20 20 20 20 6c 61 70 70 65 6e 64  s {..    lappend
1850: 20 74 6d 70 20 5b 6c 69 73 74 20 24 62 72 61 6e   tmp [list $bran
1860: 63 68 20 5b 24 62 72 61 6e 63 68 20 70 6f 73 69  ch [$branch posi
1870: 74 69 6f 6e 5d 5d 0a 09 7d 0a 0a 09 73 65 74 20  tion]]..}...set 
1880: 6d 79 62 72 61 6e 63 68 65 73 20 7b 7d 0a 09 66  mybranches {}..f
1890: 6f 72 65 61 63 68 20 69 74 65 6d 20 5b 6c 73 6f  oreach item [lso
18a0: 72 74 20 2d 69 6e 64 65 78 20 31 20 2d 64 65 63  rt -index 1 -dec
18b0: 72 65 61 73 69 6e 67 20 24 74 6d 70 5d 20 7b 0a  reasing $tmp] {.
18c0: 09 20 20 20 20 73 74 72 75 63 74 3a 3a 6c 69 73  .    struct::lis
18d0: 74 20 61 73 73 69 67 6e 20 24 69 74 65 6d 20 62  t assign $item b
18e0: 72 61 6e 63 68 20 70 6f 73 69 74 69 6f 6e 0a 09  ranch position..
18f0: 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 79 62 72      lappend mybr
1900: 61 6e 63 68 65 73 20 24 62 72 61 6e 63 68 0a 09  anches $branch..
1910: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
1920: 0a 20 20 20 20 6d 65 74 68 6f 64 20 6d 6f 76 65  .    method move
1930: 62 72 61 6e 63 68 65 73 74 6f 20 7b 72 65 76 7d  branchesto {rev}
1940: 20 7b 0a 09 73 65 74 20 72 65 76 6c 6f 64 20 5b   {..set revlod [
1950: 24 72 65 76 20 6c 6f 64 5d 0a 09 66 6f 72 65 61  $rev lod]..forea
1960: 63 68 20 62 72 61 6e 63 68 20 24 6d 79 62 72 61  ch branch $mybra
1970: 6e 63 68 65 73 20 7b 0a 09 20 20 20 20 24 72 65  nches {..    $re
1980: 76 20 61 64 64 62 72 61 6e 63 68 20 24 62 72 61  v addbranch $bra
1990: 6e 63 68 0a 09 20 20 20 20 24 62 72 61 6e 63 68  nch..    $branch
19a0: 20 73 65 74 70 61 72 65 6e 74 20 24 72 65 76 0a   setparent $rev.
19b0: 09 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74  .    $branch set
19c0: 6c 6f 64 20 24 72 65 76 6c 6f 64 0a 09 7d 0a 09  lod $revlod..}..
19d0: 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68 72 65  foreach branchre
19e0: 76 20 24 6d 79 62 72 61 6e 63 68 63 68 69 6c 64  v $mybranchchild
19f0: 72 65 6e 20 7b 0a 09 20 20 20 20 24 72 65 76 20  ren {..    $rev 
1a00: 61 64 64 63 68 69 6c 64 6f 6e 62 72 61 6e 63 68  addchildonbranch
1a10: 20 24 62 72 61 6e 63 68 72 65 76 0a 09 20 20 20   $branchrev..   
1a20: 20 24 62 72 61 6e 63 68 72 65 76 20 63 75 74 66   $branchrev cutf
1a30: 72 6f 6d 70 61 72 65 6e 74 0a 09 20 20 20 20 24  romparent..    $
1a40: 62 72 61 6e 63 68 72 65 76 20 73 65 74 70 61 72  branchrev setpar
1a50: 65 6e 74 20 24 72 65 76 0a 09 7d 0a 09 73 65 74  ent $rev..}..set
1a60: 20 6d 79 62 72 61 6e 63 68 65 73 20 20 20 20 20   mybranches     
1a70: 20 20 7b 7d 0a 09 73 65 74 20 6d 79 62 72 61 6e    {}..set mybran
1a80: 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d 0a 09 72  chchildren {}..r
1a90: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
1aa0: 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65 61 6c   method removeal
1ab0: 6c 62 72 61 6e 63 68 65 73 20 7b 7d 20 7b 0a 09  lbranches {} {..
1ac0: 73 65 74 20 6d 79 62 72 61 6e 63 68 65 73 20 20  set mybranches  
1ad0: 20 20 20 20 20 7b 7d 0a 09 73 65 74 20 6d 79 62       {}..set myb
1ae0: 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d  ranchchildren {}
1af0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
1b00: 20 20 20 20 23 20 54 61 67 20 6c 69 6e 6b 61 67      # Tag linkag
1b10: 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  e ______________
1b20: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20  ___________..   
1b30: 20 6d 65 74 68 6f 64 20 61 64 64 74 61 67 20 7b   method addtag {
1b40: 74 61 67 7d 20 7b 0a 09 6c 61 70 70 65 6e 64 20  tag} {..lappend 
1b50: 6d 79 74 61 67 73 20 24 74 61 67 0a 09 72 65 74  mytags $tag..ret
1b60: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
1b70: 65 74 68 6f 64 20 74 61 67 73 20 7b 7d 20 7b 20  ethod tags {} { 
1b80: 72 65 74 75 72 6e 20 24 6d 79 74 61 67 73 20 7d  return $mytags }
1b90: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65 6d  ..    method rem
1ba0: 6f 76 65 61 6c 6c 74 61 67 73 20 7b 7d 20 7b 0a  ovealltags {} {.
1bb0: 09 73 65 74 20 6d 79 74 61 67 73 20 7b 7d 0a 09  .set mytags {}..
1bc0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
1bd0: 20 20 6d 65 74 68 6f 64 20 6d 6f 76 65 74 61 67    method movetag
1be0: 73 74 6f 20 7b 72 65 76 7d 20 7b 0a 09 73 65 74  sto {rev} {..set
1bf0: 20 72 65 76 6c 6f 64 20 5b 24 72 65 76 20 6c 6f   revlod [$rev lo
1c00: 64 5d 0a 09 66 6f 72 65 61 63 68 20 74 61 67 20  d]..foreach tag 
1c10: 24 6d 79 74 61 67 73 20 7b 0a 09 20 20 20 20 24  $mytags {..    $
1c20: 72 65 76 20 61 64 64 74 61 67 20 24 74 61 67 0a  rev addtag $tag.
1c30: 09 20 20 20 20 24 74 61 67 20 73 65 74 74 61 67  .    $tag settag
1c40: 72 65 76 20 24 72 65 76 0a 09 20 20 20 20 24 74  rev $rev..    $t
1c50: 61 67 20 73 65 74 6c 6f 64 20 24 72 65 76 6c 6f  ag setlod $revlo
1c60: 64 0a 09 7d 0a 09 73 65 74 20 6d 79 74 61 67 73  d..}..set mytags
1c70: 20 7b 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20   {}..return.    
1c80: 7d 0a 0a 20 20 20 20 23 20 67 65 6e 65 72 61 6c  }..    # general
1c90: 20 73 79 6d 62 6f 6c 20 6f 70 65 72 61 74 69 6f   symbol operatio
1ca0: 6e 73 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a  ns ___________..
1cb0: 20 20 20 20 6d 65 74 68 6f 64 20 6d 6f 76 65 73      method moves
1cc0: 79 6d 62 6f 6c 73 74 6f 20 7b 72 65 76 7d 20 7b  ymbolsto {rev} {
1cd0: 0a 09 23 20 4d 6f 76 65 20 74 68 65 20 74 61 67  ..# Move the tag
1ce0: 73 20 61 6e 64 20 62 72 61 6e 63 68 65 73 20 61  s and branches a
1cf0: 74 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20  ttached to this 
1d00: 72 65 76 69 73 69 6f 6e 20 74 6f 20 74 68 65 0a  revision to the.
1d10: 09 23 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 61  .# destination a
1d20: 6e 64 20 66 69 78 20 61 6c 6c 20 70 6f 69 6e 74  nd fix all point
1d30: 65 72 73 2e 0a 0a 09 24 73 65 6c 66 20 6d 6f 76  ers....$self mov
1d40: 65 74 61 67 73 74 6f 20 20 20 20 20 24 72 65 76  etagsto     $rev
1d50: 0a 09 24 73 65 6c 66 20 6d 6f 76 65 62 72 61 6e  ..$self movebran
1d60: 63 68 65 73 74 6f 20 24 72 65 76 0a 09 72 65 74  chesto $rev..ret
1d70: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
1d80: 20 44 65 72 69 76 65 64 20 73 74 75 66 66 20 5f   Derived stuff _
1d90: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1da0: 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68  ______..    meth
1db0: 6f 64 20 64 65 74 65 72 6d 69 6e 65 6f 70 65 72  od determineoper
1dc0: 61 74 69 6f 6e 20 7b 7d 20 7b 0a 09 23 20 4c 6f  ation {} {..# Lo
1dd0: 6f 6b 20 61 74 20 74 68 65 20 73 74 61 74 65 20  ok at the state 
1de0: 6f 66 20 62 6f 74 68 20 74 68 69 73 20 72 65 76  of both this rev
1df0: 69 73 69 6f 6e 20 61 6e 64 20 69 74 73 20 70 61  ision and its pa
1e00: 72 65 6e 74 20 74 6f 0a 09 23 20 64 65 74 65 72  rent to..# deter
1e10: 6d 69 6e 65 20 74 68 65 20 74 79 70 65 20 6f 70  mine the type op
1e20: 66 20 6f 70 65 72 61 74 69 6f 6e 20 77 68 69 63  f operation whic
1e30: 68 20 77 61 73 20 70 65 72 66 6f 72 6d 65 64 20  h was performed 
1e40: 28 61 64 64 2c 0a 09 23 20 6d 6f 64 69 66 79 2c  (add,..# modify,
1e50: 20 64 65 6c 65 74 65 2c 20 6e 6f 6e 65 29 2e 0a   delete, none)..
1e60: 09 23 0a 09 23 20 54 68 65 20 69 6d 70 6f 72 74  .#..# The import
1e70: 61 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ant information 
1e80: 69 73 20 64 65 61 64 20 76 73 20 6e 6f 74 2d 64  is dead vs not-d
1e90: 65 61 64 20 66 6f 72 20 62 6f 74 68 2c 0a 09 23  ead for both,..#
1ea0: 20 67 69 76 69 6e 67 20 72 69 73 65 20 74 6f 20   giving rise to 
1eb0: 66 6f 75 72 20 70 6f 73 73 69 62 6c 65 20 74 79  four possible ty
1ec0: 70 65 73 2e 0a 0a 09 73 65 74 20 73 64 65 61 64  pes....set sdead
1ed0: 20 5b 65 78 70 72 20 7b 24 6d 79 73 74 61 74 65   [expr {$mystate
1ee0: 20 65 71 20 22 64 65 61 64 22 7d 5d 0a 09 73 65   eq "dead"}]..se
1ef0: 74 20 70 64 65 61 64 20 5b 65 78 70 72 20 7b 24  t pdead [expr {$
1f00: 6d 79 70 61 72 65 6e 74 20 65 71 20 22 22 20 7c  myparent eq "" |
1f10: 7c 20 5b 24 6d 79 70 61 72 65 6e 74 20 73 74 61  | [$myparent sta
1f20: 74 65 5d 20 65 71 20 22 64 65 61 64 22 7d 5d 0a  te] eq "dead"}].
1f30: 0a 09 73 65 74 20 6d 79 6f 70 65 72 61 74 69 6f  ..set myoperatio
1f40: 6e 20 24 6d 79 6f 70 73 74 61 74 65 28 5b 6c 69  n $myopstate([li
1f50: 73 74 20 24 70 64 65 61 64 20 24 73 64 65 61 64  st $pdead $sdead
1f60: 5d 29 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  ])..return.    }
1f70: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6f 70 65  ..    method ope
1f80: 72 61 74 69 6f 6e 20 7b 7d 20 7b 20 72 65 74 75  ration {} { retu
1f90: 72 6e 20 24 6d 79 6f 70 65 72 61 74 69 6f 6e 20  rn $myoperation 
1fa0: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65 74  }.    method ret
1fb0: 79 70 65 20 7b 78 7d 20 7b 20 73 65 74 20 6d 79  ype {x} { set my
1fc0: 6f 70 65 72 61 74 69 6f 6e 20 24 78 20 3b 20 72  operation $x ; r
1fd0: 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74  eturn }..    met
1fe0: 68 6f 64 20 69 73 6f 6e 64 65 66 61 75 6c 74 62  hod isondefaultb
1ff0: 72 61 6e 63 68 20 20 20 20 7b 7d 20 7b 20 72 65  ranch    {} { re
2000: 74 75 72 6e 20 24 6d 79 69 73 6f 6e 64 65 66 61  turn $myisondefa
2010: 75 6c 74 62 72 61 6e 63 68 20 7d 0a 0a 20 20 20  ultbranch }..   
2020: 20 6d 65 74 68 6f 64 20 73 65 74 6f 6e 64 65 66   method setondef
2030: 61 75 6c 74 62 72 61 6e 63 68 20 20 20 7b 78 7d  aultbranch   {x}
2040: 20 7b 20 73 65 74 20 6d 79 69 73 6f 6e 64 65 66   { set myisondef
2050: 61 75 6c 74 62 72 61 6e 63 68 20 24 78 20 3b 20  aultbranch $x ; 
2060: 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d 65  return }..    me
2070: 74 68 6f 64 20 73 65 74 64 65 66 61 75 6c 74 62  thod setdefaultb
2080: 72 61 6e 63 68 63 68 69 6c 64 20 20 7b 72 65 76  ranchchild  {rev
2090: 7d 20 7b 20 73 65 74 20 6d 79 64 62 63 68 69 6c  } { set mydbchil
20a0: 64 20 24 72 65 76 20 3b 20 72 65 74 75 72 6e 20  d $rev ; return 
20b0: 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  }.    method set
20c0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72  defaultbranchpar
20d0: 65 6e 74 20 7b 72 65 76 7d 20 7b 0a 09 73 65 74  ent {rev} {..set
20e0: 20 6d 79 64 62 70 61 72 65 6e 74 20 24 72 65 76   mydbparent $rev
20f0: 0a 0a 09 23 20 52 65 74 79 70 65 20 74 68 65 20  ...# Retype the 
2100: 72 65 76 69 73 69 6f 6e 20 28 6d 61 79 20 63 68  revision (may ch
2110: 61 6e 67 65 20 66 72 6f 6d 20 27 61 64 64 27 20  ange from 'add' 
2120: 74 6f 20 27 63 68 61 6e 67 65 27 29 2e 0a 0a 09  to 'change')....
2130: 73 65 74 20 73 64 65 61 64 20 5b 65 78 70 72 20  set sdead [expr 
2140: 7b 24 6d 79 6f 70 65 72 61 74 69 6f 6e 20 20 20  {$myoperation   
2150: 20 20 6e 65 20 22 63 68 61 6e 67 65 22 7d 5d 0a    ne "change"}].
2160: 09 73 65 74 20 70 64 65 61 64 20 5b 65 78 70 72  .set pdead [expr
2170: 20 7b 5b 24 72 65 76 20 6f 70 65 72 61 74 69 6f   {[$rev operatio
2180: 6e 5d 20 6e 65 20 22 63 68 61 6e 67 65 22 7d 5d  n] ne "change"}]
2190: 0a 09 73 65 74 20 6d 79 6f 70 65 72 61 74 69 6f  ..set myoperatio
21a0: 6e 20 24 6d 79 6f 70 73 74 61 74 65 28 5b 6c 69  n $myopstate([li
21b0: 73 74 20 24 70 64 65 61 64 20 24 73 64 65 61 64  st $pdead $sdead
21c0: 5d 29 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  ])..return.    }
21d0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 75 74  ..    method cut
21e0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72  defaultbranchpar
21f0: 65 6e 74 20 7b 7d 20 7b 20 73 65 74 20 6d 79 64  ent {} { set myd
2200: 62 70 61 72 65 6e 74 20 22 22 20 3b 20 72 65 74  bparent "" ; ret
2210: 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64  urn }.    method
2220: 20 63 75 74 64 65 66 61 75 6c 74 62 72 61 6e 63   cutdefaultbranc
2230: 68 63 68 69 6c 64 20 20 7b 7d 20 7b 20 73 65 74  hchild  {} { set
2240: 20 6d 79 64 62 63 68 69 6c 64 20 20 22 22 20 3b   mydbchild  "" ;
2250: 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 6d   return }..    m
2260: 65 74 68 6f 64 20 64 65 66 61 75 6c 74 62 72 61  ethod defaultbra
2270: 6e 63 68 63 68 69 6c 64 20 20 7b 7d 20 7b 20 72  nchchild  {} { r
2280: 65 74 75 72 6e 20 24 6d 79 64 62 63 68 69 6c 64  eturn $mydbchild
2290: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65   }.    method de
22a0: 66 61 75 6c 74 62 72 61 6e 63 68 70 61 72 65 6e  faultbranchparen
22b0: 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  t {} { return $m
22c0: 79 64 62 70 61 72 65 6e 74 20 7d 0a 0a 20 20 20  ydbparent }..   
22d0: 20 6d 65 74 68 6f 64 20 68 61 73 64 65 66 61 75   method hasdefau
22e0: 6c 74 62 72 61 6e 63 68 63 68 69 6c 64 20 20 7b  ltbranchchild  {
22f0: 7d 20 7b 20 72 65 74 75 72 6e 20 5b 65 78 70 72  } { return [expr
2300: 20 7b 24 6d 79 64 62 63 68 69 6c 64 20 20 6e 65   {$mydbchild  ne
2310: 20 22 22 7d 5d 20 7d 0a 20 20 20 20 6d 65 74 68   ""}] }.    meth
2320: 6f 64 20 68 61 73 64 65 66 61 75 6c 74 62 72 61  od hasdefaultbra
2330: 6e 63 68 70 61 72 65 6e 74 20 7b 7d 20 7b 20 72  nchparent {} { r
2340: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79  eturn [expr {$my
2350: 64 62 70 61 72 65 6e 74 20 6e 65 20 22 22 7d 5d  dbparent ne ""}]
2360: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   }..    # # ## #
2370: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
2380: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
2390: 20 20 20 20 23 23 20 54 79 70 65 20 41 50 49 0a      ## Type API.
23a0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20  .    typemethod 
23b0: 69 73 74 72 75 6e 6b 72 65 76 6e 72 20 7b 72 65  istrunkrevnr {re
23c0: 76 6e 72 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b  vnr} {..return [
23d0: 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b  expr {[llength [
23e0: 73 70 6c 69 74 20 24 72 65 76 6e 72 20 2e 5d 5d  split $revnr .]]
23f0: 20 3d 3d 20 32 7d 5d 0a 20 20 20 20 7d 0a 0a 20   == 2}].    }.. 
2400: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 69 73     typemethod is
2410: 62 72 61 6e 63 68 72 65 76 6e 72 20 7b 72 65 76  branchrevnr {rev
2420: 6e 72 20 5f 20 62 76 7d 20 7b 0a 09 69 66 20 7b  nr _ bv} {..if {
2430: 5b 72 65 67 65 78 70 20 24 6d 79 62 72 61 6e 63  [regexp $mybranc
2440: 68 70 61 74 74 65 72 6e 20 24 72 65 76 6e 72 20  hpattern $revnr 
2450: 2d 3e 20 68 65 61 64 20 74 61 69 6c 5d 7d 20 7b  -> head tail]} {
2460: 0a 09 20 20 20 20 75 70 76 61 72 20 31 20 24 62  ..    upvar 1 $b
2470: 76 20 62 72 61 6e 63 68 6e 72 0a 09 20 20 20 20  v branchnr..    
2480: 73 65 74 20 62 72 61 6e 63 68 6e 72 20 24 7b 68  set branchnr ${h
2490: 65 61 64 7d 24 74 61 69 6c 0a 09 20 20 20 20 72  ead}$tail..    r
24a0: 65 74 75 72 6e 20 31 0a 09 7d 0a 09 72 65 74 75  eturn 1..}..retu
24b0: 72 6e 20 30 0a 20 20 20 20 7d 0a 0a 20 20 20 20  rn 0.    }..    
24c0: 74 79 70 65 6d 65 74 68 6f 64 20 32 62 72 61 6e  typemethod 2bran
24d0: 63 68 6e 72 20 7b 72 65 76 6e 72 7d 20 7b 0a 09  chnr {revnr} {..
24e0: 23 20 49 6e 70 75 74 20 69 73 20 61 20 62 72 61  # Input is a bra
24f0: 6e 63 68 20 72 65 76 69 73 69 6f 6e 20 6e 75 6d  nch revision num
2500: 62 65 72 2c 20 69 2e 65 2e 20 61 20 72 65 76 69  ber, i.e. a revi
2510: 73 69 6f 6e 20 6e 75 6d 62 65 72 0a 09 23 20 77  sion number..# w
2520: 69 74 68 20 61 6e 20 65 76 65 6e 20 6e 75 6d 62  ith an even numb
2530: 65 72 20 6f 66 20 63 6f 6d 70 6f 6e 65 6e 74 73  er of components
2540: 3b 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 27 32  ; for example '2
2550: 2e 39 2e 32 2e 31 27 0a 09 23 20 28 6e 65 76 65  .9.2.1'..# (neve
2560: 72 20 27 32 2e 39 2e 32 27 20 6e 6f 72 20 27 32  r '2.9.2' nor '2
2570: 2e 39 2e 30 2e 32 27 29 2e 20 20 54 68 65 20 72  .9.0.2').  The r
2580: 65 74 75 72 6e 20 76 61 6c 75 65 20 69 73 20 74  eturn value is t
2590: 68 65 0a 09 23 20 62 72 61 6e 63 68 20 6e 75 6d  he..# branch num
25a0: 62 65 72 20 28 66 6f 72 20 65 78 61 6d 70 6c 65  ber (for example
25b0: 2c 20 27 32 2e 39 2e 32 27 29 2e 20 20 46 6f 72  , '2.9.2').  For
25c0: 20 74 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73   trunk revisions
25d0: 2c 0a 09 23 20 6c 69 6b 65 20 27 33 2e 34 27 2c  ,..# like '3.4',
25e0: 20 77 65 20 72 65 74 75 72 6e 20 74 68 65 20 65   we return the e
25f0: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 0a 09 69  mpty string....i
2600: 66 20 7b 5b 24 74 79 70 65 20 69 73 74 72 75 6e  f {[$type istrun
2610: 6b 72 65 76 6e 72 20 24 72 65 76 6e 72 5d 7d 20  krevnr $revnr]} 
2620: 7b 0a 09 20 20 20 20 72 65 74 75 72 6e 20 22 22  {..    return ""
2630: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 5b 6a 6f 69  ..}..return [joi
2640: 6e 20 5b 6c 72 61 6e 67 65 20 5b 73 70 6c 69 74  n [lrange [split
2650: 20 24 72 65 76 6e 72 20 2e 5d 20 30 20 65 6e 64   $revnr .] 0 end
2660: 2d 31 5d 20 2e 5d 0a 20 20 20 20 7d 0a 0a 20 20  -1] .].    }..  
2670: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 32 62 72    typemethod 2br
2680: 61 6e 63 68 70 61 72 65 6e 74 72 65 76 6e 72 20  anchparentrevnr 
2690: 7b 62 72 61 6e 63 68 6e 72 7d 20 7b 0a 09 23 20  {branchnr} {..# 
26a0: 43 68 6f 70 20 74 68 65 20 6c 61 73 74 20 73 65  Chop the last se
26b0: 67 6d 65 6e 74 20 6f 66 66 0a 09 72 65 74 75 72  gment off..retur
26c0: 6e 20 5b 6a 6f 69 6e 20 5b 6c 72 61 6e 67 65 20  n [join [lrange 
26d0: 5b 73 70 6c 69 74 20 24 62 72 61 6e 63 68 6e 72  [split $branchnr
26e0: 20 2e 5d 20 30 20 65 6e 64 2d 31 5d 20 2e 5d 0a   .] 0 end-1] .].
26f0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23      }..    # # #
2700: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
2710: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
2720: 23 23 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70  ##..    method p
2730: 65 72 73 69 73 74 20 7b 7d 20 7b 0a 09 73 65 74  ersist {} {..set
2740: 20 66 69 64 20 5b 24 6d 79 66 69 6c 65 20 69 64   fid [$myfile id
2750: 5d 0a 09 73 65 74 20 6c 6f 64 20 5b 24 6d 79 6c  ]..set lod [$myl
2760: 6f 64 20 69 64 5d 0a 09 73 65 74 20 6f 70 20 20  od id]..set op  
2770: 24 6d 79 6f 70 63 6f 64 65 28 24 6d 79 6f 70 65  $myopcode($myope
2780: 72 61 74 69 6f 6e 29 0a 09 73 65 74 20 69 64 62  ration)..set idb
2790: 20 24 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74 62   $myisondefaultb
27a0: 72 61 6e 63 68 0a 0a 09 6c 61 70 70 65 6e 64 20  ranch...lappend 
27b0: 6d 61 70 20 40 50 40 20 5b 65 78 70 72 20 7b 20  map @P@ [expr { 
27c0: 28 24 6d 79 70 61 72 65 6e 74 20 20 20 20 20 20  ($myparent      
27d0: 20 65 71 20 22 22 29 20 3f 20 22 4e 55 4c 4c 22   eq "") ? "NULL"
27e0: 20 3a 20 5b 24 6d 79 70 61 72 65 6e 74 20 20 20   : [$myparent   
27f0: 20 20 20 20 69 64 5d 20 7d 5d 0a 09 6c 61 70 70      id] }]..lapp
2800: 65 6e 64 20 6d 61 70 20 40 43 40 20 5b 65 78 70  end map @C@ [exp
2810: 72 20 7b 20 28 24 6d 79 63 68 69 6c 64 20 20 20  r { ($mychild   
2820: 20 20 20 20 20 65 71 20 22 22 29 20 3f 20 22 4e       eq "") ? "N
2830: 55 4c 4c 22 20 3a 20 5b 24 6d 79 63 68 69 6c 64  ULL" : [$mychild
2840: 20 20 20 20 20 20 20 20 69 64 5d 20 7d 5d 0a 09          id] }]..
2850: 6c 61 70 70 65 6e 64 20 6d 61 70 20 40 44 50 20  lappend map @DP 
2860: 5b 65 78 70 72 20 7b 20 28 24 6d 79 64 62 70 61  [expr { ($mydbpa
2870: 72 65 6e 74 20 20 20 20 20 65 71 20 22 22 29 20  rent     eq "") 
2880: 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b 24 6d 79 64  ? "NULL" : [$myd
2890: 62 70 61 72 65 6e 74 20 20 20 20 20 69 64 5d 20  bparent     id] 
28a0: 7d 5d 0a 09 6c 61 70 70 65 6e 64 20 6d 61 70 20  }]..lappend map 
28b0: 40 44 43 20 5b 65 78 70 72 20 7b 20 28 24 6d 79  @DC [expr { ($my
28c0: 64 62 63 68 69 6c 64 20 20 20 20 20 20 65 71 20  dbchild      eq 
28d0: 22 22 29 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b  "") ? "NULL" : [
28e0: 24 6d 79 64 62 63 68 69 6c 64 20 20 20 20 20 20  $mydbchild      
28f0: 69 64 5d 20 7d 5d 0a 09 6c 61 70 70 65 6e 64 20  id] }]..lappend 
2900: 6d 61 70 20 40 42 50 20 5b 65 78 70 72 20 7b 20  map @BP [expr { 
2910: 28 24 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68  ($myparentbranch
2920: 20 65 71 20 22 22 29 20 3f 20 22 4e 55 4c 4c 22   eq "") ? "NULL"
2930: 20 3a 20 5b 24 6d 79 70 61 72 65 6e 74 62 72 61   : [$myparentbra
2940: 6e 63 68 20 69 64 5d 20 7d 5d 0a 0a 09 73 65 74  nch id] }]...set
2950: 20 63 6d 64 20 7b 0a 09 20 20 20 20 49 4e 53 45   cmd {..    INSE
2960: 52 54 20 49 4e 54 4f 20 72 65 76 69 73 69 6f 6e  RT INTO revision
2970: 20 28 20 72 69 64 2c 20 20 20 66 69 64 2c 20 20   ( rid,   fid,  
2980: 72 65 76 2c 20 20 20 20 20 20 6c 6f 64 2c 20 70  rev,      lod, p
2990: 61 72 65 6e 74 2c 20 63 68 69 6c 64 2c 20 20 69  arent, child,  i
29a0: 73 64 65 66 61 75 6c 74 2c 20 64 62 70 61 72 65  sdefault, dbpare
29b0: 6e 74 2c 20 64 62 63 68 69 6c 64 2c 20 62 70 61  nt, dbchild, bpa
29c0: 72 65 6e 74 2c 20 20 6f 70 2c 20 20 64 61 74 65  rent,  op,  date
29d0: 2c 20 20 20 20 73 74 61 74 65 2c 20 20 20 20 6d  ,    state,    m
29e0: 69 64 29 0a 09 20 20 20 20 56 41 4c 55 45 53 20  id)..    VALUES 
29f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 24                ($
2a00: 6d 79 69 64 2c 20 24 66 69 64 2c 20 24 6d 79 72  myid, $fid, $myr
2a10: 65 76 6e 72 2c 20 24 6c 6f 64 2c 20 40 50 40 2c  evnr, $lod, @P@,
2a20: 20 20 20 20 40 43 40 2c 20 20 20 24 69 64 62 2c      @C@,   $idb,
2a30: 20 20 20 20 20 20 20 40 44 50 2c 20 20 20 20 20         @DP,     
2a40: 20 40 44 43 2c 20 20 20 20 20 40 42 50 20 20 20   @DC,     @BP   
2a50: 20 2c 20 24 6f 70 2c 20 24 6d 79 64 61 74 65 2c   , $op, $mydate,
2a60: 20 24 6d 79 73 74 61 74 65 2c 20 24 6d 79 6d 65   $mystate, $myme
2a70: 74 61 69 64 29 3b 0a 09 7d 0a 0a 09 73 74 61 74  taid);..}...stat
2a80: 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a  e transaction {.
2a90: 09 20 20 20 20 73 74 61 74 65 20 72 75 6e 20 5b  .    state run [
2aa0: 73 74 72 69 6e 67 20 6d 61 70 20 24 6d 61 70 20  string map $map 
2ab0: 24 63 6d 64 5d 0a 0a 09 20 20 20 20 23 20 41 6e  $cmd]...    # An
2ac0: 64 20 74 68 65 20 62 72 61 6e 63 68 20 63 68 69  d the branch chi
2ad0: 6c 64 72 65 6e 20 61 73 20 77 65 6c 6c 2c 20 66  ldren as well, f
2ae0: 6f 72 20 70 61 73 73 20 35 2e 0a 09 20 20 20 20  or pass 5...    
2af0: 66 6f 72 65 61 63 68 20 62 63 20 24 6d 79 62 72  foreach bc $mybr
2b00: 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b 0a 09  anchchildren {..
2b10: 09 73 65 74 20 62 63 69 64 20 5b 24 62 63 20 69  .set bcid [$bc i
2b20: 64 5d 0a 09 09 73 74 61 74 65 20 72 75 6e 20 7b  d]...state run {
2b30: 0a 09 09 20 20 20 20 49 4e 53 45 52 54 20 49 4e  ...    INSERT IN
2b40: 54 4f 20 72 65 76 69 73 69 6f 6e 62 72 61 6e 63  TO revisionbranc
2b50: 68 63 68 69 6c 64 72 65 6e 20 28 72 69 64 2c 20  hchildren (rid, 
2b60: 20 20 62 72 69 64 29 0a 09 09 20 20 20 20 56 41    brid)...    VA
2b70: 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20 20  LUES            
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b90: 20 28 24 6d 79 69 64 2c 20 24 62 63 69 64 29 3b   ($myid, $bcid);
2ba0: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09  ...}..    }..}..
2bb0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
2bc0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
2bd0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
2be0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
2bf0: 20 53 74 61 74 65 0a 0a 20 20 20 20 23 20 50 65   State..    # Pe
2c00: 72 73 69 73 74 65 6e 74 3a 20 6d 79 69 64 20 20  rsistent: myid  
2c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20                - 
2c20: 72 65 76 69 73 69 6f 6e 2e 72 69 64 0a 20 20 20  revision.rid.   
2c30: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6d   #             m
2c40: 79 66 69 6c 65 20 20 20 20 20 20 20 20 20 20 20  yfile           
2c50: 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 66 69     - revision.fi
2c60: 64 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20  d.    #         
2c70: 20 20 20 20 6d 79 6c 6f 64 20 20 20 20 20 20 20      mylod       
2c80: 20 20 20 20 20 20 20 20 2d 20 72 65 76 69 73 69          - revisi
2c90: 6f 6e 2e 6c 6f 64 0a 20 20 20 20 23 20 20 20 20  on.lod.    #    
2ca0: 20 20 20 20 20 20 20 20 20 6d 79 72 65 76 6e 72           myrevnr
2cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20 72               - r
2cc0: 65 76 69 73 69 6f 6e 2e 72 65 76 0a 20 20 20 20  evision.rev.    
2cd0: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 79  #             my
2ce0: 64 61 74 65 20 20 20 20 20 20 20 20 20 20 20 20  date            
2cf0: 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 64 61 74    - revision.dat
2d00: 65 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20  e.    #         
2d10: 20 20 20 20 6d 79 73 74 61 74 65 20 20 20 20 20      mystate     
2d20: 20 20 20 20 20 20 20 20 2d 20 72 65 76 69 73 69          - revisi
2d30: 6f 6e 2e 73 74 61 74 65 0a 20 20 20 20 23 20 20  on.state.    #  
2d40: 20 20 20 20 20 20 20 20 20 20 20 6d 79 6d 65 74             mymet
2d50: 61 69 64 20 20 20 20 20 20 20 20 20 20 20 20 2d  aid            -
2d60: 20 72 65 76 69 73 69 6f 6e 2e 6d 69 64 0a 20 20   revision.mid.  
2d70: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
2d80: 6d 79 74 65 78 74 7b 73 74 61 72 74 2c 65 6e 64  mytext{start,end
2d90: 7d 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 7b  }   - revision.{
2da0: 63 73 2c 63 65 7d 0a 20 20 20 20 23 20 20 20 20  cs,ce}.    #    
2db0: 20 20 20 20 20 20 20 20 20 6d 79 70 61 72 65 6e           myparen
2dc0: 74 20 20 20 20 20 20 20 20 20 20 20 20 2d 20 72  t            - r
2dd0: 65 76 69 73 69 6f 6e 2e 70 61 72 65 6e 74 0a 20  evision.parent. 
2de0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20     #            
2df0: 20 6d 79 63 68 69 6c 64 20 20 20 20 20 20 20 20   mychild        
2e00: 20 20 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e       - revision.
2e10: 63 68 69 6c 64 0a 20 20 20 20 23 20 20 20 20 20  child.    #     
2e20: 20 20 20 20 20 20 20 20 6d 79 70 61 72 65 6e 74          myparent
2e30: 62 72 61 6e 63 68 20 20 20 20 20 20 2d 20 72 65  branch      - re
2e40: 76 69 73 69 6f 6e 2e 62 70 61 72 65 6e 74 0a 20  vision.bparent. 
2e50: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20     #            
2e60: 20 6d 79 6f 70 65 72 61 74 69 6f 6e 20 20 20 20   myoperation    
2e70: 20 20 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e       - revision.
2e80: 6f 70 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  op.    #        
2e90: 20 20 20 20 20 6d 79 69 73 6f 6e 64 65 66 61 75       myisondefau
2ea0: 6c 74 62 72 61 6e 63 68 20 2d 20 72 65 76 69 73  ltbranch - revis
2eb0: 69 6f 6e 2e 69 73 64 65 66 61 75 6c 74 0a 20 20  ion.isdefault.  
2ec0: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
2ed0: 6d 79 64 62 70 61 72 65 6e 74 20 20 20 20 20 20  mydbparent      
2ee0: 20 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 64      - revision.d
2ef0: 62 70 61 72 65 6e 74 0a 20 20 20 20 23 20 20 20  bparent.    #   
2f00: 20 20 20 20 20 20 20 20 20 20 6d 79 64 62 63 68            mydbch
2f10: 69 6c 64 20 20 20 20 20 20 20 20 20 20 20 2d 20  ild           - 
2f20: 72 65 76 69 73 69 6f 6e 2e 64 62 63 68 69 6c 64  revision.dbchild
2f30: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 44 55 4d  ..    method DUM
2f40: 50 20 7b 6c 61 62 65 6c 7d 20 7b 0a 09 70 75 74  P {label} {..put
2f50: 73 20 22 24 6c 61 62 65 6c 20 3d 20 24 73 65 6c  s "$label = $sel
2f60: 66 20 3c 24 6d 79 72 65 76 6e 72 3e 20 28 4e 54  f <$myrevnr> (NT
2f70: 44 42 3d 24 6d 79 69 73 6f 6e 64 65 66 61 75 6c  DB=$myisondefaul
2f80: 74 62 72 61 6e 63 68 29 20 5c 7b 22 0a 09 70 75  tbranch) \{"..pu
2f90: 74 73 20 22 5c 74 50 5c 74 24 6d 79 70 61 72 65  ts "\tP\t$mypare
2fa0: 6e 74 22 0a 09 70 75 74 73 20 22 5c 74 43 5c 74  nt"..puts "\tC\t
2fb0: 24 6d 79 63 68 69 6c 64 22 0a 09 70 75 74 73 20  $mychild"..puts 
2fc0: 22 5c 74 50 42 5c 74 24 6d 79 70 61 72 65 6e 74  "\tPB\t$myparent
2fd0: 62 72 61 6e 63 68 22 0a 09 70 75 74 73 20 22 5c  branch"..puts "\
2fe0: 74 64 62 50 5c 74 24 6d 79 64 62 70 61 72 65 6e  tdbP\t$mydbparen
2ff0: 74 22 0a 09 70 75 74 73 20 22 5c 74 64 62 43 5c  t"..puts "\tdbC\
3000: 74 24 6d 79 64 62 63 68 69 6c 64 22 0a 09 66 6f  t$mydbchild"..fo
3010: 72 65 61 63 68 20 62 20 24 6d 79 62 72 61 6e 63  reach b $mybranc
3020: 68 65 73 20 7b 0a 09 20 20 20 20 70 75 74 73 20  hes {..    puts 
3030: 5c 74 5c 74 42 5c 74 24 62 0a 09 7d 0a 09 66 6f  \t\tB\t$b..}..fo
3040: 72 65 61 63 68 20 62 20 24 6d 79 62 72 61 6e 63  reach b $mybranc
3050: 68 63 68 69 6c 64 72 65 6e 20 7b 0a 09 20 20 20  hchildren {..   
3060: 20 70 75 74 73 20 5c 74 5c 74 42 43 5c 74 24 62   puts \t\tBC\t$b
3070: 0a 09 7d 0a 09 70 75 74 73 20 22 5c 7d 22 0a 09  ..}..puts "\}"..
3080: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
3090: 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d    typevariable m
30a0: 79 62 72 61 6e 63 68 70 61 74 74 65 72 6e 20 7b  ybranchpattern {
30b0: 5e 28 28 3f 3a 5c 64 2b 5c 2e 5c 64 2b 5c 2e 29  ^((?:\d+\.\d+\.)
30c0: 2b 29 28 3f 3a 30 5c 2e 29 3f 28 5c 64 2b 29 24  +)(?:0\.)?(\d+)$
30d0: 7d 0a 20 20 20 20 23 20 46 69 72 73 74 20 61 20  }.    # First a 
30e0: 6e 6f 6e 7a 65 72 6f 20 65 76 65 6e 20 6e 75 6d  nonzero even num
30f0: 62 65 72 20 6f 66 20 64 69 67 69 74 20 67 72 6f  ber of digit gro
3100: 75 70 73 20 77 69 74 68 20 74 72 61 69 6c 69 6e  ups with trailin
3110: 67 20 64 6f 74 0a 20 20 20 20 23 20 43 56 53 20  g dot.    # CVS 
3120: 74 68 65 6e 20 73 74 69 63 6b 73 20 61 6e 20 65  then sticks an e
3130: 78 74 72 61 20 30 20 69 6e 20 68 65 72 65 3b 20  xtra 0 in here; 
3140: 52 43 53 20 64 6f 65 73 20 6e 6f 74 2e 0a 20 20  RCS does not..  
3150: 20 20 23 20 41 6e 64 20 74 68 65 20 6c 61 73 74    # And the last
3160: 20 64 69 67 69 74 20 67 72 6f 75 70 2e 0a 0a 20   digit group... 
3170: 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20     typevariable 
3180: 6d 79 69 64 63 6f 75 6e 74 65 72 20 30 20 3b 20  myidcounter 0 ; 
3190: 23 20 43 6f 75 6e 74 65 72 20 66 6f 72 20 72 65  # Counter for re
31a0: 76 69 73 69 6f 6e 20 69 64 73 2e 0a 20 20 20 20  vision ids..    
31b0: 76 61 72 69 61 62 6c 65 20 6d 79 69 64 20 20 20  variable myid   
31c0: 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52          {} ; # R
31d0: 65 76 69 73 69 6f 6e 20 69 64 2e 0a 0a 20 20 20  evision id...   
31e0: 20 76 61 72 69 61 62 6c 65 20 6d 79 72 65 76 6e   variable myrevn
31f0: 72 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 76  r     {} ; # Rev
3200: 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 6f 66 20  ision number of 
3210: 74 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a 20 20  the revision..  
3220: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 61 74    variable mydat
3230: 65 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 54 69  e      {} ; # Ti
3240: 6d 65 73 74 61 6d 70 20 6f 66 20 74 68 65 20 72  mestamp of the r
3250: 65 76 69 73 69 6f 6e 2c 20 73 65 63 6f 6e 64 73  evision, seconds
3260: 20 73 69 6e 63 65 20 65 70 6f 63 68 0a 20 20 20   since epoch.   
3270: 20 76 61 72 69 61 62 6c 65 20 6d 79 6f 72 69 67   variable myorig
3280: 64 61 74 65 20 20 7b 7d 20 3b 20 23 20 4f 72 69  date  {} ; # Ori
3290: 67 69 6e 61 6c 20 75 6e 6d 6f 64 69 66 69 65 64  ginal unmodified
32a0: 20 74 69 6d 65 73 74 61 6d 70 2e 0a 20 20 20 20   timestamp..    
32b0: 76 61 72 69 61 62 6c 65 20 6d 79 73 74 61 74 65  variable mystate
32c0: 20 20 20 20 20 7b 7d 20 3b 20 23 20 53 74 61 74       {} ; # Stat
32d0: 65 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f  e of the revisio
32e0: 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  n..    variable 
32f0: 6d 79 66 69 6c 65 20 20 20 20 20 20 7b 7d 20 3b  myfile      {} ;
3300: 20 23 20 52 65 66 20 74 6f 20 74 68 65 20 66 69   # Ref to the fi
3310: 6c 65 20 6f 62 6a 65 63 74 20 74 68 65 20 72 65  le object the re
3320: 76 69 73 69 6f 6e 20 62 65 6c 6f 6e 67 73 20 74  vision belongs t
3330: 6f 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  o..    variable 
3340: 6d 79 74 65 78 74 73 74 61 72 74 20 7b 7d 20 3b  mytextstart {} ;
3350: 20 23 20 53 74 61 72 74 20 6f 66 20 74 68 65 20   # Start of the 
3360: 72 61 6e 67 65 20 6f 66 20 74 68 65 20 28 64 65  range of the (de
3370: 6c 74 61 29 20 74 65 78 74 0a 09 09 09 20 20 20  lta) text....   
3380: 20 20 20 23 20 66 6f 72 20 74 68 69 73 20 72 65     # for this re
3390: 76 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 66 69  vision in the fi
33a0: 6c 65 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  le..    variable
33b0: 20 6d 79 74 65 78 74 65 6e 64 20 20 20 7b 7d 20   mytextend   {} 
33c0: 3b 20 23 20 45 6e 64 20 6f 66 20 74 68 65 20 72  ; # End of the r
33d0: 61 6e 67 65 20 6f 66 20 74 68 65 20 28 64 65 6c  ange of the (del
33e0: 74 61 29 20 74 65 78 74 0a 09 09 09 20 20 20 20  ta) text....    
33f0: 20 20 23 20 66 6f 72 20 74 68 69 73 20 72 65 76    # for this rev
3400: 69 73 69 6f 6e 20 69 6e 20 74 68 65 20 66 69 6c  ision in the fil
3410: 65 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  e..    variable 
3420: 6d 79 6d 65 74 61 69 64 20 20 20 20 7b 7d 20 3b  mymetaid    {} ;
3430: 20 23 20 49 64 20 6f 66 20 74 68 65 20 6d 65 74   # Id of the met
3440: 61 20 64 61 74 61 20 67 72 6f 75 70 20 74 68 65  a data group the
3450: 20 72 65 76 69 73 69 6f 6e 0a 09 09 09 20 20 20   revision....   
3460: 20 20 20 23 20 62 65 6c 6f 6e 67 73 20 74 6f 2e     # belongs to.
3470: 20 54 68 69 73 20 69 73 20 6c 61 74 65 72 20 75   This is later u
3480: 73 65 64 20 74 6f 20 70 75 74 0a 09 09 09 20 20  sed to put....  
3490: 20 20 20 20 23 20 74 68 65 20 66 69 6c 65 20 72      # the file r
34a0: 65 76 69 73 69 6f 6e 73 20 69 6e 74 6f 20 70 72  evisions into pr
34b0: 65 6c 69 6d 69 6e 61 72 79 0a 09 09 09 20 20 20  eliminary....   
34c0: 20 20 20 23 20 63 68 61 6e 67 65 73 65 74 73 20     # changesets 
34d0: 28 61 6b 61 20 70 72 6f 6a 65 63 74 20 72 65 76  (aka project rev
34e0: 69 73 69 6f 6e 73 29 2e 0a 09 09 09 20 20 20 20  isions).....    
34f0: 20 20 23 20 54 68 69 73 20 69 64 20 65 6e 63 6f    # This id enco
3500: 64 65 73 20 34 20 70 69 65 63 65 73 20 6f 66 20  des 4 pieces of 
3510: 64 61 74 61 2c 0a 09 09 09 20 20 20 20 20 20 23  data,....      #
3520: 20 6e 61 6d 65 6c 79 3a 20 74 68 65 20 70 72 6f   namely: the pro
3530: 6a 65 63 74 20 61 6e 64 20 62 72 61 6e 63 68 20  ject and branch 
3540: 74 68 65 0a 09 09 09 20 20 20 20 20 20 23 20 72  the....      # r
3550: 65 76 69 73 69 6f 6e 20 77 61 73 20 63 6f 6d 6d  evision was comm
3560: 69 74 74 65 64 20 74 6f 2c 20 74 68 65 20 61 75  itted to, the au
3570: 74 68 6f 72 0a 09 09 09 20 20 20 20 20 20 23 20  thor....      # 
3580: 77 68 6f 20 64 69 64 20 74 68 65 20 63 6f 6d 6d  who did the comm
3590: 69 74 2c 20 61 6e 64 20 74 68 65 20 6d 65 73 73  it, and the mess
35a0: 61 67 65 0a 09 09 09 20 20 20 20 20 20 23 20 75  age....      # u
35b0: 73 65 64 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  sed..    variabl
35c0: 65 20 6d 79 6c 6f 64 20 20 20 20 20 20 20 7b 7d  e mylod       {}
35d0: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74   ; # Reference t
35e0: 6f 20 74 68 65 20 6c 69 6e 65 2d 6f 66 2d 64 65  o the line-of-de
35f0: 76 65 6c 6f 70 6d 65 6e 74 0a 09 09 09 20 20 20  velopment....   
3600: 20 20 20 23 20 6f 62 6a 65 63 74 20 74 68 65 20     # object the 
3610: 72 65 76 69 73 69 6f 6e 20 62 65 6c 6f 6e 67 73  revision belongs
3620: 20 74 6f 2e 20 41 6e 0a 09 09 09 20 20 20 20 20   to. An....     
3630: 20 23 20 61 6c 74 65 72 6e 61 74 69 76 65 20 69   # alternative i
3640: 64 69 6f 6d 20 77 6f 75 6c 64 20 62 65 20 74 6f  diom would be to
3650: 20 63 61 6c 6c 20 69 74 0a 09 09 09 20 20 20 20   call it....    
3660: 20 20 23 20 74 68 65 20 62 72 61 6e 63 68 20 74    # the branch t
3670: 68 65 20 72 65 76 69 73 69 6f 6e 20 69 73 20 6f  he revision is o
3680: 6e 2e 20 54 68 69 73 0a 09 09 09 20 20 20 20 20  n. This....     
3690: 20 23 20 72 65 66 65 72 65 6e 63 65 20 69 73 20   # reference is 
36a0: 74 6f 20 65 69 74 68 65 72 20 70 72 6f 6a 65 63  to either projec
36b0: 74 2d 6c 65 76 65 6c 0a 09 09 09 20 20 20 20 20  t-level....     
36c0: 20 23 20 74 72 75 6e 6b 20 6f 72 20 66 69 6c 65   # trunk or file
36d0: 2d 6c 65 76 65 6c 20 73 79 6d 62 6f 6c 2e 0a 0a  -level symbol...
36e0: 20 20 20 20 23 20 42 61 73 69 63 20 70 61 72 65      # Basic pare
36f0: 6e 74 2f 63 68 69 6c 64 20 6c 69 6e 6b 61 67 65  nt/child linkage
3700: 20 28 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c   (lines of devel
3710: 6f 70 6d 65 6e 74 29 0a 0a 20 20 20 20 76 61 72  opment)..    var
3720: 69 61 62 6c 65 20 6d 79 70 61 72 65 6e 74 20 7b  iable myparent {
3730: 7d 20 3b 20 23 20 52 65 66 20 74 6f 20 70 61 72  } ; # Ref to par
3740: 65 6e 74 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a  ent revision obj
3750: 65 63 74 2e 20 4c 69 6e 6b 20 72 65 71 75 69 72  ect. Link requir
3760: 65 64 20 62 65 63 61 75 73 65 20 6f 66 0a 20 20  ed because of.  
3770: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
3780: 20 20 20 20 20 20 20 3b 20 23 20 27 63 76 73 61         ; # 'cvsa
3790: 64 6d 69 6e 20 2d 6f 27 2c 20 77 68 69 63 68 20  dmin -o', which 
37a0: 63 61 6e 20 63 72 65 61 74 65 20 61 72 62 69 74  can create arbit
37b0: 72 61 72 79 20 67 61 70 73 20 69 6e 20 74 68 65  rary gaps in the
37c0: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
37d0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 6e 75            ; # nu
37e0: 6d 62 65 72 69 6e 67 20 73 65 71 75 65 6e 63 65  mbering sequence
37f0: 2e 20 54 68 69 73 20 69 73 20 69 6e 20 74 68 65  . This is in the
3800: 20 73 61 6d 65 20 6c 69 6e 65 20 6f 66 20 64 65   same line of de
3810: 76 65 6c 6f 70 6d 65 6e 74 0a 20 20 20 20 23 20  velopment.    # 
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3830: 20 20 20 3b 20 23 20 4e 6f 74 65 3a 20 46 6f 72     ; # Note: For
3840: 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69 73   the first revis
3850: 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68 20  ion on a branch 
3860: 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 20 20 20  the revision.   
3870: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
3880: 20 20 20 20 20 20 3b 20 23 20 69 74 20 77 61 73        ; # it was
3890: 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 20 69 73   spawned from is
38a0: 20 74 68 65 20 70 61 72 65 6e 74 2e 20 4f 6e 6c   the parent. Onl
38b0: 79 20 74 68 65 20 72 6f 6f 74 20 72 65 76 69 73  y the root revis
38c0: 69 6f 6e 0a 20 20 20 20 23 20 20 20 20 20 20 20  ion.    #       
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
38e0: 20 6f 66 20 6d 79 66 69 6c 65 27 73 20 72 65 76   of myfile's rev
38f0: 69 73 69 6f 6e 20 74 72 65 65 20 68 61 73 20 6e  ision tree has n
3900: 6f 74 68 69 6e 67 20 73 65 74 20 68 65 72 65 2e  othing set here.
3910: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
3920: 20 20 20 20 20 20 20 20 20 20 3b 20 23 0a 0a 20            ; #.. 
3930: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 63 68     variable mych
3940: 69 6c 64 20 20 7b 7d 20 3b 20 23 20 52 65 66 20  ild  {} ; # Ref 
3950: 74 6f 20 74 68 65 20 70 72 69 6d 61 72 79 20 63  to the primary c
3960: 68 69 6c 64 20 72 65 76 69 73 69 6f 6e 20 6f 62  hild revision ob
3970: 6a 65 63 74 2c 20 69 2e 65 2e 20 74 68 65 20 6e  ject, i.e. the n
3980: 65 78 74 0a 20 20 20 20 23 20 20 20 20 20 20 20  ext.    #       
3990: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
39a0: 20 72 65 76 69 73 69 6f 6e 20 69 6e 20 74 68 65   revision in the
39b0: 20 73 61 6d 65 20 6c 69 6e 65 20 6f 66 20 64 65   same line of de
39c0: 76 65 6c 6f 70 6d 65 6e 74 2e 0a 0a 20 20 20 20  velopment...    
39d0: 23 20 42 72 61 6e 63 68 20 6c 69 6e 6b 61 67 65  # Branch linkage
39e0: 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f   _______________
39f0: 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 76 61 72 69 61  _____..    varia
3a00: 62 6c 65 20 6d 79 62 72 61 6e 63 68 65 73 20 20  ble mybranches  
3a10: 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f     {} ; # List o
3a20: 66 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 28  f the branches (
3a30: 6f 62 6a 73 29 20 73 70 61 77 6e 65 64 20 62 79  objs) spawned by
3a40: 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e 2e 0a   this revision..
3a50: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70      variable myp
3a60: 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d 20 3b  arentbranch {} ;
3a70: 20 23 20 46 6f 72 20 74 68 65 20 66 69 72 73 74   # For the first
3a80: 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61 20 62   revision on a b
3a90: 72 61 6e 63 68 20 74 68 65 20 72 65 6c 65 76 61  ranch the releva
3aa0: 6e 74 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  nt.    #        
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ac0: 20 20 3b 20 23 20 62 72 61 6e 63 68 20 6f 62 6a    ; # branch obj
3ad0: 65 63 74 2e 20 54 68 69 73 20 61 6c 73 6f 20 61  ect. This also a
3ae0: 6c 6c 6f 77 73 20 75 73 20 74 6f 20 64 65 74 65  llows us to dete
3af0: 72 6d 69 6e 65 20 69 66 0a 20 20 20 20 23 20 20  rmine if.    #  
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b10: 20 20 20 20 20 20 20 20 3b 20 23 20 6d 79 70 61          ; # mypa
3b20: 72 65 6e 74 20 69 73 20 69 6e 20 74 68 65 20 73  rent is in the s
3b30: 61 6d 65 20 4c 4f 44 2c 20 6f 72 20 74 68 65 20  ame LOD, or the 
3b40: 72 65 76 69 73 69 6f 6e 20 74 68 65 0a 20 20 20  revision the.   
3b50: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20   #              
3b60: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20              ; # 
3b70: 62 72 61 6e 63 68 20 73 70 61 77 6e 65 64 20 66  branch spawned f
3b80: 72 6f 6d 2e 0a 0a 20 20 20 20 23 20 4c 69 73 74  rom...    # List
3b90: 20 6f 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e   of the revision
3ba0: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 65 20   objects of the 
3bb0: 66 69 72 73 74 20 63 6f 6d 6d 69 74 73 20 6f 6e  first commits on
3bc0: 20 61 6e 79 0a 20 20 20 20 23 20 62 72 61 6e 63   any.    # branc
3bd0: 68 65 73 20 73 70 61 77 6e 65 64 20 62 79 20 74  hes spawned by t
3be0: 68 69 73 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20  his revision on 
3bf0: 77 68 69 63 68 20 63 6f 6d 6d 69 74 73 20 6f 63  which commits oc
3c00: 63 75 72 72 65 64 2e 0a 20 20 20 20 23 20 54 68  curred..    # Th
3c10: 69 73 20 64 65 70 65 6e 64 65 6e 63 79 20 69 73  is dependency is
3c20: 20 6b 65 70 74 20 65 78 70 6c 69 63 69 74 6c 79   kept explicitly
3c30: 20 62 65 63 61 75 73 65 20 6f 74 68 65 72 77 69   because otherwi
3c40: 73 65 20 61 0a 20 20 20 20 23 20 72 65 76 69 73  se a.    # revis
3c50: 69 6f 6e 2d 6f 6e 6c 79 20 74 6f 70 6f 6c 6f 67  ion-only topolog
3c60: 69 63 61 6c 20 73 6f 72 74 20 77 6f 75 6c 64 20  ical sort would 
3c70: 6d 69 73 73 20 74 68 65 20 64 65 70 65 6e 64 65  miss the depende
3c80: 6e 63 79 20 74 68 61 74 0a 20 20 20 20 23 20 65  ncy that.    # e
3c90: 78 69 73 74 73 20 76 69 61 20 2d 3e 20 6d 79 62  xists via -> myb
3ca0: 72 61 6e 63 68 65 73 2e 0a 0a 20 20 20 20 76 61  ranches...    va
3cb0: 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 63  riable mybranchc
3cc0: 68 69 6c 64 72 65 6e 20 7b 7d 20 3b 20 23 20 4c  hildren {} ; # L
3cd0: 69 73 74 20 6f 66 20 74 68 65 20 72 65 76 69 73  ist of the revis
3ce0: 69 6f 6e 73 20 28 6f 62 6a 73 29 20 77 68 69 63  ions (objs) whic
3cf0: 68 20 61 72 65 20 74 68 65 20 66 69 72 73 74 0a  h are the first.
3d00: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d20: 20 3b 20 23 20 63 6f 6d 6d 69 74 73 20 6f 6e 20   ; # commits on 
3d30: 61 6e 79 20 6f 66 20 74 68 65 20 62 72 61 6e 63  any of the branc
3d40: 68 65 73 20 73 70 61 77 6e 65 64 20 66 72 6f 6d  hes spawned from
3d50: 20 74 68 69 73 0a 20 20 20 20 23 20 20 20 20 20   this.    #     
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d70: 20 20 20 20 20 20 20 3b 20 23 20 72 65 76 69 73         ; # revis
3d80: 69 6f 6e 2e 20 54 68 65 20 64 65 70 65 6e 64 65  ion. The depende
3d90: 6e 63 79 20 69 73 20 6b 65 70 74 20 65 78 70 6c  ncy is kept expl
3da0: 69 63 69 74 6c 79 20 74 6f 0a 20 20 20 20 23 20  icitly to.    # 
3db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3dc0: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 65             ; # e
3dd0: 6e 73 75 72 65 20 74 68 61 74 20 61 20 72 65 76  nsure that a rev
3de0: 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74 6f 70 6f 6c  ision-only topol
3df0: 6f 67 69 63 61 6c 20 73 6f 72 74 20 77 69 6c 6c  ogical sort will
3e00: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e20: 20 20 3b 20 23 20 6e 6f 74 20 6d 69 73 73 20 69    ; # not miss i
3e30: 74 2c 20 61 73 20 69 74 20 6f 74 68 65 72 77 69  t, as it otherwi
3e40: 73 65 20 65 78 69 73 74 73 20 6f 6e 6c 79 20 76  se exists only v
3e50: 69 61 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  ia.    #        
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e70: 20 20 20 20 3b 20 23 20 6d 79 62 72 61 6e 63 68      ; # mybranch
3e80: 65 73 2e 0a 0a 20 20 20 20 23 20 54 61 67 20 6c  es...    # Tag l
3e90: 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f  inkage _________
3ea0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a  _______________.
3eb0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
3ec0: 74 61 67 73 20 7b 7d 20 3b 20 23 20 4c 69 73 74  tags {} ; # List
3ed0: 20 6f 66 20 74 61 67 73 20 28 6f 62 6a 73 29 20   of tags (objs) 
3ee0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
3ef0: 74 68 69 73 20 72 65 76 69 73 69 6f 6e 2e 0a 0a  this revision...
3f00: 20 20 20 20 23 20 4d 6f 72 65 20 64 65 72 69 76      # More deriv
3f10: 65 64 20 64 61 74 61 0a 0a 20 20 20 20 76 61 72  ed data..    var
3f20: 69 61 62 6c 65 20 6d 79 6f 70 65 72 61 74 69 6f  iable myoperatio
3f30: 6e 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  n        {} ; # 
3f40: 4f 6e 65 20 6f 66 20 27 61 64 64 27 2c 20 27 63  One of 'add', 'c
3f50: 68 61 6e 67 65 27 2c 20 27 64 65 6c 65 74 65 27  hange', 'delete'
3f60: 2c 20 6f 72 0a 09 09 09 20 20 20 20 20 20 20 20  , or....        
3f70: 20 20 20 20 20 23 20 27 6e 6f 74 68 69 6e 67 27       # 'nothing'
3f80: 2e 20 44 65 72 69 76 65 64 20 66 72 6f 6d 20 6f  . Derived from o
3f90: 75 72 20 61 6e 64 0a 09 09 09 20 20 20 20 20 20  ur and....      
3fa0: 20 20 20 20 20 20 20 23 20 69 74 73 20 70 61 72         # its par
3fb0: 65 6e 74 27 73 20 73 74 61 74 65 2e 0a 20 20 20  ent's state..   
3fc0: 20 76 61 72 69 61 62 6c 65 20 6d 79 69 73 6f 6e   variable myison
3fd0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 30 20  defaultbranch 0 
3fe0: 3b 20 23 20 42 6f 6f 6c 65 61 6e 20 66 6c 61 67  ; # Boolean flag
3ff0: 2c 20 73 65 74 20 69 66 20 74 68 65 0a 09 09 09  , set if the....
4000: 09 20 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e  .     # revision
4010: 20 69 73 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 74   is on the non-t
4020: 72 75 6e 6b 0a 09 09 09 09 20 20 20 20 20 23 20  runk.....     # 
4030: 64 65 66 61 75 6c 74 20 62 72 61 6e 63 68 2c 20  default branch, 
4040: 61 6b 61 20 76 65 6e 64 6f 72 0a 09 09 09 09 20  aka vendor..... 
4050: 20 20 20 20 23 20 62 72 61 6e 63 68 2e 0a 20 20      # branch..  
4060: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 64 62 70    variable mydbp
4070: 61 72 65 6e 74 20 20 20 20 20 20 20 20 20 7b 7d  arent         {}
4080: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74   ; # Reference t
4090: 6f 20 74 68 65 20 6c 61 73 74 20 72 65 76 69 73  o the last revis
40a0: 69 6f 6e 0a 09 09 09 09 20 20 20 20 20 23 20 6f  ion.....     # o
40b0: 6e 20 74 68 65 20 76 65 6e 64 6f 72 20 62 72 61  n the vendor bra
40c0: 6e 63 68 20 69 66 20 74 68 69 73 20 69 73 0a 09  nch if this is..
40d0: 09 09 09 20 20 20 20 20 23 20 74 68 65 20 70 72  ...     # the pr
40e0: 69 6d 61 72 79 20 63 68 69 6c 64 20 6f 66 20 74  imary child of t
40f0: 68 65 0a 09 09 09 09 20 20 20 20 20 23 20 72 65  he.....     # re
4100: 67 75 6c 61 72 20 72 6f 6f 74 2e 0a 20 20 20 20  gular root..    
4110: 76 61 72 69 61 62 6c 65 20 6d 79 64 62 63 68 69  variable mydbchi
4120: 6c 64 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b  ld          {} ;
4130: 20 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20   # Reference to 
4140: 74 68 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c  the primary chil
4150: 64 0a 09 09 09 09 20 20 20 20 20 23 20 6f 66 20  d.....     # of 
4160: 74 68 65 20 72 65 67 75 6c 61 72 20 72 6f 6f 74  the regular root
4170: 20 69 66 20 74 68 69 73 20 69 73 0a 09 09 09 09   if this is.....
4180: 20 20 20 20 20 23 20 74 68 65 20 6c 61 73 74 20       # the last 
4190: 72 65 76 69 73 69 6f 6e 20 6f 6e 20 74 68 65 20  revision on the 
41a0: 76 65 6e 64 6f 72 0a 09 09 09 09 20 20 20 20 20  vendor.....     
41b0: 23 20 62 72 61 6e 63 68 2e 0a 0a 20 20 20 20 23  # branch...    #
41c0: 20 64 65 61 64 28 73 65 6c 66 29 20 78 20 64 65   dead(self) x de
41d0: 61 64 28 70 61 72 65 6e 74 29 20 2d 3e 20 6f 70  ad(parent) -> op
41e0: 65 72 61 74 69 6f 6e 0a 20 20 20 20 74 79 70 65  eration.    type
41f0: 76 61 72 69 61 62 6c 65 20 6d 79 6f 70 73 74 61  variable myopsta
4200: 74 65 20 2d 61 72 72 61 79 20 7b 0a 09 7b 30 20  te -array {..{0 
4210: 30 7d 20 63 68 61 6e 67 65 0a 09 7b 30 20 31 7d  0} change..{0 1}
4220: 20 64 65 6c 65 74 65 0a 09 7b 31 20 30 7d 20 61   delete..{1 0} a
4230: 64 64 0a 09 7b 31 20 31 7d 20 6e 6f 74 68 69 6e  dd..{1 1} nothin
4240: 67 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70  g.    }..    typ
4250: 65 6d 65 74 68 6f 64 20 67 65 74 6f 70 63 6f 64  emethod getopcod
4260: 65 73 20 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68  es {} {..foreach
4270: 20 7b 69 64 20 6e 61 6d 65 7d 20 5b 73 74 61 74   {id name} [stat
4280: 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c  e run {..    SEL
4290: 45 43 54 20 6f 69 64 2c 20 6e 61 6d 65 20 46 52  ECT oid, name FR
42a0: 4f 4d 20 6f 70 74 79 70 65 3b 0a 09 7d 5d 20 7b  OM optype;..}] {
42b0: 20 73 65 74 20 6d 79 6f 70 63 6f 64 65 28 24 6e   set myopcode($n
42c0: 61 6d 65 29 20 24 69 64 20 7d 0a 09 72 65 74 75  ame) $id }..retu
42d0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79  rn.    }..    ty
42e0: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6f 70 63  pevariable myopc
42f0: 6f 64 65 20 2d 61 72 72 61 79 20 7b 7d 0a 0a 20  ode -array {}.. 
4300: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
4310: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
4320: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
4330: 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f  # Internal metho
4340: 64 73 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23  ds..    # # ## #
4350: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
4360: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
4370: 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61      ## Configura
4380: 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61  tion..    pragma
4390: 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20   -hastypeinfo   
43a0: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65   no  ; # no type
43b0: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20   introspection. 
43c0: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e     pragma -hasin
43d0: 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20  fo        no  ; 
43e0: 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72  # no object intr
43f0: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72  ospection.    pr
4400: 61 67 6d 61 20 2d 73 69 6d 70 6c 65 64 69 73 70  agma -simpledisp
4410: 61 74 63 68 20 79 65 73 20 3b 20 23 20 73 69 6d  atch yes ; # sim
4420: 70 6c 65 20 66 61 73 74 20 64 69 73 70 61 74 63  ple fast dispatc
4430: 68 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  h..    # # ## ##
4440: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
4450: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d   #############.}
4460: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c  ..namespace eval
4470: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
4480: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65  mport::cvs::file
4490: 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65   {.    namespace
44a0: 20 65 78 70 6f 72 74 20 72 65 76 0a 20 20 20 20   export rev.    
44b0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 72  namespace eval r
44c0: 65 76 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20  ev {..namespace 
44d0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f  import ::vc::too
44e0: 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d  ls::misc::*..nam
44f0: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
4500: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
4510: 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09  rt::cvs::state..
4520: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
4530: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
4540: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65  mport::cvs::inte
4550: 67 72 69 74 79 0a 20 20 20 20 7d 0a 7d 0a 0a 23  grity.    }.}..#
4560: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
4570: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
4580: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
4590: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
45a0: 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70  Ready..package p
45b0: 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69  rovide vc::fossi
45c0: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
45d0: 66 69 6c 65 3a 3a 72 65 76 20 31 2e 30 0a 72 65  file::rev 1.0.re
45e0: 74 75 72 6e 0a                                   turn.