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.