Hex Artifact Content
Not logged in

Artifact b2ddfe62f2727495b0338bc7a8f5f3fbc7c4526c:

File tools/cvs2fossil/lib/c2f_fsym.tcl part of check-in [c4003e7b93] - The handling of detached lines of development (floating branches) still had some bugs regarding the linkage to their revisions, especially the first revision on such branches. Fixed the relevant places, added early integrity checks and updated the main checks to handle the situation. by aku on 2007-12-05 02:22:52.

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 23 20 49 67 6e 6f  arents....# Igno
09a0: 72 65 20 74 68 69 73 20 69 66 20 74 68 65 20 62  re this if the b
09b0: 72 61 6e 63 68 20 73 79 6d 62 6f 6c 20 69 73 20  ranch symbol is 
09c0: 64 65 74 61 63 68 65 64 2e 0a 09 69 66 20 7b 24  detached...if {$
09d0: 6d 79 62 72 61 6e 63 68 70 61 72 65 6e 74 20 65  mybranchparent e
09e0: 71 20 22 22 7d 20 72 65 74 75 72 6e 0a 0a 09 24  q ""} return...$
09f0: 6d 79 73 79 6d 62 6f 6c 20 70 6f 73 73 69 62 6c  mysymbol possibl
0a00: 65 70 61 72 65 6e 74 20 5b 5b 24 6d 79 62 72 61  eparent [[$mybra
0a10: 6e 63 68 70 61 72 65 6e 74 20 6c 6f 64 5d 20 73  nchparent lod] s
0a20: 79 6d 62 6f 6c 5d 0a 0a 09 66 6f 72 65 61 63 68  ymbol]...foreach
0a30: 20 62 72 61 6e 63 68 20 5b 24 6d 79 62 72 61 6e   branch [$mybran
0a40: 63 68 70 61 72 65 6e 74 20 62 72 61 6e 63 68 65  chparent branche
0a50: 73 5d 20 7b 0a 09 20 20 20 20 23 20 41 20 62 72  s] {..    # A br
0a60: 61 6e 63 68 20 63 61 6e 6e 6f 74 20 62 65 20 69  anch cannot be i
0a70: 74 73 20 6f 77 6e 20 70 61 72 65 6e 74 2e 20 4e  ts own parent. N
0a80: 6f 72 20 63 61 6e 20 61 20 62 72 61 6e 63 68 0a  or can a branch.
0a90: 09 20 20 20 20 23 20 63 72 65 61 74 65 64 20 61  .    # created a
0aa0: 66 74 65 72 20 74 68 69 73 20 6f 6e 65 20 62 65  fter this one be
0ab0: 20 69 74 73 20 70 61 72 65 6e 74 2e 20 54 68 69   its parent. Thi
0ac0: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 77 65 0a  s means that we.
0ad0: 09 20 20 20 20 23 20 63 61 6e 20 61 62 6f 72 74  .    # can abort
0ae0: 20 74 68 65 20 6c 6f 6f 70 20 77 68 65 6e 20 77   the loop when w
0af0: 65 20 68 61 76 65 20 72 65 61 63 68 65 64 20 6f  e have reached o
0b00: 75 72 73 65 6c 76 65 73 20 69 6e 20 74 68 65 0a  urselves in the.
0b10: 09 20 20 20 20 23 20 6c 69 73 74 20 6f 66 20 62  .    # list of b
0b20: 72 61 6e 63 68 65 73 2e 20 48 65 72 65 20 74 68  ranches. Here th
0b30: 65 20 6f 72 64 65 72 20 6f 66 20 66 69 6c 65 3a  e order of file:
0b40: 3a 72 65 76 2e 6d 79 62 72 61 6e 63 68 65 73 0a  :rev.mybranches.
0b50: 09 20 20 20 20 23 20 63 6f 6d 65 73 20 69 6e 74  .    # comes int
0b60: 6f 20 70 6c 61 79 2c 20 61 73 20 63 72 65 61 74  o play, as creat
0b70: 65 64 20 62 79 20 66 69 6c 65 3a 3a 72 65 76 3a  ed by file::rev:
0b80: 3a 73 6f 72 74 62 72 61 6e 63 68 65 73 2e 0a 0a  :sortbranches...
0b90: 09 20 20 20 20 69 66 20 7b 24 62 72 61 6e 63 68  .    if {$branch
0ba0: 20 65 71 20 24 73 65 6c 66 7d 20 62 72 65 61 6b   eq $self} break
0bb0: 0a 09 20 20 20 20 24 6d 79 73 79 6d 62 6f 6c 20  ..    $mysymbol 
0bc0: 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 20 5b  possibleparent [
0bd0: 24 62 72 61 6e 63 68 20 73 79 6d 62 6f 6c 5d 0a  $branch symbol].
0be0: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
0bf0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 54 61 67  ..    method Tag
0c00: 50 61 72 65 6e 74 73 20 7b 7d 20 7b 0a 09 23 20  Parents {} {..# 
0c10: 54 68 65 20 22 6f 62 76 69 6f 75 73 22 20 70 61  The "obvious" pa
0c20: 72 65 6e 74 20 6f 66 20 61 20 74 61 67 20 69 73  rent of a tag is
0c30: 20 74 68 65 20 62 72 61 6e 63 68 20 68 6f 6c 64   the branch hold
0c40: 69 6e 67 20 74 68 65 0a 09 23 20 72 65 76 69 73  ing the..# revis
0c50: 69 6f 6e 20 73 70 61 77 6e 69 6e 67 20 74 68 65  ion spawning the
0c60: 20 74 61 67 2e 20 42 72 61 6e 63 68 65 73 20 74   tag. Branches t
0c70: 68 61 74 20 61 72 65 20 73 70 61 77 6e 65 64 20  hat are spawned 
0c80: 62 79 20 74 68 65 0a 09 23 20 73 61 6d 65 20 72  by the..# same r
0c90: 65 76 69 73 69 6f 6e 20 61 72 65 20 61 6c 73 6f  evision are also
0ca0: 20 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74   possible parent
0cb0: 73 2e 0a 0a 09 24 6d 79 73 79 6d 62 6f 6c 20 70  s....$mysymbol p
0cc0: 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 20 5b 5b  ossibleparent [[
0cd0: 24 6d 79 74 61 67 72 65 76 20 6c 6f 64 5d 20 73  $mytagrev lod] s
0ce0: 79 6d 62 6f 6c 5d 0a 0a 09 66 6f 72 65 61 63 68  ymbol]...foreach
0cf0: 20 62 72 61 6e 63 68 20 5b 24 6d 79 74 61 67 72   branch [$mytagr
0d00: 65 76 20 62 72 61 6e 63 68 65 73 5d 20 7b 0a 09  ev branches] {..
0d10: 20 20 20 20 24 6d 79 73 79 6d 62 6f 6c 20 70 6f      $mysymbol po
0d20: 73 73 69 62 6c 65 70 61 72 65 6e 74 20 5b 24 62  ssibleparent [$b
0d30: 72 61 6e 63 68 20 73 79 6d 62 6f 6c 5d 0a 09 7d  ranch symbol]..}
0d40: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
0d50: 20 20 20 20 23 0a 0a 20 20 20 20 6d 65 74 68 6f      #..    metho
0d60: 64 20 69 73 74 72 75 6e 6b 20 7b 7d 20 7b 20 72  d istrunk {} { r
0d70: 65 74 75 72 6e 20 30 20 7d 0a 0a 20 20 20 20 23  eturn 0 }..    #
0d80: 20 42 72 61 6e 63 68 20 61 63 65 73 73 6f 72 20   Branch acessor 
0d90: 6d 65 74 68 6f 64 73 2e 0a 0a 20 20 20 20 6d 65  methods...    me
0da0: 74 68 6f 64 20 73 65 74 63 68 69 6c 64 72 65 76  thod setchildrev
0db0: 6e 72 20 20 7b 72 65 76 6e 72 7d 20 7b 0a 09 69  nr  {revnr} {..i
0dc0: 6e 74 65 67 72 69 74 79 20 61 73 73 65 72 74 20  ntegrity assert 
0dd0: 7b 24 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 72  {$mybranchchildr
0de0: 65 76 6e 72 20 65 71 20 22 22 7d 20 7b 43 68 69  evnr eq ""} {Chi
0df0: 6c 64 20 61 6c 72 65 61 64 79 20 64 65 66 69 6e  ld already defin
0e00: 65 64 7d 0a 09 73 65 74 20 6d 79 62 72 61 6e 63  ed}..set mybranc
0e10: 68 63 68 69 6c 64 72 65 76 6e 72 20 24 72 65 76  hchildrevnr $rev
0e20: 6e 72 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  nr..return.    }
0e30: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 73 65 74  ..    method set
0e40: 70 6f 73 69 74 69 6f 6e 20 20 7b 6e 7d 20 20 20  position  {n}   
0e50: 7b 20 73 65 74 20 6d 79 62 72 61 6e 63 68 70 6f  { set mybranchpo
0e60: 73 69 74 69 6f 6e 20 24 6e 20 3b 20 72 65 74 75  sition $n ; retu
0e70: 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  rn }.    method 
0e80: 73 65 74 70 61 72 65 6e 74 20 20 20 20 7b 72 65  setparent    {re
0e90: 76 7d 20 7b 20 73 65 74 20 6d 79 62 72 61 6e 63  v} { set mybranc
0ea0: 68 70 61 72 65 6e 74 20 24 72 65 76 20 3b 20 72  hparent $rev ; r
0eb0: 65 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68  eturn }.    meth
0ec0: 6f 64 20 73 65 74 63 68 69 6c 64 20 20 20 20 20  od setchild     
0ed0: 7b 72 65 76 7d 20 7b 20 73 65 74 20 6d 79 62 72  {rev} { set mybr
0ee0: 61 6e 63 68 63 68 69 6c 64 20 20 24 72 65 76 20  anchchild  $rev 
0ef0: 3b 20 72 65 74 75 72 6e 20 7d 0a 20 20 20 20 6d  ; return }.    m
0f00: 65 74 68 6f 64 20 63 75 74 63 68 69 6c 64 20 20  ethod cutchild  
0f10: 20 20 20 7b 7d 20 20 20 20 7b 20 73 65 74 20 6d     {}    { set m
0f20: 79 62 72 61 6e 63 68 63 68 69 6c 64 20 20 22 22  ybranchchild  ""
0f30: 20 20 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20 20     ; return }.  
0f40: 20 20 6d 65 74 68 6f 64 20 63 75 74 62 72 61 6e    method cutbran
0f50: 63 68 70 61 72 65 6e 74 20 7b 7d 20 7b 20 73 65  chparent {} { se
0f60: 74 20 6d 79 62 72 61 6e 63 68 70 61 72 65 6e 74  t mybranchparent
0f70: 20 22 22 20 20 20 3b 20 72 65 74 75 72 6e 20 7d   ""   ; return }
0f80: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 62 72 61  ..    method bra
0f90: 6e 63 68 6e 72 20 20 20 20 7b 7d 20 7b 20 72 65  nchnr    {} { re
0fa0: 74 75 72 6e 20 24 6d 79 6e 72 20 7d 0a 20 20 20  turn $mynr }.   
0fb0: 20 6d 65 74 68 6f 64 20 70 61 72 65 6e 74 72 65   method parentre
0fc0: 76 6e 72 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20  vnr {} { return 
0fd0: 24 6d 79 62 72 61 6e 63 68 70 61 72 65 6e 74 72  $mybranchparentr
0fe0: 65 76 6e 72 20 7d 0a 20 20 20 20 6d 65 74 68 6f  evnr }.    metho
0ff0: 64 20 63 68 69 6c 64 72 65 76 6e 72 20 20 7b 7d  d childrevnr  {}
1000: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 72 61   { return $mybra
1010: 6e 63 68 63 68 69 6c 64 72 65 76 6e 72 20 7d 0a  nchchildrevnr }.
1020: 20 20 20 20 6d 65 74 68 6f 64 20 68 61 73 63 68      method hasch
1030: 69 6c 64 72 65 76 20 7b 7d 20 7b 20 72 65 74 75  ildrev {} { retu
1040: 72 6e 20 5b 65 78 70 72 20 7b 24 6d 79 62 72 61  rn [expr {$mybra
1050: 6e 63 68 63 68 69 6c 64 72 65 76 6e 72 20 6e 65  nchchildrevnr ne
1060: 20 22 22 7d 5d 20 7d 0a 20 20 20 20 6d 65 74 68   ""}] }.    meth
1070: 6f 64 20 68 61 73 63 68 69 6c 64 20 20 20 20 7b  od haschild    {
1080: 7d 20 7b 20 72 65 74 75 72 6e 20 5b 65 78 70 72  } { return [expr
1090: 20 7b 24 6d 79 62 72 61 6e 63 68 63 68 69 6c 64   {$mybranchchild
10a0: 20 6e 65 20 22 22 7d 5d 20 7d 0a 20 20 20 20 6d   ne ""}] }.    m
10b0: 65 74 68 6f 64 20 70 61 72 65 6e 74 20 20 20 20  ethod parent    
10c0: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d    {} { return $m
10d0: 79 62 72 61 6e 63 68 70 61 72 65 6e 74 20 7d 0a  ybranchparent }.
10e0: 20 20 20 20 6d 65 74 68 6f 64 20 63 68 69 6c 64      method child
10f0: 20 20 20 20 20 20 20 7b 7d 20 7b 20 72 65 74 75         {} { retu
1100: 72 6e 20 24 6d 79 62 72 61 6e 63 68 63 68 69 6c  rn $mybranchchil
1110: 64 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 70  d }.    method p
1120: 6f 73 69 74 69 6f 6e 20 20 20 20 7b 7d 20 7b 20  osition    {} { 
1130: 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68  return $mybranch
1140: 70 6f 73 69 74 69 6f 6e 20 7d 0a 0a 20 20 20 20  position }..    
1150: 23 20 54 61 67 20 61 63 65 73 73 6f 72 20 6d 65  # Tag acessor me
1160: 74 68 6f 64 73 2e 0a 0a 20 20 20 20 6d 65 74 68  thods...    meth
1170: 6f 64 20 74 61 67 72 65 76 6e 72 20 20 7b 7d 20  od tagrevnr  {} 
1180: 20 20 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 6e     { return $myn
1190: 72 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 73  r }.    method s
11a0: 65 74 74 61 67 72 65 76 20 7b 72 65 76 7d 20 7b  ettagrev {rev} {
11b0: 73 65 74 20 6d 79 74 61 67 72 65 76 20 24 72 65  set mytagrev $re
11c0: 76 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20  v ; return }..  
11d0: 20 20 23 20 44 65 72 69 76 65 64 20 69 6e 66 6f    # Derived info
11e0: 72 6d 61 74 69 6f 6e 0a 0a 20 20 20 20 6d 65 74  rmation..    met
11f0: 68 6f 64 20 6c 6f 64 20 7b 7d 20 7b 20 72 65 74  hod lod {} { ret
1200: 75 72 6e 20 24 6d 79 6c 6f 64 20 7d 0a 0a 20 20  urn $mylod }..  
1210: 20 20 6d 65 74 68 6f 64 20 73 65 74 6c 6f 64 20    method setlod 
1220: 7b 6c 6f 64 7d 20 7b 0a 09 73 65 74 20 6d 79 6c  {lod} {..set myl
1230: 6f 64 20 24 6c 6f 64 0a 09 24 73 65 6c 66 20 63  od $lod..$self c
1240: 68 65 63 6b 6c 6f 64 0a 09 72 65 74 75 72 6e 0a  hecklod..return.
1250: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
1260: 64 20 63 68 65 63 6b 6c 6f 64 20 7b 7d 20 7b 0a  d checklod {} {.
1270: 09 23 20 43 6f 6e 73 69 73 74 65 6e 63 79 20 63  .# Consistency c
1280: 68 65 63 6b 2e 20 54 68 65 20 73 79 6d 62 6f 6c  heck. The symbol
1290: 27 73 20 6c 69 6e 65 2d 6f 66 2d 64 65 76 65 6c  's line-of-devel
12a0: 6f 70 6d 65 6e 74 20 68 61 73 20 74 6f 0a 09 23  opment has to..#
12b0: 20 62 65 20 73 61 6d 65 20 61 73 20 74 68 65 20   be same as the 
12c0: 6c 69 6e 65 2d 6f 66 2d 64 65 76 65 6c 6f 70 6d  line-of-developm
12d0: 65 6e 74 20 6f 66 20 69 74 73 20 73 6f 75 72 63  ent of its sourc
12e0: 65 20 28 70 61 72 65 6e 74 0a 09 23 20 72 65 76  e (parent..# rev
12f0: 69 73 69 6f 6e 20 6f 66 20 61 20 62 72 61 6e 63  ision of a branc
1300: 68 2c 20 72 65 76 69 73 69 6f 6e 20 6f 66 20 61  h, revision of a
1310: 20 74 61 67 20 69 74 73 65 6c 66 29 2e 0a 0a 09   tag itself)....
1320: 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d  switch -exact --
1330: 20 24 6d 79 74 79 70 65 20 7b 0a 09 20 20 20 20   $mytype {..    
1340: 62 72 61 6e 63 68 20 20 7b 20 73 65 74 20 73 6c  branch  { set sl
1350: 6f 64 20 5b 24 6d 79 62 72 61 6e 63 68 70 61 72  od [$mybranchpar
1360: 65 6e 74 20 6c 6f 64 5d 20 7d 0a 09 20 20 20 20  ent lod] }..    
1370: 74 61 67 20 20 20 20 20 7b 20 73 65 74 20 73 6c  tag     { set sl
1380: 6f 64 20 5b 24 6d 79 74 61 67 72 65 76 20 20 20  od [$mytagrev   
1390: 20 20 20 20 6c 6f 64 5d 20 7d 0a 09 7d 0a 0a 09      lod] }..}...
13a0: 69 66 20 7b 24 6d 79 6c 6f 64 20 6e 65 20 24 73  if {$mylod ne $s
13b0: 6c 6f 64 7d 20 7b 0a 09 20 20 20 20 74 72 6f 75  lod} {..    trou
13c0: 62 6c 65 20 66 61 74 61 6c 20 22 46 6f 72 20 24  ble fatal "For $
13d0: 6d 79 74 79 70 65 20 5b 24 6d 79 73 79 6d 62 6f  mytype [$mysymbo
13e0: 6c 20 6e 61 6d 65 5d 3a 20 4c 4f 44 20 63 6f 6e  l name]: LOD con
13f0: 66 6c 69 63 74 20 77 69 74 68 20 73 6f 75 72 63  flict with sourc
1400: 65 2c 20 27 5b 24 6d 79 6c 6f 64 20 6e 61 6d 65  e, '[$mylod name
1410: 5d 27 20 76 73 2e 20 27 5b 24 73 6c 6f 64 20 6e  ]' vs. '[$slod n
1420: 61 6d 65 5d 27 22 0a 09 20 20 20 20 72 65 74 75  ame]'"..    retu
1430: 72 6e 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  rn..}..return.  
1440: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20    }..    # # ## 
1450: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
1460: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
1470: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 65 72  ..    method per
1480: 73 69 73 74 20 7b 7d 20 7b 0a 09 23 20 53 61 76  sist {} {..# Sav
1490: 65 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f  e the informatio
14a0: 6e 20 77 65 20 6e 65 65 64 20 61 66 74 65 72 20  n we need after 
14b0: 74 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 70  the collection p
14c0: 61 73 73 2e 0a 0a 09 73 65 74 20 66 69 64 20 5b  ass....set fid [
14d0: 24 6d 79 66 69 6c 65 20 20 20 69 64 5d 0a 09 73  $myfile   id]..s
14e0: 65 74 20 73 69 64 20 5b 24 6d 79 73 79 6d 62 6f  et sid [$mysymbo
14f0: 6c 20 69 64 5d 0a 09 73 65 74 20 6c 6f 64 20 5b  l id]..set lod [
1500: 24 6d 79 6c 6f 64 20 20 20 20 69 64 5d 0a 0a 09  $mylod    id]...
1510: 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d  switch -exact --
1520: 20 24 6d 79 74 79 70 65 20 7b 0a 09 20 20 20 20   $mytype {..    
1530: 74 61 67 20 7b 0a 09 09 73 65 74 20 72 69 64 20  tag {...set rid 
1540: 5b 24 6d 79 74 61 67 72 65 76 20 69 64 5d 0a 09  [$mytagrev id]..
1550: 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74 69  .state transacti
1560: 6f 6e 20 7b 0a 09 09 20 20 20 20 73 74 61 74 65  on {...    state
1570: 20 72 75 6e 20 7b 0a 09 09 09 49 4e 53 45 52 54   run {....INSERT
1580: 20 49 4e 54 4f 20 74 61 67 20 28 20 74 69 64 2c   INTO tag ( tid,
1590: 20 20 20 66 69 64 2c 20 20 6c 6f 64 2c 20 20 73     fid,  lod,  s
15a0: 69 64 2c 20 20 72 65 76 29 0a 09 09 09 56 41 4c  id,  rev)....VAL
15b0: 55 45 53 20 20 20 20 20 20 20 20 20 20 28 24 6d  UES          ($m
15c0: 79 69 64 2c 20 24 66 69 64 2c 20 24 6c 6f 64 2c  yid, $fid, $lod,
15d0: 20 24 73 69 64 2c 20 24 72 69 64 29 3b 0a 09 09   $sid, $rid);...
15e0: 20 20 20 20 7d 0a 09 09 7d 0a 09 20 20 20 20 7d      }...}..    }
15f0: 0a 09 20 20 20 20 62 72 61 6e 63 68 20 7b 0a 09  ..    branch {..
1600: 09 6c 61 70 70 65 6e 64 20 6d 61 70 20 40 46 40  .lappend map @F@
1610: 20 5b 65 78 70 72 20 7b 20 28 24 6d 79 62 72 61   [expr { ($mybra
1620: 6e 63 68 63 68 69 6c 64 20 20 65 71 20 22 22 29  nchchild  eq "")
1630: 20 3f 20 22 4e 55 4c 4c 22 20 3a 20 5b 24 6d 79   ? "NULL" : [$my
1640: 62 72 61 6e 63 68 63 68 69 6c 64 20 20 69 64 5d  branchchild  id]
1650: 20 7d 5d 0a 09 09 6c 61 70 70 65 6e 64 20 6d 61   }]...lappend ma
1660: 70 20 40 50 40 20 5b 65 78 70 72 20 7b 20 28 24  p @P@ [expr { ($
1670: 6d 79 62 72 61 6e 63 68 70 61 72 65 6e 74 20 65  mybranchparent e
1680: 71 20 22 22 29 20 3f 20 22 4e 55 4c 4c 22 20 3a  q "") ? "NULL" :
1690: 20 5b 24 6d 79 62 72 61 6e 63 68 70 61 72 65 6e   [$mybranchparen
16a0: 74 20 69 64 5d 20 7d 5d 0a 0a 09 09 73 65 74 20  t id] }]....set 
16b0: 63 6d 64 20 7b 0a 09 09 20 20 20 20 49 4e 53 45  cmd {...    INSE
16c0: 52 54 20 49 4e 54 4f 20 62 72 61 6e 63 68 20 28  RT INTO branch (
16d0: 20 62 69 64 2c 20 20 20 66 69 64 2c 20 20 6c 6f   bid,   fid,  lo
16e0: 64 2c 20 20 73 69 64 2c 20 20 72 6f 6f 74 2c 20  d,  sid,  root, 
16f0: 66 69 72 73 74 2c 20 62 72 61 2c 20 20 70 6f 73  first, bra,  pos
1700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29 0a                ).
1710: 09 09 20 20 20 20 56 41 4c 55 45 53 20 20 20 20  ..    VALUES    
1720: 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 64 2c           ($myid,
1730: 20 24 66 69 64 2c 20 24 6c 6f 64 2c 20 24 73 69   $fid, $lod, $si
1740: 64 2c 20 20 40 50 40 2c 20 20 40 46 40 2c 20 20  d,  @P@,  @F@,  
1750: 24 6d 79 6e 72 2c 20 24 6d 79 62 72 61 6e 63 68  $mynr, $mybranch
1760: 70 6f 73 69 74 69 6f 6e 29 3b 0a 09 09 7d 0a 09  position);...}..
1770: 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74 69  .state transacti
1780: 6f 6e 20 7b 0a 09 09 20 20 20 20 73 74 61 74 65  on {...    state
1790: 20 72 75 6e 20 5b 73 74 72 69 6e 67 20 6d 61 70   run [string map
17a0: 20 24 6d 61 70 20 24 63 6d 64 5d 0a 09 09 7d 0a   $map $cmd]...}.
17b0: 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 72 65 74 75  .    }..}...retu
17c0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  rn.    }..    # 
17d0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
17e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
17f0: 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 74 61  #####.    ## Sta
1800: 74 65 0a 0a 20 20 20 20 23 20 50 65 72 73 69 73  te..    # Persis
1810: 74 65 6e 74 3a 0a 20 20 20 20 23 20 20 20 20 20  tent:.    #     
1820: 20 20 20 54 61 67 3a 20 6d 79 69 64 20 20 20 20     Tag: myid    
1830: 20 20 20 20 20 20 20 2d 20 74 61 67 2e 74 69 64         - tag.tid
1840: 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20  .    #          
1850: 20 20 20 6d 79 66 69 6c 65 20 20 20 20 20 20 20     myfile       
1860: 20 20 2d 20 74 61 67 2e 66 69 64 0a 20 20 20 20    - tag.fid.    
1870: 23 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 79  #             my
1880: 6c 6f 64 20 20 20 20 20 20 20 20 20 20 2d 20 74  lod          - t
1890: 61 67 2e 6c 6f 64 0a 20 20 20 20 23 20 20 20 20  ag.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 74 61 67 2e 73 69  l       - tag.si
18c0: 64 0a 20 20 20 20 23 20 20 20 20 20 20 20 20 20  d.    #         
18d0: 20 20 20 20 6d 79 74 61 67 72 65 76 20 20 20 20      mytagrev    
18e0: 20 20 20 2d 20 74 61 67 2e 72 65 76 0a 20 20 20     - tag.rev.   
18f0: 20 23 0a 20 20 20 20 23 20 20 20 20 20 42 72 61   #.    #     Bra
1900: 6e 63 68 3a 20 6d 79 69 64 20 20 20 20 20 20 20  nch: myid       
1910: 20 20 20 20 2d 20 62 72 61 6e 63 68 2e 62 69 64      - branch.bid
1920: 0a 20 20 20 20 23 09 09 20 20 6d 79 66 69 6c 65  .    #..  myfile
1930: 20 20 20 20 20 20 20 20 20 2d 20 62 72 61 6e 63           - branc
1940: 68 2e 66 69 64 0a 20 20 20 20 23 09 09 20 20 6d  h.fid.    #..  m
1950: 79 6c 6f 64 20 20 20 20 20 20 20 20 20 20 2d 20  ylod          - 
1960: 62 72 61 6e 63 68 2e 6c 6f 64 0a 20 20 20 20 23  branch.lod.    #
1970: 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 79 73               mys
1980: 79 6d 62 6f 6c 20 20 20 20 20 20 20 2d 20 62 72  ymbol       - br
1990: 61 6e 63 68 2e 73 69 64 0a 20 20 20 20 23 20 20  anch.sid.    #  
19a0: 20 20 20 20 20 20 20 20 20 20 20 6d 79 62 72 61             mybra
19b0: 6e 63 68 70 61 72 65 6e 74 20 2d 20 62 72 61 6e  nchparent - bran
19c0: 63 68 2e 72 6f 6f 74 0a 20 20 20 20 23 20 20 20  ch.root.    #   
19d0: 20 20 20 20 20 20 20 20 20 20 6d 79 62 72 61 6e            mybran
19e0: 63 68 63 68 69 6c 64 20 20 2d 20 62 72 61 6e 63  chchild  - branc
19f0: 68 2e 66 69 72 73 74 0a 20 20 20 20 23 20 20 20  h.first.    #   
1a00: 20 20 20 20 20 20 20 20 20 20 6d 79 6e 72 20 20            mynr  
1a10: 20 20 20 20 20 20 20 20 20 2d 20 62 72 61 6e 63           - branc
1a20: 68 2e 62 72 61 0a 0a 20 20 20 20 74 79 70 65 76  h.bra..    typev
1a30: 61 72 69 61 62 6c 65 20 6d 79 69 64 63 6f 75 6e  ariable myidcoun
1a40: 74 65 72 20 30 20 3b 20 23 20 43 6f 75 6e 74 65  ter 0 ; # Counte
1a50: 72 20 66 6f 72 20 73 79 6d 62 6f 6c 20 69 64 73  r for symbol ids
1a60: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
1a70: 79 69 64 20 20 20 20 20 20 20 20 20 20 20 7b 7d  yid           {}
1a80: 20 3b 20 23 20 53 79 6d 62 6f 6c 20 69 64 2e 0a   ; # Symbol id..
1a90: 0a 20 20 20 20 23 23 20 42 61 73 69 63 2c 20 61  .    ## Basic, a
1aa0: 6c 6c 20 73 79 6d 62 6f 6c 73 20 5f 5f 5f 5f 5f  ll symbols _____
1ab0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20  ____________..  
1ac0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 66 69 6c    variable myfil
1ad0: 65 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65 72  e   {} ; # Refer
1ae0: 65 6e 63 65 20 74 6f 20 74 68 65 20 66 69 6c 65  ence to the file
1af0: 20 74 68 65 20 73 79 6d 62 6f 6c 20 69 73 20 69   the symbol is i
1b00: 6e 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  n..    variable 
1b10: 6d 79 74 79 70 65 20 20 20 7b 7d 20 3b 20 23 20  mytype   {} ; # 
1b20: 53 79 6d 62 6f 6c 20 74 79 70 65 2c 20 27 74 61  Symbol type, 'ta
1b30: 67 27 2c 20 6f 72 20 27 62 72 61 6e 63 68 27 2e  g', or 'branch'.
1b40: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
1b50: 6e 72 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65  nr     {} ; # Re
1b60: 76 69 73 69 6f 6e 20 6e 75 6d 62 65 72 20 6f 66  vision number of
1b70: 20 61 20 27 74 61 67 27 2c 20 62 72 61 6e 63 68   a 'tag', branch
1b80: 20 6e 75 6d 62 65 72 0a 09 09 09 20 20 20 23 20   number....   # 
1b90: 6f 66 20 61 20 27 62 72 61 6e 63 68 27 2e 0a 20  of a 'branch'.. 
1ba0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 73 79     variable mysy
1bb0: 6d 62 6f 6c 20 7b 7d 20 3b 20 23 20 52 65 66 65  mbol {} ; # Refe
1bc0: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 73 79 6d  rence to the sym
1bd0: 62 6f 6c 20 6f 62 6a 65 63 74 20 6f 66 20 74 68  bol object of th
1be0: 69 73 0a 09 09 09 20 20 20 23 20 73 79 6d 62 6f  is....   # symbo
1bf0: 6c 20 61 74 20 74 68 65 20 70 72 6f 6a 65 63 74  l at the project
1c00: 20 6c 65 76 65 6c 2e 0a 20 20 20 20 76 61 72 69   level..    vari
1c10: 61 62 6c 65 20 6d 79 6c 6f 64 20 20 20 20 7b 7d  able mylod    {}
1c20: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74   ; # Reference t
1c30: 6f 20 74 68 65 20 6c 69 6e 65 2d 6f 66 2d 64 65  o the line-of-de
1c40: 76 65 6c 6f 70 6d 65 6e 74 0a 09 09 09 20 20 20  velopment....   
1c50: 23 20 6f 62 6a 65 63 74 20 74 68 65 20 73 79 6d  # object the sym
1c60: 62 6f 6c 20 62 65 6c 6f 6e 67 73 20 74 6f 2e 20  bol belongs to. 
1c70: 41 6e 0a 09 09 09 20 20 20 23 20 61 6c 74 65 72  An....   # alter
1c80: 6e 61 74 69 76 65 20 69 64 69 6f 6d 20 77 6f 75  native idiom wou
1c90: 6c 64 20 62 65 20 74 6f 20 63 61 6c 6c 20 69 74  ld be to call it
1ca0: 20 74 68 65 0a 09 09 09 20 20 20 23 20 62 72 61   the....   # bra
1cb0: 6e 63 68 20 74 68 65 20 73 79 6d 62 6f 6c 20 69  nch the symbol i
1cc0: 73 20 6f 6e 2e 20 54 68 69 73 20 72 65 66 65 72  s on. This refer
1cd0: 65 6e 63 65 0a 09 09 09 20 20 20 23 20 69 73 20  ence....   # is 
1ce0: 74 6f 20 61 20 70 72 6f 6a 65 63 74 2d 6c 65 76  to a project-lev
1cf0: 65 6c 20 6f 62 6a 65 63 74 20 28 73 79 6d 62 6f  el object (symbo
1d00: 6c 20 6f 72 0a 09 09 09 20 20 20 23 20 74 72 75  l or....   # tru
1d10: 6e 6b 29 2e 0a 0a 20 20 20 20 23 23 20 42 72 61  nk)...    ## Bra
1d20: 6e 63 68 20 73 79 6d 62 6f 6c 73 20 5f 5f 5f 5f  nch symbols ____
1d30: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1d40: 5f 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  _..    variable 
1d50: 6d 79 62 72 61 6e 63 68 70 61 72 65 6e 74 72 65  mybranchparentre
1d60: 76 6e 72 20 7b 7d 20 3b 20 23 20 54 68 65 20 6e  vnr {} ; # The n
1d70: 75 6d 62 65 72 20 6f 66 20 74 68 65 20 70 61 72  umber of the par
1d80: 65 6e 74 0a 09 09 09 09 20 20 20 20 20 20 23 20  ent.....      # 
1d90: 72 65 76 69 73 69 6f 6e 2c 20 64 65 72 69 76 65  revision, derive
1da0: 64 20 66 72 6f 6d 20 6f 75 72 0a 09 09 09 09 20  d from our..... 
1db0: 20 20 20 20 20 23 20 62 72 61 6e 63 68 20 6e 75       # branch nu
1dc0: 6d 62 65 72 20 28 6d 79 6e 72 29 2e 0a 20 20 20  mber (mynr)..   
1dd0: 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e   variable mybran
1de0: 63 68 70 61 72 65 6e 74 20 20 20 20 20 20 7b 7d  chparent      {}
1df0: 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 74   ; # Reference t
1e00: 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e 0a 09  o the revision..
1e10: 09 09 09 20 20 20 20 20 20 23 20 28 6f 62 6a 65  ...      # (obje
1e20: 63 74 29 20 77 68 69 63 68 20 73 70 61 77 6e 73  ct) which spawns
1e30: 20 74 68 65 0a 09 09 09 09 20 20 20 20 20 20 23   the.....      #
1e40: 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72   branch..    var
1e50: 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 63 68  iable mybranchch
1e60: 69 6c 64 72 65 76 6e 72 20 20 7b 7d 20 3b 20 23  ildrevnr  {} ; #
1e70: 20 4e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 66   Number of the f
1e80: 69 72 73 74 20 72 65 76 69 73 69 6f 6e 0a 09 09  irst revision...
1e90: 09 09 20 20 20 20 20 20 23 20 63 6f 6d 6d 69 74  ..      # commit
1ea0: 74 65 64 20 6f 6e 20 74 68 69 73 20 62 72 61 6e  ted on this bran
1eb0: 63 68 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  ch..    variable
1ec0: 20 6d 79 62 72 61 6e 63 68 63 68 69 6c 64 20 20   mybranchchild  
1ed0: 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 66 65       {} ; # Refe
1ee0: 72 65 6e 63 65 20 74 6f 20 74 68 65 20 72 65 76  rence to the rev
1ef0: 69 73 69 6f 6e 0a 09 09 09 09 20 20 20 20 20 20  ision.....      
1f00: 23 20 28 6f 62 6a 65 63 74 29 20 66 69 72 73 74  # (object) first
1f10: 20 63 6f 6d 6d 69 74 74 65 64 20 6f 6e 0a 09 09   committed on...
1f20: 09 09 20 20 20 20 20 20 23 20 74 68 69 73 20 62  ..      # this b
1f30: 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 61  ranch..    varia
1f40: 62 6c 65 20 6d 79 62 72 61 6e 63 68 70 6f 73 69  ble mybranchposi
1f50: 74 69 6f 6e 20 20 20 20 7b 7d 20 3b 20 23 20 52  tion    {} ; # R
1f60: 65 6c 61 74 69 76 65 20 69 64 20 6f 66 20 74 68  elative id of th
1f70: 65 20 62 72 61 6e 63 68 20 69 6e 0a 09 09 09 09  e branch in.....
1f80: 20 20 20 20 20 20 23 20 74 68 65 20 66 69 6c 65        # the file
1f90: 2c 20 74 6f 20 73 6f 72 74 20 69 6e 74 6f 0a 09  , to sort into..
1fa0: 09 09 09 20 20 20 20 20 20 23 20 63 72 65 61 74  ...      # creat
1fb0: 69 6f 6e 20 6f 72 64 65 72 2e 0a 0a 20 20 20 20  ion order...    
1fc0: 23 23 20 54 61 67 20 73 79 6d 62 6f 6c 73 20 5f  ## Tag symbols _
1fd0: 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f 5f  ________________
1fe0: 5f 5f 5f 5f 5f 5f 5f 0a 0a 20 20 20 20 76 61 72  _______..    var
1ff0: 69 61 62 6c 65 20 6d 79 74 61 67 72 65 76 20 7b  iable mytagrev {
2000: 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20  } ; # Reference 
2010: 74 6f 20 74 68 65 20 72 65 76 69 73 69 6f 6e 20  to the revision 
2020: 6f 62 6a 65 63 74 20 74 68 65 20 74 61 67 0a 09  object the tag..
2030: 09 09 20 20 20 23 20 69 73 20 6f 6e 2c 20 69 64  ..   # is on, id
2040: 65 6e 74 69 66 69 65 64 20 62 79 20 27 6d 79 6e  entified by 'myn
2050: 72 27 2e 0a 0a 20 20 20 20 23 20 2e 2e 2e 20 6e  r'...    # ... n
2060: 6f 74 68 69 6e 67 20 73 70 65 63 69 61 6c 20 2e  othing special .
2070: 2e 2e 20 28 6f 6e 6c 79 20 6d 79 6e 72 2c 20 73  .. (only mynr, s
2080: 65 65 20 62 61 73 69 63 29 0a 0a 20 20 20 20 23  ee basic)..    #
2090: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
20a0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
20b0: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e  ######.    ## In
20c0: 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 73 0a 0a  ternal methods..
20d0: 20 20 20 20 70 72 6f 63 20 53 65 74 75 70 42 72      proc SetupBr
20e0: 61 6e 63 68 20 7b 7d 20 7b 0a 09 75 70 76 61 72  anch {} {..upvar
20f0: 20 31 20 6d 79 62 72 61 6e 63 68 70 61 72 65 6e   1 mybranchparen
2100: 74 72 65 76 6e 72 20 6d 79 62 72 61 6e 63 68 70  trevnr mybranchp
2110: 61 72 65 6e 74 72 65 76 6e 72 20 6d 79 6e 72 20  arentrevnr mynr 
2120: 6d 79 6e 72 0a 09 73 65 74 20 6d 79 62 72 61 6e  mynr..set mybran
2130: 63 68 70 61 72 65 6e 74 72 65 76 6e 72 20 5b 72  chparentrevnr [r
2140: 65 76 20 32 62 72 61 6e 63 68 70 61 72 65 6e 74  ev 2branchparent
2150: 72 65 76 6e 72 20 20 24 6d 79 6e 72 5d 0a 09 72  revnr  $mynr]..r
2160: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
2170: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
2180: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
2190: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20  ########.    ## 
21a0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20  Configuration.. 
21b0: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79     pragma -hasty
21c0: 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20  peinfo    no  ; 
21d0: 23 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73  # no type intros
21e0: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67  pection.    prag
21f0: 6d 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20  ma -hasinfo     
2200: 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62     no  ; # no ob
2210: 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69  ject introspecti
2220: 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68  on.    pragma -h
2230: 61 73 74 79 70 65 6d 65 74 68 6f 64 73 20 6e 6f  astypemethods no
2240: 20 20 3b 20 23 20 74 79 70 65 20 69 73 20 6e 6f    ; # type is no
2250: 74 20 72 65 6c 65 76 61 6e 74 2e 0a 0a 20 20 20  t relevant...   
2260: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
2270: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
2280: 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65  ########.}..name
2290: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a  space eval ::vc:
22a0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
22b0: 3a 63 76 73 3a 3a 66 69 6c 65 20 7b 0a 20 20 20  :cvs::file {.   
22c0: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72   namespace expor
22d0: 74 20 73 79 6d 0a 20 20 20 20 6e 61 6d 65 73 70  t sym.    namesp
22e0: 61 63 65 20 65 76 61 6c 20 73 79 6d 20 7b 0a 09  ace eval sym {..
22f0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
2300: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
2310: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65  mport::cvs::file
2320: 3a 3a 72 65 76 0a 09 6e 61 6d 65 73 70 61 63 65  ::rev..namespace
2330: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f   import ::vc::fo
2340: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
2350: 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70  s::state..namesp
2360: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
2370: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
2380: 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a  :cvs::integrity.
2390: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
23a0: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74  t ::vc::tools::t
23b0: 72 6f 75 62 6c 65 0a 20 20 20 20 7d 0a 7d 0a 0a  rouble.    }.}..
23c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
23d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
23e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
23f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
2400: 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20   Ready..package 
2410: 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73  provide vc::foss
2420: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
2430: 3a 66 69 6c 65 3a 3a 73 79 6d 20 31 2e 30 0a 72  :file::sym 1.0.r
2440: 65 74 75 72 6e 0a                                eturn.