Hex Artifact Content
Not logged in

Artifact 47871c6aa239d6e4e80064d73a63780e5fb240d0:

File tools/cvs2fossil/lib/c2f_pcollsym.tcl part of check-in [74854a30b8] - Added ability to declare indices on tables in the persistent state. Used this to declare indices on critical columns. Slows down the transactions saving changesets, this however is made up when it comes to successor/predecessor retrieval of changesets. by aku on 2007-12-02 03:40:56.

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 50 61 73  ########..## Pas
0200: 73 20 49 49 49 2e 20 54 68 69 73 20 70 61 73 73  s III. This pass
0210: 20 64 69 76 69 64 65 73 20 74 68 65 20 73 79 6d   divides the sym
0220: 62 6f 6c 73 20 63 6f 6c 6c 65 63 74 65 64 20 62  bols collected b
0230: 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 23  y the previous.#
0240: 23 20 70 61 73 73 20 69 6e 74 6f 20 62 72 61 6e  # pass into bran
0250: 63 68 65 73 2c 20 74 61 67 73 2c 20 61 6e 64 20  ches, tags, and 
0260: 65 78 63 6c 75 64 65 73 2e 20 54 68 65 20 6c 61  excludes. The la
0270: 74 74 65 72 20 61 72 65 20 61 6c 73 6f 0a 23 23  tter are also.##
0280: 20 70 61 72 74 69 61 6c 6c 79 20 64 65 6c 65 74   partially delet
0290: 65 64 20 62 79 20 74 68 69 73 20 70 61 73 73 2c  ed by this pass,
02a0: 20 6e 6f 74 20 6f 6e 6c 79 20 6d 61 72 6b 65 64   not only marked
02b0: 2e 20 49 74 20 69 73 20 74 68 65 20 6e 65 78 74  . It is the next
02c0: 0a 23 23 20 70 61 73 73 20 68 6f 77 65 76 65 72  .## pass however
02d0: 2c 20 27 46 69 6c 74 65 72 53 79 6d 27 2c 20 77  , 'FilterSym', w
02e0: 68 69 63 68 20 70 65 72 66 6f 72 6d 73 20 74 68  hich performs th
02f0: 65 20 66 75 6c 6c 20 64 65 6c 65 74 69 6f 6e 2e  e full deletion.
0300: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
0310: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0320: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
0330: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
0340: 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 0a  ## Requirements.
0350: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
0360: 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 20 20   Tcl 8.4        
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0380: 20 20 20 20 20 20 20 3b 20 23 20 52 65 71 75 69         ; # Requi
0390: 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61 63  red runtime..pac
03a0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 6e 69  kage require sni
03b0: 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t               
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 4f 4f 20 73 79 73 74 65 6d     ; # OO system
03e0: 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72  ..package requir
03f0: 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f  e vc::tools::tro
0400: 75 62 6c 65 20 20 20 20 20 20 20 20 20 20 20 20  uble            
0410: 20 20 20 20 20 20 20 20 3b 20 23 20 45 72 72 6f          ; # Erro
0420: 72 20 72 65 70 6f 72 74 69 6e 67 2e 0a 70 61 63  r reporting..pac
0430: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a  kage require vc:
0440: 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 20 20 20 20  :tools::log     
0450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0460: 20 20 20 3b 20 23 20 55 73 65 72 20 66 65 65 64     ; # User feed
0470: 62 61 63 6b 2e 0a 70 61 63 6b 61 67 65 20 72 65  back..package re
0480: 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c  quire vc::fossil
0490: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 72  ::import::cvs::r
04a0: 65 70 6f 73 69 74 6f 72 79 20 20 20 3b 20 23 20  epository   ; # 
04b0: 52 65 70 6f 73 69 74 6f 72 79 20 6d 61 6e 61 67  Repository manag
04c0: 65 6d 65 6e 74 2e 0a 70 61 63 6b 61 67 65 20 72  ement..package r
04d0: 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69  equire vc::fossi
04e0: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
04f0: 73 74 61 74 65 20 20 20 20 20 20 20 20 3b 20 23  state        ; #
0500: 20 53 74 61 74 65 20 73 74 6f 72 61 67 65 2e 0a   State storage..
0510: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0520: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0530: 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74  rt::cvs::project
0540: 3a 3a 73 79 6d 20 3b 20 23 20 50 72 6f 6a 65 63  ::sym ; # Projec
0550: 74 20 6c 65 76 65 6c 20 73 79 6d 62 6f 6c 73 0a  t level symbols.
0560: 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23  .# # ## ### ####
0570: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
0580: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0590: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23  ##############.#
05a0: 23 20 52 65 67 69 73 74 65 72 20 74 68 65 20 70  # Register the p
05b0: 61 73 73 20 77 69 74 68 20 74 68 65 20 6d 61 6e  ass with the man
05c0: 61 67 65 6d 65 6e 74 0a 0a 76 63 3a 3a 66 6f 73  agement..vc::fos
05d0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
05e0: 3a 3a 70 61 73 73 20 64 65 66 69 6e 65 20 5c 0a  ::pass define \.
05f0: 20 20 20 20 43 6f 6c 6c 61 74 65 53 79 6d 62 6f      CollateSymbo
0600: 6c 73 20 5c 0a 20 20 20 20 7b 43 6f 6c 6c 61 74  ls \.    {Collat
0610: 65 20 73 79 6d 62 6f 6c 73 7d 20 5c 0a 20 20 20  e symbols} \.   
0620: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
0630: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73  mport::cvs::pass
0640: 3a 3a 63 6f 6c 6c 73 79 6d 0a 0a 23 20 23 20 23  ::collsym..# # #
0650: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
0660: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
0670: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
0680: 23 23 23 23 23 23 23 23 0a 23 23 0a 0a 73 6e 69  ########.##..sni
0690: 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f  t::type ::vc::fo
06a0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
06b0: 73 3a 3a 70 61 73 73 3a 3a 63 6f 6c 6c 73 79 6d  s::pass::collsym
06c0: 20 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23 23   {.    # # ## ##
06d0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
06e0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
06f0: 20 20 20 23 23 20 50 75 62 6c 69 63 20 41 50 49     ## Public API
0700: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64  ..    typemethod
0710: 20 73 65 74 75 70 20 7b 7d 20 7b 0a 09 23 20 44   setup {} {..# D
0720: 65 66 69 6e 65 20 6e 61 6d 65 73 20 61 6e 64 20  efine names and 
0730: 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65  structure of the
0740: 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 61 74   persistent stat
0750: 65 20 6f 66 20 74 68 69 73 0a 09 23 20 70 61 73  e of this..# pas
0760: 73 2e 0a 0a 09 73 74 61 74 65 20 72 65 61 64 69  s....state readi
0770: 6e 67 20 73 79 6d 62 6f 6c 0a 09 73 74 61 74 65  ng symbol..state
0780: 20 72 65 61 64 69 6e 67 20 62 6c 6f 63 6b 65 72   reading blocker
0790: 0a 09 73 74 61 74 65 20 72 65 61 64 69 6e 67 20  ..state reading 
07a0: 70 61 72 65 6e 74 0a 0a 09 73 74 61 74 65 20 77  parent...state w
07b0: 72 69 74 69 6e 67 20 70 72 65 66 65 72 65 64 70  riting preferedp
07c0: 61 72 65 6e 74 20 7b 0a 09 20 20 20 20 2d 2d 20  arent {..    -- 
07d0: 46 6f 72 20 65 61 63 68 20 73 79 6d 62 6f 6c 20  For each symbol 
07e0: 74 68 65 20 70 72 65 66 65 72 65 64 20 70 61 72  the prefered par
07f0: 65 6e 74 2e 20 54 68 69 73 20 64 65 73 63 72 69  ent. This descri
0800: 62 65 73 20 74 68 65 0a 09 20 20 20 20 2d 2d 20  bes the..    -- 
0810: 74 72 65 65 20 6f 66 20 74 68 65 20 66 6f 75 6e  tree of the foun
0820: 64 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65 6c  d lines of devel
0830: 6f 70 6d 65 6e 74 2e 20 41 63 74 75 61 6c 6c 79  opment. Actually
0840: 20 61 0a 09 20 20 20 20 2d 2d 20 66 6f 72 65 73   a..    -- fores
0850: 74 20 69 6e 20 63 61 73 65 20 6f 66 20 6d 75 6c  t in case of mul
0860: 74 69 70 6c 65 20 70 72 6f 6a 65 63 74 73 2c 20  tiple projects, 
0870: 77 69 74 68 20 6f 6e 65 20 74 72 65 65 20 70 65  with one tree pe
0880: 72 0a 09 20 20 20 20 2d 2d 20 70 72 6f 6a 65 63  r..    -- projec
0890: 74 2e 0a 0a 09 20 20 20 20 73 69 64 20 49 4e 54  t....    sid INT
08a0: 45 47 45 52 20 20 4e 4f 54 20 4e 55 4c 4c 20 20  EGER  NOT NULL  
08b0: 50 52 49 4d 41 52 59 20 4b 45 59 20 20 52 45 46  PRIMARY KEY  REF
08c0: 45 52 45 4e 43 45 53 20 73 79 6d 62 6f 6c 2c 0a  ERENCES symbol,.
08d0: 09 20 20 20 20 70 69 64 20 49 4e 54 45 47 45 52  .    pid INTEGER
08e0: 20 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 20 20    NOT NULL      
08f0: 20 20 20 20 20 20 20 20 20 52 45 46 45 52 45 4e           REFEREN
0900: 43 45 53 20 73 79 6d 62 6f 6c 0a 09 7d 20 7b 20  CES symbol..} { 
0910: 70 69 64 20 7d 0a 09 23 20 49 6e 64 65 78 20 6f  pid }..# Index o
0920: 6e 3a 20 70 69 64 20 28 62 72 61 6e 63 68 20 73  n: pid (branch s
0930: 75 63 63 65 73 73 6f 72 73 60 29 0a 09 72 65 74  uccessors`)..ret
0940: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74  urn.    }..    t
0950: 79 70 65 6d 65 74 68 6f 64 20 6c 6f 61 64 20 7b  ypemethod load {
0960: 7d 20 7b 0a 09 23 20 50 61 73 73 20 6d 61 6e 61  } {..# Pass mana
0970: 67 65 72 20 69 6e 74 65 72 66 61 63 65 2e 20 45  ger interface. E
0980: 78 65 63 75 74 65 64 20 74 6f 20 6c 6f 61 64 20  xecuted to load 
0990: 64 61 74 61 20 63 6f 6d 70 75 74 65 64 20 62 79  data computed by
09a0: 0a 09 23 20 74 68 69 73 20 70 61 73 73 20 69 6e  ..# this pass in
09b0: 74 6f 20 6d 65 6d 6f 72 79 20 77 68 65 6e 20 74  to memory when t
09c0: 68 69 73 20 70 61 73 73 20 69 73 20 73 6b 69 70  his pass is skip
09d0: 70 65 64 20 69 6e 73 74 65 61 64 20 6f 66 0a 09  ped instead of..
09e0: 23 20 65 78 65 63 75 74 65 64 2e 0a 0a 09 23 20  # executed....# 
09f0: 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  The results of t
0a00: 68 69 73 20 70 61 73 73 20 61 72 65 20 66 75 6c  his pass are ful
0a10: 6c 79 20 69 6e 20 74 68 65 20 70 65 72 73 69 73  ly in the persis
0a20: 74 65 6e 74 20 73 74 61 74 65 2c 0a 09 23 20 74  tent state,..# t
0a30: 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e 67 20  here is nothing 
0a40: 74 6f 20 6c 6f 61 64 20 66 6f 72 20 74 68 65 20  to load for the 
0a50: 6e 65 78 74 20 6f 6e 65 2e 0a 09 72 65 74 75 72  next one...retur
0a60: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70  n.    }..    typ
0a70: 65 6d 65 74 68 6f 64 20 72 75 6e 20 7b 7d 20 7b  emethod run {} {
0a80: 0a 09 23 20 50 61 73 73 20 6d 61 6e 61 67 65 72  ..# Pass manager
0a90: 20 69 6e 74 65 72 66 61 63 65 2e 20 45 78 65 63   interface. Exec
0aa0: 75 74 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20  uted to perform 
0ab0: 74 68 65 0a 09 23 20 66 75 6e 63 74 69 6f 6e 61  the..# functiona
0ac0: 6c 69 74 79 20 6f 66 20 74 68 65 20 70 61 73 73  lity of the pass
0ad0: 2e 0a 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61  ....state transa
0ae0: 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 72 65 70  ction {..    rep
0af0: 6f 73 69 74 6f 72 79 20 20 20 64 65 74 65 72 6d  ository   determ
0b00: 69 6e 65 73 79 6d 62 6f 6c 74 79 70 65 73 0a 0a  inesymboltypes..
0b10: 09 20 20 20 20 70 72 6f 6a 65 63 74 3a 3a 73 79  .    project::sy
0b20: 6d 20 70 72 69 6e 74 72 75 6c 65 73 74 61 74 69  m printrulestati
0b30: 73 74 69 63 73 0a 09 20 20 20 20 70 72 6f 6a 65  stics..    proje
0b40: 63 74 3a 3a 73 79 6d 20 70 72 69 6e 74 74 79 70  ct::sym printtyp
0b50: 65 73 74 61 74 69 73 74 69 63 73 0a 09 7d 0a 0a  estatistics..}..
0b60: 09 69 66 20 7b 21 5b 74 72 6f 75 62 6c 65 20 3f  .if {![trouble ?
0b70: 5d 7d 20 7b 0a 09 20 20 20 20 55 6e 63 6f 6e 76  ]} {..    Unconv
0b80: 65 72 74 65 64 53 79 6d 62 6f 6c 73 0a 09 20 20  ertedSymbols..  
0b90: 20 20 42 61 64 53 79 6d 62 6f 6c 54 79 70 65 73    BadSymbolTypes
0ba0: 0a 09 20 20 20 20 42 6c 6f 63 6b 65 64 45 78 63  ..    BlockedExc
0bb0: 6c 75 64 65 73 0a 09 20 20 20 20 49 6e 76 61 6c  ludes..    Inval
0bc0: 69 64 54 61 67 73 0a 09 7d 0a 0a 09 69 66 20 7b  idTags..}...if {
0bd0: 21 5b 74 72 6f 75 62 6c 65 20 3f 5d 7d 20 7b 0a  ![trouble ?]} {.
0be0: 09 20 20 20 20 44 72 6f 70 45 78 63 6c 75 64 65  .    DropExclude
0bf0: 64 53 79 6d 62 6f 6c 73 46 72 6f 6d 52 65 66 65  dSymbolsFromRefe
0c00: 72 65 6e 63 65 73 0a 09 20 20 20 20 44 65 74 65  rences..    Dete
0c10: 72 6d 69 6e 65 50 72 65 66 65 72 65 64 50 61 72  rminePreferedPar
0c20: 65 6e 74 73 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72  ents..}...log wr
0c30: 69 74 65 20 31 20 63 6f 6c 6c 73 79 6d 20 22 43  ite 1 collsym "C
0c40: 6f 6c 6c 61 74 69 6f 6e 20 63 6f 6d 70 6c 65 74  ollation complet
0c50: 65 64 22 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ed"..return.    
0c60: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f  }..    typemetho
0c70: 64 20 64 69 73 63 61 72 64 20 7b 7d 20 7b 0a 09  d discard {} {..
0c80: 23 20 50 61 73 73 20 6d 61 6e 61 67 65 72 20 69  # Pass manager i
0c90: 6e 74 65 72 66 61 63 65 2e 20 45 78 65 63 75 74  nterface. Execut
0ca0: 65 64 20 66 6f 72 20 61 6c 6c 20 70 61 73 73 65  ed for all passe
0cb0: 73 20 61 66 74 65 72 20 74 68 65 0a 09 23 20 72  s after the..# r
0cc0: 75 6e 20 70 61 73 73 65 73 2c 20 74 6f 20 72 65  un passes, to re
0cd0: 6d 6f 76 65 20 61 6c 6c 20 64 61 74 61 20 6f 66  move all data of
0ce0: 20 74 68 69 73 20 70 61 73 73 20 66 72 6f 6d 20   this pass from 
0cf0: 74 68 65 20 73 74 61 74 65 2c 0a 09 23 20 61 73  the state,..# as
0d00: 20 62 65 69 6e 67 20 6f 75 74 20 6f 66 20 64 61   being out of da
0d10: 74 65 2e 0a 0a 09 73 74 61 74 65 20 64 69 73 63  te....state disc
0d20: 61 72 64 20 70 72 65 66 65 72 65 64 70 61 72 65  ard preferedpare
0d30: 6e 74 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  nt..return.    }
0d40: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
0d50: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
0d60: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
0d70: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65    ## Internal me
0d80: 74 68 6f 64 73 0a 0a 20 20 20 20 70 72 6f 63 20  thods..    proc 
0d90: 55 6e 63 6f 6e 76 65 72 74 65 64 53 79 6d 62 6f  UnconvertedSymbo
0da0: 6c 73 20 7b 7d 20 7b 0a 09 23 20 50 61 72 61 6e  ls {} {..# Paran
0db0: 6f 69 61 20 2d 20 48 61 76 65 20 77 65 20 6c 65  oia - Have we le
0dc0: 66 74 20 73 79 6d 62 6f 6c 73 20 77 69 74 68 6f  ft symbols witho
0dd0: 75 74 20 63 6f 6e 76 65 72 73 69 6f 6e 0a 09 23  ut conversion..#
0de0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 28 69 2e   information (i.
0df0: 65 2e 20 77 69 74 68 20 74 79 70 65 20 27 75 6e  e. with type 'un
0e00: 64 65 66 69 6e 65 64 27 29 20 3f 0a 0a 09 73 65  defined') ?...se
0e10: 74 20 75 6e 64 65 66 20 5b 70 72 6f 6a 65 63 74  t undef [project
0e20: 3a 3a 73 79 6d 20 75 6e 64 65 66 5d 0a 0a 09 66  ::sym undef]...f
0e30: 6f 72 65 61 63 68 20 7b 70 6e 61 6d 65 20 73 6e  oreach {pname sn
0e40: 61 6d 65 7d 20 5b 73 74 61 74 65 20 72 75 6e 20  ame} [state run 
0e50: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 50 2e  {..    SELECT P.
0e60: 6e 61 6d 65 2c 20 53 2e 6e 61 6d 65 0a 09 20 20  name, S.name..  
0e70: 20 20 46 52 4f 4d 20 20 20 70 72 6f 6a 65 63 74    FROM   project
0e80: 20 50 2c 20 73 79 6d 62 6f 6c 20 53 0a 09 20 20   P, symbol S..  
0e90: 20 20 57 48 45 52 45 20 20 50 2e 70 69 64 20 3d    WHERE  P.pid =
0ea0: 20 53 2e 70 69 64 0a 09 20 20 20 20 41 4e 44 20   S.pid..    AND 
0eb0: 20 20 20 53 2e 74 79 70 65 20 3d 20 24 75 6e 64     S.type = $und
0ec0: 65 66 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 74 72  ef..}] {..    tr
0ed0: 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 24 70 6e  ouble fatal "$pn
0ee0: 61 6d 65 20 3a 20 54 68 65 20 73 79 6d 62 6f 6c  ame : The symbol
0ef0: 20 27 24 73 6e 61 6d 65 27 20 77 61 73 20 6c 65   '$sname' was le
0f00: 66 74 20 75 6e 64 65 66 69 6e 65 64 22 0a 09 7d  ft undefined"..}
0f10: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
0f20: 20 20 20 20 70 72 6f 63 20 42 61 64 53 79 6d 62      proc BadSymb
0f30: 6f 6c 54 79 70 65 73 20 7b 7d 20 7b 0a 09 23 20  olTypes {} {..# 
0f40: 50 61 72 61 6e 6f 69 61 20 2d 20 48 61 76 65 20  Paranoia - Have 
0f50: 77 65 20 6c 65 66 74 20 73 79 6d 62 6f 6c 73 20  we left symbols 
0f60: 77 69 74 68 20 62 6f 67 75 73 20 63 6f 6e 76 65  with bogus conve
0f70: 72 73 69 6f 6e 0a 09 23 20 69 6e 66 6f 72 6d 61  rsion..# informa
0f80: 74 69 6f 6e 20 28 74 79 70 65 20 6f 75 74 20 6f  tion (type out o
0f90: 66 20 74 68 65 20 76 61 6c 69 64 20 72 61 6e 67  f the valid rang
0fa0: 65 20 28 65 78 63 6c 75 64 65 64 2c 20 62 72 61  e (excluded, bra
0fb0: 6e 63 68 2c 0a 09 23 20 74 61 67 29 29 20 3f 0a  nch,..# tag)) ?.
0fc0: 0a 09 66 6f 72 65 61 63 68 20 7b 70 6e 61 6d 65  ..foreach {pname
0fd0: 20 73 6e 61 6d 65 7d 20 5b 73 74 61 74 65 20 72   sname} [state r
0fe0: 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54  un {..    SELECT
0ff0: 20 50 2e 6e 61 6d 65 2c 20 53 2e 6e 61 6d 65 0a   P.name, S.name.
1000: 09 20 20 20 20 46 52 4f 4d 20 20 20 70 72 6f 6a  .    FROM   proj
1010: 65 63 74 20 50 2c 20 73 79 6d 62 6f 6c 20 53 0a  ect P, symbol S.
1020: 09 20 20 20 20 57 48 45 52 45 20 20 50 2e 70 69  .    WHERE  P.pi
1030: 64 20 3d 20 53 2e 70 69 64 0a 09 20 20 20 20 41  d = S.pid..    A
1040: 4e 44 20 20 20 20 53 2e 74 79 70 65 20 4e 4f 54  ND    S.type NOT
1050: 20 49 4e 20 28 30 2c 31 2c 32 29 0a 09 7d 5d 20   IN (0,1,2)..}] 
1060: 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 66  {..    trouble f
1070: 61 74 61 6c 20 22 24 70 6e 61 6d 65 20 3a 20 54  atal "$pname : T
1080: 68 65 20 73 79 6d 62 6f 6c 20 27 24 73 6e 61 6d  he symbol '$snam
1090: 65 27 20 68 61 73 20 6e 6f 20 70 72 6f 70 65 72  e' has no proper
10a0: 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 79 70 65   conversion type
10b0: 22 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  "..}..return.   
10c0: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 42 6c 6f   }..    proc Blo
10d0: 63 6b 65 64 45 78 63 6c 75 64 65 73 20 7b 7d 20  ckedExcludes {} 
10e0: 7b 0a 09 23 20 50 61 72 61 6e 6f 69 61 20 2d 20  {..# Paranoia - 
10f0: 48 61 76 65 20 77 65 20 73 63 68 65 64 75 6c 65  Have we schedule
1100: 64 20 73 79 6d 62 6f 6c 73 20 66 6f 72 20 65 78  d symbols for ex
1110: 63 6c 75 73 69 6f 6e 20 77 69 74 68 6f 75 74 0a  clusion without.
1120: 09 23 20 61 6c 73 6f 20 65 78 63 6c 75 64 69 6e  .# also excludin
1130: 67 20 74 68 65 69 72 20 64 65 70 65 6e 64 65 6e  g their dependen
1140: 74 20 73 79 6d 62 6f 6c 73 20 3f 0a 0a 09 73 65  t symbols ?...se
1150: 74 20 65 78 63 6c 20 5b 70 72 6f 6a 65 63 74 3a  t excl [project:
1160: 3a 73 79 6d 20 65 78 63 6c 75 64 65 64 5d 0a 0a  :sym excluded]..
1170: 09 66 6f 72 65 61 63 68 20 7b 70 6e 61 6d 65 20  .foreach {pname 
1180: 73 6e 61 6d 65 20 62 6e 61 6d 65 7d 20 5b 73 74  sname bname} [st
1190: 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53  ate run {..    S
11a0: 45 4c 45 43 54 20 50 2e 6e 61 6d 65 2c 20 53 2e  ELECT P.name, S.
11b0: 6e 61 6d 65 2c 20 53 42 2e 6e 61 6d 65 0a 09 20  name, SB.name.. 
11c0: 20 20 20 46 52 4f 4d 20 20 20 70 72 6f 6a 65 63     FROM   projec
11d0: 74 20 50 2c 20 73 79 6d 62 6f 6c 20 53 2c 20 62  t P, symbol S, b
11e0: 6c 6f 63 6b 65 72 20 42 2c 20 73 79 6d 62 6f 6c  locker B, symbol
11f0: 20 53 42 0a 09 20 20 20 20 57 48 45 52 45 20 20   SB..    WHERE  
1200: 50 2e 70 69 64 20 3d 20 53 2e 70 69 64 0a 09 20  P.pid = S.pid.. 
1210: 20 20 20 41 4e 44 20 20 20 20 53 2e 74 79 70 65     AND    S.type
1220: 20 3d 20 24 65 78 63 6c 0a 09 20 20 20 20 41 4e   = $excl..    AN
1230: 44 20 20 20 20 53 2e 73 69 64 20 3d 20 42 2e 73  D    S.sid = B.s
1240: 69 64 0a 09 20 20 20 20 41 4e 44 20 20 20 20 42  id..    AND    B
1250: 2e 62 69 64 20 3d 20 53 42 2e 73 69 64 0a 09 20  .bid = SB.sid.. 
1260: 20 20 20 41 4e 44 20 20 20 20 53 42 2e 74 79 70     AND    SB.typ
1270: 65 20 21 3d 20 24 65 78 63 6c 0a 09 7d 5d 20 7b  e != $excl..}] {
1280: 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 66 61  ..    trouble fa
1290: 74 61 6c 20 22 24 70 6e 61 6d 65 20 3a 20 54 68  tal "$pname : Th
12a0: 65 20 73 79 6d 62 6f 6c 20 27 24 73 6e 61 6d 65  e symbol '$sname
12b0: 27 20 63 61 6e 6e 6f 74 20 62 65 20 65 78 63 6c  ' cannot be excl
12c0: 75 64 65 64 20 61 73 20 74 68 65 20 75 6e 65 78  uded as the unex
12d0: 63 6c 75 64 65 64 20 73 79 6d 62 6f 6c 20 27 24  cluded symbol '$
12e0: 62 6e 61 6d 65 27 20 64 65 70 65 6e 64 73 20 6f  bname' depends o
12f0: 6e 20 69 74 2e 22 0a 09 7d 0a 09 72 65 74 75 72  n it."..}..retur
1300: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  n.    }..    pro
1310: 63 20 49 6e 76 61 6c 69 64 54 61 67 73 20 7b 7d  c InvalidTags {}
1320: 20 7b 0a 09 23 20 50 61 72 61 6e 6f 69 61 20 2d   {..# Paranoia -
1330: 20 48 61 76 65 20 77 65 20 73 63 68 65 64 75 6c   Have we schedul
1340: 65 64 20 73 79 6d 62 6f 6c 73 20 66 6f 72 20 63  ed symbols for c
1350: 6f 6e 76 65 72 73 69 6f 6e 20 61 73 20 74 61 67  onversion as tag
1360: 73 0a 09 23 20 77 68 69 63 68 20 61 62 73 6f 6c  s..# which absol
1370: 75 74 65 6c 79 20 63 61 6e 6e 6f 74 20 62 65 20  utely cannot be 
1380: 63 6f 6e 76 65 72 74 65 64 20 61 73 20 74 61 67  converted as tag
1390: 73 20 64 75 65 20 74 6f 20 63 6f 6d 6d 69 74 73  s due to commits
13a0: 0a 09 23 20 6d 61 64 65 20 6f 6e 20 74 68 65 6d  ..# made on them
13b0: 20 3f 0a 0a 09 23 20 49 6e 20 6f 74 68 65 72 20   ?...# In other 
13c0: 77 6f 72 64 73 2c 20 74 68 69 73 20 63 68 65 63  words, this chec
13d0: 6b 73 20 66 69 6e 64 73 20 6f 75 74 20 69 66 20  ks finds out if 
13e0: 74 68 65 20 75 73 65 72 20 68 61 73 20 61 73 6b  the user has ask
13f0: 65 64 0a 09 23 20 6e 6f 6e 73 65 6e 73 69 63 61  ed..# nonsensica
1400: 6c 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 6f 66  l conversions of
1410: 20 73 79 6d 62 6f 6c 73 2c 20 77 68 69 63 68 20   symbols, which 
1420: 73 68 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e  should have been
1430: 0a 09 23 20 6c 65 66 74 20 74 6f 20 74 68 65 20  ..# left to the 
1440: 68 65 75 72 69 73 74 69 63 73 2c 20 6d 6f 73 74  heuristics, most
1450: 20 73 70 65 63 69 66 69 63 61 6c 6c 79 0a 09 23   specifically..#
1460: 20 27 70 72 6f 6a 65 63 74 3a 3a 73 79 6d 2e 48   'project::sym.H
1470: 61 73 43 6f 6d 6d 69 74 73 28 29 27 2e 0a 0a 09  asCommits()'....
1480: 73 65 74 20 74 61 67 20 5b 70 72 6f 6a 65 63 74  set tag [project
1490: 3a 3a 73 79 6d 20 74 61 67 5d 0a 0a 09 66 6f 72  ::sym tag]...for
14a0: 65 61 63 68 20 7b 70 6e 61 6d 65 20 73 6e 61 6d  each {pname snam
14b0: 65 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a  e} [state run {.
14c0: 09 20 20 20 20 53 45 4c 45 43 54 20 50 2e 6e 61  .    SELECT P.na
14d0: 6d 65 2c 20 53 2e 6e 61 6d 65 0a 09 20 20 20 20  me, S.name..    
14e0: 46 52 4f 4d 20 20 20 70 72 6f 6a 65 63 74 20 50  FROM   project P
14f0: 2c 20 73 79 6d 62 6f 6c 20 53 0a 09 20 20 20 20  , symbol S..    
1500: 57 48 45 52 45 20 20 50 2e 70 69 64 20 3d 20 53  WHERE  P.pid = S
1510: 2e 70 69 64 0a 09 20 20 20 20 41 4e 44 20 20 20  .pid..    AND   
1520: 20 53 2e 74 79 70 65 20 3d 20 24 74 61 67 0a 09   S.type = $tag..
1530: 20 20 20 20 41 4e 44 20 20 20 20 53 2e 63 6f 6d      AND    S.com
1540: 6d 69 74 5f 63 6f 75 6e 74 20 3e 20 30 0a 09 7d  mit_count > 0..}
1550: 5d 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c 65  ] {..    trouble
1560: 20 66 61 74 61 6c 20 22 24 70 6e 61 6d 65 20 3a   fatal "$pname :
1570: 20 54 68 65 20 73 79 6d 62 6f 6c 20 27 24 73 6e   The symbol '$sn
1580: 61 6d 65 27 20 63 61 6e 6e 6f 74 20 62 65 20 66  ame' cannot be f
1590: 6f 72 63 65 64 20 74 6f 20 62 65 20 63 6f 6e 76  orced to be conv
15a0: 65 72 74 65 64 20 61 73 20 74 61 67 20 62 65 63  erted as tag bec
15b0: 61 75 73 65 20 69 74 20 68 61 73 20 63 6f 6d 6d  ause it has comm
15c0: 69 74 73 2e 22 0a 09 7d 0a 09 72 65 74 75 72 6e  its."..}..return
15d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63  .    }..    proc
15e0: 20 44 72 6f 70 45 78 63 6c 75 64 65 64 53 79 6d   DropExcludedSym
15f0: 62 6f 6c 73 46 72 6f 6d 52 65 66 65 72 65 6e 63  bolsFromReferenc
1600: 65 73 20 7b 7d 20 7b 0a 09 23 20 54 68 65 20 65  es {} {..# The e
1610: 78 63 6c 75 64 65 64 20 73 79 6d 62 6f 6c 73 20  xcluded symbols 
1620: 63 61 6e 6e 20 62 65 20 75 73 65 64 20 61 73 20  cann be used as 
1630: 62 6c 6f 63 6b 65 72 73 20 6e 6f 72 20 61 73 0a  blockers nor as.
1640: 09 23 20 70 6f 73 73 69 62 6c 65 20 70 61 72 65  .# possible pare
1650: 6e 74 20 66 6f 72 20 6f 74 68 65 72 20 73 79 6d  nt for other sym
1660: 62 6f 6c 73 2e 20 57 65 20 6e 6f 77 20 64 72 6f  bols. We now dro
1670: 70 20 74 68 65 20 72 65 6c 65 76 61 6e 74 0a 09  p the relevant..
1680: 23 20 65 6e 74 72 69 65 73 20 74 6f 20 70 72 65  # entries to pre
1690: 76 65 6e 74 20 74 68 65 6d 20 66 72 6f 6d 20 63  vent them from c
16a0: 61 75 73 69 6e 67 20 63 6f 6e 66 75 73 69 6f 6e  ausing confusion
16b0: 20 6c 61 74 65 72 20 6f 6e 2e 0a 0a 09 73 65 74   later on....set
16c0: 20 65 78 63 6c 20 5b 70 72 6f 6a 65 63 74 3a 3a   excl [project::
16d0: 73 79 6d 20 65 78 63 6c 75 64 65 64 5d 0a 0a 09  sym excluded]...
16e0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20  state run {..   
16f0: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 62 6c 6f   DELETE FROM blo
1700: 63 6b 65 72 0a 09 20 20 20 20 57 48 45 52 45 20  cker..    WHERE 
1710: 62 69 64 20 49 4e 20 28 53 45 4c 45 43 54 20 73  bid IN (SELECT s
1720: 69 64 0a 09 09 09 20 20 46 52 4f 4d 20 20 20 73  id....  FROM   s
1730: 79 6d 62 6f 6c 0a 09 09 09 20 20 57 68 45 52 45  ymbol....  WhERE
1740: 20 20 74 79 70 65 20 3d 20 24 65 78 63 6c 29 3b    type = $excl);
1750: 0a 09 20 20 20 20 44 45 4c 45 54 45 20 46 52 4f  ..    DELETE FRO
1760: 4d 20 70 61 72 65 6e 74 0a 09 20 20 20 20 57 48  M parent..    WH
1770: 45 52 45 20 70 69 64 20 49 4e 20 28 53 45 4c 45  ERE pid IN (SELE
1780: 43 54 20 73 69 64 0a 09 09 09 20 20 46 52 4f 4d  CT sid....  FROM
1790: 20 20 20 73 79 6d 62 6f 6c 0a 09 09 09 20 20 57     symbol....  W
17a0: 68 45 52 45 20 20 74 79 70 65 20 3d 20 24 65 78  hERE  type = $ex
17b0: 63 6c 29 3b 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  cl);..}..return.
17c0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20      }..    proc 
17d0: 44 65 74 65 72 6d 69 6e 65 50 72 65 66 65 72 65  DeterminePrefere
17e0: 64 50 61 72 65 6e 74 73 20 7b 7d 20 7b 0a 09 61  dParents {} {..a
17f0: 72 72 61 79 20 73 65 74 20 70 72 65 66 65 72 65  rray set prefere
1800: 64 20 7b 7d 0a 0a 09 73 65 74 20 65 78 63 6c 20  d {}...set excl 
1810: 5b 70 72 6f 6a 65 63 74 3a 3a 73 79 6d 20 65 78  [project::sym ex
1820: 63 6c 75 64 65 64 5d 0a 0a 09 23 20 50 68 61 73  cluded]...# Phas
1830: 65 20 49 3a 20 50 75 6c 6c 20 74 68 65 20 70 6f  e I: Pull the po
1840: 73 73 69 62 6c 65 20 70 61 72 65 6e 74 73 2c 20  ssible parents, 
1850: 75 73 69 6e 67 20 73 6f 72 74 69 6e 67 20 74 6f  using sorting to
1860: 20 70 75 74 20 74 68 65 0a 09 23 20 20 20 20 20   put the..#     
1870: 20 20 20 20 20 70 72 65 66 65 72 65 64 20 70 61       prefered pa
1880: 72 65 6e 74 20 6f 66 20 65 61 63 68 20 73 79 6d  rent of each sym
1890: 62 6f 6c 20 6c 61 73 74 20 61 6d 6f 6e 67 20 61  bol last among a
18a0: 6c 6c 0a 09 23 20 20 20 20 20 20 20 20 20 20 63  ll..#          c
18b0: 61 6e 64 69 64 61 74 65 73 2c 20 61 6c 6c 6f 77  andidates, allow
18c0: 69 6e 67 20 75 73 20 67 65 74 20 74 68 65 20 70  ing us get the p
18d0: 72 65 66 65 72 65 64 20 6f 6e 65 20 62 79 0a 09  refered one by..
18e0: 23 20 20 20 20 20 20 20 20 20 20 65 61 63 68 20  #          each 
18f0: 63 61 6e 64 69 64 61 74 65 20 6f 76 65 72 77 72  candidate overwr
1900: 69 74 69 6e 67 20 61 6c 6c 20 70 72 65 76 69 6f  iting all previo
1910: 75 73 0a 09 23 20 20 20 20 20 20 20 20 20 20 73  us..#          s
1920: 65 6c 65 63 74 69 6f 6e 73 2e 20 4e 6f 74 65 20  elections. Note 
1930: 74 68 61 74 20 77 65 20 69 67 6e 6f 72 65 20 65  that we ignore e
1940: 78 63 6c 75 64 65 64 20 73 79 6d 62 6f 6c 2c 20  xcluded symbol, 
1950: 77 65 0a 09 23 20 20 20 20 20 20 20 20 20 20 64  we..#          d
1960: 6f 20 6e 6f 74 20 63 61 72 65 20 61 62 6f 75 74  o not care about
1970: 20 74 68 65 69 72 20 70 72 65 66 65 72 65 64 20   their prefered 
1980: 70 61 72 65 6e 74 73 20 61 6e 64 20 64 6f 20 6e  parents and do n
1990: 6f 74 0a 09 23 20 20 20 20 20 20 20 20 20 20 61  ot..#          a
19a0: 74 74 65 6d 70 74 20 74 6f 20 63 6f 6d 70 75 74  ttempt to comput
19b0: 65 20 74 68 65 6d 2e 0a 0a 09 66 6f 72 65 61 63  e them....foreac
19c0: 68 20 7b 73 20 70 20 73 6e 61 6d 65 20 70 6e 61  h {s p sname pna
19d0: 6d 65 20 70 72 6e 61 6d 65 20 76 6f 74 65 73 7d  me prname votes}
19e0: 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20   [state run {.. 
19f0: 20 20 20 53 45 4c 45 43 54 20 20 20 53 2e 73 69     SELECT   S.si
1a00: 64 2c 20 50 2e 70 69 64 2c 20 53 2e 6e 61 6d 65  d, P.pid, S.name
1a10: 2c 20 53 42 2e 6e 61 6d 65 2c 20 50 52 2e 6e 61  , SB.name, PR.na
1a20: 6d 65 2c 20 50 2e 6e 0a 09 20 20 20 20 46 52 4f  me, P.n..    FRO
1a30: 4d 20 20 20 20 20 73 79 6d 62 6f 6c 20 53 2c 20  M     symbol S, 
1a40: 70 61 72 65 6e 74 20 50 2c 20 73 79 6d 62 6f 6c  parent P, symbol
1a50: 20 53 42 2c 20 70 72 6f 6a 65 63 74 20 50 52 0a   SB, project PR.
1a60: 09 20 20 20 20 57 48 45 52 45 20 20 20 20 53 2e  .    WHERE    S.
1a70: 73 69 64 20 3d 20 50 2e 73 69 64 0a 09 20 20 20  sid = P.sid..   
1a80: 20 41 4e 44 20 20 20 20 20 20 50 2e 70 69 64 20   AND      P.pid 
1a90: 3d 20 53 42 2e 73 69 64 0a 09 20 20 20 20 41 4e  = SB.sid..    AN
1aa0: 44 20 20 20 20 20 20 53 2e 70 69 64 20 3d 20 50  D      S.pid = P
1ab0: 52 2e 70 69 64 0a 09 20 20 20 20 41 4e 44 20 20  R.pid..    AND  
1ac0: 20 20 20 20 53 2e 74 79 70 65 20 21 3d 20 24 65      S.type != $e
1ad0: 78 63 6c 0a 09 20 20 20 20 4f 52 44 45 52 20 42  xcl..    ORDER B
1ae0: 59 20 50 2e 6e 20 41 53 43 2c 20 50 2e 70 69 64  Y P.n ASC, P.pid
1af0: 20 44 45 53 43 0a 09 20 20 20 20 2d 2d 20 48 69   DESC..    -- Hi
1b00: 67 68 65 72 20 76 6f 74 65 73 20 61 6e 64 20 73  gher votes and s
1b10: 6d 61 6c 6c 65 72 20 69 64 73 20 28 3d 20 65 61  maller ids (= ea
1b20: 72 6c 69 65 72 20 62 72 61 6e 63 68 65 73 29 20  rlier branches) 
1b30: 6c 61 73 74 0a 09 20 20 20 20 2d 2d 20 57 65 20  last..    -- We 
1b40: 73 69 6d 70 6c 79 20 6b 65 65 70 20 74 68 65 20  simply keep the 
1b50: 6c 61 73 74 20 70 6f 73 73 69 62 6c 65 20 70 61  last possible pa
1b60: 72 65 6e 74 20 66 6f 72 20 65 61 63 68 0a 09 20  rent for each.. 
1b70: 20 20 20 2d 2d 20 73 79 6d 62 6f 6c 2e 20 20 54     -- symbol.  T
1b80: 68 69 73 20 70 61 72 65 6e 74 20 77 69 6c 6c 20  his parent will 
1b90: 68 61 76 65 20 74 68 65 20 6d 61 78 20 6e 75 6d  have the max num
1ba0: 62 65 72 20 6f 66 20 76 6f 74 65 73 0a 09 20 20  ber of votes..  
1bb0: 20 20 2d 2d 20 66 6f 72 20 69 74 73 20 73 79 6d    -- for its sym
1bc0: 62 6f 6c 20 61 6e 64 20 77 69 6c 6c 20 62 65 20  bol and will be 
1bd0: 74 68 65 20 65 61 72 6c 69 65 73 74 20 63 72 65  the earliest cre
1be0: 61 74 65 64 20 62 72 61 6e 63 68 0a 09 20 20 20  ated branch..   
1bf0: 20 2d 2d 20 70 6f 73 73 69 62 6c 65 20 61 6d 6f   -- possible amo
1c00: 6e 67 20 61 6c 6c 20 77 69 74 68 20 6d 61 6e 79  ng all with many
1c10: 20 76 6f 74 65 73 2e 0a 09 7d 5d 20 7b 0a 09 20   votes...}] {.. 
1c20: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 39 20 70     log write 9 p
1c30: 63 6f 6c 6c 73 79 6d 20 22 56 6f 74 69 6e 67 20  collsym "Voting 
1c40: 24 76 6f 74 65 73 20 66 6f 72 20 50 61 72 65 6e  $votes for Paren
1c50: 74 28 24 73 6e 61 6d 65 29 20 3d 20 24 70 6e 61  t($sname) = $pna
1c60: 6d 65 22 0a 0a 09 20 20 20 20 73 65 74 20 70 72  me"...    set pr
1c70: 65 66 65 72 65 64 28 24 73 29 20 5b 6c 69 73 74  efered($s) [list
1c80: 20 24 70 20 24 73 6e 61 6d 65 20 24 70 6e 61 6d   $p $sname $pnam
1c90: 65 20 24 70 72 6e 61 6d 65 5d 0a 09 7d 0a 0a 09  e $prname]..}...
1ca0: 23 20 50 68 61 73 65 20 49 49 3a 20 57 72 69 74  # Phase II: Writ
1cb0: 65 20 74 68 65 20 66 6f 75 6e 64 20 70 72 65 66  e the found pref
1cc0: 65 72 65 6e 63 65 73 20 62 61 63 6b 20 69 6e 74  erences back int
1cd0: 6f 20 74 68 65 20 74 61 62 6c 65 0a 09 23 20 20  o the table..#  
1ce0: 20 20 20 20 20 20 20 20 20 74 68 69 73 20 70 61           this pa
1cf0: 73 73 20 64 65 66 69 6e 65 64 20 66 6f 72 20 69  ss defined for i
1d00: 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 73 20  t....foreach {s 
1d10: 78 7d 20 5b 61 72 72 61 79 20 67 65 74 20 70 72  x} [array get pr
1d20: 65 66 65 72 65 64 5d 20 7b 0a 09 20 20 20 20 73  efered] {..    s
1d30: 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69  truct::list assi
1d40: 67 6e 20 24 78 20 70 20 73 6e 61 6d 65 20 70 6e  gn $x p sname pn
1d50: 61 6d 65 20 70 72 6e 61 6d 65 0a 09 20 20 20 20  ame prname..    
1d60: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e  state run {...IN
1d70: 53 45 52 54 20 49 4e 54 4f 20 70 72 65 66 65 72  SERT INTO prefer
1d80: 65 64 70 61 72 65 6e 74 20 28 73 69 64 2c 20 70  edparent (sid, p
1d90: 69 64 29 0a 09 09 56 41 4c 55 45 53 20 20 20 20  id)...VALUES    
1da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1db0: 20 28 24 73 2c 20 20 24 70 29 3b 0a 09 20 20 20   ($s,  $p);..   
1dc0: 20 7d 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69   }...    log wri
1dd0: 74 65 20 33 20 70 63 6f 6c 6c 73 79 6d 20 22 24  te 3 pcollsym "$
1de0: 70 72 6e 61 6d 65 20 3a 20 27 24 73 6e 61 6d 65  prname : '$sname
1df0: 27 73 20 70 72 65 66 65 72 65 64 20 70 61 72 65  's prefered pare
1e00: 6e 74 20 69 73 20 27 24 70 6e 61 6d 65 27 22 0a  nt is '$pname'".
1e10: 09 7d 0a 0a 09 23 20 50 68 61 73 65 20 49 49 49  .}...# Phase III
1e20: 3a 20 43 68 65 63 6b 20 74 68 65 20 72 65 73 75  : Check the resu
1e30: 6c 74 20 74 68 61 74 20 61 6c 6c 20 73 79 6d 62  lt that all symb
1e40: 6f 6c 73 20 65 78 63 65 70 74 20 66 6f 72 0a 09  ols except for..
1e50: 23 20 20 20 20 20 20 20 20 20 20 20 20 74 72 75  #            tru
1e60: 6e 6b 73 20 68 61 76 65 20 61 20 70 72 65 66 65  nks have a prefe
1e70: 72 65 64 20 70 61 72 65 6e 74 2e 20 57 65 20 61  red parent. We a
1e80: 6c 73 6f 20 69 67 6e 6f 72 65 0a 09 23 20 20 20  lso ignore..#   
1e90: 20 20 20 20 20 20 20 20 20 65 78 63 6c 75 64 65           exclude
1ea0: 64 20 73 79 6d 62 6f 6c 73 2c 20 61 73 20 77 65  d symbols, as we
1eb0: 20 69 6e 74 65 6e 74 69 6f 6e 61 6c 6c 79 20 64   intentionally d
1ec0: 69 64 20 6e 6f 74 0a 09 23 20 20 20 20 20 20 20  id not..#       
1ed0: 20 20 20 20 20 63 6f 6d 70 75 74 65 20 61 20 70       compute a p
1ee0: 72 65 66 65 72 65 64 20 70 61 72 65 6e 74 20 66  refered parent f
1ef0: 6f 72 20 74 68 65 6d 2c 20 73 65 65 20 70 68 61  or them, see pha
1f00: 73 65 20 49 2e 0a 0a 09 66 6f 72 65 61 63 68 20  se I....foreach 
1f10: 7b 70 6e 61 6d 65 20 73 6e 61 6d 65 7d 20 5b 73  {pname sname} [s
1f20: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20  tate run {..    
1f30: 53 45 4c 45 43 54 20 50 52 2e 6e 61 6d 65 2c 20  SELECT PR.name, 
1f40: 53 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d  S.name..    FROM
1f50: 20 20 20 70 72 6f 6a 65 63 74 20 50 52 2c 20 73     project PR, s
1f60: 79 6d 62 6f 6c 20 53 20 4c 45 46 54 20 4f 55 54  ymbol S LEFT OUT
1f70: 45 52 20 4a 4f 49 4e 20 70 72 65 66 65 72 65 64  ER JOIN prefered
1f80: 70 61 72 65 6e 74 20 50 0a 09 20 20 20 20 4f 4e  parent P..    ON
1f90: 20 20 20 20 20 53 2e 73 69 64 20 3d 20 50 2e 73       S.sid = P.s
1fa0: 69 64 0a 09 20 20 20 20 57 48 45 52 45 20 20 50  id..    WHERE  P
1fb0: 2e 70 69 64 20 49 53 20 4e 55 4c 4c 0a 09 20 20  .pid IS NULL..  
1fc0: 20 20 41 4e 44 20 20 20 20 53 2e 6e 61 6d 65 20    AND    S.name 
1fd0: 21 3d 20 27 3a 74 72 75 6e 6b 3a 27 0a 09 20 20  != ':trunk:'..  
1fe0: 20 20 41 4e 44 20 20 20 20 53 2e 70 69 64 20 3d    AND    S.pid =
1ff0: 20 50 52 2e 70 69 64 0a 09 20 20 20 20 41 4e 44   PR.pid..    AND
2000: 20 20 20 20 53 2e 74 79 70 65 20 21 3d 20 24 65      S.type != $e
2010: 78 63 6c 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 74  xcl..}] {..    t
2020: 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 24 70  rouble fatal "$p
2030: 6e 61 6d 65 20 3a 20 27 24 73 6e 61 6d 65 27 20  name : '$sname' 
2040: 68 61 73 20 6e 6f 20 70 72 65 66 65 72 65 64 20  has no prefered 
2050: 70 61 72 65 6e 74 2e 22 0a 09 7d 0a 0a 09 23 20  parent."..}...# 
2060: 54 68 65 20 72 65 76 65 72 73 65 2c 20 68 61 76  The reverse, hav
2070: 69 6e 67 20 70 72 65 66 65 72 65 64 20 70 61 72  ing prefered par
2080: 65 6e 74 73 20 66 6f 72 20 75 6e 6b 6e 6f 77 6e  ents for unknown
2090: 20 73 79 6d 62 6f 6c 73 0a 09 23 20 63 61 6e 6e   symbols..# cann
20a0: 6f 74 20 6f 63 63 75 72 2e 0a 09 72 65 74 75 72  ot occur...retur
20b0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23  n.    }..    # #
20c0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
20d0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
20e0: 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e 66  ####.    ## Conf
20f0: 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70  iguration..    p
2100: 72 61 67 6d 61 20 2d 68 61 73 69 6e 73 74 61 6e  ragma -hasinstan
2110: 63 65 73 20 20 20 6e 6f 20 3b 20 23 20 73 69 6e  ces   no ; # sin
2120: 67 6c 65 74 6f 6e 0a 20 20 20 20 70 72 61 67 6d  gleton.    pragm
2130: 61 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20  a -hastypeinfo  
2140: 20 20 6e 6f 20 3b 20 23 20 6e 6f 20 69 6e 74 72    no ; # no intr
2150: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72  ospection.    pr
2160: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 64 65 73  agma -hastypedes
2170: 74 72 6f 79 20 6e 6f 20 3b 20 23 20 69 6d 6d 6f  troy no ; # immo
2180: 72 74 61 6c 0a 0a 20 20 20 20 23 20 23 20 23 23  rtal..    # # ##
2190: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
21a0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
21b0: 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65  #.}..namespace e
21c0: 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  val ::vc::fossil
21d0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70  ::import::cvs::p
21e0: 61 73 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70  ass {.    namesp
21f0: 61 63 65 20 65 78 70 6f 72 74 20 63 6f 6c 6c 73  ace export colls
2200: 79 6d 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65  ym.    namespace
2210: 20 65 76 61 6c 20 63 6f 6c 6c 73 79 6d 20 7b 0a   eval collsym {.
2220: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
2230: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  t ::vc::fossil::
2240: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 72 65 70  import::cvs::rep
2250: 6f 73 69 74 6f 72 79 0a 09 6e 61 6d 65 73 70 61  ository..namespa
2260: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
2270: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
2280: 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65  cvs::state..name
2290: 73 70 61 63 65 20 65 76 61 6c 20 70 72 6f 6a 65  space eval proje
22a0: 63 74 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70  ct {..    namesp
22b0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
22c0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
22d0: 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 73  :cvs::project::s
22e0: 79 6d 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 65  ym..}..namespace
22f0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f   import ::vc::to
2300: 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e 61  ols::trouble..na
2310: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
2320: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a  :vc::tools::log.
2330: 09 6c 6f 67 20 72 65 67 69 73 74 65 72 20 63 6f  .log register co
2340: 6c 6c 73 79 6d 0a 20 20 20 20 7d 0a 7d 0a 0a 23  llsym.    }.}..#
2350: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
2360: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
2370: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
2380: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
2390: 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70  Ready..package p
23a0: 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69  rovide vc::fossi
23b0: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
23c0: 70 61 73 73 3a 3a 63 6f 6c 6c 73 79 6d 20 31 2e  pass::collsym 1.
23d0: 30 0a 72 65 74 75 72 6e 0a                       0.return.