Hex Artifact Content
Not logged in

Artifact 2ded920ae505e04a0a4ee36282de10ec1f8aab51:

File tools/cvs2fossil/lib/c2f_psym.tcl part of check-in [a5840849d0] - Fixed bug computing a symbol's parent. preferedparent is the voting table, not the home of the definite information. The bug caused the use of the wrong parent lod during the import of changesets. Luckily the chosen parent was not known yet, causing an abort. by aku on 2008-02-06 04:57:30.

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 6d 65  myid   }..    me
0620: 74 68 6f 64 20 69 73 74 72 75 6e 6b 20 7b 7d 20  thod istrunk {} 
0630: 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 0a 20 20  { return 0 }..  
0640: 20 20 6d 65 74 68 6f 64 20 70 61 72 65 6e 74 20    method parent 
0650: 7b 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 24 6d  {} {..return [$m
0660: 79 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62  yproject getsymb
0670: 6f 6c 20 5b 73 74 61 74 65 20 6f 6e 65 20 7b 0a  ol [state one {.
0680: 09 20 20 20 20 53 45 4c 45 43 54 20 53 2e 6e 61  .    SELECT S.na
0690: 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 74 61 67  me..    FROM tag
06a0: 20 54 2c 20 73 79 6d 62 6f 6c 20 53 0a 09 20 20   T, symbol S..  
06b0: 20 20 57 48 45 52 45 20 54 2e 73 69 64 20 3d 20    WHERE T.sid = 
06c0: 24 6d 79 69 64 0a 09 20 20 20 20 41 4e 44 20 20  $myid..    AND  
06d0: 20 53 2e 73 69 64 20 3d 20 54 2e 6c 6f 64 0a 09   S.sid = T.lod..
06e0: 55 4e 49 4f 4e 0a 09 20 20 20 20 53 45 4c 45 43  UNION..    SELEC
06f0: 54 20 53 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52  T S.name..    FR
0700: 4f 4d 20 62 72 61 6e 63 68 20 42 2c 20 73 79 6d  OM branch B, sym
0710: 62 6f 6c 20 53 0a 09 20 20 20 20 57 48 45 52 45  bol S..    WHERE
0720: 20 42 2e 73 69 64 20 3d 20 24 6d 79 69 64 0a 09   B.sid = $myid..
0730: 20 20 20 20 41 4e 44 20 20 20 53 2e 73 69 64 20      AND   S.sid 
0740: 3d 20 42 2e 6c 6f 64 0a 09 7d 5d 5d 0a 09 72 65  = B.lod..}]]..re
0750: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
0760: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
0770: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
0780: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 53  #######.    ## S
0790: 79 6d 62 6f 6c 20 74 79 70 65 0a 0a 20 20 20 20  ymbol type..    
07a0: 6d 65 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65  method determine
07b0: 74 79 70 65 20 7b 7d 20 7b 0a 09 23 20 54 68 69  type {} {..# Thi
07c0: 73 20 69 73 20 64 6f 6e 65 20 62 79 20 61 20 66  s is done by a f
07d0: 69 78 65 64 20 68 65 75 72 69 73 74 69 63 73 2c  ixed heuristics,
07e0: 20 77 69 74 68 20 67 75 69 64 61 6e 63 65 20 62   with guidance b
07f0: 79 20 74 68 65 0a 09 23 20 75 73 65 72 20 69 6e  y the..# user in
0800: 20 65 64 67 65 2d 63 61 73 65 73 2e 20 43 6f 6e   edge-cases. Con
0810: 74 72 61 72 79 20 74 6f 20 63 76 73 32 73 76 6e  trary to cvs2svn
0820: 20 77 68 69 63 68 20 75 73 65 73 20 61 20 62 69   which uses a bi
0830: 67 0a 09 23 20 68 6f 6e 6b 69 6e 67 20 73 74 72  g..# honking str
0840: 65 61 67 79 20 63 6c 61 73 73 20 61 6e 64 20 72  eagy class and r
0850: 75 6c 65 20 6f 62 6a 65 63 74 73 2e 20 4b 65 65  ule objects. Kee
0860: 70 20 69 74 20 73 69 6d 70 6c 65 2c 20 77 65 0a  p it simple, we.
0870: 09 23 20 63 61 6e 20 65 78 70 61 6e 64 20 6c 61  .# can expand la
0880: 74 65 72 20 77 68 65 6e 20 77 65 20 61 63 74 75  ter when we actu
0890: 61 6c 6c 79 20 6e 65 65 64 20 61 6c 6c 20 74 68  ally need all th
08a0: 65 20 63 6f 6d 70 6c 65 78 69 74 79 0a 09 23 20  e complexity..# 
08b0: 66 6f 72 20 63 6f 6e 66 69 67 75 72 61 62 69 6c  for configurabil
08c0: 69 74 79 2e 0a 0a 09 23 20 54 68 65 20 66 6f 6c  ity....# The fol
08d0: 6c 6f 77 69 6e 67 20 67 75 69 64 65 6c 69 6e 65  lowing guideline
08e0: 73 20 61 72 65 20 61 70 70 6c 69 65 64 3a 0a 09  s are applied:..
08f0: 23 20 2d 20 49 73 20 75 73 61 67 65 20 75 6e 61  # - Is usage una
0900: 6d 62 69 67 6f 75 73 20 3f 0a 09 23 20 2d 20 57  mbigous ?..# - W
0910: 61 73 20 74 68 65 72 65 20 65 76 65 72 20 61 20  as there ever a 
0920: 63 6f 6d 6d 69 74 20 6f 6e 20 74 68 65 20 73 79  commit on the sy
0930: 6d 62 6f 6c 20 3f 0a 09 23 20 2d 20 4d 6f 72 65  mbol ?..# - More
0940: 20 75 73 65 64 20 61 73 20 74 61 67 2c 20 6f 72   used as tag, or
0950: 20 6d 6f 72 65 20 75 73 65 64 20 61 73 20 62 72   more used as br
0960: 61 6e 63 68 20 3f 0a 09 23 20 2d 20 41 74 20 6c  anch ?..# - At l
0970: 61 73 74 2c 20 77 68 61 74 20 68 61 73 20 74 68  ast, what has th
0980: 65 20 75 73 65 72 20 74 6f 6c 64 20 75 73 20 61  e user told us a
0990: 62 6f 75 74 20 69 74 20 3f 0a 09 23 20 2d 20 46  bout it ?..# - F
09a0: 61 69 6c 0a 0a 09 66 6f 72 65 61 63 68 20 72 75  ail...foreach ru
09b0: 6c 65 20 7b 0a 09 20 20 20 20 55 73 65 72 43 6f  le {..    UserCo
09c0: 6e 66 69 67 0a 09 20 20 20 20 55 6e 61 6d 62 69  nfig..    Unambi
09d0: 67 6f 75 73 0a 09 20 20 20 20 48 61 73 43 6f 6d  gous..    HasCom
09e0: 6d 69 74 73 0a 09 20 20 20 20 56 6f 74 65 43 6f  mits..    VoteCo
09f0: 75 6e 74 73 0a 09 7d 20 7b 0a 09 20 20 20 73 65  unts..} {..   se
0a00: 74 20 63 68 6f 73 65 6e 20 5b 24 73 65 6c 66 20  t chosen [$self 
0a10: 24 72 75 6c 65 5d 0a 09 20 20 20 69 66 20 7b 24  $rule]..   if {$
0a20: 63 68 6f 73 65 6e 20 65 71 20 24 6d 79 75 6e 64  chosen eq $myund
0a30: 65 66 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  ef} continue..  
0a40: 20 24 73 65 6c 66 20 4d 61 72 6b 41 73 20 24 72   $self MarkAs $r
0a50: 75 6c 65 20 24 63 68 6f 73 65 6e 0a 09 20 20 20  ule $chosen..   
0a60: 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 23 20 4e 6f  return..}...# No
0a70: 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20  ne of the above 
0a80: 77 61 73 20 61 62 6c 65 20 74 6f 20 64 65 63 69  was able to deci
0a90: 64 65 20 77 68 69 63 68 20 74 79 70 65 20 74 6f  de which type to
0aa0: 20 61 73 73 69 67 6e 20 74 6f 0a 09 23 20 74 68   assign to..# th
0ab0: 65 20 73 79 6d 62 6f 6c 2e 20 54 68 69 73 20 69  e symbol. This i
0ac0: 73 20 61 20 66 61 74 61 6c 20 65 72 72 6f 72 20  s a fatal error 
0ad0: 70 72 65 76 65 6e 74 69 6e 67 20 74 68 65 20 65  preventing the e
0ae0: 78 65 63 75 74 69 6f 6e 0a 09 23 20 6f 66 20 74  xecution..# of t
0af0: 68 65 20 70 61 73 73 65 73 20 61 66 74 65 72 20  he passes after 
0b00: 27 43 6f 6c 6c 61 74 65 53 79 6d 62 6f 6c 73 27  'CollateSymbols'
0b10: 2e 0a 0a 09 69 6e 63 72 20 6d 79 72 75 6c 65 63  ....incr myrulec
0b20: 6f 75 6e 74 28 55 6e 64 65 63 69 64 65 64 5f 29  ount(Undecided_)
0b30: 0a 09 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20  ..trouble fatal 
0b40: 22 55 6e 61 62 6c 65 20 74 6f 20 64 65 63 69 64  "Unable to decid
0b50: 65 20 68 6f 77 20 74 6f 20 63 6f 6e 76 65 72 74  e how to convert
0b60: 20 73 79 6d 62 6f 6c 20 27 24 6d 79 6e 61 6d 65   symbol '$myname
0b70: 27 22 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  '"..return.    }
0b80: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6d 61 72  ..    method mar
0b90: 6b 74 68 65 74 72 75 6e 6b 20 7b 7d 20 7b 20 24  kthetrunk {} { $
0ba0: 73 65 6c 66 20 4d 61 72 6b 41 73 20 49 73 54 68  self MarkAs IsTh
0bb0: 65 54 72 75 6e 6b 20 24 6d 79 62 72 61 6e 63 68  eTrunk $mybranch
0bc0: 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20   ; return }..   
0bd0: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
0be0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
0bf0: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20  ########.    ## 
0c00: 53 79 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63  Symbol statistic
0c10: 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65  s..    method de
0c20: 66 63 6f 75 6e 74 73 20 7b 74 63 20 62 63 20 63  fcounts {tc bc c
0c30: 63 7d 20 7b 0a 09 73 65 74 20 6d 79 62 72 61 6e  c} {..set mybran
0c40: 63 68 63 6f 75 6e 74 20 24 74 63 0a 09 73 65 74  chcount $tc..set
0c50: 20 6d 79 74 61 67 63 6f 75 6e 74 20 20 20 20 24   mytagcount    $
0c60: 62 63 0a 09 73 65 74 20 6d 79 63 6f 6d 6d 69 74  bc..set mycommit
0c70: 63 6f 75 6e 74 20 24 63 63 0a 09 72 65 74 75 72  count $cc..retur
0c80: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  n.    }..    met
0c90: 68 6f 64 20 63 6f 75 6e 74 61 73 62 72 61 6e 63  hod countasbranc
0ca0: 68 20 7b 7d 20 7b 20 69 6e 63 72 20 6d 79 62 72  h {} { incr mybr
0cb0: 61 6e 63 68 63 6f 75 6e 74 20 3b 20 72 65 74 75  anchcount ; retu
0cc0: 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20  rn }.    method 
0cd0: 63 6f 75 6e 74 61 73 74 61 67 20 20 20 20 7b 7d  countastag    {}
0ce0: 20 7b 20 69 6e 63 72 20 6d 79 74 61 67 63 6f 75   { incr mytagcou
0cf0: 6e 74 20 20 20 20 3b 20 72 65 74 75 72 6e 20 7d  nt    ; return }
0d00: 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 6f 75 6e  .    method coun
0d10: 74 61 63 6f 6d 6d 69 74 20 20 7b 7d 20 7b 20 69  tacommit  {} { i
0d20: 6e 63 72 20 6d 79 63 6f 6d 6d 69 74 63 6f 75 6e  ncr mycommitcoun
0d30: 74 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20  t ; return }..  
0d40: 20 20 6d 65 74 68 6f 64 20 62 6c 6f 63 6b 65 64    method blocked
0d50: 62 79 20 7b 73 79 6d 62 6f 6c 7d 20 7b 0a 09 23  by {symbol} {..#
0d60: 20 52 65 6d 65 6d 62 65 72 20 74 68 65 20 73 79   Remember the sy
0d70: 6d 62 6f 6c 20 61 73 20 70 72 65 76 65 6e 74 69  mbol as preventi
0d80: 6e 67 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f  ng the removal o
0d90: 66 20 74 68 69 73 0a 09 23 20 73 79 6d 62 6f 6c  f this..# symbol
0da0: 2e 20 4f 74 20 69 73 20 61 20 74 61 67 20 6f 72  . Ot is a tag or
0db0: 20 62 72 61 6e 63 68 20 74 68 61 74 20 73 70 61   branch that spa
0dc0: 77 6e 65 64 20 66 72 6f 6d 20 61 20 72 65 76 69  wned from a revi
0dd0: 73 69 6f 6e 0a 09 23 20 6f 6e 20 74 68 69 73 20  sion..# on this 
0de0: 73 79 6d 62 6f 6c 2e 0a 0a 09 73 74 72 75 63 74  symbol....struct
0df0: 3a 3a 73 65 74 20 69 6e 63 6c 75 64 65 20 6d 79  ::set include my
0e00: 62 6c 6f 63 6b 65 72 73 20 24 73 79 6d 62 6f 6c  blockers $symbol
0e10: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
0e20: 20 20 20 20 6d 65 74 68 6f 64 20 70 6f 73 73 69      method possi
0e30: 62 6c 65 70 61 72 65 6e 74 20 7b 73 79 6d 62 6f  bleparent {symbo
0e40: 6c 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20  l} {..log write 
0e50: 39 20 73 79 6d 62 6f 6c 20 22 50 6f 73 73 69 62  9 symbol "Possib
0e60: 6c 65 20 70 61 72 65 6e 74 20 28 24 6d 79 6e 61  le parent ($myna
0e70: 6d 65 29 20 3d 20 5b 24 73 79 6d 62 6f 6c 20 6e  me) = [$symbol n
0e80: 61 6d 65 5d 22 0a 0a 09 69 66 20 7b 5b 69 6e 66  ame]"...if {[inf
0e90: 6f 20 65 78 69 73 74 73 20 6d 79 70 70 61 72 65  o exists myppare
0ea0: 6e 74 28 24 73 79 6d 62 6f 6c 29 5d 7d 20 7b 0a  nt($symbol)]} {.
0eb0: 09 20 20 20 20 69 6e 63 72 20 6d 79 70 70 61 72  .    incr myppar
0ec0: 65 6e 74 28 24 73 79 6d 62 6f 6c 29 0a 09 7d 20  ent($symbol)..} 
0ed0: 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 74 20  else {..    set 
0ee0: 20 6d 79 70 70 61 72 65 6e 74 28 24 73 79 6d 62   mypparent($symb
0ef0: 6f 6c 29 20 31 0a 09 7d 0a 09 72 65 74 75 72 6e  ol) 1..}..return
0f00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68  .    }..    meth
0f10: 6f 64 20 69 73 67 68 6f 73 74 20 7b 7d 20 7b 0a  od isghost {} {.
0f20: 09 23 20 43 68 65 63 6b 73 20 69 66 20 74 68 69  .# Checks if thi
0f30: 73 20 73 79 6d 62 6f 6c 20 28 61 73 20 6c 69 6e  s symbol (as lin
0f40: 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74  e of development
0f50: 29 20 6e 65 76 65 72 0a 09 23 20 65 78 69 73 74  ) never..# exist
0f60: 65 64 2e 0a 0a 09 69 66 20 7b 24 6d 79 63 6f 6d  ed....if {$mycom
0f70: 6d 69 74 63 6f 75 6e 74 20 3e 20 30 7d 20 20 20  mitcount > 0}   
0f80: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 30        { return 0
0f90: 20 7d 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68   }..if {[llength
0fa0: 20 24 6d 79 62 6c 6f 63 6b 65 72 73 5d 7d 20 20   $myblockers]}  
0fb0: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 30 20 7d      { return 0 }
0fc0: 0a 09 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a  ..if {[array siz
0fd0: 65 20 6d 79 70 70 61 72 65 6e 74 5d 20 3e 20 30  e mypparent] > 0
0fe0: 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 0a  } { return 0 }..
0ff0: 09 72 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a  .return 1.    }.
1000: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
1010: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
1020: 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20  ############..  
1030: 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74    method persist
1040: 72 65 76 20 7b 7d 20 7b 0a 09 73 65 74 20 70 69  rev {} {..set pi
1050: 64 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 69 64  d [$myproject id
1060: 5d 0a 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61  ]...state transa
1070: 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 73 74 61  ction {..    sta
1080: 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 52  te run {...INSER
1090: 54 20 49 4e 54 4f 20 73 79 6d 62 6f 6c 20 28 20  T INTO symbol ( 
10a0: 73 69 64 2c 20 20 20 70 69 64 2c 20 20 6e 61 6d  sid,   pid,  nam
10b0: 65 2c 20 20 20 74 79 70 65 2c 20 20 20 20 20 74  e,   type,     t
10c0: 61 67 5f 63 6f 75 6e 74 2c 20 20 20 62 72 61 6e  ag_count,   bran
10d0: 63 68 5f 63 6f 75 6e 74 2c 20 20 20 63 6f 6d 6d  ch_count,   comm
10e0: 69 74 5f 63 6f 75 6e 74 29 0a 09 09 56 41 4c 55  it_count)...VALU
10f0: 45 53 20 20 20 20 20 20 20 20 20 20 20 20 20 28  ES             (
1100: 24 6d 79 69 64 2c 20 24 70 69 64 2c 20 24 6d 79  $myid, $pid, $my
1110: 6e 61 6d 65 2c 20 24 6d 79 75 6e 64 65 66 2c 20  name, $myundef, 
1120: 24 6d 79 74 61 67 63 6f 75 6e 74 2c 20 24 6d 79  $mytagcount, $my
1130: 62 72 61 6e 63 68 63 6f 75 6e 74 2c 20 24 6d 79  branchcount, $my
1140: 63 6f 6d 6d 69 74 63 6f 75 6e 74 29 3b 0a 09 20  commitcount);.. 
1150: 20 20 20 7d 0a 09 20 20 20 20 66 6f 72 65 61 63     }..    foreac
1160: 68 20 73 79 6d 62 6f 6c 20 24 6d 79 62 6c 6f 63  h symbol $mybloc
1170: 6b 65 72 73 20 7b 0a 09 09 73 65 74 20 62 69 64  kers {...set bid
1180: 20 5b 24 73 79 6d 62 6f 6c 20 69 64 5d 0a 09 09   [$symbol id]...
1190: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 20 20  state run {...  
11a0: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 6c    INSERT INTO bl
11b0: 6f 63 6b 65 72 20 28 73 69 64 2c 20 20 20 62 69  ocker (sid,   bi
11c0: 64 29 0a 09 09 20 20 20 20 56 41 4c 55 45 53 20  d)...    VALUES 
11d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 24 6d               ($m
11e0: 79 69 64 2c 20 24 62 69 64 29 3b 0a 09 09 7d 0a  yid, $bid);...}.
11f0: 09 20 20 20 20 7d 0a 09 20 20 20 20 66 6f 72 65  .    }..    fore
1200: 61 63 68 20 7b 73 79 6d 62 6f 6c 20 63 6f 75 6e  ach {symbol coun
1210: 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79  t} [array get my
1220: 70 70 61 72 65 6e 74 5d 20 7b 0a 09 09 73 65 74  pparent] {...set
1230: 20 70 69 64 20 5b 24 73 79 6d 62 6f 6c 20 69 64   pid [$symbol id
1240: 5d 0a 09 09 73 74 61 74 65 20 72 75 6e 20 7b 0a  ]...state run {.
1250: 09 09 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
1260: 4f 20 70 61 72 65 6e 74 20 28 73 69 64 2c 20 20  O parent (sid,  
1270: 20 70 69 64 2c 20 20 6e 29 0a 09 09 20 20 20 20   pid,  n)...    
1280: 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20  VALUES          
1290: 20 20 20 28 24 6d 79 69 64 2c 20 24 70 69 64 2c     ($myid, $pid,
12a0: 20 24 63 6f 75 6e 74 29 3b 0a 09 09 7d 0a 09 20   $count);...}.. 
12b0: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a     }..}..return.
12c0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23      }..    # # #
12d0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
12e0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
12f0: 23 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a  ##.    ## State.
1300: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
1310: 70 72 6f 6a 65 63 74 20 7b 7d 20 3b 20 23 20 52  project {} ; # R
1320: 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20  eference to the 
1330: 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63 74 0a 09  project object..
1340: 09 09 20 20 20 20 23 20 63 6f 6e 74 61 69 6e 69  ..    # containi
1350: 6e 67 20 74 68 65 20 73 79 6d 62 6f 6c 2e 0a 20  ng the symbol.. 
1360: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6e 61     variable myna
1370: 6d 65 20 20 20 20 7b 7d 20 3b 20 23 20 54 68 65  me    {} ; # The
1380: 20 73 79 6d 62 6f 6c 27 73 20 6e 61 6d 65 0a 20   symbol's name. 
1390: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 64     variable myid
13a0: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 70        {} ; # Rep
13b0: 6f 73 69 74 6f 72 79 20 77 69 64 65 20 6e 75 6d  ository wide num
13c0: 65 72 69 63 20 69 64 20 6f 66 20 74 68 65 0a 09  eric id of the..
13d0: 09 09 20 20 20 20 23 20 73 79 6d 62 6f 6c 2e 20  ..    # symbol. 
13e0: 54 68 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20  This implicitly 
13f0: 65 6e 63 6f 64 65 73 20 74 68 65 0a 09 09 09 20  encodes the.... 
1400: 20 20 20 23 20 70 72 6f 6a 65 63 74 20 61 73 20     # project as 
1410: 77 65 6c 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61  well...    varia
1420: 62 6c 65 20 6d 79 62 72 61 6e 63 68 63 6f 75 6e  ble mybranchcoun
1430: 74 20 30 20 3b 20 23 20 43 6f 75 6e 74 20 68 6f  t 0 ; # Count ho
1440: 77 20 6d 61 6e 79 20 75 73 65 73 20 61 73 20 62  w many uses as b
1450: 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 61  ranch..    varia
1460: 62 6c 65 20 6d 79 74 61 67 63 6f 75 6e 74 20 20  ble mytagcount  
1470: 20 20 30 20 3b 20 23 20 43 6f 75 6e 74 20 68 6f    0 ; # Count ho
1480: 77 20 6d 61 6e 79 20 75 73 65 73 20 61 73 20 74  w many uses as t
1490: 61 67 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65  ag..    variable
14a0: 20 6d 79 63 6f 6d 6d 69 74 63 6f 75 6e 74 20 30   mycommitcount 0
14b0: 20 3b 20 23 20 43 6f 75 6e 74 20 68 6f 77 20 6d   ; # Count how m
14c0: 61 6e 79 20 66 69 6c 65 73 20 64 69 64 20 61 20  any files did a 
14d0: 63 6f 6d 6d 69 74 20 6f 6e 20 74 68 65 20 73 79  commit on the sy
14e0: 6d 62 6f 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61  mbol...    varia
14f0: 62 6c 65 20 6d 79 62 6c 6f 63 6b 65 72 73 20 20  ble myblockers  
1500: 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 28 53 65   {} ; # List (Se
1510: 74 29 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c  t) of the symbol
1520: 73 20 77 68 69 63 68 20 62 6c 6f 63 6b 0a 09 09  s which block...
1530: 09 20 20 20 20 20 20 20 23 20 74 68 65 20 65 78  .       # the ex
1540: 63 6c 75 73 69 6f 6e 20 6f 66 20 74 68 69 73 20  clusion of this 
1550: 73 79 6d 62 6f 6c 2e 0a 0a 20 20 20 20 76 61 72  symbol...    var
1560: 69 61 62 6c 65 20 6d 79 70 70 61 72 65 6e 74 20  iable mypparent 
1570: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61  -array {} ; # Ma
1580: 70 73 20 66 72 6f 6d 20 73 79 6d 62 6f 6c 73 20  ps from symbols 
1590: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 0a 09 09  to the number...
15a0: 09 09 20 20 20 23 20 6f 66 20 66 69 6c 65 73 20  ..   # of files 
15b0: 69 6e 20 77 68 69 63 68 20 69 74 20 63 6f 75 6c  in which it coul
15c0: 64 20 68 61 76 65 0a 09 09 09 09 20 20 20 23 20  d have.....   # 
15d0: 62 65 65 6e 20 61 20 70 61 72 65 6e 74 20 6f 66  been a parent of
15e0: 20 74 68 69 73 20 73 79 6d 62 6f 6c 2e 0a 0a 20   this symbol... 
15f0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 79     variable myty
1600: 70 65 20 7b 7d 20 3b 20 23 20 54 68 65 20 74 79  pe {} ; # The ty
1610: 70 65 20 63 68 6f 73 65 6e 20 66 6f 72 20 74 68  pe chosen for th
1620: 65 20 73 79 6d 62 6f 6c 20 74 6f 20 75 73 65 20  e symbol to use 
1630: 69 6e 0a 09 09 09 20 23 20 74 68 65 20 63 6f 6e  in.... # the con
1640: 76 65 72 73 69 6f 6e 2e 0a 0a 20 20 20 20 23 20  version...    # 
1650: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
1660: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
1670: 23 23 23 23 23 0a 0a 20 20 20 20 74 79 70 65 6d  #####..    typem
1680: 65 74 68 6f 64 20 65 78 63 6c 75 64 65 20 7b 70  ethod exclude {p
1690: 61 74 74 65 72 6e 7d 20 7b 0a 09 23 20 53 74 6f  attern} {..# Sto
16a0: 72 65 20 74 68 65 20 70 61 74 74 65 72 6e 20 69  re the pattern i
16b0: 6e 20 6d 65 6d 6f 72 79 20 66 6f 72 20 75 73 65  n memory for use
16c0: 20 62 79 20 74 68 65 20 63 6f 64 65 20 64 6f 69   by the code doi
16d0: 6e 67 20 74 79 70 65 0a 09 23 20 64 65 74 65 72  ng type..# deter
16e0: 6d 69 6e 61 74 69 6f 6e 2e 0a 0a 09 6c 61 70 70  mination....lapp
16f0: 65 6e 64 20 6d 79 65 78 63 6c 75 64 65 70 61 74  end myexcludepat
1700: 74 65 72 6e 20 5b 50 72 6f 63 65 73 73 50 61 74  tern [ProcessPat
1710: 74 65 72 6e 20 24 70 61 74 74 65 72 6e 20 65 78  tern $pattern ex
1720: 63 6c 75 73 69 6f 6e 5d 0a 09 72 65 74 75 72 6e  clusion]..return
1730: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65  .    }..    type
1740: 6d 65 74 68 6f 64 20 66 6f 72 63 65 74 61 67 20  method forcetag 
1750: 7b 70 61 74 74 65 72 6e 7d 20 7b 0a 09 23 20 53  {pattern} {..# S
1760: 74 6f 72 65 20 74 68 65 20 70 61 74 74 65 72 6e  tore the pattern
1770: 20 69 6e 20 6d 65 6d 6f 72 79 20 66 6f 72 20 75   in memory for u
1780: 73 65 20 62 79 20 74 68 65 20 63 6f 64 65 20 64  se by the code d
1790: 6f 69 6e 67 20 74 79 70 65 0a 09 23 20 64 65 74  oing type..# det
17a0: 65 72 6d 69 6e 61 74 69 6f 6e 2e 0a 0a 09 6c 61  ermination....la
17b0: 70 70 65 6e 64 20 6d 79 66 6f 72 63 65 70 61 74  ppend myforcepat
17c0: 74 65 72 6e 20 5b 50 72 6f 63 65 73 73 50 61 74  tern [ProcessPat
17d0: 74 65 72 6e 20 24 70 61 74 74 65 72 6e 20 66 6f  tern $pattern fo
17e0: 72 63 65 2d 74 61 67 5d 20 24 6d 79 74 61 67 0a  rce-tag] $mytag.
17f0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
1800: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 66 6f     typemethod fo
1810: 72 63 65 62 72 61 6e 63 68 20 7b 70 61 74 74 65  rcebranch {patte
1820: 72 6e 7d 20 7b 0a 09 23 20 53 74 6f 72 65 20 74  rn} {..# Store t
1830: 68 65 20 70 61 74 74 65 72 6e 20 69 6e 20 6d 65  he pattern in me
1840: 6d 6f 72 79 20 66 6f 72 20 75 73 65 20 62 79 20  mory for use by 
1850: 74 68 65 20 63 6f 64 65 20 64 6f 69 6e 67 20 74  the code doing t
1860: 79 70 65 0a 09 23 20 64 65 74 65 72 6d 69 6e 61  ype..# determina
1870: 74 69 6f 6e 2e 0a 0a 09 6c 61 70 70 65 6e 64 20  tion....lappend 
1880: 6d 79 66 6f 72 63 65 70 61 74 74 65 72 6e 20 5b  myforcepattern [
1890: 50 72 6f 63 65 73 73 50 61 74 74 65 72 6e 20 24  ProcessPattern $
18a0: 70 61 74 74 65 72 6e 20 66 6f 72 63 65 2d 62 72  pattern force-br
18b0: 61 6e 63 68 5d 20 24 6d 79 62 72 61 6e 63 68 0a  anch] $mybranch.
18c0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
18d0: 20 20 20 70 72 6f 63 20 50 72 6f 63 65 73 73 50     proc ProcessP
18e0: 61 74 74 65 72 6e 20 7b 70 61 74 74 65 72 6e 20  attern {pattern 
18f0: 6c 61 62 65 6c 7d 20 7b 0a 09 69 66 20 7b 5b 73  label} {..if {[s
1900: 74 72 69 6e 67 20 6d 61 74 63 68 20 2a 3a 2a 3a  tring match *:*:
1910: 2a 20 24 70 61 74 74 65 72 6e 5d 7d 20 7b 0a 09  * $pattern]} {..
1920: 20 20 20 20 23 20 42 61 64 20 73 79 6e 74 61 78      # Bad syntax
1930: 20 66 6f 72 20 74 68 65 20 70 61 74 74 65 72 6e   for the pattern
1940: 2c 20 75 73 69 6e 67 20 6d 75 6c 74 69 70 6c 65  , using multiple
1950: 20 63 6f 6c 6f 6e 73 2e 0a 0a 09 20 20 20 20 74   colons....    t
1960: 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 42 61  rouble fatal "Ba
1970: 64 20 24 6c 61 62 65 6c 20 70 61 74 74 65 72 6e  d $label pattern
1980: 20 27 24 70 61 74 74 65 72 6e 27 22 0a 09 7d 20   '$pattern'"..} 
1990: 65 6c 73 65 69 66 20 7b 21 5b 73 74 72 69 6e 67  elseif {![string
19a0: 20 6d 61 74 63 68 20 2a 3a 2a 20 24 70 61 74 74   match *:* $patt
19b0: 65 72 6e 5d 7d 20 7b 0a 09 20 20 20 20 23 20 57  ern]} {..    # W
19c0: 68 65 6e 20 6f 6e 6c 79 20 61 20 73 79 6d 62 6f  hen only a symbo
19d0: 6c 20 70 61 74 74 65 72 6e 20 69 73 20 73 70 65  l pattern is spe
19e0: 63 69 66 69 65 64 20 69 74 20 61 70 70 6c 69 65  cified it applie
19f0: 73 20 74 6f 0a 09 20 20 20 20 23 20 61 6c 6c 20  s to..    # all 
1a00: 70 72 6f 6a 65 63 74 73 2e 0a 0a 09 20 20 20 20  projects....    
1a10: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 2a 20 24  return [list * $
1a20: 70 61 74 74 65 72 6e 5d 0a 09 7d 20 65 6c 73 65  pattern]..} else
1a30: 20 7b 0a 09 20 20 20 20 23 20 42 6f 74 68 20 70   {..    # Both p
1a40: 72 6f 6a 65 63 74 20 61 6e 64 20 73 79 6d 62 6f  roject and symbo
1a50: 6c 20 70 61 74 74 65 72 6e 73 20 61 72 65 20 70  l patterns are p
1a60: 72 65 73 65 6e 74 2c 20 77 65 20 73 70 6c 69 74  resent, we split
1a70: 0a 09 20 20 20 20 23 20 74 68 65 6d 20 61 70 61  ..    # them apa
1a80: 72 74 20 6e 6f 77 20 66 6f 72 20 73 74 6f 72 61  rt now for stora
1a90: 67 65 20 61 6e 64 20 65 61 73 69 65 72 20 65 78  ge and easier ex
1aa0: 74 72 61 63 74 69 6f 6e 20 6c 61 74 65 72 2e 0a  traction later..
1ab0: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 5b 73 70  ..    return [sp
1ac0: 6c 69 74 20 24 70 61 74 74 65 72 6e 20 3a 5d 0a  lit $pattern :].
1ad0: 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79  .}.    }..    ty
1ae0: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 65 78 63  pevariable myexc
1af0: 6c 75 64 65 70 61 74 74 65 72 6e 20 7b 7d 20 3b  ludepattern {} ;
1b00: 20 23 20 4c 69 73 74 20 6f 66 20 70 61 74 74 65   # List of patte
1b10: 72 6e 73 20 73 70 65 63 69 66 79 69 6e 67 0a 09  rns specifying..
1b20: 09 09 09 20 20 20 20 20 20 20 23 20 74 68 65 20  ...       # the 
1b30: 73 79 6d 62 6f 6c 73 20 74 6f 20 65 78 63 6c 75  symbols to exclu
1b40: 64 65 20 66 72 6f 6d 0a 09 09 09 09 20 20 20 20  de from.....    
1b50: 20 20 20 23 20 63 6f 6e 76 65 72 73 69 6f 6e 2e     # conversion.
1b60: 20 54 61 67 73 20 61 6e 64 2f 6f 72 0a 09 09 09   Tags and/or....
1b70: 09 20 20 20 20 20 20 20 23 20 62 72 61 6e 63 68  .       # branch
1b80: 65 73 2e 0a 0a 20 20 20 20 74 79 70 65 76 61 72  es...    typevar
1b90: 69 61 62 6c 65 20 6d 79 66 6f 72 63 65 70 61 74  iable myforcepat
1ba0: 74 65 72 6e 20 7b 7d 20 3b 20 23 20 4c 69 73 74  tern {} ; # List
1bb0: 20 6f 66 20 70 61 74 74 65 72 6e 73 20 61 6e 64   of patterns and
1bc0: 20 74 79 70 65 73 0a 09 09 09 09 20 20 20 20 20   types.....     
1bd0: 23 20 73 70 65 63 69 66 79 69 6e 67 20 77 68 69  # specifying whi
1be0: 63 68 20 73 79 6d 62 6f 6c 73 20 74 6f 0a 09 09  ch symbols to...
1bf0: 09 09 20 20 20 20 20 23 20 66 6f 72 63 65 20 74  ..     # force t
1c00: 6f 20 73 70 65 63 69 66 69 63 20 74 79 70 65 73  o specific types
1c10: 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f  ...    typemetho
1c20: 64 20 67 65 74 73 79 6d 74 79 70 65 73 20 7b 7d  d getsymtypes {}
1c30: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 74 69 64   {..foreach {tid
1c40: 20 6e 61 6d 65 7d 20 5b 73 74 61 74 65 20 72 75   name} [state ru
1c50: 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20  n {..    SELECT 
1c60: 74 69 64 2c 20 6e 61 6d 65 20 46 52 4f 4d 20 73  tid, name FROM s
1c70: 79 6d 74 79 70 65 3b 0a 09 7d 5d 20 7b 20 73 65  ymtype;..}] { se
1c80: 74 20 6d 79 73 79 6d 74 79 70 65 28 24 74 69 64  t mysymtype($tid
1c90: 29 20 24 6e 61 6d 65 20 7d 0a 09 72 65 74 75 72  ) $name }..retur
1ca0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 4b  n.    }..    # K
1cb0: 65 65 70 20 74 68 65 20 63 6f 64 65 73 20 62 65  eep the codes be
1cc0: 6c 6f 77 20 69 6e 20 73 79 6e 63 20 77 69 74 68  low in sync with
1cd0: 20 27 70 61 73 73 3a 3a 63 6f 6c 6c 72 65 76 2f   'pass::collrev/
1ce0: 73 65 74 75 70 28 27 73 79 6d 74 79 70 65 27 29  setup('symtype')
1cf0: 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62  ..    typevariab
1d00: 6c 65 20 6d 79 65 78 63 6c 75 64 65 64 20 20 20  le myexcluded   
1d10: 20 20 20 20 20 30 20 3b 20 23 20 43 6f 64 65 20       0 ; # Code 
1d20: 66 6f 72 20 73 79 6d 62 6f 6c 73 20 77 68 69 63  for symbols whic
1d30: 68 20 61 72 65 20 65 78 63 6c 75 64 65 64 2e 0a  h are excluded..
1d40: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65      typevariable
1d50: 20 6d 79 74 61 67 20 20 20 20 20 20 20 20 20 20   mytag          
1d60: 20 20 20 31 20 3b 20 23 20 43 6f 64 65 20 66 6f     1 ; # Code fo
1d70: 72 20 73 79 6d 62 6f 6c 73 20 77 68 69 63 68 20  r symbols which 
1d80: 61 72 65 20 74 61 67 73 2e 0a 20 20 20 20 74 79  are tags..    ty
1d90: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61  pevariable mybra
1da0: 6e 63 68 20 20 20 20 20 20 20 20 20 20 32 20 3b  nch          2 ;
1db0: 20 23 20 43 6f 64 65 20 66 6f 72 20 73 79 6d 62   # Code for symb
1dc0: 6f 6c 73 20 77 68 69 63 68 20 61 72 65 20 62 72  ols which are br
1dd0: 61 6e 63 68 65 73 2e 0a 20 20 20 20 74 79 70 65  anches..    type
1de0: 76 61 72 69 61 62 6c 65 20 6d 79 75 6e 64 65 66  variable myundef
1df0: 20 20 20 20 20 20 20 20 20 20 20 33 20 3b 20 23             3 ; #
1e00: 20 43 6f 64 65 20 66 6f 72 20 73 79 6d 62 6f 6c   Code for symbol
1e10: 73 20 6f 66 20 75 6e 6b 6e 6f 77 6e 20 74 79 70  s of unknown typ
1e20: 65 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61  e..    typevaria
1e30: 62 6c 65 20 6d 79 73 79 6d 74 79 70 65 20 2d 61  ble mysymtype -a
1e40: 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20  rray {} ; # Map 
1e50: 66 72 6f 6d 20 74 79 70 65 20 63 6f 64 65 20 74  from type code t
1e60: 6f 20 6c 61 62 65 6c 20 66 6f 72 20 74 68 65 20  o label for the 
1e70: 6c 6f 67 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65  log...    typeme
1e80: 74 68 6f 64 20 75 6e 64 65 66 20 20 20 20 7b 7d  thod undef    {}
1e90: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 75 6e 64   { return $myund
1ea0: 65 66 20 20 20 20 7d 0a 20 20 20 20 74 79 70 65  ef    }.    type
1eb0: 6d 65 74 68 6f 64 20 65 78 63 6c 75 64 65 64 20  method excluded 
1ec0: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 65  {} { return $mye
1ed0: 78 63 6c 75 64 65 64 20 7d 0a 20 20 20 20 74 79  xcluded }.    ty
1ee0: 70 65 6d 65 74 68 6f 64 20 74 61 67 20 20 20 20  pemethod tag    
1ef0: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d    {} { return $m
1f00: 79 74 61 67 20 20 20 20 20 20 7d 0a 20 20 20 20  ytag      }.    
1f10: 74 79 70 65 6d 65 74 68 6f 64 20 62 72 61 6e 63  typemethod branc
1f20: 68 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20  h   {} { return 
1f30: 24 6d 79 62 72 61 6e 63 68 20 20 20 7d 0a 0a 20  $mybranch   }.. 
1f40: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 70 72     typemethod pr
1f50: 69 6e 74 72 75 6c 65 73 74 61 74 69 73 74 69 63  intrulestatistic
1f60: 73 20 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74  s {} {..log writ
1f70: 65 20 32 20 73 79 6d 62 6f 6c 20 22 52 75 6c 65  e 2 symbol "Rule
1f80: 20 75 73 61 67 65 20 73 74 61 74 69 73 74 69 63   usage statistic
1f90: 73 3a 22 0a 0a 09 73 65 74 20 66 6d 74 20 25 5b  s:"...set fmt %[
1fa0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d  string length $m
1fb0: 79 6e 75 6d 5d 73 0a 09 73 65 74 20 61 6c 6c 20  ynum]s..set all 
1fc0: 30 0a 0a 09 66 6f 72 65 61 63 68 20 6b 65 79 20  0...foreach key 
1fd0: 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61  [lsort [array na
1fe0: 6d 65 73 20 6d 79 72 75 6c 65 63 6f 75 6e 74 5d  mes myrulecount]
1ff0: 5d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69  ] {..    log wri
2000: 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 2a 20 5b  te 2 symbol "* [
2010: 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 6d 79 72  format $fmt $myr
2020: 75 6c 65 63 6f 75 6e 74 28 24 6b 65 79 29 5d 20  ulecount($key)] 
2030: 24 6b 65 79 22 0a 09 20 20 20 20 69 6e 63 72 20  $key"..    incr 
2040: 61 6c 6c 20 24 6d 79 72 75 6c 65 63 6f 75 6e 74  all $myrulecount
2050: 28 24 6b 65 79 29 0a 09 7d 0a 0a 09 6c 6f 67 20  ($key)..}...log 
2060: 77 72 69 74 65 20 32 20 73 79 6d 62 6f 6c 20 22  write 2 symbol "
2070: 3d 20 5b 66 6f 72 6d 61 74 20 24 66 6d 74 20 24  = [format $fmt $
2080: 61 6c 6c 5d 20 74 6f 74 61 6c 22 0a 09 72 65 74  all] total"..ret
2090: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
20a0: 20 53 74 61 74 69 73 74 69 63 73 20 6f 6e 20 68   Statistics on h
20b0: 6f 77 20 6f 66 74 65 6e 20 65 61 63 68 20 27 72  ow often each 'r
20c0: 75 6c 65 27 20 77 61 73 20 75 73 65 64 20 74 6f  ule' was used to
20d0: 20 64 65 63 69 64 65 20 6f 6e 20 74 68 65 0a 20   decide on the. 
20e0: 20 20 20 23 20 74 79 70 65 20 6f 66 20 61 20 73     # type of a s
20f0: 79 6d 62 6f 6c 2e 0a 20 20 20 20 74 79 70 65 76  ymbol..    typev
2100: 61 72 69 61 62 6c 65 20 6d 79 72 75 6c 65 63 6f  ariable myruleco
2110: 75 6e 74 20 2d 61 72 72 61 79 20 7b 0a 09 48 61  unt -array {..Ha
2120: 73 43 6f 6d 6d 69 74 73 20 30 0a 09 49 73 54 68  sCommits 0..IsTh
2130: 65 54 72 75 6e 6b 20 30 0a 09 55 6e 61 6d 62 69  eTrunk 0..Unambi
2140: 67 6f 75 73 20 30 0a 09 55 6e 64 65 63 69 64 65  gous 0..Undecide
2150: 64 5f 20 30 0a 09 55 73 65 72 43 6f 6e 66 69 67  d_ 0..UserConfig
2160: 20 30 0a 09 56 6f 74 65 43 6f 75 6e 74 73 20 30   0..VoteCounts 0
2170: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65  .    }..    type
2180: 6d 65 74 68 6f 64 20 70 72 69 6e 74 74 79 70 65  method printtype
2190: 73 74 61 74 69 73 74 69 63 73 20 7b 7d 20 7b 0a  statistics {} {.
21a0: 09 6c 6f 67 20 77 72 69 74 65 20 32 20 73 79 6d  .log write 2 sym
21b0: 62 6f 6c 20 22 53 79 6d 62 6f 6c 20 74 79 70 65  bol "Symbol type
21c0: 20 73 74 61 74 69 73 74 69 63 73 3a 22 0a 0a 09   statistics:"...
21d0: 73 65 74 20 66 6d 74 20 25 5b 73 74 72 69 6e 67  set fmt %[string
21e0: 20 6c 65 6e 67 74 68 20 24 6d 79 6e 75 6d 5d 73   length $mynum]s
21f0: 0a 09 73 65 74 20 61 6c 6c 20 30 0a 0a 09 66 6f  ..set all 0...fo
2200: 72 65 61 63 68 20 7b 73 74 79 70 65 20 73 70 6c  reach {stype spl
2210: 75 72 61 6c 20 6e 7d 20 5b 73 74 61 74 65 20 72  ural n} [state r
2220: 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54  un {..    SELECT
2230: 20 54 2e 6e 61 6d 65 2c 20 54 2e 70 6c 75 72 61   T.name, T.plura
2240: 6c 2c 20 43 4f 55 4e 54 20 28 73 2e 73 69 64 29  l, COUNT (s.sid)
2250: 0a 09 20 20 20 20 46 52 4f 4d 20 73 79 6d 62 6f  ..    FROM symbo
2260: 6c 20 53 2c 20 73 79 6d 74 79 70 65 20 54 0a 09  l S, symtype T..
2270: 20 20 20 20 57 48 45 52 45 20 53 2e 74 79 70 65      WHERE S.type
2280: 20 3d 20 54 2e 74 69 64 0a 09 20 20 20 20 47 52   = T.tid..    GR
2290: 4f 55 50 20 42 59 20 54 2e 6e 61 6d 65 0a 09 20  OUP BY T.name.. 
22a0: 20 20 20 4f 52 44 45 52 20 42 59 20 54 2e 6e 61     ORDER BY T.na
22b0: 6d 65 0a 09 20 20 20 20 3b 0a 09 7d 5d 20 7b 0a  me..    ;..}] {.
22c0: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 32  .    log write 2
22d0: 20 73 79 6d 62 6f 6c 20 22 2a 20 5b 66 6f 72 6d   symbol "* [form
22e0: 61 74 20 24 66 6d 74 20 24 6e 5d 20 5b 73 70 20  at $fmt $n] [sp 
22f0: 24 6e 20 24 73 74 79 70 65 20 24 73 70 6c 75 72  $n $stype $splur
2300: 61 6c 5d 22 0a 09 20 20 20 20 69 6e 63 72 20 61  al]"..    incr a
2310: 6c 6c 20 24 6e 0a 09 7d 0a 0a 09 6c 6f 67 20 77  ll $n..}...log w
2320: 72 69 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 3d  rite 2 symbol "=
2330: 20 5b 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 61   [format $fmt $a
2340: 6c 6c 5d 20 74 6f 74 61 6c 22 0a 09 72 65 74 75  ll] total"..retu
2350: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79  rn.    }..    ty
2360: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6e 75 6d  pevariable mynum
2370: 20 30 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   0..    # # ## #
2380: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
2390: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
23a0: 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20      ## Internal 
23b0: 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65 74  methods..    met
23c0: 68 6f 64 20 55 73 65 72 43 6f 6e 66 69 67 20 7b  hod UserConfig {
23d0: 7d 20 7b 0a 09 73 65 74 20 70 72 6f 6a 65 63 74  } {..set project
23e0: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 62 61 73   [$myproject bas
23f0: 65 5d 0a 0a 09 23 20 46 69 72 73 74 20 63 68 65  e]...# First che
2400: 63 6b 20 69 66 20 74 68 65 20 75 73 65 72 20 72  ck if the user r
2410: 65 71 75 65 73 74 65 64 20 74 68 65 20 65 78 63  equested the exc
2420: 6c 75 73 69 6f 6e 20 6f 66 20 74 68 65 0a 09 23  lusion of the..#
2430: 20 73 79 6d 62 6f 6c 20 66 72 6f 6d 20 63 6f 6e   symbol from con
2440: 76 65 72 73 69 6f 6e 2e 0a 0a 09 66 6f 72 65 61  version....forea
2450: 63 68 20 65 78 20 24 6d 79 65 78 63 6c 75 64 65  ch ex $myexclude
2460: 70 61 74 74 65 72 6e 20 7b 0a 09 20 20 20 20 73  pattern {..    s
2470: 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69  truct::list assi
2480: 67 6e 20 24 65 78 20 70 70 20 73 70 0a 09 20 20  gn $ex pp sp..  
2490: 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d    if {![string m
24a0: 61 74 63 68 20 24 70 70 20 24 70 72 6f 6a 65 63  atch $pp $projec
24b0: 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  t]} continue..  
24c0: 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d    if {![string m
24d0: 61 74 63 68 20 24 73 70 20 24 6d 79 6e 61 6d 65  atch $sp $myname
24e0: 5d 7d 20 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  ]}  continue..  
24f0: 20 20 72 65 74 75 72 6e 20 24 6d 79 65 78 63 6c    return $myexcl
2500: 75 64 65 64 0a 09 7d 0a 0a 09 23 20 49 66 20 74  uded..}...# If t
2510: 68 65 20 73 79 6d 62 6f 6c 20 69 73 20 6e 6f 74  he symbol is not
2520: 20 65 78 63 6c 75 64 65 64 20 66 75 72 74 68 65   excluded furthe
2530: 72 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 75  r check if the u
2540: 73 65 72 0a 09 23 20 66 6f 72 63 65 73 20 69 74  ser..# forces it
2550: 73 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 73 20  s conversion as 
2560: 61 20 73 70 65 63 69 66 69 63 20 74 79 70 65 2e  a specific type.
2570: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 65 78 20 73  ...foreach {ex s
2580: 74 79 70 65 7d 20 24 6d 79 66 6f 72 63 65 70 61  type} $myforcepa
2590: 74 74 65 72 6e 20 7b 0a 09 20 20 20 20 73 74 72  ttern {..    str
25a0: 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e  uct::list assign
25b0: 20 24 65 78 20 70 70 20 73 70 0a 09 20 20 20 20   $ex pp sp..    
25c0: 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74  if {![string mat
25d0: 63 68 20 24 70 70 20 24 70 72 6f 6a 65 63 74 5d  ch $pp $project]
25e0: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20  } continue..    
25f0: 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74  if {![string mat
2600: 63 68 20 24 73 70 20 24 6d 79 6e 61 6d 65 5d 7d  ch $sp $myname]}
2610: 20 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20    continue..    
2620: 72 65 74 75 72 6e 20 24 73 74 79 70 65 0a 09 7d  return $stype..}
2630: 0a 0a 09 23 20 4e 6f 74 68 69 6e 67 20 69 73 20  ...# Nothing is 
2640: 66 6f 72 63 65 64 2c 20 68 61 76 65 20 74 68 65  forced, have the
2650: 20 6d 61 69 6e 20 73 79 73 74 65 6d 20 68 61 6e   main system han
2660: 64 20 74 68 65 20 73 79 6d 62 6f 6c 20 6f 76 65  d the symbol ove
2670: 72 0a 09 23 20 74 6f 20 74 68 65 20 72 65 67 75  r..# to the regu
2680: 6c 61 72 20 68 65 75 72 69 73 74 69 63 73 2e 0a  lar heuristics..
2690: 0a 09 72 65 74 75 72 6e 20 24 6d 79 75 6e 64 65  ..return $myunde
26a0: 66 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74  f.    }..    met
26b0: 68 6f 64 20 55 6e 61 6d 62 69 67 6f 75 73 20 7b  hod Unambigous {
26c0: 7d 20 7b 0a 09 23 20 49 66 20 61 20 73 79 6d 62  } {..# If a symb
26d0: 6f 6c 20 69 73 20 75 73 65 64 20 75 6e 61 6d 62  ol is used unamb
26e0: 69 67 75 6f 75 73 6c 79 20 61 73 20 61 20 74 61  iguously as a ta
26f0: 67 2f 62 72 61 6e 63 68 2c 20 63 6f 6e 76 65 72  g/branch, conver
2700: 74 0a 09 23 20 69 74 20 61 73 20 73 75 63 68 2e  t..# it as such.
2710: 0a 0a 09 73 65 74 20 69 73 74 61 67 20 20 20 20  ...set istag    
2720: 5b 65 78 70 72 20 7b 24 6d 79 74 61 67 63 6f 75  [expr {$mytagcou
2730: 6e 74 20 20 20 20 3e 20 30 7d 5d 0a 09 73 65 74  nt    > 0}]..set
2740: 20 69 73 62 72 61 6e 63 68 20 5b 65 78 70 72 20   isbranch [expr 
2750: 7b 24 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 20  {$mybranchcount 
2760: 3e 20 30 20 7c 7c 20 24 6d 79 63 6f 6d 6d 69 74  > 0 || $mycommit
2770: 63 6f 75 6e 74 20 3e 20 30 7d 5d 0a 0a 09 69 66  count > 0}]...if
2780: 20 7b 24 69 73 74 61 67 20 26 26 20 24 69 73 62   {$istag && $isb
2790: 72 61 6e 63 68 7d 20 7b 20 72 65 74 75 72 6e 20  ranch} { return 
27a0: 24 6d 79 75 6e 64 65 66 20 20 7d 0a 09 69 66 20  $myundef  }..if 
27b0: 7b 24 69 73 74 61 67 7d 20 20 20 20 20 20 20 20  {$istag}        
27c0: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 24        { return $
27d0: 6d 79 74 61 67 20 20 20 20 7d 0a 09 69 66 20 7b  mytag    }..if {
27e0: 24 69 73 62 72 61 6e 63 68 7d 20 20 20 20 20 20  $isbranch}      
27f0: 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 24 6d       { return $m
2800: 79 62 72 61 6e 63 68 20 7d 0a 0a 09 23 20 53 79  ybranch }...# Sy
2810: 6d 62 6f 6c 20 77 61 73 20 6e 6f 74 20 75 73 65  mbol was not use
2820: 64 20 61 74 20 61 6c 6c 2e 0a 09 72 65 74 75 72  d at all...retur
2830: 6e 20 24 6d 79 75 6e 64 65 66 0a 20 20 20 20 7d  n $myundef.    }
2840: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 48 61 73  ..    method Has
2850: 43 6f 6d 6d 69 74 73 20 7b 7d 20 7b 0a 09 23 20  Commits {} {..# 
2860: 49 66 20 74 68 65 72 65 20 77 61 73 20 65 76 65  If there was eve
2870: 72 20 61 20 63 6f 6d 6d 69 74 20 6f 6e 20 74 68  r a commit on th
2880: 65 20 73 79 6d 62 6f 6c 2c 20 63 6f 6e 76 65 72  e symbol, conver
2890: 74 20 69 74 20 61 73 20 61 0a 09 23 20 62 72 61  t it as a..# bra
28a0: 6e 63 68 2e 0a 0a 09 69 66 20 7b 24 6d 79 63 6f  nch....if {$myco
28b0: 6d 6d 69 74 63 6f 75 6e 74 20 3e 20 30 7d 20 7b  mmitcount > 0} {
28c0: 20 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63   return $mybranc
28d0: 68 20 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 75  h }..return $myu
28e0: 6e 64 65 66 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ndef.    }..    
28f0: 6d 65 74 68 6f 64 20 56 6f 74 65 43 6f 75 6e 74  method VoteCount
2900: 73 20 7b 7d 20 7b 0a 09 23 20 43 6f 6e 76 65 72  s {} {..# Conver
2910: 74 20 74 68 65 20 73 79 6d 62 6f 6c 20 62 61 73  t the symbol bas
2920: 65 64 20 6f 6e 20 68 6f 77 20 6f 66 74 65 6e 20  ed on how often 
2930: 69 74 20 77 61 73 20 75 73 65 64 20 61 73 20 61  it was used as a
2940: 0a 09 23 20 62 72 61 6e 63 68 2f 74 61 67 2e 20  ..# branch/tag. 
2950: 57 68 69 63 68 65 76 65 72 20 68 61 70 70 65 6e  Whichever happen
2960: 65 64 20 6d 6f 72 65 20 6f 66 74 65 6e 20 64 65  ed more often de
2970: 74 65 72 6d 69 6e 65 73 20 68 6f 77 20 74 68 65  termines how the
2980: 0a 09 23 20 73 79 6d 62 6f 6c 20 69 73 20 63 6f  ..# symbol is co
2990: 6e 76 65 72 74 65 64 2e 0a 0a 09 69 66 20 7b 24  nverted....if {$
29a0: 6d 79 74 61 67 63 6f 75 6e 74 20 3e 20 24 6d 79  mytagcount > $my
29b0: 62 72 61 6e 63 68 63 6f 75 6e 74 7d 20 7b 20 72  branchcount} { r
29c0: 65 74 75 72 6e 20 24 6d 79 74 61 67 20 7d 0a 09  eturn $mytag }..
29d0: 69 66 20 7b 24 6d 79 74 61 67 63 6f 75 6e 74 20  if {$mytagcount 
29e0: 3c 20 24 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74  < $mybranchcount
29f0: 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 72  } { return $mybr
2a00: 61 6e 63 68 20 7d 0a 09 72 65 74 75 72 6e 20 24  anch }..return $
2a10: 6d 79 75 6e 64 65 66 0a 20 20 20 20 7d 0a 0a 20  myundef.    }.. 
2a20: 20 20 20 6d 65 74 68 6f 64 20 4d 61 72 6b 41 73     method MarkAs
2a30: 20 7b 6c 61 62 65 6c 20 63 68 6f 73 65 6e 7d 20   {label chosen} 
2a40: 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 33 20 73  {..log write 3 s
2a50: 79 6d 62 6f 6c 20 7b 5c 5b 24 6c 61 62 65 6c 5c  ymbol {\[$label\
2a60: 5d 20 43 6f 6e 76 65 72 74 69 6e 67 20 73 79 6d  ] Converting sym
2a70: 62 6f 6c 20 27 24 6d 79 6e 61 6d 65 27 20 61 73  bol '$myname' as
2a80: 20 24 6d 79 73 79 6d 74 79 70 65 28 24 63 68 6f   $mysymtype($cho
2a90: 73 65 6e 29 7d 0a 0a 09 73 65 74 20 6d 79 74 79  sen)}...set myty
2aa0: 70 65 20 24 63 68 6f 73 65 6e 0a 09 69 6e 63 72  pe $chosen..incr
2ab0: 20 6d 79 72 75 6c 65 63 6f 75 6e 74 28 24 6c 61   myrulecount($la
2ac0: 62 65 6c 29 0a 0a 09 23 20 54 68 69 73 20 69 73  bel)...# This is
2ad0: 20 73 74 6f 72 65 64 20 64 69 72 65 63 74 6c 79   stored directly
2ae0: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61   into the databa
2af0: 73 65 2e 0a 09 73 74 61 74 65 20 72 75 6e 20 7b  se...state run {
2b00: 0a 09 20 20 20 20 55 50 44 41 54 45 20 73 79 6d  ..    UPDATE sym
2b10: 62 6f 6c 0a 09 20 20 20 20 53 45 54 20 74 79 70  bol..    SET typ
2b20: 65 20 3d 20 24 63 68 6f 73 65 6e 0a 09 20 20 20  e = $chosen..   
2b30: 20 57 48 45 52 45 20 73 69 64 20 3d 20 24 6d 79   WHERE sid = $my
2b40: 69 64 0a 09 20 20 20 20 3b 0a 09 7d 0a 09 72 65  id..    ;..}..re
2b50: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
2b60: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
2b70: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
2b80: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43  #######.    ## C
2b90: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20  onfiguration..  
2ba0: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70    pragma -hastyp
2bb0: 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23  einfo    no  ; #
2bc0: 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70   no type introsp
2bd0: 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d  ection.    pragm
2be0: 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20  a -hasinfo      
2bf0: 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a    no  ; # no obj
2c00: 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f  ect introspectio
2c10: 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 73 69  n.    pragma -si
2c20: 6d 70 6c 65 64 69 73 70 61 74 63 68 20 79 65 73  mpledispatch yes
2c30: 20 3b 20 23 20 73 69 6d 70 6c 65 20 66 61 73 74   ; # simple fast
2c40: 20 64 69 73 70 61 74 63 68 0a 0a 20 20 20 20 23   dispatch..    #
2c50: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
2c60: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
2c70: 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70  ######.}..namesp
2c80: 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66  ace eval ::vc::f
2c90: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
2ca0: 76 73 3a 3a 70 72 6f 6a 65 63 74 20 7b 0a 20 20  vs::project {.  
2cb0: 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f    namespace expo
2cc0: 72 74 20 73 79 6d 0a 20 20 20 20 6e 61 6d 65 73  rt sym.    names
2cd0: 70 61 63 65 20 65 76 61 6c 20 73 79 6d 20 7b 0a  pace eval sym {.
2ce0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
2cf0: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  t ::vc::fossil::
2d00: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61  import::cvs::sta
2d10: 74 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d  te..namespace im
2d20: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73  port ::vc::tools
2d30: 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73  ::misc::*..names
2d40: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63  pace import ::vc
2d50: 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65  ::tools::trouble
2d60: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  ..namespace impo
2d70: 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a  rt ::vc::tools::
2d80: 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 69 73 74 65  log..log registe
2d90: 72 20 73 79 6d 62 6f 6c 0a 20 20 20 20 7d 0a 7d  r symbol.    }.}
2da0: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
2db0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
2dc0: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
2dd0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
2de0: 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67  ## Ready..packag
2df0: 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f  e provide vc::fo
2e00: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
2e10: 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 73 79 6d 20  s::project::sym 
2e20: 31 2e 30 0a 72 65 74 75 72 6e 0a                 1.0.return.