Artifact bed2d949173aa58dd86bbed6d9e9089b33ad207b:
File
tools/cvs2fossil/lib/c2f_psym.tcl
part of check-in
[930ec162ce]
- Fixed the calculation of possible parents for a detached NTDB. Has to be trunk. The symbols were skipped before, causing them to have no parents at all later on, forcing an abort after CollateSymbols. Added some high verbosity log commands for debugging of this area.
by
aku on
2007-11-22 06:03:47.
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 6c 6f 67 20 77 72 69 74 65 20 l} {..log write
0d10: 39 20 73 79 6d 62 6f 6c 20 22 50 6f 73 73 69 62 9 symbol "Possib
0d20: 6c 65 20 70 61 72 65 6e 74 20 28 24 6d 79 6e 61 le parent ($myna
0d30: 6d 65 29 20 3d 20 5b 24 73 79 6d 62 6f 6c 20 6e me) = [$symbol n
0d40: 61 6d 65 5d 22 0a 0a 09 69 66 20 7b 5b 69 6e 66 ame]"...if {[inf
0d50: 6f 20 65 78 69 73 74 73 20 6d 79 70 70 61 72 65 o exists myppare
0d60: 6e 74 28 24 73 79 6d 62 6f 6c 29 5d 7d 20 7b 0a nt($symbol)]} {.
0d70: 09 20 20 20 20 69 6e 63 72 20 6d 79 70 70 61 72 . incr myppar
0d80: 65 6e 74 28 24 73 79 6d 62 6f 6c 29 0a 09 7d 20 ent($symbol)..}
0d90: 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 74 20 else {.. set
0da0: 20 6d 79 70 70 61 72 65 6e 74 28 24 73 79 6d 62 mypparent($symb
0db0: 6f 6c 29 20 31 0a 09 7d 0a 09 72 65 74 75 72 6e ol) 1..}..return
0dc0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 . }.. meth
0dd0: 6f 64 20 69 73 67 68 6f 73 74 20 7b 7d 20 7b 0a od isghost {} {.
0de0: 09 23 20 43 68 65 63 6b 73 20 69 66 20 74 68 69 .# Checks if thi
0df0: 73 20 73 79 6d 62 6f 6c 20 28 61 73 20 6c 69 6e s symbol (as lin
0e00: 65 20 6f 66 20 64 65 76 65 6c 6f 70 6d 65 6e 74 e of development
0e10: 29 20 6e 65 76 65 72 0a 09 23 20 65 78 69 73 74 ) never..# exist
0e20: 65 64 2e 0a 0a 09 69 66 20 7b 24 6d 79 63 6f 6d ed....if {$mycom
0e30: 6d 69 74 63 6f 75 6e 74 20 3e 20 30 7d 20 20 20 mitcount > 0}
0e40: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 30 { return 0
0e50: 20 7d 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 }..if {[llength
0e60: 20 24 6d 79 62 6c 6f 63 6b 65 72 73 5d 7d 20 20 $myblockers]}
0e70: 20 20 20 20 7b 20 72 65 74 75 72 6e 20 30 20 7d { return 0 }
0e80: 0a 09 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a ..if {[array siz
0e90: 65 20 6d 79 70 70 61 72 65 6e 74 5d 20 3e 20 30 e mypparent] > 0
0ea0: 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 7d 0a 0a } { return 0 }..
0eb0: 09 72 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a .return 1. }.
0ec0: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
0ed0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
0ee0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20 ############..
0ef0: 20 20 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74 method persist
0f00: 72 65 76 20 7b 7d 20 7b 0a 09 73 65 74 20 70 69 rev {} {..set pi
0f10: 64 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 69 64 d [$myproject id
0f20: 5d 0a 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 ]...state transa
0f30: 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 73 74 61 ction {.. sta
0f40: 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 52 te run {...INSER
0f50: 54 20 49 4e 54 4f 20 73 79 6d 62 6f 6c 20 28 20 T INTO symbol (
0f60: 73 69 64 2c 20 20 20 70 69 64 2c 20 20 6e 61 6d sid, pid, nam
0f70: 65 2c 20 20 20 74 79 70 65 2c 20 20 20 20 20 74 e, type, t
0f80: 61 67 5f 63 6f 75 6e 74 2c 20 20 20 62 72 61 6e ag_count, bran
0f90: 63 68 5f 63 6f 75 6e 74 2c 20 20 20 63 6f 6d 6d ch_count, comm
0fa0: 69 74 5f 63 6f 75 6e 74 29 0a 09 09 56 41 4c 55 it_count)...VALU
0fb0: 45 53 20 20 20 20 20 20 20 20 20 20 20 20 20 28 ES (
0fc0: 24 6d 79 69 64 2c 20 24 70 69 64 2c 20 24 6d 79 $myid, $pid, $my
0fd0: 6e 61 6d 65 2c 20 24 6d 79 75 6e 64 65 66 2c 20 name, $myundef,
0fe0: 24 6d 79 74 61 67 63 6f 75 6e 74 2c 20 24 6d 79 $mytagcount, $my
0ff0: 62 72 61 6e 63 68 63 6f 75 6e 74 2c 20 24 6d 79 branchcount, $my
1000: 63 6f 6d 6d 69 74 63 6f 75 6e 74 29 3b 0a 09 20 commitcount);..
1010: 20 20 20 7d 0a 09 20 20 20 20 66 6f 72 65 61 63 }.. foreac
1020: 68 20 73 79 6d 62 6f 6c 20 24 6d 79 62 6c 6f 63 h symbol $mybloc
1030: 6b 65 72 73 20 7b 0a 09 09 73 65 74 20 62 69 64 kers {...set bid
1040: 20 5b 24 73 79 6d 62 6f 6c 20 69 64 5d 0a 09 09 [$symbol id]...
1050: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 20 20 state run {...
1060: 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 62 6c INSERT INTO bl
1070: 6f 63 6b 65 72 20 28 73 69 64 2c 20 20 20 62 69 ocker (sid, bi
1080: 64 29 0a 09 09 20 20 20 20 56 41 4c 55 45 53 20 d)... VALUES
1090: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 24 6d ($m
10a0: 79 69 64 2c 20 24 62 69 64 29 3b 0a 09 09 7d 0a yid, $bid);...}.
10b0: 09 20 20 20 20 7d 0a 09 20 20 20 20 66 6f 72 65 . }.. fore
10c0: 61 63 68 20 7b 73 79 6d 62 6f 6c 20 63 6f 75 6e ach {symbol coun
10d0: 74 7d 20 5b 61 72 72 61 79 20 67 65 74 20 6d 79 t} [array get my
10e0: 70 70 61 72 65 6e 74 5d 20 7b 0a 09 09 73 65 74 pparent] {...set
10f0: 20 70 69 64 20 5b 24 73 79 6d 62 6f 6c 20 69 64 pid [$symbol id
1100: 5d 0a 09 09 73 74 61 74 65 20 72 75 6e 20 7b 0a ]...state run {.
1110: 09 09 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 .. INSERT INT
1120: 4f 20 70 61 72 65 6e 74 20 28 73 69 64 2c 20 20 O parent (sid,
1130: 20 70 69 64 2c 20 20 6e 29 0a 09 09 20 20 20 20 pid, n)...
1140: 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 VALUES
1150: 20 20 20 28 24 6d 79 69 64 2c 20 24 70 69 64 2c ($myid, $pid,
1160: 20 24 63 6f 75 6e 74 29 3b 0a 09 09 7d 0a 09 20 $count);...}..
1170: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a }..}..return.
1180: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 }.. # # #
1190: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 # ### ##### ####
11a0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 #### ###########
11b0: 23 23 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a ##. ## State.
11c0: 0a 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 . variable my
11d0: 70 72 6f 6a 65 63 74 20 7b 7d 20 3b 20 23 20 52 project {} ; # R
11e0: 65 66 65 72 65 6e 63 65 20 74 6f 20 74 68 65 20 eference to the
11f0: 70 72 6f 6a 65 63 74 20 6f 62 6a 65 63 74 0a 09 project object..
1200: 09 09 20 20 20 20 23 20 63 6f 6e 74 61 69 6e 69 .. # containi
1210: 6e 67 20 74 68 65 20 73 79 6d 62 6f 6c 2e 0a 20 ng the symbol..
1220: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 6e 61 variable myna
1230: 6d 65 20 20 20 20 7b 7d 20 3b 20 23 20 54 68 65 me {} ; # The
1240: 20 73 79 6d 62 6f 6c 27 73 20 6e 61 6d 65 0a 20 symbol's name.
1250: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 69 64 variable myid
1260: 20 20 20 20 20 20 7b 7d 20 3b 20 23 20 52 65 70 {} ; # Rep
1270: 6f 73 69 74 6f 72 79 20 77 69 64 65 20 6e 75 6d ository wide num
1280: 65 72 69 63 20 69 64 20 6f 66 20 74 68 65 0a 09 eric id of the..
1290: 09 09 20 20 20 20 23 20 73 79 6d 62 6f 6c 2e 20 .. # symbol.
12a0: 54 68 69 73 20 69 6d 70 6c 69 63 69 74 6c 79 20 This implicitly
12b0: 65 6e 63 6f 64 65 73 20 74 68 65 0a 09 09 09 20 encodes the....
12c0: 20 20 20 23 20 70 72 6f 6a 65 63 74 20 61 73 20 # project as
12d0: 77 65 6c 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61 well... varia
12e0: 62 6c 65 20 6d 79 62 72 61 6e 63 68 63 6f 75 6e ble mybranchcoun
12f0: 74 20 30 20 3b 20 23 20 43 6f 75 6e 74 20 68 6f t 0 ; # Count ho
1300: 77 20 6d 61 6e 79 20 75 73 65 73 20 61 73 20 62 w many uses as b
1310: 72 61 6e 63 68 2e 0a 20 20 20 20 76 61 72 69 61 ranch.. varia
1320: 62 6c 65 20 6d 79 74 61 67 63 6f 75 6e 74 20 20 ble mytagcount
1330: 20 20 30 20 3b 20 23 20 43 6f 75 6e 74 20 68 6f 0 ; # Count ho
1340: 77 20 6d 61 6e 79 20 75 73 65 73 20 61 73 20 74 w many uses as t
1350: 61 67 2e 0a 20 20 20 20 76 61 72 69 61 62 6c 65 ag.. variable
1360: 20 6d 79 63 6f 6d 6d 69 74 63 6f 75 6e 74 20 30 mycommitcount 0
1370: 20 3b 20 23 20 43 6f 75 6e 74 20 68 6f 77 20 6d ; # Count how m
1380: 61 6e 79 20 66 69 6c 65 73 20 64 69 64 20 61 20 any files did a
1390: 63 6f 6d 6d 69 74 20 6f 6e 20 74 68 65 20 73 79 commit on the sy
13a0: 6d 62 6f 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61 mbol... varia
13b0: 62 6c 65 20 6d 79 62 6c 6f 63 6b 65 72 73 20 20 ble myblockers
13c0: 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 28 53 65 {} ; # List (Se
13d0: 74 29 20 6f 66 20 74 68 65 20 73 79 6d 62 6f 6c t) of the symbol
13e0: 73 20 77 68 69 63 68 20 62 6c 6f 63 6b 0a 09 09 s which block...
13f0: 09 20 20 20 20 20 20 20 23 20 74 68 65 20 65 78 . # the ex
1400: 63 6c 75 73 69 6f 6e 20 6f 66 20 74 68 69 73 20 clusion of this
1410: 73 79 6d 62 6f 6c 2e 0a 0a 20 20 20 20 76 61 72 symbol... var
1420: 69 61 62 6c 65 20 6d 79 70 70 61 72 65 6e 74 20 iable mypparent
1430: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 -array {} ; # Ma
1440: 70 73 20 66 72 6f 6d 20 73 79 6d 62 6f 6c 73 20 ps from symbols
1450: 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 0a 09 09 to the number...
1460: 09 09 20 20 20 23 20 6f 66 20 66 69 6c 65 73 20 .. # of files
1470: 69 6e 20 77 68 69 63 68 20 69 74 20 63 6f 75 6c in which it coul
1480: 64 20 68 61 76 65 0a 09 09 09 09 20 20 20 23 20 d have..... #
1490: 62 65 65 6e 20 61 20 70 61 72 65 6e 74 20 6f 66 been a parent of
14a0: 20 74 68 69 73 20 73 79 6d 62 6f 6c 2e 0a 0a 20 this symbol...
14b0: 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 79 variable myty
14c0: 70 65 20 7b 7d 20 3b 20 23 20 54 68 65 20 74 79 pe {} ; # The ty
14d0: 70 65 20 63 68 6f 73 65 6e 20 66 6f 72 20 74 68 pe chosen for th
14e0: 65 20 73 79 6d 62 6f 6c 20 74 6f 20 75 73 65 20 e symbol to use
14f0: 69 6e 0a 09 09 09 20 23 20 74 68 65 20 63 6f 6e in.... # the con
1500: 76 65 72 73 69 6f 6e 2e 0a 0a 20 20 20 20 23 20 version... #
1510: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 # ## ### ##### #
1520: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
1530: 23 23 23 23 23 0a 0a 20 20 20 20 74 79 70 65 6d #####.. typem
1540: 65 74 68 6f 64 20 65 78 63 6c 75 64 65 20 7b 70 ethod exclude {p
1550: 61 74 74 65 72 6e 7d 20 7b 0a 09 23 20 53 74 6f attern} {..# Sto
1560: 72 65 20 74 68 65 20 70 61 74 74 65 72 6e 20 69 re the pattern i
1570: 6e 20 6d 65 6d 6f 72 79 20 66 6f 72 20 75 73 65 n memory for use
1580: 20 62 79 20 74 68 65 20 63 6f 64 65 20 64 6f 69 by the code doi
1590: 6e 67 20 74 79 70 65 0a 09 23 20 64 65 74 65 72 ng type..# deter
15a0: 6d 69 6e 61 74 69 6f 6e 2e 0a 0a 09 6c 61 70 70 mination....lapp
15b0: 65 6e 64 20 6d 79 65 78 63 6c 75 64 65 70 61 74 end myexcludepat
15c0: 74 65 72 6e 20 5b 50 72 6f 63 65 73 73 50 61 74 tern [ProcessPat
15d0: 74 65 72 6e 20 24 70 61 74 74 65 72 6e 20 65 78 tern $pattern ex
15e0: 63 6c 75 73 69 6f 6e 5d 0a 09 72 65 74 75 72 6e clusion]..return
15f0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 . }.. type
1600: 6d 65 74 68 6f 64 20 66 6f 72 63 65 74 61 67 20 method forcetag
1610: 7b 70 61 74 74 65 72 6e 7d 20 7b 0a 09 23 20 53 {pattern} {..# S
1620: 74 6f 72 65 20 74 68 65 20 70 61 74 74 65 72 6e tore the pattern
1630: 20 69 6e 20 6d 65 6d 6f 72 79 20 66 6f 72 20 75 in memory for u
1640: 73 65 20 62 79 20 74 68 65 20 63 6f 64 65 20 64 se by the code d
1650: 6f 69 6e 67 20 74 79 70 65 0a 09 23 20 64 65 74 oing type..# det
1660: 65 72 6d 69 6e 61 74 69 6f 6e 2e 0a 0a 09 6c 61 ermination....la
1670: 70 70 65 6e 64 20 6d 79 66 6f 72 63 65 70 61 74 ppend myforcepat
1680: 74 65 72 6e 20 5b 50 72 6f 63 65 73 73 50 61 74 tern [ProcessPat
1690: 74 65 72 6e 20 24 70 61 74 74 65 72 6e 20 66 6f tern $pattern fo
16a0: 72 63 65 2d 74 61 67 5d 20 24 6d 79 74 61 67 0a rce-tag] $mytag.
16b0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
16c0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 66 6f typemethod fo
16d0: 72 63 65 62 72 61 6e 63 68 20 7b 70 61 74 74 65 rcebranch {patte
16e0: 72 6e 7d 20 7b 0a 09 23 20 53 74 6f 72 65 20 74 rn} {..# Store t
16f0: 68 65 20 70 61 74 74 65 72 6e 20 69 6e 20 6d 65 he pattern in me
1700: 6d 6f 72 79 20 66 6f 72 20 75 73 65 20 62 79 20 mory for use by
1710: 74 68 65 20 63 6f 64 65 20 64 6f 69 6e 67 20 74 the code doing t
1720: 79 70 65 0a 09 23 20 64 65 74 65 72 6d 69 6e 61 ype..# determina
1730: 74 69 6f 6e 2e 0a 0a 09 6c 61 70 70 65 6e 64 20 tion....lappend
1740: 6d 79 66 6f 72 63 65 70 61 74 74 65 72 6e 20 5b myforcepattern [
1750: 50 72 6f 63 65 73 73 50 61 74 74 65 72 6e 20 24 ProcessPattern $
1760: 70 61 74 74 65 72 6e 20 66 6f 72 63 65 2d 62 72 pattern force-br
1770: 61 6e 63 68 5d 20 24 6d 79 62 72 61 6e 63 68 0a anch] $mybranch.
1780: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
1790: 20 20 20 70 72 6f 63 20 50 72 6f 63 65 73 73 50 proc ProcessP
17a0: 61 74 74 65 72 6e 20 7b 70 61 74 74 65 72 6e 20 attern {pattern
17b0: 6c 61 62 65 6c 7d 20 7b 0a 09 69 66 20 7b 5b 73 label} {..if {[s
17c0: 74 72 69 6e 67 20 6d 61 74 63 68 20 2a 3a 2a 3a tring match *:*:
17d0: 2a 20 24 70 61 74 74 65 72 6e 5d 7d 20 7b 0a 09 * $pattern]} {..
17e0: 20 20 20 20 23 20 42 61 64 20 73 79 6e 74 61 78 # Bad syntax
17f0: 20 66 6f 72 20 74 68 65 20 70 61 74 74 65 72 6e for the pattern
1800: 2c 20 75 73 69 6e 67 20 6d 75 6c 74 69 70 6c 65 , using multiple
1810: 20 63 6f 6c 6f 6e 73 2e 0a 0a 09 20 20 20 20 74 colons.... t
1820: 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 42 61 rouble fatal "Ba
1830: 64 20 24 6c 61 62 65 6c 20 70 61 74 74 65 72 6e d $label pattern
1840: 20 27 24 70 61 74 74 65 72 6e 27 22 0a 09 7d 20 '$pattern'"..}
1850: 65 6c 73 65 69 66 20 7b 21 5b 73 74 72 69 6e 67 elseif {![string
1860: 20 6d 61 74 63 68 20 2a 3a 2a 20 24 70 61 74 74 match *:* $patt
1870: 65 72 6e 5d 7d 20 7b 0a 09 20 20 20 20 23 20 57 ern]} {.. # W
1880: 68 65 6e 20 6f 6e 6c 79 20 61 20 73 79 6d 62 6f hen only a symbo
1890: 6c 20 70 61 74 74 65 72 6e 20 69 73 20 73 70 65 l pattern is spe
18a0: 63 69 66 69 65 64 20 69 74 20 61 70 70 6c 69 65 cified it applie
18b0: 73 20 74 6f 0a 09 20 20 20 20 23 20 61 6c 6c 20 s to.. # all
18c0: 70 72 6f 6a 65 63 74 73 2e 0a 0a 09 20 20 20 20 projects....
18d0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 2a 20 24 return [list * $
18e0: 70 61 74 74 65 72 6e 5d 0a 09 7d 20 65 6c 73 65 pattern]..} else
18f0: 20 7b 0a 09 20 20 20 20 23 20 42 6f 74 68 20 70 {.. # Both p
1900: 72 6f 6a 65 63 74 20 61 6e 64 20 73 79 6d 62 6f roject and symbo
1910: 6c 20 70 61 74 74 65 72 6e 73 20 61 72 65 20 70 l patterns are p
1920: 72 65 73 65 6e 74 2c 20 77 65 20 73 70 6c 69 74 resent, we split
1930: 0a 09 20 20 20 20 23 20 74 68 65 6d 20 61 70 61 .. # them apa
1940: 72 74 20 6e 6f 77 20 66 6f 72 20 73 74 6f 72 61 rt now for stora
1950: 67 65 20 61 6e 64 20 65 61 73 69 65 72 20 65 78 ge and easier ex
1960: 74 72 61 63 74 69 6f 6e 20 6c 61 74 65 72 2e 0a traction later..
1970: 0a 09 20 20 20 20 72 65 74 75 72 6e 20 5b 73 70 .. return [sp
1980: 6c 69 74 20 24 70 61 74 74 65 72 6e 20 3a 5d 0a lit $pattern :].
1990: 09 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 .}. }.. ty
19a0: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 65 78 63 pevariable myexc
19b0: 6c 75 64 65 70 61 74 74 65 72 6e 20 7b 7d 20 3b ludepattern {} ;
19c0: 20 23 20 4c 69 73 74 20 6f 66 20 70 61 74 74 65 # List of patte
19d0: 72 6e 73 20 73 70 65 63 69 66 79 69 6e 67 0a 09 rns specifying..
19e0: 09 09 09 20 20 20 20 20 20 20 23 20 74 68 65 20 ... # the
19f0: 73 79 6d 62 6f 6c 73 20 74 6f 20 65 78 63 6c 75 symbols to exclu
1a00: 64 65 20 66 72 6f 6d 0a 09 09 09 09 20 20 20 20 de from.....
1a10: 20 20 20 23 20 63 6f 6e 76 65 72 73 69 6f 6e 2e # conversion.
1a20: 20 54 61 67 73 20 61 6e 64 2f 6f 72 0a 09 09 09 Tags and/or....
1a30: 09 20 20 20 20 20 20 20 23 20 62 72 61 6e 63 68 . # branch
1a40: 65 73 2e 0a 0a 20 20 20 20 74 79 70 65 76 61 72 es... typevar
1a50: 69 61 62 6c 65 20 6d 79 66 6f 72 63 65 70 61 74 iable myforcepat
1a60: 74 65 72 6e 20 7b 7d 20 3b 20 23 20 4c 69 73 74 tern {} ; # List
1a70: 20 6f 66 20 70 61 74 74 65 72 6e 73 20 61 6e 64 of patterns and
1a80: 20 74 79 70 65 73 0a 09 09 09 09 20 20 20 20 20 types.....
1a90: 23 20 73 70 65 63 69 66 79 69 6e 67 20 77 68 69 # specifying whi
1aa0: 63 68 20 73 79 6d 62 6f 6c 73 20 74 6f 0a 09 09 ch symbols to...
1ab0: 09 09 20 20 20 20 20 23 20 66 6f 72 63 65 20 74 .. # force t
1ac0: 6f 20 73 70 65 63 69 66 69 63 20 74 79 70 65 73 o specific types
1ad0: 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f ... typemetho
1ae0: 64 20 67 65 74 73 79 6d 74 79 70 65 73 20 7b 7d d getsymtypes {}
1af0: 20 7b 0a 09 66 6f 72 65 61 63 68 20 7b 74 69 64 {..foreach {tid
1b00: 20 6e 61 6d 65 7d 20 5b 73 74 61 74 65 20 72 75 name} [state ru
1b10: 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 n {.. SELECT
1b20: 74 69 64 2c 20 6e 61 6d 65 20 46 52 4f 4d 20 73 tid, name FROM s
1b30: 79 6d 74 79 70 65 3b 0a 09 7d 5d 20 7b 20 73 65 ymtype;..}] { se
1b40: 74 20 6d 79 73 79 6d 74 79 70 65 28 24 74 69 64 t mysymtype($tid
1b50: 29 20 24 6e 61 6d 65 20 7d 0a 09 72 65 74 75 72 ) $name }..retur
1b60: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 4b n. }.. # K
1b70: 65 65 70 20 74 68 65 20 63 6f 64 65 73 20 62 65 eep the codes be
1b80: 6c 6f 77 20 69 6e 20 73 79 6e 63 20 77 69 74 68 low in sync with
1b90: 20 27 70 61 73 73 3a 3a 63 6f 6c 6c 72 65 76 2f 'pass::collrev/
1ba0: 73 65 74 75 70 28 27 73 79 6d 74 79 70 65 27 29 setup('symtype')
1bb0: 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 .. typevariab
1bc0: 6c 65 20 6d 79 65 78 63 6c 75 64 65 64 20 20 20 le myexcluded
1bd0: 20 20 20 20 20 30 20 3b 20 23 20 43 6f 64 65 20 0 ; # Code
1be0: 66 6f 72 20 73 79 6d 62 6f 6c 73 20 77 68 69 63 for symbols whic
1bf0: 68 20 61 72 65 20 65 78 63 6c 75 64 65 64 2e 0a h are excluded..
1c00: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 typevariable
1c10: 20 6d 79 74 61 67 20 20 20 20 20 20 20 20 20 20 mytag
1c20: 20 20 20 31 20 3b 20 23 20 43 6f 64 65 20 66 6f 1 ; # Code fo
1c30: 72 20 73 79 6d 62 6f 6c 73 20 77 68 69 63 68 20 r symbols which
1c40: 61 72 65 20 74 61 67 73 2e 0a 20 20 20 20 74 79 are tags.. ty
1c50: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 pevariable mybra
1c60: 6e 63 68 20 20 20 20 20 20 20 20 20 20 32 20 3b nch 2 ;
1c70: 20 23 20 43 6f 64 65 20 66 6f 72 20 73 79 6d 62 # Code for symb
1c80: 6f 6c 73 20 77 68 69 63 68 20 61 72 65 20 62 72 ols which are br
1c90: 61 6e 63 68 65 73 2e 0a 20 20 20 20 74 79 70 65 anches.. type
1ca0: 76 61 72 69 61 62 6c 65 20 6d 79 75 6e 64 65 66 variable myundef
1cb0: 20 20 20 20 20 20 20 20 20 20 20 33 20 3b 20 23 3 ; #
1cc0: 20 43 6f 64 65 20 66 6f 72 20 73 79 6d 62 6f 6c Code for symbol
1cd0: 73 20 6f 66 20 75 6e 6b 6e 6f 77 6e 20 74 79 70 s of unknown typ
1ce0: 65 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 e.. typevaria
1cf0: 62 6c 65 20 6d 79 73 79 6d 74 79 70 65 20 2d 61 ble mysymtype -a
1d00: 72 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 rray {} ; # Map
1d10: 66 72 6f 6d 20 74 79 70 65 20 63 6f 64 65 20 74 from type code t
1d20: 6f 20 6c 61 62 65 6c 20 66 6f 72 20 74 68 65 20 o label for the
1d30: 6c 6f 67 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 log... typeme
1d40: 74 68 6f 64 20 75 6e 64 65 66 20 20 20 20 7b 7d thod undef {}
1d50: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 75 6e 64 { return $myund
1d60: 65 66 20 20 20 20 7d 0a 20 20 20 20 74 79 70 65 ef }. type
1d70: 6d 65 74 68 6f 64 20 65 78 63 6c 75 64 65 64 20 method excluded
1d80: 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 65 {} { return $mye
1d90: 78 63 6c 75 64 65 64 20 7d 0a 20 20 20 20 74 79 xcluded }. ty
1da0: 70 65 6d 65 74 68 6f 64 20 74 61 67 20 20 20 20 pemethod tag
1db0: 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d {} { return $m
1dc0: 79 74 61 67 20 20 20 20 20 20 7d 0a 20 20 20 20 ytag }.
1dd0: 74 79 70 65 6d 65 74 68 6f 64 20 62 72 61 6e 63 typemethod branc
1de0: 68 20 20 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 h {} { return
1df0: 24 6d 79 62 72 61 6e 63 68 20 20 20 7d 0a 0a 20 $mybranch }..
1e00: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 70 72 typemethod pr
1e10: 69 6e 74 72 75 6c 65 73 74 61 74 69 73 74 69 63 intrulestatistic
1e20: 73 20 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74 s {} {..log writ
1e30: 65 20 32 20 73 79 6d 62 6f 6c 20 22 52 75 6c 65 e 2 symbol "Rule
1e40: 20 75 73 61 67 65 20 73 74 61 74 69 73 74 69 63 usage statistic
1e50: 73 3a 22 0a 0a 09 73 65 74 20 66 6d 74 20 25 5b s:"...set fmt %[
1e60: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d string length $m
1e70: 79 6e 75 6d 5d 73 0a 09 73 65 74 20 61 6c 6c 20 ynum]s..set all
1e80: 30 0a 0a 09 66 6f 72 65 61 63 68 20 6b 65 79 20 0...foreach key
1e90: 5b 6c 73 6f 72 74 20 5b 61 72 72 61 79 20 6e 61 [lsort [array na
1ea0: 6d 65 73 20 6d 79 72 75 6c 65 63 6f 75 6e 74 5d mes myrulecount]
1eb0: 5d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 ] {.. log wri
1ec0: 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 2a 20 5b te 2 symbol "* [
1ed0: 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 6d 79 72 format $fmt $myr
1ee0: 75 6c 65 63 6f 75 6e 74 28 24 6b 65 79 29 5d 20 ulecount($key)]
1ef0: 24 6b 65 79 22 0a 09 20 20 20 20 69 6e 63 72 20 $key".. incr
1f00: 61 6c 6c 20 24 6d 79 72 75 6c 65 63 6f 75 6e 74 all $myrulecount
1f10: 28 24 6b 65 79 29 0a 09 7d 0a 0a 09 6c 6f 67 20 ($key)..}...log
1f20: 77 72 69 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 write 2 symbol "
1f30: 3d 20 5b 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 = [format $fmt $
1f40: 61 6c 6c 5d 20 74 6f 74 61 6c 22 0a 09 72 65 74 all] total"..ret
1f50: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 urn. }.. #
1f60: 20 53 74 61 74 69 73 74 69 63 73 20 6f 6e 20 68 Statistics on h
1f70: 6f 77 20 6f 66 74 65 6e 20 65 61 63 68 20 27 72 ow often each 'r
1f80: 75 6c 65 27 20 77 61 73 20 75 73 65 64 20 74 6f ule' was used to
1f90: 20 64 65 63 69 64 65 20 6f 6e 20 74 68 65 0a 20 decide on the.
1fa0: 20 20 20 23 20 74 79 70 65 20 6f 66 20 61 20 73 # type of a s
1fb0: 79 6d 62 6f 6c 2e 0a 20 20 20 20 74 79 70 65 76 ymbol.. typev
1fc0: 61 72 69 61 62 6c 65 20 6d 79 72 75 6c 65 63 6f ariable myruleco
1fd0: 75 6e 74 20 2d 61 72 72 61 79 20 7b 0a 09 48 61 unt -array {..Ha
1fe0: 73 43 6f 6d 6d 69 74 73 20 30 0a 09 49 73 54 68 sCommits 0..IsTh
1ff0: 65 54 72 75 6e 6b 20 30 0a 09 55 6e 61 6d 62 69 eTrunk 0..Unambi
2000: 67 6f 75 73 20 30 0a 09 55 6e 64 65 63 69 64 65 gous 0..Undecide
2010: 64 5f 20 30 0a 09 55 73 65 72 43 6f 6e 66 69 67 d_ 0..UserConfig
2020: 20 30 0a 09 56 6f 74 65 43 6f 75 6e 74 73 20 30 0..VoteCounts 0
2030: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 . }.. type
2040: 6d 65 74 68 6f 64 20 70 72 69 6e 74 74 79 70 65 method printtype
2050: 73 74 61 74 69 73 74 69 63 73 20 7b 7d 20 7b 0a statistics {} {.
2060: 09 6c 6f 67 20 77 72 69 74 65 20 32 20 73 79 6d .log write 2 sym
2070: 62 6f 6c 20 22 53 79 6d 62 6f 6c 20 74 79 70 65 bol "Symbol type
2080: 20 73 74 61 74 69 73 74 69 63 73 3a 22 0a 0a 09 statistics:"...
2090: 73 65 74 20 66 6d 74 20 25 5b 73 74 72 69 6e 67 set fmt %[string
20a0: 20 6c 65 6e 67 74 68 20 24 6d 79 6e 75 6d 5d 73 length $mynum]s
20b0: 0a 09 73 65 74 20 61 6c 6c 20 30 0a 0a 09 66 6f ..set all 0...fo
20c0: 72 65 61 63 68 20 7b 73 74 79 70 65 20 73 70 6c reach {stype spl
20d0: 75 72 61 6c 20 6e 7d 20 5b 73 74 61 74 65 20 72 ural n} [state r
20e0: 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 un {.. SELECT
20f0: 20 54 2e 6e 61 6d 65 2c 20 54 2e 70 6c 75 72 61 T.name, T.plura
2100: 6c 2c 20 43 4f 55 4e 54 20 28 73 2e 73 69 64 29 l, COUNT (s.sid)
2110: 0a 09 20 20 20 20 46 52 4f 4d 20 73 79 6d 62 6f .. FROM symbo
2120: 6c 20 53 2c 20 73 79 6d 74 79 70 65 20 54 0a 09 l S, symtype T..
2130: 20 20 20 20 57 48 45 52 45 20 53 2e 74 79 70 65 WHERE S.type
2140: 20 3d 20 54 2e 74 69 64 0a 09 20 20 20 20 47 52 = T.tid.. GR
2150: 4f 55 50 20 42 59 20 54 2e 6e 61 6d 65 0a 09 20 OUP BY T.name..
2160: 20 20 20 4f 52 44 45 52 20 42 59 20 54 2e 6e 61 ORDER BY T.na
2170: 6d 65 0a 09 20 20 20 20 3b 0a 09 7d 5d 20 7b 0a me.. ;..}] {.
2180: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 32 . log write 2
2190: 20 73 79 6d 62 6f 6c 20 22 2a 20 5b 66 6f 72 6d symbol "* [form
21a0: 61 74 20 24 66 6d 74 20 24 6e 5d 20 5b 73 70 20 at $fmt $n] [sp
21b0: 24 6e 20 24 73 74 79 70 65 20 24 73 70 6c 75 72 $n $stype $splur
21c0: 61 6c 5d 22 0a 09 20 20 20 20 69 6e 63 72 20 61 al]".. incr a
21d0: 6c 6c 20 24 6e 0a 09 7d 0a 0a 09 6c 6f 67 20 77 ll $n..}...log w
21e0: 72 69 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 3d rite 2 symbol "=
21f0: 20 5b 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 61 [format $fmt $a
2200: 6c 6c 5d 20 74 6f 74 61 6c 22 0a 09 72 65 74 75 ll] total"..retu
2210: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 rn. }.. ty
2220: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 6e 75 6d pevariable mynum
2230: 20 30 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 0.. # # ## #
2240: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
2250: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
2260: 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 ## Internal
2270: 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 6d 65 74 methods.. met
2280: 68 6f 64 20 55 73 65 72 43 6f 6e 66 69 67 20 7b hod UserConfig {
2290: 7d 20 7b 0a 09 73 65 74 20 70 72 6f 6a 65 63 74 } {..set project
22a0: 20 5b 24 6d 79 70 72 6f 6a 65 63 74 20 62 61 73 [$myproject bas
22b0: 65 5d 0a 0a 09 23 20 46 69 72 73 74 20 63 68 65 e]...# First che
22c0: 63 6b 20 69 66 20 74 68 65 20 75 73 65 72 20 72 ck if the user r
22d0: 65 71 75 65 73 74 65 64 20 74 68 65 20 65 78 63 equested the exc
22e0: 6c 75 73 69 6f 6e 20 6f 66 20 74 68 65 0a 09 23 lusion of the..#
22f0: 20 73 79 6d 62 6f 6c 20 66 72 6f 6d 20 63 6f 6e symbol from con
2300: 76 65 72 73 69 6f 6e 2e 0a 0a 09 66 6f 72 65 61 version....forea
2310: 63 68 20 65 78 20 24 6d 79 65 78 63 6c 75 64 65 ch ex $myexclude
2320: 70 61 74 74 65 72 6e 20 7b 0a 09 20 20 20 20 73 pattern {.. s
2330: 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 truct::list assi
2340: 67 6e 20 24 65 78 20 70 70 20 73 70 0a 09 20 20 gn $ex pp sp..
2350: 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d if {![string m
2360: 61 74 63 68 20 24 70 70 20 24 70 72 6f 6a 65 63 atch $pp $projec
2370: 74 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 t]} continue..
2380: 20 20 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d if {![string m
2390: 61 74 63 68 20 24 73 70 20 24 6d 79 6e 61 6d 65 atch $sp $myname
23a0: 5d 7d 20 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 ]} continue..
23b0: 20 20 72 65 74 75 72 6e 20 24 6d 79 65 78 63 6c return $myexcl
23c0: 75 64 65 64 0a 09 7d 0a 0a 09 23 20 49 66 20 74 uded..}...# If t
23d0: 68 65 20 73 79 6d 62 6f 6c 20 69 73 20 6e 6f 74 he symbol is not
23e0: 20 65 78 63 6c 75 64 65 64 20 66 75 72 74 68 65 excluded furthe
23f0: 72 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 75 r check if the u
2400: 73 65 72 0a 09 23 20 66 6f 72 63 65 73 20 69 74 ser..# forces it
2410: 73 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61 73 20 s conversion as
2420: 61 20 73 70 65 63 69 66 69 63 20 74 79 70 65 2e a specific type.
2430: 0a 0a 09 66 6f 72 65 61 63 68 20 7b 65 78 20 73 ...foreach {ex s
2440: 74 79 70 65 7d 20 24 6d 79 66 6f 72 63 65 70 61 type} $myforcepa
2450: 74 74 65 72 6e 20 7b 0a 09 20 20 20 20 73 74 72 ttern {.. str
2460: 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e uct::list assign
2470: 20 24 65 78 20 70 70 20 73 70 0a 09 20 20 20 20 $ex pp sp..
2480: 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74 if {![string mat
2490: 63 68 20 24 70 70 20 24 70 72 6f 6a 65 63 74 5d ch $pp $project]
24a0: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 } continue..
24b0: 69 66 20 7b 21 5b 73 74 72 69 6e 67 20 6d 61 74 if {![string mat
24c0: 63 68 20 24 73 70 20 24 6d 79 6e 61 6d 65 5d 7d ch $sp $myname]}
24d0: 20 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 continue..
24e0: 72 65 74 75 72 6e 20 24 73 74 79 70 65 0a 09 7d return $stype..}
24f0: 0a 0a 09 23 20 4e 6f 74 68 69 6e 67 20 69 73 20 ...# Nothing is
2500: 66 6f 72 63 65 64 2c 20 68 61 76 65 20 74 68 65 forced, have the
2510: 20 6d 61 69 6e 20 73 79 73 74 65 6d 20 68 61 6e main system han
2520: 64 20 74 68 65 20 73 79 6d 62 6f 6c 20 6f 76 65 d the symbol ove
2530: 72 0a 09 23 20 74 6f 20 74 68 65 20 72 65 67 75 r..# to the regu
2540: 6c 61 72 20 68 65 75 72 69 73 74 69 63 73 2e 0a lar heuristics..
2550: 0a 09 72 65 74 75 72 6e 20 24 6d 79 75 6e 64 65 ..return $myunde
2560: 66 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 f. }.. met
2570: 68 6f 64 20 55 6e 61 6d 62 69 67 6f 75 73 20 7b hod Unambigous {
2580: 7d 20 7b 0a 09 23 20 49 66 20 61 20 73 79 6d 62 } {..# If a symb
2590: 6f 6c 20 69 73 20 75 73 65 64 20 75 6e 61 6d 62 ol is used unamb
25a0: 69 67 75 6f 75 73 6c 79 20 61 73 20 61 20 74 61 iguously as a ta
25b0: 67 2f 62 72 61 6e 63 68 2c 20 63 6f 6e 76 65 72 g/branch, conver
25c0: 74 0a 09 23 20 69 74 20 61 73 20 73 75 63 68 2e t..# it as such.
25d0: 0a 0a 09 73 65 74 20 69 73 74 61 67 20 20 20 20 ...set istag
25e0: 5b 65 78 70 72 20 7b 24 6d 79 74 61 67 63 6f 75 [expr {$mytagcou
25f0: 6e 74 20 20 20 20 3e 20 30 7d 5d 09 0a 09 73 65 nt > 0}]...se
2600: 74 20 69 73 62 72 61 6e 63 68 20 5b 65 78 70 72 t isbranch [expr
2610: 20 7b 24 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 {$mybranchcount
2620: 20 3e 20 30 20 7c 7c 20 24 6d 79 63 6f 6d 6d 69 > 0 || $mycommi
2630: 74 63 6f 75 6e 74 20 3e 20 30 7d 5d 0a 0a 09 69 tcount > 0}]...i
2640: 66 20 7b 24 69 73 74 61 67 20 26 26 20 24 69 73 f {$istag && $is
2650: 62 72 61 6e 63 68 7d 20 7b 20 72 65 74 75 72 6e branch} { return
2660: 20 24 6d 79 75 6e 64 65 66 20 20 7d 0a 09 69 66 $myundef }..if
2670: 20 7b 24 69 73 74 61 67 7d 20 20 20 20 20 20 20 {$istag}
2680: 20 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 { return
2690: 24 6d 79 74 61 67 20 20 20 20 7d 0a 09 69 66 20 $mytag }..if
26a0: 7b 24 69 73 62 72 61 6e 63 68 7d 20 20 20 20 20 {$isbranch}
26b0: 20 20 20 20 20 20 7b 20 72 65 74 75 72 6e 20 24 { return $
26c0: 6d 79 62 72 61 6e 63 68 20 7d 0a 0a 09 23 20 53 mybranch }...# S
26d0: 79 6d 62 6f 6c 20 77 61 73 20 6e 6f 74 20 75 73 ymbol was not us
26e0: 65 64 20 61 74 20 61 6c 6c 2e 0a 09 72 65 74 75 ed at all...retu
26f0: 72 6e 20 24 6d 79 75 6e 64 65 66 0a 20 20 20 20 rn $myundef.
2700: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 48 61 }.. method Ha
2710: 73 43 6f 6d 6d 69 74 73 20 7b 7d 20 7b 0a 09 23 sCommits {} {..#
2720: 20 49 66 20 74 68 65 72 65 20 77 61 73 20 65 76 If there was ev
2730: 65 72 20 61 20 63 6f 6d 6d 69 74 20 6f 6e 20 74 er a commit on t
2740: 68 65 20 73 79 6d 62 6f 6c 2c 20 63 6f 6e 76 65 he symbol, conve
2750: 72 74 20 69 74 20 61 73 20 61 0a 09 23 20 62 72 rt it as a..# br
2760: 61 6e 63 68 2e 0a 0a 09 69 66 20 7b 24 6d 79 63 anch....if {$myc
2770: 6f 6d 6d 69 74 63 6f 75 6e 74 20 3e 20 30 7d 20 ommitcount > 0}
2780: 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e { return $mybran
2790: 63 68 20 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 ch }..return $my
27a0: 75 6e 64 65 66 0a 20 20 20 20 7d 0a 0a 20 20 20 undef. }..
27b0: 20 6d 65 74 68 6f 64 20 56 6f 74 65 43 6f 75 6e method VoteCoun
27c0: 74 73 20 7b 7d 20 7b 0a 09 23 20 43 6f 6e 76 65 ts {} {..# Conve
27d0: 72 74 20 74 68 65 20 73 79 6d 62 6f 6c 20 62 61 rt the symbol ba
27e0: 73 65 64 20 6f 6e 20 68 6f 77 20 6f 66 74 65 6e sed on how often
27f0: 20 69 74 20 77 61 73 20 75 73 65 64 20 61 73 20 it was used as
2800: 61 0a 09 23 20 62 72 61 6e 63 68 2f 74 61 67 2e a..# branch/tag.
2810: 20 57 68 69 63 68 65 76 65 72 20 68 61 70 70 65 Whichever happe
2820: 6e 65 64 20 6d 6f 72 65 20 6f 66 74 65 6e 20 64 ned more often d
2830: 65 74 65 72 6d 69 6e 65 73 20 68 6f 77 20 74 68 etermines how th
2840: 65 0a 09 23 20 73 79 6d 62 6f 6c 20 69 73 20 63 e..# symbol is c
2850: 6f 6e 76 65 72 74 65 64 2e 0a 0a 09 69 66 20 7b onverted....if {
2860: 24 6d 79 74 61 67 63 6f 75 6e 74 20 3e 20 24 6d $mytagcount > $m
2870: 79 62 72 61 6e 63 68 63 6f 75 6e 74 7d 20 7b 20 ybranchcount} {
2880: 72 65 74 75 72 6e 20 24 6d 79 74 61 67 20 7d 0a return $mytag }.
2890: 09 69 66 20 7b 24 6d 79 74 61 67 63 6f 75 6e 74 .if {$mytagcount
28a0: 20 3c 20 24 6d 79 62 72 61 6e 63 68 63 6f 75 6e < $mybranchcoun
28b0: 74 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 t} { return $myb
28c0: 72 61 6e 63 68 20 7d 0a 09 72 65 74 75 72 6e 20 ranch }..return
28d0: 24 6d 79 75 6e 64 65 66 0a 20 20 20 20 7d 0a 0a $myundef. }..
28e0: 20 20 20 20 6d 65 74 68 6f 64 20 4d 61 72 6b 41 method MarkA
28f0: 73 20 7b 6c 61 62 65 6c 20 63 68 6f 73 65 6e 7d s {label chosen}
2900: 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 33 20 {..log write 3
2910: 73 79 6d 62 6f 6c 20 22 5c 5b 24 6c 61 62 65 6c symbol "\[$label
2920: 5c 5d 20 43 6f 6e 76 65 72 74 69 6e 67 20 73 79 \] Converting sy
2930: 6d 62 6f 6c 20 27 24 6d 79 6e 61 6d 65 27 20 61 mbol '$myname' a
2940: 73 20 24 6d 79 73 79 6d 74 79 70 65 28 24 63 68 s $mysymtype($ch
2950: 6f 73 65 6e 29 22 0a 0a 09 73 65 74 20 6d 79 74 osen)"...set myt
2960: 79 70 65 20 24 63 68 6f 73 65 6e 0a 09 69 6e 63 ype $chosen..inc
2970: 72 20 6d 79 72 75 6c 65 63 6f 75 6e 74 28 24 6c r myrulecount($l
2980: 61 62 65 6c 29 0a 0a 09 23 20 54 68 69 73 20 69 abel)...# This i
2990: 73 20 73 74 6f 72 65 64 20 64 69 72 65 63 74 6c s stored directl
29a0: 79 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 y into the datab
29b0: 61 73 65 2e 0a 09 73 74 61 74 65 20 72 75 6e 20 ase...state run
29c0: 7b 0a 09 20 20 20 20 55 50 44 41 54 45 20 73 79 {.. UPDATE sy
29d0: 6d 62 6f 6c 0a 09 20 20 20 20 53 45 54 20 74 79 mbol.. SET ty
29e0: 70 65 20 3d 20 24 63 68 6f 73 65 6e 0a 09 20 20 pe = $chosen..
29f0: 20 20 57 48 45 52 45 20 73 69 64 20 3d 20 24 6d WHERE sid = $m
2a00: 79 69 64 0a 09 20 20 20 20 3b 0a 09 7d 0a 09 72 yid.. ;..}..r
2a10: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 eturn. }..
2a20: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 # # ## ### ####
2a30: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 # ######## #####
2a40: 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 ########. ##
2a50: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 Configuration..
2a60: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 pragma -hasty
2a70: 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 20 3b 20 peinfo no ;
2a80: 23 20 6e 6f 20 74 79 70 65 20 69 6e 74 72 6f 73 # no type intros
2a90: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 pection. prag
2aa0: 6d 61 20 2d 68 61 73 69 6e 66 6f 20 20 20 20 20 ma -hasinfo
2ab0: 20 20 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 6f 62 no ; # no ob
2ac0: 6a 65 63 74 20 69 6e 74 72 6f 73 70 65 63 74 69 ject introspecti
2ad0: 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 73 on. pragma -s
2ae0: 69 6d 70 6c 65 64 69 73 70 61 74 63 68 20 79 65 impledispatch ye
2af0: 73 20 3b 20 23 20 73 69 6d 70 6c 65 20 66 61 73 s ; # simple fas
2b00: 74 20 64 69 73 70 61 74 63 68 0a 0a 20 20 20 20 t dispatch..
2b10: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
2b20: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
2b30: 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 #######.}..names
2b40: 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a pace eval ::vc::
2b50: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
2b60: 63 76 73 3a 3a 70 72 6f 6a 65 63 74 20 7b 0a 20 cvs::project {.
2b70: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 namespace exp
2b80: 6f 72 74 20 73 79 6d 0a 20 20 20 20 6e 61 6d 65 ort sym. name
2b90: 73 70 61 63 65 20 65 76 61 6c 20 73 79 6d 20 7b space eval sym {
2ba0: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f ..namespace impo
2bb0: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a rt ::vc::fossil:
2bc0: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 :import::cvs::st
2bd0: 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 ate..namespace i
2be0: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c mport ::vc::tool
2bf0: 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 s::misc::*..name
2c00: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
2c10: 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c c::tools::troubl
2c20: 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 e..namespace imp
2c30: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ort ::vc::tools:
2c40: 3a 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 69 73 74 :log..log regist
2c50: 65 72 20 73 79 6d 62 6f 6c 0a 20 20 20 20 7d 0a er symbol. }.
2c60: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 }..# # ## ### ##
2c70: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
2c80: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 ########## #####
2c90: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
2ca0: 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 .## Ready..packa
2cb0: 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 ge provide vc::f
2cc0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
2cd0: 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 73 79 6d vs::project::sym
2ce0: 20 31 2e 30 0a 72 65 74 75 72 6e 0a 1.0.return.