Hex Artifact Content
Not logged in

Artifact a9a75d2cd27f50eeb2689c144ae884f61cad996a:

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

0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23  ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69  07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66  es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65  tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69  d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e  n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20  SE, which.# you 
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65  should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ived as part of 
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f  this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74  n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72   voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79  ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75   many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20  als.  For exact 
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73  contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65  tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79  vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c   and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66  able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e  ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23  com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 53 79 6d  ########..## Sym
0200: 62 6f 6c 73 20 28 54 61 67 73 2c 20 42 72 61 6e  bols (Tags, Bran
0210: 63 68 65 73 29 20 70 65 72 20 66 69 6c 65 2e 0a  ches) per file..
0220: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23  .# # ## ### ####
0230: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
0240: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
0260: 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 0a 0a  # Requirements..
0270: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0280: 54 63 6c 20 38 2e 34 20 20 20 20 20 20 20 20 20  Tcl 8.4         
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 3b 20 23 20 52 65 71 75 69 72 65 64      ; # Required
02b0: 20 72 75 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 67   runtime..packag
02c0: 65 20 72 65 71 75 69 72 65 20 73 6e 69 74 20 20  e require snit  
02d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
02f0: 23 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63  # OO system..pac
0300: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a  kage require vc:
0310: 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 20  :tools::trouble 
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 3b 20 23 20 45 72 72 6f 72 20 72 65 70 6f 72   ; # Error repor
0340: 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72 65  ting..package re
0350: 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c  quire vc::fossil
0360: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66  ::import::cvs::f
0370: 69 6c 65 3a 3a 72 65 76 20 20 3b 20 23 20 43 56  ile::rev  ; # CV
0380: 53 20 70 65 72 20 66 69 6c 65 20 72 65 76 69 73  S per file revis
0390: 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72 65  ions..package re
03a0: 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c  quire vc::fossil
03b0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73  ::import::cvs::s
03c0: 74 61 74 65 20 20 20 20 20 20 3b 20 23 20 53 74  tate      ; # St
03d0: 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63  ate storage..pac
03e0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a  kage require vc:
03f0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
0400: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 20  :cvs::integrity 
0410: 20 3b 20 23 20 53 74 61 74 65 20 69 6e 74 65 67   ; # State integ
0420: 72 69 74 79 20 63 68 65 63 6b 73 2e 0a 0a 23 20  rity checks...# 
0430: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
0440: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0450: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0460: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 0a 0a  ###########.##..
0470: 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a  snit::type ::vc:
0480: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
0490: 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20  :cvs::file::sym 
04a0: 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  {.    # # ## ###
04b0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
04c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
04d0: 20 20 23 23 20 50 75 62 6c 69 63 20 41 50 49 0a    ## Public API.
04e0: 0a 20 20 20 20 63 6f 6e 73 74 72 75 63 74 6f 72  .    constructor
04f0: 20 7b 73 79 6d 74 79 70 65 20 6e 72 20 73 79 6d   {symtype nr sym
0500: 62 6f 6c 20 66 69 6c 65 7d 20 7b 0a 09 73 65 74  bol file} {..set
0510: 20 6d 79 66 69 6c 65 20 20 20 24 66 69 6c 65 0a   myfile   $file.
0520: 09 73 65 74 20 6d 79 74 79 70 65 20 20 20 24 73  .set mytype   $s
0530: 79 6d 74 79 70 65 0a 09 73 65 74 20 6d 79 6e 72  ymtype..set mynr
0540: 20 20 20 20 20 24 6e 72 0a 09 73 65 74 20 6d 79       $nr..set my
0550: 73 79 6d 62 6f 6c 20 24 73 79 6d 62 6f 6c 0a 0a  symbol $symbol..
0560: 09 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d  .switch -exact -
0570: 2d 20 24 6d 79 74 79 70 65 20 7b 0a 09 20 20 20  - $mytype {..   
0580: 20 62 72 61 6e 63 68 20 20 7b 20 53 65 74 75 70   branch  { Setup
0590: 42 72 61 6e 63 68 20 3b 20 72 65 74 75 72 6e 20  Branch ; return 
05a0: 7d 0a 09 20 20 20 20 74 61 67 20 20 20 20 20 7b  }..    tag     {
05b0: 20 72 65 74 75 72 6e 20 7d 0a 09 7d 0a 09 69 6e   return }..}..in
05c0: 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20 30  tegrity assert 0
05d0: 20 7b 42 61 64 20 73 79 6d 62 6f 6c 20 74 79 70   {Bad symbol typ
05e0: 65 20 27 24 6d 79 74 79 70 65 27 7d 0a 09 72 65  e '$mytype'}..re
05f0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
0600: 6d 65 74 68 6f 64 20 64 65 66 69 64 20 7b 7d 20  method defid {} 
0610: 7b 0a 09 73 65 74 20 6d 79 69 64 20 5b 69 6e 63  {..set myid [inc
0620: 72 20 6d 79 69 64 63 6f 75 6e 74 65 72 5d 0a 09  r myidcounter]..
0630: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
0640: 20 20 6d 65 74 68 6f 64 20 66 69 64 20 20 20 20    method fid    
0650: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 69  {} { return $myi
0660: 64 20 20 20 20 20 7d 0a 20 20 20 20 6d 65 74 68  d     }.    meth
0670: 6f 64 20 73 79 6d 62 6f 6c 20 7b 7d 20 7b 20 72  od symbol {} { r
0680: 65 74 75 72 6e 20 24 6d 79 73 79 6d 62 6f 6c 20  eturn $mysymbol 
0690: 7d 0a 0a 20 20 20 20 23 20 53 79 6d 62 6f 6c 20  }..    # Symbol 
06a0: 61 63 65 73 73 6f 72 20 6d 65 74 68 6f 64 73 2e  acessor methods.
06b0: 0a 0a 20 20 20 20 64 65 6c 65 67 61 74 65 20 6d  ..    delegate m
06c0: 65 74 68 6f 64 20 6e 61 6d 65 20 74 6f 20 6d 79  ethod name to my
06d0: 73 79 6d 62 6f 6c 0a 20 20 20 20 64 65 6c 65 67  symbol.    deleg
06e0: 61 74 65 20 6d 65 74 68 6f 64 20 69 64 20 20 20  ate method id   
06f0: 74 6f 20 6d 79 73 79 6d 62 6f 6c 0a 0a 20 20 20  to mysymbol..   
0700: 20 23 20 53 79 6d 62 6f 6c 20 61 67 67 72 65 67   # Symbol aggreg
0710: 61 74 69 6f 6e 20 6d 65 74 68 6f 64 73 0a 0a 20  ation methods.. 
0720: 20 20 20 64 65 6c 65 67 61 74 65 20 6d 65 74 68     delegate meth
0730: 6f 64 20 63 6f 75 6e 74 61 73 62 72 61 6e 63 68  od countasbranch
0740: 20 74 6f 20 6d 79 73 79 6d 62 6f 6c 0a 20 20 20   to mysymbol.   
0750: 20 64 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64   delegate method
0760: 20 63 6f 75 6e 74 61 73 74 61 67 20 20 20 20 74   countastag    t
0770: 6f 20 6d 79 73 79 6d 62 6f 6c 0a 20 20 20 20 64  o mysymbol.    d
0780: 65 6c 65 67 61 74 65 20 6d 65 74 68 6f 64 20 63  elegate method c
0790: 6f 75 6e 74 61 63 6f 6d 6d 69 74 20 20 74 6f 20  ountacommit  to 
07a0: 6d 79 73 79 6d 62 6f 6c 0a 0a 20 20 20 20 6d 65  mysymbol..    me
07b0: 74 68 6f 64 20 62 6c 6f 63 6b 65 64 62 79 20 7b  thod blockedby {
07c0: 66 73 79 6d 62 6f 6c 7d 20 7b 0a 09 24 6d 79 73  fsymbol} {..$mys
07d0: 79 6d 62 6f 6c 20 62 6c 6f 63 6b 65 64 62 79 20  ymbol blockedby 
07e0: 5b 24 66 73 79 6d 62 6f 6c 20 73 79 6d 62 6f 6c  [$fsymbol symbol
07f0: 5d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  ]..return.    }.
0800: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 6f 73 73  .    method poss
0810: 69 62 6c 65 70 61 72 65 6e 74 73 20 7b 7d 20 7b  ibleparents {} {
0820: 0a 09 73 77 69 74 63 68 20 2d 65 78 61 63 74 20  ..switch -exact 
0830: 2d 2d 20 24 6d 79 74 79 70 65 20 7b 0a 09 20 20  -- $mytype {..  
0840: 20 20 62 72 61 6e 63 68 20 7b 20 24 73 65 6c 66    branch { $self
0850: 20 42 72 61 6e 63 68 50 61 72 65 6e 74 73 20 7d   BranchParents }
0860: 0a 09 20 20 20 20 74 61 67 20 20 20 20 7b 20 24  ..    tag    { $
0870: 73 65 6c 66 20 54 61 67 50 61 72 65 6e 74 73 20  self TagParents 
0880: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a     }..}..return.
0890: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
08a0: 64 20 42 72 61 6e 63 68 50 61 72 65 6e 74 73 20  d BranchParents 
08b0: 7b 7d 20 7b 0a 09 23 20 54 68 65 20 22 6f 62 76  {} {..# The "obv
08c0: 69 6f 75 73 22 20 70 61 72 65 6e 74 20 6f 66 20  ious" parent of 
08d0: 61 20 62 72 61 6e 63 68 20 69 73 20 74 68 65 20  a branch is the 
08e0: 62 72 61 6e 63 68 20 68 6f 6c 64 69 6e 67 20 74  branch holding t
08f0: 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 73  he..# revision s
0900: 70 61 77 6e 69 6e 67 20 74 68 65 20 62 72 61 6e  pawning the bran
0910: 63 68 2e 20 41 6e 79 20 6f 74 68 65 72 20 62 72  ch. Any other br
0920: 61 6e 63 68 65 73 20 74 68 61 74 20 61 72 65 0a  anches that are.
0930: 09 23 20 72 6f 6f 74 65 64 20 61 74 20 74 68 65  .# rooted at the
0940: 20 73 61 6d 65 20 72 65 76 69 73 69 6f 6e 20 61   same revision a
0950: 6e 64 20 77 65 72 65 20 63 6f 6d 6d 69 74 74 65  nd were committe
0960: 64 20 65 61 72 6c 69 65 72 20 74 68 61 6e 0a 09  d earlier than..
0970: 23 20 74 68 65 20 62 72 61 6e 63 68 20 61 72 65  # the branch are
0980: 20 61 6c 73 6f 20 70 6f 73 73 69 62 6c 65 20 70   also possible p
0990: 61 72 65 6e 74 73 2e 0a 0a 09 24 6d 79 73 79 6d  arents....$mysym
09a0: 62 6f 6c 20 70 6f 73 73 69 62 6c 65 70 61 72 65  bol possiblepare
09b0: 6e 74 20 5b 5b 24 6d 79 62 72 61 6e 63 68 70 61  nt [[$mybranchpa
09c0: 72 65 6e 74 20 6c 6f 64 5d 20 73 79 6d 62 6f 6c  rent lod] symbol
09d0: 5d 0a 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e  ]...foreach bran
09e0: 63 68 20 5b 24 6d 79 62 72 61 6e 63 68 70 61 72  ch [$mybranchpar
09f0: 65 6e 74 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a  ent branches] {.
0a00: 09 20 20 20 20 23 20 41 20 62 72 61 6e 63 68 20  .    # A branch 
0a10: 63 61 6e 6e 6f 74 20 62 65 20 69 74 73 20 6f 77  cannot be its ow
0a20: 6e 20 70 61 72 65 6e 74 2e 20 4e 6f 72 20 63 61  n parent. Nor ca
0a30: 6e 20 61 20 62 72 61 6e 63 68 0a 09 20 20 20 20  n a branch..    
0a40: 23 20 63 72 65 61 74 65 64 20 61 66 74 65 72 20  # created after 
0a50: 74 68 69 73 20 6f 6e 65 20 62 65 20 69 74 73 20  this one be its 
0a60: 70 61 72 65 6e 74 2e 20 54 68 69 73 20 6d 65 61  parent. This mea
0a70: 6e 73 20 74 68 61 74 20 77 65 0a 09 20 20 20 20  ns that we..    
0a80: 23 20 63 61 6e 20 61 62 6f 72 74 20 74 68 65 20  # can abort the 
0a90: 6c 6f 6f 70 20 77 68 65 6e 20 77 65 20 68 61 76  loop when we hav
0aa0: 65 20 72 65 61 63 68 65 64 20 6f 75 72 73 65 6c  e reached oursel
0ab0: 76 65 73 20 69 6e 20 74 68 65 0a 09 20 20 20 20  ves in the..    
0ac0: 23 20 6c 69 73 74 20 6f 66 20 62 72 61 6e 63 68  # list of branch
0ad0: 65 73 2e 20 48 65 72 65 20 74 68 65 20 6f 72 64  es. Here the ord
0ae0: 65 72 20 6f 66 20 66 69 6c 65 3a 3a 72 65 76 2e  er of file::rev.
0af0: 6d 79 62 72 61 6e 63 68 65 73 0a 09 20 20 20 20  mybranches..    
0b00: 23 20 63 6f 6d 65 73 20 69 6e 74 6f 20 70 6c 61  # comes into pla
0b10: 79 2c 20 61 73 20 63 72 65 61 74 65 64 20 62 79  y, as created by
0b20: 20 66 69 6c 65 3a 3a 72 65 76 3a 3a 73 6f 72 74   file::rev::sort
0b30: 62 72 61 6e 63 68 65 73 2e 0a 0a 09 20 20 20 20  branches....    
0b40: 69 66 20 7b 24 62 72 61 6e 63 68 20 65 71 20 24  if {$branch eq $
0b50: 73 65 6c 66 7d 20 62 72 65 61 6b 0a 09 20 20 20  self} break..   
0b60: 20 24 6d 79 73 79 6d 62 6f 6c 20 70 6f 73 73 69   $mysymbol possi
0b70: 62 6c 65 70 61 72 65 6e 74 20 5b 24 62 72 61 6e  bleparent [$bran
0b80: 63 68 20 73 79 6d 62 6f 6c 5d 0a 09 7d 0a 09 72  ch symbol]..}..r
0b90: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
0ba0: 20 6d 65 74 68 6f 64 20 54 61 67 50 61 72 65 6e   method TagParen
0bb0: 74 73 20 7b 7d 20 7b 0a 09 23 20 54 68 65 20 22  ts {} {..# The "
0bc0: 6f 62 76 69 6f 75 73 22 20 70 61 72 65 6e 74 20  obvious" parent 
0bd0: 6f 66 20 61 20 74 61 67 20 69 73 20 74 68 65 20  of a tag is the 
0be0: 62 72 61 6e 63 68 20 68 6f 6c 64 69 6e 67 20 74  branch holding t
0bf0: 68 65 0a 09 23 20 72 65 76 69 73 69 6f 6e 20 73  he..# revision s
0c00: 70 61 77 6e 69 6e 67 20 74 68 65 20 74 61 67 2e  pawning the tag.
0c10: 20 42 72 61 6e 63 68 65 73 20 74 68 61 74 20 61   Branches that a
0c20: 72 65 20 73 70 61 77 6e 65 64 20 62 79 20 74 68  re spawned by th
0c30: 65 0a 09 23 20 73 61 6d 65 20 72 65 76 69 73 69  e..# same revisi
0c40: 6f 6e 20 61 72 65 20 61 6c 73 6f 20 70 6f 73 73  on are also poss
0c50: 69 62 6c 65 20 70 61 72 65 6e 74 73 2e 0a 0a 09  ible parents....
0c60: 24 6d 79 73 79 6d 62 6f 6c 20 70 6f 73 73 69 62  $mysymbol possib
0c70: 6c 65 70 61 72 65 6e 74 20 5b 5b 24 6d 79 74 61  leparent [[$myta
0c80: 67 72 65 76 20 6c 6f 64 5d 20 73 79 6d 62 6f 6c  grev lod] symbol
0c90: 5d 0a 0a 09 66 6f 72 65 61 63 68 20 62 72 61 6e  ]...foreach bran
0ca0: 63 68 20 5b 24 6d 79 74 61 67 72 65 76 20 62 72  ch [$mytagrev br
0cb0: 61 6e 63 68 65 73 5d 20 7b 0a 09 20 20 20 20 24  anches] {..    $
0cc0: 6d 79 73 79 6d 62 6f 6c 20 70 6f 73 73 69 62 6c  mysymbol possibl
0cd0: 65 70 61 72 65 6e 74 20 5b 24 62 72 61 6e 63 68  eparent [$branch
0ce0: 20 73 79 6d 62 6f 6c 5d 0a 09 7d 0a 09 72 65 74   symbol]..}..ret
0cf0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
0d00: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 73 74  ..    method ist
0d10: 72 75 6e 6b 20 7b 7d 20 7b 20 72 65 74 75 72 6e  runk {} { return
0d20: 20 30 20 7d 0a 0a 20 20 20 20 23 20 42 72 61 6e   0 }..    # Bran
0d30: 63 68 20 61 63 65 73 73 6f 72 20 6d 65 74 68 6f  ch acessor metho
0d40: 64 73 2e 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ds...    method 
0d50: 73 65 74 63 68 69 6c 64 72 65 76 6e 72 20 20 7b  setchildrevnr  {
0d60: 72 65 76 6e 72 7d 20 7b 0a 09 69 6e 74 65 67 72  revnr} {..integr
0d70: 69 74 79 20 61 73 73 65 72 74 20 7b 24 6d 79 62  ity assert {$myb
0d80: 72 61 6e 63 68 63 68 69 6c 64 72 65 76 6e 72 20  ranchchildrevnr 
0d90: 65 71 20 22 22 7d 20 7b 43 68 69 6c 64 20 61 6c  eq ""} {Child al
0da0: 72 65 61 64 79 20 64 65 66 69 6e 65 64 7d 0a 09  ready defined}..
0db0: 73 65 74 20 6d 79 62 72 61 6e 63 68 63 68 69 6c  set mybranchchil
0dc0: 64 72 65 76 6e 72 20 24 72 65 76 6e 72 0a 09 72  drevnr $revnr..r
0dd0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
0de0: 20 6d 65 74 68 6f 64 20 73 65 74 70 6f 73 69 74   method setposit
0df0: 69 6f 6e 20 7b 6e 7d 20 20 20 7b 20 73 65 74 20  ion {n}   { set 
0e00: 6d 79 62 72 61 6e 63 68 70 6f 73 69 74 69 6f 6e  mybranchposition
0e10: 20 24 6e 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20   $n ; return }. 
0e20: 20 20 20 6d 65 74 68 6f 64 20 73 65 74 70 61 72     method setpar
0e30: 65 6e 74 20 20 20 7b 72 65 76 7d 20 7b 20 73 65  ent   {rev} { se
0e40: 74 20 6d 79 62 72 61 6e 63 68 70 61 72 65 6e 74  t mybranchparent
0e50: 20 24 72 65 76 20 3b 20 72 65 74 75 72 6e 20 7d   $rev ; return }
0e60: 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74 63  .    method setc
0e70: 68 69 6c 64 20 20 20 20 7b 72 65 76 7d 20 7b 20  hild    {rev} { 
0e80: 73 65 74 20 6d 79 62 72 61 6e 63 68 63 68 69 6c  set mybranchchil
0e90: 64 20 20 24 72 65 76 20 3b 20 72 65 74 75 72 6e  d  $rev ; return
0ea0: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 75   }.    method cu
0eb0: 74 63 68 69 6c 64 20 20 20 20 7b 7d 20 20 20 20  tchild    {}    
0ec0: 7b 20 73 65 74 20 6d 79 62 72 61 6e 63 68 63 68  { set mybranchch
0ed0: 69 6c 64 20 20 22 22 20 20 20 3b 20 72 65 74 75  ild  ""   ; retu
0ee0: 72 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64  rn }..    method
0ef0: 20 62 72 61 6e 63 68 6e 72 20 20 20 20 7b 7d 20   branchnr    {} 
0f00: 7b 20 72 65 74 75 72 6e 20 24 6d 79 6e 72 20 7d  { return $mynr }
0f10: 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 61 72 65  .    method pare
0f20: 6e 74 72 65 76 6e 72 20 7b 7d 20 7b 20 72 65 74  ntrevnr {} { ret
0f30: 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 70 61 72  urn $mybranchpar
0f40: 65 6e 74 72 65 76 6e 72 20 7d 0a 20 20 20 20 6d  entrevnr }.    m
0f50: 65 74 68 6f 64 20 63 68 69 6c 64 72 65 76 6e 72  ethod childrevnr
0f60: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d    {} { return $m
0f70: 79 62 72 61 6e 63 68 63 68 69 6c 64 72 65 76 6e  ybranchchildrevn
0f80: 72 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 68  r }.    method h
0f90: 61 73 63 68 69 6c 64 72 65 76 20 7b 7d 20 7b 20  aschildrev {} { 
0fa0: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6d  return [expr {$m
0fb0: 79 62 72 61 6e 63 68 63 68 69 6c 64 72 65 76 6e  ybranchchildrevn
0fc0: 72 20 6e 65 20 22 22 7d 5d 20 7d 0a 20 20 20 20  r ne ""}] }.    
0fd0: 6d 65 74 68 6f 64 20 68 61 73 63 68 69 6c 64 20  method haschild 
0fe0: 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 5b     {} { return [
0ff0: 65 78 70 72 20 7b 24 6d 79 62 72 61 6e 63 68 63  expr {$mybranchc
1000: 68 69 6c 64 20 6e 65 20 22 22 7d 5d 20 7d 0a 20  hild ne ""}] }. 
1010: 20 20 20 6d 65 74 68 6f 64 20 70 61 72 65 6e 74     method parent
1020: 20 20 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72        {} { retur
1030: 6e 20 24 6d 79 62 72 61 6e 63 68 70 61 72 65 6e  n $mybranchparen
1040: 74 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 63  t }.    method c
1050: 68 69 6c 64 20 20 20 20 20 20 20 7b 7d 20 7b 20  hild       {} { 
1060: 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68  return $mybranch
1070: 63 68 69 6c 64 20 7d 0a 20 20 20 20 6d 65 74 68  child }.    meth
1080: 6f 64 20 70 6f 73 69 74 69 6f 6e 20 20 20 20 7b  od position    {
1090: 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 72  } { return $mybr
10a0: 61 6e 63 68 70 6f 73 69 74 69 6f 6e 20 7d 0a 0a  anchposition }..
10b0: 20 20 20 20 23 20 54 61 67 20 61 63 65 73 73 6f      # Tag acesso
10c0: 72 20 6d 65 74 68 6f 64 73 2e 0a 0a 20 20 20 20  r methods...    
10d0: 6d 65 74 68 6f 64 20 74 61 67 72 65 76 6e 72 20  method tagrevnr 
10e0: 20 7b 7d 20 20 20 20 7b 20 72 65 74 75 72 6e 20   {}    { return 
10f0: 24 6d 79 6e 72 20 7d 0a 20 20 20 20 6d 65 74 68  $mynr }.    meth
1100: 6f 64 20 73 65 74 74 61 67 72 65 76 20 7b 72 65  od settagrev {re
1110: 76 7d 20 7b 73 65 74 20 6d 79 74 61 67 72 65 76  v} {set mytagrev
1120: 20 24 72 65 76 20 3b 20 72 65 74 75 72 6e 20 7d   $rev ; return }
1130: 0a 0a 20 20 20 20 23 20 44 65 72 69 76 65 64 20  ..    # Derived 
1140: 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 0a 20 20 20  information..   
1150: 20 6d 65 74 68 6f 64 20 6c 6f 64 20 7b 7d 20 7b   method lod {} {
1160: 20 72 65 74 75 72 6e 20 24 6d 79 6c 6f 64 20 7d   return $mylod }
1170: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
1180: 6c 6f 64 20 7b 6c 6f 64 7d 20 7b 0a 09 73 65 74  lod {lod} {..set
1190: 20 6d 79 6c 6f 64 20 24 6c 6f 64 0a 09 24 73 65   mylod $lod..$se
11a0: 6c 66 20 63 68 65 63 6b 6c 6f 64 0a 09 72 65 74  lf checklod..ret
11b0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
11c0: 65 74 68 6f 64 20 63 68 65 63 6b 6c 6f 64 20 7b  ethod checklod {
11d0: 7d 20 7b 0a 09 23 20 43 6f 6e 73 69 73 74 65 6e  } {..# Consisten
11e0: 63 79 20 63 68 65 63 6b 2e 20 54 68 65 20 73 79  cy check. The sy
11f0: 6d 62 6f 6c 27 73 20 6c 69 6e 65 2d 6f 66 2d 64  mbol's line-of-d
1200: 65 76 65 6c 6f 70 6d 65 6e 74 20 68 61 73 20 74  evelopment has t
1210: 6f 0a 09 23 20 62 65 20 73 61 6d 65 20 61 73 20  o..# be same as 
1220: 74 68 65 20 6c 69 6e 65 2d 6f 66 2d 64 65 76 65  the line-of-deve
1230: 6c 6f 70 6d 65 6e 74 20 6f 66 20 69 74 73 20 73  lopment of its s
1240: 6f 75 72 63 65 20 28 70 61 72 65 6e 74 0a 09 23  ource (parent..#
1250: 20 72 65 76 69 73 69 6f 6e 20 6f 66 20 61 20 62   revision of a b
1260: 72 61 6e 63 68 2c 20 72 65 76 69 73 69 6f 6e 20  ranch, revision 
1270: 6f 66 20 61 20 74 61 67 20 69 74 73 65 6c 66 29  of a tag itself)
1280: 2e 0a 0a 09 73 77 69 74 63 68 20 2d 65 78 61 63  ....switch -exac
1290: 74 20 2d 2d 20 24 6d 79 74 79 70 65 20 7b 0a 09  t -- $mytype {..
12a0: 20 20 20 20 62 72 61 6e 63 68 20 20 7b 20 73 65      branch  { se
12b0: 74 20 73 6c 6f 64 20 5b 24 6d 79 62 72 61 6e 63  t slod [$mybranc
12c0: 68 70 61 72 65 6e 74 20 6c 6f 64 5d 20 7d 0a 09  hparent lod] }..
12d0: 20 20 20 20 74 61 67 20 20 20 20 20 7b 20 73 65      tag     { se
12e0: 74 20 73 6c 6f 64 20 5b 24 6d 79 74 61 67 72 65  t slod [$mytagre
12f0: 76 20 20 20 20 20 20 20 6c 6f 64 5d 20 7d 0a 09  v       lod] }..
1300: 7d 0a 0a 09 69 66 20 7b 24 6d 79 6c 6f 64 20 6e  }...if {$mylod n
1310: 65 20 24 73 6c 6f 64 7d 20 7b 0a 09 20 20 20 20  e $slod} {..    
1320: 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 46  trouble fatal "F
1330: 6f 72 20 24 6d 79 74 79 70 65 20 5b 24 6d 79 73  or $mytype [$mys
1340: 79 6d 62 6f 6c 20 6e 61 6d 65 5d 3a 20 4c 4f 44  ymbol name]: LOD
1350: 20 63 6f 6e 66 6c 69 63 74 20 77 69 74 68 20 73   conflict with s
1360: 6f 75 72 63 65 2c 20 27 5b 24 6d 79 6c 6f 64 20  ource, '[$mylod 
1370: 6e 61 6d 65 5d 27 20 76 73 2e 20 27 5b 24 73 6c  name]' vs. '[$sl
1380: 6f 64 20 6e 61 6d 65 5d 27 22 0a 09 20 20 20 20  od name]'"..    
1390: 72 65 74 75 72 6e 0a 09 7d 0a 09 72 65 74 75 72  return..}..retur
13a0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23  n.    }..    # #
13b0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
13c0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
13d0: 23 23 23 23 0a 0a 20 20 20 20 6d 65 74 68 6f 64  ####..    method
13e0: 20 70 65 72 73 69 73 74 20 7b 7d 20 7b 0a 09 23   persist {} {..#
13f0: 20 53 61 76 65 20 74 68 65 20 69 6e 66 6f 72 6d   Save the inform
1400: 61 74 69 6f 6e 20 77 65 20 6e 65 65 64 20 61 66  ation we need af
1410: 74 65 72 20 74 68 65 20 63 6f 6c 6c 65 63 74 69  ter the collecti
1420: 6f 6e 20 70 61 73 73 2e 0a 0a 09 73 65 74 20 66  on pass....set f
1430: 69 64 20 5b 24 6d 79 66 69 6c 65 20 20 20 69 64  id [$myfile   id
1440: 5d 0a 09 73 65 74 20 73 69 64 20 5b 24 6d 79 73  ]..set sid [$mys
1450: 79 6d 62 6f 6c 20 69 64 5d 0a 09 73 65 74 20 6c  ymbol id]..set l
1460: 6f 64 20 5b 24 6d 79 6c 6f 64 20 20 20 20 69 64  od [$mylod    id
1470: 5d 0a 0a 09 73 77 69 74 63 68 20 2d 65 78 61 63  ]...switch -exac
1480: 74 20 2d 2d 20 24 6d 79 74 79 70 65 20 7b 0a 09  t -- $mytype {..
1490: 20 20 20 20 74 61 67 20 7b 0a 09 09 73 65 74 20      tag {...set 
14a0: 72 69 64 20 5b 24 6d 79 74 61 67 72 65 76 20 69  rid [$mytagrev i
14b0: 64 5d 0a 09 09 73 74 61 74 65 20 74 72 61 6e 73  d]...state trans
14c0: 61 63 74 69 6f 6e 20 7b 0a 09 09 20 20 20 20 73  action {...    s
14d0: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 09 49 4e  tate run {....IN
14e0: 53 45 52 54 20 49 4e 54 4f 20 74 61 67 20 28 20  SERT INTO tag ( 
14f0: 74 69 64 2c 20 20 20 66 69 64 2c 20 20 6c 6f 64  tid,   fid,  lod
1500: 2c 20 20 73 69 64 2c 20 20 72 65 76 29 0a 09 09  ,  sid,  rev)...
1510: 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 20  .VALUES         
1520: 20 28 24 6d 79 69 64 2c 20 24 66 69 64 2c 20 24   ($myid, $fid, $
1530: 6c 6f 64 2c 20 24 73 69 64 2c 20 24 72 69 64 29  lod, $sid, $rid)
1540: 3b 0a 09 09 20 20 20 20 7d 0a 09 09 7d 0a 09 20  ;...    }...}.. 
1550: 20 20 20 7d 0a 09 20 20 20 20 62 72 61 6e 63 68     }..    branch
1560: 20 7b 0a 09 09 6c 61 70 70 65 6e 64 20 6d 61 70   {...lappend map
1570: 20 40 46 40 20 5b 65 78 70 72 20 7b 20 28 24 6d   @F@ [expr { ($m
1580: 79 62 72 61 6e 63 68 63 68 69 6c 64 20 65 71 20  ybranchchild eq 
1590: 22 22 29 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b  "") ? "NULL" : [
15a0: 24 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 20 69  $mybranchchild i
15b0: 64 5d 20 7d 5d 0a 0a 09 09 73 65 74 20 72 69 64  d] }]....set rid
15c0: 20 5b 24 6d 79 62 72 61 6e 63 68 70 61 72 65 6e   [$mybranchparen
15d0: 74 20 69 64 5d 0a 09 09 73 65 74 20 63 6d 64 20  t id]...set cmd 
15e0: 7b 0a 09 09 20 20 20 20 49 4e 53 45 52 54 20 49  {...    INSERT I
15f0: 4e 54 4f 20 62 72 61 6e 63 68 20 28 20 62 69 64  NTO branch ( bid
1600: 2c 20 20 20 66 69 64 2c 20 20 6c 6f 64 2c 20 20  ,   fid,  lod,  
1610: 73 69 64 2c 20 20 72 6f 6f 74 2c 20 66 69 72 73  sid,  root, firs
1620: 74 2c 20 62 72 61 2c 20 20 70 6f 73 20 20 20 20  t, bra,  pos    
1630: 20 20 20 20 20 20 20 20 20 20 29 0a 09 09 20 20            )...  
1640: 20 20 56 41 4c 55 45 53 20 20 20 20 20 20 20 20    VALUES        
1650: 20 20 20 20 20 28 24 6d 79 69 64 2c 20 24 66 69       ($myid, $fi
1660: 64 2c 20 24 6c 6f 64 2c 20 24 73 69 64 2c 20 24  d, $lod, $sid, $
1670: 72 69 64 2c 20 20 40 46 40 2c 20 20 24 6d 79 6e  rid,  @F@,  $myn
1680: 72 2c 20 24 6d 79 62 72 61 6e 63 68 70 6f 73 69  r, $mybranchposi
1690: 74 69 6f 6e 29 3b 0a 09 09 7d 0a 09 09 73 74 61  tion);...}...sta
16a0: 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b  te transaction {
16b0: 0a 09 09 20 20 20 20 73 74 61 74 65 20 72 75 6e  ...    state run
16c0: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 24 6d 61   [string map $ma
16d0: 70 20 24 63 6d 64 5d 0a 09 09 7d 0a 09 20 20 20  p $cmd]...}..   
16e0: 20 7d 0a 09 7d 0a 0a 09 72 65 74 75 72 6e 0a 20   }..}...return. 
16f0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23     }..    # # ##
1700: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
1710: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
1720: 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a  #.    ## State..
1730: 20 20 20 20 23 20 50 65 72 73 69 73 74 65 6e 74      # Persistent
1740: 3a 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 54  :.    #        T
1750: 61 67 3a 20 6d 79 69 64 20 20 20 20 20 20 20 20  ag: myid        
1760: 20 20 20 2d 20 74 61 67 2e 74 69 64 0a 20 20 20     - tag.tid.   
1770: 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6d   #             m
1780: 79 66 69 6c 65 20 20 20 20 20 20 20 20 20 2d 20  yfile         - 
1790: 74 61 67 2e 66 69 64 0a 20 20 20 20 23 20 20 20  tag.fid.    #   
17a0: 20 20 20 20 20 20 20 20 20 20 6d 79 6c 6f 64 20            mylod 
17b0: 20 20 20 20 20 20 20 20 20 2d 20 74 61 67 2e 6c           - tag.l
17c0: 6f 64 0a 20 20 20 20 23 20 20 20 20 20 20 20 20  od.    #        
17d0: 20 20 20 20 20 6d 79 73 79 6d 62 6f 6c 20 20 20       mysymbol   
17e0: 20 20 20 20 2d 20 74 61 67 2e 73 69 64 0a 20 20      - tag.sid.  
17f0: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
1800: 6d 79 74 61 67 72 65 76 20 20 20 20 20 20 20 2d  mytagrev       -
1810: 20 74 61 67 2e 72 65 76 0a 20 20 20 20 23 0a 20   tag.rev.    #. 
1820: 20 20 20 23 20 20 20 20 20 42 72 61 6e 63 68 3a     #     Branch:
1830: 20 6d 79 69 64 20 20 20 20 20 20 20 20 20 20 20   myid           
1840: 2d 20 62 72 61 6e 63 68 2e 62 69 64 0a 20 20 20  - branch.bid.   
1850: 20 23 09 09 20 20 6d 79 66 69 6c 65 20 20 20 20   #..  myfile    
1860: 20 20 20 20 20 2d 20 62 72 61 6e 63 68 2e 66 69       - branch.fi
1870: 64 0a 20 20 20 20 23 09 09 20 20 6d 79 6c 6f 64  d.    #..  mylod
1880: 20 20 20 20 20 20 20 20 20 20 2d 20 62 72 61 6e            - bran
1890: 63 68 2e 6c 6f 64 0a 20 20 20 20 23 20 20 20 20  ch.lod.    #    
18a0: 20 20 20 20 20 20 20 20 20 6d 79 73 79 6d 62 6f           mysymbo
18b0: 6c 20 20 20 20 20 20 20 2d 20 62 72 61 6e 63 68  l       - branch
18c0: 2e 73 69 64 0a 20 20 20 20 23 20 20 20 20 20 20  .sid.    #      
18d0: 20 20 20 20 20 20 20 6d 79 62 72 61 6e 63 68 70         mybranchp
18e0: 61 72 65 6e 74 20 2d 20 62 72 61 6e 63 68 2e 72  arent - branch.r
18f0: 6f 6f 74 0a 20 20 20 20 23 20 20 20 20 20 20 20  oot.    #       
1900: 20 20 20 20 20 20 6d 79 62 72 61 6e 63 68 63 68        mybranchch
1910: 69 6c 64 20 20 2d 20 62 72 61 6e 63 68 2e 66 69  ild  - branch.fi
1920: 72 73 74 0a 20 20 20 20 23 20 20 20 20 20 20 20  rst.    #       
1930: 20 20 20 20 20 20 6d 79 6e 72 20 20 20 20 20 20        mynr      
1940: 20 20 20 20 20 2d 20 62 72 61 6e 63 68 2e 62 72       - branch.br
1950: 61 0a 0a 20 20 20 20 74 79 70 65 76 61 72 69 61  a..    typevaria
1960: 62 6c 65 20 6d 79 69 64 63 6f 75 6e 74 65 72 20  ble myidcounter 
1970: 30 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 6f  0 ; # Counter fo
1980: 72 20 73 79 6d 62 6f 6c 20 69 64 73 2e 0a 20 20  r symbol ids..  
1990: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 64 20    variable myid 
19a0: 20 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23            {} ; #
19b0: 20 53 79 6d 62 6f 6c 20 69 64 2e 0a 0a 20 20 20   Symbol id...   
19c0: 20 23 23 20 42 61 73 69 63 2c 20 61 6c 6c 20 73   ## Basic, all s
19d0: 79 6d 62 6f 6c 73 20 5f 5f 5f 5f 5f 5f 5f 5f 5f  ymbols _________
19e0: 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 76 61  ________..    va
19f0: 72 69 61 62 6c 65 20 6d 79 66 69 6c 65 20 20 20  riable myfile   
1a00: 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65  {} ; # Reference
1a10: 20 74 6f 20 74 68 65 20 66 69 6c 65 20 74 68 65   to the file the
1a20: 20 73 79 6d 62 6f 6c 20 69 73 20 69 6e 2e 0a 20   symbol is in.. 
1a30: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 79     variable myty
1a40: 70 65 20 20 20 7b 7d 20 3b 20 23 20 53 79 6d 62  pe   {} ; # Symb
1a50: 6f 6c 20 74 79 70 65 2c 20 27 74 61 67 27 2c 20  ol type, 'tag', 
1a60: 6f 72 20 27 62 72 61 6e 63 68 27 2e 0a 20 20 20  or 'branch'..   
1a70: 20 76 61 72 69 61 62 6c 65 20 6d 79 6e 72 20 20   variable mynr  
1a80: 20 20 20 7b 7d 20 3b 20 23 20 52 65 76 69 73 69     {} ; # Revisi
1a90: 6f 6e 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 27  on number of a '
1aa0: 74 61 67 27 2c 20 62 72 61 6e 63 68 20 6e 75 6d  tag', branch num
1ab0: 62 65 72 0a 09 09 09 20 20 20 23 20 6f 66 20 61  ber....   # of a
1ac0: 20 27 62 72 61 6e 63 68 27 2e 0a 20 20 20 20 76   'branch'..    v
1ad0: 61 72 69 61 62 6c 65 20 6d 79 73 79 6d 62 6f 6c  ariable mysymbol
1ae0: 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63   {} ; # Referenc
1af0: 65 20 74 6f 20 74 68 65 20 73 79 6d 62 6f 6c 20  e to the symbol 
1b00: 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 0a 09  object of this..
1b10: 09 09 20 20 20 23 20 73 79 6d 62 6f 6c 20 61 74  ..   # symbol at
1b20: 20 74 68 65 20 70 72 6f 6a 65 63 74 20 6c 65 76   the project lev
1b30: 65 6c 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  el..    variable
1b40: 20 6d 79 6c 6f 64 20 20 20 20 7b 7d 20 3b 20 23   mylod    {} ; #
1b50: 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68   Reference to th
1b60: 65 20 6c 69 6e 65 2d 6f 66 2d 64 65 76 65 6c 6f  e line-of-develo
1b70: 70 6d 65 6e 74 0a 09 09 09 20 20 20 23 20 6f 62  pment....   # ob
1b80: 6a 65 63 74 20 74 68 65 20 73 79 6d 62 6f 6c 20  ject the symbol 
1b90: 62 65 6c 6f 6e 67 73 20 74 6f 2e 20 41 6e 0a 09  belongs to. An..
1ba0: 09 09 20 20 20 23 20 61 6c 74 65 72 6e 61 74 69  ..   # alternati
1bb0: 76 65 20 69 64 69 6f 6d 20 77 6f 75 6c 64 20 62  ve idiom would b
1bc0: 65 20 74 6f 20 63 61 6c 6c 20 69 74 20 74 68 65  e to call it the
1bd0: 0a 09 09 09 20 20 20 23 20 62 72 61 6e 63 68 20  ....   # branch 
1be0: 74 68 65 20 73 79 6d 62 6f 6c 20 69 73 20 6f 6e  the symbol is on
1bf0: 2e 20 54 68 69 73 20 72 65 66 65 72 65 6e 63 65  . This reference
1c00: 0a 09 09 09 20 20 20 23 20 69 73 20 74 6f 20 61  ....   # is to a
1c10: 20 70 72 6f 6a 65 63 74 2d 6c 65 76 65 6c 20 6f   project-level o
1c20: 62 6a 65 63 74 20 28 73 79 6d 62 6f 6c 20 6f 72  bject (symbol or
1c30: 0a 09 09 09 20 20 20 23 20 74 72 75 6e 6b 29 2e  ....   # trunk).
1c40: 0a 0a 20 20 20 20 23 23 20 42 72 61 6e 63 68 20  ..    ## Branch 
1c50: 73 79 6d 62 6f 6c 73 20 5f 5f 5f 5f 5f 5f 5f 5f  symbols ________
1c60: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20  _____________.. 
1c70: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72     variable mybr
1c80: 61 6e 63 68 70 61 72 65 6e 74 72 65 76 6e 72 20  anchparentrevnr 
1c90: 7b 7d 20 3b 20 23 20 54 68 65 20 6e 75 6d 62 65  {} ; # The numbe
1ca0: 72 20 6f 66 20 74 68 65 20 70 61 72 65 6e 74 0a  r of the parent.
1cb0: 09 09 09 09 20 20 20 20 20 20 23 20 72 65 76 69  ....      # revi
1cc0: 73 69 6f 6e 2c 20 64 65 72 69 76 65 64 20 66 72  sion, derived fr
1cd0: 6f 6d 20 6f 75 72 0a 09 09 09 09 20 20 20 20 20  om our.....     
1ce0: 20 23 20 62 72 61 6e 63 68 20 6e 75 6d 62 65 72   # branch number
1cf0: 20 28 6d 79 6e 72 29 2e 0a 20 20 20 20 76 61 72   (mynr)..    var
1d00: 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 70 61  iable mybranchpa
1d10: 72 65 6e 74 20 20 20 20 20 20 7b 7d 20 3b 20 23  rent      {} ; #
1d20: 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68   Reference to th
1d30: 65 20 72 65 76 69 73 69 6f 6e 0a 09 09 09 09 20  e revision..... 
1d40: 20 20 20 20 20 23 20 28 6f 62 6a 65 63 74 29 20       # (object) 
1d50: 77 68 69 63 68 20 73 70 61 77 6e 73 20 74 68 65  which spawns the
1d60: 0a 09 09 09 09 20 20 20 20 20 20 23 20 62 72 61  .....      # bra
1d70: 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  nch..    variabl
1d80: 65 20 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 72  e mybranchchildr
1d90: 65 76 6e 72 20 20 7b 7d 20 3b 20 23 20 4e 75 6d  evnr  {} ; # Num
1da0: 62 65 72 20 6f 66 20 74 68 65 20 66 69 72 73 74  ber of the first
1db0: 20 72 65 76 69 73 69 6f 6e 0a 09 09 09 09 20 20   revision.....  
1dc0: 20 20 20 20 23 20 63 6f 6d 6d 69 74 74 65 64 20      # committed 
1dd0: 6f 6e 20 74 68 69 73 20 62 72 61 6e 63 68 2e 0a  on this branch..
1de0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62      variable myb
1df0: 72 61 6e 63 68 63 68 69 6c 64 20 20 20 20 20 20  ranchchild      
1e00: 20 7b 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63   {} ; # Referenc
1e10: 65 20 74 6f 20 74 68 65 20 72 65 76 69 73 69 6f  e to the revisio
1e20: 6e 0a 09 09 09 09 20 20 20 20 20 20 23 20 28 6f  n.....      # (o
1e30: 62 6a 65 63 74 29 20 66 69 72 73 74 20 63 6f 6d  bject) first com
1e40: 6d 69 74 74 65 64 20 6f 6e 0a 09 09 09 09 20 20  mitted on.....  
1e50: 20 20 20 20 23 20 74 68 69 73 20 62 72 61 6e 63      # this branc
1e60: 68 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  h..    variable 
1e70: 6d 79 62 72 61 6e 63 68 70 6f 73 69 74 69 6f 6e  mybranchposition
1e80: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 6c 61 74      {} ; # Relat
1e90: 69 76 65 20 69 64 20 6f 66 20 74 68 65 20 62 72  ive id of the br
1ea0: 61 6e 63 68 20 69 6e 0a 09 09 09 09 20 20 20 20  anch in.....    
1eb0: 20 20 23 20 74 68 65 20 66 69 6c 65 2c 20 74 6f    # the file, to
1ec0: 20 73 6f 72 74 20 69 6e 74 6f 0a 09 09 09 09 20   sort into..... 
1ed0: 20 20 20 20 20 23 20 63 72 65 61 74 69 6f 6e 20       # creation 
1ee0: 6f 72 64 65 72 2e 0a 0a 20 20 20 20 23 23 20 54  order...    ## T
1ef0: 61 67 20 73 79 6d 62 6f 6c 73 20 5f 5f 5f 5f 5f  ag symbols _____
1f00: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1f10: 5f 5f 5f 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  ___..    variabl
1f20: 65 20 6d 79 74 61 67 72 65 76 20 7b 7d 20 3b 20  e mytagrev {} ; 
1f30: 23 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74  # Reference to t
1f40: 68 65 20 72 65 76 69 73 69 6f 6e 20 6f 62 6a 65  he revision obje
1f50: 63 74 20 74 68 65 20 74 61 67 0a 09 09 09 20 20  ct the tag....  
1f60: 20 23 20 69 73 20 6f 6e 2c 20 69 64 65 6e 74 69   # is on, identi
1f70: 66 69 65 64 20 62 79 20 27 6d 79 6e 72 27 2e 0a  fied by 'mynr'..
1f80: 0a 20 20 20 20 23 20 2e 2e 2e 20 6e 6f 74 68 69  .    # ... nothi
1f90: 6e 67 20 73 70 65 63 69 61 6c 20 2e 2e 2e 20 28  ng special ... (
1fa0: 6f 6e 6c 79 20 6d 79 6e 72 2c 20 73 65 65 20 62  only mynr, see b
1fb0: 61 73 69 63 29 0a 0a 20 20 20 20 23 20 23 20 23  asic)..    # # #
1fc0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
1fd0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
1fe0: 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e  ##.    ## Intern
1ff0: 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20  al methods..    
2000: 70 72 6f 63 20 53 65 74 75 70 42 72 61 6e 63 68  proc SetupBranch
2010: 20 7b 7d 20 7b 0a 09 75 70 76 61 72 20 31 20 6d   {} {..upvar 1 m
2020: 79 62 72 61 6e 63 68 70 61 72 65 6e 74 72 65 76  ybranchparentrev
2030: 6e 72 20 6d 79 62 72 61 6e 63 68 70 61 72 65 6e  nr mybranchparen
2040: 74 72 65 76 6e 72 20 6d 79 6e 72 20 6d 79 6e 72  trevnr mynr mynr
2050: 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68 70 61  ..set mybranchpa
2060: 72 65 6e 74 72 65 76 6e 72 20 5b 72 65 76 20 32  rentrevnr [rev 2
2070: 62 72 61 6e 63 68 70 61 72 65 6e 74 72 65 76 6e  branchparentrevn
2080: 72 20 20 24 6d 79 6e 72 5d 0a 09 72 65 74 75 72  r  $mynr]..retur
2090: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23  n.    }..    # #
20a0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
20b0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
20c0: 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e 66  ####.    ## Conf
20d0: 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70  iguration..    p
20e0: 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69 6e  ragma -hastypein
20f0: 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f  fo    no  ; # no
2100: 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65 63 74   type introspect
2110: 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d  ion.    pragma -
2120: 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20 20 6e  hasinfo        n
2130: 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 63 74  o  ; # no object
2140: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20   introspection. 
2150: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79     pragma -hasty
2160: 70 65 6d 65 74 68 6f 64 73 20 6e 6f 20 20 3b 20  pemethods no  ; 
2170: 23 20 74 79 70 65 20 69 73 20 6e 6f 74 20 72 65  # type is not re
2180: 6c 65 76 61 6e 74 2e 0a 0a 20 20 20 20 23 20 23  levant...    # #
2190: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
21a0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
21b0: 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63  ####.}..namespac
21c0: 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73  e eval ::vc::fos
21d0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
21e0: 3a 3a 66 69 6c 65 20 7b 0a 20 20 20 20 6e 61 6d  ::file {.    nam
21f0: 65 73 70 61 63 65 20 65 78 70 6f 72 74 20 73 79  espace export sy
2200: 6d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20  m.    namespace 
2210: 65 76 61 6c 20 73 79 6d 20 7b 0a 09 6e 61 6d 65  eval sym {..name
2220: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
2230: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
2240: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 72 65  t::cvs::file::re
2250: 76 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  v..namespace imp
2260: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  ort ::vc::fossil
2270: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73  ::import::cvs::s
2280: 74 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 65 20  tate..namespace 
2290: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73  import ::vc::fos
22a0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
22b0: 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09 6e 61 6d  ::integrity..nam
22c0: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
22d0: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62  vc::tools::troub
22e0: 6c 65 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20  le.    }.}..# # 
22f0: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
2300: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
2310: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
2320: 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 61  #########.## Rea
2330: 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f 76  dy..package prov
2340: 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  ide vc::fossil::
2350: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c  import::cvs::fil
2360: 65 3a 3a 73 79 6d 20 31 2e 30 0a 72 65 74 75 72  e::sym 1.0.retur
2370: 6e 0a                                            n.