Hex Artifact Content
Not logged in

Artifact fa500c1612650002cd9d32f2fc1c1be6a3a1123f:

File tools/cvs2fossil/lib/c2f_frev.tcl part of check-in [3e76f2a5f0] - Removed the now obsolete textrange information from the revision table and updated the file revision code to not store its textrange any longer. by aku on 2008-02-03 01:33:45.

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: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d    {} { return $m
0590: 79 69 64 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64  yid }.    method
05a0: 20 66 69 6c 65 20 7b 7d 20 7b 20 72 65 74 75 72   file {} { retur
05b0: 6e 20 24 6d 79 66 69 6c 65 20 7d 0a 0a 20 20 20  n $myfile }..   
05c0: 20 23 20 42 61 73 69 63 20 70 69 65 63 65 73 20   # Basic pieces 
05d0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
05e0: 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65  ________..    me
05f0: 74 68 6f 64 20 68 61 73 6d 65 74 61 20 7b 7d 20  thod hasmeta {} 
0600: 7b 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b  { return [expr {
0610: 24 6d 79 6d 65 74 61 69 64 20 6e 65 20 22 22 7d  $mymetaid ne ""}
0620: 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 68  ] }.    method h
0630: 61 73 74 65 78 74 20 7b 7d 20 7b 0a 09 72 65 74  astext {} {..ret
0640: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 74 65  urn [expr {$myte
0650: 78 74 73 74 61 72 74 20 3c 3d 20 24 6d 79 74 65  xtstart <= $myte
0660: 78 74 65 6e 64 7d 5d 0a 20 20 20 20 7d 0a 0a 20  xtend}].    }.. 
0670: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 6d 65 74     method setmet
0680: 61 20 7b 6d 65 74 61 7d 20 7b 20 73 65 74 20 6d  a {meta} { set m
0690: 79 6d 65 74 61 69 64 20 24 6d 65 74 61 20 3b 20  ymetaid $meta ; 
06a0: 72 65 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74  return }.    met
06b0: 68 6f 64 20 73 65 74 74 65 78 74 20 7b 74 65 78  hod settext {tex
06c0: 74 7d 20 7b 0a 09 73 74 72 75 63 74 3a 3a 6c 69  t} {..struct::li
06d0: 73 74 20 61 73 73 69 67 6e 20 24 74 65 78 74 20  st assign $text 
06e0: 6d 79 74 65 78 74 73 74 61 72 74 20 6d 79 74 65  mytextstart myte
06f0: 78 74 65 6e 64 0a 09 72 65 74 75 72 6e 0a 20 20  xtend..return.  
0700: 20 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 73    }.    method s
0710: 65 74 6c 6f 64 20 20 7b 6c 6f 64 7d 20 20 7b 20  etlod  {lod}  { 
0720: 73 65 74 20 6d 79 6c 6f 64 20 20 20 20 24 6c 6f  set mylod    $lo
0730: 64 20 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20  d  ; return }.. 
0740: 20 20 20 6d 65 74 68 6f 64 20 72 65 76 6e 72 20     method revnr 
0750: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 72  {} { return $myr
0760: 65 76 6e 72 20 7d 0a 20 20 20 20 6d 65 74 68 6f  evnr }.    metho
0770: 64 20 73 74 61 74 65 20 7b 7d 20 7b 20 72 65 74  d state {} { ret
0780: 75 72 6e 20 24 6d 79 73 74 61 74 65 20 7d 0a 20  urn $mystate }. 
0790: 20 20 20 6d 65 74 68 6f 64 20 6c 6f 64 20 20 20     method lod   
07a0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 6c  {} { return $myl
07b0: 6f 64 20 20 20 7d 0a 20 20 20 20 6d 65 74 68 6f  od   }.    metho
07c0: 64 20 64 61 74 65 20 20 7b 7d 20 7b 20 72 65 74  d date  {} { ret
07d0: 75 72 6e 20 24 6d 79 64 61 74 65 20 20 7d 0a 0a  urn $mydate  }..
07e0: 20 20 20 20 6d 65 74 68 6f 64 20 69 73 6e 65 65      method isnee
07f0: 64 65 64 20 7b 7d 20 7b 0a 09 69 66 20 7b 24 6d  ded {} {..if {$m
0800: 79 6f 70 65 72 61 74 69 6f 6e 20 6e 65 20 22 6e  yoperation ne "n
0810: 6f 74 68 69 6e 67 22 7d 20 20 20 20 20 20 20 20  othing"}        
0820: 20 7b 72 65 74 75 72 6e 20 31 7d 0a 09 69 66 20   {return 1}..if 
0830: 7b 24 6d 79 72 65 76 6e 72 20 6e 65 20 22 31 2e  {$myrevnr ne "1.
0840: 31 22 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  1"}             
0850: 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a 09      {return 1}..
0860: 69 66 20 7b 21 5b 24 6d 79 6c 6f 64 20 69 73 74  if {![$mylod ist
0870: 72 75 6e 6b 5d 7d 20 20 20 20 20 20 20 20 20 20  runk]}          
0880: 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31         {return 1
0890: 7d 0a 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68  }..if {![llength
08a0: 20 24 6d 79 62 72 61 6e 63 68 65 73 5d 7d 20 20   $mybranches]}  
08b0: 20 20 20 20 20 20 20 20 20 20 7b 72 65 74 75 72            {retur
08c0: 6e 20 31 7d 0a 09 73 65 74 20 66 69 72 73 74 62  n 1}..set firstb
08d0: 72 61 6e 63 68 20 5b 6c 69 6e 64 65 78 20 24 6d  ranch [lindex $m
08e0: 79 62 72 61 6e 63 68 65 73 20 30 5d 0a 09 69 66  ybranches 0]..if
08f0: 20 7b 21 5b 24 66 69 72 73 74 62 72 61 6e 63 68   {![$firstbranch
0900: 20 68 61 73 63 68 69 6c 64 5d 7d 20 20 20 20 20   haschild]}     
0910: 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 0a       {return 1}.
0920: 09 69 66 20 7b 24 6d 79 69 73 6f 6e 64 65 66 61  .if {$myisondefa
0930: 75 6c 74 62 72 61 6e 63 68 7d 20 20 20 20 20 20  ultbranch}      
0940: 20 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e 20          {return 
0950: 31 7d 0a 0a 09 23 20 46 49 58 3a 20 54 68 69 73  1}...# FIX: This
0960: 20 6d 65 73 73 61 67 65 20 77 69 6c 6c 20 6e 6f   message will no
0970: 74 20 6d 61 74 63 68 20 69 66 20 74 68 65 20 52  t match if the R
0980: 43 53 20 66 69 6c 65 20 77 61 73 20 72 65 6e 61  CS file was rena
0990: 6d 65 64 0a 09 23 20 6d 61 6e 75 61 6c 6c 79 20  med..# manually 
09a0: 61 66 74 65 72 20 69 74 20 77 61 73 20 63 72 65  after it was cre
09b0: 61 74 65 64 2e 0a 0a 09 73 65 74 20 67 65 6e 20  ated....set gen 
09c0: 22 66 69 6c 65 20 5b 66 69 6c 65 20 74 61 69 6c  "file [file tail
09d0: 20 5b 24 6d 79 66 69 6c 65 20 75 73 72 70 61 74   [$myfile usrpat
09e0: 68 5d 5d 20 77 61 73 20 69 6e 69 74 69 61 6c 6c  h]] was initiall
09f0: 79 20 61 64 64 65 64 20 6f 6e 20 62 72 61 6e 63  y added on branc
0a00: 68 20 5b 24 66 69 72 73 74 62 72 61 6e 63 68 20  h [$firstbranch 
0a10: 6e 61 6d 65 5d 2e 22 0a 09 73 65 74 20 6c 6f 67  name]."..set log
0a20: 20 5b 24 6d 79 66 69 6c 65 20 63 6f 6d 6d 69 74   [$myfile commit
0a30: 6d 65 73 73 61 67 65 6f 66 20 24 6d 79 6d 65 74  messageof $mymet
0a40: 61 69 64 5d 0a 0a 09 72 65 74 75 72 6e 20 5b 65  aid]...return [e
0a50: 78 70 72 20 7b 24 6c 6f 67 20 6e 65 20 24 67 65  xpr {$log ne $ge
0a60: 6e 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  n}].    }..    m
0a70: 65 74 68 6f 64 20 69 73 6e 65 65 64 65 64 62 72  ethod isneededbr
0a80: 61 6e 63 68 64 65 6c 20 7b 7d 20 7b 0a 09 69 66  anchdel {} {..if
0a90: 20 7b 24 6d 79 70 61 72 65 6e 74 62 72 61 6e 63   {$myparentbranc
0aa0: 68 20 65 71 20 22 22 7d 20 20 20 20 20 20 20 20  h eq ""}        
0ab0: 20 20 20 7b 72 65 74 75 72 6e 20 31 7d 20 3b 20     {return 1} ; 
0ac0: 23 20 6e 6f 74 20 66 69 72 73 74 20 6f 6e 20 61  # not first on a
0ad0: 20 62 72 61 6e 63 68 2c 20 6e 65 65 64 65 64 0a   branch, needed.
0ae0: 09 73 65 74 20 62 61 73 65 20 5b 24 6d 79 70 61  .set base [$mypa
0af0: 72 65 6e 74 62 72 61 6e 63 68 20 70 61 72 65 6e  rentbranch paren
0b00: 74 5d 0a 09 69 66 20 7b 24 62 61 73 65 20 20 20  t]..if {$base   
0b10: 20 20 20 20 20 20 20 20 65 71 20 22 22 7d 20 20          eq ""}  
0b20: 20 20 20 20 20 20 20 20 20 7b 72 65 74 75 72 6e           {return
0b30: 20 31 7d 20 3b 20 23 20 62 72 61 6e 63 68 20 68   1} ; # branch h
0b40: 61 73 20 70 61 72 65 6e 74 20 6c 6f 64 2c 20 6e  as parent lod, n
0b50: 65 65 64 65 64 0a 09 69 66 20 7b 5b 24 73 65 6c  eeded..if {[$sel
0b60: 66 20 4c 4f 44 4c 65 6e 67 74 68 5d 20 3c 20 32  f LODLength] < 2
0b70: 7d 20 20 20 20 20 20 20 20 20 20 20 7b 72 65 74  }           {ret
0b80: 75 72 6e 20 31 7d 20 3b 20 23 20 6f 75 72 20 6c  urn 1} ; # our l
0b90: 6f 64 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79  od contains only
0ba0: 20 6f 75 72 73 65 6c 76 65 73 2c 20 6e 65 65 64   ourselves, need
0bb0: 65 64 2e 0a 09 69 66 20 7b 24 6d 79 6f 70 65 72  ed...if {$myoper
0bc0: 61 74 69 6f 6e 20 6e 65 20 22 64 65 6c 65 74 65  ation ne "delete
0bd0: 22 7d 20 20 20 20 20 20 20 20 7b 72 65 74 75 72  "}        {retur
0be0: 6e 20 31 7d 20 3b 20 23 20 4e 6f 74 20 61 20 64  n 1} ; # Not a d
0bf0: 65 6c 65 74 69 6f 6e 2c 20 6e 65 65 64 65 64 0a  eletion, needed.
0c00: 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d  .if {[llength $m
0c10: 79 74 61 67 73 5d 7d 20 20 20 20 20 20 20 20 20  ytags]}         
0c20: 20 20 20 20 20 20 7b 72 65 74 75 72 6e 20 31 7d        {return 1}
0c30: 20 3b 20 23 20 48 61 76 65 20 74 61 67 73 2c 20   ; # Have tags, 
0c40: 6e 65 65 64 65 64 0a 09 69 66 20 7b 5b 6c 6c 65  needed..if {[lle
0c50: 6e 67 74 68 20 24 6d 79 62 72 61 6e 63 68 65 73  ngth $mybranches
0c60: 5d 7d 20 20 20 20 20 20 20 20 20 20 20 7b 72 65  ]}           {re
0c70: 74 75 72 6e 20 31 7d 20 3b 20 23 20 48 61 76 65  turn 1} ; # Have
0c80: 20 6f 74 68 65 72 20 62 72 61 6e 63 68 65 73 2c   other branches,
0c90: 20 6e 65 65 64 65 64 0a 09 69 66 20 7b 61 62 73   needed..if {abs
0ca0: 28 24 6d 79 64 61 74 65 20 2d 20 5b 24 62 61 73  ($mydate - [$bas
0cb0: 65 20 64 61 74 65 5d 29 20 3e 20 32 7d 20 7b 72  e date]) > 2} {r
0cc0: 65 74 75 72 6e 20 31 7d 20 3b 20 23 20 4e 65 78  eturn 1} ; # Nex
0cd0: 74 20 72 65 76 20 3e 20 32 20 73 65 63 6f 6e 64  t rev > 2 second
0ce0: 73 20 61 70 61 72 74 2c 20 6e 65 65 64 65 64 0a  s apart, needed.
0cf0: 0a 20 20 20 20 20 20 20 20 23 20 46 49 58 4d 45  .        # FIXME
0d00: 3a 20 54 68 69 73 20 6d 65 73 73 61 67 65 20 77  : This message w
0d10: 69 6c 6c 20 6e 6f 74 20 6d 61 74 63 68 20 69 66  ill not match if
0d20: 20 74 68 65 20 52 43 53 20 66 69 6c 65 20 77 61   the RCS file wa
0d30: 73 0a 20 20 20 20 20 20 20 20 23 20 72 65 6e 61  s.        # rena
0d40: 6d 65 64 20 6d 61 6e 75 61 6c 6c 79 20 61 66 74  med manually aft
0d50: 65 72 20 69 74 20 77 61 73 20 63 72 65 61 74 65  er it was create
0d60: 64 2e 0a 0a 09 73 65 74 20 71 66 69 6c 65 20 5b  d....set qfile [
0d70: 73 74 72 69 6e 67 20 6d 61 70 20 7b 0a 09 20 20  string map {..  
0d80: 20 20 2e 20 20 5c 5c 2e 20 20 3f 20 20 5c 5c 3f    .  \\.  ?  \\?
0d90: 20 20 2a 20 20 5c 5c 2a 20 20 5c 5c 20 5c 5c 5c    *  \\*  \\ \\\
0da0: 5c 20 2b 20 20 5c 5c 2b 20 20 5e 20 5c 5c 5e 20  \ +  \\+  ^ \\^ 
0db0: 24 20 5c 5c 24 0a 09 20 20 20 20 5c 5b 20 5c 5c  $ \\$..    \[ \\
0dc0: 5c 5b 20 5c 5d 20 5c 5c 5c 5d 20 28 20 20 5c 5c  \[ \] \\\] (  \\
0dd0: 28 20 20 20 29 20 5c 5c 29 20 20 5c 7b 20 5c 5c  (   ) \\)  \{ \\
0de0: 5c 7b 20 5c 7d 20 5c 5c 5c 7d 0a 09 7d 20 5b 66  \{ \} \\\}..} [f
0df0: 69 6c 65 20 74 61 69 6c 20 5b 24 6d 79 66 69 6c  ile tail [$myfil
0e00: 65 20 75 73 72 70 61 74 68 5d 5d 5d 0a 09 73 65  e usrpath]]]..se
0e10: 74 20 70 61 74 74 65 72 6e 20 22 66 69 6c 65 20  t pattern "file 
0e20: 24 71 66 69 6c 65 20 77 61 73 20 61 64 64 65 64  $qfile was added
0e30: 20 6f 6e 20 62 72 61 6e 63 68 20 2e 2a 20 6f 6e   on branch .* on
0e40: 20 5c 5c 64 7b 34 7d 2d 5c 5c 64 7b 32 7d 2d 5c   \\d{4}-\\d{2}-\
0e50: 5c 64 7b 32 7d 20 5c 5c 64 7b 32 7d 3a 5c 5c 64  \d{2} \\d{2}:\\d
0e60: 7b 32 7d 3a 5c 5c 64 7b 32 7d 28 20 5c 5b 2b 2d  {2}:\\d{2}( \[+-
0e70: 5c 5d 5c 5c 64 7b 34 7d 29 3f 22 0a 09 73 65 74  \]\\d{4})?"..set
0e80: 20 6c 6f 67 20 20 20 20 20 5b 24 6d 79 66 69 6c   log     [$myfil
0e90: 65 20 63 6f 6d 6d 69 74 6d 65 73 73 61 67 65 6f  e commitmessageo
0ea0: 66 20 24 6d 79 6d 65 74 61 69 64 5d 0a 0a 09 23  f $mymetaid]...#
0eb0: 20 4e 6f 74 20 74 68 65 20 73 70 65 63 69 61 6c   Not the special
0ec0: 20 6d 65 73 73 61 67 65 2c 20 6e 65 65 64 65 64   message, needed
0ed0: 0a 09 69 66 20 7b 21 5b 72 65 67 65 78 70 20 2d  ..if {![regexp -
0ee0: 2d 20 24 70 61 74 74 65 72 6e 20 24 6c 6f 67 5d  - $pattern $log]
0ef0: 7d 20 7b 72 65 74 75 72 6e 20 31 7d 0a 0a 09 23  } {return 1}...#
0f00: 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 6e 65   This is an unne
0f10: 65 64 65 64 20 69 6e 69 74 69 61 6c 20 62 72 61  eded initial bra
0f20: 6e 63 68 20 64 65 6c 65 74 65 2e 0a 09 72 65 74  nch delete...ret
0f30: 75 72 6e 20 30 0a 20 20 20 20 7d 0a 0a 20 20 20  urn 0.    }..   
0f40: 20 6d 65 74 68 6f 64 20 4c 4f 44 4c 65 6e 67 74   method LODLengt
0f50: 68 20 7b 7d 20 7b 0a 09 73 65 74 20 6e 20 31 20  h {} {..set n 1 
0f60: 3b 20 23 20 63 6f 75 6e 74 20 73 65 6c 66 0a 09  ; # count self..
0f70: 73 65 74 20 72 65 76 20 24 6d 79 63 68 69 6c 64  set rev $mychild
0f80: 0a 09 77 68 69 6c 65 20 7b 24 72 65 76 20 6e 65  ..while {$rev ne
0f90: 20 22 22 7d 20 7b 0a 09 20 20 20 20 69 6e 63 72   ""} {..    incr
0fa0: 20 6e 0a 09 20 20 20 20 73 65 74 20 72 65 76 20   n..    set rev 
0fb0: 5b 24 72 65 76 20 63 68 69 6c 64 5d 0a 09 7d 0a  [$rev child]..}.
0fc0: 09 72 65 74 75 72 6e 20 24 6e 0a 20 20 20 20 7d  .return $n.    }
0fd0: 0a 0a 20 20 20 20 23 20 42 61 73 69 63 20 70 61  ..    # Basic pa
0fe0: 72 65 6e 74 2f 63 68 69 6c 64 20 6c 69 6e 6b 61  rent/child linka
0ff0: 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20  ge __________.. 
1000: 20 20 20 6d 65 74 68 6f 64 20 68 61 73 70 61 72     method haspar
1010: 65 6e 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20  ent {} { return 
1020: 5b 65 78 70 72 20 7b 24 6d 79 70 61 72 65 6e 74  [expr {$myparent
1030: 20 6e 65 20 22 22 7d 5d 20 7d 0a 20 20 20 20 6d   ne ""}] }.    m
1040: 65 74 68 6f 64 20 68 61 73 63 68 69 6c 64 20 20  ethod haschild  
1050: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 5b 65 78 70  {} { return [exp
1060: 72 20 7b 24 6d 79 63 68 69 6c 64 20 20 6e 65 20  r {$mychild  ne 
1070: 22 22 7d 5d 20 7d 0a 0a 20 20 20 20 6d 65 74 68  ""}] }..    meth
1080: 6f 64 20 73 65 74 70 61 72 65 6e 74 20 7b 70 61  od setparent {pa
1090: 72 65 6e 74 7d 20 7b 0a 09 69 6e 74 65 67 72 69  rent} {..integri
10a0: 74 79 20 61 73 73 65 72 74 20 7b 24 6d 79 70 61  ty assert {$mypa
10b0: 72 65 6e 74 20 65 71 20 22 22 7d 20 7b 50 61 72  rent eq ""} {Par
10c0: 65 6e 74 20 61 6c 72 65 61 64 79 20 64 65 66 69  ent already defi
10d0: 6e 65 64 7d 0a 09 73 65 74 20 6d 79 70 61 72 65  ned}..set mypare
10e0: 6e 74 20 24 70 61 72 65 6e 74 0a 09 72 65 74 75  nt $parent..retu
10f0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
1100: 74 68 6f 64 20 63 75 74 66 72 6f 6d 70 61 72 65  thod cutfrompare
1110: 6e 74 20 7b 7d 20 7b 20 73 65 74 20 6d 79 70 61  nt {} { set mypa
1120: 72 65 6e 74 20 22 22 20 3b 20 72 65 74 75 72 6e  rent "" ; return
1130: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 75   }.    method cu
1140: 74 66 72 6f 6d 63 68 69 6c 64 20 20 7b 7d 20 7b  tfromchild  {} {
1150: 20 73 65 74 20 6d 79 63 68 69 6c 64 20 20 22 22   set mychild  ""
1160: 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20   ; return }..   
1170: 20 6d 65 74 68 6f 64 20 73 65 74 63 68 69 6c 64   method setchild
1180: 20 7b 63 68 69 6c 64 7d 20 7b 0a 09 69 6e 74 65   {child} {..inte
1190: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 24 6d  grity assert {$m
11a0: 79 63 68 69 6c 64 20 65 71 20 22 22 7d 20 7b 43  ychild eq ""} {C
11b0: 68 69 6c 64 20 61 6c 72 65 61 64 79 20 64 65 66  hild already def
11c0: 69 6e 65 64 7d 0a 09 73 65 74 20 6d 79 63 68 69  ined}..set mychi
11d0: 6c 64 20 24 63 68 69 6c 64 0a 09 72 65 74 75 72  ld $child..retur
11e0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
11f0: 68 6f 64 20 63 68 61 6e 67 65 70 61 72 65 6e 74  hod changeparent
1200: 20 7b 70 61 72 65 6e 74 7d 20 7b 20 73 65 74 20   {parent} { set 
1210: 6d 79 70 61 72 65 6e 74 20 24 70 61 72 65 6e 74  myparent $parent
1220: 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20 20 20 20   ; return }.    
1230: 6d 65 74 68 6f 64 20 63 68 61 6e 67 65 63 68 69  method changechi
1240: 6c 64 20 20 7b 63 68 69 6c 64 7d 20 20 7b 20 73  ld  {child}  { s
1250: 65 74 20 6d 79 63 68 69 6c 64 20 20 24 63 68 69  et mychild  $chi
1260: 6c 64 20 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a  ld  ; return }..
1270: 20 20 20 20 6d 65 74 68 6f 64 20 70 61 72 65 6e      method paren
1280: 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  t {} { return $m
1290: 79 70 61 72 65 6e 74 20 7d 0a 20 20 20 20 6d 65  yparent }.    me
12a0: 74 68 6f 64 20 63 68 69 6c 64 20 20 7b 7d 20 7b  thod child  {} {
12b0: 20 72 65 74 75 72 6e 20 24 6d 79 63 68 69 6c 64   return $mychild
12c0: 20 20 7d 0a 0a 20 20 20 20 23 20 42 72 61 6e 63    }..    # Branc
12d0: 68 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f  h linkage ______
12e0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
12f0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
1300: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 62 72  parentbranch {br
1310: 61 6e 63 68 7d 20 7b 0a 09 69 6e 74 65 67 72 69  anch} {..integri
1320: 74 79 20 61 73 73 65 72 74 20 7b 24 6d 79 70 61  ty assert {$mypa
1330: 72 65 6e 74 62 72 61 6e 63 68 20 65 71 20 22 22  rentbranch eq ""
1340: 7d 20 7b 42 72 61 6e 63 68 20 70 61 72 65 6e 74  } {Branch parent
1350: 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e 65 64   already defined
1360: 7d 0a 09 73 65 74 20 6d 79 70 61 72 65 6e 74 62  }..set myparentb
1370: 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09 72  ranch $branch..r
1380: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
1390: 20 6d 65 74 68 6f 64 20 68 61 73 70 61 72 65 6e   method hasparen
13a0: 74 62 72 61 6e 63 68 20 7b 7d 20 7b 20 72 65 74  tbranch {} { ret
13b0: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 70 61  urn [expr {$mypa
13c0: 72 65 6e 74 62 72 61 6e 63 68 20 6e 65 20 22 22  rentbranch ne ""
13d0: 7d 5d 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  }] }.    method 
13e0: 68 61 73 62 72 61 6e 63 68 65 73 20 20 20 20 20  hasbranches     
13f0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 5b 6c 6c 65  {} { return [lle
1400: 6e 67 74 68 20 24 6d 79 62 72 61 6e 63 68 65 73  ngth $mybranches
1410: 5d 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ] }..    method 
1420: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d 20  parentbranch {} 
1430: 7b 20 72 65 74 75 72 6e 20 24 6d 79 70 61 72 65  { return $mypare
1440: 6e 74 62 72 61 6e 63 68 20 7d 0a 20 20 20 20 6d  ntbranch }.    m
1450: 65 74 68 6f 64 20 62 72 61 6e 63 68 65 73 20 20  ethod branches  
1460: 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24     {} { return $
1470: 6d 79 62 72 61 6e 63 68 65 73 20 7d 0a 0a 20 20  mybranches }..  
1480: 20 20 6d 65 74 68 6f 64 20 61 64 64 62 72 61 6e    method addbran
1490: 63 68 20 7b 62 72 61 6e 63 68 7d 20 7b 0a 09 6c  ch {branch} {..l
14a0: 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63 68 65  append mybranche
14b0: 73 20 24 62 72 61 6e 63 68 0a 09 72 65 74 75 72  s $branch..retur
14c0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
14d0: 68 6f 64 20 61 64 64 63 68 69 6c 64 6f 6e 62 72  hod addchildonbr
14e0: 61 6e 63 68 20 7b 63 68 69 6c 64 7d 20 7b 0a 09  anch {child} {..
14f0: 6c 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63 68  lappend mybranch
1500: 63 68 69 6c 64 72 65 6e 20 24 63 68 69 6c 64 0a  children $child.
1510: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1520: 20 20 20 6d 65 74 68 6f 64 20 63 75 74 66 72 6f     method cutfro
1530: 6d 70 61 72 65 6e 74 62 72 61 6e 63 68 20 7b 7d  mparentbranch {}
1540: 20 7b 20 73 65 74 20 6d 79 70 61 72 65 6e 74 62   { set myparentb
1550: 72 61 6e 63 68 20 22 22 20 3b 20 72 65 74 75 72  ranch "" ; retur
1560: 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  n }..    method 
1570: 72 65 6d 6f 76 65 62 72 61 6e 63 68 20 7b 62 72  removebranch {br
1580: 61 6e 63 68 7d 20 7b 0a 09 6c 64 65 6c 65 74 65  anch} {..ldelete
1590: 20 6d 79 62 72 61 6e 63 68 65 73 20 24 62 72 61   mybranches $bra
15a0: 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  nch..return.    
15b0: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 72 65  }..    method re
15c0: 6d 6f 76 65 63 68 69 6c 64 6f 6e 62 72 61 6e 63  movechildonbranc
15d0: 68 20 7b 72 65 76 7d 20 7b 0a 09 6c 64 65 6c 65  h {rev} {..ldele
15e0: 74 65 20 6d 79 62 72 61 6e 63 68 63 68 69 6c 64  te mybranchchild
15f0: 72 65 6e 20 24 72 65 76 0a 09 72 65 74 75 72 6e  ren $rev..return
1600: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
1610: 6f 64 20 73 6f 72 74 62 72 61 6e 63 68 65 73 20  od sortbranches 
1620: 7b 7d 20 7b 0a 09 23 20 50 61 73 73 20 32 3a 20  {} {..# Pass 2: 
1630: 43 6f 6c 6c 65 63 74 52 65 76 0a 0a 09 69 66 20  CollectRev...if 
1640: 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 62 72 61  {[llength $mybra
1650: 6e 63 68 65 73 5d 20 3c 20 32 7d 20 72 65 74 75  nches] < 2} retu
1660: 72 6e 0a 0a 09 23 20 53 6f 72 74 20 74 68 65 20  rn...# Sort the 
1670: 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65 64  branches spawned
1680: 20 62 79 20 74 68 69 73 20 72 65 76 69 73 69 6f   by this revisio
1690: 6e 20 69 6e 20 63 72 65 61 74 69 6f 6e 0a 09 23  n in creation..#
16a0: 20 6f 72 64 65 72 2e 20 54 6f 20 68 65 6c 70 20   order. To help 
16b0: 69 6e 20 74 68 69 73 20 6f 75 72 20 66 69 6c 65  in this our file
16c0: 20 67 61 76 65 20 61 6c 6c 20 62 72 61 6e 63 68   gave all branch
16d0: 65 73 20 61 20 70 6f 73 69 74 69 6f 6e 0a 09 23  es a position..#
16e0: 20 69 64 2c 20 69 6e 20 6f 72 64 65 72 20 6f 66   id, in order of
16f0: 20 74 68 65 69 72 20 64 65 66 69 6e 69 74 69 6f   their definitio
1700: 6e 20 62 79 20 74 68 65 20 52 43 53 20 61 72 63  n by the RCS arc
1710: 68 69 76 65 2e 0a 09 23 0a 09 23 20 54 68 65 20  hive...#..# The 
1720: 63 72 65 61 74 69 6f 6e 20 6f 72 64 65 72 20 69  creation order i
1730: 73 20 28 61 70 70 61 72 65 6e 74 6c 79 29 20 74  s (apparently) t
1740: 68 65 20 72 65 76 65 72 73 65 20 6f 66 20 74 68  he reverse of th
1750: 65 0a 09 23 20 64 65 66 69 6e 69 74 69 6f 6e 20  e..# definition 
1760: 6f 72 64 65 72 2e 20 28 49 66 20 61 20 62 72 61  order. (If a bra
1770: 6e 63 68 20 69 73 20 63 72 65 61 74 65 64 20 74  nch is created t
1780: 68 65 6e 20 64 65 6c 65 74 65 64 2c 20 61 0a 09  hen deleted, a..
1790: 23 20 6c 61 74 65 72 20 62 72 61 6e 63 68 20 63  # later branch c
17a0: 61 6e 20 62 65 20 61 73 73 69 67 6e 65 64 20 74  an be assigned t
17b0: 68 65 20 72 65 63 79 63 6c 65 64 20 62 72 61 6e  he recycled bran
17c0: 63 68 20 6e 75 6d 62 65 72 3b 0a 09 23 20 74 68  ch number;..# th
17d0: 65 72 65 66 6f 72 65 20 62 72 61 6e 63 68 20 6e  erefore branch n
17e0: 75 6d 62 65 72 73 20 61 72 65 20 6e 6f 74 20 61  umbers are not a
17f0: 6e 20 69 6e 64 69 63 61 74 69 6f 6e 20 6f 66 20  n indication of 
1800: 63 72 65 61 74 69 6f 6e 0a 09 23 20 6f 72 64 65  creation..# orde
1810: 72 2e 29 0a 0a 09 73 65 74 20 74 6d 70 20 7b 7d  r.)...set tmp {}
1820: 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e 63 68  ..foreach branch
1830: 20 24 6d 79 62 72 61 6e 63 68 65 73 20 7b 0a 09   $mybranches {..
1840: 20 20 20 20 6c 61 70 70 65 6e 64 20 74 6d 70 20      lappend tmp 
1850: 5b 6c 69 73 74 20 24 62 72 61 6e 63 68 20 5b 24  [list $branch [$
1860: 62 72 61 6e 63 68 20 70 6f 73 69 74 69 6f 6e 5d  branch position]
1870: 5d 0a 09 7d 0a 0a 09 73 65 74 20 6d 79 62 72 61  ]..}...set mybra
1880: 6e 63 68 65 73 20 7b 7d 0a 09 66 6f 72 65 61 63  nches {}..foreac
1890: 68 20 69 74 65 6d 20 5b 6c 73 6f 72 74 20 2d 69  h item [lsort -i
18a0: 6e 64 65 78 20 31 20 2d 64 65 63 72 65 61 73 69  ndex 1 -decreasi
18b0: 6e 67 20 24 74 6d 70 5d 20 7b 0a 09 20 20 20 20  ng $tmp] {..    
18c0: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73  struct::list ass
18d0: 69 67 6e 20 24 69 74 65 6d 20 62 72 61 6e 63 68  ign $item branch
18e0: 20 70 6f 73 69 74 69 6f 6e 0a 09 20 20 20 20 6c   position..    l
18f0: 61 70 70 65 6e 64 20 6d 79 62 72 61 6e 63 68 65  append mybranche
1900: 73 20 24 62 72 61 6e 63 68 0a 09 7d 0a 09 72 65  s $branch..}..re
1910: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
1920: 6d 65 74 68 6f 64 20 6d 6f 76 65 62 72 61 6e 63  method movebranc
1930: 68 65 73 74 6f 20 7b 72 65 76 7d 20 7b 0a 09 73  hesto {rev} {..s
1940: 65 74 20 72 65 76 6c 6f 64 20 5b 24 72 65 76 20  et revlod [$rev 
1950: 6c 6f 64 5d 0a 09 66 6f 72 65 61 63 68 20 62 72  lod]..foreach br
1960: 61 6e 63 68 20 24 6d 79 62 72 61 6e 63 68 65 73  anch $mybranches
1970: 20 7b 0a 09 20 20 20 20 24 72 65 76 20 61 64 64   {..    $rev add
1980: 62 72 61 6e 63 68 20 24 62 72 61 6e 63 68 0a 09  branch $branch..
1990: 20 20 20 20 24 62 72 61 6e 63 68 20 73 65 74 70      $branch setp
19a0: 61 72 65 6e 74 20 24 72 65 76 0a 09 20 20 20 20  arent $rev..    
19b0: 24 62 72 61 6e 63 68 20 73 65 74 6c 6f 64 20 24  $branch setlod $
19c0: 72 65 76 6c 6f 64 0a 09 7d 0a 09 66 6f 72 65 61  revlod..}..forea
19d0: 63 68 20 62 72 61 6e 63 68 72 65 76 20 24 6d 79  ch branchrev $my
19e0: 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b  branchchildren {
19f0: 0a 09 20 20 20 20 24 72 65 76 20 61 64 64 63 68  ..    $rev addch
1a00: 69 6c 64 6f 6e 62 72 61 6e 63 68 20 24 62 72 61  ildonbranch $bra
1a10: 6e 63 68 72 65 76 0a 09 20 20 20 20 24 62 72 61  nchrev..    $bra
1a20: 6e 63 68 72 65 76 20 63 75 74 66 72 6f 6d 70 61  nchrev cutfrompa
1a30: 72 65 6e 74 0a 09 20 20 20 20 24 62 72 61 6e 63  rent..    $branc
1a40: 68 72 65 76 20 73 65 74 70 61 72 65 6e 74 20 24  hrev setparent $
1a50: 72 65 76 0a 09 7d 0a 09 73 65 74 20 6d 79 62 72  rev..}..set mybr
1a60: 61 6e 63 68 65 73 20 20 20 20 20 20 20 7b 7d 0a  anches       {}.
1a70: 09 73 65 74 20 6d 79 62 72 61 6e 63 68 63 68 69  .set mybranchchi
1a80: 6c 64 72 65 6e 20 7b 7d 0a 09 72 65 74 75 72 6e  ldren {}..return
1a90: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
1aa0: 6f 64 20 72 65 6d 6f 76 65 61 6c 6c 62 72 61 6e  od removeallbran
1ab0: 63 68 65 73 20 7b 7d 20 7b 0a 09 73 65 74 20 6d  ches {} {..set m
1ac0: 79 62 72 61 6e 63 68 65 73 20 20 20 20 20 20 20  ybranches       
1ad0: 7b 7d 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68  {}..set mybranch
1ae0: 63 68 69 6c 64 72 65 6e 20 7b 7d 0a 09 72 65 74  children {}..ret
1af0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
1b00: 20 54 61 67 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f   Tag linkage ___
1b10: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1b20: 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d 65 74 68  ______..    meth
1b30: 6f 64 20 61 64 64 74 61 67 20 7b 74 61 67 7d 20  od addtag {tag} 
1b40: 7b 0a 09 6c 61 70 70 65 6e 64 20 6d 79 74 61 67  {..lappend mytag
1b50: 73 20 24 74 61 67 0a 09 72 65 74 75 72 6e 0a 20  s $tag..return. 
1b60: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
1b70: 20 74 61 67 73 20 7b 7d 20 7b 20 72 65 74 75 72   tags {} { retur
1b80: 6e 20 24 6d 79 74 61 67 73 20 7d 0a 0a 20 20 20  n $mytags }..   
1b90: 20 6d 65 74 68 6f 64 20 72 65 6d 6f 76 65 61 6c   method removeal
1ba0: 6c 74 61 67 73 20 7b 7d 20 7b 0a 09 73 65 74 20  ltags {} {..set 
1bb0: 6d 79 74 61 67 73 20 7b 7d 0a 09 72 65 74 75 72  mytags {}..retur
1bc0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
1bd0: 68 6f 64 20 6d 6f 76 65 74 61 67 73 74 6f 20 7b  hod movetagsto {
1be0: 72 65 76 7d 20 7b 0a 09 73 65 74 20 72 65 76 6c  rev} {..set revl
1bf0: 6f 64 20 5b 24 72 65 76 20 6c 6f 64 5d 0a 09 66  od [$rev lod]..f
1c00: 6f 72 65 61 63 68 20 74 61 67 20 24 6d 79 74 61  oreach tag $myta
1c10: 67 73 20 7b 0a 09 20 20 20 20 24 72 65 76 20 61  gs {..    $rev a
1c20: 64 64 74 61 67 20 24 74 61 67 0a 09 20 20 20 20  ddtag $tag..    
1c30: 24 74 61 67 20 73 65 74 74 61 67 72 65 76 20 24  $tag settagrev $
1c40: 72 65 76 0a 09 20 20 20 20 24 74 61 67 20 73 65  rev..    $tag se
1c50: 74 6c 6f 64 20 24 72 65 76 6c 6f 64 0a 09 7d 0a  tlod $revlod..}.
1c60: 09 73 65 74 20 6d 79 74 61 67 73 20 7b 7d 0a 09  .set mytags {}..
1c70: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
1c80: 20 20 23 20 67 65 6e 65 72 61 6c 20 73 79 6d 62    # general symb
1c90: 6f 6c 20 6f 70 65 72 61 74 69 6f 6e 73 20 5f 5f  ol operations __
1ca0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 6d  _________..    m
1cb0: 65 74 68 6f 64 20 6d 6f 76 65 73 79 6d 62 6f 6c  ethod movesymbol
1cc0: 73 74 6f 20 7b 72 65 76 7d 20 7b 0a 09 23 20 4d  sto {rev} {..# M
1cd0: 6f 76 65 20 74 68 65 20 74 61 67 73 20 61 6e 64  ove the tags and
1ce0: 20 62 72 61 6e 63 68 65 73 20 61 74 74 61 63 68   branches attach
1cf0: 65 64 20 74 6f 20 74 68 69 73 20 72 65 76 69 73  ed to this revis
1d00: 69 6f 6e 20 74 6f 20 74 68 65 0a 09 23 20 64 65  ion to the..# de
1d10: 73 74 69 6e 61 74 69 6f 6e 20 61 6e 64 20 66 69  stination and fi
1d20: 78 20 61 6c 6c 20 70 6f 69 6e 74 65 72 73 2e 0a  x all pointers..
1d30: 0a 09 24 73 65 6c 66 20 6d 6f 76 65 74 61 67 73  ..$self movetags
1d40: 74 6f 20 20 20 20 20 24 72 65 76 0a 09 24 73 65  to     $rev..$se
1d50: 6c 66 20 6d 6f 76 65 62 72 61 6e 63 68 65 73 74  lf movebranchest
1d60: 6f 20 24 72 65 76 0a 09 72 65 74 75 72 6e 0a 20  o $rev..return. 
1d70: 20 20 20 7d 0a 0a 20 20 20 20 23 20 44 65 72 69     }..    # Deri
1d80: 76 65 64 20 73 74 75 66 66 20 5f 5f 5f 5f 5f 5f  ved stuff ______
1d90: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1da0: 5f 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65  _..    method de
1db0: 74 65 72 6d 69 6e 65 6f 70 65 72 61 74 69 6f 6e  termineoperation
1dc0: 20 7b 7d 20 7b 0a 09 23 20 4c 6f 6f 6b 20 61 74   {} {..# Look at
1dd0: 20 74 68 65 20 73 74 61 74 65 20 6f 66 20 62 6f   the state of bo
1de0: 74 68 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e  th this revision
1df0: 20 61 6e 64 20 69 74 73 20 70 61 72 65 6e 74 20   and its parent 
1e00: 74 6f 0a 09 23 20 64 65 74 65 72 6d 69 6e 65 20  to..# determine 
1e10: 74 68 65 20 74 79 70 65 20 6f 70 66 20 6f 70 65  the type opf ope
1e20: 72 61 74 69 6f 6e 20 77 68 69 63 68 20 77 61 73  ration which was
1e30: 20 70 65 72 66 6f 72 6d 65 64 20 28 61 64 64 2c   performed (add,
1e40: 0a 09 23 20 6d 6f 64 69 66 79 2c 20 64 65 6c 65  ..# modify, dele
1e50: 74 65 2c 20 6e 6f 6e 65 29 2e 0a 09 23 0a 09 23  te, none)...#..#
1e60: 20 54 68 65 20 69 6d 70 6f 72 74 61 6e 74 20 69   The important i
1e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 64 65  nformation is de
1e80: 61 64 20 76 73 20 6e 6f 74 2d 64 65 61 64 20 66  ad vs not-dead f
1e90: 6f 72 20 62 6f 74 68 2c 0a 09 23 20 67 69 76 69  or both,..# givi
1ea0: 6e 67 20 72 69 73 65 20 74 6f 20 66 6f 75 72 20  ng rise to four 
1eb0: 70 6f 73 73 69 62 6c 65 20 74 79 70 65 73 2e 0a  possible types..
1ec0: 0a 09 73 65 74 20 73 64 65 61 64 20 5b 65 78 70  ..set sdead [exp
1ed0: 72 20 7b 24 6d 79 73 74 61 74 65 20 65 71 20 22  r {$mystate eq "
1ee0: 64 65 61 64 22 7d 5d 0a 09 73 65 74 20 70 64 65  dead"}]..set pde
1ef0: 61 64 20 5b 65 78 70 72 20 7b 24 6d 79 70 61 72  ad [expr {$mypar
1f00: 65 6e 74 20 65 71 20 22 22 20 7c 7c 20 5b 24 6d  ent eq "" || [$m
1f10: 79 70 61 72 65 6e 74 20 73 74 61 74 65 5d 20 65  yparent state] e
1f20: 71 20 22 64 65 61 64 22 7d 5d 0a 0a 09 73 65 74  q "dead"}]...set
1f30: 20 6d 79 6f 70 65 72 61 74 69 6f 6e 20 24 6d 79   myoperation $my
1f40: 6f 70 73 74 61 74 65 28 5b 6c 69 73 74 20 24 70  opstate([list $p
1f50: 64 65 61 64 20 24 73 64 65 61 64 5d 29 0a 09 72  dead $sdead])..r
1f60: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
1f70: 20 6d 65 74 68 6f 64 20 6f 70 65 72 61 74 69 6f   method operatio
1f80: 6e 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  n {} { return $m
1f90: 79 6f 70 65 72 61 74 69 6f 6e 20 7d 0a 20 20 20  yoperation }.   
1fa0: 20 6d 65 74 68 6f 64 20 72 65 74 79 70 65 20 7b   method retype {
1fb0: 78 7d 20 7b 20 73 65 74 20 6d 79 6f 70 65 72 61  x} { set myopera
1fc0: 74 69 6f 6e 20 24 78 20 3b 20 72 65 74 75 72 6e  tion $x ; return
1fd0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 69   }..    method i
1fe0: 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68  sondefaultbranch
1ff0: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20      {} { return 
2000: 24 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74 62 72  $myisondefaultbr
2010: 61 6e 63 68 20 7d 0a 0a 20 20 20 20 6d 65 74 68  anch }..    meth
2020: 6f 64 20 73 65 74 6f 6e 64 65 66 61 75 6c 74 62  od setondefaultb
2030: 72 61 6e 63 68 20 20 20 7b 78 7d 20 7b 20 73 65  ranch   {x} { se
2040: 74 20 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74 62  t myisondefaultb
2050: 72 61 6e 63 68 20 24 78 20 3b 20 72 65 74 75 72  ranch $x ; retur
2060: 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  n }..    method 
2070: 73 65 74 64 65 66 61 75 6c 74 62 72 61 6e 63 68  setdefaultbranch
2080: 63 68 69 6c 64 20 20 7b 72 65 76 7d 20 7b 20 73  child  {rev} { s
2090: 65 74 20 6d 79 64 62 63 68 69 6c 64 20 24 72 65  et mydbchild $re
20a0: 76 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20 20 20  v ; return }.   
20b0: 20 6d 65 74 68 6f 64 20 73 65 74 64 65 66 61 75   method setdefau
20c0: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 7b  ltbranchparent {
20d0: 72 65 76 7d 20 7b 0a 09 73 65 74 20 6d 79 64 62  rev} {..set mydb
20e0: 70 61 72 65 6e 74 20 24 72 65 76 0a 0a 09 23 20  parent $rev...# 
20f0: 52 65 74 79 70 65 20 74 68 65 20 72 65 76 69 73  Retype the revis
2100: 69 6f 6e 20 28 6d 61 79 20 63 68 61 6e 67 65 20  ion (may change 
2110: 66 72 6f 6d 20 27 61 64 64 27 20 74 6f 20 27 63  from 'add' to 'c
2120: 68 61 6e 67 65 27 29 2e 0a 0a 09 73 65 74 20 73  hange')....set s
2130: 64 65 61 64 20 5b 65 78 70 72 20 7b 24 6d 79 6f  dead [expr {$myo
2140: 70 65 72 61 74 69 6f 6e 20 20 20 20 20 6e 65 20  peration     ne 
2150: 22 63 68 61 6e 67 65 22 7d 5d 0a 09 73 65 74 20  "change"}]..set 
2160: 70 64 65 61 64 20 5b 65 78 70 72 20 7b 5b 24 72  pdead [expr {[$r
2170: 65 76 20 6f 70 65 72 61 74 69 6f 6e 5d 20 6e 65  ev operation] ne
2180: 20 22 63 68 61 6e 67 65 22 7d 5d 0a 09 73 65 74   "change"}]..set
2190: 20 6d 79 6f 70 65 72 61 74 69 6f 6e 20 24 6d 79   myoperation $my
21a0: 6f 70 73 74 61 74 65 28 5b 6c 69 73 74 20 24 70  opstate([list $p
21b0: 64 65 61 64 20 24 73 64 65 61 64 5d 29 0a 09 72  dead $sdead])..r
21c0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
21d0: 20 6d 65 74 68 6f 64 20 63 75 74 64 65 66 61 75   method cutdefau
21e0: 6c 74 62 72 61 6e 63 68 70 61 72 65 6e 74 20 7b  ltbranchparent {
21f0: 7d 20 7b 20 73 65 74 20 6d 79 64 62 70 61 72 65  } { set mydbpare
2200: 6e 74 20 22 22 20 3b 20 72 65 74 75 72 6e 20 7d  nt "" ; return }
2210: 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 75 74 64  .    method cutd
2220: 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68 69 6c  efaultbranchchil
2230: 64 20 20 7b 7d 20 7b 20 73 65 74 20 6d 79 64 62  d  {} { set mydb
2240: 63 68 69 6c 64 20 20 22 22 20 3b 20 72 65 74 75  child  "" ; retu
2250: 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64  rn }..    method
2260: 20 64 65 66 61 75 6c 74 62 72 61 6e 63 68 63 68   defaultbranchch
2270: 69 6c 64 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e  ild  {} { return
2280: 20 24 6d 79 64 62 63 68 69 6c 64 20 7d 0a 20 20   $mydbchild }.  
2290: 20 20 6d 65 74 68 6f 64 20 64 65 66 61 75 6c 74    method default
22a0: 62 72 61 6e 63 68 70 61 72 65 6e 74 20 7b 7d 20  branchparent {} 
22b0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 64 62 70 61  { return $mydbpa
22c0: 72 65 6e 74 20 7d 0a 0a 20 20 20 20 6d 65 74 68  rent }..    meth
22d0: 6f 64 20 68 61 73 64 65 66 61 75 6c 74 62 72 61  od hasdefaultbra
22e0: 6e 63 68 63 68 69 6c 64 20 20 7b 7d 20 7b 20 72  nchchild  {} { r
22f0: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79  eturn [expr {$my
2300: 64 62 63 68 69 6c 64 20 20 6e 65 20 22 22 7d 5d  dbchild  ne ""}]
2310: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 68 61   }.    method ha
2320: 73 64 65 66 61 75 6c 74 62 72 61 6e 63 68 70 61  sdefaultbranchpa
2330: 72 65 6e 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e  rent {} { return
2340: 20 5b 65 78 70 72 20 7b 24 6d 79 64 62 70 61 72   [expr {$mydbpar
2350: 65 6e 74 20 6e 65 20 22 22 7d 5d 20 7d 0a 0a 20  ent ne ""}] }.. 
2360: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
2370: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
2380: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
2390: 23 20 54 79 70 65 20 41 50 49 0a 0a 20 20 20 20  # Type API..    
23a0: 74 79 70 65 6d 65 74 68 6f 64 20 69 73 74 72 75  typemethod istru
23b0: 6e 6b 72 65 76 6e 72 20 7b 72 65 76 6e 72 7d 20  nkrevnr {revnr} 
23c0: 7b 0a 09 72 65 74 75 72 6e 20 5b 65 78 70 72 20  {..return [expr 
23d0: 7b 5b 6c 6c 65 6e 67 74 68 20 5b 73 70 6c 69 74  {[llength [split
23e0: 20 24 72 65 76 6e 72 20 2e 5d 5d 20 3d 3d 20 32   $revnr .]] == 2
23f0: 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79  }].    }..    ty
2400: 70 65 6d 65 74 68 6f 64 20 69 73 62 72 61 6e 63  pemethod isbranc
2410: 68 72 65 76 6e 72 20 7b 72 65 76 6e 72 20 5f 20  hrevnr {revnr _ 
2420: 62 76 7d 20 7b 0a 09 69 66 20 7b 5b 72 65 67 65  bv} {..if {[rege
2430: 78 70 20 24 6d 79 62 72 61 6e 63 68 70 61 74 74  xp $mybranchpatt
2440: 65 72 6e 20 24 72 65 76 6e 72 20 2d 3e 20 68 65  ern $revnr -> he
2450: 61 64 20 74 61 69 6c 5d 7d 20 7b 0a 09 20 20 20  ad tail]} {..   
2460: 20 75 70 76 61 72 20 31 20 24 62 76 20 62 72 61   upvar 1 $bv bra
2470: 6e 63 68 6e 72 0a 09 20 20 20 20 73 65 74 20 62  nchnr..    set b
2480: 72 61 6e 63 68 6e 72 20 24 7b 68 65 61 64 7d 24  ranchnr ${head}$
2490: 74 61 69 6c 0a 09 20 20 20 20 72 65 74 75 72 6e  tail..    return
24a0: 20 31 0a 09 7d 0a 09 72 65 74 75 72 6e 20 30 0a   1..}..return 0.
24b0: 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d      }..    typem
24c0: 65 74 68 6f 64 20 32 62 72 61 6e 63 68 6e 72 20  ethod 2branchnr 
24d0: 7b 72 65 76 6e 72 7d 20 7b 0a 09 23 20 49 6e 70  {revnr} {..# Inp
24e0: 75 74 20 69 73 20 61 20 62 72 61 6e 63 68 20 72  ut is a branch r
24f0: 65 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 2c 20  evision number, 
2500: 69 2e 65 2e 20 61 20 72 65 76 69 73 69 6f 6e 20  i.e. a revision 
2510: 6e 75 6d 62 65 72 0a 09 23 20 77 69 74 68 20 61  number..# with a
2520: 6e 20 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f 66  n even number of
2530: 20 63 6f 6d 70 6f 6e 65 6e 74 73 3b 20 66 6f 72   components; for
2540: 20 65 78 61 6d 70 6c 65 20 27 32 2e 39 2e 32 2e   example '2.9.2.
2550: 31 27 0a 09 23 20 28 6e 65 76 65 72 20 27 32 2e  1'..# (never '2.
2560: 39 2e 32 27 20 6e 6f 72 20 27 32 2e 39 2e 30 2e  9.2' nor '2.9.0.
2570: 32 27 29 2e 20 20 54 68 65 20 72 65 74 75 72 6e  2').  The return
2580: 20 76 61 6c 75 65 20 69 73 20 74 68 65 0a 09 23   value is the..#
2590: 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72 20 28   branch number (
25a0: 66 6f 72 20 65 78 61 6d 70 6c 65 2c 20 27 32 2e  for example, '2.
25b0: 39 2e 32 27 29 2e 20 20 46 6f 72 20 74 72 75 6e  9.2').  For trun
25c0: 6b 20 72 65 76 69 73 69 6f 6e 73 2c 0a 09 23 20  k revisions,..# 
25d0: 6c 69 6b 65 20 27 33 2e 34 27 2c 20 77 65 20 72  like '3.4', we r
25e0: 65 74 75 72 6e 20 74 68 65 20 65 6d 70 74 79 20  eturn the empty 
25f0: 73 74 72 69 6e 67 2e 0a 0a 09 69 66 20 7b 5b 24  string....if {[$
2600: 74 79 70 65 20 69 73 74 72 75 6e 6b 72 65 76 6e  type istrunkrevn
2610: 72 20 24 72 65 76 6e 72 5d 7d 20 7b 0a 09 20 20  r $revnr]} {..  
2620: 20 20 72 65 74 75 72 6e 20 22 22 0a 09 7d 0a 09    return ""..}..
2630: 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 20 5b 6c 72  return [join [lr
2640: 61 6e 67 65 20 5b 73 70 6c 69 74 20 24 72 65 76  ange [split $rev
2650: 6e 72 20 2e 5d 20 30 20 65 6e 64 2d 31 5d 20 2e  nr .] 0 end-1] .
2660: 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70  ].    }..    typ
2670: 65 6d 65 74 68 6f 64 20 32 62 72 61 6e 63 68 70  emethod 2branchp
2680: 61 72 65 6e 74 72 65 76 6e 72 20 7b 62 72 61 6e  arentrevnr {bran
2690: 63 68 6e 72 7d 20 7b 0a 09 23 20 43 68 6f 70 20  chnr} {..# Chop 
26a0: 74 68 65 20 6c 61 73 74 20 73 65 67 6d 65 6e 74  the last segment
26b0: 20 6f 66 66 0a 09 72 65 74 75 72 6e 20 5b 6a 6f   off..return [jo
26c0: 69 6e 20 5b 6c 72 61 6e 67 65 20 5b 73 70 6c 69  in [lrange [spli
26d0: 74 20 24 62 72 61 6e 63 68 6e 72 20 2e 5d 20 30  t $branchnr .] 0
26e0: 20 65 6e 64 2d 31 5d 20 2e 5d 0a 20 20 20 20 7d   end-1] .].    }
26f0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
2700: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
2710: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 20  #############.. 
2720: 20 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73     method persis
2730: 74 20 7b 7d 20 7b 0a 09 73 65 74 20 66 69 64 20  t {} {..set fid 
2740: 5b 24 6d 79 66 69 6c 65 20 69 64 5d 0a 09 73 65  [$myfile id]..se
2750: 74 20 6c 6f 64 20 5b 24 6d 79 6c 6f 64 20 69 64  t lod [$mylod id
2760: 5d 0a 09 73 65 74 20 6f 70 20 20 24 6d 79 6f 70  ]..set op  $myop
2770: 63 6f 64 65 28 24 6d 79 6f 70 65 72 61 74 69 6f  code($myoperatio
2780: 6e 29 0a 09 73 65 74 20 69 64 62 20 24 6d 79 69  n)..set idb $myi
2790: 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68  sondefaultbranch
27a0: 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 61 70 20 40  ...lappend map @
27b0: 50 40 20 5b 65 78 70 72 20 7b 20 28 24 6d 79 70  P@ [expr { ($myp
27c0: 61 72 65 6e 74 20 20 20 20 20 20 20 65 71 20 22  arent       eq "
27d0: 22 29 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b 24  ") ? "NULL" : [$
27e0: 6d 79 70 61 72 65 6e 74 20 20 20 20 20 20 20 69  myparent       i
27f0: 64 5d 20 7d 5d 0a 09 6c 61 70 70 65 6e 64 20 6d  d] }]..lappend m
2800: 61 70 20 40 43 40 20 5b 65 78 70 72 20 7b 20 28  ap @C@ [expr { (
2810: 24 6d 79 63 68 69 6c 64 20 20 20 20 20 20 20 20  $mychild        
2820: 65 71 20 22 22 29 20 3f 20 22 4e 55 4c 4c 22 20  eq "") ? "NULL" 
2830: 3a 20 5b 24 6d 79 63 68 69 6c 64 20 20 20 20 20  : [$mychild     
2840: 20 20 20 69 64 5d 20 7d 5d 0a 09 6c 61 70 70 65     id] }]..lappe
2850: 6e 64 20 6d 61 70 20 40 44 50 20 5b 65 78 70 72  nd map @DP [expr
2860: 20 7b 20 28 24 6d 79 64 62 70 61 72 65 6e 74 20   { ($mydbparent 
2870: 20 20 20 20 65 71 20 22 22 29 20 3f 20 22 4e 55      eq "") ? "NU
2880: 4c 4c 22 20 3a 20 5b 24 6d 79 64 62 70 61 72 65  LL" : [$mydbpare
2890: 6e 74 20 20 20 20 20 69 64 5d 20 7d 5d 0a 09 6c  nt     id] }]..l
28a0: 61 70 70 65 6e 64 20 6d 61 70 20 40 44 43 20 5b  append map @DC [
28b0: 65 78 70 72 20 7b 20 28 24 6d 79 64 62 63 68 69  expr { ($mydbchi
28c0: 6c 64 20 20 20 20 20 20 65 71 20 22 22 29 20 3f  ld      eq "") ?
28d0: 20 22 4e 55 4c 4c 22 20 3a 20 5b 24 6d 79 64 62   "NULL" : [$mydb
28e0: 63 68 69 6c 64 20 20 20 20 20 20 69 64 5d 20 7d  child      id] }
28f0: 5d 0a 09 6c 61 70 70 65 6e 64 20 6d 61 70 20 40  ]..lappend map @
2900: 42 50 20 5b 65 78 70 72 20 7b 20 28 24 6d 79 70  BP [expr { ($myp
2910: 61 72 65 6e 74 62 72 61 6e 63 68 20 65 71 20 22  arentbranch eq "
2920: 22 29 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b 24  ") ? "NULL" : [$
2930: 6d 79 70 61 72 65 6e 74 62 72 61 6e 63 68 20 69  myparentbranch i
2940: 64 5d 20 7d 5d 0a 0a 09 73 65 74 20 63 6d 64 20  d] }]...set cmd 
2950: 7b 0a 09 20 20 20 20 49 4e 53 45 52 54 20 49 4e  {..    INSERT IN
2960: 54 4f 20 72 65 76 69 73 69 6f 6e 20 28 20 72 69  TO revision ( ri
2970: 64 2c 20 20 20 66 69 64 2c 20 20 72 65 76 2c 20  d,   fid,  rev, 
2980: 20 20 20 20 20 6c 6f 64 2c 20 70 61 72 65 6e 74       lod, parent
2990: 2c 20 63 68 69 6c 64 2c 20 20 69 73 64 65 66 61  , child,  isdefa
29a0: 75 6c 74 2c 20 64 62 70 61 72 65 6e 74 2c 20 64  ult, dbparent, d
29b0: 62 63 68 69 6c 64 2c 20 62 70 61 72 65 6e 74 2c  bchild, bparent,
29c0: 20 20 6f 70 2c 20 20 64 61 74 65 2c 20 20 20 20    op,  date,    
29d0: 73 74 61 74 65 2c 20 20 20 20 6d 69 64 29 0a 09  state,    mid)..
29e0: 20 20 20 20 56 41 4c 55 45 53 20 20 20 20 20 20      VALUES      
29f0: 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 64 2c           ($myid,
2a00: 20 24 66 69 64 2c 20 24 6d 79 72 65 76 6e 72 2c   $fid, $myrevnr,
2a10: 20 24 6c 6f 64 2c 20 40 50 40 2c 20 20 20 20 40   $lod, @P@,    @
2a20: 43 40 2c 20 20 20 24 69 64 62 2c 20 20 20 20 20  C@,   $idb,     
2a30: 20 20 40 44 50 2c 20 20 20 20 20 20 40 44 43 2c    @DP,      @DC,
2a40: 20 20 20 20 20 40 42 50 20 20 20 20 2c 20 24 6f       @BP    , $o
2a50: 70 2c 20 24 6d 79 64 61 74 65 2c 20 24 6d 79 73  p, $mydate, $mys
2a60: 74 61 74 65 2c 20 24 6d 79 6d 65 74 61 69 64 29  tate, $mymetaid)
2a70: 3b 0a 09 7d 0a 0a 09 73 74 61 74 65 20 74 72 61  ;..}...state tra
2a80: 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20  nsaction {..    
2a90: 73 74 61 74 65 20 72 75 6e 20 5b 73 74 72 69 6e  state run [strin
2aa0: 67 20 6d 61 70 20 24 6d 61 70 20 24 63 6d 64 5d  g map $map $cmd]
2ab0: 0a 0a 09 20 20 20 20 23 20 41 6e 64 20 74 68 65  ...    # And the
2ac0: 20 62 72 61 6e 63 68 20 63 68 69 6c 64 72 65 6e   branch children
2ad0: 20 61 73 20 77 65 6c 6c 2c 20 66 6f 72 20 70 61   as well, for pa
2ae0: 73 73 20 35 2e 0a 09 20 20 20 20 66 6f 72 65 61  ss 5...    forea
2af0: 63 68 20 62 63 20 24 6d 79 62 72 61 6e 63 68 63  ch bc $mybranchc
2b00: 68 69 6c 64 72 65 6e 20 7b 0a 09 09 73 65 74 20  hildren {...set 
2b10: 62 63 69 64 20 5b 24 62 63 20 69 64 5d 0a 09 09  bcid [$bc id]...
2b20: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 20 20  state run {...  
2b30: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 72 65    INSERT INTO re
2b40: 76 69 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c  visionbranchchil
2b50: 64 72 65 6e 20 28 72 69 64 2c 20 20 20 62 72 69  dren (rid,   bri
2b60: 64 29 0a 09 09 20 20 20 20 56 41 4c 55 45 53 20  d)...    VALUES 
2b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 28 24 6d 79              ($my
2b90: 69 64 2c 20 24 62 63 69 64 29 3b 0a 09 09 7d 0a  id, $bcid);...}.
2ba0: 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72  .    }..}..retur
2bb0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23  n.    }..    # #
2bc0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
2bd0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
2be0: 23 23 23 23 0a 20 20 20 20 23 23 20 53 74 61 74  ####.    ## Stat
2bf0: 65 0a 0a 20 20 20 20 23 20 50 65 72 73 69 73 74  e..    # Persist
2c00: 65 6e 74 3a 20 6d 79 69 64 20 20 20 20 20 20 20  ent: myid       
2c10: 20 20 20 20 20 20 20 20 20 2d 20 72 65 76 69 73           - revis
2c20: 69 6f 6e 2e 72 69 64 0a 20 20 20 20 23 20 20 20  ion.rid.    #   
2c30: 20 20 20 20 20 20 20 20 20 20 6d 79 66 69 6c 65            myfile
2c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20                - 
2c50: 72 65 76 69 73 69 6f 6e 2e 66 69 64 0a 20 20 20  revision.fid.   
2c60: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6d   #             m
2c70: 79 6c 6f 64 20 20 20 20 20 20 20 20 20 20 20 20  ylod            
2c80: 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 6c 6f     - revision.lo
2c90: 64 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20  d.    #         
2ca0: 20 20 20 20 6d 79 72 65 76 6e 72 20 20 20 20 20      myrevnr     
2cb0: 20 20 20 20 20 20 20 20 2d 20 72 65 76 69 73 69          - revisi
2cc0: 6f 6e 2e 72 65 76 0a 20 20 20 20 23 20 20 20 20  on.rev.    #    
2cd0: 20 20 20 20 20 20 20 20 20 6d 79 64 61 74 65 20           mydate 
2ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20 72               - r
2cf0: 65 76 69 73 69 6f 6e 2e 64 61 74 65 0a 20 20 20  evision.date.   
2d00: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6d   #             m
2d10: 79 73 74 61 74 65 20 20 20 20 20 20 20 20 20 20  ystate          
2d20: 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 73 74     - revision.st
2d30: 61 74 65 0a 20 20 20 20 23 20 20 20 20 20 20 20  ate.    #       
2d40: 20 20 20 20 20 20 6d 79 6d 65 74 61 69 64 20 20        mymetaid  
2d50: 20 20 20 20 20 20 20 20 20 20 2d 20 72 65 76 69            - revi
2d60: 73 69 6f 6e 2e 6d 69 64 0a 20 20 20 20 23 20 20  sion.mid.    #  
2d70: 20 20 20 20 20 20 20 20 20 20 20 6d 79 74 65 78             mytex
2d80: 74 7b 73 74 61 72 74 2c 65 6e 64 7d 20 20 20 2d  t{start,end}   -
2d90: 20 72 65 76 69 73 69 6f 6e 2e 7b 63 73 2c 63 65   revision.{cs,ce
2da0: 7d 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20  }.    #         
2db0: 20 20 20 20 6d 79 70 61 72 65 6e 74 20 20 20 20      myparent    
2dc0: 20 20 20 20 20 20 20 20 2d 20 72 65 76 69 73 69          - revisi
2dd0: 6f 6e 2e 70 61 72 65 6e 74 0a 20 20 20 20 23 20  on.parent.    # 
2de0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 79 63 68              mych
2df0: 69 6c 64 20 20 20 20 20 20 20 20 20 20 20 20 20  ild             
2e00: 2d 20 72 65 76 69 73 69 6f 6e 2e 63 68 69 6c 64  - revision.child
2e10: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
2e20: 20 20 20 6d 79 70 61 72 65 6e 74 62 72 61 6e 63     myparentbranc
2e30: 68 20 20 20 20 20 20 2d 20 72 65 76 69 73 69 6f  h      - revisio
2e40: 6e 2e 62 70 61 72 65 6e 74 0a 20 20 20 20 23 20  n.bparent.    # 
2e50: 20 20 20 20 20 20 20 20 20 20 20 20 6d 79 6f 70              myop
2e60: 65 72 61 74 69 6f 6e 20 20 20 20 20 20 20 20 20  eration         
2e70: 2d 20 72 65 76 69 73 69 6f 6e 2e 6f 70 0a 20 20  - revision.op.  
2e80: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
2e90: 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61  myisondefaultbra
2ea0: 6e 63 68 20 2d 20 72 65 76 69 73 69 6f 6e 2e 69  nch - revision.i
2eb0: 73 64 65 66 61 75 6c 74 0a 20 20 20 20 23 20 20  sdefault.    #  
2ec0: 20 20 20 20 20 20 20 20 20 20 20 6d 79 64 62 70             mydbp
2ed0: 61 72 65 6e 74 20 20 20 20 20 20 20 20 20 20 2d  arent          -
2ee0: 20 72 65 76 69 73 69 6f 6e 2e 64 62 70 61 72 65   revision.dbpare
2ef0: 6e 74 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  nt.    #        
2f00: 20 20 20 20 20 6d 79 64 62 63 68 69 6c 64 20 20       mydbchild  
2f10: 20 20 20 20 20 20 20 20 20 2d 20 72 65 76 69 73           - revis
2f20: 69 6f 6e 2e 64 62 63 68 69 6c 64 0a 0a 20 20 20  ion.dbchild..   
2f30: 20 6d 65 74 68 6f 64 20 44 55 4d 50 20 7b 6c 61   method DUMP {la
2f40: 62 65 6c 7d 20 7b 0a 09 70 75 74 73 20 22 24 6c  bel} {..puts "$l
2f50: 61 62 65 6c 20 3d 20 24 73 65 6c 66 20 3c 24 6d  abel = $self <$m
2f60: 79 72 65 76 6e 72 3e 20 28 4e 54 44 42 3d 24 6d  yrevnr> (NTDB=$m
2f70: 79 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61 6e  yisondefaultbran
2f80: 63 68 29 20 5c 7b 22 0a 09 70 75 74 73 20 22 5c  ch) \{"..puts "\
2f90: 74 50 5c 74 24 6d 79 70 61 72 65 6e 74 22 0a 09  tP\t$myparent"..
2fa0: 70 75 74 73 20 22 5c 74 43 5c 74 24 6d 79 63 68  puts "\tC\t$mych
2fb0: 69 6c 64 22 0a 09 70 75 74 73 20 22 5c 74 50 42  ild"..puts "\tPB
2fc0: 5c 74 24 6d 79 70 61 72 65 6e 74 62 72 61 6e 63  \t$myparentbranc
2fd0: 68 22 0a 09 70 75 74 73 20 22 5c 74 64 62 50 5c  h"..puts "\tdbP\
2fe0: 74 24 6d 79 64 62 70 61 72 65 6e 74 22 0a 09 70  t$mydbparent"..p
2ff0: 75 74 73 20 22 5c 74 64 62 43 5c 74 24 6d 79 64  uts "\tdbC\t$myd
3000: 62 63 68 69 6c 64 22 0a 09 66 6f 72 65 61 63 68  bchild"..foreach
3010: 20 62 20 24 6d 79 62 72 61 6e 63 68 65 73 20 7b   b $mybranches {
3020: 0a 09 20 20 20 20 70 75 74 73 20 5c 74 5c 74 42  ..    puts \t\tB
3030: 5c 74 24 62 0a 09 7d 0a 09 66 6f 72 65 61 63 68  \t$b..}..foreach
3040: 20 62 20 24 6d 79 62 72 61 6e 63 68 63 68 69 6c   b $mybranchchil
3050: 64 72 65 6e 20 7b 0a 09 20 20 20 20 70 75 74 73  dren {..    puts
3060: 20 5c 74 5c 74 42 43 5c 74 24 62 0a 09 7d 0a 09   \t\tBC\t$b..}..
3070: 70 75 74 73 20 22 5c 7d 22 0a 09 72 65 74 75 72  puts "\}"..retur
3080: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70  n.    }..    typ
3090: 65 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e  evariable mybran
30a0: 63 68 70 61 74 74 65 72 6e 20 7b 5e 28 28 3f 3a  chpattern {^((?:
30b0: 5c 64 2b 5c 2e 5c 64 2b 5c 2e 29 2b 29 28 3f 3a  \d+\.\d+\.)+)(?:
30c0: 30 5c 2e 29 3f 28 5c 64 2b 29 24 7d 0a 20 20 20  0\.)?(\d+)$}.   
30d0: 20 23 20 46 69 72 73 74 20 61 20 6e 6f 6e 7a 65   # First a nonze
30e0: 72 6f 20 65 76 65 6e 20 6e 75 6d 62 65 72 20 6f  ro even number o
30f0: 66 20 64 69 67 69 74 20 67 72 6f 75 70 73 20 77  f digit groups w
3100: 69 74 68 20 74 72 61 69 6c 69 6e 67 20 64 6f 74  ith trailing dot
3110: 0a 20 20 20 20 23 20 43 56 53 20 74 68 65 6e 20  .    # CVS then 
3120: 73 74 69 63 6b 73 20 61 6e 20 65 78 74 72 61 20  sticks an extra 
3130: 30 20 69 6e 20 68 65 72 65 3b 20 52 43 53 20 64  0 in here; RCS d
3140: 6f 65 73 20 6e 6f 74 2e 0a 20 20 20 20 23 20 41  oes not..    # A
3150: 6e 64 20 74 68 65 20 6c 61 73 74 20 64 69 67 69  nd the last digi
3160: 74 20 67 72 6f 75 70 2e 0a 0a 20 20 20 20 74 79  t group...    ty
3170: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 69 64 63  pevariable myidc
3180: 6f 75 6e 74 65 72 20 30 20 3b 20 23 20 43 6f 75  ounter 0 ; # Cou
3190: 6e 74 65 72 20 66 6f 72 20 72 65 76 69 73 69 6f  nter for revisio
31a0: 6e 20 69 64 73 2e 0a 20 20 20 20 76 61 72 69 61  n ids..    varia
31b0: 62 6c 65 20 6d 79 69 64 20 20 20 20 20 20 20 20  ble myid        
31c0: 20 20 20 7b 7d 20 3b 20 23 20 52 65 76 69 73 69     {} ; # Revisi
31d0: 6f 6e 20 69 64 2e 0a 0a 20 20 20 20 76 61 72 69  on id...    vari
31e0: 61 62 6c 65 20 6d 79 72 65 76 6e 72 20 20 20 20  able myrevnr    
31f0: 20 7b 7d 20 3b 20 23 20 52 65 76 69 73 69 6f 6e   {} ; # Revision
3200: 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 72   number of the r
3210: 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72  evision..    var
3220: 69 61 62 6c 65 20 6d 79 64 61 74 65 20 20 20 20  iable mydate    
3230: 20 20 7b 7d 20 3b 20 23 20 54 69 6d 65 73 74 61    {} ; # Timesta
3240: 6d 70 20 6f 66 20 74 68 65 20 72 65 76 69 73 69  mp of the revisi
3250: 6f 6e 2c 20 73 65 63 6f 6e 64 73 20 73 69 6e 63  on, seconds sinc
3260: 65 20 65 70 6f 63 68 0a 20 20 20 20 76 61 72 69  e epoch.    vari
3270: 61 62 6c 65 20 6d 79 6f 72 69 67 64 61 74 65 20  able myorigdate 
3280: 20 7b 7d 20 3b 20 23 20 4f 72 69 67 69 6e 61 6c   {} ; # Original
3290: 20 75 6e 6d 6f 64 69 66 69 65 64 20 74 69 6d 65   unmodified time
32a0: 73 74 61 6d 70 2e 0a 20 20 20 20 76 61 72 69 61  stamp..    varia
32b0: 62 6c 65 20 6d 79 73 74 61 74 65 20 20 20 20 20  ble mystate     
32c0: 7b 7d 20 3b 20 23 20 53 74 61 74 65 20 6f 66 20  {} ; # State of 
32d0: 74 68 65 20 72 65 76 69 73 69 6f 6e 2e 0a 20 20  the revision..  
32e0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 66 69 6c    variable myfil
32f0: 65 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65  e      {} ; # Re
3300: 66 20 74 6f 20 74 68 65 20 66 69 6c 65 20 6f 62  f to the file ob
3310: 6a 65 63 74 20 74 68 65 20 72 65 76 69 73 69 6f  ject the revisio
3320: 6e 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 0a 20 20  n belongs to..  
3330: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 65 78    variable mytex
3340: 74 73 74 61 72 74 20 7b 7d 20 3b 20 23 20 53 74  tstart {} ; # St
3350: 61 72 74 20 6f 66 20 74 68 65 20 72 61 6e 67 65  art of the range
3360: 20 6f 66 20 74 68 65 20 28 64 65 6c 74 61 29 20   of the (delta) 
3370: 74 65 78 74 0a 09 09 09 20 20 20 20 20 20 23 20  text....      # 
3380: 66 6f 72 20 74 68 69 73 20 72 65 76 69 73 69 6f  for this revisio
3390: 6e 20 69 6e 20 74 68 65 20 66 69 6c 65 2e 0a 20  n in the file.. 
33a0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 65     variable myte
33b0: 78 74 65 6e 64 20 20 20 7b 7d 20 3b 20 23 20 45  xtend   {} ; # E
33c0: 6e 64 20 6f 66 20 74 68 65 20 72 61 6e 67 65 20  nd of the range 
33d0: 6f 66 20 74 68 65 20 28 64 65 6c 74 61 29 20 74  of the (delta) t
33e0: 65 78 74 0a 09 09 09 20 20 20 20 20 20 23 20 66  ext....      # f
33f0: 6f 72 20 74 68 69 73 20 72 65 76 69 73 69 6f 6e  or this revision
3400: 20 69 6e 20 74 68 65 20 66 69 6c 65 2e 0a 20 20   in the file..  
3410: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6d 65 74    variable mymet
3420: 61 69 64 20 20 20 20 7b 7d 20 3b 20 23 20 49 64  aid    {} ; # Id
3430: 20 6f 66 20 74 68 65 20 6d 65 74 61 20 64 61 74   of the meta dat
3440: 61 20 67 72 6f 75 70 20 74 68 65 20 72 65 76 69  a group the revi
3450: 73 69 6f 6e 0a 09 09 09 20 20 20 20 20 20 23 20  sion....      # 
3460: 62 65 6c 6f 6e 67 73 20 74 6f 2e 20 54 68 69 73  belongs to. This
3470: 20 69 73 20 6c 61 74 65 72 20 75 73 65 64 20 74   is later used t
3480: 6f 20 70 75 74 0a 09 09 09 20 20 20 20 20 20 23  o put....      #
3490: 20 74 68 65 20 66 69 6c 65 20 72 65 76 69 73 69   the file revisi
34a0: 6f 6e 73 20 69 6e 74 6f 20 70 72 65 6c 69 6d 69  ons into prelimi
34b0: 6e 61 72 79 0a 09 09 09 20 20 20 20 20 20 23 20  nary....      # 
34c0: 63 68 61 6e 67 65 73 65 74 73 20 28 61 6b 61 20  changesets (aka 
34d0: 70 72 6f 6a 65 63 74 20 72 65 76 69 73 69 6f 6e  project revision
34e0: 73 29 2e 0a 09 09 09 20 20 20 20 20 20 23 20 54  s).....      # T
34f0: 68 69 73 20 69 64 20 65 6e 63 6f 64 65 73 20 34  his id encodes 4
3500: 20 70 69 65 63 65 73 20 6f 66 20 64 61 74 61 2c   pieces of data,
3510: 0a 09 09 09 20 20 20 20 20 20 23 20 6e 61 6d 65  ....      # name
3520: 6c 79 3a 20 74 68 65 20 70 72 6f 6a 65 63 74 20  ly: the project 
3530: 61 6e 64 20 62 72 61 6e 63 68 20 74 68 65 0a 09  and branch the..
3540: 09 09 20 20 20 20 20 20 23 20 72 65 76 69 73 69  ..      # revisi
3550: 6f 6e 20 77 61 73 20 63 6f 6d 6d 69 74 74 65 64  on was committed
3560: 20 74 6f 2c 20 74 68 65 20 61 75 74 68 6f 72 0a   to, the author.
3570: 09 09 09 20 20 20 20 20 20 23 20 77 68 6f 20 64  ...      # who d
3580: 69 64 20 74 68 65 20 63 6f 6d 6d 69 74 2c 20 61  id the commit, a
3590: 6e 64 20 74 68 65 20 6d 65 73 73 61 67 65 0a 09  nd the message..
35a0: 09 09 20 20 20 20 20 20 23 20 75 73 65 64 2e 0a  ..      # used..
35b0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6c      variable myl
35c0: 6f 64 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20  od       {} ; # 
35d0: 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65  Reference to the
35e0: 20 6c 69 6e 65 2d 6f 66 2d 64 65 76 65 6c 6f 70   line-of-develop
35f0: 6d 65 6e 74 0a 09 09 09 20 20 20 20 20 20 23 20  ment....      # 
3600: 6f 62 6a 65 63 74 20 74 68 65 20 72 65 76 69 73  object the revis
3610: 69 6f 6e 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 20  ion belongs to. 
3620: 41 6e 0a 09 09 09 20 20 20 20 20 20 23 20 61 6c  An....      # al
3630: 74 65 72 6e 61 74 69 76 65 20 69 64 69 6f 6d 20  ternative idiom 
3640: 77 6f 75 6c 64 20 62 65 20 74 6f 20 63 61 6c 6c  would be to call
3650: 20 69 74 0a 09 09 09 20 20 20 20 20 20 23 20 74   it....      # t
3660: 68 65 20 62 72 61 6e 63 68 20 74 68 65 20 72 65  he branch the re
3670: 76 69 73 69 6f 6e 20 69 73 20 6f 6e 2e 20 54 68  vision is on. Th
3680: 69 73 0a 09 09 09 20 20 20 20 20 20 23 20 72 65  is....      # re
3690: 66 65 72 65 6e 63 65 20 69 73 20 74 6f 20 65 69  ference is to ei
36a0: 74 68 65 72 20 70 72 6f 6a 65 63 74 2d 6c 65 76  ther project-lev
36b0: 65 6c 0a 09 09 09 20 20 20 20 20 20 23 20 74 72  el....      # tr
36c0: 75 6e 6b 20 6f 72 20 66 69 6c 65 2d 6c 65 76 65  unk or file-leve
36d0: 6c 20 73 79 6d 62 6f 6c 2e 0a 0a 20 20 20 20 23  l symbol...    #
36e0: 20 42 61 73 69 63 20 70 61 72 65 6e 74 2f 63 68   Basic parent/ch
36f0: 69 6c 64 20 6c 69 6e 6b 61 67 65 20 28 6c 69 6e  ild linkage (lin
3700: 65 73 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e  es of developmen
3710: 74 29 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65  t)..    variable
3720: 20 6d 79 70 61 72 65 6e 74 20 7b 7d 20 3b 20 23   myparent {} ; #
3730: 20 52 65 66 20 74 6f 20 70 61 72 65 6e 74 20 72   Ref to parent r
3740: 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2e 20  evision object. 
3750: 4c 69 6e 6b 20 72 65 71 75 69 72 65 64 20 62 65  Link required be
3760: 63 61 75 73 65 20 6f 66 0a 20 20 20 20 23 20 20  cause of.    #  
3770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3780: 20 20 3b 20 23 20 27 63 76 73 61 64 6d 69 6e 20    ; # 'cvsadmin 
3790: 2d 6f 27 2c 20 77 68 69 63 68 20 63 61 6e 20 63  -o', which can c
37a0: 72 65 61 74 65 20 61 72 62 69 74 72 61 72 79 20  reate arbitrary 
37b0: 67 61 70 73 20 69 6e 20 74 68 65 0a 20 20 20 20  gaps in the.    
37c0: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
37d0: 20 20 20 20 20 3b 20 23 20 6e 75 6d 62 65 72 69       ; # numberi
37e0: 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 54 68 69  ng sequence. Thi
37f0: 73 20 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65  s is in the same
3800: 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70   line of develop
3810: 6d 65 6e 74 0a 20 20 20 20 23 20 20 20 20 20 20  ment.    #      
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
3830: 23 20 4e 6f 74 65 3a 20 46 6f 72 20 74 68 65 20  # Note: For the 
3840: 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20 6f  first revision o
3850: 6e 20 61 20 62 72 61 6e 63 68 20 74 68 65 20 72  n a branch the r
3860: 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20 20 20  evision.    #   
3870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3880: 20 3b 20 23 20 69 74 20 77 61 73 20 73 70 61 77   ; # it was spaw
3890: 6e 65 64 20 66 72 6f 6d 20 69 73 20 74 68 65 20  ned from is the 
38a0: 70 61 72 65 6e 74 2e 20 4f 6e 6c 79 20 74 68 65  parent. Only the
38b0: 20 72 6f 6f 74 20 72 65 76 69 73 69 6f 6e 0a 20   root revision. 
38c0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20     #            
38d0: 20 20 20 20 20 20 20 20 3b 20 23 20 6f 66 20 6d          ; # of m
38e0: 79 66 69 6c 65 27 73 20 72 65 76 69 73 69 6f 6e  yfile's revision
38f0: 20 74 72 65 65 20 68 61 73 20 6e 6f 74 68 69 6e   tree has nothin
3900: 67 20 73 65 74 20 68 65 72 65 2e 0a 20 20 20 20  g set here..    
3910: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
3920: 20 20 20 20 20 3b 20 23 0a 0a 20 20 20 20 76 61       ; #..    va
3930: 72 69 61 62 6c 65 20 6d 79 63 68 69 6c 64 20 20  riable mychild  
3940: 7b 7d 20 3b 20 23 20 52 65 66 20 74 6f 20 74 68  {} ; # Ref to th
3950: 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c 64 20  e primary child 
3960: 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 2c  revision object,
3970: 20 69 2e 65 2e 20 74 68 65 20 6e 65 78 74 0a 20   i.e. the next. 
3980: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20     #            
3990: 20 20 20 20 20 20 20 20 3b 20 23 20 72 65 76 69          ; # revi
39a0: 73 69 6f 6e 20 69 6e 20 74 68 65 20 73 61 6d 65  sion in the same
39b0: 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70   line of develop
39c0: 6d 65 6e 74 2e 0a 0a 20 20 20 20 23 20 42 72 61  ment...    # Bra
39d0: 6e 63 68 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f 5f  nch linkage ____
39e0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
39f0: 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
3a00: 79 62 72 61 6e 63 68 65 73 20 20 20 20 20 7b 7d  ybranches     {}
3a10: 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 74 68 65   ; # List of the
3a20: 20 62 72 61 6e 63 68 65 73 20 28 6f 62 6a 73 29   branches (objs)
3a30: 20 73 70 61 77 6e 65 64 20 62 79 20 74 68 69 73   spawned by this
3a40: 20 72 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76   revision..    v
3a50: 61 72 69 61 62 6c 65 20 6d 79 70 61 72 65 6e 74  ariable myparent
3a60: 62 72 61 6e 63 68 20 7b 7d 20 3b 20 23 20 46 6f  branch {} ; # Fo
3a70: 72 20 74 68 65 20 66 69 72 73 74 20 72 65 76 69  r the first revi
3a80: 73 69 6f 6e 20 6f 6e 20 61 20 62 72 61 6e 63 68  sion on a branch
3a90: 20 74 68 65 20 72 65 6c 65 76 61 6e 74 0a 20 20   the relevant.  
3aa0: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
3ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
3ac0: 20 62 72 61 6e 63 68 20 6f 62 6a 65 63 74 2e 20   branch object. 
3ad0: 54 68 69 73 20 61 6c 73 6f 20 61 6c 6c 6f 77 73  This also allows
3ae0: 20 75 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65   us to determine
3af0: 20 69 66 0a 20 20 20 20 23 20 20 20 20 20 20 20   if.    #       
3b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b10: 20 20 20 3b 20 23 20 6d 79 70 61 72 65 6e 74 20     ; # myparent 
3b20: 69 73 20 69 6e 20 74 68 65 20 73 61 6d 65 20 4c  is in the same L
3b30: 4f 44 2c 20 6f 72 20 74 68 65 20 72 65 76 69 73  OD, or the revis
3b40: 69 6f 6e 20 74 68 65 0a 20 20 20 20 23 20 20 20  ion the.    #   
3b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3b60: 20 20 20 20 20 20 20 3b 20 23 20 62 72 61 6e 63         ; # branc
3b70: 68 20 73 70 61 77 6e 65 64 20 66 72 6f 6d 2e 0a  h spawned from..
3b80: 0a 20 20 20 20 23 20 4c 69 73 74 20 6f 66 20 74  .    # List of t
3b90: 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65  he revision obje
3ba0: 63 74 73 20 6f 66 20 74 68 65 20 66 69 72 73 74  cts of the first
3bb0: 20 63 6f 6d 6d 69 74 73 20 6f 6e 20 61 6e 79 0a   commits on any.
3bc0: 20 20 20 20 23 20 62 72 61 6e 63 68 65 73 20 73      # branches s
3bd0: 70 61 77 6e 65 64 20 62 79 20 74 68 69 73 20 72  pawned by this r
3be0: 65 76 69 73 69 6f 6e 20 6f 6e 20 77 68 69 63 68  evision on which
3bf0: 20 63 6f 6d 6d 69 74 73 20 6f 63 63 75 72 72 65   commits occurre
3c00: 64 2e 0a 20 20 20 20 23 20 54 68 69 73 20 64 65  d..    # This de
3c10: 70 65 6e 64 65 6e 63 79 20 69 73 20 6b 65 70 74  pendency is kept
3c20: 20 65 78 70 6c 69 63 69 74 6c 79 20 62 65 63 61   explicitly beca
3c30: 75 73 65 20 6f 74 68 65 72 77 69 73 65 20 61 0a  use otherwise a.
3c40: 20 20 20 20 23 20 72 65 76 69 73 69 6f 6e 2d 6f      # revision-o
3c50: 6e 6c 79 20 74 6f 70 6f 6c 6f 67 69 63 61 6c 20  nly topological 
3c60: 73 6f 72 74 20 77 6f 75 6c 64 20 6d 69 73 73 20  sort would miss 
3c70: 74 68 65 20 64 65 70 65 6e 64 65 6e 63 79 20 74  the dependency t
3c80: 68 61 74 0a 20 20 20 20 23 20 65 78 69 73 74 73  hat.    # exists
3c90: 20 76 69 61 20 2d 3e 20 6d 79 62 72 61 6e 63 68   via -> mybranch
3ca0: 65 73 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  es...    variabl
3cb0: 65 20 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 72  e mybranchchildr
3cc0: 65 6e 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f  en {} ; # List o
3cd0: 66 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73 20  f the revisions 
3ce0: 28 6f 62 6a 73 29 20 77 68 69 63 68 20 61 72 65  (objs) which are
3cf0: 20 74 68 65 20 66 69 72 73 74 0a 20 20 20 20 23   the first.    #
3d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d10: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20              ; # 
3d20: 63 6f 6d 6d 69 74 73 20 6f 6e 20 61 6e 79 20 6f  commits on any o
3d30: 66 20 74 68 65 20 62 72 61 6e 63 68 65 73 20 73  f the branches s
3d40: 70 61 77 6e 65 64 20 66 72 6f 6d 20 74 68 69 73  pawned from this
3d50: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d70: 20 20 3b 20 23 20 72 65 76 69 73 69 6f 6e 2e 20    ; # revision. 
3d80: 54 68 65 20 64 65 70 65 6e 64 65 6e 63 79 20 69  The dependency i
3d90: 73 20 6b 65 70 74 20 65 78 70 6c 69 63 69 74 6c  s kept explicitl
3da0: 79 20 74 6f 0a 20 20 20 20 23 20 20 20 20 20 20  y 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 3b 20 23 20 65 6e 73 75 72 65        ; # ensure
3dd0: 20 74 68 61 74 20 61 20 72 65 76 69 73 69 6f 6e   that a revision
3de0: 2d 6f 6e 6c 79 20 74 6f 70 6f 6c 6f 67 69 63 61  -only topologica
3df0: 6c 20 73 6f 72 74 20 77 69 6c 6c 0a 20 20 20 20  l sort will.    
3e00: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  #               
3e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
3e20: 20 6e 6f 74 20 6d 69 73 73 20 69 74 2c 20 61 73   not miss it, as
3e30: 20 69 74 20 6f 74 68 65 72 77 69 73 65 20 65 78   it otherwise ex
3e40: 69 73 74 73 20 6f 6e 6c 79 20 76 69 61 0a 20 20  ists only via.  
3e50: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b                 ;
3e70: 20 23 20 6d 79 62 72 61 6e 63 68 65 73 2e 0a 0a   # mybranches...
3e80: 20 20 20 20 23 20 54 61 67 20 6c 69 6e 6b 61 67      # Tag linkag
3e90: 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  e ______________
3ea0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20  __________..    
3eb0: 76 61 72 69 61 62 6c 65 20 6d 79 74 61 67 73 20  variable mytags 
3ec0: 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 74  {} ; # List of t
3ed0: 61 67 73 20 28 6f 62 6a 73 29 20 61 73 73 6f 63  ags (objs) assoc
3ee0: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
3ef0: 72 65 76 69 73 69 6f 6e 2e 0a 0a 20 20 20 20 23  revision...    #
3f00: 20 4d 6f 72 65 20 64 65 72 69 76 65 64 20 64 61   More derived da
3f10: 74 61 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65  ta..    variable
3f20: 20 6d 79 6f 70 65 72 61 74 69 6f 6e 20 20 20 20   myoperation    
3f30: 20 20 20 20 7b 7d 20 3b 20 23 20 4f 6e 65 20 6f      {} ; # One o
3f40: 66 20 27 61 64 64 27 2c 20 27 63 68 61 6e 67 65  f 'add', 'change
3f50: 27 2c 20 27 64 65 6c 65 74 65 27 2c 20 6f 72 0a  ', 'delete', or.
3f60: 09 09 09 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
3f70: 23 20 27 6e 6f 74 68 69 6e 67 27 2e 20 44 65 72  # 'nothing'. Der
3f80: 69 76 65 64 20 66 72 6f 6d 20 6f 75 72 20 61 6e  ived from our an
3f90: 64 0a 09 09 09 20 20 20 20 20 20 20 20 20 20 20  d....           
3fa0: 20 20 23 20 69 74 73 20 70 61 72 65 6e 74 27 73    # its parent's
3fb0: 20 73 74 61 74 65 2e 0a 20 20 20 20 76 61 72 69   state..    vari
3fc0: 61 62 6c 65 20 6d 79 69 73 6f 6e 64 65 66 61 75  able myisondefau
3fd0: 6c 74 62 72 61 6e 63 68 20 30 20 3b 20 23 20 42  ltbranch 0 ; # B
3fe0: 6f 6f 6c 65 61 6e 20 66 6c 61 67 2c 20 73 65 74  oolean flag, set
3ff0: 20 69 66 20 74 68 65 0a 09 09 09 09 20 20 20 20   if the.....    
4000: 20 23 20 72 65 76 69 73 69 6f 6e 20 69 73 20 6f   # revision is o
4010: 6e 20 74 68 65 20 6e 6f 6e 2d 74 72 75 6e 6b 0a  n the non-trunk.
4020: 09 09 09 09 20 20 20 20 20 23 20 64 65 66 61 75  ....     # defau
4030: 6c 74 20 62 72 61 6e 63 68 2c 20 61 6b 61 20 76  lt branch, aka v
4040: 65 6e 64 6f 72 0a 09 09 09 09 20 20 20 20 20 23  endor.....     #
4050: 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72   branch..    var
4060: 69 61 62 6c 65 20 6d 79 64 62 70 61 72 65 6e 74  iable mydbparent
4070: 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20           {} ; # 
4080: 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65  Reference to the
4090: 20 6c 61 73 74 20 72 65 76 69 73 69 6f 6e 0a 09   last revision..
40a0: 09 09 09 20 20 20 20 20 23 20 6f 6e 20 74 68 65  ...     # on the
40b0: 20 76 65 6e 64 6f 72 20 62 72 61 6e 63 68 20 69   vendor branch i
40c0: 66 20 74 68 69 73 20 69 73 0a 09 09 09 09 20 20  f this is.....  
40d0: 20 20 20 23 20 74 68 65 20 70 72 69 6d 61 72 79     # the primary
40e0: 20 63 68 69 6c 64 20 6f 66 20 74 68 65 0a 09 09   child of the...
40f0: 09 09 20 20 20 20 20 23 20 72 65 67 75 6c 61 72  ..     # regular
4100: 20 72 6f 6f 74 2e 0a 20 20 20 20 76 61 72 69 61   root..    varia
4110: 62 6c 65 20 6d 79 64 62 63 68 69 6c 64 20 20 20  ble mydbchild   
4120: 20 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65         {} ; # Re
4130: 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 70  ference to the p
4140: 72 69 6d 61 72 79 20 63 68 69 6c 64 0a 09 09 09  rimary child....
4150: 09 20 20 20 20 20 23 20 6f 66 20 74 68 65 20 72  .     # of the r
4160: 65 67 75 6c 61 72 20 72 6f 6f 74 20 69 66 20 74  egular root if t
4170: 68 69 73 20 69 73 0a 09 09 09 09 20 20 20 20 20  his is.....     
4180: 23 20 74 68 65 20 6c 61 73 74 20 72 65 76 69 73  # the last revis
4190: 69 6f 6e 20 6f 6e 20 74 68 65 20 76 65 6e 64 6f  ion on the vendo
41a0: 72 0a 09 09 09 09 20 20 20 20 20 23 20 62 72 61  r.....     # bra
41b0: 6e 63 68 2e 0a 0a 20 20 20 20 23 20 64 65 61 64  nch...    # dead
41c0: 28 73 65 6c 66 29 20 78 20 64 65 61 64 28 70 61  (self) x dead(pa
41d0: 72 65 6e 74 29 20 2d 3e 20 6f 70 65 72 61 74 69  rent) -> operati
41e0: 6f 6e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61  on.    typevaria
41f0: 62 6c 65 20 6d 79 6f 70 73 74 61 74 65 20 2d 61  ble myopstate -a
4200: 72 72 61 79 20 7b 0a 09 7b 30 20 30 7d 20 63 68  rray {..{0 0} ch
4210: 61 6e 67 65 0a 09 7b 30 20 31 7d 20 64 65 6c 65  ange..{0 1} dele
4220: 74 65 0a 09 7b 31 20 30 7d 20 61 64 64 0a 09 7b  te..{1 0} add..{
4230: 31 20 31 7d 20 6e 6f 74 68 69 6e 67 0a 20 20 20  1 1} nothing.   
4240: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68   }..    typemeth
4250: 6f 64 20 67 65 74 6f 70 63 6f 64 65 73 20 7b 7d  od getopcodes {}
4260: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 69 64 20   {..foreach {id 
4270: 6e 61 6d 65 7d 20 5b 73 74 61 74 65 20 72 75 6e  name} [state run
4280: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 6f   {..    SELECT o
4290: 69 64 2c 20 6e 61 6d 65 20 46 52 4f 4d 20 6f 70  id, name FROM op
42a0: 74 79 70 65 3b 0a 09 7d 5d 20 7b 20 73 65 74 20  type;..}] { set 
42b0: 6d 79 6f 70 63 6f 64 65 28 24 6e 61 6d 65 29 20  myopcode($name) 
42c0: 24 69 64 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20  $id }..return.  
42d0: 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 76 61 72    }..    typevar
42e0: 69 61 62 6c 65 20 6d 79 6f 70 63 6f 64 65 20 2d  iable myopcode -
42f0: 61 72 72 61 79 20 7b 7d 0a 0a 20 20 20 20 23 20  array {}..    # 
4300: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
4310: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
4320: 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74  #####.    ## Int
4330: 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20  ernal methods.. 
4340: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
4350: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
4360: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
4370: 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a  # Configuration.
4380: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73  .    pragma -has
4390: 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20  typeinfo    no  
43a0: 3b 20 23 20 6e 6f 20 74 79 70 65 20 69 6e 74 72  ; # no type intr
43b0: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72  ospection.    pr
43c0: 61 67 6d 61 20 2d 68 61 73 69 6e 66 6f 20 20 20  agma -hasinfo   
43d0: 20 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20       no  ; # no 
43e0: 6f 62 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63  object introspec
43f0: 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20  tion.    pragma 
4400: 2d 73 69 6d 70 6c 65 64 69 73 70 61 74 63 68 20  -simpledispatch 
4410: 79 65 73 20 3b 20 23 20 73 69 6d 70 6c 65 20 66  yes ; # simple f
4420: 61 73 74 20 64 69 73 70 61 74 63 68 0a 0a 20 20  ast dispatch..  
4430: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
4440: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
4450: 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d  #########.}..nam
4460: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63  espace eval ::vc
4470: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
4480: 3a 3a 63 76 73 3a 3a 66 69 6c 65 20 7b 0a 20 20  ::cvs::file {.  
4490: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f    namespace expo
44a0: 72 74 20 72 65 76 0a 20 20 20 20 6e 61 6d 65 73  rt rev.    names
44b0: 70 61 63 65 20 65 76 61 6c 20 72 65 76 20 7b 0a  pace eval rev {.
44c0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
44d0: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d  t ::vc::tools::m
44e0: 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63  isc::*..namespac
44f0: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66  e import ::vc::f
4500: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
4510: 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73  vs::state..names
4520: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63  pace import ::vc
4530: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
4540: 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79  ::cvs::integrity
4550: 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23  .    }.}..# # ##
4560: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
4570: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
4580: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
4590: 23 23 23 23 23 23 23 0a 23 23 20 52 65 61 64 79  #######.## Ready
45a0: 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64  ..package provid
45b0: 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  e vc::fossil::im
45c0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a  port::cvs::file:
45d0: 3a 72 65 76 20 31 2e 30 0a 72 65 74 75 72 6e 0a  :rev 1.0.return.