Artifact e97d1e5410b79da3de12c44139dc5f188da36353:
File
tools/cvs2fossil/lib/c2f_psym.tcl
part of check-in
[38b967dcf5]
- Merge aku's CVS import changes into the main line. Fix a small bug in diff.c.
by
drh on
2007-11-17 00:29:42.
Also file
tools/cvs2fossil/lib/c2f_psym.tcl
part of check-in
[ffafc0bd65]
- Continued work on pass 4. Added code bringing the file level symbol data into compliance with the project level symbol types, converting tags to branches and vice versa.
by
aku on
2007-11-06 07:14:07.
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 20 0a 0a 73 6e 69 74 3a 3a 74 79 ##.## ..snit::ty
04c0: 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a pe ::vc::fossil:
04d0: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 :import::cvs::pr
04e0: 6f 6a 65 63 74 3a 3a 73 79 6d 20 7b 0a 20 20 20 oject::sym {.
04f0: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
0500: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
0510: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 ########. ##
0520: 50 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20 20 Public API..
0530: 63 6f 6e 73 74 72 75 63 74 6f 72 20 7b 6e 61 6d constructor {nam
0540: 65 20 69 64 20 70 72 6f 6a 65 63 74 7d 20 7b 0a e id project} {.
0550: 09 73 65 74 20 6d 79 6e 61 6d 65 20 20 20 20 24 .set myname $
0560: 6e 61 6d 65 0a 09 73 65 74 20 6d 79 69 64 20 20 name..set myid
0570: 20 20 20 20 24 69 64 0a 09 73 65 74 20 6d 79 70 $id..set myp
0580: 72 6f 6a 65 63 74 20 24 70 72 6f 6a 65 63 74 0a roject $project.
0590: 0a 09 23 20 43 6f 75 6e 74 20 74 6f 74 61 6c 20 ..# Count total
05a0: 6e 75 6d 62 65 72 20 6f 66 20 73 79 6d 62 6f 6c number of symbol
05b0: 73 2e 0a 09 69 6e 63 72 20 6d 79 6e 75 6d 0a 09 s...incr mynum..
05c0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
05d0: 20 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 7b 7d method name {}
05e0: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 6e 61 6d { return $mynam
05f0: 65 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 69 e }. method i
0600: 64 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 d {} { return
0610: 24 6d 79 69 64 20 20 20 7d 0a 0a 20 20 20 20 23 $myid }.. #
0620: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
0630: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
0640: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 53 79 ######. ## Sy
0650: 6d 62 6f 6c 20 74 79 70 65 0a 0a 20 20 20 20 6d mbol type.. m
0660: 65 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 74 ethod determinet
0670: 79 70 65 20 7b 7d 20 7b 0a 09 23 20 54 68 69 73 ype {} {..# This
0680: 20 69 73 20 64 6f 6e 65 20 62 79 20 61 20 66 69 is done by a fi
0690: 78 65 64 20 68 65 75 72 69 73 74 69 63 73 2c 20 xed heuristics,
06a0: 77 69 74 68 20 67 75 69 64 61 6e 63 65 20 62 79 with guidance by
06b0: 20 74 68 65 0a 09 23 20 75 73 65 72 20 69 6e 20 the..# user in
06c0: 65 64 67 65 2d 63 61 73 65 73 2e 20 43 6f 6e 74 edge-cases. Cont
06d0: 72 61 72 79 20 74 6f 20 63 76 73 32 73 76 6e 20 rary to cvs2svn
06e0: 77 68 69 63 68 20 75 73 65 73 20 61 20 62 69 67 which uses a big
06f0: 0a 09 23 20 68 6f 6e 6b 69 6e 67 20 73 74 72 65 ..# honking stre
0700: 61 67 79 20 63 6c 61 73 73 20 61 6e 64 20 72 75 agy class and ru
0710: 6c 65 20 6f 62 6a 65 63 74 73 2e 20 4b 65 65 70 le objects. Keep
0720: 20 69 74 20 73 69 6d 70 6c 65 2c 20 77 65 0a 09 it simple, we..
0730: 23 20 63 61 6e 20 65 78 70 61 6e 64 20 6c 61 74 # can expand lat
0740: 65 72 20 77 68 65 6e 20 77 65 20 61 63 74 75 61 er when we actua
0750: 6c 6c 79 20 6e 65 65 64 20 61 6c 6c 20 74 68 65 lly need all the
0760: 20 63 6f 6d 70 6c 65 78 69 74 79 0a 09 23 20 66 complexity..# f
0770: 6f 72 20 63 6f 6e 66 69 67 75 72 61 62 69 6c 69 or configurabili
0780: 74 79 2e 0a 0a 09 23 20 54 68 65 20 66 6f 6c 6c ty....# The foll
0790: 6f 77 69 6e 67 20 67 75 69 64 65 6c 69 6e 65 73 owing guidelines
07a0: 20 61 72 65 20 61 70 70 6c 69 65 64 3a 0a 09 23 are applied:..#
07b0: 20 2d 20 49 73 20 75 73 61 67 65 20 75 6e 61 6d - Is usage unam
07c0: 62 69 67 6f 75 73 20 3f 0a 09 23 20 2d 20 57 61 bigous ?..# - Wa
07d0: 73 20 74 68 65 72 65 20 65 76 65 72 20 61 20 63 s there ever a c
07e0: 6f 6d 6d 69 74 20 6f 6e 20 74 68 65 20 73 79 6d ommit on the sym
07f0: 62 6f 6c 20 3f 0a 09 23 20 2d 20 4d 6f 72 65 20 bol ?..# - More
0800: 75 73 65 64 20 61 73 20 74 61 67 2c 20 6f 72 20 used as tag, or
0810: 6d 6f 72 65 20 75 73 65 64 20 61 73 20 62 72 61 more used as bra
0820: 6e 63 68 20 3f 0a 09 23 20 2d 20 41 74 20 6c 61 nch ?..# - At la
0830: 73 74 2c 20 77 68 61 74 20 68 61 73 20 74 68 65 st, what has the
0840: 20 75 73 65 72 20 74 6f 6c 64 20 75 73 20 61 62 user told us ab
0850: 6f 75 74 20 69 74 20 3f 0a 09 23 20 2d 20 46 61 out it ?..# - Fa
0860: 69 6c 0a 09 0a 09 66 6f 72 65 61 63 68 20 72 75 il....foreach ru
0870: 6c 65 20 7b 0a 09 20 20 20 20 55 73 65 72 43 6f le {.. UserCo
0880: 6e 66 69 67 0a 09 20 20 20 20 55 6e 61 6d 62 69 nfig.. Unambi
0890: 67 6f 75 73 0a 09 20 20 20 20 48 61 73 43 6f 6d gous.. HasCom
08a0: 6d 69 74 73 0a 09 20 20 20 20 56 6f 74 65 43 6f mits.. VoteCo
08b0: 75 6e 74 73 0a 09 7d 20 7b 0a 09 20 20 20 73 65 unts..} {.. se
08c0: 74 20 63 68 6f 73 65 6e 20 5b 24 73 65 6c 66 20 t chosen [$self
08d0: 24 72 75 6c 65 5d 0a 09 20 20 20 69 66 20 7b 24 $rule].. if {$
08e0: 63 68 6f 73 65 6e 20 65 71 20 24 6d 79 75 6e 64 chosen eq $myund
08f0: 65 66 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 ef} continue..
0900: 20 24 73 65 6c 66 20 4d 61 72 6b 41 73 20 24 72 $self MarkAs $r
0910: 75 6c 65 20 24 63 68 6f 73 65 6e 0a 09 20 20 20 ule $chosen..
0920: 72 65 74 75 72 6e 0a 09 7d 0a 0a 09 23 20 4e 6f return..}...# No
0930: 6e 65 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 ne of the above
0940: 77 61 73 20 61 62 6c 65 20 74 6f 20 64 65 63 69 was able to deci
0950: 64 65 20 77 68 69 63 68 20 74 79 70 65 20 74 6f de which type to
0960: 20 61 73 73 69 67 6e 20 74 6f 0a 09 23 20 74 68 assign to..# th
0970: 65 20 73 79 6d 62 6f 6c 2e 20 54 68 69 73 20 69 e symbol. This i
0980: 73 20 61 20 66 61 74 61 6c 20 65 72 72 6f 72 20 s a fatal error
0990: 70 72 65 76 65 6e 74 69 6e 67 20 74 68 65 20 65 preventing the e
09a0: 78 65 63 75 74 69 6f 6e 0a 09 23 20 6f 66 20 74 xecution..# of t
09b0: 68 65 20 70 61 73 73 65 73 20 61 66 74 65 72 20 he passes after
09c0: 27 43 6f 6c 6c 61 74 65 53 79 6d 62 6f 6c 73 27 'CollateSymbols'
09d0: 2e 0a 0a 09 69 6e 63 72 20 6d 79 72 75 6c 65 63 ....incr myrulec
09e0: 6f 75 6e 74 28 55 6e 64 65 63 69 64 65 64 5f 29 ount(Undecided_)
09f0: 0a 09 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 ..trouble fatal
0a00: 22 55 6e 61 62 6c 65 20 74 6f 20 64 65 63 69 64 "Unable to decid
0a10: 65 20 68 6f 77 20 74 6f 20 63 6f 6e 76 65 72 74 e how to convert
0a20: 20 73 79 6d 62 6f 6c 20 27 24 6d 79 6e 61 6d 65 symbol '$myname
0a30: 27 22 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d '"..return. }
0a40: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6d 61 72 .. method mar
0a50: 6b 74 68 65 74 72 75 6e 6b 20 7b 7d 20 7b 20 24 kthetrunk {} { $
0a60: 73 65 6c 66 20 4d 61 72 6b 41 73 20 49 73 54 68 self MarkAs IsTh
0a70: 65 54 72 75 6e 6b 20 24 6d 79 62 72 61 6e 63 68 eTrunk $mybranch
0a80: 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 20 ; return }..
0a90: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
0aa0: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
0ab0: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 ########. ##
0ac0: 53 79 6d 62 6f 6c 20 73 74 61 74 69 73 74 69 63 Symbol statistic
0ad0: 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65 s.. method de
0ae0: 66 63 6f 75 6e 74 73 20 7b 74 63 20 62 63 20 63 fcounts {tc bc c
0af0: 63 7d 20 7b 0a 09 73 65 74 20 6d 79 62 72 61 6e c} {..set mybran
0b00: 63 68 63 6f 75 6e 74 20 24 74 63 0a 09 73 65 74 chcount $tc..set
0b10: 20 6d 79 74 61 67 63 6f 75 6e 74 20 20 20 20 24 mytagcount $
0b20: 62 63 0a 09 73 65 74 20 6d 79 63 6f 6d 6d 69 74 bc..set mycommit
0b30: 63 6f 75 6e 74 20 24 63 63 0a 09 72 65 74 75 72 count $cc..retur
0b40: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
0b50: 68 6f 64 20 63 6f 75 6e 74 61 73 62 72 61 6e 63 hod countasbranc
0b60: 68 20 7b 7d 20 7b 20 69 6e 63 72 20 6d 79 62 72 h {} { incr mybr
0b70: 61 6e 63 68 63 6f 75 6e 74 20 3b 20 72 65 74 75 anchcount ; retu
0b80: 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 6f 64 20 rn }. method
0b90: 63 6f 75 6e 74 61 73 74 61 67 20 20 20 20 7b 7d countastag {}
0ba0: 20 7b 20 69 6e 63 72 20 6d 79 74 61 67 63 6f 75 { incr mytagcou
0bb0: 6e 74 20 20 20 20 3b 20 72 65 74 75 72 6e 20 7d nt ; return }
0bc0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 63 6f 75 6e . method coun
0bd0: 74 61 63 6f 6d 6d 69 74 20 20 7b 7d 20 7b 20 69 tacommit {} { i
0be0: 6e 63 72 20 6d 79 63 6f 6d 6d 69 74 63 6f 75 6e ncr mycommitcoun
0bf0: 74 20 3b 20 72 65 74 75 72 6e 20 7d 0a 0a 20 20 t ; return }..
0c00: 20 20 6d 65 74 68 6f 64 20 62 6c 6f 63 6b 65 64 method blocked
0c10: 62 79 20 7b 73 79 6d 62 6f 6c 7d 20 7b 0a 09 23 by {symbol} {..#
0c20: 20 52 65 6d 65 6d 62 65 72 20 74 68 65 20 73 79 Remember the sy
0c30: 6d 62 6f 6c 20 61 73 20 70 72 65 76 65 6e 74 69 mbol as preventi
0c40: 6e 67 20 74 68 65 20 72 65 6d 6f 76 61 6c 20 6f ng the removal o
0c50: 66 20 74 68 69 73 0a 09 23 20 73 79 6d 62 6f 6c f this..# symbol
0c60: 2e 20 4f 74 20 69 73 20 61 20 74 61 67 20 6f 72 . Ot is a tag or
0c70: 20 62 72 61 6e 63 68 20 74 68 61 74 20 73 70 61 branch that spa
0c80: 77 6e 65 64 20 66 72 6f 6d 20 61 20 72 65 76 69 wned from a revi
0c90: 73 69 6f 6e 0a 09 23 20 6f 6e 20 74 68 69 73 20 sion..# on this
0ca0: 73 79 6d 62 6f 6c 2e 0a 0a 09 73 74 72 75 63 74 symbol....struct
0cb0: 3a 3a 73 65 74 20 69 6e 63 6c 75 64 65 20 6d 79 ::set include my
0cc0: 62 6c 6f 63 6b 65 72 73 20 24 73 79 6d 62 6f 6c blockers $symbol
0cd0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
0ce0: 20 20 20 20 6d 65 74 68 6f 64 20 70 6f 73 73 69 method possi
0cf0: 62 6c 65 70 61 72 65 6e 74 20 7b 73 79 6d 62 6f bleparent {symbo
0d00: 6c 7d 20 7b 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 l} {..if {[info
0d10: 65 78 69 73 74 73 20 6d 79 70 70 61 72 65 6e 74 exists mypparent
0d20: 28 24 73 79 6d 62 6f 6c 29 5d 7d 20 7b 0a 09 20 ($symbol)]} {..
0d30: 20 20 20 69 6e 63 72 20 6d 79 70 70 61 72 65 6e incr mypparen
0d40: 74 28 24 73 79 6d 62 6f 6c 29 0a 09 7d 20 65 6c t($symbol)..} el
0d50: 73 65 20 7b 0a 09 20 20 20 20 73 65 74 20 20 6d se {.. set m
0d60: 79 70 70 61 72 65 6e 74 28 24 73 79 6d 62 6f 6c ypparent($symbol
0d70: 29 20 31 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 ) 1..}..return.
0d80: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
0d90: 20 69 73 67 68 6f 73 74 20 7b 7d 20 7b 0a 09 23 isghost {} {..#
0da0: 20 43 68 65 63 6b 73 20 69 66 20 74 68 69 73 20 Checks if this
0db0: 73 79 6d 62 6f 6c 20 28 61 73 20 6c 69 6e 65 20 symbol (as line
0dc0: 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 29 20 of development)
0dd0: 6e 65 76 65 72 0a 09 23 20 65 78 69 73 74 65 64 never..# existed
0de0: 2e 0a 0a 09 69 66 20 7b 24 6d 79 63 6f 6d 6d 69 ....if {$mycommi
0df0: 74 63 6f 75 6e 74 20 3e 20 30 7d 20 20 20 20 20 tcount > 0}
0e00: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 30 20 7d { return 0 }
0e10: 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 ..if {[llength $
0e20: 6d 79 62 6c 6f 63 6b 65 72 73 5d 7d 20 20 20 20 myblockers]}
0e30: 20 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 09 { return 0 }..
0e40: 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a 65 20 if {[array size
0e50: 6d 79 70 70 61 72 65 6e 74 5d 20 3e 20 30 7d 20 mypparent] > 0}
0e60: 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 0a 09 72 { return 0 }...r
0e70: 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a 0a 20 eturn 1. }..
0e80: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 # # ## ### ##
0e90: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
0ea0: 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20 20 20 ##########..
0eb0: 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74 72 65 method persistre
0ec0: 76 20 7b 7d 20 7b 0a 09 73 65 74 20 70 69 64 20 v {} {..set pid
0ed0: 5b 24 6d 79 70 72 6f 6a 65 63 74 20 69 64 5d 0a [$myproject id].
0ee0: 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 74 ..state transact
0ef0: 69 6f 6e 20 7b 0a 09 20 20 20 20 73 74 61 74 65 ion {.. state
0f00: 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 52 54 20 run {...INSERT
0f10: 49 4e 54 4f 20 73 79 6d 62 6f 6c 20 28 20 73 69 INTO symbol ( si
0f20: 64 2c 20 20 20 70 69 64 2c 20 20 6e 61 6d 65 2c d, pid, name,
0f30: 20 20 20 74 79 70 65 2c 20 20 20 20 20 74 61 67 type, tag
0f40: 5f 63 6f 75 6e 74 2c 20 20 20 62 72 61 6e 63 68 _count, branch
0f50: 5f 63 6f 75 6e 74 2c 20 20 20 63 6f 6d 6d 69 74 _count, commit
0f60: 5f 63 6f 75 6e 74 29 0a 09 09 56 41 4c 55 45 53 _count)...VALUES
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 24 6d ($m
0f80: 79 69 64 2c 20 24 70 69 64 2c 20 24 6d 79 6e 61 yid, $pid, $myna
0f90: 6d 65 2c 20 24 6d 79 75 6e 64 65 66 2c 20 24 6d me, $myundef, $m
0fa0: 79 74 61 67 63 6f 75 6e 74 2c 20 24 6d 79 62 72 ytagcount, $mybr
0fb0: 61 6e 63 68 63 6f 75 6e 74 2c 20 24 6d 79 63 6f anchcount, $myco
0fc0: 6d 6d 69 74 63 6f 75 6e 74 29 3b 0a 09 20 20 20 mmitcount);..
0fd0: 20 7d 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 }.. foreach
0fe0: 73 79 6d 62 6f 6c 20 24 6d 79 62 6c 6f 63 6b 65 symbol $myblocke
0ff0: 72 73 20 7b 0a 09 09 73 65 74 20 62 69 64 20 5b rs {...set bid [
1000: 24 73 79 6d 62 6f 6c 20 69 64 5d 0a 09 09 73 74 $symbol id]...st
1010: 61 74 65 20 72 75 6e 20 7b 0a 09 09 20 20 20 20 ate run {...
1020: 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 6c 6f 63 INSERT INTO bloc
1030: 6b 65 72 20 28 73 69 64 2c 20 20 20 62 69 64 29 ker (sid, bid)
1040: 0a 09 09 20 20 20 20 56 41 4c 55 45 53 20 20 20 ... VALUES
1050: 20 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 ($myi
1060: 64 2c 20 24 62 69 64 29 3b 0a 09 09 7d 0a 09 20 d, $bid);...}..
1070: 20 20 20 7d 0a 09 20 20 20 20 66 6f 72 65 61 63 }.. foreac
1080: 68 20 7b 73 79 6d 62 6f 6c 20 63 6f 75 6e 74 7d h {symbol count}
1090: 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 70 70 [array get mypp
10a0: 61 72 65 6e 74 5d 20 7b 0a 09 09 73 65 74 20 70 arent] {...set p
10b0: 69 64 20 5b 24 73 79 6d 62 6f 6c 20 69 64 5d 0a id [$symbol id].
10c0: 09 09 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 ..state run {...
10d0: 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 INSERT INTO
10e0: 70 61 72 65 6e 74 20 28 73 69 64 2c 20 20 20 70 parent (sid, p
10f0: 69 64 2c 20 20 6e 29 0a 09 09 20 20 20 20 56 41 id, n)... VA
1100: 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20 20 LUES
1110: 20 28 24 6d 79 69 64 2c 20 24 70 69 64 2c 20 24 ($myid, $pid, $
1120: 63 6f 75 6e 74 29 3b 0a 09 09 7d 0a 09 20 20 20 count);...}..
1130: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 }..}..return.
1140: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 }.. # # ##
1150: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
1160: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
1170: 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20 . ## State..
1180: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 72 variable mypr
1190: 6f 6a 65 63 74 20 7b 7d 20 3b 20 23 20 52 65 66 oject {} ; # Ref
11a0: 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 70 72 erence to the pr
11b0: 6f 6a 65 63 74 20 6f 62 6a 65 63 74 0a 09 09 09 oject object....
11c0: 20 20 20 20 23 20 63 6f 6e 74 61 69 6e 69 6e 67 # containing
11d0: 20 74 68 65 20 73 79 6d 62 6f 6c 2e 0a 20 20 20 the symbol..
11e0: 20 76 61 72 69 61 62 6c 65 20 6d 79 6e 61 6d 65 variable myname
11f0: 20 20 20 20 7b 7d 20 3b 20 23 20 54 68 65 20 73 {} ; # The s
1200: 79 6d 62 6f 6c 27 73 20 6e 61 6d 65 0a 20 20 20 ymbol's name.
1210: 20 76 61 72 69 61 62 6c 65 20 6d 79 69 64 20 20 variable myid
1220: 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 70 6f 73 {} ; # Repos
1230: 69 74 6f 72 79 20 77 69 64 65 20 6e 75 6d 65 72 itory wide numer
1240: 69 63 20 69 64 20 6f 66 20 74 68 65 0a 09 09 09 ic id of the....
1250: 20 20 20 20 23 20 73 79 6d 62 6f 6c 2e 20 54 68 # symbol. Th
1260: 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 65 6e is implicitly en
1270: 63 6f 64 65 73 20 74 68 65 0a 09 09 09 20 20 20 codes the....
1280: 20 23 20 70 72 6f 6a 65 63 74 20 61 73 20 77 65 # project as we
1290: 6c 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c ll... variabl
12a0: 65 20 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 20 e mybranchcount
12b0: 30 20 3b 20 23 20 43 6f 75 6e 74 20 68 6f 77 20 0 ; # Count how
12c0: 6d 61 6e 79 20 75 73 65 73 20 61 73 20 62 72 61 many uses as bra
12d0: 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 61 62 6c nch.. variabl
12e0: 65 20 6d 79 74 61 67 63 6f 75 6e 74 20 20 20 20 e mytagcount
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 74 61 67 many uses as tag
1310: 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d .. variable m
1320: 79 63 6f 6d 6d 69 74 63 6f 75 6e 74 20 30 20 3b ycommitcount 0 ;
1330: 20 23 20 43 6f 75 6e 74 20 68 6f 77 20 6d 61 6e # Count how man
1340: 79 20 66 69 6c 65 73 20 64 69 64 20 61 20 63 6f y files did a co
1350: 6d 6d 69 74 20 6f 6e 20 74 68 65 20 73 79 6d 62 mmit on the symb
1360: 6f 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 6c ol... variabl
1370: 65 20 6d 79 62 6c 6f 63 6b 65 72 73 20 20 20 7b e myblockers {
1380: 7d 20 3b 20 23 20 4c 69 73 74 20 28 53 65 74 29 } ; # List (Set)
1390: 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c 73 20 of the symbols
13a0: 77 68 69 63 68 20 62 6c 6f 63 6b 0a 09 09 09 20 which block....
13b0: 20 20 20 20 20 20 23 20 74 68 65 20 65 78 63 6c # the excl
13c0: 75 73 69 6f 6e 20 6f 66 20 74 68 69 73 20 73 79 usion of this sy
13d0: 6d 62 6f 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61 mbol... varia
13e0: 62 6c 65 20 6d 79 70 70 61 72 65 6e 74 20 2d 61 ble mypparent -a
13f0: 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 73 rray {} ; # Maps
1400: 20 66 72 6f 6d 20 73 79 6d 62 6f 6c 73 20 74 6f from symbols to
1410: 20 74 68 65 20 6e 75 6d 62 65 72 0a 09 09 09 09 the number.....
1420: 20 20 20 23 20 6f 66 20 66 69 6c 65 73 20 69 6e # of files in
1430: 20 77 68 69 63 68 20 69 74 20 63 6f 75 6c 64 20 which it could
1440: 68 61 76 65 0a 09 09 09 09 20 20 20 23 20 62 65 have..... # be
1450: 65 6e 20 61 20 70 61 72 65 6e 74 20 6f 66 20 74 en a parent of t
1460: 68 69 73 20 73 79 6d 62 6f 6c 2e 0a 0a 20 20 20 his symbol...
1470: 20 76 61 72 69 61 62 6c 65 20 6d 79 74 79 70 65 variable mytype
1480: 20 7b 7d 20 3b 20 23 20 54 68 65 20 74 79 70 65 {} ; # The type
1490: 20 63 68 6f 73 65 6e 20 66 6f 72 20 74 68 65 20 chosen for the
14a0: 73 79 6d 62 6f 6c 20 74 6f 20 75 73 65 20 69 6e symbol to use in
14b0: 0a 09 09 09 20 23 20 74 68 65 20 63 6f 6e 76 65 .... # the conve
14c0: 72 73 69 6f 6e 2e 0a 0a 20 20 20 20 23 20 23 20 rsion... # #
14d0: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
14e0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
14f0: 23 23 23 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 ###.. typemet
1500: 68 6f 64 20 65 78 63 6c 75 64 65 20 7b 70 61 74 hod exclude {pat
1510: 74 65 72 6e 7d 20 7b 0a 09 23 20 53 74 6f 72 65 tern} {..# Store
1520: 20 74 68 65 20 70 61 74 74 65 72 6e 20 69 6e 20 the pattern in
1530: 6d 65 6d 6f 72 79 20 66 6f 72 20 75 73 65 20 62 memory for use b
1540: 79 20 74 68 65 20 63 6f 64 65 20 64 6f 69 6e 67 y the code doing
1550: 20 74 79 70 65 0a 09 23 20 64 65 74 65 72 6d 69 type..# determi
1560: 6e 61 74 69 6f 6e 2e 0a 0a 09 6c 61 70 70 65 6e nation....lappen
1570: 64 20 6d 79 65 78 63 6c 75 64 65 70 61 74 74 65 d myexcludepatte
1580: 72 6e 20 5b 50 72 6f 63 65 73 73 50 61 74 74 65 rn [ProcessPatte
1590: 72 6e 20 24 70 61 74 74 65 72 6e 20 65 78 63 6c rn $pattern excl
15a0: 75 73 69 6f 6e 5d 0a 09 72 65 74 75 72 6e 0a 20 usion]..return.
15b0: 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 }.. typeme
15c0: 74 68 6f 64 20 66 6f 72 63 65 74 61 67 20 7b 70 thod forcetag {p
15d0: 61 74 74 65 72 6e 7d 20 7b 0a 09 23 20 53 74 6f attern} {..# Sto
15e0: 72 65 20 74 68 65 20 70 61 74 74 65 72 6e 20 69 re the pattern i
15f0: 6e 20 6d 65 6d 6f 72 79 20 66 6f 72 20 75 73 65 n memory for use
1600: 20 62 79 20 74 68 65 20 63 6f 64 65 20 64 6f 69 by the code doi
1610: 6e 67 20 74 79 70 65 0a 09 23 20 64 65 74 65 72 ng type..# deter
1620: 6d 69 6e 61 74 69 6f 6e 2e 0a 0a 09 6c 61 70 70 mination....lapp
1630: 65 6e 64 20 6d 79 66 6f 72 63 65 70 61 74 74 65 end myforcepatte
1640: 72 6e 20 5b 50 72 6f 63 65 73 73 50 61 74 74 65 rn [ProcessPatte
1650: 72 6e 20 24 70 61 74 74 65 72 6e 20 66 6f 72 63 rn $pattern forc
1660: 65 2d 74 61 67 5d 20 24 6d 79 74 61 67 0a 09 72 e-tag] $mytag..r
1670: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
1680: 20 74 79 70 65 6d 65 74 68 6f 64 20 66 6f 72 63 typemethod forc
1690: 65 62 72 61 6e 63 68 20 7b 70 61 74 74 65 72 6e ebranch {pattern
16a0: 7d 20 7b 0a 09 23 20 53 74 6f 72 65 20 74 68 65 } {..# Store the
16b0: 20 70 61 74 74 65 72 6e 20 69 6e 20 6d 65 6d 6f pattern in memo
16c0: 72 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 ry for use by th
16d0: 65 20 63 6f 64 65 20 64 6f 69 6e 67 20 74 79 70 e code doing typ
16e0: 65 0a 09 23 20 64 65 74 65 72 6d 69 6e 61 74 69 e..# determinati
16f0: 6f 6e 2e 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79 on....lappend my
1700: 66 6f 72 63 65 70 61 74 74 65 72 6e 20 5b 50 72 forcepattern [Pr
1710: 6f 63 65 73 73 50 61 74 74 65 72 6e 20 24 70 61 ocessPattern $pa
1720: 74 74 65 72 6e 20 66 6f 72 63 65 2d 62 72 61 6e ttern force-bran
1730: 63 68 5d 20 24 6d 79 62 72 61 6e 63 68 0a 09 72 ch] $mybranch..r
1740: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
1750: 20 70 72 6f 63 20 50 72 6f 63 65 73 73 50 61 74 proc ProcessPat
1760: 74 65 72 6e 20 7b 70 61 74 74 65 72 6e 20 6c 61 tern {pattern la
1770: 62 65 6c 7d 20 7b 0a 09 69 66 20 7b 5b 73 74 72 bel} {..if {[str
1780: 69 6e 67 20 6d 61 74 63 68 20 2a 3a 2a 3a 2a 20 ing match *:*:*
1790: 24 70 61 74 74 65 72 6e 5d 7d 20 7b 0a 09 20 20 $pattern]} {..
17a0: 20 20 23 20 42 61 64 20 73 79 6e 74 61 78 20 66 # Bad syntax f
17b0: 6f 72 20 74 68 65 20 70 61 74 74 65 72 6e 2c 20 or the pattern,
17c0: 75 73 69 6e 67 20 6d 75 6c 74 69 70 6c 65 20 63 using multiple c
17d0: 6f 6c 6f 6e 73 2e 0a 0a 09 20 20 20 20 74 72 6f olons.... tro
17e0: 75 62 6c 65 20 66 61 74 61 6c 20 22 42 61 64 20 uble fatal "Bad
17f0: 24 6c 61 62 65 6c 20 70 61 74 74 65 72 6e 20 27 $label pattern '
1800: 24 70 61 74 74 65 72 6e 27 22 0a 09 7d 20 65 6c $pattern'"..} el
1810: 73 65 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d seif {![string m
1820: 61 74 63 68 20 2a 3a 2a 20 24 70 61 74 74 65 72 atch *:* $patter
1830: 6e 5d 7d 20 7b 0a 09 20 20 20 20 23 20 57 68 65 n]} {.. # Whe
1840: 6e 20 6f 6e 6c 79 20 61 20 73 79 6d 62 6f 6c 20 n only a symbol
1850: 70 61 74 74 65 72 6e 20 69 73 20 73 70 65 63 69 pattern is speci
1860: 66 69 65 64 20 69 74 20 61 70 70 6c 69 65 73 20 fied it applies
1870: 74 6f 0a 09 20 20 20 20 23 20 61 6c 6c 20 70 72 to.. # all pr
1880: 6f 6a 65 63 74 73 2e 0a 0a 09 20 20 20 20 72 65 ojects.... re
1890: 74 75 72 6e 20 5b 6c 69 73 74 20 2a 20 24 70 61 turn [list * $pa
18a0: 74 74 65 72 6e 5d 0a 09 7d 20 65 6c 73 65 20 7b ttern]..} else {
18b0: 0a 09 20 20 20 20 23 20 42 6f 74 68 20 70 72 6f .. # Both pro
18c0: 6a 65 63 74 20 61 6e 64 20 73 79 6d 62 6f 6c 20 ject and symbol
18d0: 70 61 74 74 65 72 6e 73 20 61 72 65 20 70 72 65 patterns are pre
18e0: 73 65 6e 74 2c 20 77 65 20 73 70 6c 69 74 0a 09 sent, we split..
18f0: 20 20 20 20 23 20 74 68 65 6d 20 61 70 61 72 74 # them apart
1900: 20 6e 6f 77 20 66 6f 72 20 73 74 6f 72 61 67 65 now for storage
1910: 20 61 6e 64 20 65 61 73 69 65 72 20 65 78 74 72 and easier extr
1920: 61 63 74 69 6f 6e 20 6c 61 74 65 72 2e 0a 0a 09 action later....
1930: 20 20 20 20 72 65 74 75 72 6e 20 5b 73 70 6c 69 return [spli
1940: 74 20 24 70 61 74 74 65 72 6e 20 3a 5d 0a 09 7d t $pattern :]..}
1950: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 . }.. type
1960: 76 61 72 69 61 62 6c 65 20 6d 79 65 78 63 6c 75 variable myexclu
1970: 64 65 70 61 74 74 65 72 6e 20 7b 7d 20 3b 20 23 depattern {} ; #
1980: 20 4c 69 73 74 20 6f 66 20 70 61 74 74 65 72 6e List of pattern
1990: 73 20 73 70 65 63 69 66 79 69 6e 67 0a 09 09 09 s specifying....
19a0: 09 20 20 20 20 20 20 20 23 20 74 68 65 20 73 79 . # the sy
19b0: 6d 62 6f 6c 73 20 74 6f 20 65 78 63 6c 75 64 65 mbols to exclude
19c0: 20 66 72 6f 6d 0a 09 09 09 09 20 20 20 20 20 20 from.....
19d0: 20 23 20 63 6f 6e 76 65 72 73 69 6f 6e 2e 20 54 # conversion. T
19e0: 61 67 73 20 61 6e 64 2f 6f 72 0a 09 09 09 09 20 ags and/or.....
19f0: 20 20 20 20 20 20 23 20 62 72 61 6e 63 68 65 73 # branches
1a00: 2e 0a 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 ... typevaria
1a10: 62 6c 65 20 6d 79 66 6f 72 63 65 70 61 74 74 65 ble myforcepatte
1a20: 72 6e 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f rn {} ; # List o
1a30: 66 20 70 61 74 74 65 72 6e 73 20 61 6e 64 20 74 f patterns and t
1a40: 79 70 65 73 0a 09 09 09 09 20 20 20 20 20 23 20 ypes..... #
1a50: 73 70 65 63 69 66 79 69 6e 67 20 77 68 69 63 68 specifying which
1a60: 20 73 79 6d 62 6f 6c 73 20 74 6f 0a 09 09 09 09 symbols to.....
1a70: 20 20 20 20 20 23 20 66 6f 72 63 65 20 74 6f 20 # force to
1a80: 73 70 65 63 69 66 69 63 20 74 79 70 65 73 2e 0a specific types..
1a90: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
1aa0: 67 65 74 73 79 6d 74 79 70 65 73 20 7b 7d 20 7b getsymtypes {} {
1ab0: 0a 09 66 6f 72 65 61 63 68 20 7b 74 69 64 20 6e ..foreach {tid n
1ac0: 61 6d 65 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 ame} [state run
1ad0: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 74 69 {.. SELECT ti
1ae0: 64 2c 20 6e 61 6d 65 20 46 52 4f 4d 20 73 79 6d d, name FROM sym
1af0: 74 79 70 65 3b 0a 09 7d 5d 20 7b 20 73 65 74 20 type;..}] { set
1b00: 6d 79 73 79 6d 74 79 70 65 28 24 74 69 64 29 20 mysymtype($tid)
1b10: 24 6e 61 6d 65 20 7d 0a 09 72 65 74 75 72 6e 0a $name }..return.
1b20: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 4b 65 65 }.. # Kee
1b30: 70 20 74 68 65 20 63 6f 64 65 73 20 62 65 6c 6f p the codes belo
1b40: 77 20 69 6e 20 73 79 6e 63 20 77 69 74 68 20 27 w in sync with '
1b50: 70 61 73 73 3a 3a 63 6f 6c 6c 72 65 76 2f 73 65 pass::collrev/se
1b60: 74 75 70 28 27 73 79 6d 74 79 70 65 27 29 2e 0a tup('symtype')..
1b70: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 typevariable
1b80: 20 6d 79 65 78 63 6c 75 64 65 64 20 20 20 20 20 myexcluded
1b90: 20 20 20 30 20 3b 20 23 20 43 6f 64 65 20 66 6f 0 ; # Code fo
1ba0: 72 20 73 79 6d 62 6f 6c 73 20 77 68 69 63 68 20 r symbols which
1bb0: 61 72 65 20 65 78 63 6c 75 64 65 64 2e 0a 20 20 are excluded..
1bc0: 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d typevariable m
1bd0: 79 74 61 67 20 20 20 20 20 20 20 20 20 20 20 20 ytag
1be0: 20 31 20 3b 20 23 20 43 6f 64 65 20 66 6f 72 20 1 ; # Code for
1bf0: 73 79 6d 62 6f 6c 73 20 77 68 69 63 68 20 61 72 symbols which ar
1c00: 65 20 74 61 67 73 2e 0a 20 20 20 20 74 79 70 65 e tags.. type
1c10: 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 6e 63 variable mybranc
1c20: 68 20 20 20 20 20 20 20 20 20 20 32 20 3b 20 23 h 2 ; #
1c30: 20 43 6f 64 65 20 66 6f 72 20 73 79 6d 62 6f 6c Code for symbol
1c40: 73 20 77 68 69 63 68 20 61 72 65 20 62 72 61 6e s which are bran
1c50: 63 68 65 73 2e 0a 20 20 20 20 74 79 70 65 76 61 ches.. typeva
1c60: 72 69 61 62 6c 65 20 6d 79 75 6e 64 65 66 20 20 riable myundef
1c70: 20 20 20 20 20 20 20 20 20 33 20 3b 20 23 20 43 3 ; # C
1c80: 6f 64 65 20 66 6f 72 20 73 79 6d 62 6f 6c 73 20 ode for symbols
1c90: 6f 66 20 75 6e 6b 6e 6f 77 6e 20 74 79 70 65 2e of unknown type.
1ca0: 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c . typevariabl
1cb0: 65 20 6d 79 73 79 6d 74 79 70 65 20 2d 61 72 72 e mysymtype -arr
1cc0: 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 66 72 ay {} ; # Map fr
1cd0: 6f 6d 20 74 79 70 65 20 63 6f 64 65 20 74 6f 20 om type code to
1ce0: 6c 61 62 65 6c 20 66 6f 72 20 74 68 65 20 6c 6f label for the lo
1cf0: 67 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 g... typemeth
1d00: 6f 64 20 75 6e 64 65 66 20 20 20 20 7b 7d 20 7b od undef {} {
1d10: 20 72 65 74 75 72 6e 20 24 6d 79 75 6e 64 65 66 return $myundef
1d20: 20 20 20 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 }. typeme
1d30: 74 68 6f 64 20 65 78 63 6c 75 64 65 64 20 7b 7d thod excluded {}
1d40: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 65 78 63 { return $myexc
1d50: 6c 75 64 65 64 20 7d 0a 20 20 20 20 74 79 70 65 luded }. type
1d60: 6d 65 74 68 6f 64 20 74 61 67 20 20 20 20 20 20 method tag
1d70: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 74 {} { return $myt
1d80: 61 67 20 20 20 20 20 20 7d 0a 20 20 20 20 74 79 ag }. ty
1d90: 70 65 6d 65 74 68 6f 64 20 62 72 61 6e 63 68 20 pemethod branch
1da0: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d {} { return $m
1db0: 79 62 72 61 6e 63 68 20 20 20 7d 0a 0a 20 20 20 ybranch }..
1dc0: 20 74 79 70 65 6d 65 74 68 6f 64 20 70 72 69 6e typemethod prin
1dd0: 74 72 75 6c 65 73 74 61 74 69 73 74 69 63 73 20 trulestatistics
1de0: 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 {} {..log write
1df0: 32 20 73 79 6d 62 6f 6c 20 22 52 75 6c 65 20 75 2 symbol "Rule u
1e00: 73 61 67 65 20 73 74 61 74 69 73 74 69 63 73 3a sage statistics:
1e10: 22 0a 0a 09 73 65 74 20 66 6d 74 20 25 5b 73 74 "...set fmt %[st
1e20: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 79 6e ring length $myn
1e30: 75 6d 5d 73 0a 09 73 65 74 20 61 6c 6c 20 30 0a um]s..set all 0.
1e40: 0a 09 66 6f 72 65 61 63 68 20 6b 65 79 20 5b 6c ..foreach key [l
1e50: 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 6d 65 sort [array name
1e60: 73 20 6d 79 72 75 6c 65 63 6f 75 6e 74 5d 5d 20 s myrulecount]]
1e70: 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 {.. log write
1e80: 20 32 20 73 79 6d 62 6f 6c 20 22 2a 20 5b 66 6f 2 symbol "* [fo
1e90: 72 6d 61 74 20 24 66 6d 74 20 24 6d 79 72 75 6c rmat $fmt $myrul
1ea0: 65 63 6f 75 6e 74 28 24 6b 65 79 29 5d 20 24 6b ecount($key)] $k
1eb0: 65 79 22 0a 09 20 20 20 20 69 6e 63 72 20 61 6c ey".. incr al
1ec0: 6c 20 24 6d 79 72 75 6c 65 63 6f 75 6e 74 28 24 l $myrulecount($
1ed0: 6b 65 79 29 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 key)..}...log wr
1ee0: 69 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 3d 20 ite 2 symbol "=
1ef0: 5b 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 61 6c [format $fmt $al
1f00: 6c 5d 20 74 6f 74 61 6c 22 0a 09 72 65 74 75 72 l] total"..retur
1f10: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 53 n. }.. # S
1f20: 74 61 74 69 73 74 69 63 73 20 6f 6e 20 68 6f 77 tatistics on how
1f30: 20 6f 66 74 65 6e 20 65 61 63 68 20 27 72 75 6c often each 'rul
1f40: 65 27 20 77 61 73 20 75 73 65 64 20 74 6f 20 64 e' was used to d
1f50: 65 63 69 64 65 20 6f 6e 20 74 68 65 0a 20 20 20 ecide on the.
1f60: 20 23 20 74 79 70 65 20 6f 66 20 61 20 73 79 6d # type of a sym
1f70: 62 6f 6c 2e 0a 20 20 20 20 74 79 70 65 76 61 72 bol.. typevar
1f80: 69 61 62 6c 65 20 6d 79 72 75 6c 65 63 6f 75 6e iable myrulecoun
1f90: 74 20 2d 61 72 72 61 79 20 7b 0a 09 48 61 73 43 t -array {..HasC
1fa0: 6f 6d 6d 69 74 73 20 30 0a 09 49 73 54 68 65 54 ommits 0..IsTheT
1fb0: 72 75 6e 6b 20 30 0a 09 55 6e 61 6d 62 69 67 6f runk 0..Unambigo
1fc0: 75 73 20 30 0a 09 55 6e 64 65 63 69 64 65 64 5f us 0..Undecided_
1fd0: 20 30 0a 09 55 73 65 72 43 6f 6e 66 69 67 20 30 0..UserConfig 0
1fe0: 0a 09 56 6f 74 65 43 6f 75 6e 74 73 20 30 0a 20 ..VoteCounts 0.
1ff0: 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 }.. typeme
2000: 74 68 6f 64 20 70 72 69 6e 74 74 79 70 65 73 74 thod printtypest
2010: 61 74 69 73 74 69 63 73 20 7b 7d 20 7b 0a 09 6c atistics {} {..l
2020: 6f 67 20 77 72 69 74 65 20 32 20 73 79 6d 62 6f og write 2 symbo
2030: 6c 20 22 53 79 6d 62 6f 6c 20 74 79 70 65 20 73 l "Symbol type s
2040: 74 61 74 69 73 74 69 63 73 3a 22 0a 0a 09 73 65 tatistics:"...se
2050: 74 20 66 6d 74 20 25 5b 73 74 72 69 6e 67 20 6c t fmt %[string l
2060: 65 6e 67 74 68 20 24 6d 79 6e 75 6d 5d 73 0a 09 ength $mynum]s..
2070: 73 65 74 20 61 6c 6c 20 30 0a 0a 09 66 6f 72 65 set all 0...fore
2080: 61 63 68 20 7b 73 74 79 70 65 20 73 70 6c 75 72 ach {stype splur
2090: 61 6c 20 6e 7d 20 5b 73 74 61 74 65 20 72 75 6e al n} [state run
20a0: 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 54 {.. SELECT T
20b0: 2e 6e 61 6d 65 2c 20 54 2e 70 6c 75 72 61 6c 2c .name, T.plural,
20c0: 20 43 4f 55 4e 54 20 28 73 2e 73 69 64 29 0a 09 COUNT (s.sid)..
20d0: 20 20 20 20 46 52 4f 4d 20 73 79 6d 62 6f 6c 20 FROM symbol
20e0: 53 2c 20 73 79 6d 74 79 70 65 20 54 0a 09 20 20 S, symtype T..
20f0: 20 20 57 48 45 52 45 20 53 2e 74 79 70 65 20 3d WHERE S.type =
2100: 20 54 2e 74 69 64 0a 09 20 20 20 20 47 52 4f 55 T.tid.. GROU
2110: 50 20 42 59 20 54 2e 6e 61 6d 65 0a 09 20 20 20 P BY T.name..
2120: 20 4f 52 44 45 52 20 42 59 20 54 2e 6e 61 6d 65 ORDER BY T.name
2130: 0a 09 20 20 20 20 3b 0a 09 7d 5d 20 7b 0a 09 20 .. ;..}] {..
2140: 20 20 20 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 2a 20 5b 66 6f 72 6d 61 74 ymbol "* [format
2160: 20 24 66 6d 74 20 24 6e 5d 20 5b 73 70 20 24 6e $fmt $n] [sp $n
2170: 20 24 73 74 79 70 65 20 24 73 70 6c 75 72 61 6c $stype $splural
2180: 5d 22 0a 09 20 20 20 20 69 6e 63 72 20 61 6c 6c ]".. incr all
2190: 20 24 6e 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 $n..}...log wri
21a0: 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 3d 20 5b te 2 symbol "= [
21b0: 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 61 6c 6c format $fmt $all
21c0: 5d 20 74 6f 74 61 6c 22 0a 09 72 65 74 75 72 6e ] total"..return
21d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 . }.. type
21e0: 76 61 72 69 61 62 6c 65 20 6d 79 6e 75 6d 20 30 variable mynum 0
21f0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 .. # # ## ###
2200: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
2210: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 #############.
2220: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 ## Internal me
2230: 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65 74 68 6f thods.. metho
2240: 64 20 55 73 65 72 43 6f 6e 66 69 67 20 7b 7d 20 d UserConfig {}
2250: 7b 0a 09 73 65 74 20 70 72 6f 6a 65 63 74 20 5b {..set project [
2260: 24 6d 79 70 72 6f 6a 65 63 74 20 62 61 73 65 5d $myproject base]
2270: 0a 0a 09 23 20 46 69 72 73 74 20 63 68 65 63 6b ...# First check
2280: 20 69 66 20 74 68 65 20 75 73 65 72 20 72 65 71 if the user req
2290: 75 65 73 74 65 64 20 74 68 65 20 65 78 63 6c 75 uested the exclu
22a0: 73 69 6f 6e 20 6f 66 20 74 68 65 0a 09 23 20 73 sion of the..# s
22b0: 79 6d 62 6f 6c 20 66 72 6f 6d 20 63 6f 6e 76 65 ymbol from conve
22c0: 72 73 69 6f 6e 2e 0a 0a 09 66 6f 72 65 61 63 68 rsion....foreach
22d0: 20 65 78 20 24 6d 79 65 78 63 6c 75 64 65 70 61 ex $myexcludepa
22e0: 74 74 65 72 6e 20 7b 0a 09 20 20 20 20 73 74 72 ttern {.. str
22f0: 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e uct::list assign
2300: 20 24 65 78 20 70 70 20 73 70 0a 09 20 20 20 20 $ex pp sp..
2310: 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74 if {![string mat
2320: 63 68 20 24 70 70 20 24 70 72 6f 6a 65 63 74 5d ch $pp $project]
2330: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 } continue..
2340: 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74 if {![string mat
2350: 63 68 20 24 73 70 20 24 6d 79 6e 61 6d 65 5d 7d ch $sp $myname]}
2360: 20 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 continue..
2370: 72 65 74 75 72 6e 20 24 6d 79 65 78 63 6c 75 64 return $myexclud
2380: 65 64 0a 09 7d 0a 0a 09 23 20 49 66 20 74 68 65 ed..}...# If the
2390: 20 73 79 6d 62 6f 6c 20 69 73 20 6e 6f 74 20 65 symbol is not e
23a0: 78 63 6c 75 64 65 64 20 66 75 72 74 68 65 72 20 xcluded further
23b0: 63 68 65 63 6b 20 69 66 20 74 68 65 20 75 73 65 check if the use
23c0: 72 0a 09 23 20 66 6f 72 63 65 73 20 69 74 73 20 r..# forces its
23d0: 63 6f 6e 76 65 72 73 69 6f 6e 20 61 73 20 61 20 conversion as a
23e0: 73 70 65 63 69 66 69 63 20 74 79 70 65 2e 0a 0a specific type...
23f0: 09 66 6f 72 65 61 63 68 20 7b 65 78 20 73 74 79 .foreach {ex sty
2400: 70 65 7d 20 24 6d 79 66 6f 72 63 65 70 61 74 74 pe} $myforcepatt
2410: 65 72 6e 20 7b 0a 09 20 20 20 20 73 74 72 75 63 ern {.. struc
2420: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 t::list assign $
2430: 65 78 20 70 70 20 73 70 0a 09 20 20 20 20 69 66 ex pp sp.. if
2440: 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 {![string match
2450: 20 24 70 70 20 24 70 72 6f 6a 65 63 74 5d 7d 20 $pp $project]}
2460: 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 69 66 continue.. if
2470: 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 {![string match
2480: 20 24 73 70 20 24 6d 79 6e 61 6d 65 5d 7d 20 20 $sp $myname]}
2490: 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 72 65 continue.. re
24a0: 74 75 72 6e 20 24 73 74 79 70 65 0a 09 7d 0a 0a turn $stype..}..
24b0: 09 23 20 4e 6f 74 68 69 6e 67 20 69 73 20 66 6f .# Nothing is fo
24c0: 72 63 65 64 2c 20 68 61 76 65 20 74 68 65 20 6d rced, have the m
24d0: 61 69 6e 20 73 79 73 74 65 6d 20 68 61 6e 64 20 ain system hand
24e0: 74 68 65 20 73 79 6d 62 6f 6c 20 6f 76 65 72 0a the symbol over.
24f0: 09 23 20 74 6f 20 74 68 65 20 72 65 67 75 6c 61 .# to the regula
2500: 72 20 68 65 75 72 69 73 74 69 63 73 2e 0a 0a 09 r heuristics....
2510: 72 65 74 75 72 6e 20 24 6d 79 75 6e 64 65 66 0a return $myundef.
2520: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
2530: 64 20 55 6e 61 6d 62 69 67 6f 75 73 20 7b 7d 20 d Unambigous {}
2540: 7b 0a 09 23 20 49 66 20 61 20 73 79 6d 62 6f 6c {..# If a symbol
2550: 20 69 73 20 75 73 65 64 20 75 6e 61 6d 62 69 67 is used unambig
2560: 75 6f 75 73 6c 79 20 61 73 20 61 20 74 61 67 2f uously as a tag/
2570: 62 72 61 6e 63 68 2c 20 63 6f 6e 76 65 72 74 0a branch, convert.
2580: 09 23 20 69 74 20 61 73 20 73 75 63 68 2e 0a 0a .# it as such...
2590: 09 73 65 74 20 69 73 74 61 67 20 20 20 20 5b 65 .set istag [e
25a0: 78 70 72 20 7b 24 6d 79 74 61 67 63 6f 75 6e 74 xpr {$mytagcount
25b0: 20 20 20 20 3e 20 30 7d 5d 09 0a 09 73 65 74 20 > 0}]...set
25c0: 69 73 62 72 61 6e 63 68 20 5b 65 78 70 72 20 7b isbranch [expr {
25d0: 24 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 20 3e $mybranchcount >
25e0: 20 30 20 7c 7c 20 24 6d 79 63 6f 6d 6d 69 74 63 0 || $mycommitc
25f0: 6f 75 6e 74 20 3e 20 30 7d 5d 0a 0a 09 69 66 20 ount > 0}]...if
2600: 7b 24 69 73 74 61 67 20 26 26 20 24 69 73 62 72 {$istag && $isbr
2610: 61 6e 63 68 7d 20 7b 20 72 65 74 75 72 6e 20 24 anch} { return $
2620: 6d 79 75 6e 64 65 66 20 20 7d 0a 09 69 66 20 7b myundef }..if {
2630: 24 69 73 74 61 67 7d 20 20 20 20 20 20 20 20 20 $istag}
2640: 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 24 6d { return $m
2650: 79 74 61 67 20 20 20 20 7d 0a 09 69 66 20 7b 24 ytag }..if {$
2660: 69 73 62 72 61 6e 63 68 7d 20 20 20 20 20 20 20 isbranch}
2670: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 { return $my
2680: 62 72 61 6e 63 68 20 7d 0a 0a 09 23 20 53 79 6d branch }...# Sym
2690: 62 6f 6c 20 77 61 73 20 6e 6f 74 20 75 73 65 64 bol was not used
26a0: 20 61 74 20 61 6c 6c 2e 0a 09 72 65 74 75 72 6e at all...return
26b0: 20 24 6d 79 75 6e 64 65 66 0a 20 20 20 20 7d 0a $myundef. }.
26c0: 0a 20 20 20 20 6d 65 74 68 6f 64 20 48 61 73 43 . method HasC
26d0: 6f 6d 6d 69 74 73 20 7b 7d 20 7b 0a 09 23 20 49 ommits {} {..# I
26e0: 66 20 74 68 65 72 65 20 77 61 73 20 65 76 65 72 f there was ever
26f0: 20 61 20 63 6f 6d 6d 69 74 20 6f 6e 20 74 68 65 a commit on the
2700: 20 73 79 6d 62 6f 6c 2c 20 63 6f 6e 76 65 72 74 symbol, convert
2710: 20 69 74 20 61 73 20 61 0a 09 23 20 62 72 61 6e it as a..# bran
2720: 63 68 2e 0a 0a 09 69 66 20 7b 24 6d 79 63 6f 6d ch....if {$mycom
2730: 6d 69 74 63 6f 75 6e 74 20 3e 20 30 7d 20 7b 20 mitcount > 0} {
2740: 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 return $mybranch
2750: 20 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 75 6e }..return $myun
2760: 64 65 66 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d def. }.. m
2770: 65 74 68 6f 64 20 56 6f 74 65 43 6f 75 6e 74 73 ethod VoteCounts
2780: 20 7b 7d 20 7b 0a 09 23 20 43 6f 6e 76 65 72 74 {} {..# Convert
2790: 20 74 68 65 20 73 79 6d 62 6f 6c 20 62 61 73 65 the symbol base
27a0: 64 20 6f 6e 20 68 6f 77 20 6f 66 74 65 6e 20 69 d on how often i
27b0: 74 20 77 61 73 20 75 73 65 64 20 61 73 20 61 0a t was used as a.
27c0: 09 23 20 62 72 61 6e 63 68 2f 74 61 67 2e 20 57 .# branch/tag. W
27d0: 68 69 63 68 65 76 65 72 20 68 61 70 70 65 6e 65 hichever happene
27e0: 64 20 6d 6f 72 65 20 6f 66 74 65 6e 20 64 65 74 d more often det
27f0: 65 72 6d 69 6e 65 73 20 68 6f 77 20 74 68 65 0a ermines how the.
2800: 09 23 20 73 79 6d 62 6f 6c 20 69 73 20 63 6f 6e .# symbol is con
2810: 76 65 72 74 65 64 2e 0a 0a 09 69 66 20 7b 24 6d verted....if {$m
2820: 79 74 61 67 63 6f 75 6e 74 20 3e 20 24 6d 79 62 ytagcount > $myb
2830: 72 61 6e 63 68 63 6f 75 6e 74 7d 20 7b 20 72 65 ranchcount} { re
2840: 74 75 72 6e 20 24 6d 79 74 61 67 20 7d 0a 09 69 turn $mytag }..i
2850: 66 20 7b 24 6d 79 74 61 67 63 6f 75 6e 74 20 3c f {$mytagcount <
2860: 20 24 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 7d $mybranchcount}
2870: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 72 61 { return $mybra
2880: 6e 63 68 20 7d 0a 09 72 65 74 75 72 6e 20 24 6d nch }..return $m
2890: 79 75 6e 64 65 66 0a 20 20 20 20 7d 0a 0a 20 20 yundef. }..
28a0: 20 20 6d 65 74 68 6f 64 20 4d 61 72 6b 41 73 20 method MarkAs
28b0: 7b 6c 61 62 65 6c 20 63 68 6f 73 65 6e 7d 20 7b {label chosen} {
28c0: 0a 09 6c 6f 67 20 77 72 69 74 65 20 33 20 73 79 ..log write 3 sy
28d0: 6d 62 6f 6c 20 22 5c 5b 24 6c 61 62 65 6c 5c 5d mbol "\[$label\]
28e0: 20 43 6f 6e 76 65 72 74 69 6e 67 20 73 79 6d 62 Converting symb
28f0: 6f 6c 20 27 24 6d 79 6e 61 6d 65 27 20 61 73 20 ol '$myname' as
2900: 24 6d 79 73 79 6d 74 79 70 65 28 24 63 68 6f 73 $mysymtype($chos
2910: 65 6e 29 22 0a 0a 09 73 65 74 20 6d 79 74 79 70 en)"...set mytyp
2920: 65 20 24 63 68 6f 73 65 6e 0a 09 69 6e 63 72 20 e $chosen..incr
2930: 6d 79 72 75 6c 65 63 6f 75 6e 74 28 24 6c 61 62 myrulecount($lab
2940: 65 6c 29 0a 0a 09 23 20 54 68 69 73 20 69 73 20 el)...# This is
2950: 73 74 6f 72 65 64 20 64 69 72 65 63 74 6c 79 20 stored directly
2960: 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 into the databas
2970: 65 2e 0a 09 73 74 61 74 65 20 72 75 6e 20 7b 0a e...state run {.
2980: 09 20 20 20 20 55 50 44 41 54 45 20 73 79 6d 62 . UPDATE symb
2990: 6f 6c 0a 09 20 20 20 20 53 45 54 20 74 79 70 65 ol.. SET type
29a0: 20 3d 20 24 63 68 6f 73 65 6e 0a 09 20 20 20 20 = $chosen..
29b0: 57 48 45 52 45 20 73 69 64 20 3d 20 24 6d 79 69 WHERE sid = $myi
29c0: 64 0a 09 20 20 20 20 3b 0a 09 7d 0a 09 72 65 74 d.. ;..}..ret
29d0: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 urn. }.. #
29e0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 # ## ### #####
29f0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
2a00: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f ######. ## Co
2a10: 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 nfiguration..
2a20: 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 pragma -hastype
2a30: 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 23 20 info no ; #
2a40: 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 70 65 no type introspe
2a50: 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 ction. pragma
2a60: 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 20 20 -hasinfo
2a70: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 6a 65 no ; # no obje
2a80: 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e ct introspection
2a90: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 73 69 6d . pragma -sim
2aa0: 70 6c 65 64 69 73 70 61 74 63 68 20 79 65 73 20 pledispatch yes
2ab0: 3b 20 23 20 73 69 6d 70 6c 65 20 66 61 73 74 20 ; # simple fast
2ac0: 64 69 73 70 61 74 63 68 0a 0a 20 20 20 20 23 20 dispatch.. #
2ad0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
2ae0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
2af0: 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 #####.}..namespa
2b00: 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f ce eval ::vc::fo
2b10: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 ssil::import::cv
2b20: 73 3a 3a 70 72 6f 6a 65 63 74 20 7b 0a 20 20 20 s::project {.
2b30: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 namespace expor
2b40: 74 20 73 79 6d 0a 20 20 20 20 6e 61 6d 65 73 70 t sym. namesp
2b50: 61 63 65 20 65 76 61 6c 20 73 79 6d 20 7b 0a 09 ace eval sym {..
2b60: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 namespace import
2b70: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
2b80: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 mport::cvs::stat
2b90: 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 e..namespace imp
2ba0: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ort ::vc::tools:
2bb0: 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 :misc::*..namesp
2bc0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
2bd0: 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a :tools::trouble.
2be0: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 .namespace impor
2bf0: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c t ::vc::tools::l
2c00: 6f 67 0a 09 6c 6f 67 20 72 65 67 69 73 74 65 72 og..log register
2c10: 20 73 79 6d 62 6f 6c 0a 20 20 20 20 7d 0a 7d 0a symbol. }.}.
2c20: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 .# # ## ### ####
2c30: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
2c40: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 ######## #######
2c50: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 ##############.#
2c60: 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 # Ready..package
2c70: 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 provide vc::fos
2c80: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
2c90: 3a 3a 70 72 6f 6a 65 63 74 3a 3a 73 79 6d 20 31 ::project::sym 1
2ca0: 2e 30 0a 72 65 74 75 72 6e 0a .0.return.