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