Artifact 472799fd794f0ceb9bcfe1e8c006fd824f4cf126:
File
tools/cvs2fossil/lib/c2f_psym.tcl
part of check-in
[99004d57a3]
- Reverting the change of a5840849d0. Use of 'preferedparent' is ok. The problem I attempted to fix is properly fixed by looking at the branch changesets as well during import, and by acknowledging that there can be branches which have no changesets committed to them.
by
aku on
2008-03-05 03:24:19.
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 2d 32 30 30 38 20 41 6e 64 72 65 61 73 20 07-2008 Andreas
0070: 4b 75 70 72 69 65 73 2e 0a 23 0a 23 20 54 68 69 Kupries..#.# Thi
0080: 73 20 73 6f 66 74 77 61 72 65 20 69 73 20 6c 69 s software is li
0090: 63 65 6e 73 65 64 20 61 73 20 64 65 73 63 72 69 censed as descri
00a0: 62 65 64 20 69 6e 20 74 68 65 20 66 69 6c 65 20 bed in the file
00b0: 4c 49 43 45 4e 53 45 2c 20 77 68 69 63 68 0a 23 LICENSE, which.#
00c0: 20 79 6f 75 20 73 68 6f 75 6c 64 20 68 61 76 65 you should have
00d0: 20 72 65 63 65 69 76 65 64 20 61 73 20 70 61 72 received as par
00e0: 74 20 6f 66 20 74 68 69 73 20 64 69 73 74 72 69 t of this distri
00f0: 62 75 74 69 6f 6e 2e 0a 23 0a 23 20 54 68 69 73 bution..#.# This
0100: 20 73 6f 66 74 77 61 72 65 20 63 6f 6e 73 69 73 software consis
0110: 74 73 20 6f 66 20 76 6f 6c 75 6e 74 61 72 79 20 ts of voluntary
0120: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 73 20 6d 61 contributions ma
0130: 64 65 20 62 79 20 6d 61 6e 79 0a 23 20 69 6e 64 de by many.# ind
0140: 69 76 69 64 75 61 6c 73 2e 20 20 46 6f 72 20 65 ividuals. For e
0150: 78 61 63 74 20 63 6f 6e 74 72 69 62 75 74 69 6f xact contributio
0160: 6e 20 68 69 73 74 6f 72 79 2c 20 73 65 65 20 74 n history, see t
0170: 68 65 20 72 65 76 69 73 69 6f 6e 0a 23 20 68 69 he revision.# hi
0180: 73 74 6f 72 79 20 61 6e 64 20 6c 6f 67 73 2c 20 story and logs,
0190: 61 76 61 69 6c 61 62 6c 65 20 61 74 20 68 74 74 available at htt
01a0: 70 3a 2f 2f 66 6f 73 73 69 6c 2d 73 63 6d 2e 68 p://fossil-scm.h
01b0: 77 61 63 69 2e 63 6f 6d 2f 66 6f 73 73 69 6c 0a waci.com/fossil.
01c0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 # # ## ### #####
01d0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 ######## ######
01e0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 ####### ########
01f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 23 #############..#
0200: 23 20 53 79 6d 62 6f 6c 73 20 28 54 61 67 73 2c # Symbols (Tags,
0210: 20 42 72 61 6e 63 68 65 73 29 20 70 65 72 20 70 Branches) per p
0220: 72 6f 6a 65 63 74 2e 0a 0a 23 20 23 20 23 23 20 roject...# # ##
0230: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
0240: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
0250: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ###############
0260: 23 23 23 23 23 23 0a 23 23 20 52 65 71 75 69 72 ######.## Requir
0270: 65 6d 65 6e 74 73 0a 0a 70 61 63 6b 61 67 65 20 ements..package
0280: 72 65 71 75 69 72 65 20 54 63 6c 20 38 2e 34 20 require 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 20 20 20 20 20 3b 20 ;
02b0: 23 20 52 65 71 75 69 72 65 64 20 72 75 6e 74 69 # Required runti
02c0: 6d 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 me..package requ
02d0: 69 72 65 20 73 6e 69 74 20 20 20 20 20 20 20 20 ire snit
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
02f0: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 4f 4f ; # OO
0300: 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b 61 67 65 system..package
0310: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f require vc::too
0320: 6c 73 3a 3a 74 72 6f 75 62 6c 65 20 20 20 20 20 ls::trouble
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b ;
0340: 20 23 20 45 72 72 6f 72 20 72 65 70 6f 72 74 69 # Error reporti
0350: 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 ng..package requ
0360: 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c ire vc::tools::l
0370: 6f 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 og
0380: 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 55 73 ; # Us
0390: 65 72 20 66 65 65 64 62 61 63 6b 2e 0a 70 61 63 er feedback..pac
03a0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a kage require vc:
03b0: 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 20 :tools::misc
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
03d0: 20 20 20 3b 20 23 20 54 65 78 74 20 66 6f 72 6d ; # Text form
03e0: 61 74 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 atting..package
03f0: 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 require vc::foss
0400: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
0410: 3a 73 74 61 74 65 20 20 20 20 20 20 20 20 3b 20 :state ;
0420: 23 20 53 74 61 74 65 20 73 74 6f 72 61 67 65 2e # State storage.
0430: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 .package require
0440: 20 73 74 72 75 63 74 3a 3a 73 65 74 20 20 20 20 struct::set
0450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0460: 20 20 20 20 20 20 20 3b 20 23 20 53 65 74 20 68 ; # Set h
0470: 61 6e 64 6c 69 6e 67 2e 0a 0a 23 20 23 20 23 23 andling...# # ##
0480: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
0490: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
04a0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 # ##############
04b0: 23 23 23 23 23 23 23 0a 23 23 0a 0a 73 6e 69 74 #######.##..snit
04c0: 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 ::type ::vc::fos
04d0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 sil::import::cvs
04e0: 3a 3a 70 72 6f 6a 65 63 74 3a 3a 73 79 6d 20 7b ::project::sym {
04f0: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
0500: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
0510: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 ############.
0520: 20 23 23 20 50 75 62 6c 69 63 20 41 50 49 0a 0a ## Public API..
0530: 20 20 20 20 63 6f 6e 73 74 72 75 63 74 6f 72 20 constructor
0540: 7b 6e 61 6d 65 20 69 64 20 70 72 6f 6a 65 63 74 {name id project
0550: 7d 20 7b 0a 09 73 65 74 20 6d 79 6e 61 6d 65 20 } {..set myname
0560: 20 20 20 24 6e 61 6d 65 0a 09 73 65 74 20 6d 79 $name..set my
0570: 69 64 20 20 20 20 20 20 24 69 64 0a 09 73 65 74 id $id..set
0580: 20 6d 79 70 72 6f 6a 65 63 74 20 24 70 72 6f 6a myproject $proj
0590: 65 63 74 0a 0a 09 23 20 43 6f 75 6e 74 20 74 6f ect...# Count to
05a0: 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 73 79 tal number of sy
05b0: 6d 62 6f 6c 73 2e 0a 09 69 6e 63 72 20 6d 79 6e mbols...incr myn
05c0: 75 6d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d um..return. }
05d0: 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 6e 61 6d .. method nam
05e0: 65 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d e {} { return $m
05f0: 79 6e 61 6d 65 20 7d 0a 20 20 20 20 6d 65 74 68 yname }. meth
0600: 6f 64 20 69 64 20 20 20 7b 7d 20 7b 20 72 65 74 od id {} { ret
0610: 75 72 6e 20 24 6d 79 69 64 20 20 20 7d 0a 0a 20 urn $myid }..
0620: 20 20 20 6d 65 74 68 6f 64 20 69 73 74 72 75 6e method istrun
0630: 6b 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 30 20 k {} { return 0
0640: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 70 61 }.. method pa
0650: 72 65 6e 74 20 7b 7d 20 7b 0a 20 20 20 20 20 20 rent {} {.
0660: 20 20 72 65 74 75 72 6e 20 5b 24 6d 79 70 72 6f return [$mypro
0670: 6a 65 63 74 20 67 65 74 73 79 6d 62 6f 6c 20 5b ject getsymbol [
0680: 73 74 61 74 65 20 72 75 6e 20 7b 0a 20 09 20 20 state run {. .
0690: 20 20 53 45 4c 45 43 54 20 53 2e 6e 61 6d 65 0a SELECT S.name.
06a0: 09 20 20 20 20 46 52 4f 4d 20 70 72 65 66 65 72 . FROM prefer
06b0: 65 64 70 61 72 65 6e 74 20 50 2c 20 73 79 6d 62 edparent P, symb
06c0: 6f 6c 20 53 0a 09 20 20 20 20 57 48 45 52 45 20 ol S.. WHERE
06d0: 50 2e 73 69 64 20 3d 20 24 6d 79 69 64 0a 09 20 P.sid = $myid..
06e0: 20 20 20 41 4e 44 20 20 20 53 2e 73 69 64 20 3d AND S.sid =
06f0: 20 50 2e 70 69 64 0a 09 7d 5d 5d 0a 20 20 20 20 P.pid..}]].
0700: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 }.. # # ## ##
0710: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
0720: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 #############.
0730: 20 20 20 23 23 20 53 79 6d 62 6f 6c 20 74 79 70 ## Symbol typ
0740: 65 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 64 65 e.. method de
0750: 74 65 72 6d 69 6e 65 74 79 70 65 20 7b 7d 20 7b terminetype {} {
0760: 0a 09 23 20 54 68 69 73 20 69 73 20 64 6f 6e 65 ..# This is done
0770: 20 62 79 20 61 20 66 69 78 65 64 20 68 65 75 72 by a fixed heur
0780: 69 73 74 69 63 73 2c 20 77 69 74 68 20 67 75 69 istics, with gui
0790: 64 61 6e 63 65 20 62 79 20 74 68 65 0a 09 23 20 dance by the..#
07a0: 75 73 65 72 20 69 6e 20 65 64 67 65 2d 63 61 73 user in edge-cas
07b0: 65 73 2e 20 43 6f 6e 74 72 61 72 79 20 74 6f 20 es. Contrary to
07c0: 63 76 73 32 73 76 6e 20 77 68 69 63 68 20 75 73 cvs2svn which us
07d0: 65 73 20 61 20 62 69 67 0a 09 23 20 68 6f 6e 6b es a big..# honk
07e0: 69 6e 67 20 73 74 72 65 61 67 79 20 63 6c 61 73 ing streagy clas
07f0: 73 20 61 6e 64 20 72 75 6c 65 20 6f 62 6a 65 63 s and rule objec
0800: 74 73 2e 20 4b 65 65 70 20 69 74 20 73 69 6d 70 ts. Keep it simp
0810: 6c 65 2c 20 77 65 0a 09 23 20 63 61 6e 20 65 78 le, we..# can ex
0820: 70 61 6e 64 20 6c 61 74 65 72 20 77 68 65 6e 20 pand later when
0830: 77 65 20 61 63 74 75 61 6c 6c 79 20 6e 65 65 64 we actually need
0840: 20 61 6c 6c 20 74 68 65 20 63 6f 6d 70 6c 65 78 all the complex
0850: 69 74 79 0a 09 23 20 66 6f 72 20 63 6f 6e 66 69 ity..# for confi
0860: 67 75 72 61 62 69 6c 69 74 79 2e 0a 0a 09 23 20 gurability....#
0870: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 75 The following gu
0880: 69 64 65 6c 69 6e 65 73 20 61 72 65 20 61 70 70 idelines are app
0890: 6c 69 65 64 3a 0a 09 23 20 2d 20 49 73 20 75 73 lied:..# - Is us
08a0: 61 67 65 20 75 6e 61 6d 62 69 67 6f 75 73 20 3f age unambigous ?
08b0: 0a 09 23 20 2d 20 57 61 73 20 74 68 65 72 65 20 ..# - Was there
08c0: 65 76 65 72 20 61 20 63 6f 6d 6d 69 74 20 6f 6e ever a commit on
08d0: 20 74 68 65 20 73 79 6d 62 6f 6c 20 3f 0a 09 23 the symbol ?..#
08e0: 20 2d 20 4d 6f 72 65 20 75 73 65 64 20 61 73 20 - More used as
08f0: 74 61 67 2c 20 6f 72 20 6d 6f 72 65 20 75 73 65 tag, or more use
0900: 64 20 61 73 20 62 72 61 6e 63 68 20 3f 0a 09 23 d as branch ?..#
0910: 20 2d 20 41 74 20 6c 61 73 74 2c 20 77 68 61 74 - At last, what
0920: 20 68 61 73 20 74 68 65 20 75 73 65 72 20 74 6f has the user to
0930: 6c 64 20 75 73 20 61 62 6f 75 74 20 69 74 20 3f ld us about it ?
0940: 0a 09 23 20 2d 20 46 61 69 6c 0a 0a 09 66 6f 72 ..# - Fail...for
0950: 65 61 63 68 20 72 75 6c 65 20 7b 0a 09 20 20 20 each rule {..
0960: 20 55 73 65 72 43 6f 6e 66 69 67 0a 09 20 20 20 UserConfig..
0970: 20 55 6e 61 6d 62 69 67 6f 75 73 0a 09 20 20 20 Unambigous..
0980: 20 48 61 73 43 6f 6d 6d 69 74 73 0a 09 20 20 20 HasCommits..
0990: 20 56 6f 74 65 43 6f 75 6e 74 73 0a 09 7d 20 7b VoteCounts..} {
09a0: 0a 09 20 20 20 73 65 74 20 63 68 6f 73 65 6e 20 .. set chosen
09b0: 5b 24 73 65 6c 66 20 24 72 75 6c 65 5d 0a 09 20 [$self $rule]..
09c0: 20 20 69 66 20 7b 24 63 68 6f 73 65 6e 20 65 71 if {$chosen eq
09d0: 20 24 6d 79 75 6e 64 65 66 7d 20 63 6f 6e 74 69 $myundef} conti
09e0: 6e 75 65 0a 09 20 20 20 24 73 65 6c 66 20 4d 61 nue.. $self Ma
09f0: 72 6b 41 73 20 24 72 75 6c 65 20 24 63 68 6f 73 rkAs $rule $chos
0a00: 65 6e 0a 09 20 20 20 72 65 74 75 72 6e 0a 09 7d en.. return..}
0a10: 0a 0a 09 23 20 4e 6f 6e 65 20 6f 66 20 74 68 65 ...# None of the
0a20: 20 61 62 6f 76 65 20 77 61 73 20 61 62 6c 65 20 above was able
0a30: 74 6f 20 64 65 63 69 64 65 20 77 68 69 63 68 20 to decide which
0a40: 74 79 70 65 20 74 6f 20 61 73 73 69 67 6e 20 74 type to assign t
0a50: 6f 0a 09 23 20 74 68 65 20 73 79 6d 62 6f 6c 2e o..# the symbol.
0a60: 20 54 68 69 73 20 69 73 20 61 20 66 61 74 61 6c This is a fatal
0a70: 20 65 72 72 6f 72 20 70 72 65 76 65 6e 74 69 6e error preventin
0a80: 67 20 74 68 65 20 65 78 65 63 75 74 69 6f 6e 0a g the execution.
0a90: 09 23 20 6f 66 20 74 68 65 20 70 61 73 73 65 73 .# of the passes
0aa0: 20 61 66 74 65 72 20 27 43 6f 6c 6c 61 74 65 53 after 'CollateS
0ab0: 79 6d 62 6f 6c 73 27 2e 0a 0a 09 69 6e 63 72 20 ymbols'....incr
0ac0: 6d 79 72 75 6c 65 63 6f 75 6e 74 28 55 6e 64 65 myrulecount(Unde
0ad0: 63 69 64 65 64 5f 29 0a 09 74 72 6f 75 62 6c 65 cided_)..trouble
0ae0: 20 66 61 74 61 6c 20 22 55 6e 61 62 6c 65 20 74 fatal "Unable t
0af0: 6f 20 64 65 63 69 64 65 20 68 6f 77 20 74 6f 20 o decide how to
0b00: 63 6f 6e 76 65 72 74 20 73 79 6d 62 6f 6c 20 27 convert symbol '
0b10: 24 6d 79 6e 61 6d 65 27 22 0a 09 72 65 74 75 72 $myname'"..retur
0b20: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 n. }.. met
0b30: 68 6f 64 20 6d 61 72 6b 74 68 65 74 72 75 6e 6b hod markthetrunk
0b40: 20 7b 7d 20 7b 20 24 73 65 6c 66 20 4d 61 72 6b {} { $self Mark
0b50: 41 73 20 49 73 54 68 65 54 72 75 6e 6b 20 24 6d As IsTheTrunk $m
0b60: 79 62 72 61 6e 63 68 20 3b 20 72 65 74 75 72 6e ybranch ; return
0b70: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 }.. # # ## #
0b80: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
0b90: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
0ba0: 20 20 20 20 23 23 20 53 79 6d 62 6f 6c 20 73 74 ## Symbol st
0bb0: 61 74 69 73 74 69 63 73 0a 0a 20 20 20 20 6d 65 atistics.. me
0bc0: 74 68 6f 64 20 64 65 66 63 6f 75 6e 74 73 20 7b thod defcounts {
0bd0: 74 63 20 62 63 20 63 63 7d 20 7b 0a 09 73 65 74 tc bc cc} {..set
0be0: 20 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 20 24 mybranchcount $
0bf0: 74 63 0a 09 73 65 74 20 6d 79 74 61 67 63 6f 75 tc..set mytagcou
0c00: 6e 74 20 20 20 20 24 62 63 0a 09 73 65 74 20 6d nt $bc..set m
0c10: 79 63 6f 6d 6d 69 74 63 6f 75 6e 74 20 24 63 63 ycommitcount $cc
0c20: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
0c30: 20 20 20 20 6d 65 74 68 6f 64 20 63 6f 75 6e 74 method count
0c40: 61 73 62 72 61 6e 63 68 20 7b 7d 20 7b 20 69 6e asbranch {} { in
0c50: 63 72 20 6d 79 62 72 61 6e 63 68 63 6f 75 6e 74 cr mybranchcount
0c60: 20 3b 20 72 65 74 75 72 6e 20 7d 0a 20 20 20 20 ; return }.
0c70: 6d 65 74 68 6f 64 20 63 6f 75 6e 74 61 73 74 61 method countasta
0c80: 67 20 20 20 20 7b 7d 20 7b 20 69 6e 63 72 20 6d g {} { incr m
0c90: 79 74 61 67 63 6f 75 6e 74 20 20 20 20 3b 20 72 ytagcount ; r
0ca0: 65 74 75 72 6e 20 7d 0a 20 20 20 20 6d 65 74 68 eturn }. meth
0cb0: 6f 64 20 63 6f 75 6e 74 61 63 6f 6d 6d 69 74 20 od countacommit
0cc0: 20 7b 7d 20 7b 20 69 6e 63 72 20 6d 79 63 6f 6d {} { incr mycom
0cd0: 6d 69 74 63 6f 75 6e 74 20 3b 20 72 65 74 75 72 mitcount ; retur
0ce0: 6e 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 n }.. method
0cf0: 62 6c 6f 63 6b 65 64 62 79 20 7b 73 79 6d 62 6f blockedby {symbo
0d00: 6c 7d 20 7b 0a 09 23 20 52 65 6d 65 6d 62 65 72 l} {..# Remember
0d10: 20 74 68 65 20 73 79 6d 62 6f 6c 20 61 73 20 70 the symbol as p
0d20: 72 65 76 65 6e 74 69 6e 67 20 74 68 65 20 72 65 reventing the re
0d30: 6d 6f 76 61 6c 20 6f 66 20 74 68 69 73 0a 09 23 moval of this..#
0d40: 20 73 79 6d 62 6f 6c 2e 20 4f 74 20 69 73 20 61 symbol. Ot is a
0d50: 20 74 61 67 20 6f 72 20 62 72 61 6e 63 68 20 74 tag or branch t
0d60: 68 61 74 20 73 70 61 77 6e 65 64 20 66 72 6f 6d hat spawned from
0d70: 20 61 20 72 65 76 69 73 69 6f 6e 0a 09 23 20 6f a revision..# o
0d80: 6e 20 74 68 69 73 20 73 79 6d 62 6f 6c 2e 0a 0a n this symbol...
0d90: 09 73 74 72 75 63 74 3a 3a 73 65 74 20 69 6e 63 .struct::set inc
0da0: 6c 75 64 65 20 6d 79 62 6c 6f 63 6b 65 72 73 20 lude myblockers
0db0: 24 73 79 6d 62 6f 6c 0a 09 72 65 74 75 72 6e 0a $symbol..return.
0dc0: 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f }.. metho
0dd0: 64 20 70 6f 73 73 69 62 6c 65 70 61 72 65 6e 74 d possibleparent
0de0: 20 7b 73 79 6d 62 6f 6c 7d 20 7b 0a 09 6c 6f 67 {symbol} {..log
0df0: 20 77 72 69 74 65 20 39 20 73 79 6d 62 6f 6c 20 write 9 symbol
0e00: 22 50 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74 "Possible parent
0e10: 20 28 24 6d 79 6e 61 6d 65 29 20 3d 20 5b 24 73 ($myname) = [$s
0e20: 79 6d 62 6f 6c 20 6e 61 6d 65 5d 22 0a 0a 09 69 ymbol name]"...i
0e30: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists
0e40: 6d 79 70 70 61 72 65 6e 74 28 24 73 79 6d 62 6f mypparent($symbo
0e50: 6c 29 5d 7d 20 7b 0a 09 20 20 20 20 69 6e 63 72 l)]} {.. incr
0e60: 20 6d 79 70 70 61 72 65 6e 74 28 24 73 79 6d 62 mypparent($symb
0e70: 6f 6c 29 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 ol)..} else {..
0e80: 20 20 20 73 65 74 20 20 6d 79 70 70 61 72 65 6e set mypparen
0e90: 74 28 24 73 79 6d 62 6f 6c 29 20 31 0a 09 7d 0a t($symbol) 1..}.
0ea0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
0eb0: 20 20 20 6d 65 74 68 6f 64 20 69 73 67 68 6f 73 method isghos
0ec0: 74 20 7b 7d 20 7b 0a 09 23 20 43 68 65 63 6b 73 t {} {..# Checks
0ed0: 20 69 66 20 74 68 69 73 20 73 79 6d 62 6f 6c 20 if this symbol
0ee0: 28 61 73 20 6c 69 6e 65 20 6f 66 20 64 65 76 65 (as line of deve
0ef0: 6c 6f 70 6d 65 6e 74 29 20 6e 65 76 65 72 0a 09 lopment) never..
0f00: 23 20 65 78 69 73 74 65 64 2e 0a 0a 09 69 66 20 # existed....if
0f10: 7b 24 6d 79 63 6f 6d 6d 69 74 63 6f 75 6e 74 20 {$mycommitcount
0f20: 3e 20 30 7d 20 20 20 20 20 20 20 20 20 7b 20 72 > 0} { r
0f30: 65 74 75 72 6e 20 30 20 7d 0a 09 69 66 20 7b 5b eturn 0 }..if {[
0f40: 6c 6c 65 6e 67 74 68 20 24 6d 79 62 6c 6f 63 6b llength $myblock
0f50: 65 72 73 5d 7d 20 20 20 20 20 20 7b 20 72 65 74 ers]} { ret
0f60: 75 72 6e 20 30 20 7d 0a 09 69 66 20 7b 5b 61 72 urn 0 }..if {[ar
0f70: 72 61 79 20 73 69 7a 65 20 6d 79 70 70 61 72 65 ray size myppare
0f80: 6e 74 5d 20 3e 20 30 7d 20 7b 20 72 65 74 75 72 nt] > 0} { retur
0f90: 6e 20 30 20 7d 0a 0a 09 72 65 74 75 72 6e 20 31 n 0 }...return 1
0fa0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 . }.. # #
0fb0: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
0fc0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
0fd0: 23 23 23 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 ###.. method
0fe0: 70 65 72 73 69 73 74 72 65 76 20 7b 7d 20 7b 0a persistrev {} {.
0ff0: 09 73 65 74 20 70 69 64 20 5b 24 6d 79 70 72 6f .set pid [$mypro
1000: 6a 65 63 74 20 69 64 5d 0a 0a 09 73 74 61 74 65 ject id]...state
1010: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 transaction {..
1020: 20 20 20 20 73 74 61 74 65 20 72 75 6e 20 7b 0a state run {.
1030: 09 09 49 4e 53 45 52 54 20 49 4e 54 4f 20 73 79 ..INSERT INTO sy
1040: 6d 62 6f 6c 20 28 20 73 69 64 2c 20 20 20 70 69 mbol ( sid, pi
1050: 64 2c 20 20 6e 61 6d 65 2c 20 20 20 74 79 70 65 d, name, type
1060: 2c 20 20 20 20 20 74 61 67 5f 63 6f 75 6e 74 2c , tag_count,
1070: 20 20 20 62 72 61 6e 63 68 5f 63 6f 75 6e 74 2c branch_count,
1080: 20 20 20 63 6f 6d 6d 69 74 5f 63 6f 75 6e 74 29 commit_count)
1090: 0a 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 ...VALUES
10a0: 20 20 20 20 20 20 28 24 6d 79 69 64 2c 20 24 70 ($myid, $p
10b0: 69 64 2c 20 24 6d 79 6e 61 6d 65 2c 20 24 6d 79 id, $myname, $my
10c0: 75 6e 64 65 66 2c 20 24 6d 79 74 61 67 63 6f 75 undef, $mytagcou
10d0: 6e 74 2c 20 24 6d 79 62 72 61 6e 63 68 63 6f 75 nt, $mybranchcou
10e0: 6e 74 2c 20 24 6d 79 63 6f 6d 6d 69 74 63 6f 75 nt, $mycommitcou
10f0: 6e 74 29 3b 0a 09 20 20 20 20 7d 0a 09 20 20 20 nt);.. }..
1100: 20 66 6f 72 65 61 63 68 20 73 79 6d 62 6f 6c 20 foreach symbol
1110: 24 6d 79 62 6c 6f 63 6b 65 72 73 20 7b 0a 09 09 $myblockers {...
1120: 73 65 74 20 62 69 64 20 5b 24 73 79 6d 62 6f 6c set bid [$symbol
1130: 20 69 64 5d 0a 09 09 73 74 61 74 65 20 72 75 6e id]...state run
1140: 20 7b 0a 09 09 20 20 20 20 49 4e 53 45 52 54 20 {... INSERT
1150: 49 4e 54 4f 20 62 6c 6f 63 6b 65 72 20 28 73 69 INTO blocker (si
1160: 64 2c 20 20 20 62 69 64 29 0a 09 09 20 20 20 20 d, bid)...
1170: 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 VALUES
1180: 20 20 20 20 28 24 6d 79 69 64 2c 20 24 62 69 64 ($myid, $bid
1190: 29 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 20 );...}.. }..
11a0: 20 20 20 66 6f 72 65 61 63 68 20 7b 73 79 6d 62 foreach {symb
11b0: 6f 6c 20 63 6f 75 6e 74 7d 20 5b 61 72 72 61 79 ol count} [array
11c0: 20 67 65 74 20 6d 79 70 70 61 72 65 6e 74 5d 20 get mypparent]
11d0: 7b 0a 09 09 73 65 74 20 70 69 64 20 5b 24 73 79 {...set pid [$sy
11e0: 6d 62 6f 6c 20 69 64 5d 0a 09 09 73 74 61 74 65 mbol id]...state
11f0: 20 72 75 6e 20 7b 0a 09 09 20 20 20 20 49 4e 53 run {... INS
1200: 45 52 54 20 49 4e 54 4f 20 70 61 72 65 6e 74 20 ERT INTO parent
1210: 28 73 69 64 2c 20 20 20 70 69 64 2c 20 20 6e 29 (sid, pid, n)
1220: 0a 09 09 20 20 20 20 56 41 4c 55 45 53 20 20 20 ... VALUES
1230: 20 20 20 20 20 20 20 20 20 20 28 24 6d 79 69 64 ($myid
1240: 2c 20 24 70 69 64 2c 20 24 63 6f 75 6e 74 29 3b , $pid, $count);
1250: 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 7d 0a 09 ...}.. }..}..
1260: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 return. }..
1270: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
1280: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
1290: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
12a0: 20 53 74 61 74 65 0a 0a 20 20 20 20 76 61 72 69 State.. vari
12b0: 61 62 6c 65 20 6d 79 70 72 6f 6a 65 63 74 20 7b able myproject {
12c0: 7d 20 3b 20 23 20 52 65 66 65 72 65 6e 63 65 20 } ; # Reference
12d0: 74 6f 20 74 68 65 20 70 72 6f 6a 65 63 74 20 6f to the project o
12e0: 62 6a 65 63 74 0a 09 09 09 20 20 20 20 23 20 63 bject.... # c
12f0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 73 79 ontaining the sy
1300: 6d 62 6f 6c 2e 0a 20 20 20 20 76 61 72 69 61 62 mbol.. variab
1310: 6c 65 20 6d 79 6e 61 6d 65 20 20 20 20 7b 7d 20 le myname {}
1320: 3b 20 23 20 54 68 65 20 73 79 6d 62 6f 6c 27 73 ; # The symbol's
1330: 20 6e 61 6d 65 0a 20 20 20 20 76 61 72 69 61 62 name. variab
1340: 6c 65 20 6d 79 69 64 20 20 20 20 20 20 7b 7d 20 le myid {}
1350: 3b 20 23 20 52 65 70 6f 73 69 74 6f 72 79 20 77 ; # Repository w
1360: 69 64 65 20 6e 75 6d 65 72 69 63 20 69 64 20 6f ide numeric id o
1370: 66 20 74 68 65 0a 09 09 09 20 20 20 20 23 20 73 f the.... # s
1380: 79 6d 62 6f 6c 2e 20 54 68 69 73 20 69 6d 70 6c ymbol. This impl
1390: 69 63 69 74 6c 79 20 65 6e 63 6f 64 65 73 20 74 icitly encodes t
13a0: 68 65 0a 09 09 09 20 20 20 20 23 20 70 72 6f 6a he.... # proj
13b0: 65 63 74 20 61 73 20 77 65 6c 6c 2e 0a 0a 20 20 ect as well...
13c0: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 72 61 variable mybra
13d0: 6e 63 68 63 6f 75 6e 74 20 30 20 3b 20 23 20 43 nchcount 0 ; # C
13e0: 6f 75 6e 74 20 68 6f 77 20 6d 61 6e 79 20 75 73 ount how many us
13f0: 65 73 20 61 73 20 62 72 61 6e 63 68 2e 0a 20 20 es as branch..
1400: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 74 61 67 variable mytag
1410: 63 6f 75 6e 74 20 20 20 20 30 20 3b 20 23 20 43 count 0 ; # C
1420: 6f 75 6e 74 20 68 6f 77 20 6d 61 6e 79 20 75 73 ount how many us
1430: 65 73 20 61 73 20 74 61 67 2e 0a 20 20 20 20 76 es as tag.. v
1440: 61 72 69 61 62 6c 65 20 6d 79 63 6f 6d 6d 69 74 ariable mycommit
1450: 63 6f 75 6e 74 20 30 20 3b 20 23 20 43 6f 75 6e count 0 ; # Coun
1460: 74 20 68 6f 77 20 6d 61 6e 79 20 66 69 6c 65 73 t how many files
1470: 20 64 69 64 20 61 20 63 6f 6d 6d 69 74 20 6f 6e did a commit on
1480: 20 74 68 65 20 73 79 6d 62 6f 6c 2e 0a 0a 20 20 the symbol...
1490: 20 20 76 61 72 69 61 62 6c 65 20 6d 79 62 6c 6f variable myblo
14a0: 63 6b 65 72 73 20 20 20 7b 7d 20 3b 20 23 20 4c ckers {} ; # L
14b0: 69 73 74 20 28 53 65 74 29 20 6f 66 20 74 68 65 ist (Set) of the
14c0: 20 73 79 6d 62 6f 6c 73 20 77 68 69 63 68 20 62 symbols which b
14d0: 6c 6f 63 6b 0a 09 09 09 20 20 20 20 20 20 20 23 lock.... #
14e0: 20 74 68 65 20 65 78 63 6c 75 73 69 6f 6e 20 6f the exclusion o
14f0: 66 20 74 68 69 73 20 73 79 6d 62 6f 6c 2e 0a 0a f this symbol...
1500: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6d 79 70 variable myp
1510: 70 61 72 65 6e 74 20 2d 61 72 72 61 79 20 7b 7d parent -array {}
1520: 20 3b 20 23 20 4d 61 70 73 20 66 72 6f 6d 20 73 ; # Maps from s
1530: 79 6d 62 6f 6c 73 20 74 6f 20 74 68 65 20 6e 75 ymbols to the nu
1540: 6d 62 65 72 0a 09 09 09 09 20 20 20 23 20 6f 66 mber..... # of
1550: 20 66 69 6c 65 73 20 69 6e 20 77 68 69 63 68 20 files in which
1560: 69 74 20 63 6f 75 6c 64 20 68 61 76 65 0a 09 09 it could have...
1570: 09 09 20 20 20 23 20 62 65 65 6e 20 61 20 70 61 .. # been a pa
1580: 72 65 6e 74 20 6f 66 20 74 68 69 73 20 73 79 6d rent of this sym
1590: 62 6f 6c 2e 0a 0a 20 20 20 20 76 61 72 69 61 62 bol... variab
15a0: 6c 65 20 6d 79 74 79 70 65 20 7b 7d 20 3b 20 23 le mytype {} ; #
15b0: 20 54 68 65 20 74 79 70 65 20 63 68 6f 73 65 6e The type chosen
15c0: 20 66 6f 72 20 74 68 65 20 73 79 6d 62 6f 6c 20 for the symbol
15d0: 74 6f 20 75 73 65 20 69 6e 0a 09 09 09 20 23 20 to use in.... #
15e0: 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 2e 0a the conversion..
15f0: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
1600: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
1610: 23 23 23 23 23 23 23 23 23 23 23 23 0a 0a 20 20 ############..
1620: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 65 78 63 typemethod exc
1630: 6c 75 64 65 20 7b 70 61 74 74 65 72 6e 7d 20 7b lude {pattern} {
1640: 0a 09 23 20 53 74 6f 72 65 20 74 68 65 20 70 61 ..# Store the pa
1650: 74 74 65 72 6e 20 69 6e 20 6d 65 6d 6f 72 79 20 ttern in memory
1660: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20 63 for use by the c
1670: 6f 64 65 20 64 6f 69 6e 67 20 74 79 70 65 0a 09 ode doing type..
1680: 23 20 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 2e # determination.
1690: 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79 65 78 63 ...lappend myexc
16a0: 6c 75 64 65 70 61 74 74 65 72 6e 20 5b 50 72 6f ludepattern [Pro
16b0: 63 65 73 73 50 61 74 74 65 72 6e 20 24 70 61 74 cessPattern $pat
16c0: 74 65 72 6e 20 65 78 63 6c 75 73 69 6f 6e 5d 0a tern exclusion].
16d0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
16e0: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 66 6f typemethod fo
16f0: 72 63 65 74 61 67 20 7b 70 61 74 74 65 72 6e 7d rcetag {pattern}
1700: 20 7b 0a 09 23 20 53 74 6f 72 65 20 74 68 65 20 {..# Store the
1710: 70 61 74 74 65 72 6e 20 69 6e 20 6d 65 6d 6f 72 pattern in memor
1720: 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 y for use by the
1730: 20 63 6f 64 65 20 64 6f 69 6e 67 20 74 79 70 65 code doing type
1740: 0a 09 23 20 64 65 74 65 72 6d 69 6e 61 74 69 6f ..# determinatio
1750: 6e 2e 0a 0a 09 6c 61 70 70 65 6e 64 20 6d 79 66 n....lappend myf
1760: 6f 72 63 65 70 61 74 74 65 72 6e 20 5b 50 72 6f orcepattern [Pro
1770: 63 65 73 73 50 61 74 74 65 72 6e 20 24 70 61 74 cessPattern $pat
1780: 74 65 72 6e 20 66 6f 72 63 65 2d 74 61 67 5d 20 tern force-tag]
1790: 24 6d 79 74 61 67 0a 09 72 65 74 75 72 6e 0a 20 $mytag..return.
17a0: 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 }.. typeme
17b0: 74 68 6f 64 20 66 6f 72 63 65 62 72 61 6e 63 68 thod forcebranch
17c0: 20 7b 70 61 74 74 65 72 6e 7d 20 7b 0a 09 23 20 {pattern} {..#
17d0: 53 74 6f 72 65 20 74 68 65 20 70 61 74 74 65 72 Store the patter
17e0: 6e 20 69 6e 20 6d 65 6d 6f 72 79 20 66 6f 72 20 n in memory for
17f0: 75 73 65 20 62 79 20 74 68 65 20 63 6f 64 65 20 use by the code
1800: 64 6f 69 6e 67 20 74 79 70 65 0a 09 23 20 64 65 doing type..# de
1810: 74 65 72 6d 69 6e 61 74 69 6f 6e 2e 0a 0a 09 6c termination....l
1820: 61 70 70 65 6e 64 20 6d 79 66 6f 72 63 65 70 61 append myforcepa
1830: 74 74 65 72 6e 20 5b 50 72 6f 63 65 73 73 50 61 ttern [ProcessPa
1840: 74 74 65 72 6e 20 24 70 61 74 74 65 72 6e 20 66 ttern $pattern f
1850: 6f 72 63 65 2d 62 72 61 6e 63 68 5d 20 24 6d 79 orce-branch] $my
1860: 62 72 61 6e 63 68 0a 09 72 65 74 75 72 6e 0a 20 branch..return.
1870: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 50 }.. proc P
1880: 72 6f 63 65 73 73 50 61 74 74 65 72 6e 20 7b 70 rocessPattern {p
1890: 61 74 74 65 72 6e 20 6c 61 62 65 6c 7d 20 7b 0a attern label} {.
18a0: 09 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 .if {[string mat
18b0: 63 68 20 2a 3a 2a 3a 2a 20 24 70 61 74 74 65 72 ch *:*:* $patter
18c0: 6e 5d 7d 20 7b 0a 09 20 20 20 20 23 20 42 61 64 n]} {.. # Bad
18d0: 20 73 79 6e 74 61 78 20 66 6f 72 20 74 68 65 20 syntax for the
18e0: 70 61 74 74 65 72 6e 2c 20 75 73 69 6e 67 20 6d pattern, using m
18f0: 75 6c 74 69 70 6c 65 20 63 6f 6c 6f 6e 73 2e 0a ultiple colons..
1900: 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 66 61 .. trouble fa
1910: 74 61 6c 20 22 42 61 64 20 24 6c 61 62 65 6c 20 tal "Bad $label
1920: 70 61 74 74 65 72 6e 20 27 24 70 61 74 74 65 72 pattern '$patter
1930: 6e 27 22 0a 09 7d 20 65 6c 73 65 69 66 20 7b 21 n'"..} elseif {!
1940: 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 2a 3a [string match *:
1950: 2a 20 24 70 61 74 74 65 72 6e 5d 7d 20 7b 0a 09 * $pattern]} {..
1960: 20 20 20 20 23 20 57 68 65 6e 20 6f 6e 6c 79 20 # When only
1970: 61 20 73 79 6d 62 6f 6c 20 70 61 74 74 65 72 6e a symbol pattern
1980: 20 69 73 20 73 70 65 63 69 66 69 65 64 20 69 74 is specified it
1990: 20 61 70 70 6c 69 65 73 20 74 6f 0a 09 20 20 20 applies to..
19a0: 20 23 20 61 6c 6c 20 70 72 6f 6a 65 63 74 73 2e # all projects.
19b0: 0a 0a 09 20 20 20 20 72 65 74 75 72 6e 20 5b 6c ... return [l
19c0: 69 73 74 20 2a 20 24 70 61 74 74 65 72 6e 5d 0a ist * $pattern].
19d0: 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 .} else {.. #
19e0: 20 42 6f 74 68 20 70 72 6f 6a 65 63 74 20 61 6e Both project an
19f0: 64 20 73 79 6d 62 6f 6c 20 70 61 74 74 65 72 6e d symbol pattern
1a00: 73 20 61 72 65 20 70 72 65 73 65 6e 74 2c 20 77 s are present, w
1a10: 65 20 73 70 6c 69 74 0a 09 20 20 20 20 23 20 74 e split.. # t
1a20: 68 65 6d 20 61 70 61 72 74 20 6e 6f 77 20 66 6f hem apart now fo
1a30: 72 20 73 74 6f 72 61 67 65 20 61 6e 64 20 65 61 r storage and ea
1a40: 73 69 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 sier extraction
1a50: 6c 61 74 65 72 2e 0a 0a 09 20 20 20 20 72 65 74 later.... ret
1a60: 75 72 6e 20 5b 73 70 6c 69 74 20 24 70 61 74 74 urn [split $patt
1a70: 65 72 6e 20 3a 5d 0a 09 7d 0a 20 20 20 20 7d 0a ern :]..}. }.
1a80: 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c . typevariabl
1a90: 65 20 6d 79 65 78 63 6c 75 64 65 70 61 74 74 65 e myexcludepatte
1aa0: 72 6e 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20 6f rn {} ; # List o
1ab0: 66 20 70 61 74 74 65 72 6e 73 20 73 70 65 63 69 f patterns speci
1ac0: 66 79 69 6e 67 0a 09 09 09 09 20 20 20 20 20 20 fying.....
1ad0: 20 23 20 74 68 65 20 73 79 6d 62 6f 6c 73 20 74 # the symbols t
1ae0: 6f 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 0a 09 o exclude from..
1af0: 09 09 09 20 20 20 20 20 20 20 23 20 63 6f 6e 76 ... # conv
1b00: 65 72 73 69 6f 6e 2e 20 54 61 67 73 20 61 6e 64 ersion. Tags and
1b10: 2f 6f 72 0a 09 09 09 09 20 20 20 20 20 20 20 23 /or..... #
1b20: 20 62 72 61 6e 63 68 65 73 2e 0a 0a 20 20 20 20 branches...
1b30: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 66 typevariable myf
1b40: 6f 72 63 65 70 61 74 74 65 72 6e 20 7b 7d 20 3b orcepattern {} ;
1b50: 20 23 20 4c 69 73 74 20 6f 66 20 70 61 74 74 65 # List of patte
1b60: 72 6e 73 20 61 6e 64 20 74 79 70 65 73 0a 09 09 rns and types...
1b70: 09 09 20 20 20 20 20 23 20 73 70 65 63 69 66 79 .. # specify
1b80: 69 6e 67 20 77 68 69 63 68 20 73 79 6d 62 6f 6c ing which symbol
1b90: 73 20 74 6f 0a 09 09 09 09 20 20 20 20 20 23 20 s to..... #
1ba0: 66 6f 72 63 65 20 74 6f 20 73 70 65 63 69 66 69 force to specifi
1bb0: 63 20 74 79 70 65 73 2e 0a 0a 20 20 20 20 74 79 c types... ty
1bc0: 70 65 6d 65 74 68 6f 64 20 67 65 74 73 79 6d 74 pemethod getsymt
1bd0: 79 70 65 73 20 7b 7d 20 7b 0a 09 73 74 61 74 65 ypes {} {..state
1be0: 20 66 6f 72 65 61 63 68 72 6f 77 20 7b 0a 09 20 foreachrow {..
1bf0: 20 20 20 53 45 4c 45 43 54 20 74 69 64 2c 20 6e SELECT tid, n
1c00: 61 6d 65 20 46 52 4f 4d 20 73 79 6d 74 79 70 65 ame FROM symtype
1c10: 3b 0a 09 7d 20 7b 20 73 65 74 20 6d 79 73 79 6d ;..} { set mysym
1c20: 74 79 70 65 28 24 74 69 64 29 20 24 6e 61 6d 65 type($tid) $name
1c30: 20 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d }..return. }
1c40: 0a 0a 20 20 20 20 23 20 4b 65 65 70 20 74 68 65 .. # Keep the
1c50: 20 63 6f 64 65 73 20 62 65 6c 6f 77 20 69 6e 20 codes below in
1c60: 73 79 6e 63 20 77 69 74 68 20 27 70 61 73 73 3a sync with 'pass:
1c70: 3a 63 6f 6c 6c 72 65 76 2f 73 65 74 75 70 28 27 :collrev/setup('
1c80: 73 79 6d 74 79 70 65 27 29 2e 0a 20 20 20 20 74 symtype').. t
1c90: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 65 78 ypevariable myex
1ca0: 63 6c 75 64 65 64 20 20 20 20 20 20 20 20 30 20 cluded 0
1cb0: 3b 20 23 20 43 6f 64 65 20 66 6f 72 20 73 79 6d ; # Code for sym
1cc0: 62 6f 6c 73 20 77 68 69 63 68 20 61 72 65 20 65 bols which are e
1cd0: 78 63 6c 75 64 65 64 2e 0a 20 20 20 20 74 79 70 xcluded.. typ
1ce0: 65 76 61 72 69 61 62 6c 65 20 6d 79 74 61 67 20 evariable mytag
1cf0: 20 20 20 20 20 20 20 20 20 20 20 20 31 20 3b 20 1 ;
1d00: 23 20 43 6f 64 65 20 66 6f 72 20 73 79 6d 62 6f # Code for symbo
1d10: 6c 73 20 77 68 69 63 68 20 61 72 65 20 74 61 67 ls which are tag
1d20: 73 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 s.. typevaria
1d30: 62 6c 65 20 6d 79 62 72 61 6e 63 68 20 20 20 20 ble mybranch
1d40: 20 20 20 20 20 20 32 20 3b 20 23 20 43 6f 64 65 2 ; # Code
1d50: 20 66 6f 72 20 73 79 6d 62 6f 6c 73 20 77 68 69 for symbols whi
1d60: 63 68 20 61 72 65 20 62 72 61 6e 63 68 65 73 2e ch are branches.
1d70: 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c . typevariabl
1d80: 65 20 6d 79 75 6e 64 65 66 20 20 20 20 20 20 20 e myundef
1d90: 20 20 20 20 33 20 3b 20 23 20 43 6f 64 65 20 66 3 ; # Code f
1da0: 6f 72 20 73 79 6d 62 6f 6c 73 20 6f 66 20 75 6e or symbols of un
1db0: 6b 6e 6f 77 6e 20 74 79 70 65 2e 0a 20 20 20 20 known type..
1dc0: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 73 typevariable mys
1dd0: 79 6d 74 79 70 65 20 2d 61 72 72 61 79 20 7b 7d ymtype -array {}
1de0: 20 3b 20 23 20 4d 61 70 20 66 72 6f 6d 20 74 79 ; # Map from ty
1df0: 70 65 20 63 6f 64 65 20 74 6f 20 6c 61 62 65 6c pe code to label
1e00: 20 66 6f 72 20 74 68 65 20 6c 6f 67 2e 0a 0a 20 for the log...
1e10: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 75 6e typemethod un
1e20: 64 65 66 20 20 20 20 7b 7d 20 7b 20 72 65 74 75 def {} { retu
1e30: 72 6e 20 24 6d 79 75 6e 64 65 66 20 20 20 20 7d rn $myundef }
1e40: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
1e50: 65 78 63 6c 75 64 65 64 20 7b 7d 20 7b 20 72 65 excluded {} { re
1e60: 74 75 72 6e 20 24 6d 79 65 78 63 6c 75 64 65 64 turn $myexcluded
1e70: 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }. typemetho
1e80: 64 20 74 61 67 20 20 20 20 20 20 7b 7d 20 7b 20 d tag {} {
1e90: 72 65 74 75 72 6e 20 24 6d 79 74 61 67 20 20 20 return $mytag
1ea0: 20 20 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 }. typemet
1eb0: 68 6f 64 20 62 72 61 6e 63 68 20 20 20 7b 7d 20 hod branch {}
1ec0: 7b 20 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e { return $mybran
1ed0: 63 68 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 ch }.. type
1ee0: 6d 65 74 68 6f 64 20 70 72 69 6e 74 72 75 6c 65 method printrule
1ef0: 73 74 61 74 69 73 74 69 63 73 20 7b 7d 20 7b 0a statistics {} {.
1f00: 09 6c 6f 67 20 77 72 69 74 65 20 32 20 73 79 6d .log write 2 sym
1f10: 62 6f 6c 20 22 52 75 6c 65 20 75 73 61 67 65 20 bol "Rule usage
1f20: 73 74 61 74 69 73 74 69 63 73 3a 22 0a 0a 09 73 statistics:"...s
1f30: 65 74 20 66 6d 74 20 25 5b 73 74 72 69 6e 67 20 et fmt %[string
1f40: 6c 65 6e 67 74 68 20 24 6d 79 6e 75 6d 5d 73 0a length $mynum]s.
1f50: 09 73 65 74 20 61 6c 6c 20 30 0a 0a 09 66 6f 72 .set all 0...for
1f60: 65 61 63 68 20 6b 65 79 20 5b 6c 73 6f 72 74 20 each key [lsort
1f70: 5b 61 72 72 61 79 20 6e 61 6d 65 73 20 6d 79 72 [array names myr
1f80: 75 6c 65 63 6f 75 6e 74 5d 5d 20 7b 0a 09 20 20 ulecount]] {..
1f90: 20 20 6c 6f 67 20 77 72 69 74 65 20 32 20 73 79 log write 2 sy
1fa0: 6d 62 6f 6c 20 22 2a 20 5b 66 6f 72 6d 61 74 20 mbol "* [format
1fb0: 24 66 6d 74 20 24 6d 79 72 75 6c 65 63 6f 75 6e $fmt $myrulecoun
1fc0: 74 28 24 6b 65 79 29 5d 20 24 6b 65 79 22 0a 09 t($key)] $key"..
1fd0: 20 20 20 20 69 6e 63 72 20 61 6c 6c 20 24 6d 79 incr all $my
1fe0: 72 75 6c 65 63 6f 75 6e 74 28 24 6b 65 79 29 0a rulecount($key).
1ff0: 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 32 .}...log write 2
2000: 20 73 79 6d 62 6f 6c 20 22 3d 20 5b 66 6f 72 6d symbol "= [form
2010: 61 74 20 24 66 6d 74 20 24 61 6c 6c 5d 20 74 6f at $fmt $all] to
2020: 74 61 6c 22 0a 09 72 65 74 75 72 6e 0a 20 20 20 tal"..return.
2030: 20 7d 0a 0a 20 20 20 20 23 20 53 74 61 74 69 73 }.. # Statis
2040: 74 69 63 73 20 6f 6e 20 68 6f 77 20 6f 66 74 65 tics on how ofte
2050: 6e 20 65 61 63 68 20 27 72 75 6c 65 27 20 77 61 n each 'rule' wa
2060: 73 20 75 73 65 64 20 74 6f 20 64 65 63 69 64 65 s used to decide
2070: 20 6f 6e 20 74 68 65 0a 20 20 20 20 23 20 74 79 on the. # ty
2080: 70 65 20 6f 66 20 61 20 73 79 6d 62 6f 6c 2e 0a pe of a symbol..
2090: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 typevariable
20a0: 20 6d 79 72 75 6c 65 63 6f 75 6e 74 20 2d 61 72 myrulecount -ar
20b0: 72 61 79 20 7b 0a 09 48 61 73 43 6f 6d 6d 69 74 ray {..HasCommit
20c0: 73 20 30 0a 09 49 73 54 68 65 54 72 75 6e 6b 20 s 0..IsTheTrunk
20d0: 30 0a 09 55 6e 61 6d 62 69 67 6f 75 73 20 30 0a 0..Unambigous 0.
20e0: 09 55 6e 64 65 63 69 64 65 64 5f 20 30 0a 09 55 .Undecided_ 0..U
20f0: 73 65 72 43 6f 6e 66 69 67 20 30 0a 09 56 6f 74 serConfig 0..Vot
2100: 65 43 6f 75 6e 74 73 20 30 0a 20 20 20 20 7d 0a eCounts 0. }.
2110: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
2120: 70 72 69 6e 74 74 79 70 65 73 74 61 74 69 73 74 printtypestatist
2130: 69 63 73 20 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72 ics {} {..log wr
2140: 69 74 65 20 32 20 73 79 6d 62 6f 6c 20 22 53 79 ite 2 symbol "Sy
2150: 6d 62 6f 6c 20 74 79 70 65 20 73 74 61 74 69 73 mbol type statis
2160: 74 69 63 73 3a 22 0a 0a 09 73 65 74 20 66 6d 74 tics:"...set fmt
2170: 20 25 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 %[string length
2180: 20 24 6d 79 6e 75 6d 5d 73 0a 09 73 65 74 20 61 $mynum]s..set a
2190: 6c 6c 20 30 0a 0a 09 73 74 61 74 65 20 66 6f 72 ll 0...state for
21a0: 65 61 63 68 72 6f 77 20 7b 0a 09 20 20 20 20 53 eachrow {.. S
21b0: 45 4c 45 43 54 20 54 2e 6e 61 6d 65 20 20 20 20 ELECT T.name
21c0: 20 20 20 20 41 53 20 73 74 79 70 65 2c 0a 09 20 AS stype,..
21d0: 20 20 20 20 20 20 20 20 20 20 54 2e 70 6c 75 72 T.plur
21e0: 61 6c 20 20 20 20 20 20 41 53 20 73 70 6c 75 72 al AS splur
21f0: 61 6c 2c 0a 09 20 20 20 20 20 20 20 20 20 20 20 al,..
2200: 43 4f 55 4e 54 20 28 73 2e 73 69 64 29 20 41 53 COUNT (s.sid) AS
2210: 20 6e 0a 09 20 20 20 20 46 52 4f 4d 20 73 79 6d n.. FROM sym
2220: 62 6f 6c 20 53 2c 20 73 79 6d 74 79 70 65 20 54 bol S, symtype T
2230: 0a 09 20 20 20 20 57 48 45 52 45 20 53 2e 74 79 .. WHERE S.ty
2240: 70 65 20 3d 20 54 2e 74 69 64 0a 09 20 20 20 20 pe = T.tid..
2250: 47 52 4f 55 50 20 42 59 20 54 2e 6e 61 6d 65 0a GROUP BY T.name.
2260: 09 20 20 20 20 4f 52 44 45 52 20 42 59 20 54 2e . ORDER BY T.
2270: 6e 61 6d 65 0a 09 7d 20 7b 0a 09 20 20 20 20 6c name..} {.. l
2280: 6f 67 20 77 72 69 74 65 20 32 20 73 79 6d 62 6f og write 2 symbo
2290: 6c 20 22 2a 20 5b 66 6f 72 6d 61 74 20 24 66 6d l "* [format $fm
22a0: 74 20 24 6e 5d 20 5b 73 70 20 24 6e 20 24 73 74 t $n] [sp $n $st
22b0: 79 70 65 20 24 73 70 6c 75 72 61 6c 5d 22 0a 09 ype $splural]"..
22c0: 20 20 20 20 69 6e 63 72 20 61 6c 6c 20 24 6e 0a incr all $n.
22d0: 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 32 .}...log write 2
22e0: 20 73 79 6d 62 6f 6c 20 22 3d 20 5b 66 6f 72 6d symbol "= [form
22f0: 61 74 20 24 66 6d 74 20 24 61 6c 6c 5d 20 74 6f at $fmt $all] to
2300: 74 61 6c 22 0a 09 72 65 74 75 72 6e 0a 20 20 20 tal"..return.
2310: 20 7d 0a 0a 20 20 20 20 74 79 70 65 76 61 72 69 }.. typevari
2320: 61 62 6c 65 20 6d 79 6e 75 6d 20 30 0a 0a 20 20 able mynum 0..
2330: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
2340: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
2350: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 #########. ##
2360: 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64 Internal method
2370: 73 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 55 73 s.. method Us
2380: 65 72 43 6f 6e 66 69 67 20 7b 7d 20 7b 0a 09 73 erConfig {} {..s
2390: 65 74 20 70 72 6f 6a 65 63 74 20 5b 24 6d 79 70 et project [$myp
23a0: 72 6f 6a 65 63 74 20 62 61 73 65 5d 0a 0a 09 23 roject base]...#
23b0: 20 46 69 72 73 74 20 63 68 65 63 6b 20 69 66 20 First check if
23c0: 74 68 65 20 75 73 65 72 20 72 65 71 75 65 73 74 the user request
23d0: 65 64 20 74 68 65 20 65 78 63 6c 75 73 69 6f 6e ed the exclusion
23e0: 20 6f 66 20 74 68 65 0a 09 23 20 73 79 6d 62 6f of the..# symbo
23f0: 6c 20 66 72 6f 6d 20 63 6f 6e 76 65 72 73 69 6f l from conversio
2400: 6e 2e 0a 0a 09 66 6f 72 65 61 63 68 20 65 78 20 n....foreach ex
2410: 24 6d 79 65 78 63 6c 75 64 65 70 61 74 74 65 72 $myexcludepatter
2420: 6e 20 7b 0a 09 20 20 20 20 73 74 72 75 63 74 3a n {.. struct:
2430: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 65 78 :list assign $ex
2440: 20 70 70 20 73 70 0a 09 20 20 20 20 69 66 20 7b pp sp.. if {
2450: 21 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 ![string match $
2460: 70 70 20 24 70 72 6f 6a 65 63 74 5d 7d 20 63 6f pp $project]} co
2470: 6e 74 69 6e 75 65 0a 09 20 20 20 20 69 66 20 7b ntinue.. if {
2480: 21 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 ![string match $
2490: 73 70 20 24 6d 79 6e 61 6d 65 5d 7d 20 20 63 6f sp $myname]} co
24a0: 6e 74 69 6e 75 65 0a 09 20 20 20 20 72 65 74 75 ntinue.. retu
24b0: 72 6e 20 24 6d 79 65 78 63 6c 75 64 65 64 0a 09 rn $myexcluded..
24c0: 7d 0a 0a 09 23 20 49 66 20 74 68 65 20 73 79 6d }...# If the sym
24d0: 62 6f 6c 20 69 73 20 6e 6f 74 20 65 78 63 6c 75 bol is not exclu
24e0: 64 65 64 20 66 75 72 74 68 65 72 20 63 68 65 63 ded further chec
24f0: 6b 20 69 66 20 74 68 65 20 75 73 65 72 0a 09 23 k if the user..#
2500: 20 66 6f 72 63 65 73 20 69 74 73 20 63 6f 6e 76 forces its conv
2510: 65 72 73 69 6f 6e 20 61 73 20 61 20 73 70 65 63 ersion as a spec
2520: 69 66 69 63 20 74 79 70 65 2e 0a 0a 09 66 6f 72 ific type....for
2530: 65 61 63 68 20 7b 65 78 20 73 74 79 70 65 7d 20 each {ex stype}
2540: 24 6d 79 66 6f 72 63 65 70 61 74 74 65 72 6e 20 $myforcepattern
2550: 7b 0a 09 20 20 20 20 73 74 72 75 63 74 3a 3a 6c {.. struct::l
2560: 69 73 74 20 61 73 73 69 67 6e 20 24 65 78 20 70 ist assign $ex p
2570: 70 20 73 70 0a 09 20 20 20 20 69 66 20 7b 21 5b p sp.. if {![
2580: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 70 70 string match $pp
2590: 20 24 70 72 6f 6a 65 63 74 5d 7d 20 63 6f 6e 74 $project]} cont
25a0: 69 6e 75 65 0a 09 20 20 20 20 69 66 20 7b 21 5b inue.. if {![
25b0: 73 74 72 69 6e 67 20 6d 61 74 63 68 20 24 73 70 string match $sp
25c0: 20 24 6d 79 6e 61 6d 65 5d 7d 20 20 63 6f 6e 74 $myname]} cont
25d0: 69 6e 75 65 0a 09 20 20 20 20 72 65 74 75 72 6e inue.. return
25e0: 20 24 73 74 79 70 65 0a 09 7d 0a 0a 09 23 20 4e $stype..}...# N
25f0: 6f 74 68 69 6e 67 20 69 73 20 66 6f 72 63 65 64 othing is forced
2600: 2c 20 68 61 76 65 20 74 68 65 20 6d 61 69 6e 20 , have the main
2610: 73 79 73 74 65 6d 20 68 61 6e 64 20 74 68 65 20 system hand the
2620: 73 79 6d 62 6f 6c 20 6f 76 65 72 0a 09 23 20 74 symbol over..# t
2630: 6f 20 74 68 65 20 72 65 67 75 6c 61 72 20 68 65 o the regular he
2640: 75 72 69 73 74 69 63 73 2e 0a 0a 09 72 65 74 75 uristics....retu
2650: 72 6e 20 24 6d 79 75 6e 64 65 66 0a 20 20 20 20 rn $myundef.
2660: 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 20 55 6e }.. method Un
2670: 61 6d 62 69 67 6f 75 73 20 7b 7d 20 7b 0a 09 23 ambigous {} {..#
2680: 20 49 66 20 61 20 73 79 6d 62 6f 6c 20 69 73 20 If a symbol is
2690: 75 73 65 64 20 75 6e 61 6d 62 69 67 75 6f 75 73 used unambiguous
26a0: 6c 79 20 61 73 20 61 20 74 61 67 2f 62 72 61 6e ly as a tag/bran
26b0: 63 68 2c 20 63 6f 6e 76 65 72 74 0a 09 23 20 69 ch, convert..# i
26c0: 74 20 61 73 20 73 75 63 68 2e 0a 0a 09 73 65 74 t as such....set
26d0: 20 69 73 74 61 67 20 20 20 20 5b 65 78 70 72 20 istag [expr
26e0: 7b 24 6d 79 74 61 67 63 6f 75 6e 74 20 20 20 20 {$mytagcount
26f0: 3e 20 30 7d 5d 0a 09 73 65 74 20 69 73 62 72 61 > 0}]..set isbra
2700: 6e 63 68 20 5b 65 78 70 72 20 7b 24 6d 79 62 72 nch [expr {$mybr
2710: 61 6e 63 68 63 6f 75 6e 74 20 3e 20 30 20 7c 7c anchcount > 0 ||
2720: 20 24 6d 79 63 6f 6d 6d 69 74 63 6f 75 6e 74 20 $mycommitcount
2730: 3e 20 30 7d 5d 0a 0a 09 69 66 20 7b 24 69 73 74 > 0}]...if {$ist
2740: 61 67 20 26 26 20 24 69 73 62 72 61 6e 63 68 7d ag && $isbranch}
2750: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 75 6e 64 { return $myund
2760: 65 66 20 20 7d 0a 09 69 66 20 7b 24 69 73 74 61 ef }..if {$ista
2770: 67 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20 g}
2780: 7b 20 72 65 74 75 72 6e 20 24 6d 79 74 61 67 20 { return $mytag
2790: 20 20 20 7d 0a 09 69 66 20 7b 24 69 73 62 72 61 }..if {$isbra
27a0: 6e 63 68 7d 20 20 20 20 20 20 20 20 20 20 20 7b nch} {
27b0: 20 72 65 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 return $mybranc
27c0: 68 20 7d 0a 0a 09 23 20 53 79 6d 62 6f 6c 20 77 h }...# Symbol w
27d0: 61 73 20 6e 6f 74 20 75 73 65 64 20 61 74 20 61 as not used at a
27e0: 6c 6c 2e 0a 09 72 65 74 75 72 6e 20 24 6d 79 75 ll...return $myu
27f0: 6e 64 65 66 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ndef. }..
2800: 6d 65 74 68 6f 64 20 48 61 73 43 6f 6d 6d 69 74 method HasCommit
2810: 73 20 7b 7d 20 7b 0a 09 23 20 49 66 20 74 68 65 s {} {..# If the
2820: 72 65 20 77 61 73 20 65 76 65 72 20 61 20 63 6f re was ever a co
2830: 6d 6d 69 74 20 6f 6e 20 74 68 65 20 73 79 6d 62 mmit on the symb
2840: 6f 6c 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 61 ol, convert it a
2850: 73 20 61 0a 09 23 20 62 72 61 6e 63 68 2e 0a 0a s a..# branch...
2860: 09 69 66 20 7b 24 6d 79 63 6f 6d 6d 69 74 63 6f .if {$mycommitco
2870: 75 6e 74 20 3e 20 30 7d 20 7b 20 72 65 74 75 72 unt > 0} { retur
2880: 6e 20 24 6d 79 62 72 61 6e 63 68 20 7d 0a 09 72 n $mybranch }..r
2890: 65 74 75 72 6e 20 24 6d 79 75 6e 64 65 66 0a 20 eturn $myundef.
28a0: 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 68 6f 64 }.. method
28b0: 20 56 6f 74 65 43 6f 75 6e 74 73 20 7b 7d 20 7b VoteCounts {} {
28c0: 0a 09 23 20 43 6f 6e 76 65 72 74 20 74 68 65 20 ..# Convert the
28d0: 73 79 6d 62 6f 6c 20 62 61 73 65 64 20 6f 6e 20 symbol based on
28e0: 68 6f 77 20 6f 66 74 65 6e 20 69 74 20 77 61 73 how often it was
28f0: 20 75 73 65 64 20 61 73 20 61 0a 09 23 20 62 72 used as a..# br
2900: 61 6e 63 68 2f 74 61 67 2e 20 57 68 69 63 68 65 anch/tag. Whiche
2910: 76 65 72 20 68 61 70 70 65 6e 65 64 20 6d 6f 72 ver happened mor
2920: 65 20 6f 66 74 65 6e 20 64 65 74 65 72 6d 69 6e e often determin
2930: 65 73 20 68 6f 77 20 74 68 65 0a 09 23 20 73 79 es how the..# sy
2940: 6d 62 6f 6c 20 69 73 20 63 6f 6e 76 65 72 74 65 mbol is converte
2950: 64 2e 0a 0a 09 69 66 20 7b 24 6d 79 74 61 67 63 d....if {$mytagc
2960: 6f 75 6e 74 20 3e 20 24 6d 79 62 72 61 6e 63 68 ount > $mybranch
2970: 63 6f 75 6e 74 7d 20 7b 20 72 65 74 75 72 6e 20 count} { return
2980: 24 6d 79 74 61 67 20 7d 0a 09 69 66 20 7b 24 6d $mytag }..if {$m
2990: 79 74 61 67 63 6f 75 6e 74 20 3c 20 24 6d 79 62 ytagcount < $myb
29a0: 72 61 6e 63 68 63 6f 75 6e 74 7d 20 7b 20 72 65 ranchcount} { re
29b0: 74 75 72 6e 20 24 6d 79 62 72 61 6e 63 68 20 7d turn $mybranch }
29c0: 0a 09 72 65 74 75 72 6e 20 24 6d 79 75 6e 64 65 ..return $myunde
29d0: 66 0a 20 20 20 20 7d 0a 0a 20 20 20 20 6d 65 74 f. }.. met
29e0: 68 6f 64 20 4d 61 72 6b 41 73 20 7b 6c 61 62 65 hod MarkAs {labe
29f0: 6c 20 63 68 6f 73 65 6e 7d 20 7b 0a 09 6c 6f 67 l chosen} {..log
2a00: 20 77 72 69 74 65 20 33 20 73 79 6d 62 6f 6c 20 write 3 symbol
2a10: 7b 5c 5b 24 6c 61 62 65 6c 5c 5d 20 43 6f 6e 76 {\[$label\] Conv
2a20: 65 72 74 69 6e 67 20 73 79 6d 62 6f 6c 20 27 24 erting symbol '$
2a30: 6d 79 6e 61 6d 65 27 20 61 73 20 24 6d 79 73 79 myname' as $mysy
2a40: 6d 74 79 70 65 28 24 63 68 6f 73 65 6e 29 7d 0a mtype($chosen)}.
2a50: 0a 09 73 65 74 20 6d 79 74 79 70 65 20 24 63 68 ..set mytype $ch
2a60: 6f 73 65 6e 0a 09 69 6e 63 72 20 6d 79 72 75 6c osen..incr myrul
2a70: 65 63 6f 75 6e 74 28 24 6c 61 62 65 6c 29 0a 0a ecount($label)..
2a80: 09 23 20 54 68 69 73 20 69 73 20 73 74 6f 72 65 .# This is store
2a90: 64 20 64 69 72 65 63 74 6c 79 20 69 6e 74 6f 20 d directly into
2aa0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 09 73 the database...s
2ab0: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 tate run {..
2ac0: 55 50 44 41 54 45 20 73 79 6d 62 6f 6c 0a 09 20 UPDATE symbol..
2ad0: 20 20 20 53 45 54 20 20 20 20 74 79 70 65 20 3d SET type =
2ae0: 20 24 63 68 6f 73 65 6e 0a 09 20 20 20 20 57 48 $chosen.. WH
2af0: 45 52 45 20 20 73 69 64 20 20 3d 20 24 6d 79 69 ERE sid = $myi
2b00: 64 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 d..}..return.
2b10: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 }.. # # ## #
2b20: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 ## ##### #######
2b30: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a # #############.
2b40: 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61 ## Configura
2b50: 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 tion.. pragma
2b60: 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 -hastypeinfo
2b70: 20 6e 6f 20 20 3b 20 23 20 6e 6f 20 74 79 70 65 no ; # no type
2b80: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 introspection.
2b90: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e pragma -hasin
2ba0: 66 6f 20 20 20 20 20 20 20 20 6e 6f 20 20 3b 20 fo no ;
2bb0: 23 20 6e 6f 20 6f 62 6a 65 63 74 20 69 6e 74 72 # no object intr
2bc0: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 ospection. pr
2bd0: 61 67 6d 61 20 2d 73 69 6d 70 6c 65 64 69 73 70 agma -simpledisp
2be0: 61 74 63 68 20 79 65 73 20 3b 20 23 20 73 69 6d atch yes ; # sim
2bf0: 70 6c 65 20 66 61 73 74 20 64 69 73 70 61 74 63 ple fast dispatc
2c00: 68 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 h.. # # ## ##
2c10: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 # ##### ########
2c20: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d #############.}
2c30: 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c ..namespace eval
2c40: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 ::vc::fossil::i
2c50: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a mport::cvs::proj
2c60: 65 63 74 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 ect {. namesp
2c70: 61 63 65 20 65 78 70 6f 72 74 20 73 79 6d 0a 20 ace export sym.
2c80: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61 namespace eva
2c90: 6c 20 73 79 6d 20 7b 0a 09 6e 61 6d 65 73 70 61 l sym {..namespa
2ca0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
2cb0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
2cc0: 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 cvs::state..name
2cd0: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 space import ::v
2ce0: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a c::tools::misc::
2cf0: 2a 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 *..namespace imp
2d00: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a ort ::vc::tools:
2d10: 3a 74 72 6f 75 62 6c 65 0a 09 6e 61 6d 65 73 70 :trouble..namesp
2d20: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a ace import ::vc:
2d30: 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6c 6f 67 :tools::log..log
2d40: 20 72 65 67 69 73 74 65 72 20 73 79 6d 62 6f 6c register symbol
2d50: 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 . }.}..# # ##
2d60: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 ### ##### #####
2d70: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
2d80: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 # ##############
2d90: 23 23 23 23 23 23 23 0a 23 23 20 52 65 61 64 79 #######.## Ready
2da0: 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 ..package provid
2db0: 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d e vc::fossil::im
2dc0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 port::cvs::proje
2dd0: 63 74 3a 3a 73 79 6d 20 31 2e 30 0a 72 65 74 75 ct::sym 1.0.retu
2de0: 72 6e 0a rn.