Hex Artifact Content
Not logged in

Artifact 5f2783ed91bf22cc17adc49a43324c5d5383f533:

File tools/cvs2fossil/lib/c2f_frev.tcl part of check-in [f94f7e17d1] - Reworked the storage of the text range a bit, split immediately (settext) and store the pieces, instead of splitting everytime a piece is needed. by aku on 2008-02-02 22:59:53.

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 09 73 65 74 20 63 6c 65 6e 20 5b 65 78 70 72  ..set clen [expr
27b0: 20 7b 24 6d 79 74 65 78 74 65 6e 64 20 2d 20 24   {$mytextend - $
27c0: 6d 79 74 65 78 74 73 74 61 72 74 7d 5d 0a 0a 09  mytextstart}]...
27d0: 6c 61 70 70 65 6e 64 20 6d 61 70 20 40 50 40 20  lappend map @P@ 
27e0: 5b 65 78 70 72 20 7b 20 28 24 6d 79 70 61 72 65  [expr { ($mypare
27f0: 6e 74 20 20 20 20 20 20 20 65 71 20 22 22 29 20  nt       eq "") 
2800: 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b 24 6d 79 70  ? "NULL" : [$myp
2810: 61 72 65 6e 74 20 20 20 20 20 20 20 69 64 5d 20  arent       id] 
2820: 7d 5d 0a 09 6c 61 70 70 65 6e 64 20 6d 61 70 20  }]..lappend map 
2830: 40 43 40 20 5b 65 78 70 72 20 7b 20 28 24 6d 79  @C@ [expr { ($my
2840: 63 68 69 6c 64 20 20 20 20 20 20 20 20 65 71 20  child        eq 
2850: 22 22 29 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b  "") ? "NULL" : [
2860: 24 6d 79 63 68 69 6c 64 20 20 20 20 20 20 20 20  $mychild        
2870: 69 64 5d 20 7d 5d 0a 09 6c 61 70 70 65 6e 64 20  id] }]..lappend 
2880: 6d 61 70 20 40 44 50 20 5b 65 78 70 72 20 7b 20  map @DP [expr { 
2890: 28 24 6d 79 64 62 70 61 72 65 6e 74 20 20 20 20  ($mydbparent    
28a0: 20 65 71 20 22 22 29 20 3f 20 22 4e 55 4c 4c 22   eq "") ? "NULL"
28b0: 20 3a 20 5b 24 6d 79 64 62 70 61 72 65 6e 74 20   : [$mydbparent 
28c0: 20 20 20 20 69 64 5d 20 7d 5d 0a 09 6c 61 70 70      id] }]..lapp
28d0: 65 6e 64 20 6d 61 70 20 40 44 43 20 5b 65 78 70  end map @DC [exp
28e0: 72 20 7b 20 28 24 6d 79 64 62 63 68 69 6c 64 20  r { ($mydbchild 
28f0: 20 20 20 20 20 65 71 20 22 22 29 20 3f 20 22 4e       eq "") ? "N
2900: 55 4c 4c 22 20 3a 20 5b 24 6d 79 64 62 63 68 69  ULL" : [$mydbchi
2910: 6c 64 20 20 20 20 20 20 69 64 5d 20 7d 5d 0a 09  ld      id] }]..
2920: 6c 61 70 70 65 6e 64 20 6d 61 70 20 40 42 50 20  lappend map @BP 
2930: 5b 65 78 70 72 20 7b 20 28 24 6d 79 70 61 72 65  [expr { ($mypare
2940: 6e 74 62 72 61 6e 63 68 20 65 71 20 22 22 29 20  ntbranch eq "") 
2950: 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b 24 6d 79 70  ? "NULL" : [$myp
2960: 61 72 65 6e 74 62 72 61 6e 63 68 20 69 64 5d 20  arentbranch id] 
2970: 7d 5d 0a 0a 09 73 65 74 20 63 6d 64 20 7b 0a 09  }]...set cmd {..
2980: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
2990: 72 65 76 69 73 69 6f 6e 20 28 20 72 69 64 2c 20  revision ( rid, 
29a0: 20 20 66 69 64 2c 20 20 72 65 76 2c 20 20 20 20    fid,  rev,    
29b0: 20 20 6c 6f 64 2c 20 70 61 72 65 6e 74 2c 20 63    lod, parent, c
29c0: 68 69 6c 64 2c 20 20 69 73 64 65 66 61 75 6c 74  hild,  isdefault
29d0: 2c 20 64 62 70 61 72 65 6e 74 2c 20 64 62 63 68  , dbparent, dbch
29e0: 69 6c 64 2c 20 62 70 61 72 65 6e 74 2c 20 20 6f  ild, bparent,  o
29f0: 70 2c 20 20 64 61 74 65 2c 20 20 20 20 73 74 61  p,  date,    sta
2a00: 74 65 2c 20 20 20 20 6d 69 64 2c 20 20 20 20 20  te,    mid,     
2a10: 20 20 63 6f 66 66 2c 20 20 20 20 20 20 20 20 63    coff,        c
2a20: 6c 65 6e 29 0a 09 20 20 20 20 56 41 4c 55 45 53  len)..    VALUES
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
2a40: 24 6d 79 69 64 2c 20 24 66 69 64 2c 20 24 6d 79  $myid, $fid, $my
2a50: 72 65 76 6e 72 2c 20 24 6c 6f 64 2c 20 40 50 40  revnr, $lod, @P@
2a60: 2c 20 20 20 20 40 43 40 2c 20 20 20 24 69 64 62  ,    @C@,   $idb
2a70: 2c 20 20 20 20 20 20 20 40 44 50 2c 20 20 20 20  ,       @DP,    
2a80: 20 20 40 44 43 2c 20 20 20 20 20 40 42 50 20 20    @DC,     @BP  
2a90: 20 20 2c 20 24 6f 70 2c 20 24 6d 79 64 61 74 65    , $op, $mydate
2aa0: 2c 20 24 6d 79 73 74 61 74 65 2c 20 24 6d 79 6d  , $mystate, $mym
2ab0: 65 74 61 69 64 2c 20 24 6d 79 74 65 78 74 73 74  etaid, $mytextst
2ac0: 61 72 74 2c 20 24 63 6c 65 6e 29 3b 0a 09 7d 0a  art, $clen);..}.
2ad0: 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74  ..state transact
2ae0: 69 6f 6e 20 7b 0a 09 20 20 20 20 73 74 61 74 65  ion {..    state
2af0: 20 72 75 6e 20 5b 73 74 72 69 6e 67 20 6d 61 70   run [string map
2b00: 20 24 6d 61 70 20 24 63 6d 64 5d 0a 0a 09 20 20   $map $cmd]...  
2b10: 20 20 23 20 41 6e 64 20 74 68 65 20 62 72 61 6e    # And the bran
2b20: 63 68 20 63 68 69 6c 64 72 65 6e 20 61 73 20 77  ch children as w
2b30: 65 6c 6c 2c 20 66 6f 72 20 70 61 73 73 20 35 2e  ell, for pass 5.
2b40: 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 62 63  ..    foreach bc
2b50: 20 24 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 72   $mybranchchildr
2b60: 65 6e 20 7b 0a 09 09 73 65 74 20 62 63 69 64 20  en {...set bcid 
2b70: 5b 24 62 63 20 69 64 5d 0a 09 09 73 74 61 74 65  [$bc id]...state
2b80: 20 72 75 6e 20 7b 0a 09 09 20 20 20 20 49 4e 53   run {...    INS
2b90: 45 52 54 20 49 4e 54 4f 20 72 65 76 69 73 69 6f  ERT INTO revisio
2ba0: 6e 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20  nbranchchildren 
2bb0: 28 72 69 64 2c 20 20 20 62 72 69 64 29 0a 09 09  (rid,   brid)...
2bc0: 20 20 20 20 56 41 4c 55 45 53 20 20 20 20 20 20      VALUES      
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2be0: 20 20 20 20 20 20 20 28 24 6d 79 69 64 2c 20 24         ($myid, $
2bf0: 62 63 69 64 29 3b 0a 09 09 7d 0a 09 20 20 20 20  bcid);...}..    
2c00: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  }..}..return.   
2c10: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   }..    # # ## #
2c20: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
2c30: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
2c40: 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20 20      ## State..  
2c50: 20 20 23 20 50 65 72 73 69 73 74 65 6e 74 3a 20    # Persistent: 
2c60: 6d 79 69 64 20 20 20 20 20 20 20 20 20 20 20 20  myid            
2c70: 20 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 72      - revision.r
2c80: 69 64 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  id.    #        
2c90: 20 20 20 20 20 6d 79 66 69 6c 65 20 20 20 20 20       myfile     
2ca0: 20 20 20 20 20 20 20 20 20 2d 20 72 65 76 69 73           - revis
2cb0: 69 6f 6e 2e 66 69 64 0a 20 20 20 20 23 20 20 20  ion.fid.    #   
2cc0: 20 20 20 20 20 20 20 20 20 20 6d 79 6c 6f 64 20            mylod 
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20                - 
2ce0: 72 65 76 69 73 69 6f 6e 2e 6c 6f 64 0a 20 20 20  revision.lod.   
2cf0: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6d   #             m
2d00: 79 72 65 76 6e 72 20 20 20 20 20 20 20 20 20 20  yrevnr          
2d10: 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 72 65     - revision.re
2d20: 76 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20  v.    #         
2d30: 20 20 20 20 6d 79 64 61 74 65 20 20 20 20 20 20      mydate      
2d40: 20 20 20 20 20 20 20 20 2d 20 72 65 76 69 73 69          - revisi
2d50: 6f 6e 2e 64 61 74 65 0a 20 20 20 20 23 20 20 20  on.date.    #   
2d60: 20 20 20 20 20 20 20 20 20 20 6d 79 73 74 61 74            mystat
2d70: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 20  e             - 
2d80: 72 65 76 69 73 69 6f 6e 2e 73 74 61 74 65 0a 20  revision.state. 
2d90: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20     #            
2da0: 20 6d 79 6d 65 74 61 69 64 20 20 20 20 20 20 20   mymetaid       
2db0: 20 20 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e       - revision.
2dc0: 6d 69 64 0a 20 20 20 20 23 20 20 20 20 20 20 20  mid.    #       
2dd0: 20 20 20 20 20 20 6d 79 74 65 78 74 7b 73 74 61        mytext{sta
2de0: 72 74 2c 65 6e 64 7d 20 20 20 2d 20 72 65 76 69  rt,end}   - revi
2df0: 73 69 6f 6e 2e 7b 63 73 2c 63 65 7d 0a 20 20 20  sion.{cs,ce}.   
2e00: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6d   #             m
2e10: 79 70 61 72 65 6e 74 20 20 20 20 20 20 20 20 20  yparent         
2e20: 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 70 61     - revision.pa
2e30: 72 65 6e 74 0a 20 20 20 20 23 20 20 20 20 20 20  rent.    #      
2e40: 20 20 20 20 20 20 20 6d 79 63 68 69 6c 64 20 20         mychild  
2e50: 20 20 20 20 20 20 20 20 20 20 20 2d 20 72 65 76             - rev
2e60: 69 73 69 6f 6e 2e 63 68 69 6c 64 0a 20 20 20 20  ision.child.    
2e70: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 79  #             my
2e80: 70 61 72 65 6e 74 62 72 61 6e 63 68 20 20 20 20  parentbranch    
2e90: 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 62 70 61    - revision.bpa
2ea0: 72 65 6e 74 0a 20 20 20 20 23 20 20 20 20 20 20  rent.    #      
2eb0: 20 20 20 20 20 20 20 6d 79 6f 70 65 72 61 74 69         myoperati
2ec0: 6f 6e 20 20 20 20 20 20 20 20 20 2d 20 72 65 76  on         - rev
2ed0: 69 73 69 6f 6e 2e 6f 70 0a 20 20 20 20 23 20 20  ision.op.    #  
2ee0: 20 20 20 20 20 20 20 20 20 20 20 6d 79 69 73 6f             myiso
2ef0: 6e 64 65 66 61 75 6c 74 62 72 61 6e 63 68 20 2d  ndefaultbranch -
2f00: 20 72 65 76 69 73 69 6f 6e 2e 69 73 64 65 66 61   revision.isdefa
2f10: 75 6c 74 0a 20 20 20 20 23 20 20 20 20 20 20 20  ult.    #       
2f20: 20 20 20 20 20 20 6d 79 64 62 70 61 72 65 6e 74        mydbparent
2f30: 20 20 20 20 20 20 20 20 20 20 2d 20 72 65 76 69            - revi
2f40: 73 69 6f 6e 2e 64 62 70 61 72 65 6e 74 0a 20 20  sion.dbparent.  
2f50: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
2f60: 6d 79 64 62 63 68 69 6c 64 20 20 20 20 20 20 20  mydbchild       
2f70: 20 20 20 20 2d 20 72 65 76 69 73 69 6f 6e 2e 64      - revision.d
2f80: 62 63 68 69 6c 64 0a 0a 20 20 20 20 6d 65 74 68  bchild..    meth
2f90: 6f 64 20 44 55 4d 50 20 7b 6c 61 62 65 6c 7d 20  od DUMP {label} 
2fa0: 7b 0a 09 70 75 74 73 20 22 24 6c 61 62 65 6c 20  {..puts "$label 
2fb0: 3d 20 24 73 65 6c 66 20 3c 24 6d 79 72 65 76 6e  = $self <$myrevn
2fc0: 72 3e 20 28 4e 54 44 42 3d 24 6d 79 69 73 6f 6e  r> (NTDB=$myison
2fd0: 64 65 66 61 75 6c 74 62 72 61 6e 63 68 29 20 5c  defaultbranch) \
2fe0: 7b 22 0a 09 70 75 74 73 20 22 5c 74 50 5c 74 24  {"..puts "\tP\t$
2ff0: 6d 79 70 61 72 65 6e 74 22 0a 09 70 75 74 73 20  myparent"..puts 
3000: 22 5c 74 43 5c 74 24 6d 79 63 68 69 6c 64 22 0a  "\tC\t$mychild".
3010: 09 70 75 74 73 20 22 5c 74 50 42 5c 74 24 6d 79  .puts "\tPB\t$my
3020: 70 61 72 65 6e 74 62 72 61 6e 63 68 22 0a 09 70  parentbranch"..p
3030: 75 74 73 20 22 5c 74 64 62 50 5c 74 24 6d 79 64  uts "\tdbP\t$myd
3040: 62 70 61 72 65 6e 74 22 0a 09 70 75 74 73 20 22  bparent"..puts "
3050: 5c 74 64 62 43 5c 74 24 6d 79 64 62 63 68 69 6c  \tdbC\t$mydbchil
3060: 64 22 0a 09 66 6f 72 65 61 63 68 20 62 20 24 6d  d"..foreach b $m
3070: 79 62 72 61 6e 63 68 65 73 20 7b 0a 09 20 20 20  ybranches {..   
3080: 20 70 75 74 73 20 5c 74 5c 74 42 5c 74 24 62 0a   puts \t\tB\t$b.
3090: 09 7d 0a 09 66 6f 72 65 61 63 68 20 62 20 24 6d  .}..foreach b $m
30a0: 79 62 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20  ybranchchildren 
30b0: 7b 0a 09 20 20 20 20 70 75 74 73 20 5c 74 5c 74  {..    puts \t\t
30c0: 42 43 5c 74 24 62 0a 09 7d 0a 09 70 75 74 73 20  BC\t$b..}..puts 
30d0: 22 5c 7d 22 0a 09 72 65 74 75 72 6e 0a 20 20 20  "\}"..return.   
30e0: 20 7d 0a 0a 20 20 20 20 74 79 70 65 76 61 72 69   }..    typevari
30f0: 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 70 61 74  able mybranchpat
3100: 74 65 72 6e 20 7b 5e 28 28 3f 3a 5c 64 2b 5c 2e  tern {^((?:\d+\.
3110: 5c 64 2b 5c 2e 29 2b 29 28 3f 3a 30 5c 2e 29 3f  \d+\.)+)(?:0\.)?
3120: 28 5c 64 2b 29 24 7d 0a 20 20 20 20 23 20 46 69  (\d+)$}.    # Fi
3130: 72 73 74 20 61 20 6e 6f 6e 7a 65 72 6f 20 65 76  rst a nonzero ev
3140: 65 6e 20 6e 75 6d 62 65 72 20 6f 66 20 64 69 67  en number of dig
3150: 69 74 20 67 72 6f 75 70 73 20 77 69 74 68 20 74  it groups with t
3160: 72 61 69 6c 69 6e 67 20 64 6f 74 0a 20 20 20 20  railing dot.    
3170: 23 20 43 56 53 20 74 68 65 6e 20 73 74 69 63 6b  # CVS then stick
3180: 73 20 61 6e 20 65 78 74 72 61 20 30 20 69 6e 20  s an extra 0 in 
3190: 68 65 72 65 3b 20 52 43 53 20 64 6f 65 73 20 6e  here; RCS does n
31a0: 6f 74 2e 0a 20 20 20 20 23 20 41 6e 64 20 74 68  ot..    # And th
31b0: 65 20 6c 61 73 74 20 64 69 67 69 74 20 67 72 6f  e last digit gro
31c0: 75 70 2e 0a 0a 20 20 20 20 74 79 70 65 76 61 72  up...    typevar
31d0: 69 61 62 6c 65 20 6d 79 69 64 63 6f 75 6e 74 65  iable myidcounte
31e0: 72 20 30 20 3b 20 23 20 43 6f 75 6e 74 65 72 20  r 0 ; # Counter 
31f0: 66 6f 72 20 72 65 76 69 73 69 6f 6e 20 69 64 73  for revision ids
3200: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
3210: 79 69 64 20 20 20 20 20 20 20 20 20 20 20 7b 7d  yid           {}
3220: 20 3b 20 23 20 52 65 76 69 73 69 6f 6e 20 69 64   ; # Revision id
3230: 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  ...    variable 
3240: 6d 79 72 65 76 6e 72 20 20 20 20 20 7b 7d 20 3b  myrevnr     {} ;
3250: 20 23 20 52 65 76 69 73 69 6f 6e 20 6e 75 6d 62   # Revision numb
3260: 65 72 20 6f 66 20 74 68 65 20 72 65 76 69 73 69  er of the revisi
3270: 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  on..    variable
3280: 20 6d 79 64 61 74 65 20 20 20 20 20 20 7b 7d 20   mydate      {} 
3290: 3b 20 23 20 54 69 6d 65 73 74 61 6d 70 20 6f 66  ; # Timestamp of
32a0: 20 74 68 65 20 72 65 76 69 73 69 6f 6e 2c 20 73   the revision, s
32b0: 65 63 6f 6e 64 73 20 73 69 6e 63 65 20 65 70 6f  econds since epo
32c0: 63 68 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  ch.    variable 
32d0: 6d 79 6f 72 69 67 64 61 74 65 20 20 7b 7d 20 3b  myorigdate  {} ;
32e0: 20 23 20 4f 72 69 67 69 6e 61 6c 20 75 6e 6d 6f   # Original unmo
32f0: 64 69 66 69 65 64 20 74 69 6d 65 73 74 61 6d 70  dified timestamp
3300: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
3310: 79 73 74 61 74 65 20 20 20 20 20 7b 7d 20 3b 20  ystate     {} ; 
3320: 23 20 53 74 61 74 65 20 6f 66 20 74 68 65 20 72  # State of the r
3330: 65 76 69 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72  evision..    var
3340: 69 61 62 6c 65 20 6d 79 66 69 6c 65 20 20 20 20  iable myfile    
3350: 20 20 7b 7d 20 3b 20 23 20 52 65 66 20 74 6f 20    {} ; # Ref to 
3360: 74 68 65 20 66 69 6c 65 20 6f 62 6a 65 63 74 20  the file object 
3370: 74 68 65 20 72 65 76 69 73 69 6f 6e 20 62 65 6c  the revision bel
3380: 6f 6e 67 73 20 74 6f 2e 0a 20 20 20 20 76 61 72  ongs to..    var
3390: 69 61 62 6c 65 20 6d 79 74 65 78 74 73 74 61 72  iable mytextstar
33a0: 74 20 7b 7d 20 3b 20 23 20 53 74 61 72 74 20 6f  t {} ; # Start o
33b0: 66 20 74 68 65 20 72 61 6e 67 65 20 6f 66 20 74  f the range of t
33c0: 68 65 20 28 64 65 6c 74 61 29 20 74 65 78 74 0a  he (delta) text.
33d0: 09 09 09 20 20 20 20 20 20 23 20 66 6f 72 20 74  ...      # for t
33e0: 68 69 73 20 72 65 76 69 73 69 6f 6e 20 69 6e 20  his revision in 
33f0: 74 68 65 20 66 69 6c 65 2e 0a 20 20 20 20 76 61  the file..    va
3400: 72 69 61 62 6c 65 20 6d 79 74 65 78 74 65 6e 64  riable mytextend
3410: 20 20 20 7b 7d 20 3b 20 23 20 45 6e 64 20 6f 66     {} ; # End of
3420: 20 74 68 65 20 72 61 6e 67 65 20 6f 66 20 74 68   the range of th
3430: 65 20 28 64 65 6c 74 61 29 20 74 65 78 74 0a 09  e (delta) text..
3440: 09 09 20 20 20 20 20 20 23 20 66 6f 72 20 74 68  ..      # for th
3450: 69 73 20 72 65 76 69 73 69 6f 6e 20 69 6e 20 74  is revision in t
3460: 68 65 20 66 69 6c 65 2e 0a 20 20 20 20 76 61 72  he file..    var
3470: 69 61 62 6c 65 20 6d 79 6d 65 74 61 69 64 20 20  iable mymetaid  
3480: 20 20 7b 7d 20 3b 20 23 20 49 64 20 6f 66 20 74    {} ; # Id of t
3490: 68 65 20 6d 65 74 61 20 64 61 74 61 20 67 72 6f  he meta data gro
34a0: 75 70 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a  up the revision.
34b0: 09 09 09 20 20 20 20 20 20 23 20 62 65 6c 6f 6e  ...      # belon
34c0: 67 73 20 74 6f 2e 20 54 68 69 73 20 69 73 20 6c  gs to. This is l
34d0: 61 74 65 72 20 75 73 65 64 20 74 6f 20 70 75 74  ater used to put
34e0: 0a 09 09 09 20 20 20 20 20 20 23 20 74 68 65 20  ....      # the 
34f0: 66 69 6c 65 20 72 65 76 69 73 69 6f 6e 73 20 69  file revisions i
3500: 6e 74 6f 20 70 72 65 6c 69 6d 69 6e 61 72 79 0a  nto preliminary.
3510: 09 09 09 20 20 20 20 20 20 23 20 63 68 61 6e 67  ...      # chang
3520: 65 73 65 74 73 20 28 61 6b 61 20 70 72 6f 6a 65  esets (aka proje
3530: 63 74 20 72 65 76 69 73 69 6f 6e 73 29 2e 0a 09  ct revisions)...
3540: 09 09 20 20 20 20 20 20 23 20 54 68 69 73 20 69  ..      # This i
3550: 64 20 65 6e 63 6f 64 65 73 20 34 20 70 69 65 63  d encodes 4 piec
3560: 65 73 20 6f 66 20 64 61 74 61 2c 0a 09 09 09 20  es of data,.... 
3570: 20 20 20 20 20 23 20 6e 61 6d 65 6c 79 3a 20 74       # namely: t
3580: 68 65 20 70 72 6f 6a 65 63 74 20 61 6e 64 20 62  he project and b
3590: 72 61 6e 63 68 20 74 68 65 0a 09 09 09 20 20 20  ranch the....   
35a0: 20 20 20 23 20 72 65 76 69 73 69 6f 6e 20 77 61     # revision wa
35b0: 73 20 63 6f 6d 6d 69 74 74 65 64 20 74 6f 2c 20  s committed to, 
35c0: 74 68 65 20 61 75 74 68 6f 72 0a 09 09 09 20 20  the author....  
35d0: 20 20 20 20 23 20 77 68 6f 20 64 69 64 20 74 68      # who did th
35e0: 65 20 63 6f 6d 6d 69 74 2c 20 61 6e 64 20 74 68  e commit, and th
35f0: 65 20 6d 65 73 73 61 67 65 0a 09 09 09 20 20 20  e message....   
3600: 20 20 20 23 20 75 73 65 64 2e 0a 20 20 20 20 76     # used..    v
3610: 61 72 69 61 62 6c 65 20 6d 79 6c 6f 64 20 20 20  ariable mylod   
3620: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72      {} ; # Refer
3630: 65 6e 63 65 20 74 6f 20 74 68 65 20 6c 69 6e 65  ence to the line
3640: 2d 6f 66 2d 64 65 76 65 6c 6f 70 6d 65 6e 74 0a  -of-development.
3650: 09 09 09 20 20 20 20 20 20 23 20 6f 62 6a 65 63  ...      # objec
3660: 74 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 62  t the revision b
3670: 65 6c 6f 6e 67 73 20 74 6f 2e 20 41 6e 0a 09 09  elongs to. An...
3680: 09 20 20 20 20 20 20 23 20 61 6c 74 65 72 6e 61  .      # alterna
3690: 74 69 76 65 20 69 64 69 6f 6d 20 77 6f 75 6c 64  tive idiom would
36a0: 20 62 65 20 74 6f 20 63 61 6c 6c 20 69 74 0a 09   be to call it..
36b0: 09 09 20 20 20 20 20 20 23 20 74 68 65 20 62 72  ..      # the br
36c0: 61 6e 63 68 20 74 68 65 20 72 65 76 69 73 69 6f  anch the revisio
36d0: 6e 20 69 73 20 6f 6e 2e 20 54 68 69 73 0a 09 09  n is on. This...
36e0: 09 20 20 20 20 20 20 23 20 72 65 66 65 72 65 6e  .      # referen
36f0: 63 65 20 69 73 20 74 6f 20 65 69 74 68 65 72 20  ce is to either 
3700: 70 72 6f 6a 65 63 74 2d 6c 65 76 65 6c 0a 09 09  project-level...
3710: 09 20 20 20 20 20 20 23 20 74 72 75 6e 6b 20 6f  .      # trunk o
3720: 72 20 66 69 6c 65 2d 6c 65 76 65 6c 20 73 79 6d  r file-level sym
3730: 62 6f 6c 2e 0a 0a 20 20 20 20 23 20 42 61 73 69  bol...    # Basi
3740: 63 20 70 61 72 65 6e 74 2f 63 68 69 6c 64 20 6c  c parent/child l
3750: 69 6e 6b 61 67 65 20 28 6c 69 6e 65 73 20 6f 66  inkage (lines of
3760: 20 64 65 76 65 6c 6f 70 6d 65 6e 74 29 0a 0a 20   development).. 
3770: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 61     variable mypa
3780: 72 65 6e 74 20 7b 7d 20 3b 20 23 20 52 65 66 20  rent {} ; # Ref 
3790: 74 6f 20 70 61 72 65 6e 74 20 72 65 76 69 73 69  to parent revisi
37a0: 6f 6e 20 6f 62 6a 65 63 74 2e 20 4c 69 6e 6b 20  on object. Link 
37b0: 72 65 71 75 69 72 65 64 20 62 65 63 61 75 73 65  required because
37c0: 20 6f 66 0a 20 20 20 20 23 20 20 20 20 20 20 20   of.    #       
37d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
37e0: 20 27 63 76 73 61 64 6d 69 6e 20 2d 6f 27 2c 20   'cvsadmin -o', 
37f0: 77 68 69 63 68 20 63 61 6e 20 63 72 65 61 74 65  which can create
3800: 20 61 72 62 69 74 72 61 72 79 20 67 61 70 73 20   arbitrary gaps 
3810: 69 6e 20 74 68 65 0a 20 20 20 20 23 20 20 20 20  in the.    #    
3820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3830: 3b 20 23 20 6e 75 6d 62 65 72 69 6e 67 20 73 65  ; # numbering se
3840: 71 75 65 6e 63 65 2e 20 54 68 69 73 20 69 73 20  quence. This is 
3850: 69 6e 20 74 68 65 20 73 61 6d 65 20 6c 69 6e 65  in the same line
3860: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 0a   of development.
3870: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
3880: 20 20 20 20 20 20 20 20 20 3b 20 23 20 4e 6f 74           ; # Not
3890: 65 3a 20 46 6f 72 20 74 68 65 20 66 69 72 73 74  e: For the first
38a0: 20 72 65 76 69 73 69 6f 6e 20 6f 6e 20 61 20 62   revision on a b
38b0: 72 61 6e 63 68 20 74 68 65 20 72 65 76 69 73 69  ranch the revisi
38c0: 6f 6e 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  on.    #        
38d0: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20              ; # 
38e0: 69 74 20 77 61 73 20 73 70 61 77 6e 65 64 20 66  it was spawned f
38f0: 72 6f 6d 20 69 73 20 74 68 65 20 70 61 72 65 6e  rom is the paren
3900: 74 2e 20 4f 6e 6c 79 20 74 68 65 20 72 6f 6f 74  t. Only the root
3910: 20 72 65 76 69 73 69 6f 6e 0a 20 20 20 20 23 20   revision.    # 
3920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3930: 20 20 20 3b 20 23 20 6f 66 20 6d 79 66 69 6c 65     ; # of myfile
3940: 27 73 20 72 65 76 69 73 69 6f 6e 20 74 72 65 65  's revision tree
3950: 20 68 61 73 20 6e 6f 74 68 69 6e 67 20 73 65 74   has nothing set
3960: 20 68 65 72 65 2e 0a 20 20 20 20 23 20 20 20 20   here..    #    
3970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3980: 3b 20 23 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  ; #..    variabl
3990: 65 20 6d 79 63 68 69 6c 64 20 20 7b 7d 20 3b 20  e mychild  {} ; 
39a0: 23 20 52 65 66 20 74 6f 20 74 68 65 20 70 72 69  # Ref to the pri
39b0: 6d 61 72 79 20 63 68 69 6c 64 20 72 65 76 69 73  mary child revis
39c0: 69 6f 6e 20 6f 62 6a 65 63 74 2c 20 69 2e 65 2e  ion object, i.e.
39d0: 20 74 68 65 20 6e 65 78 74 0a 20 20 20 20 23 20   the next.    # 
39e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
39f0: 20 20 20 3b 20 23 20 72 65 76 69 73 69 6f 6e 20     ; # revision 
3a00: 69 6e 20 74 68 65 20 73 61 6d 65 20 6c 69 6e 65  in the same line
3a10: 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 2e   of development.
3a20: 0a 0a 20 20 20 20 23 20 42 72 61 6e 63 68 20 6c  ..    # Branch l
3a30: 69 6e 6b 61 67 65 20 5f 5f 5f 5f 5f 5f 5f 5f 5f  inkage _________
3a40: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20  ___________..   
3a50: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e   variable mybran
3a60: 63 68 65 73 20 20 20 20 20 7b 7d 20 3b 20 23 20  ches     {} ; # 
3a70: 4c 69 73 74 20 6f 66 20 74 68 65 20 62 72 61 6e  List of the bran
3a80: 63 68 65 73 20 28 6f 62 6a 73 29 20 73 70 61 77  ches (objs) spaw
3a90: 6e 65 64 20 62 79 20 74 68 69 73 20 72 65 76 69  ned by this revi
3aa0: 73 69 6f 6e 2e 0a 20 20 20 20 76 61 72 69 61 62  sion..    variab
3ab0: 6c 65 20 6d 79 70 61 72 65 6e 74 62 72 61 6e 63  le myparentbranc
3ac0: 68 20 7b 7d 20 3b 20 23 20 46 6f 72 20 74 68 65  h {} ; # For the
3ad0: 20 66 69 72 73 74 20 72 65 76 69 73 69 6f 6e 20   first revision 
3ae0: 6f 6e 20 61 20 62 72 61 6e 63 68 20 74 68 65 20  on a branch the 
3af0: 72 65 6c 65 76 61 6e 74 0a 20 20 20 20 23 20 20  relevant.    #  
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 62 72 61 6e          ; # bran
3b20: 63 68 20 6f 62 6a 65 63 74 2e 20 54 68 69 73 20  ch object. This 
3b30: 61 6c 73 6f 20 61 6c 6c 6f 77 73 20 75 73 20 74  also allows us t
3b40: 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 0a 20  o determine if. 
3b50: 20 20 20 23 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 20 20 3b 20                ; 
3b70: 23 20 6d 79 70 61 72 65 6e 74 20 69 73 20 69 6e  # myparent is in
3b80: 20 74 68 65 20 73 61 6d 65 20 4c 4f 44 2c 20 6f   the same LOD, o
3b90: 72 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20 74  r the revision t
3ba0: 68 65 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  he.    #        
3bb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3bc0: 20 20 3b 20 23 20 62 72 61 6e 63 68 20 73 70 61    ; # branch spa
3bd0: 77 6e 65 64 20 66 72 6f 6d 2e 0a 0a 20 20 20 20  wned from...    
3be0: 23 20 4c 69 73 74 20 6f 66 20 74 68 65 20 72 65  # List of the re
3bf0: 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 73 20 6f  vision objects o
3c00: 66 20 74 68 65 20 66 69 72 73 74 20 63 6f 6d 6d  f the first comm
3c10: 69 74 73 20 6f 6e 20 61 6e 79 0a 20 20 20 20 23  its on any.    #
3c20: 20 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65   branches spawne
3c30: 64 20 62 79 20 74 68 69 73 20 72 65 76 69 73 69  d by this revisi
3c40: 6f 6e 20 6f 6e 20 77 68 69 63 68 20 63 6f 6d 6d  on on which comm
3c50: 69 74 73 20 6f 63 63 75 72 72 65 64 2e 0a 20 20  its occurred..  
3c60: 20 20 23 20 54 68 69 73 20 64 65 70 65 6e 64 65    # This depende
3c70: 6e 63 79 20 69 73 20 6b 65 70 74 20 65 78 70 6c  ncy is kept expl
3c80: 69 63 69 74 6c 79 20 62 65 63 61 75 73 65 20 6f  icitly because o
3c90: 74 68 65 72 77 69 73 65 20 61 0a 20 20 20 20 23  therwise a.    #
3ca0: 20 72 65 76 69 73 69 6f 6e 2d 6f 6e 6c 79 20 74   revision-only t
3cb0: 6f 70 6f 6c 6f 67 69 63 61 6c 20 73 6f 72 74 20  opological sort 
3cc0: 77 6f 75 6c 64 20 6d 69 73 73 20 74 68 65 20 64  would miss the d
3cd0: 65 70 65 6e 64 65 6e 63 79 20 74 68 61 74 0a 20  ependency that. 
3ce0: 20 20 20 23 20 65 78 69 73 74 73 20 76 69 61 20     # exists via 
3cf0: 2d 3e 20 6d 79 62 72 61 6e 63 68 65 73 2e 0a 0a  -> mybranches...
3d00: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62      variable myb
3d10: 72 61 6e 63 68 63 68 69 6c 64 72 65 6e 20 7b 7d  ranchchildren {}
3d20: 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 74 68 65   ; # List of the
3d30: 20 72 65 76 69 73 69 6f 6e 73 20 28 6f 62 6a 73   revisions (objs
3d40: 29 20 77 68 69 63 68 20 61 72 65 20 74 68 65 20  ) which are the 
3d50: 66 69 72 73 74 0a 20 20 20 20 23 20 20 20 20 20  first.    #     
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 63 6f 6d 6d 69         ; # commi
3d80: 74 73 20 6f 6e 20 61 6e 79 20 6f 66 20 74 68 65  ts on any of the
3d90: 20 62 72 61 6e 63 68 65 73 20 73 70 61 77 6e 65   branches spawne
3da0: 64 20 66 72 6f 6d 20 74 68 69 73 0a 20 20 20 20  d from this.    
3db0: 23 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 20 20 3b 20 23               ; #
3dd0: 20 72 65 76 69 73 69 6f 6e 2e 20 54 68 65 20 64   revision. The d
3de0: 65 70 65 6e 64 65 6e 63 79 20 69 73 20 6b 65 70  ependency is kep
3df0: 74 20 65 78 70 6c 69 63 69 74 6c 79 20 74 6f 0a  t explicitly to.
3e00: 20 20 20 20 23 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 20 20 20                  
3e20: 20 3b 20 23 20 65 6e 73 75 72 65 20 74 68 61 74   ; # ensure that
3e30: 20 61 20 72 65 76 69 73 69 6f 6e 2d 6f 6e 6c 79   a revision-only
3e40: 20 74 6f 70 6f 6c 6f 67 69 63 61 6c 20 73 6f 72   topological sor
3e50: 74 20 77 69 6c 6c 0a 20 20 20 20 23 20 20 20 20  t will.    #    
3e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3e70: 20 20 20 20 20 20 20 20 3b 20 23 20 6e 6f 74 20          ; # not 
3e80: 6d 69 73 73 20 69 74 2c 20 61 73 20 69 74 20 6f  miss it, as it o
3e90: 74 68 65 72 77 69 73 65 20 65 78 69 73 74 73 20  therwise exists 
3ea0: 6f 6e 6c 79 20 76 69 61 0a 20 20 20 20 23 20 20  only via.    #  
3eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3ec0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 6d 79            ; # my
3ed0: 62 72 61 6e 63 68 65 73 2e 0a 0a 20 20 20 20 23  branches...    #
3ee0: 20 54 61 67 20 6c 69 6e 6b 61 67 65 20 5f 5f 5f   Tag linkage ___
3ef0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
3f00: 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 76 61 72 69 61  _____..    varia
3f10: 62 6c 65 20 6d 79 74 61 67 73 20 7b 7d 20 3b 20  ble mytags {} ; 
3f20: 23 20 4c 69 73 74 20 6f 66 20 74 61 67 73 20 28  # List of tags (
3f30: 6f 62 6a 73 29 20 61 73 73 6f 63 69 61 74 65 64  objs) associated
3f40: 20 77 69 74 68 20 74 68 69 73 20 72 65 76 69 73   with this revis
3f50: 69 6f 6e 2e 0a 0a 20 20 20 20 23 20 4d 6f 72 65  ion...    # More
3f60: 20 64 65 72 69 76 65 64 20 64 61 74 61 0a 0a 20   derived data.. 
3f70: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6f 70     variable myop
3f80: 65 72 61 74 69 6f 6e 20 20 20 20 20 20 20 20 7b  eration        {
3f90: 7d 20 3b 20 23 20 4f 6e 65 20 6f 66 20 27 61 64  } ; # One of 'ad
3fa0: 64 27 2c 20 27 63 68 61 6e 67 65 27 2c 20 27 64  d', 'change', 'd
3fb0: 65 6c 65 74 65 27 2c 20 6f 72 0a 09 09 09 20 20  elete', or....  
3fc0: 20 20 20 20 20 20 20 20 20 20 20 23 20 27 6e 6f             # 'no
3fd0: 74 68 69 6e 67 27 2e 20 44 65 72 69 76 65 64 20  thing'. Derived 
3fe0: 66 72 6f 6d 20 6f 75 72 20 61 6e 64 0a 09 09 09  from our and....
3ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 69               # i
4000: 74 73 20 70 61 72 65 6e 74 27 73 20 73 74 61 74  ts parent's stat
4010: 65 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  e..    variable 
4020: 6d 79 69 73 6f 6e 64 65 66 61 75 6c 74 62 72 61  myisondefaultbra
4030: 6e 63 68 20 30 20 3b 20 23 20 42 6f 6f 6c 65 61  nch 0 ; # Boolea
4040: 6e 20 66 6c 61 67 2c 20 73 65 74 20 69 66 20 74  n flag, set if t
4050: 68 65 0a 09 09 09 09 20 20 20 20 20 23 20 72 65  he.....     # re
4060: 76 69 73 69 6f 6e 20 69 73 20 6f 6e 20 74 68 65  vision is on the
4070: 20 6e 6f 6e 2d 74 72 75 6e 6b 0a 09 09 09 09 20   non-trunk..... 
4080: 20 20 20 20 23 20 64 65 66 61 75 6c 74 20 62 72      # default br
4090: 61 6e 63 68 2c 20 61 6b 61 20 76 65 6e 64 6f 72  anch, aka vendor
40a0: 0a 09 09 09 09 20 20 20 20 20 23 20 62 72 61 6e  .....     # bran
40b0: 63 68 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  ch..    variable
40c0: 20 6d 79 64 62 70 61 72 65 6e 74 20 20 20 20 20   mydbparent     
40d0: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72      {} ; # Refer
40e0: 65 6e 63 65 20 74 6f 20 74 68 65 20 6c 61 73 74  ence to the last
40f0: 20 72 65 76 69 73 69 6f 6e 0a 09 09 09 09 20 20   revision.....  
4100: 20 20 20 23 20 6f 6e 20 74 68 65 20 76 65 6e 64     # on the vend
4110: 6f 72 20 62 72 61 6e 63 68 20 69 66 20 74 68 69  or branch if thi
4120: 73 20 69 73 0a 09 09 09 09 20 20 20 20 20 23 20  s is.....     # 
4130: 74 68 65 20 70 72 69 6d 61 72 79 20 63 68 69 6c  the primary chil
4140: 64 20 6f 66 20 74 68 65 0a 09 09 09 09 20 20 20  d of the.....   
4150: 20 20 23 20 72 65 67 75 6c 61 72 20 72 6f 6f 74    # regular root
4160: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
4170: 79 64 62 63 68 69 6c 64 20 20 20 20 20 20 20 20  ydbchild        
4180: 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e    {} ; # Referen
4190: 63 65 20 74 6f 20 74 68 65 20 70 72 69 6d 61 72  ce to the primar
41a0: 79 20 63 68 69 6c 64 0a 09 09 09 09 20 20 20 20  y child.....    
41b0: 20 23 20 6f 66 20 74 68 65 20 72 65 67 75 6c 61   # of the regula
41c0: 72 20 72 6f 6f 74 20 69 66 20 74 68 69 73 20 69  r root if this i
41d0: 73 0a 09 09 09 09 20 20 20 20 20 23 20 74 68 65  s.....     # the
41e0: 20 6c 61 73 74 20 72 65 76 69 73 69 6f 6e 20 6f   last revision o
41f0: 6e 20 74 68 65 20 76 65 6e 64 6f 72 0a 09 09 09  n the vendor....
4200: 09 20 20 20 20 20 23 20 62 72 61 6e 63 68 2e 0a  .     # branch..
4210: 0a 20 20 20 20 23 20 64 65 61 64 28 73 65 6c 66  .    # dead(self
4220: 29 20 78 20 64 65 61 64 28 70 61 72 65 6e 74 29  ) x dead(parent)
4230: 20 2d 3e 20 6f 70 65 72 61 74 69 6f 6e 0a 20 20   -> operation.  
4240: 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d    typevariable m
4250: 79 6f 70 73 74 61 74 65 20 2d 61 72 72 61 79 20  yopstate -array 
4260: 7b 0a 09 7b 30 20 30 7d 20 63 68 61 6e 67 65 0a  {..{0 0} change.
4270: 09 7b 30 20 31 7d 20 64 65 6c 65 74 65 0a 09 7b  .{0 1} delete..{
4280: 31 20 30 7d 20 61 64 64 0a 09 7b 31 20 31 7d 20  1 0} add..{1 1} 
4290: 6e 6f 74 68 69 6e 67 0a 20 20 20 20 7d 0a 0a 20  nothing.    }.. 
42a0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 67 65     typemethod ge
42b0: 74 6f 70 63 6f 64 65 73 20 7b 7d 20 7b 0a 09 66  topcodes {} {..f
42c0: 6f 72 65 61 63 68 20 7b 69 64 20 6e 61 6d 65 7d  oreach {id name}
42d0: 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20   [state run {.. 
42e0: 20 20 20 53 45 4c 45 43 54 20 6f 69 64 2c 20 6e     SELECT oid, n
42f0: 61 6d 65 20 46 52 4f 4d 20 6f 70 74 79 70 65 3b  ame FROM optype;
4300: 0a 09 7d 5d 20 7b 20 73 65 74 20 6d 79 6f 70 63  ..}] { set myopc
4310: 6f 64 65 28 24 6e 61 6d 65 29 20 24 69 64 20 7d  ode($name) $id }
4320: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
4330: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65      typevariable
4340: 20 6d 79 6f 70 63 6f 64 65 20 2d 61 72 72 61 79   myopcode -array
4350: 20 7b 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20   {}..    # # ## 
4360: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
4370: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
4380: 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61 6c  .    ## Internal
4390: 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 23 20   methods..    # 
43a0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
43b0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
43c0: 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e  #####.    ## Con
43d0: 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20  figuration..    
43e0: 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69  pragma -hastypei
43f0: 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e  nfo    no  ; # n
4400: 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65 63  o type introspec
4410: 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20  tion.    pragma 
4420: 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20 20  -hasinfo        
4430: 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 63  no  ; # no objec
4440: 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a  t introspection.
4450: 20 20 20 20 70 72 61 67 6d 61 20 2d 73 69 6d 70      pragma -simp
4460: 6c 65 64 69 73 70 61 74 63 68 20 79 65 73 20 3b  ledispatch yes ;
4470: 20 23 20 73 69 6d 70 6c 65 20 66 61 73 74 20 64   # simple fast d
4480: 69 73 70 61 74 63 68 0a 0a 20 20 20 20 23 20 23  ispatch..    # #
4490: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
44a0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
44b0: 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63  ####.}..namespac
44c0: 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73  e eval ::vc::fos
44d0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
44e0: 3a 3a 66 69 6c 65 20 7b 0a 20 20 20 20 6e 61 6d  ::file {.    nam
44f0: 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 72 65  espace export re
4500: 76 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  v.    namespace 
4510: 65 76 61 6c 20 72 65 76 20 7b 0a 09 6e 61 6d 65  eval rev {..name
4520: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
4530: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a  c::tools::misc::
4540: 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  *..namespace imp
4550: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  ort ::vc::fossil
4560: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73  ::import::cvs::s
4570: 74 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 65 20  tate..namespace 
4580: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73  import ::vc::fos
4590: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
45a0: 3a 3a 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20  ::integrity.    
45b0: 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20  }.}..# # ## ### 
45c0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
45d0: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
45e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
45f0: 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63  ##.## Ready..pac
4600: 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a  kage provide vc:
4610: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
4620: 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 72 65 76 20  :cvs::file::rev 
4630: 31 2e 30 0a 72 65 74 75 72 6e 0a                 1.0.return.