Hex Artifact Content
Not logged in

Artifact 46632d18742da9acbf167ec1163f5055b3c54249:

File tools/cvs2fossil/lib/c2f_psym.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 70 72 6f 6a 65 63  ches) per projec
0220: 74 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23  t...# # ## ### #
0230: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
0240: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23  ########### ####
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74  #.## Requirement
0270: 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  s..package requi
0280: 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20  re 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 20 20 20 20 20 3b 20 23 20 52 65 71           ; # Req
02b0: 75 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70  uired runtime..p
02c0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73  ackage require s
02d0: 6e 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20  nit             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 3b 20 23 20 4f 4f 20 73 79 73 74       ; # OO syst
0300: 65 6d 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75  em..package requ
0310: 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74  ire vc::tools::t
0320: 72 6f 75 62 6c 65 20 20 20 20 20 20 20 20 20 20  rouble          
0330: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 45 72            ; # Er
0340: 72 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e 0a 70  ror reporting..p
0350: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76  ackage require v
0360: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 20 20  c::tools::log   
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0380: 20 20 20 20 20 3b 20 23 20 55 73 65 72 20 66 65       ; # User fe
0390: 65 64 62 61 63 6b 2e 0a 70 61 63 6b 61 67 65 20  edback..package 
03a0: 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c  require vc::tool
03b0: 73 3a 3a 6d 69 73 63 20 20 20 20 20 20 20 20 20  s::misc         
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
03d0: 23 20 54 65 78 74 20 66 6f 72 6d 61 74 74 69 6e  # Text formattin
03e0: 67 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  g..package requi
03f0: 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69  re vc::fossil::i
0400: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74  mport::cvs::stat
0410: 65 20 20 20 20 20 20 20 20 3b 20 23 20 53 74 61  e        ; # Sta
0420: 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 6b  te storage..pack
0430: 61 67 65 20 72 65 71 75 69 72 65 20 73 74 72 75  age require stru
0440: 63 74 3a 3a 73 65 74 20 20 20 20 20 20 20 20 20  ct::set         
0450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0460: 20 20 3b 20 23 20 53 65 74 20 68 61 6e 64 6c 69    ; # Set handli
0470: 6e 67 2e 0a 0a 23 20 23 20 23 23 20 23 23 23 20  ng...# # ## ### 
0480: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
0490: 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23  ############ ###
04a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
04b0: 23 23 0a 23 23 0a 0a 73 6e 69 74 3a 3a 74 79 70  ##.##..snit::typ
04c0: 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  e ::vc::fossil::
04d0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f  import::cvs::pro
04e0: 6a 65 63 74 3a 3a 73 79 6d 20 7b 0a 20 20 20 20  ject::sym {.    
04f0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
0500: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
0510: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 50  #######.    ## P
0520: 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 63  ublic API..    c
0530: 6f 6e 73 74 72 75 63 74 6f 72 20 7b 6e 61 6d 65  onstructor {name
0540: 20 69 64 20 70 72 6f 6a 65 63 74 7d 20 7b 0a 09   id project} {..
0550: 73 65 74 20 6d 79 6e 61 6d 65 20 20 20 20 24 6e  set myname    $n
0560: 61 6d 65 0a 09 73 65 74 20 6d 79 69 64 20 20 20  ame..set myid   
0570: 20 20 20 24 69 64 0a 09 73 65 74 20 6d 79 70 72     $id..set mypr
0580: 6f 6a 65 63 74 20 24 70 72 6f 6a 65 63 74 0a 0a  oject $project..
0590: 09 23 20 43 6f 75 6e 74 20 74 6f 74 61 6c 20 6e  .# Count total n
05a0: 75 6d 62 65 72 20 6f 66 20 73 79 6d 62 6f 6c 73  umber of symbols
05b0: 2e 0a 09 69 6e 63 72 20 6d 79 6e 75 6d 0a 09 72  ...incr mynum..r
05c0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
05d0: 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 7b 7d 20   method name {} 
05e0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 6e 61 6d 65  { return $myname
05f0: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 64   }.    method id
0600: 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24     {} { return $
0610: 6d 79 69 64 20 20 20 7d 0a 0a 20 20 20 20 23 20  myid   }..    # 
0620: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
0630: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0640: 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 79 6d  #####.    ## Sym
0650: 62 6f 6c 20 74 79 70 65 0a 0a 20 20 20 20 6d 65  bol type..    me
0660: 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 74 79  thod determinety
0670: 70 65 20 7b 7d 20 7b 0a 09 23 20 54 68 69 73 20  pe {} {..# This 
0680: 69 73 20 64 6f 6e 65 20 62 79 20 61 20 66 69 78  is done by a fix
0690: 65 64 20 68 65 75 72 69 73 74 69 63 73 2c 20 77  ed heuristics, w
06a0: 69 74 68 20 67 75 69 64 61 6e 63 65 20 62 79 20  ith guidance by 
06b0: 74 68 65 0a 09 23 20 75 73 65 72 20 69 6e 20 65  the..# user in e
06c0: 64 67 65 2d 63 61 73 65 73 2e 20 43 6f 6e 74 72  dge-cases. Contr
06d0: 61 72 79 20 74 6f 20 63 76 73 32 73 76 6e 20 77  ary to cvs2svn w
06e0: 68 69 63 68 20 75 73 65 73 20 61 20 62 69 67 0a  hich uses a big.
06f0: 09 23 20 68 6f 6e 6b 69 6e 67 20 73 74 72 65 61  .# honking strea
0700: 67 79 20 63 6c 61 73 73 20 61 6e 64 20 72 75 6c  gy class and rul
0710: 65 20 6f 62 6a 65 63 74 73 2e 20 4b 65 65 70 20  e objects. Keep 
0720: 69 74 20 73 69 6d 70 6c 65 2c 20 77 65 0a 09 23  it simple, we..#
0730: 20 63 61 6e 20 65 78 70 61 6e 64 20 6c 61 74 65   can expand late
0740: 72 20 77 68 65 6e 20 77 65 20 61 63 74 75 61 6c  r when we actual
0750: 6c 79 20 6e 65 65 64 20 61 6c 6c 20 74 68 65 20  ly need all the 
0760: 63 6f 6d 70 6c 65 78 69 74 79 0a 09 23 20 66 6f  complexity..# fo
0770: 72 20 63 6f 6e 66 69 67 75 72 61 62 69 6c 69 74  r configurabilit
0780: 79 2e 0a 0a 09 23 20 54 68 65 20 66 6f 6c 6c 6f  y....# The follo
0790: 77 69 6e 67 20 67 75 69 64 65 6c 69 6e 65 73 20  wing guidelines 
07a0: 61 72 65 20 61 70 70 6c 69 65 64 3a 0a 09 23 20  are applied:..# 
07b0: 2d 20 49 73 20 75 73 61 67 65 20 75 6e 61 6d 62  - Is usage unamb
07c0: 69 67 6f 75 73 20 3f 0a 09 23 20 2d 20 57 61 73  igous ?..# - Was
07d0: 20 74 68 65 72 65 20 65 76 65 72 20 61 20 63 6f   there ever a co
07e0: 6d 6d 69 74 20 6f 6e 20 74 68 65 20 73 79 6d 62  mmit on the symb
07f0: 6f 6c 20 3f 0a 09 23 20 2d 20 4d 6f 72 65 20 75  ol ?..# - More u
0800: 73 65 64 20 61 73 20 74 61 67 2c 20 6f 72 20 6d  sed as tag, or m
0810: 6f 72 65 20 75 73 65 64 20 61 73 20 62 72 61 6e  ore used as bran
0820: 63 68 20 3f 0a 09 23 20 2d 20 41 74 20 6c 61 73  ch ?..# - At las
0830: 74 2c 20 77 68 61 74 20 68 61 73 20 74 68 65 20  t, what has the 
0840: 75 73 65 72 20 74 6f 6c 64 20 75 73 20 61 62 6f  user told us abo
0850: 75 74 20 69 74 20 3f 0a 09 23 20 2d 20 46 61 69  ut it ?..# - Fai
0860: 6c 0a 0a 09 66 6f 72 65 61 63 68 20 72 75 6c 65  l...foreach rule
0870: 20 7b 0a 09 20 20 20 20 55 73 65 72 43 6f 6e 66   {..    UserConf
0880: 69 67 0a 09 20 20 20 20 55 6e 61 6d 62 69 67 6f  ig..    Unambigo
0890: 75 73 0a 09 20 20 20 20 48 61 73 43 6f 6d 6d 69  us..    HasCommi
08a0: 74 73 0a 09 20 20 20 20 56 6f 74 65 43 6f 75 6e  ts..    VoteCoun
08b0: 74 73 0a 09 7d 20 7b 0a 09 20 20 20 73 65 74 20  ts..} {..   set 
08c0: 63 68 6f 73 65 6e 20 5b 24 73 65 6c 66 20 24 72  chosen [$self $r
08d0: 75 6c 65 5d 0a 09 20 20 20 69 66 20 7b 24 63 68  ule]..   if {$ch
08e0: 6f 73 65 6e 20 65 71 20 24 6d 79 75 6e 64 65 66  osen eq $myundef
08f0: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 24  } continue..   $
0900: 73 65 6c 66 20 4d 61 72 6b 41 73 20 24 72 75 6c  self MarkAs $rul
0910: 65 20 24 63 68 6f 73 65 6e 0a 09 20 20 20 72 65  e $chosen..   re
0920: 74 75 72 6e 0a 09 7d 0a 0a 09 23 20 4e 6f 6e 65  turn..}...# None
0930: 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 77 61   of the above wa
0940: 73 20 61 62 6c 65 20 74 6f 20 64 65 63 69 64 65  s able to decide
0950: 20 77 68 69 63 68 20 74 79 70 65 20 74 6f 20 61   which type to a
0960: 73 73 69 67 6e 20 74 6f 0a 09 23 20 74 68 65 20  ssign to..# the 
0970: 73 79 6d 62 6f 6c 2e 20 54 68 69 73 20 69 73 20  symbol. This is 
0980: 61 20 66 61 74 61 6c 20 65 72 72 6f 72 20 70 72  a fatal error pr
0990: 65 76 65 6e 74 69 6e 67 20 74 68 65 20 65 78 65  eventing the exe
09a0: 63 75 74 69 6f 6e 0a 09 23 20 6f 66 20 74 68 65  cution..# of the
09b0: 20 70 61 73 73 65 73 20 61 66 74 65 72 20 27 43   passes after 'C
09c0: 6f 6c 6c 61 74 65 53 79 6d 62 6f 6c 73 27 2e 0a  ollateSymbols'..
09d0: 0a 09 69 6e 63 72 20 6d 79 72 75 6c 65 63 6f 75  ..incr myrulecou
09e0: 6e 74 28 55 6e 64 65 63 69 64 65 64 5f 29 0a 09  nt(Undecided_)..
09f0: 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 55  trouble fatal "U
0a00: 6e 61 62 6c 65 20 74 6f 20 64 65 63 69 64 65 20  nable to decide 
0a10: 68 6f 77 20 74 6f 20 63 6f 6e 76 65 72 74 20 73  how to convert s
0a20: 79 6d 62 6f 6c 20 27 24 6d 79 6e 61 6d 65 27 22  ymbol '$myname'"
0a30: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
0a40: 20 20 20 20 6d 65 74 68 6f 64 20 6d 61 72 6b 74      method markt
0a50: 68 65 74 72 75 6e 6b 20 7b 7d 20 7b 20 24 73 65  hetrunk {} { $se
0a60: 6c 66 20 4d 61 72 6b 41 73 20 49 73 54 68 65 54  lf MarkAs IsTheT
0a70: 72 75 6e 6b 20 24 6d 79 62 72 61 6e 63 68 20 3b  runk $mybranch ;
0a80: 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20 23   return }..    #
0a90: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0aa0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0ab0: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 79  ######.    ## Sy
0ac0: 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 73 0a  mbol statistics.
0ad0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65 66 63  .    method defc
0ae0: 6f 75 6e 74 73 20 7b 74 63 20 62 63 20 63 63 7d  ounts {tc bc cc}
0af0: 20 7b 0a 09 73 65 74 20 6d 79 62 72 61 6e 63 68   {..set mybranch
0b00: 63 6f 75 6e 74 20 24 74 63 0a 09 73 65 74 20 6d  count $tc..set m
0b10: 79 74 61 67 63 6f 75 6e 74 20 20 20 20 24 62 63  ytagcount    $bc
0b20: 0a 09 73 65 74 20 6d 79 63 6f 6d 6d 69 74 63 6f  ..set mycommitco
0b30: 75 6e 74 20 24 63 63 0a 09 72 65 74 75 72 6e 0a  unt $cc..return.
0b40: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
0b50: 64 20 63 6f 75 6e 74 61 73 62 72 61 6e 63 68 20  d countasbranch 
0b60: 7b 7d 20 7b 20 69 6e 63 72 20 6d 79 62 72 61 6e  {} { incr mybran
0b70: 63 68 63 6f 75 6e 74 20 3b 20 72 65 74 75 72 6e  chcount ; return
0b80: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 6f   }.    method co
0b90: 75 6e 74 61 73 74 61 67 20 20 20 20 7b 7d 20 7b  untastag    {} {
0ba0: 20 69 6e 63 72 20 6d 79 74 61 67 63 6f 75 6e 74   incr mytagcount
0bb0: 20 20 20 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20      ; return }. 
0bc0: 20 20 20 6d 65 74 68 6f 64 20 63 6f 75 6e 74 61     method counta
0bd0: 63 6f 6d 6d 69 74 20 20 7b 7d 20 7b 20 69 6e 63  commit  {} { inc
0be0: 72 20 6d 79 63 6f 6d 6d 69 74 63 6f 75 6e 74 20  r mycommitcount 
0bf0: 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 20  ; return }..    
0c00: 6d 65 74 68 6f 64 20 62 6c 6f 63 6b 65 64 62 79  method blockedby
0c10: 20 7b 73 79 6d 62 6f 6c 7d 20 7b 0a 09 23 20 52   {symbol} {..# R
0c20: 65 6d 65 6d 62 65 72 20 74 68 65 20 73 79 6d 62  emember the symb
0c30: 6f 6c 20 61 73 20 70 72 65 76 65 6e 74 69 6e 67  ol as preventing
0c40: 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f 66 20   the removal of 
0c50: 74 68 69 73 0a 09 23 20 73 79 6d 62 6f 6c 2e 20  this..# symbol. 
0c60: 4f 74 20 69 73 20 61 20 74 61 67 20 6f 72 20 62  Ot is a tag or b
0c70: 72 61 6e 63 68 20 74 68 61 74 20 73 70 61 77 6e  ranch that spawn
0c80: 65 64 20 66 72 6f 6d 20 61 20 72 65 76 69 73 69  ed from a revisi
0c90: 6f 6e 0a 09 23 20 6f 6e 20 74 68 69 73 20 73 79  on..# on this sy
0ca0: 6d 62 6f 6c 2e 0a 0a 09 73 74 72 75 63 74 3a 3a  mbol....struct::
0cb0: 73 65 74 20 69 6e 63 6c 75 64 65 20 6d 79 62 6c  set include mybl
0cc0: 6f 63 6b 65 72 73 20 24 73 79 6d 62 6f 6c 0a 09  ockers $symbol..
0cd0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
0ce0: 20 20 6d 65 74 68 6f 64 20 70 6f 73 73 69 62 6c    method possibl
0cf0: 65 70 61 72 65 6e 74 20 7b 73 79 6d 62 6f 6c 7d  eparent {symbol}
0d00: 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 39 20   {..log write 9 
0d10: 73 79 6d 62 6f 6c 20 22 50 6f 73 73 69 62 6c 65  symbol "Possible
0d20: 20 70 61 72 65 6e 74 20 28 24 6d 79 6e 61 6d 65   parent ($myname
0d30: 29 20 3d 20 5b 24 73 79 6d 62 6f 6c 20 6e 61 6d  ) = [$symbol nam
0d40: 65 5d 22 0a 0a 09 69 66 20 7b 5b 69 6e 66 6f 20  e]"...if {[info 
0d50: 65 78 69 73 74 73 20 6d 79 70 70 61 72 65 6e 74  exists mypparent
0d60: 28 24 73 79 6d 62 6f 6c 29 5d 7d 20 7b 0a 09 20  ($symbol)]} {.. 
0d70: 20 20 20 69 6e 63 72 20 6d 79 70 70 61 72 65 6e     incr mypparen
0d80: 74 28 24 73 79 6d 62 6f 6c 29 0a 09 7d 20 65 6c  t($symbol)..} el
0d90: 73 65 20 7b 0a 09 20 20 20 20 73 65 74 20 20 6d  se {..    set  m
0da0: 79 70 70 61 72 65 6e 74 28 24 73 79 6d 62 6f 6c  ypparent($symbol
0db0: 29 20 31 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  ) 1..}..return. 
0dc0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64     }..    method
0dd0: 20 69 73 67 68 6f 73 74 20 7b 7d 20 7b 0a 09 23   isghost {} {..#
0de0: 20 43 68 65 63 6b 73 20 69 66 20 74 68 69 73 20   Checks if this 
0df0: 73 79 6d 62 6f 6c 20 28 61 73 20 6c 69 6e 65 20  symbol (as line 
0e00: 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 29 20  of development) 
0e10: 6e 65 76 65 72 0a 09 23 20 65 78 69 73 74 65 64  never..# existed
0e20: 2e 0a 0a 09 69 66 20 7b 24 6d 79 63 6f 6d 6d 69  ....if {$mycommi
0e30: 74 63 6f 75 6e 74 20 3e 20 30 7d 20 20 20 20 20  tcount > 0}     
0e40: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 30 20 7d      { return 0 }
0e50: 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24  ..if {[llength $
0e60: 6d 79 62 6c 6f 63 6b 65 72 73 5d 7d 20 20 20 20  myblockers]}    
0e70: 20 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 09    { return 0 }..
0e80: 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a 65 20  if {[array size 
0e90: 6d 79 70 70 61 72 65 6e 74 5d 20 3e 20 30 7d 20  mypparent] > 0} 
0ea0: 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 0a 09 72  { return 0 }...r
0eb0: 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a 0a 20  eturn 1.    }.. 
0ec0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
0ed0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0ee0: 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20 20 20  ##########..    
0ef0: 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74 72 65  method persistre
0f00: 76 20 7b 7d 20 7b 0a 09 73 65 74 20 70 69 64 20  v {} {..set pid 
0f10: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 69 64 5d 0a  [$myproject id].
0f20: 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74  ..state transact
0f30: 69 6f 6e 20 7b 0a 09 20 20 20 20 73 74 61 74 65  ion {..    state
0f40: 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 52 54 20   run {...INSERT 
0f50: 49 4e 54 4f 20 73 79 6d 62 6f 6c 20 28 20 73 69  INTO symbol ( si
0f60: 64 2c 20 20 20 70 69 64 2c 20 20 6e 61 6d 65 2c  d,   pid,  name,
0f70: 20 20 20 74 79 70 65 2c 20 20 20 20 20 74 61 67     type,     tag
0f80: 5f 63 6f 75 6e 74 2c 20 20 20 62 72 61 6e 63 68  _count,   branch
0f90: 5f 63 6f 75 6e 74 2c 20 20 20 63 6f 6d 6d 69 74  _count,   commit
0fa0: 5f 63 6f 75 6e 74 29 0a 09 09 56 41 4c 55 45 53  _count)...VALUES
0fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 24 6d               ($m
0fc0: 79 69 64 2c 20 24 70 69 64 2c 20 24 6d 79 6e 61  yid, $pid, $myna
0fd0: 6d 65 2c 20 24 6d 79 75 6e 64 65 66 2c 20 24 6d  me, $myundef, $m
0fe0: 79 74 61 67 63 6f 75 6e 74 2c 20 24 6d 79 62 72  ytagcount, $mybr
0ff0: 61 6e 63 68 63 6f 75 6e 74 2c 20 24 6d 79 63 6f  anchcount, $myco
1000: 6d 6d 69 74 63 6f 75 6e 74 29 3b 0a 09 20 20 20  mmitcount);..   
1010: 20 7d 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20   }..    foreach 
1020: 73 79 6d 62 6f 6c 20 24 6d 79 62 6c 6f 63 6b 65  symbol $myblocke
1030: 72 73 20 7b 0a 09 09 73 65 74 20 62 69 64 20 5b  rs {...set bid [
1040: 24 73 79 6d 62 6f 6c 20 69 64 5d 0a 09 09 73 74  $symbol id]...st
1050: 61 74 65 20 72 75 6e 20 7b 0a 09 09 20 20 20 20  ate run {...    
1060: 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 6c 6f 63  INSERT INTO bloc
1070: 6b 65 72 20 28 73 69 64 2c 20 20 20 62 69 64 29  ker (sid,   bid)
1080: 0a 09 09 20 20 20 20 56 41 4c 55 45 53 20 20 20  ...    VALUES   
1090: 20 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 69             ($myi
10a0: 64 2c 20 24 62 69 64 29 3b 0a 09 09 7d 0a 09 20  d, $bid);...}.. 
10b0: 20 20 20 7d 0a 09 20 20 20 20 66 6f 72 65 61 63     }..    foreac
10c0: 68 20 7b 73 79 6d 62 6f 6c 20 63 6f 75 6e 74 7d  h {symbol count}
10d0: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 70 70   [array get mypp
10e0: 61 72 65 6e 74 5d 20 7b 0a 09 09 73 65 74 20 70  arent] {...set p
10f0: 69 64 20 5b 24 73 79 6d 62 6f 6c 20 69 64 5d 0a  id [$symbol id].
1100: 09 09 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09  ..state run {...
1110: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1120: 70 61 72 65 6e 74 20 28 73 69 64 2c 20 20 20 70  parent (sid,   p
1130: 69 64 2c 20 20 6e 29 0a 09 09 20 20 20 20 56 41  id,  n)...    VA
1140: 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20 20  LUES            
1150: 20 28 24 6d 79 69 64 2c 20 24 70 69 64 2c 20 24   ($myid, $pid, $
1160: 63 6f 75 6e 74 29 3b 0a 09 09 7d 0a 09 20 20 20  count);...}..   
1170: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20   }..}..return.  
1180: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20    }..    # # ## 
1190: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
11a0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
11b0: 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20  .    ## State.. 
11c0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72     variable mypr
11d0: 6f 6a 65 63 74 20 7b 7d 20 3b 20 23 20 52 65 66  oject {} ; # Ref
11e0: 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 70 72  erence to the pr
11f0: 6f 6a 65 63 74 20 6f 62 6a 65 63 74 0a 09 09 09  oject object....
1200: 20 20 20 20 23 20 63 6f 6e 74 61 69 6e 69 6e 67      # containing
1210: 20 74 68 65 20 73 79 6d 62 6f 6c 2e 0a 20 20 20   the symbol..   
1220: 20 76 61 72 69 61 62 6c 65 20 6d 79 6e 61 6d 65   variable myname
1230: 20 20 20 20 7b 7d 20 3b 20 23 20 54 68 65 20 73      {} ; # The s
1240: 79 6d 62 6f 6c 27 73 20 6e 61 6d 65 0a 20 20 20  ymbol's name.   
1250: 20 76 61 72 69 61 62 6c 65 20 6d 79 69 64 20 20   variable myid  
1260: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 70 6f 73      {} ; # Repos
1270: 69 74 6f 72 79 20 77 69 64 65 20 6e 75 6d 65 72  itory wide numer
1280: 69 63 20 69 64 20 6f 66 20 74 68 65 0a 09 09 09  ic id of the....
1290: 20 20 20 20 23 20 73 79 6d 62 6f 6c 2e 20 54 68      # symbol. Th
12a0: 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 65 6e  is implicitly en
12b0: 63 6f 64 65 73 20 74 68 65 0a 09 09 09 20 20 20  codes the....   
12c0: 20 23 20 70 72 6f 6a 65 63 74 20 61 73 20 77 65   # project as we
12d0: 6c 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  ll...    variabl
12e0: 65 20 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 20  e mybranchcount 
12f0: 30 20 3b 20 23 20 43 6f 75 6e 74 20 68 6f 77 20  0 ; # Count how 
1300: 6d 61 6e 79 20 75 73 65 73 20 61 73 20 62 72 61  many uses as bra
1310: 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 61 62 6c  nch..    variabl
1320: 65 20 6d 79 74 61 67 63 6f 75 6e 74 20 20 20 20  e mytagcount    
1330: 30 20 3b 20 23 20 43 6f 75 6e 74 20 68 6f 77 20  0 ; # Count how 
1340: 6d 61 6e 79 20 75 73 65 73 20 61 73 20 74 61 67  many uses as tag
1350: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d  ..    variable m
1360: 79 63 6f 6d 6d 69 74 63 6f 75 6e 74 20 30 20 3b  ycommitcount 0 ;
1370: 20 23 20 43 6f 75 6e 74 20 68 6f 77 20 6d 61 6e   # Count how man
1380: 79 20 66 69 6c 65 73 20 64 69 64 20 61 20 63 6f  y files did a co
1390: 6d 6d 69 74 20 6f 6e 20 74 68 65 20 73 79 6d 62  mmit on the symb
13a0: 6f 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c  ol...    variabl
13b0: 65 20 6d 79 62 6c 6f 63 6b 65 72 73 20 20 20 7b  e myblockers   {
13c0: 7d 20 3b 20 23 20 4c 69 73 74 20 28 53 65 74 29  } ; # List (Set)
13d0: 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 73 20   of the symbols 
13e0: 77 68 69 63 68 20 62 6c 6f 63 6b 0a 09 09 09 20  which block.... 
13f0: 20 20 20 20 20 20 23 20 74 68 65 20 65 78 63 6c        # the excl
1400: 75 73 69 6f 6e 20 6f 66 20 74 68 69 73 20 73 79  usion of this sy
1410: 6d 62 6f 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61  mbol...    varia
1420: 62 6c 65 20 6d 79 70 70 61 72 65 6e 74 20 2d 61  ble mypparent -a
1430: 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73  rray {} ; # Maps
1440: 20 66 72 6f 6d 20 73 79 6d 62 6f 6c 73 20 74 6f   from symbols to
1450: 20 74 68 65 20 6e 75 6d 62 65 72 0a 09 09 09 09   the number.....
1460: 20 20 20 23 20 6f 66 20 66 69 6c 65 73 20 69 6e     # of files in
1470: 20 77 68 69 63 68 20 69 74 20 63 6f 75 6c 64 20   which it could 
1480: 68 61 76 65 0a 09 09 09 09 20 20 20 23 20 62 65  have.....   # be
1490: 65 6e 20 61 20 70 61 72 65 6e 74 20 6f 66 20 74  en a parent of t
14a0: 68 69 73 20 73 79 6d 62 6f 6c 2e 0a 0a 20 20 20  his symbol...   
14b0: 20 76 61 72 69 61 62 6c 65 20 6d 79 74 79 70 65   variable mytype
14c0: 20 7b 7d 20 3b 20 23 20 54 68 65 20 74 79 70 65   {} ; # The type
14d0: 20 63 68 6f 73 65 6e 20 66 6f 72 20 74 68 65 20   chosen for the 
14e0: 73 79 6d 62 6f 6c 20 74 6f 20 75 73 65 20 69 6e  symbol to use in
14f0: 0a 09 09 09 20 23 20 74 68 65 20 63 6f 6e 76 65  .... # the conve
1500: 72 73 69 6f 6e 2e 0a 0a 20 20 20 20 23 20 23 20  rsion...    # # 
1510: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
1520: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
1530: 23 23 23 0a 0a 20 20 20 20 74 79 70 65 6d 65 74  ###..    typemet
1540: 68 6f 64 20 65 78 63 6c 75 64 65 20 7b 70 61 74  hod exclude {pat
1550: 74 65 72 6e 7d 20 7b 0a 09 23 20 53 74 6f 72 65  tern} {..# Store
1560: 20 74 68 65 20 70 61 74 74 65 72 6e 20 69 6e 20   the pattern in 
1570: 6d 65 6d 6f 72 79 20 66 6f 72 20 75 73 65 20 62  memory for use b
1580: 79 20 74 68 65 20 63 6f 64 65 20 64 6f 69 6e 67  y the code doing
1590: 20 74 79 70 65 0a 09 23 20 64 65 74 65 72 6d 69   type..# determi
15a0: 6e 61 74 69 6f 6e 2e 0a 0a 09 6c 61 70 70 65 6e  nation....lappen
15b0: 64 20 6d 79 65 78 63 6c 75 64 65 70 61 74 74 65  d myexcludepatte
15c0: 72 6e 20 5b 50 72 6f 63 65 73 73 50 61 74 74 65  rn [ProcessPatte
15d0: 72 6e 20 24 70 61 74 74 65 72 6e 20 65 78 63 6c  rn $pattern excl
15e0: 75 73 69 6f 6e 5d 0a 09 72 65 74 75 72 6e 0a 20  usion]..return. 
15f0: 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65     }..    typeme
1600: 74 68 6f 64 20 66 6f 72 63 65 74 61 67 20 7b 70  thod forcetag {p
1610: 61 74 74 65 72 6e 7d 20 7b 0a 09 23 20 53 74 6f  attern} {..# Sto
1620: 72 65 20 74 68 65 20 70 61 74 74 65 72 6e 20 69  re the pattern i
1630: 6e 20 6d 65 6d 6f 72 79 20 66 6f 72 20 75 73 65  n memory for use
1640: 20 62 79 20 74 68 65 20 63 6f 64 65 20 64 6f 69   by the code doi
1650: 6e 67 20 74 79 70 65 0a 09 23 20 64 65 74 65 72  ng type..# deter
1660: 6d 69 6e 61 74 69 6f 6e 2e 0a 0a 09 6c 61 70 70  mination....lapp
1670: 65 6e 64 20 6d 79 66 6f 72 63 65 70 61 74 74 65  end myforcepatte
1680: 72 6e 20 5b 50 72 6f 63 65 73 73 50 61 74 74 65  rn [ProcessPatte
1690: 72 6e 20 24 70 61 74 74 65 72 6e 20 66 6f 72 63  rn $pattern forc
16a0: 65 2d 74 61 67 5d 20 24 6d 79 74 61 67 0a 09 72  e-tag] $mytag..r
16b0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
16c0: 20 74 79 70 65 6d 65 74 68 6f 64 20 66 6f 72 63   typemethod forc
16d0: 65 62 72 61 6e 63 68 20 7b 70 61 74 74 65 72 6e  ebranch {pattern
16e0: 7d 20 7b 0a 09 23 20 53 74 6f 72 65 20 74 68 65  } {..# Store the
16f0: 20 70 61 74 74 65 72 6e 20 69 6e 20 6d 65 6d 6f   pattern in memo
1700: 72 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  ry for use by th
1710: 65 20 63 6f 64 65 20 64 6f 69 6e 67 20 74 79 70  e code doing typ
1720: 65 0a 09 23 20 64 65 74 65 72 6d 69 6e 61 74 69  e..# determinati
1730: 6f 6e 2e 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79  on....lappend my
1740: 66 6f 72 63 65 70 61 74 74 65 72 6e 20 5b 50 72  forcepattern [Pr
1750: 6f 63 65 73 73 50 61 74 74 65 72 6e 20 24 70 61  ocessPattern $pa
1760: 74 74 65 72 6e 20 66 6f 72 63 65 2d 62 72 61 6e  ttern force-bran
1770: 63 68 5d 20 24 6d 79 62 72 61 6e 63 68 0a 09 72  ch] $mybranch..r
1780: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
1790: 20 70 72 6f 63 20 50 72 6f 63 65 73 73 50 61 74   proc ProcessPat
17a0: 74 65 72 6e 20 7b 70 61 74 74 65 72 6e 20 6c 61  tern {pattern la
17b0: 62 65 6c 7d 20 7b 0a 09 69 66 20 7b 5b 73 74 72  bel} {..if {[str
17c0: 69 6e 67 20 6d 61 74 63 68 20 2a 3a 2a 3a 2a 20  ing match *:*:* 
17d0: 24 70 61 74 74 65 72 6e 5d 7d 20 7b 0a 09 20 20  $pattern]} {..  
17e0: 20 20 23 20 42 61 64 20 73 79 6e 74 61 78 20 66    # Bad syntax f
17f0: 6f 72 20 74 68 65 20 70 61 74 74 65 72 6e 2c 20  or the pattern, 
1800: 75 73 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 63  using multiple c
1810: 6f 6c 6f 6e 73 2e 0a 0a 09 20 20 20 20 74 72 6f  olons....    tro
1820: 75 62 6c 65 20 66 61 74 61 6c 20 22 42 61 64 20  uble fatal "Bad 
1830: 24 6c 61 62 65 6c 20 70 61 74 74 65 72 6e 20 27  $label pattern '
1840: 24 70 61 74 74 65 72 6e 27 22 0a 09 7d 20 65 6c  $pattern'"..} el
1850: 73 65 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d  seif {![string m
1860: 61 74 63 68 20 2a 3a 2a 20 24 70 61 74 74 65 72  atch *:* $patter
1870: 6e 5d 7d 20 7b 0a 09 20 20 20 20 23 20 57 68 65  n]} {..    # Whe
1880: 6e 20 6f 6e 6c 79 20 61 20 73 79 6d 62 6f 6c 20  n only a symbol 
1890: 70 61 74 74 65 72 6e 20 69 73 20 73 70 65 63 69  pattern is speci
18a0: 66 69 65 64 20 69 74 20 61 70 70 6c 69 65 73 20  fied it applies 
18b0: 74 6f 0a 09 20 20 20 20 23 20 61 6c 6c 20 70 72  to..    # all pr
18c0: 6f 6a 65 63 74 73 2e 0a 0a 09 20 20 20 20 72 65  ojects....    re
18d0: 74 75 72 6e 20 5b 6c 69 73 74 20 2a 20 24 70 61  turn [list * $pa
18e0: 74 74 65 72 6e 5d 0a 09 7d 20 65 6c 73 65 20 7b  ttern]..} else {
18f0: 0a 09 20 20 20 20 23 20 42 6f 74 68 20 70 72 6f  ..    # Both pro
1900: 6a 65 63 74 20 61 6e 64 20 73 79 6d 62 6f 6c 20  ject and symbol 
1910: 70 61 74 74 65 72 6e 73 20 61 72 65 20 70 72 65  patterns are pre
1920: 73 65 6e 74 2c 20 77 65 20 73 70 6c 69 74 0a 09  sent, we split..
1930: 20 20 20 20 23 20 74 68 65 6d 20 61 70 61 72 74      # them apart
1940: 20 6e 6f 77 20 66 6f 72 20 73 74 6f 72 61 67 65   now for storage
1950: 20 61 6e 64 20 65 61 73 69 65 72 20 65 78 74 72   and easier extr
1960: 61 63 74 69 6f 6e 20 6c 61 74 65 72 2e 0a 0a 09  action later....
1970: 20 20 20 20 72 65 74 75 72 6e 20 5b 73 70 6c 69      return [spli
1980: 74 20 24 70 61 74 74 65 72 6e 20 3a 5d 0a 09 7d  t $pattern :]..}
1990: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65  .    }..    type
19a0: 76 61 72 69 61 62 6c 65 20 6d 79 65 78 63 6c 75  variable myexclu
19b0: 64 65 70 61 74 74 65 72 6e 20 7b 7d 20 3b 20 23  depattern {} ; #
19c0: 20 4c 69 73 74 20 6f 66 20 70 61 74 74 65 72 6e   List of pattern
19d0: 73 20 73 70 65 63 69 66 79 69 6e 67 0a 09 09 09  s specifying....
19e0: 09 20 20 20 20 20 20 20 23 20 74 68 65 20 73 79  .       # the sy
19f0: 6d 62 6f 6c 73 20 74 6f 20 65 78 63 6c 75 64 65  mbols to exclude
1a00: 20 66 72 6f 6d 0a 09 09 09 09 20 20 20 20 20 20   from.....      
1a10: 20 23 20 63 6f 6e 76 65 72 73 69 6f 6e 2e 20 54   # conversion. T
1a20: 61 67 73 20 61 6e 64 2f 6f 72 0a 09 09 09 09 20  ags and/or..... 
1a30: 20 20 20 20 20 20 23 20 62 72 61 6e 63 68 65 73        # branches
1a40: 2e 0a 0a 20 20 20 20 74 79 70 65 76 61 72 69 61  ...    typevaria
1a50: 62 6c 65 20 6d 79 66 6f 72 63 65 70 61 74 74 65  ble myforcepatte
1a60: 72 6e 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f  rn {} ; # List o
1a70: 66 20 70 61 74 74 65 72 6e 73 20 61 6e 64 20 74  f patterns and t
1a80: 79 70 65 73 0a 09 09 09 09 20 20 20 20 20 23 20  ypes.....     # 
1a90: 73 70 65 63 69 66 79 69 6e 67 20 77 68 69 63 68  specifying which
1aa0: 20 73 79 6d 62 6f 6c 73 20 74 6f 0a 09 09 09 09   symbols to.....
1ab0: 20 20 20 20 20 23 20 66 6f 72 63 65 20 74 6f 20       # force to 
1ac0: 73 70 65 63 69 66 69 63 20 74 79 70 65 73 2e 0a  specific types..
1ad0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20  .    typemethod 
1ae0: 67 65 74 73 79 6d 74 79 70 65 73 20 7b 7d 20 7b  getsymtypes {} {
1af0: 0a 09 66 6f 72 65 61 63 68 20 7b 74 69 64 20 6e  ..foreach {tid n
1b00: 61 6d 65 7d 20 5b 73 74 61 74 65 20 72 75 6e 20  ame} [state run 
1b10: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 74 69  {..    SELECT ti
1b20: 64 2c 20 6e 61 6d 65 20 46 52 4f 4d 20 73 79 6d  d, name FROM sym
1b30: 74 79 70 65 3b 0a 09 7d 5d 20 7b 20 73 65 74 20  type;..}] { set 
1b40: 6d 79 73 79 6d 74 79 70 65 28 24 74 69 64 29 20  mysymtype($tid) 
1b50: 24 6e 61 6d 65 20 7d 0a 09 72 65 74 75 72 6e 0a  $name }..return.
1b60: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 4b 65 65      }..    # Kee
1b70: 70 20 74 68 65 20 63 6f 64 65 73 20 62 65 6c 6f  p the codes belo
1b80: 77 20 69 6e 20 73 79 6e 63 20 77 69 74 68 20 27  w in sync with '
1b90: 70 61 73 73 3a 3a 63 6f 6c 6c 72 65 76 2f 73 65  pass::collrev/se
1ba0: 74 75 70 28 27 73 79 6d 74 79 70 65 27 29 2e 0a  tup('symtype')..
1bb0: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65      typevariable
1bc0: 20 6d 79 65 78 63 6c 75 64 65 64 20 20 20 20 20   myexcluded     
1bd0: 20 20 20 30 20 3b 20 23 20 43 6f 64 65 20 66 6f     0 ; # Code fo
1be0: 72 20 73 79 6d 62 6f 6c 73 20 77 68 69 63 68 20  r symbols which 
1bf0: 61 72 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20  are excluded..  
1c00: 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d    typevariable m
1c10: 79 74 61 67 20 20 20 20 20 20 20 20 20 20 20 20  ytag            
1c20: 20 31 20 3b 20 23 20 43 6f 64 65 20 66 6f 72 20   1 ; # Code for 
1c30: 73 79 6d 62 6f 6c 73 20 77 68 69 63 68 20 61 72  symbols which ar
1c40: 65 20 74 61 67 73 2e 0a 20 20 20 20 74 79 70 65  e tags..    type
1c50: 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63  variable mybranc
1c60: 68 20 20 20 20 20 20 20 20 20 20 32 20 3b 20 23  h          2 ; #
1c70: 20 43 6f 64 65 20 66 6f 72 20 73 79 6d 62 6f 6c   Code for symbol
1c80: 73 20 77 68 69 63 68 20 61 72 65 20 62 72 61 6e  s which are bran
1c90: 63 68 65 73 2e 0a 20 20 20 20 74 79 70 65 76 61  ches..    typeva
1ca0: 72 69 61 62 6c 65 20 6d 79 75 6e 64 65 66 20 20  riable myundef  
1cb0: 20 20 20 20 20 20 20 20 20 33 20 3b 20 23 20 43           3 ; # C
1cc0: 6f 64 65 20 66 6f 72 20 73 79 6d 62 6f 6c 73 20  ode for symbols 
1cd0: 6f 66 20 75 6e 6b 6e 6f 77 6e 20 74 79 70 65 2e  of unknown type.
1ce0: 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c  .    typevariabl
1cf0: 65 20 6d 79 73 79 6d 74 79 70 65 20 2d 61 72 72  e mysymtype -arr
1d00: 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 66 72  ay {} ; # Map fr
1d10: 6f 6d 20 74 79 70 65 20 63 6f 64 65 20 74 6f 20  om type code to 
1d20: 6c 61 62 65 6c 20 66 6f 72 20 74 68 65 20 6c 6f  label for the lo
1d30: 67 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68  g...    typemeth
1d40: 6f 64 20 75 6e 64 65 66 20 20 20 20 7b 7d 20 7b  od undef    {} {
1d50: 20 72 65 74 75 72 6e 20 24 6d 79 75 6e 64 65 66   return $myundef
1d60: 20 20 20 20 7d 0a 20 20 20 20 74 79 70 65 6d 65      }.    typeme
1d70: 74 68 6f 64 20 65 78 63 6c 75 64 65 64 20 7b 7d  thod excluded {}
1d80: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 65 78 63   { return $myexc
1d90: 6c 75 64 65 64 20 7d 0a 20 20 20 20 74 79 70 65  luded }.    type
1da0: 6d 65 74 68 6f 64 20 74 61 67 20 20 20 20 20 20  method tag      
1db0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 74  {} { return $myt
1dc0: 61 67 20 20 20 20 20 20 7d 0a 20 20 20 20 74 79  ag      }.    ty
1dd0: 70 65 6d 65 74 68 6f 64 20 62 72 61 6e 63 68 20  pemethod branch 
1de0: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d    {} { return $m
1df0: 79 62 72 61 6e 63 68 20 20 20 7d 0a 0a 20 20 20  ybranch   }..   
1e00: 20 74 79 70 65 6d 65 74 68 6f 64 20 70 72 69 6e   typemethod prin
1e10: 74 72 75 6c 65 73 74 61 74 69 73 74 69 63 73 20  trulestatistics 
1e20: 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20  {} {..log write 
1e30: 32 20 73 79 6d 62 6f 6c 20 22 52 75 6c 65 20 75  2 symbol "Rule u
1e40: 73 61 67 65 20 73 74 61 74 69 73 74 69 63 73 3a  sage statistics:
1e50: 22 0a 0a 09 73 65 74 20 66 6d 74 20 25 5b 73 74  "...set fmt %[st
1e60: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 79 6e  ring length $myn
1e70: 75 6d 5d 73 0a 09 73 65 74 20 61 6c 6c 20 30 0a  um]s..set all 0.
1e80: 0a 09 66 6f 72 65 61 63 68 20 6b 65 79 20 5b 6c  ..foreach key [l
1e90: 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65  sort [array name
1ea0: 73 20 6d 79 72 75 6c 65 63 6f 75 6e 74 5d 5d 20  s myrulecount]] 
1eb0: 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  {..    log write
1ec0: 20 32 20 73 79 6d 62 6f 6c 20 22 2a 20 5b 66 6f   2 symbol "* [fo
1ed0: 72 6d 61 74 20 24 66 6d 74 20 24 6d 79 72 75 6c  rmat $fmt $myrul
1ee0: 65 63 6f 75 6e 74 28 24 6b 65 79 29 5d 20 24 6b  ecount($key)] $k
1ef0: 65 79 22 0a 09 20 20 20 20 69 6e 63 72 20 61 6c  ey"..    incr al
1f00: 6c 20 24 6d 79 72 75 6c 65 63 6f 75 6e 74 28 24  l $myrulecount($
1f10: 6b 65 79 29 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72  key)..}...log wr
1f20: 69 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 3d 20  ite 2 symbol "= 
1f30: 5b 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 61 6c  [format $fmt $al
1f40: 6c 5d 20 74 6f 74 61 6c 22 0a 09 72 65 74 75 72  l] total"..retur
1f50: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 53  n.    }..    # S
1f60: 74 61 74 69 73 74 69 63 73 20 6f 6e 20 68 6f 77  tatistics on how
1f70: 20 6f 66 74 65 6e 20 65 61 63 68 20 27 72 75 6c   often each 'rul
1f80: 65 27 20 77 61 73 20 75 73 65 64 20 74 6f 20 64  e' was used to d
1f90: 65 63 69 64 65 20 6f 6e 20 74 68 65 0a 20 20 20  ecide on the.   
1fa0: 20 23 20 74 79 70 65 20 6f 66 20 61 20 73 79 6d   # type of a sym
1fb0: 62 6f 6c 2e 0a 20 20 20 20 74 79 70 65 76 61 72  bol..    typevar
1fc0: 69 61 62 6c 65 20 6d 79 72 75 6c 65 63 6f 75 6e  iable myrulecoun
1fd0: 74 20 2d 61 72 72 61 79 20 7b 0a 09 48 61 73 43  t -array {..HasC
1fe0: 6f 6d 6d 69 74 73 20 30 0a 09 49 73 54 68 65 54  ommits 0..IsTheT
1ff0: 72 75 6e 6b 20 30 0a 09 55 6e 61 6d 62 69 67 6f  runk 0..Unambigo
2000: 75 73 20 30 0a 09 55 6e 64 65 63 69 64 65 64 5f  us 0..Undecided_
2010: 20 30 0a 09 55 73 65 72 43 6f 6e 66 69 67 20 30   0..UserConfig 0
2020: 0a 09 56 6f 74 65 43 6f 75 6e 74 73 20 30 0a 20  ..VoteCounts 0. 
2030: 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65     }..    typeme
2040: 74 68 6f 64 20 70 72 69 6e 74 74 79 70 65 73 74  thod printtypest
2050: 61 74 69 73 74 69 63 73 20 7b 7d 20 7b 0a 09 6c  atistics {} {..l
2060: 6f 67 20 77 72 69 74 65 20 32 20 73 79 6d 62 6f  og write 2 symbo
2070: 6c 20 22 53 79 6d 62 6f 6c 20 74 79 70 65 20 73  l "Symbol type s
2080: 74 61 74 69 73 74 69 63 73 3a 22 0a 0a 09 73 65  tatistics:"...se
2090: 74 20 66 6d 74 20 25 5b 73 74 72 69 6e 67 20 6c  t fmt %[string l
20a0: 65 6e 67 74 68 20 24 6d 79 6e 75 6d 5d 73 0a 09  ength $mynum]s..
20b0: 73 65 74 20 61 6c 6c 20 30 0a 0a 09 66 6f 72 65  set all 0...fore
20c0: 61 63 68 20 7b 73 74 79 70 65 20 73 70 6c 75 72  ach {stype splur
20d0: 61 6c 20 6e 7d 20 5b 73 74 61 74 65 20 72 75 6e  al n} [state run
20e0: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 54   {..    SELECT T
20f0: 2e 6e 61 6d 65 2c 20 54 2e 70 6c 75 72 61 6c 2c  .name, T.plural,
2100: 20 43 4f 55 4e 54 20 28 73 2e 73 69 64 29 0a 09   COUNT (s.sid)..
2110: 20 20 20 20 46 52 4f 4d 20 73 79 6d 62 6f 6c 20      FROM symbol 
2120: 53 2c 20 73 79 6d 74 79 70 65 20 54 0a 09 20 20  S, symtype T..  
2130: 20 20 57 48 45 52 45 20 53 2e 74 79 70 65 20 3d    WHERE S.type =
2140: 20 54 2e 74 69 64 0a 09 20 20 20 20 47 52 4f 55   T.tid..    GROU
2150: 50 20 42 59 20 54 2e 6e 61 6d 65 0a 09 20 20 20  P BY T.name..   
2160: 20 4f 52 44 45 52 20 42 59 20 54 2e 6e 61 6d 65   ORDER BY T.name
2170: 0a 09 20 20 20 20 3b 0a 09 7d 5d 20 7b 0a 09 20  ..    ;..}] {.. 
2180: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 32 20 73     log write 2 s
2190: 79 6d 62 6f 6c 20 22 2a 20 5b 66 6f 72 6d 61 74  ymbol "* [format
21a0: 20 24 66 6d 74 20 24 6e 5d 20 5b 73 70 20 24 6e   $fmt $n] [sp $n
21b0: 20 24 73 74 79 70 65 20 24 73 70 6c 75 72 61 6c   $stype $splural
21c0: 5d 22 0a 09 20 20 20 20 69 6e 63 72 20 61 6c 6c  ]"..    incr all
21d0: 20 24 6e 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69   $n..}...log wri
21e0: 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 3d 20 5b  te 2 symbol "= [
21f0: 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 61 6c 6c  format $fmt $all
2200: 5d 20 74 6f 74 61 6c 22 0a 09 72 65 74 75 72 6e  ] total"..return
2210: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65  .    }..    type
2220: 76 61 72 69 61 62 6c 65 20 6d 79 6e 75 6d 20 30  variable mynum 0
2230: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
2240: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
2250: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
2260: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65    ## Internal me
2270: 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f  thods..    metho
2280: 64 20 55 73 65 72 43 6f 6e 66 69 67 20 7b 7d 20  d UserConfig {} 
2290: 7b 0a 09 73 65 74 20 70 72 6f 6a 65 63 74 20 5b  {..set project [
22a0: 24 6d 79 70 72 6f 6a 65 63 74 20 62 61 73 65 5d  $myproject base]
22b0: 0a 0a 09 23 20 46 69 72 73 74 20 63 68 65 63 6b  ...# First check
22c0: 20 69 66 20 74 68 65 20 75 73 65 72 20 72 65 71   if the user req
22d0: 75 65 73 74 65 64 20 74 68 65 20 65 78 63 6c 75  uested the exclu
22e0: 73 69 6f 6e 20 6f 66 20 74 68 65 0a 09 23 20 73  sion of the..# s
22f0: 79 6d 62 6f 6c 20 66 72 6f 6d 20 63 6f 6e 76 65  ymbol from conve
2300: 72 73 69 6f 6e 2e 0a 0a 09 66 6f 72 65 61 63 68  rsion....foreach
2310: 20 65 78 20 24 6d 79 65 78 63 6c 75 64 65 70 61   ex $myexcludepa
2320: 74 74 65 72 6e 20 7b 0a 09 20 20 20 20 73 74 72  ttern {..    str
2330: 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e  uct::list assign
2340: 20 24 65 78 20 70 70 20 73 70 0a 09 20 20 20 20   $ex pp sp..    
2350: 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74  if {![string mat
2360: 63 68 20 24 70 70 20 24 70 72 6f 6a 65 63 74 5d  ch $pp $project]
2370: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20  } continue..    
2380: 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74  if {![string mat
2390: 63 68 20 24 73 70 20 24 6d 79 6e 61 6d 65 5d 7d  ch $sp $myname]}
23a0: 20 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20    continue..    
23b0: 72 65 74 75 72 6e 20 24 6d 79 65 78 63 6c 75 64  return $myexclud
23c0: 65 64 0a 09 7d 0a 0a 09 23 20 49 66 20 74 68 65  ed..}...# If the
23d0: 20 73 79 6d 62 6f 6c 20 69 73 20 6e 6f 74 20 65   symbol is not e
23e0: 78 63 6c 75 64 65 64 20 66 75 72 74 68 65 72 20  xcluded further 
23f0: 63 68 65 63 6b 20 69 66 20 74 68 65 20 75 73 65  check if the use
2400: 72 0a 09 23 20 66 6f 72 63 65 73 20 69 74 73 20  r..# forces its 
2410: 63 6f 6e 76 65 72 73 69 6f 6e 20 61 73 20 61 20  conversion as a 
2420: 73 70 65 63 69 66 69 63 20 74 79 70 65 2e 0a 0a  specific type...
2430: 09 66 6f 72 65 61 63 68 20 7b 65 78 20 73 74 79  .foreach {ex sty
2440: 70 65 7d 20 24 6d 79 66 6f 72 63 65 70 61 74 74  pe} $myforcepatt
2450: 65 72 6e 20 7b 0a 09 20 20 20 20 73 74 72 75 63  ern {..    struc
2460: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24  t::list assign $
2470: 65 78 20 70 70 20 73 70 0a 09 20 20 20 20 69 66  ex pp sp..    if
2480: 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74 63 68   {![string match
2490: 20 24 70 70 20 24 70 72 6f 6a 65 63 74 5d 7d 20   $pp $project]} 
24a0: 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 69 66  continue..    if
24b0: 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74 63 68   {![string match
24c0: 20 24 73 70 20 24 6d 79 6e 61 6d 65 5d 7d 20 20   $sp $myname]}  
24d0: 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 72 65  continue..    re
24e0: 74 75 72 6e 20 24 73 74 79 70 65 0a 09 7d 0a 0a  turn $stype..}..
24f0: 09 23 20 4e 6f 74 68 69 6e 67 20 69 73 20 66 6f  .# Nothing is fo
2500: 72 63 65 64 2c 20 68 61 76 65 20 74 68 65 20 6d  rced, have the m
2510: 61 69 6e 20 73 79 73 74 65 6d 20 68 61 6e 64 20  ain system hand 
2520: 74 68 65 20 73 79 6d 62 6f 6c 20 6f 76 65 72 0a  the symbol over.
2530: 09 23 20 74 6f 20 74 68 65 20 72 65 67 75 6c 61  .# to the regula
2540: 72 20 68 65 75 72 69 73 74 69 63 73 2e 0a 0a 09  r heuristics....
2550: 72 65 74 75 72 6e 20 24 6d 79 75 6e 64 65 66 0a  return $myundef.
2560: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f      }..    metho
2570: 64 20 55 6e 61 6d 62 69 67 6f 75 73 20 7b 7d 20  d Unambigous {} 
2580: 7b 0a 09 23 20 49 66 20 61 20 73 79 6d 62 6f 6c  {..# If a symbol
2590: 20 69 73 20 75 73 65 64 20 75 6e 61 6d 62 69 67   is used unambig
25a0: 75 6f 75 73 6c 79 20 61 73 20 61 20 74 61 67 2f  uously as a tag/
25b0: 62 72 61 6e 63 68 2c 20 63 6f 6e 76 65 72 74 0a  branch, convert.
25c0: 09 23 20 69 74 20 61 73 20 73 75 63 68 2e 0a 0a  .# it as such...
25d0: 09 73 65 74 20 69 73 74 61 67 20 20 20 20 5b 65  .set istag    [e
25e0: 78 70 72 20 7b 24 6d 79 74 61 67 63 6f 75 6e 74  xpr {$mytagcount
25f0: 20 20 20 20 3e 20 30 7d 5d 0a 09 73 65 74 20 69      > 0}]..set i
2600: 73 62 72 61 6e 63 68 20 5b 65 78 70 72 20 7b 24  sbranch [expr {$
2610: 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 20 3e 20  mybranchcount > 
2620: 30 20 7c 7c 20 24 6d 79 63 6f 6d 6d 69 74 63 6f  0 || $mycommitco
2630: 75 6e 74 20 3e 20 30 7d 5d 0a 0a 09 69 66 20 7b  unt > 0}]...if {
2640: 24 69 73 74 61 67 20 26 26 20 24 69 73 62 72 61  $istag && $isbra
2650: 6e 63 68 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  nch} { return $m
2660: 79 75 6e 64 65 66 20 20 7d 0a 09 69 66 20 7b 24  yundef  }..if {$
2670: 69 73 74 61 67 7d 20 20 20 20 20 20 20 20 20 20  istag}          
2680: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 24 6d 79      { return $my
2690: 74 61 67 20 20 20 20 7d 0a 09 69 66 20 7b 24 69  tag    }..if {$i
26a0: 73 62 72 61 6e 63 68 7d 20 20 20 20 20 20 20 20  sbranch}        
26b0: 20 20 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 62     { return $myb
26c0: 72 61 6e 63 68 20 7d 0a 0a 09 23 20 53 79 6d 62  ranch }...# Symb
26d0: 6f 6c 20 77 61 73 20 6e 6f 74 20 75 73 65 64 20  ol was not used 
26e0: 61 74 20 61 6c 6c 2e 0a 09 72 65 74 75 72 6e 20  at all...return 
26f0: 24 6d 79 75 6e 64 65 66 0a 20 20 20 20 7d 0a 0a  $myundef.    }..
2700: 20 20 20 20 6d 65 74 68 6f 64 20 48 61 73 43 6f      method HasCo
2710: 6d 6d 69 74 73 20 7b 7d 20 7b 0a 09 23 20 49 66  mmits {} {..# If
2720: 20 74 68 65 72 65 20 77 61 73 20 65 76 65 72 20   there was ever 
2730: 61 20 63 6f 6d 6d 69 74 20 6f 6e 20 74 68 65 20  a commit on the 
2740: 73 79 6d 62 6f 6c 2c 20 63 6f 6e 76 65 72 74 20  symbol, convert 
2750: 69 74 20 61 73 20 61 0a 09 23 20 62 72 61 6e 63  it as a..# branc
2760: 68 2e 0a 0a 09 69 66 20 7b 24 6d 79 63 6f 6d 6d  h....if {$mycomm
2770: 69 74 63 6f 75 6e 74 20 3e 20 30 7d 20 7b 20 72  itcount > 0} { r
2780: 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 20  eturn $mybranch 
2790: 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 75 6e 64  }..return $myund
27a0: 65 66 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  ef.    }..    me
27b0: 74 68 6f 64 20 56 6f 74 65 43 6f 75 6e 74 73 20  thod VoteCounts 
27c0: 7b 7d 20 7b 0a 09 23 20 43 6f 6e 76 65 72 74 20  {} {..# Convert 
27d0: 74 68 65 20 73 79 6d 62 6f 6c 20 62 61 73 65 64  the symbol based
27e0: 20 6f 6e 20 68 6f 77 20 6f 66 74 65 6e 20 69 74   on how often it
27f0: 20 77 61 73 20 75 73 65 64 20 61 73 20 61 0a 09   was used as a..
2800: 23 20 62 72 61 6e 63 68 2f 74 61 67 2e 20 57 68  # branch/tag. Wh
2810: 69 63 68 65 76 65 72 20 68 61 70 70 65 6e 65 64  ichever happened
2820: 20 6d 6f 72 65 20 6f 66 74 65 6e 20 64 65 74 65   more often dete
2830: 72 6d 69 6e 65 73 20 68 6f 77 20 74 68 65 0a 09  rmines how the..
2840: 23 20 73 79 6d 62 6f 6c 20 69 73 20 63 6f 6e 76  # symbol is conv
2850: 65 72 74 65 64 2e 0a 0a 09 69 66 20 7b 24 6d 79  erted....if {$my
2860: 74 61 67 63 6f 75 6e 74 20 3e 20 24 6d 79 62 72  tagcount > $mybr
2870: 61 6e 63 68 63 6f 75 6e 74 7d 20 7b 20 72 65 74  anchcount} { ret
2880: 75 72 6e 20 24 6d 79 74 61 67 20 7d 0a 09 69 66  urn $mytag }..if
2890: 20 7b 24 6d 79 74 61 67 63 6f 75 6e 74 20 3c 20   {$mytagcount < 
28a0: 24 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 7d 20  $mybranchcount} 
28b0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e  { return $mybran
28c0: 63 68 20 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79  ch }..return $my
28d0: 75 6e 64 65 66 0a 20 20 20 20 7d 0a 0a 20 20 20  undef.    }..   
28e0: 20 6d 65 74 68 6f 64 20 4d 61 72 6b 41 73 20 7b   method MarkAs {
28f0: 6c 61 62 65 6c 20 63 68 6f 73 65 6e 7d 20 7b 0a  label chosen} {.
2900: 09 6c 6f 67 20 77 72 69 74 65 20 33 20 73 79 6d  .log write 3 sym
2910: 62 6f 6c 20 7b 5c 5b 24 6c 61 62 65 6c 5c 5d 20  bol {\[$label\] 
2920: 43 6f 6e 76 65 72 74 69 6e 67 20 73 79 6d 62 6f  Converting symbo
2930: 6c 20 27 24 6d 79 6e 61 6d 65 27 20 61 73 20 24  l '$myname' as $
2940: 6d 79 73 79 6d 74 79 70 65 28 24 63 68 6f 73 65  mysymtype($chose
2950: 6e 29 7d 0a 0a 09 73 65 74 20 6d 79 74 79 70 65  n)}...set mytype
2960: 20 24 63 68 6f 73 65 6e 0a 09 69 6e 63 72 20 6d   $chosen..incr m
2970: 79 72 75 6c 65 63 6f 75 6e 74 28 24 6c 61 62 65  yrulecount($labe
2980: 6c 29 0a 0a 09 23 20 54 68 69 73 20 69 73 20 73  l)...# This is s
2990: 74 6f 72 65 64 20 64 69 72 65 63 74 6c 79 20 69  tored directly i
29a0: 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65  nto the database
29b0: 2e 0a 09 73 74 61 74 65 20 72 75 6e 20 7b 0a 09  ...state run {..
29c0: 20 20 20 20 55 50 44 41 54 45 20 73 79 6d 62 6f      UPDATE symbo
29d0: 6c 0a 09 20 20 20 20 53 45 54 20 74 79 70 65 20  l..    SET type 
29e0: 3d 20 24 63 68 6f 73 65 6e 0a 09 20 20 20 20 57  = $chosen..    W
29f0: 48 45 52 45 20 73 69 64 20 3d 20 24 6d 79 69 64  HERE sid = $myid
2a00: 0a 09 20 20 20 20 3b 0a 09 7d 0a 09 72 65 74 75  ..    ;..}..retu
2a10: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  rn.    }..    # 
2a20: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
2a30: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
2a40: 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e  #####.    ## Con
2a50: 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20  figuration..    
2a60: 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69  pragma -hastypei
2a70: 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e  nfo    no  ; # n
2a80: 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65 63  o type introspec
2a90: 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20  tion.    pragma 
2aa0: 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20 20  -hasinfo        
2ab0: 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 63  no  ; # no objec
2ac0: 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a  t introspection.
2ad0: 20 20 20 20 70 72 61 67 6d 61 20 2d 73 69 6d 70      pragma -simp
2ae0: 6c 65 64 69 73 70 61 74 63 68 20 79 65 73 20 3b  ledispatch yes ;
2af0: 20 23 20 73 69 6d 70 6c 65 20 66 61 73 74 20 64   # simple fast d
2b00: 69 73 70 61 74 63 68 0a 0a 20 20 20 20 23 20 23  ispatch..    # #
2b10: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
2b20: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
2b30: 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63  ####.}..namespac
2b40: 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73  e eval ::vc::fos
2b50: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
2b60: 3a 3a 70 72 6f 6a 65 63 74 20 7b 0a 20 20 20 20  ::project {.    
2b70: 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74  namespace export
2b80: 20 73 79 6d 0a 20 20 20 20 6e 61 6d 65 73 70 61   sym.    namespa
2b90: 63 65 20 65 76 61 6c 20 73 79 6d 20 7b 0a 09 6e  ce eval sym {..n
2ba0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
2bb0: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
2bc0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65  port::cvs::state
2bd0: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  ..namespace impo
2be0: 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a  rt ::vc::tools::
2bf0: 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61  misc::*..namespa
2c00: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
2c10: 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09  tools::trouble..
2c20: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
2c30: 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f   ::vc::tools::lo
2c40: 67 0a 09 6c 6f 67 20 72 65 67 69 73 74 65 72 20  g..log register 
2c50: 73 79 6d 62 6f 6c 0a 20 20 20 20 7d 0a 7d 0a 0a  symbol.    }.}..
2c60: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
2c70: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
2c80: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
2c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
2ca0: 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20   Ready..package 
2cb0: 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73  provide vc::foss
2cc0: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
2cd0: 3a 70 72 6f 6a 65 63 74 3a 3a 73 79 6d 20 31 2e  :project::sym 1.
2ce0: 30 0a 72 65 74 75 72 6e 0a                       0.return.