Hex Artifact Content
Not logged in

Artifact e42d2c8c0129385ba5039e393c3fc826074da13a:

File tools/cvs2fossil/lib/c2f_psym.tcl part of check-in [348e45b0d6] - Added basic import of changesets. Note that this code is incomplete with regard to handling the various possible interactions between a vendor-branh and trunk. by aku on 2008-01-30 08:28:34.

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 70 72 65  me..    FROM pre
06a0: 66 65 72 65 64 70 61 72 65 6e 74 20 50 2c 20 73  feredparent P, s
06b0: 79 6d 62 6f 6c 20 53 0a 09 20 20 20 20 57 48 45  ymbol S..    WHE
06c0: 52 45 20 50 2e 73 69 64 20 3d 20 24 6d 79 69 64  RE P.sid = $myid
06d0: 0a 09 20 20 20 20 41 4e 44 20 20 20 53 2e 73 69  ..    AND   S.si
06e0: 64 20 3d 20 50 2e 70 69 64 0a 09 7d 5d 5d 0a 09  d = P.pid..}]]..
06f0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
0700: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
0710: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0720: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
0730: 20 53 79 6d 62 6f 6c 20 74 79 70 65 0a 0a 20 20   Symbol type..  
0740: 20 20 6d 65 74 68 6f 64 20 64 65 74 65 72 6d 69    method determi
0750: 6e 65 74 79 70 65 20 7b 7d 20 7b 0a 09 23 20 54  netype {} {..# T
0760: 68 69 73 20 69 73 20 64 6f 6e 65 20 62 79 20 61  his is done by a
0770: 20 66 69 78 65 64 20 68 65 75 72 69 73 74 69 63   fixed heuristic
0780: 73 2c 20 77 69 74 68 20 67 75 69 64 61 6e 63 65  s, with guidance
0790: 20 62 79 20 74 68 65 0a 09 23 20 75 73 65 72 20   by the..# user 
07a0: 69 6e 20 65 64 67 65 2d 63 61 73 65 73 2e 20 43  in edge-cases. C
07b0: 6f 6e 74 72 61 72 79 20 74 6f 20 63 76 73 32 73  ontrary to cvs2s
07c0: 76 6e 20 77 68 69 63 68 20 75 73 65 73 20 61 20  vn which uses a 
07d0: 62 69 67 0a 09 23 20 68 6f 6e 6b 69 6e 67 20 73  big..# honking s
07e0: 74 72 65 61 67 79 20 63 6c 61 73 73 20 61 6e 64  treagy class and
07f0: 20 72 75 6c 65 20 6f 62 6a 65 63 74 73 2e 20 4b   rule objects. K
0800: 65 65 70 20 69 74 20 73 69 6d 70 6c 65 2c 20 77  eep it simple, w
0810: 65 0a 09 23 20 63 61 6e 20 65 78 70 61 6e 64 20  e..# can expand 
0820: 6c 61 74 65 72 20 77 68 65 6e 20 77 65 20 61 63  later when we ac
0830: 74 75 61 6c 6c 79 20 6e 65 65 64 20 61 6c 6c 20  tually need all 
0840: 74 68 65 20 63 6f 6d 70 6c 65 78 69 74 79 0a 09  the complexity..
0850: 23 20 66 6f 72 20 63 6f 6e 66 69 67 75 72 61 62  # for configurab
0860: 69 6c 69 74 79 2e 0a 0a 09 23 20 54 68 65 20 66  ility....# The f
0870: 6f 6c 6c 6f 77 69 6e 67 20 67 75 69 64 65 6c 69  ollowing guideli
0880: 6e 65 73 20 61 72 65 20 61 70 70 6c 69 65 64 3a  nes are applied:
0890: 0a 09 23 20 2d 20 49 73 20 75 73 61 67 65 20 75  ..# - Is usage u
08a0: 6e 61 6d 62 69 67 6f 75 73 20 3f 0a 09 23 20 2d  nambigous ?..# -
08b0: 20 57 61 73 20 74 68 65 72 65 20 65 76 65 72 20   Was there ever 
08c0: 61 20 63 6f 6d 6d 69 74 20 6f 6e 20 74 68 65 20  a commit on the 
08d0: 73 79 6d 62 6f 6c 20 3f 0a 09 23 20 2d 20 4d 6f  symbol ?..# - Mo
08e0: 72 65 20 75 73 65 64 20 61 73 20 74 61 67 2c 20  re used as tag, 
08f0: 6f 72 20 6d 6f 72 65 20 75 73 65 64 20 61 73 20  or more used as 
0900: 62 72 61 6e 63 68 20 3f 0a 09 23 20 2d 20 41 74  branch ?..# - At
0910: 20 6c 61 73 74 2c 20 77 68 61 74 20 68 61 73 20   last, what has 
0920: 74 68 65 20 75 73 65 72 20 74 6f 6c 64 20 75 73  the user told us
0930: 20 61 62 6f 75 74 20 69 74 20 3f 0a 09 23 20 2d   about it ?..# -
0940: 20 46 61 69 6c 0a 0a 09 66 6f 72 65 61 63 68 20   Fail...foreach 
0950: 72 75 6c 65 20 7b 0a 09 20 20 20 20 55 73 65 72  rule {..    User
0960: 43 6f 6e 66 69 67 0a 09 20 20 20 20 55 6e 61 6d  Config..    Unam
0970: 62 69 67 6f 75 73 0a 09 20 20 20 20 48 61 73 43  bigous..    HasC
0980: 6f 6d 6d 69 74 73 0a 09 20 20 20 20 56 6f 74 65  ommits..    Vote
0990: 43 6f 75 6e 74 73 0a 09 7d 20 7b 0a 09 20 20 20  Counts..} {..   
09a0: 73 65 74 20 63 68 6f 73 65 6e 20 5b 24 73 65 6c  set chosen [$sel
09b0: 66 20 24 72 75 6c 65 5d 0a 09 20 20 20 69 66 20  f $rule]..   if 
09c0: 7b 24 63 68 6f 73 65 6e 20 65 71 20 24 6d 79 75  {$chosen eq $myu
09d0: 6e 64 65 66 7d 20 63 6f 6e 74 69 6e 75 65 0a 09  ndef} continue..
09e0: 20 20 20 24 73 65 6c 66 20 4d 61 72 6b 41 73 20     $self MarkAs 
09f0: 24 72 75 6c 65 20 24 63 68 6f 73 65 6e 0a 09 20  $rule $chosen.. 
0a00: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 23 20    return..}...# 
0a10: 4e 6f 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76  None of the abov
0a20: 65 20 77 61 73 20 61 62 6c 65 20 74 6f 20 64 65  e was able to de
0a30: 63 69 64 65 20 77 68 69 63 68 20 74 79 70 65 20  cide which type 
0a40: 74 6f 20 61 73 73 69 67 6e 20 74 6f 0a 09 23 20  to assign to..# 
0a50: 74 68 65 20 73 79 6d 62 6f 6c 2e 20 54 68 69 73  the symbol. This
0a60: 20 69 73 20 61 20 66 61 74 61 6c 20 65 72 72 6f   is a fatal erro
0a70: 72 20 70 72 65 76 65 6e 74 69 6e 67 20 74 68 65  r preventing the
0a80: 20 65 78 65 63 75 74 69 6f 6e 0a 09 23 20 6f 66   execution..# of
0a90: 20 74 68 65 20 70 61 73 73 65 73 20 61 66 74 65   the passes afte
0aa0: 72 20 27 43 6f 6c 6c 61 74 65 53 79 6d 62 6f 6c  r 'CollateSymbol
0ab0: 73 27 2e 0a 0a 09 69 6e 63 72 20 6d 79 72 75 6c  s'....incr myrul
0ac0: 65 63 6f 75 6e 74 28 55 6e 64 65 63 69 64 65 64  ecount(Undecided
0ad0: 5f 29 0a 09 74 72 6f 75 62 6c 65 20 66 61 74 61  _)..trouble fata
0ae0: 6c 20 22 55 6e 61 62 6c 65 20 74 6f 20 64 65 63  l "Unable to dec
0af0: 69 64 65 20 68 6f 77 20 74 6f 20 63 6f 6e 76 65  ide how to conve
0b00: 72 74 20 73 79 6d 62 6f 6c 20 27 24 6d 79 6e 61  rt symbol '$myna
0b10: 6d 65 27 22 0a 09 72 65 74 75 72 6e 0a 20 20 20  me'"..return.   
0b20: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6d   }..    method m
0b30: 61 72 6b 74 68 65 74 72 75 6e 6b 20 7b 7d 20 7b  arkthetrunk {} {
0b40: 20 24 73 65 6c 66 20 4d 61 72 6b 41 73 20 49 73   $self MarkAs Is
0b50: 54 68 65 54 72 75 6e 6b 20 24 6d 79 62 72 61 6e  TheTrunk $mybran
0b60: 63 68 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20  ch ; return }.. 
0b70: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
0b80: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0b90: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
0ba0: 23 20 53 79 6d 62 6f 6c 20 73 74 61 74 69 73 74  # Symbol statist
0bb0: 69 63 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20  ics..    method 
0bc0: 64 65 66 63 6f 75 6e 74 73 20 7b 74 63 20 62 63  defcounts {tc bc
0bd0: 20 63 63 7d 20 7b 0a 09 73 65 74 20 6d 79 62 72   cc} {..set mybr
0be0: 61 6e 63 68 63 6f 75 6e 74 20 24 74 63 0a 09 73  anchcount $tc..s
0bf0: 65 74 20 6d 79 74 61 67 63 6f 75 6e 74 20 20 20  et mytagcount   
0c00: 20 24 62 63 0a 09 73 65 74 20 6d 79 63 6f 6d 6d   $bc..set mycomm
0c10: 69 74 63 6f 75 6e 74 20 24 63 63 0a 09 72 65 74  itcount $cc..ret
0c20: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  urn.    }..    m
0c30: 65 74 68 6f 64 20 63 6f 75 6e 74 61 73 62 72 61  ethod countasbra
0c40: 6e 63 68 20 7b 7d 20 7b 20 69 6e 63 72 20 6d 79  nch {} { incr my
0c50: 62 72 61 6e 63 68 63 6f 75 6e 74 20 3b 20 72 65  branchcount ; re
0c60: 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f  turn }.    metho
0c70: 64 20 63 6f 75 6e 74 61 73 74 61 67 20 20 20 20  d countastag    
0c80: 7b 7d 20 7b 20 69 6e 63 72 20 6d 79 74 61 67 63  {} { incr mytagc
0c90: 6f 75 6e 74 20 20 20 20 3b 20 72 65 74 75 72 6e  ount    ; return
0ca0: 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 6f   }.    method co
0cb0: 75 6e 74 61 63 6f 6d 6d 69 74 20 20 7b 7d 20 7b  untacommit  {} {
0cc0: 20 69 6e 63 72 20 6d 79 63 6f 6d 6d 69 74 63 6f   incr mycommitco
0cd0: 75 6e 74 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a  unt ; return }..
0ce0: 20 20 20 20 6d 65 74 68 6f 64 20 62 6c 6f 63 6b      method block
0cf0: 65 64 62 79 20 7b 73 79 6d 62 6f 6c 7d 20 7b 0a  edby {symbol} {.
0d00: 09 23 20 52 65 6d 65 6d 62 65 72 20 74 68 65 20  .# Remember the 
0d10: 73 79 6d 62 6f 6c 20 61 73 20 70 72 65 76 65 6e  symbol as preven
0d20: 74 69 6e 67 20 74 68 65 20 72 65 6d 6f 76 61 6c  ting the removal
0d30: 20 6f 66 20 74 68 69 73 0a 09 23 20 73 79 6d 62   of this..# symb
0d40: 6f 6c 2e 20 4f 74 20 69 73 20 61 20 74 61 67 20  ol. Ot is a tag 
0d50: 6f 72 20 62 72 61 6e 63 68 20 74 68 61 74 20 73  or branch that s
0d60: 70 61 77 6e 65 64 20 66 72 6f 6d 20 61 20 72 65  pawned from a re
0d70: 76 69 73 69 6f 6e 0a 09 23 20 6f 6e 20 74 68 69  vision..# on thi
0d80: 73 20 73 79 6d 62 6f 6c 2e 0a 0a 09 73 74 72 75  s symbol....stru
0d90: 63 74 3a 3a 73 65 74 20 69 6e 63 6c 75 64 65 20  ct::set include 
0da0: 6d 79 62 6c 6f 63 6b 65 72 73 20 24 73 79 6d 62  myblockers $symb
0db0: 6f 6c 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  ol..return.    }
0dc0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 6f 73  ..    method pos
0dd0: 73 69 62 6c 65 70 61 72 65 6e 74 20 7b 73 79 6d  sibleparent {sym
0de0: 62 6f 6c 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74  bol} {..log writ
0df0: 65 20 39 20 73 79 6d 62 6f 6c 20 22 50 6f 73 73  e 9 symbol "Poss
0e00: 69 62 6c 65 20 70 61 72 65 6e 74 20 28 24 6d 79  ible parent ($my
0e10: 6e 61 6d 65 29 20 3d 20 5b 24 73 79 6d 62 6f 6c  name) = [$symbol
0e20: 20 6e 61 6d 65 5d 22 0a 0a 09 69 66 20 7b 5b 69   name]"...if {[i
0e30: 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 70 70 61  nfo exists myppa
0e40: 72 65 6e 74 28 24 73 79 6d 62 6f 6c 29 5d 7d 20  rent($symbol)]} 
0e50: 7b 0a 09 20 20 20 20 69 6e 63 72 20 6d 79 70 70  {..    incr mypp
0e60: 61 72 65 6e 74 28 24 73 79 6d 62 6f 6c 29 0a 09  arent($symbol)..
0e70: 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65  } else {..    se
0e80: 74 20 20 6d 79 70 70 61 72 65 6e 74 28 24 73 79  t  mypparent($sy
0e90: 6d 62 6f 6c 29 20 31 0a 09 7d 0a 09 72 65 74 75  mbol) 1..}..retu
0ea0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65  rn.    }..    me
0eb0: 74 68 6f 64 20 69 73 67 68 6f 73 74 20 7b 7d 20  thod isghost {} 
0ec0: 7b 0a 09 23 20 43 68 65 63 6b 73 20 69 66 20 74  {..# Checks if t
0ed0: 68 69 73 20 73 79 6d 62 6f 6c 20 28 61 73 20 6c  his symbol (as l
0ee0: 69 6e 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65  ine of developme
0ef0: 6e 74 29 20 6e 65 76 65 72 0a 09 23 20 65 78 69  nt) never..# exi
0f00: 73 74 65 64 2e 0a 0a 09 69 66 20 7b 24 6d 79 63  sted....if {$myc
0f10: 6f 6d 6d 69 74 63 6f 75 6e 74 20 3e 20 30 7d 20  ommitcount > 0} 
0f20: 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e          { return
0f30: 20 30 20 7d 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67   0 }..if {[lleng
0f40: 74 68 20 24 6d 79 62 6c 6f 63 6b 65 72 73 5d 7d  th $myblockers]}
0f50: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 30        { return 0
0f60: 20 7d 0a 09 69 66 20 7b 5b 61 72 72 61 79 20 73   }..if {[array s
0f70: 69 7a 65 20 6d 79 70 70 61 72 65 6e 74 5d 20 3e  ize mypparent] >
0f80: 20 30 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 7d   0} { return 0 }
0f90: 0a 0a 09 72 65 74 75 72 6e 20 31 0a 20 20 20 20  ...return 1.    
0fa0: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  }..    # # ## ##
0fb0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
0fc0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a   #############..
0fd0: 20 20 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69      method persi
0fe0: 73 74 72 65 76 20 7b 7d 20 7b 0a 09 73 65 74 20  strev {} {..set 
0ff0: 70 69 64 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20  pid [$myproject 
1000: 69 64 5d 0a 0a 09 73 74 61 74 65 20 74 72 61 6e  id]...state tran
1010: 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 73  saction {..    s
1020: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53  tate run {...INS
1030: 45 52 54 20 49 4e 54 4f 20 73 79 6d 62 6f 6c 20  ERT INTO symbol 
1040: 28 20 73 69 64 2c 20 20 20 70 69 64 2c 20 20 6e  ( sid,   pid,  n
1050: 61 6d 65 2c 20 20 20 74 79 70 65 2c 20 20 20 20  ame,   type,    
1060: 20 74 61 67 5f 63 6f 75 6e 74 2c 20 20 20 62 72   tag_count,   br
1070: 61 6e 63 68 5f 63 6f 75 6e 74 2c 20 20 20 63 6f  anch_count,   co
1080: 6d 6d 69 74 5f 63 6f 75 6e 74 29 0a 09 09 56 41  mmit_count)...VA
1090: 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20 20  LUES            
10a0: 20 28 24 6d 79 69 64 2c 20 24 70 69 64 2c 20 24   ($myid, $pid, $
10b0: 6d 79 6e 61 6d 65 2c 20 24 6d 79 75 6e 64 65 66  myname, $myundef
10c0: 2c 20 24 6d 79 74 61 67 63 6f 75 6e 74 2c 20 24  , $mytagcount, $
10d0: 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 2c 20 24  mybranchcount, $
10e0: 6d 79 63 6f 6d 6d 69 74 63 6f 75 6e 74 29 3b 0a  mycommitcount);.
10f0: 09 20 20 20 20 7d 0a 09 20 20 20 20 66 6f 72 65  .    }..    fore
1100: 61 63 68 20 73 79 6d 62 6f 6c 20 24 6d 79 62 6c  ach symbol $mybl
1110: 6f 63 6b 65 72 73 20 7b 0a 09 09 73 65 74 20 62  ockers {...set b
1120: 69 64 20 5b 24 73 79 6d 62 6f 6c 20 69 64 5d 0a  id [$symbol id].
1130: 09 09 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09  ..state run {...
1140: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
1150: 62 6c 6f 63 6b 65 72 20 28 73 69 64 2c 20 20 20  blocker (sid,   
1160: 62 69 64 29 0a 09 09 20 20 20 20 56 41 4c 55 45  bid)...    VALUE
1170: 53 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  S              (
1180: 24 6d 79 69 64 2c 20 24 62 69 64 29 3b 0a 09 09  $myid, $bid);...
1190: 7d 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 66 6f  }..    }..    fo
11a0: 72 65 61 63 68 20 7b 73 79 6d 62 6f 6c 20 63 6f  reach {symbol co
11b0: 75 6e 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20  unt} [array get 
11c0: 6d 79 70 70 61 72 65 6e 74 5d 20 7b 0a 09 09 73  mypparent] {...s
11d0: 65 74 20 70 69 64 20 5b 24 73 79 6d 62 6f 6c 20  et pid [$symbol 
11e0: 69 64 5d 0a 09 09 73 74 61 74 65 20 72 75 6e 20  id]...state run 
11f0: 7b 0a 09 09 20 20 20 20 49 4e 53 45 52 54 20 49  {...    INSERT I
1200: 4e 54 4f 20 70 61 72 65 6e 74 20 28 73 69 64 2c  NTO parent (sid,
1210: 20 20 20 70 69 64 2c 20 20 6e 29 0a 09 09 20 20     pid,  n)...  
1220: 20 20 56 41 4c 55 45 53 20 20 20 20 20 20 20 20    VALUES        
1230: 20 20 20 20 20 28 24 6d 79 69 64 2c 20 24 70 69       ($myid, $pi
1240: 64 2c 20 24 63 6f 75 6e 74 29 3b 0a 09 09 7d 0a  d, $count);...}.
1250: 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72  .    }..}..retur
1260: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23  n.    }..    # #
1270: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
1280: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
1290: 23 23 23 23 0a 20 20 20 20 23 23 20 53 74 61 74  ####.    ## Stat
12a0: 65 0a 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20  e..    variable 
12b0: 6d 79 70 72 6f 6a 65 63 74 20 7b 7d 20 3b 20 23  myproject {} ; #
12c0: 20 52 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68   Reference to th
12d0: 65 20 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63 74  e project object
12e0: 0a 09 09 09 20 20 20 20 23 20 63 6f 6e 74 61 69  ....    # contai
12f0: 6e 69 6e 67 20 74 68 65 20 73 79 6d 62 6f 6c 2e  ning the symbol.
1300: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
1310: 6e 61 6d 65 20 20 20 20 7b 7d 20 3b 20 23 20 54  name    {} ; # T
1320: 68 65 20 73 79 6d 62 6f 6c 27 73 20 6e 61 6d 65  he symbol's name
1330: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
1340: 69 64 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52  id      {} ; # R
1350: 65 70 6f 73 69 74 6f 72 79 20 77 69 64 65 20 6e  epository wide n
1360: 75 6d 65 72 69 63 20 69 64 20 6f 66 20 74 68 65  umeric id of the
1370: 0a 09 09 09 20 20 20 20 23 20 73 79 6d 62 6f 6c  ....    # symbol
1380: 2e 20 54 68 69 73 20 69 6d 70 6c 69 63 69 74 6c  . This implicitl
1390: 79 20 65 6e 63 6f 64 65 73 20 74 68 65 0a 09 09  y encodes the...
13a0: 09 20 20 20 20 23 20 70 72 6f 6a 65 63 74 20 61  .    # project a
13b0: 73 20 77 65 6c 6c 2e 0a 0a 20 20 20 20 76 61 72  s well...    var
13c0: 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 68 63 6f  iable mybranchco
13d0: 75 6e 74 20 30 20 3b 20 23 20 43 6f 75 6e 74 20  unt 0 ; # Count 
13e0: 68 6f 77 20 6d 61 6e 79 20 75 73 65 73 20 61 73  how many uses as
13f0: 20 62 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72   branch..    var
1400: 69 61 62 6c 65 20 6d 79 74 61 67 63 6f 75 6e 74  iable mytagcount
1410: 20 20 20 20 30 20 3b 20 23 20 43 6f 75 6e 74 20      0 ; # Count 
1420: 68 6f 77 20 6d 61 6e 79 20 75 73 65 73 20 61 73  how many uses as
1430: 20 74 61 67 2e 0a 20 20 20 20 76 61 72 69 61 62   tag..    variab
1440: 6c 65 20 6d 79 63 6f 6d 6d 69 74 63 6f 75 6e 74  le mycommitcount
1450: 20 30 20 3b 20 23 20 43 6f 75 6e 74 20 68 6f 77   0 ; # Count how
1460: 20 6d 61 6e 79 20 66 69 6c 65 73 20 64 69 64 20   many files did 
1470: 61 20 63 6f 6d 6d 69 74 20 6f 6e 20 74 68 65 20  a commit on the 
1480: 73 79 6d 62 6f 6c 2e 0a 0a 20 20 20 20 76 61 72  symbol...    var
1490: 69 61 62 6c 65 20 6d 79 62 6c 6f 63 6b 65 72 73  iable myblockers
14a0: 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 28     {} ; # List (
14b0: 53 65 74 29 20 6f 66 20 74 68 65 20 73 79 6d 62  Set) of the symb
14c0: 6f 6c 73 20 77 68 69 63 68 20 62 6c 6f 63 6b 0a  ols which block.
14d0: 09 09 09 20 20 20 20 20 20 20 23 20 74 68 65 20  ...       # the 
14e0: 65 78 63 6c 75 73 69 6f 6e 20 6f 66 20 74 68 69  exclusion of thi
14f0: 73 20 73 79 6d 62 6f 6c 2e 0a 0a 20 20 20 20 76  s symbol...    v
1500: 61 72 69 61 62 6c 65 20 6d 79 70 70 61 72 65 6e  ariable mypparen
1510: 74 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20  t -array {} ; # 
1520: 4d 61 70 73 20 66 72 6f 6d 20 73 79 6d 62 6f 6c  Maps from symbol
1530: 73 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 0a  s to the number.
1540: 09 09 09 09 20 20 20 23 20 6f 66 20 66 69 6c 65  ....   # of file
1550: 73 20 69 6e 20 77 68 69 63 68 20 69 74 20 63 6f  s in which it co
1560: 75 6c 64 20 68 61 76 65 0a 09 09 09 09 20 20 20  uld have.....   
1570: 23 20 62 65 65 6e 20 61 20 70 61 72 65 6e 74 20  # been a parent 
1580: 6f 66 20 74 68 69 73 20 73 79 6d 62 6f 6c 2e 0a  of this symbol..
1590: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79  .    variable my
15a0: 74 79 70 65 20 7b 7d 20 3b 20 23 20 54 68 65 20  type {} ; # The 
15b0: 74 79 70 65 20 63 68 6f 73 65 6e 20 66 6f 72 20  type chosen for 
15c0: 74 68 65 20 73 79 6d 62 6f 6c 20 74 6f 20 75 73  the symbol to us
15d0: 65 20 69 6e 0a 09 09 09 20 23 20 74 68 65 20 63  e in.... # the c
15e0: 6f 6e 76 65 72 73 69 6f 6e 2e 0a 0a 20 20 20 20  onversion...    
15f0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
1600: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
1610: 23 23 23 23 23 23 23 0a 0a 20 20 20 20 74 79 70  #######..    typ
1620: 65 6d 65 74 68 6f 64 20 65 78 63 6c 75 64 65 20  emethod exclude 
1630: 7b 70 61 74 74 65 72 6e 7d 20 7b 0a 09 23 20 53  {pattern} {..# S
1640: 74 6f 72 65 20 74 68 65 20 70 61 74 74 65 72 6e  tore the pattern
1650: 20 69 6e 20 6d 65 6d 6f 72 79 20 66 6f 72 20 75   in memory for u
1660: 73 65 20 62 79 20 74 68 65 20 63 6f 64 65 20 64  se by the code d
1670: 6f 69 6e 67 20 74 79 70 65 0a 09 23 20 64 65 74  oing type..# det
1680: 65 72 6d 69 6e 61 74 69 6f 6e 2e 0a 0a 09 6c 61  ermination....la
1690: 70 70 65 6e 64 20 6d 79 65 78 63 6c 75 64 65 70  ppend myexcludep
16a0: 61 74 74 65 72 6e 20 5b 50 72 6f 63 65 73 73 50  attern [ProcessP
16b0: 61 74 74 65 72 6e 20 24 70 61 74 74 65 72 6e 20  attern $pattern 
16c0: 65 78 63 6c 75 73 69 6f 6e 5d 0a 09 72 65 74 75  exclusion]..retu
16d0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79  rn.    }..    ty
16e0: 70 65 6d 65 74 68 6f 64 20 66 6f 72 63 65 74 61  pemethod forceta
16f0: 67 20 7b 70 61 74 74 65 72 6e 7d 20 7b 0a 09 23  g {pattern} {..#
1700: 20 53 74 6f 72 65 20 74 68 65 20 70 61 74 74 65   Store the patte
1710: 72 6e 20 69 6e 20 6d 65 6d 6f 72 79 20 66 6f 72  rn in memory for
1720: 20 75 73 65 20 62 79 20 74 68 65 20 63 6f 64 65   use by the code
1730: 20 64 6f 69 6e 67 20 74 79 70 65 0a 09 23 20 64   doing type..# d
1740: 65 74 65 72 6d 69 6e 61 74 69 6f 6e 2e 0a 0a 09  etermination....
1750: 6c 61 70 70 65 6e 64 20 6d 79 66 6f 72 63 65 70  lappend myforcep
1760: 61 74 74 65 72 6e 20 5b 50 72 6f 63 65 73 73 50  attern [ProcessP
1770: 61 74 74 65 72 6e 20 24 70 61 74 74 65 72 6e 20  attern $pattern 
1780: 66 6f 72 63 65 2d 74 61 67 5d 20 24 6d 79 74 61  force-tag] $myta
1790: 67 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  g..return.    }.
17a0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20  .    typemethod 
17b0: 66 6f 72 63 65 62 72 61 6e 63 68 20 7b 70 61 74  forcebranch {pat
17c0: 74 65 72 6e 7d 20 7b 0a 09 23 20 53 74 6f 72 65  tern} {..# Store
17d0: 20 74 68 65 20 70 61 74 74 65 72 6e 20 69 6e 20   the pattern in 
17e0: 6d 65 6d 6f 72 79 20 66 6f 72 20 75 73 65 20 62  memory for use b
17f0: 79 20 74 68 65 20 63 6f 64 65 20 64 6f 69 6e 67  y the code doing
1800: 20 74 79 70 65 0a 09 23 20 64 65 74 65 72 6d 69   type..# determi
1810: 6e 61 74 69 6f 6e 2e 0a 0a 09 6c 61 70 70 65 6e  nation....lappen
1820: 64 20 6d 79 66 6f 72 63 65 70 61 74 74 65 72 6e  d myforcepattern
1830: 20 5b 50 72 6f 63 65 73 73 50 61 74 74 65 72 6e   [ProcessPattern
1840: 20 24 70 61 74 74 65 72 6e 20 66 6f 72 63 65 2d   $pattern force-
1850: 62 72 61 6e 63 68 5d 20 24 6d 79 62 72 61 6e 63  branch] $mybranc
1860: 68 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  h..return.    }.
1870: 0a 20 20 20 20 70 72 6f 63 20 50 72 6f 63 65 73  .    proc Proces
1880: 73 50 61 74 74 65 72 6e 20 7b 70 61 74 74 65 72  sPattern {patter
1890: 6e 20 6c 61 62 65 6c 7d 20 7b 0a 09 69 66 20 7b  n label} {..if {
18a0: 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 2a 3a  [string match *:
18b0: 2a 3a 2a 20 24 70 61 74 74 65 72 6e 5d 7d 20 7b  *:* $pattern]} {
18c0: 0a 09 20 20 20 20 23 20 42 61 64 20 73 79 6e 74  ..    # Bad synt
18d0: 61 78 20 66 6f 72 20 74 68 65 20 70 61 74 74 65  ax for the patte
18e0: 72 6e 2c 20 75 73 69 6e 67 20 6d 75 6c 74 69 70  rn, using multip
18f0: 6c 65 20 63 6f 6c 6f 6e 73 2e 0a 0a 09 20 20 20  le colons....   
1900: 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22   trouble fatal "
1910: 42 61 64 20 24 6c 61 62 65 6c 20 70 61 74 74 65  Bad $label patte
1920: 72 6e 20 27 24 70 61 74 74 65 72 6e 27 22 0a 09  rn '$pattern'"..
1930: 7d 20 65 6c 73 65 69 66 20 7b 21 5b 73 74 72 69  } elseif {![stri
1940: 6e 67 20 6d 61 74 63 68 20 2a 3a 2a 20 24 70 61  ng match *:* $pa
1950: 74 74 65 72 6e 5d 7d 20 7b 0a 09 20 20 20 20 23  ttern]} {..    #
1960: 20 57 68 65 6e 20 6f 6e 6c 79 20 61 20 73 79 6d   When only a sym
1970: 62 6f 6c 20 70 61 74 74 65 72 6e 20 69 73 20 73  bol pattern is s
1980: 70 65 63 69 66 69 65 64 20 69 74 20 61 70 70 6c  pecified it appl
1990: 69 65 73 20 74 6f 0a 09 20 20 20 20 23 20 61 6c  ies to..    # al
19a0: 6c 20 70 72 6f 6a 65 63 74 73 2e 0a 0a 09 20 20  l projects....  
19b0: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 2a    return [list *
19c0: 20 24 70 61 74 74 65 72 6e 5d 0a 09 7d 20 65 6c   $pattern]..} el
19d0: 73 65 20 7b 0a 09 20 20 20 20 23 20 42 6f 74 68  se {..    # Both
19e0: 20 70 72 6f 6a 65 63 74 20 61 6e 64 20 73 79 6d   project and sym
19f0: 62 6f 6c 20 70 61 74 74 65 72 6e 73 20 61 72 65  bol patterns are
1a00: 20 70 72 65 73 65 6e 74 2c 20 77 65 20 73 70 6c   present, we spl
1a10: 69 74 0a 09 20 20 20 20 23 20 74 68 65 6d 20 61  it..    # them a
1a20: 70 61 72 74 20 6e 6f 77 20 66 6f 72 20 73 74 6f  part now for sto
1a30: 72 61 67 65 20 61 6e 64 20 65 61 73 69 65 72 20  rage and easier 
1a40: 65 78 74 72 61 63 74 69 6f 6e 20 6c 61 74 65 72  extraction later
1a50: 2e 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20 5b  ....    return [
1a60: 73 70 6c 69 74 20 24 70 61 74 74 65 72 6e 20 3a  split $pattern :
1a70: 5d 0a 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ]..}.    }..    
1a80: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 65  typevariable mye
1a90: 78 63 6c 75 64 65 70 61 74 74 65 72 6e 20 7b 7d  xcludepattern {}
1aa0: 20 3b 20 23 20 4c 69 73 74 20 6f 66 20 70 61 74   ; # List of pat
1ab0: 74 65 72 6e 73 20 73 70 65 63 69 66 79 69 6e 67  terns specifying
1ac0: 0a 09 09 09 09 20 20 20 20 20 20 20 23 20 74 68  .....       # th
1ad0: 65 20 73 79 6d 62 6f 6c 73 20 74 6f 20 65 78 63  e symbols to exc
1ae0: 6c 75 64 65 20 66 72 6f 6d 0a 09 09 09 09 20 20  lude from.....  
1af0: 20 20 20 20 20 23 20 63 6f 6e 76 65 72 73 69 6f       # conversio
1b00: 6e 2e 20 54 61 67 73 20 61 6e 64 2f 6f 72 0a 09  n. Tags and/or..
1b10: 09 09 09 20 20 20 20 20 20 20 23 20 62 72 61 6e  ...       # bran
1b20: 63 68 65 73 2e 0a 0a 20 20 20 20 74 79 70 65 76  ches...    typev
1b30: 61 72 69 61 62 6c 65 20 6d 79 66 6f 72 63 65 70  ariable myforcep
1b40: 61 74 74 65 72 6e 20 7b 7d 20 3b 20 23 20 4c 69  attern {} ; # Li
1b50: 73 74 20 6f 66 20 70 61 74 74 65 72 6e 73 20 61  st of patterns a
1b60: 6e 64 20 74 79 70 65 73 0a 09 09 09 09 20 20 20  nd types.....   
1b70: 20 20 23 20 73 70 65 63 69 66 79 69 6e 67 20 77    # specifying w
1b80: 68 69 63 68 20 73 79 6d 62 6f 6c 73 20 74 6f 0a  hich symbols to.
1b90: 09 09 09 09 20 20 20 20 20 23 20 66 6f 72 63 65  ....     # force
1ba0: 20 74 6f 20 73 70 65 63 69 66 69 63 20 74 79 70   to specific typ
1bb0: 65 73 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74  es...    typemet
1bc0: 68 6f 64 20 67 65 74 73 79 6d 74 79 70 65 73 20  hod getsymtypes 
1bd0: 7b 7d 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 74  {} {..foreach {t
1be0: 69 64 20 6e 61 6d 65 7d 20 5b 73 74 61 74 65 20  id name} [state 
1bf0: 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43  run {..    SELEC
1c00: 54 20 74 69 64 2c 20 6e 61 6d 65 20 46 52 4f 4d  T tid, name FROM
1c10: 20 73 79 6d 74 79 70 65 3b 0a 09 7d 5d 20 7b 20   symtype;..}] { 
1c20: 73 65 74 20 6d 79 73 79 6d 74 79 70 65 28 24 74  set mysymtype($t
1c30: 69 64 29 20 24 6e 61 6d 65 20 7d 0a 09 72 65 74  id) $name }..ret
1c40: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
1c50: 20 4b 65 65 70 20 74 68 65 20 63 6f 64 65 73 20   Keep the codes 
1c60: 62 65 6c 6f 77 20 69 6e 20 73 79 6e 63 20 77 69  below in sync wi
1c70: 74 68 20 27 70 61 73 73 3a 3a 63 6f 6c 6c 72 65  th 'pass::collre
1c80: 76 2f 73 65 74 75 70 28 27 73 79 6d 74 79 70 65  v/setup('symtype
1c90: 27 29 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69  ')..    typevari
1ca0: 61 62 6c 65 20 6d 79 65 78 63 6c 75 64 65 64 20  able myexcluded 
1cb0: 20 20 20 20 20 20 20 30 20 3b 20 23 20 43 6f 64         0 ; # Cod
1cc0: 65 20 66 6f 72 20 73 79 6d 62 6f 6c 73 20 77 68  e for symbols wh
1cd0: 69 63 68 20 61 72 65 20 65 78 63 6c 75 64 65 64  ich are excluded
1ce0: 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62  ..    typevariab
1cf0: 6c 65 20 6d 79 74 61 67 20 20 20 20 20 20 20 20  le mytag        
1d00: 20 20 20 20 20 31 20 3b 20 23 20 43 6f 64 65 20       1 ; # Code 
1d10: 66 6f 72 20 73 79 6d 62 6f 6c 73 20 77 68 69 63  for symbols whic
1d20: 68 20 61 72 65 20 74 61 67 73 2e 0a 20 20 20 20  h are tags..    
1d30: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 62  typevariable myb
1d40: 72 61 6e 63 68 20 20 20 20 20 20 20 20 20 20 32  ranch          2
1d50: 20 3b 20 23 20 43 6f 64 65 20 66 6f 72 20 73 79   ; # Code for sy
1d60: 6d 62 6f 6c 73 20 77 68 69 63 68 20 61 72 65 20  mbols which are 
1d70: 62 72 61 6e 63 68 65 73 2e 0a 20 20 20 20 74 79  branches..    ty
1d80: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 75 6e 64  pevariable myund
1d90: 65 66 20 20 20 20 20 20 20 20 20 20 20 33 20 3b  ef           3 ;
1da0: 20 23 20 43 6f 64 65 20 66 6f 72 20 73 79 6d 62   # Code for symb
1db0: 6f 6c 73 20 6f 66 20 75 6e 6b 6e 6f 77 6e 20 74  ols of unknown t
1dc0: 79 70 65 2e 0a 20 20 20 20 74 79 70 65 76 61 72  ype..    typevar
1dd0: 69 61 62 6c 65 20 6d 79 73 79 6d 74 79 70 65 20  iable mysymtype 
1de0: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61  -array {} ; # Ma
1df0: 70 20 66 72 6f 6d 20 74 79 70 65 20 63 6f 64 65  p from type code
1e00: 20 74 6f 20 6c 61 62 65 6c 20 66 6f 72 20 74 68   to label for th
1e10: 65 20 6c 6f 67 2e 0a 0a 20 20 20 20 74 79 70 65  e log...    type
1e20: 6d 65 74 68 6f 64 20 75 6e 64 65 66 20 20 20 20  method undef    
1e30: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 75  {} { return $myu
1e40: 6e 64 65 66 20 20 20 20 7d 0a 20 20 20 20 74 79  ndef    }.    ty
1e50: 70 65 6d 65 74 68 6f 64 20 65 78 63 6c 75 64 65  pemethod exclude
1e60: 64 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  d {} { return $m
1e70: 79 65 78 63 6c 75 64 65 64 20 7d 0a 20 20 20 20  yexcluded }.    
1e80: 74 79 70 65 6d 65 74 68 6f 64 20 74 61 67 20 20  typemethod tag  
1e90: 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20      {} { return 
1ea0: 24 6d 79 74 61 67 20 20 20 20 20 20 7d 0a 20 20  $mytag      }.  
1eb0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 62 72 61    typemethod bra
1ec0: 6e 63 68 20 20 20 7b 7d 20 7b 20 72 65 74 75 72  nch   {} { retur
1ed0: 6e 20 24 6d 79 62 72 61 6e 63 68 20 20 20 7d 0a  n $mybranch   }.
1ee0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20  .    typemethod 
1ef0: 70 72 69 6e 74 72 75 6c 65 73 74 61 74 69 73 74  printrulestatist
1f00: 69 63 73 20 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72  ics {} {..log wr
1f10: 69 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 52 75  ite 2 symbol "Ru
1f20: 6c 65 20 75 73 61 67 65 20 73 74 61 74 69 73 74  le usage statist
1f30: 69 63 73 3a 22 0a 0a 09 73 65 74 20 66 6d 74 20  ics:"...set fmt 
1f40: 25 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  %[string length 
1f50: 24 6d 79 6e 75 6d 5d 73 0a 09 73 65 74 20 61 6c  $mynum]s..set al
1f60: 6c 20 30 0a 0a 09 66 6f 72 65 61 63 68 20 6b 65  l 0...foreach ke
1f70: 79 20 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20  y [lsort [array 
1f80: 6e 61 6d 65 73 20 6d 79 72 75 6c 65 63 6f 75 6e  names myrulecoun
1f90: 74 5d 5d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77  t]] {..    log w
1fa0: 72 69 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 2a  rite 2 symbol "*
1fb0: 20 5b 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 6d   [format $fmt $m
1fc0: 79 72 75 6c 65 63 6f 75 6e 74 28 24 6b 65 79 29  yrulecount($key)
1fd0: 5d 20 24 6b 65 79 22 0a 09 20 20 20 20 69 6e 63  ] $key"..    inc
1fe0: 72 20 61 6c 6c 20 24 6d 79 72 75 6c 65 63 6f 75  r all $myrulecou
1ff0: 6e 74 28 24 6b 65 79 29 0a 09 7d 0a 0a 09 6c 6f  nt($key)..}...lo
2000: 67 20 77 72 69 74 65 20 32 20 73 79 6d 62 6f 6c  g write 2 symbol
2010: 20 22 3d 20 5b 66 6f 72 6d 61 74 20 24 66 6d 74   "= [format $fmt
2020: 20 24 61 6c 6c 5d 20 74 6f 74 61 6c 22 0a 09 72   $all] total"..r
2030: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
2040: 20 23 20 53 74 61 74 69 73 74 69 63 73 20 6f 6e   # Statistics on
2050: 20 68 6f 77 20 6f 66 74 65 6e 20 65 61 63 68 20   how often each 
2060: 27 72 75 6c 65 27 20 77 61 73 20 75 73 65 64 20  'rule' was used 
2070: 74 6f 20 64 65 63 69 64 65 20 6f 6e 20 74 68 65  to decide on the
2080: 0a 20 20 20 20 23 20 74 79 70 65 20 6f 66 20 61  .    # type of a
2090: 20 73 79 6d 62 6f 6c 2e 0a 20 20 20 20 74 79 70   symbol..    typ
20a0: 65 76 61 72 69 61 62 6c 65 20 6d 79 72 75 6c 65  evariable myrule
20b0: 63 6f 75 6e 74 20 2d 61 72 72 61 79 20 7b 0a 09  count -array {..
20c0: 48 61 73 43 6f 6d 6d 69 74 73 20 30 0a 09 49 73  HasCommits 0..Is
20d0: 54 68 65 54 72 75 6e 6b 20 30 0a 09 55 6e 61 6d  TheTrunk 0..Unam
20e0: 62 69 67 6f 75 73 20 30 0a 09 55 6e 64 65 63 69  bigous 0..Undeci
20f0: 64 65 64 5f 20 30 0a 09 55 73 65 72 43 6f 6e 66  ded_ 0..UserConf
2100: 69 67 20 30 0a 09 56 6f 74 65 43 6f 75 6e 74 73  ig 0..VoteCounts
2110: 20 30 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79   0.    }..    ty
2120: 70 65 6d 65 74 68 6f 64 20 70 72 69 6e 74 74 79  pemethod printty
2130: 70 65 73 74 61 74 69 73 74 69 63 73 20 7b 7d 20  pestatistics {} 
2140: 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 32 20 73  {..log write 2 s
2150: 79 6d 62 6f 6c 20 22 53 79 6d 62 6f 6c 20 74 79  ymbol "Symbol ty
2160: 70 65 20 73 74 61 74 69 73 74 69 63 73 3a 22 0a  pe statistics:".
2170: 0a 09 73 65 74 20 66 6d 74 20 25 5b 73 74 72 69  ..set fmt %[stri
2180: 6e 67 20 6c 65 6e 67 74 68 20 24 6d 79 6e 75 6d  ng length $mynum
2190: 5d 73 0a 09 73 65 74 20 61 6c 6c 20 30 0a 0a 09  ]s..set all 0...
21a0: 66 6f 72 65 61 63 68 20 7b 73 74 79 70 65 20 73  foreach {stype s
21b0: 70 6c 75 72 61 6c 20 6e 7d 20 5b 73 74 61 74 65  plural n} [state
21c0: 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45   run {..    SELE
21d0: 43 54 20 54 2e 6e 61 6d 65 2c 20 54 2e 70 6c 75  CT T.name, T.plu
21e0: 72 61 6c 2c 20 43 4f 55 4e 54 20 28 73 2e 73 69  ral, COUNT (s.si
21f0: 64 29 0a 09 20 20 20 20 46 52 4f 4d 20 73 79 6d  d)..    FROM sym
2200: 62 6f 6c 20 53 2c 20 73 79 6d 74 79 70 65 20 54  bol S, symtype T
2210: 0a 09 20 20 20 20 57 48 45 52 45 20 53 2e 74 79  ..    WHERE S.ty
2220: 70 65 20 3d 20 54 2e 74 69 64 0a 09 20 20 20 20  pe = T.tid..    
2230: 47 52 4f 55 50 20 42 59 20 54 2e 6e 61 6d 65 0a  GROUP BY T.name.
2240: 09 20 20 20 20 4f 52 44 45 52 20 42 59 20 54 2e  .    ORDER BY T.
2250: 6e 61 6d 65 0a 09 20 20 20 20 3b 0a 09 7d 5d 20  name..    ;..}] 
2260: 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65  {..    log write
2270: 20 32 20 73 79 6d 62 6f 6c 20 22 2a 20 5b 66 6f   2 symbol "* [fo
2280: 72 6d 61 74 20 24 66 6d 74 20 24 6e 5d 20 5b 73  rmat $fmt $n] [s
2290: 70 20 24 6e 20 24 73 74 79 70 65 20 24 73 70 6c  p $n $stype $spl
22a0: 75 72 61 6c 5d 22 0a 09 20 20 20 20 69 6e 63 72  ural]"..    incr
22b0: 20 61 6c 6c 20 24 6e 0a 09 7d 0a 0a 09 6c 6f 67   all $n..}...log
22c0: 20 77 72 69 74 65 20 32 20 73 79 6d 62 6f 6c 20   write 2 symbol 
22d0: 22 3d 20 5b 66 6f 72 6d 61 74 20 24 66 6d 74 20  "= [format $fmt 
22e0: 24 61 6c 6c 5d 20 74 6f 74 61 6c 22 0a 09 72 65  $all] total"..re
22f0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
2300: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6e  typevariable myn
2310: 75 6d 20 30 0a 0a 20 20 20 20 23 20 23 20 23 23  um 0..    # # ##
2320: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
2330: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
2340: 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61  #.    ## Interna
2350: 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 6d  l methods..    m
2360: 65 74 68 6f 64 20 55 73 65 72 43 6f 6e 66 69 67  ethod UserConfig
2370: 20 7b 7d 20 7b 0a 09 73 65 74 20 70 72 6f 6a 65   {} {..set proje
2380: 63 74 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 62  ct [$myproject b
2390: 61 73 65 5d 0a 0a 09 23 20 46 69 72 73 74 20 63  ase]...# First c
23a0: 68 65 63 6b 20 69 66 20 74 68 65 20 75 73 65 72  heck if the user
23b0: 20 72 65 71 75 65 73 74 65 64 20 74 68 65 20 65   requested the e
23c0: 78 63 6c 75 73 69 6f 6e 20 6f 66 20 74 68 65 0a  xclusion of the.
23d0: 09 23 20 73 79 6d 62 6f 6c 20 66 72 6f 6d 20 63  .# symbol from c
23e0: 6f 6e 76 65 72 73 69 6f 6e 2e 0a 0a 09 66 6f 72  onversion....for
23f0: 65 61 63 68 20 65 78 20 24 6d 79 65 78 63 6c 75  each ex $myexclu
2400: 64 65 70 61 74 74 65 72 6e 20 7b 0a 09 20 20 20  depattern {..   
2410: 20 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73   struct::list as
2420: 73 69 67 6e 20 24 65 78 20 70 70 20 73 70 0a 09  sign $ex pp sp..
2430: 20 20 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67      if {![string
2440: 20 6d 61 74 63 68 20 24 70 70 20 24 70 72 6f 6a   match $pp $proj
2450: 65 63 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09  ect]} continue..
2460: 20 20 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67      if {![string
2470: 20 6d 61 74 63 68 20 24 73 70 20 24 6d 79 6e 61   match $sp $myna
2480: 6d 65 5d 7d 20 20 63 6f 6e 74 69 6e 75 65 0a 09  me]}  continue..
2490: 20 20 20 20 72 65 74 75 72 6e 20 24 6d 79 65 78      return $myex
24a0: 63 6c 75 64 65 64 0a 09 7d 0a 0a 09 23 20 49 66  cluded..}...# If
24b0: 20 74 68 65 20 73 79 6d 62 6f 6c 20 69 73 20 6e   the symbol is n
24c0: 6f 74 20 65 78 63 6c 75 64 65 64 20 66 75 72 74  ot excluded furt
24d0: 68 65 72 20 63 68 65 63 6b 20 69 66 20 74 68 65  her check if the
24e0: 20 75 73 65 72 0a 09 23 20 66 6f 72 63 65 73 20   user..# forces 
24f0: 69 74 73 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61  its conversion a
2500: 73 20 61 20 73 70 65 63 69 66 69 63 20 74 79 70  s a specific typ
2510: 65 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 65 78  e....foreach {ex
2520: 20 73 74 79 70 65 7d 20 24 6d 79 66 6f 72 63 65   stype} $myforce
2530: 70 61 74 74 65 72 6e 20 7b 0a 09 20 20 20 20 73  pattern {..    s
2540: 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69  truct::list assi
2550: 67 6e 20 24 65 78 20 70 70 20 73 70 0a 09 20 20  gn $ex pp sp..  
2560: 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d    if {![string m
2570: 61 74 63 68 20 24 70 70 20 24 70 72 6f 6a 65 63  atch $pp $projec
2580: 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  t]} continue..  
2590: 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d    if {![string m
25a0: 61 74 63 68 20 24 73 70 20 24 6d 79 6e 61 6d 65  atch $sp $myname
25b0: 5d 7d 20 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20  ]}  continue..  
25c0: 20 20 72 65 74 75 72 6e 20 24 73 74 79 70 65 0a    return $stype.
25d0: 09 7d 0a 0a 09 23 20 4e 6f 74 68 69 6e 67 20 69  .}...# Nothing i
25e0: 73 20 66 6f 72 63 65 64 2c 20 68 61 76 65 20 74  s forced, have t
25f0: 68 65 20 6d 61 69 6e 20 73 79 73 74 65 6d 20 68  he main system h
2600: 61 6e 64 20 74 68 65 20 73 79 6d 62 6f 6c 20 6f  and the symbol o
2610: 76 65 72 0a 09 23 20 74 6f 20 74 68 65 20 72 65  ver..# to the re
2620: 67 75 6c 61 72 20 68 65 75 72 69 73 74 69 63 73  gular heuristics
2630: 2e 0a 0a 09 72 65 74 75 72 6e 20 24 6d 79 75 6e  ....return $myun
2640: 64 65 66 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d  def.    }..    m
2650: 65 74 68 6f 64 20 55 6e 61 6d 62 69 67 6f 75 73  ethod Unambigous
2660: 20 7b 7d 20 7b 0a 09 23 20 49 66 20 61 20 73 79   {} {..# If a sy
2670: 6d 62 6f 6c 20 69 73 20 75 73 65 64 20 75 6e 61  mbol is used una
2680: 6d 62 69 67 75 6f 75 73 6c 79 20 61 73 20 61 20  mbiguously as a 
2690: 74 61 67 2f 62 72 61 6e 63 68 2c 20 63 6f 6e 76  tag/branch, conv
26a0: 65 72 74 0a 09 23 20 69 74 20 61 73 20 73 75 63  ert..# it as suc
26b0: 68 2e 0a 0a 09 73 65 74 20 69 73 74 61 67 20 20  h....set istag  
26c0: 20 20 5b 65 78 70 72 20 7b 24 6d 79 74 61 67 63    [expr {$mytagc
26d0: 6f 75 6e 74 20 20 20 20 3e 20 30 7d 5d 0a 09 73  ount    > 0}]..s
26e0: 65 74 20 69 73 62 72 61 6e 63 68 20 5b 65 78 70  et isbranch [exp
26f0: 72 20 7b 24 6d 79 62 72 61 6e 63 68 63 6f 75 6e  r {$mybranchcoun
2700: 74 20 3e 20 30 20 7c 7c 20 24 6d 79 63 6f 6d 6d  t > 0 || $mycomm
2710: 69 74 63 6f 75 6e 74 20 3e 20 30 7d 5d 0a 0a 09  itcount > 0}]...
2720: 69 66 20 7b 24 69 73 74 61 67 20 26 26 20 24 69  if {$istag && $i
2730: 73 62 72 61 6e 63 68 7d 20 7b 20 72 65 74 75 72  sbranch} { retur
2740: 6e 20 24 6d 79 75 6e 64 65 66 20 20 7d 0a 09 69  n $myundef  }..i
2750: 66 20 7b 24 69 73 74 61 67 7d 20 20 20 20 20 20  f {$istag}      
2760: 20 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e          { return
2770: 20 24 6d 79 74 61 67 20 20 20 20 7d 0a 09 69 66   $mytag    }..if
2780: 20 7b 24 69 73 62 72 61 6e 63 68 7d 20 20 20 20   {$isbranch}    
2790: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20         { return 
27a0: 24 6d 79 62 72 61 6e 63 68 20 7d 0a 0a 09 23 20  $mybranch }...# 
27b0: 53 79 6d 62 6f 6c 20 77 61 73 20 6e 6f 74 20 75  Symbol was not u
27c0: 73 65 64 20 61 74 20 61 6c 6c 2e 0a 09 72 65 74  sed at all...ret
27d0: 75 72 6e 20 24 6d 79 75 6e 64 65 66 0a 20 20 20  urn $myundef.   
27e0: 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 48   }..    method H
27f0: 61 73 43 6f 6d 6d 69 74 73 20 7b 7d 20 7b 0a 09  asCommits {} {..
2800: 23 20 49 66 20 74 68 65 72 65 20 77 61 73 20 65  # If there was e
2810: 76 65 72 20 61 20 63 6f 6d 6d 69 74 20 6f 6e 20  ver a commit on 
2820: 74 68 65 20 73 79 6d 62 6f 6c 2c 20 63 6f 6e 76  the symbol, conv
2830: 65 72 74 20 69 74 20 61 73 20 61 0a 09 23 20 62  ert it as a..# b
2840: 72 61 6e 63 68 2e 0a 0a 09 69 66 20 7b 24 6d 79  ranch....if {$my
2850: 63 6f 6d 6d 69 74 63 6f 75 6e 74 20 3e 20 30 7d  commitcount > 0}
2860: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 72 61   { return $mybra
2870: 6e 63 68 20 7d 0a 09 72 65 74 75 72 6e 20 24 6d  nch }..return $m
2880: 79 75 6e 64 65 66 0a 20 20 20 20 7d 0a 0a 20 20  yundef.    }..  
2890: 20 20 6d 65 74 68 6f 64 20 56 6f 74 65 43 6f 75    method VoteCou
28a0: 6e 74 73 20 7b 7d 20 7b 0a 09 23 20 43 6f 6e 76  nts {} {..# Conv
28b0: 65 72 74 20 74 68 65 20 73 79 6d 62 6f 6c 20 62  ert the symbol b
28c0: 61 73 65 64 20 6f 6e 20 68 6f 77 20 6f 66 74 65  ased on how ofte
28d0: 6e 20 69 74 20 77 61 73 20 75 73 65 64 20 61 73  n it was used as
28e0: 20 61 0a 09 23 20 62 72 61 6e 63 68 2f 74 61 67   a..# branch/tag
28f0: 2e 20 57 68 69 63 68 65 76 65 72 20 68 61 70 70  . Whichever happ
2900: 65 6e 65 64 20 6d 6f 72 65 20 6f 66 74 65 6e 20  ened more often 
2910: 64 65 74 65 72 6d 69 6e 65 73 20 68 6f 77 20 74  determines how t
2920: 68 65 0a 09 23 20 73 79 6d 62 6f 6c 20 69 73 20  he..# symbol is 
2930: 63 6f 6e 76 65 72 74 65 64 2e 0a 0a 09 69 66 20  converted....if 
2940: 7b 24 6d 79 74 61 67 63 6f 75 6e 74 20 3e 20 24  {$mytagcount > $
2950: 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 7d 20 7b  mybranchcount} {
2960: 20 72 65 74 75 72 6e 20 24 6d 79 74 61 67 20 7d   return $mytag }
2970: 0a 09 69 66 20 7b 24 6d 79 74 61 67 63 6f 75 6e  ..if {$mytagcoun
2980: 74 20 3c 20 24 6d 79 62 72 61 6e 63 68 63 6f 75  t < $mybranchcou
2990: 6e 74 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79  nt} { return $my
29a0: 62 72 61 6e 63 68 20 7d 0a 09 72 65 74 75 72 6e  branch }..return
29b0: 20 24 6d 79 75 6e 64 65 66 0a 20 20 20 20 7d 0a   $myundef.    }.
29c0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 4d 61 72 6b  .    method Mark
29d0: 41 73 20 7b 6c 61 62 65 6c 20 63 68 6f 73 65 6e  As {label chosen
29e0: 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 33  } {..log write 3
29f0: 20 73 79 6d 62 6f 6c 20 7b 5c 5b 24 6c 61 62 65   symbol {\[$labe
2a00: 6c 5c 5d 20 43 6f 6e 76 65 72 74 69 6e 67 20 73  l\] Converting s
2a10: 79 6d 62 6f 6c 20 27 24 6d 79 6e 61 6d 65 27 20  ymbol '$myname' 
2a20: 61 73 20 24 6d 79 73 79 6d 74 79 70 65 28 24 63  as $mysymtype($c
2a30: 68 6f 73 65 6e 29 7d 0a 0a 09 73 65 74 20 6d 79  hosen)}...set my
2a40: 74 79 70 65 20 24 63 68 6f 73 65 6e 0a 09 69 6e  type $chosen..in
2a50: 63 72 20 6d 79 72 75 6c 65 63 6f 75 6e 74 28 24  cr myrulecount($
2a60: 6c 61 62 65 6c 29 0a 0a 09 23 20 54 68 69 73 20  label)...# This 
2a70: 69 73 20 73 74 6f 72 65 64 20 64 69 72 65 63 74  is stored direct
2a80: 6c 79 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  ly into the data
2a90: 62 61 73 65 2e 0a 09 73 74 61 74 65 20 72 75 6e  base...state run
2aa0: 20 7b 0a 09 20 20 20 20 55 50 44 41 54 45 20 73   {..    UPDATE s
2ab0: 79 6d 62 6f 6c 0a 09 20 20 20 20 53 45 54 20 74  ymbol..    SET t
2ac0: 79 70 65 20 3d 20 24 63 68 6f 73 65 6e 0a 09 20  ype = $chosen.. 
2ad0: 20 20 20 57 48 45 52 45 20 73 69 64 20 3d 20 24     WHERE sid = $
2ae0: 6d 79 69 64 0a 09 20 20 20 20 3b 0a 09 7d 0a 09  myid..    ;..}..
2af0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
2b00: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
2b10: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
2b20: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
2b30: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a   Configuration..
2b40: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74      pragma -hast
2b50: 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b  ypeinfo    no  ;
2b60: 20 23 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f   # no type intro
2b70: 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61  spection.    pra
2b80: 67 6d 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20  gma -hasinfo    
2b90: 20 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f      no  ; # no o
2ba0: 62 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74  bject introspect
2bb0: 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d  ion.    pragma -
2bc0: 73 69 6d 70 6c 65 64 69 73 70 61 74 63 68 20 79  simpledispatch y
2bd0: 65 73 20 3b 20 23 20 73 69 6d 70 6c 65 20 66 61  es ; # simple fa
2be0: 73 74 20 64 69 73 70 61 74 63 68 0a 0a 20 20 20  st dispatch..   
2bf0: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
2c00: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
2c10: 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65  ########.}..name
2c20: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a  space eval ::vc:
2c30: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
2c40: 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 20 7b 0a  :cvs::project {.
2c50: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78      namespace ex
2c60: 70 6f 72 74 20 73 79 6d 0a 20 20 20 20 6e 61 6d  port sym.    nam
2c70: 65 73 70 61 63 65 20 65 76 61 6c 20 73 79 6d 20  espace eval sym 
2c80: 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  {..namespace imp
2c90: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  ort ::vc::fossil
2ca0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73  ::import::cvs::s
2cb0: 74 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 65 20  tate..namespace 
2cc0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f  import ::vc::too
2cd0: 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d  ls::misc::*..nam
2ce0: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
2cf0: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62  vc::tools::troub
2d00: 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d  le..namespace im
2d10: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73  port ::vc::tools
2d20: 3a 3a 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 69 73  ::log..log regis
2d30: 74 65 72 20 73 79 6d 62 6f 6c 0a 20 20 20 20 7d  ter symbol.    }
2d40: 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23  .}..# # ## ### #
2d50: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
2d60: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23  ########### ####
2d70: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
2d80: 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b  #.## Ready..pack
2d90: 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a  age provide vc::
2da0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
2db0: 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 73 79  cvs::project::sy
2dc0: 6d 20 31 2e 30 0a 72 65 74 75 72 6e 0a           m 1.0.return.