Hex Artifact Content
Not logged in

Artifact e6931f2e3803883f8b922d0c68e824b5cb8466d2:

File tools/cvs2fossil/lib/c2f_pcollsym.tcl part of check-in [efc78b7a42] - Completed pass 3, CollateSymbols. Added code determining for each symbol the prefered parent from all possible parents. This is the symbol with the lowest id among the set with the maximum number of occurences as a parent. by aku on 2007-11-06 04:39:41.

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 20 0a 0a 73 6e  ########.## ..sn
0690: 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66  it::type ::vc::f
06a0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
06b0: 76 73 3a 3a 70 61 73 73 3a 3a 63 6f 6c 6c 73 79  vs::pass::collsy
06c0: 6d 20 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23  m {.    # # ## #
06d0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
06e0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
06f0: 20 20 20 20 23 23 20 50 75 62 6c 69 63 20 41 50      ## Public AP
0700: 49 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f  I..    typemetho
0710: 64 20 73 65 74 75 70 20 7b 7d 20 7b 0a 09 23 20  d setup {} {..# 
0720: 44 65 66 69 6e 65 20 6e 61 6d 65 73 20 61 6e 64  Define names and
0730: 20 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68   structure of th
0740: 65 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 61  e persistent sta
0750: 74 65 20 6f 66 20 74 68 69 73 0a 09 23 20 70 61  te of this..# pa
0760: 73 73 2e 0a 0a 09 73 74 61 74 65 20 72 65 61 64  ss....state read
0770: 69 6e 67 20 73 79 6d 62 6f 6c 0a 09 73 74 61 74  ing symbol..stat
0780: 65 20 72 65 61 64 69 6e 67 20 62 6c 6f 63 6b 65  e reading blocke
0790: 72 0a 09 73 74 61 74 65 20 72 65 61 64 69 6e 67  r..state reading
07a0: 20 70 61 72 65 6e 74 0a 0a 09 73 74 61 74 65 20   parent...state 
07b0: 77 72 69 74 69 6e 67 20 70 72 65 66 65 72 65 64  writing prefered
07c0: 70 61 72 65 6e 74 20 7b 0a 09 20 20 20 20 2d 2d  parent {..    --
07d0: 20 46 6f 72 20 65 61 63 68 20 73 79 6d 62 6f 6c   For each symbol
07e0: 20 74 68 65 20 70 72 65 66 65 72 65 64 20 70 61   the prefered pa
07f0: 72 65 6e 74 2e 20 54 68 69 73 20 64 65 73 63 72  rent. This descr
0800: 69 62 65 73 20 74 68 65 0a 09 20 20 20 20 2d 2d  ibes the..    --
0810: 20 74 72 65 65 20 6f 66 20 74 68 65 20 66 6f 75   tree of the fou
0820: 6e 64 20 6c 69 6e 65 73 20 6f 66 20 64 65 76 65  nd lines of deve
0830: 6c 6f 70 6d 65 6e 74 2e 20 41 63 74 75 61 6c 6c  lopment. Actuall
0840: 79 20 61 0a 09 20 20 20 20 2d 2d 20 66 6f 72 65  y a..    -- fore
0850: 73 74 20 69 6e 20 63 61 73 65 20 6f 66 20 6d 75  st in case of mu
0860: 6c 74 69 70 6c 65 20 70 72 6f 6a 65 63 74 73 2c  ltiple projects,
0870: 20 77 69 74 68 20 6f 6e 65 20 74 72 65 65 20 70   with one tree p
0880: 65 72 0a 09 20 20 20 20 2d 2d 20 70 72 6f 6a 65  er..    -- proje
0890: 63 74 2e 0a 0a 09 20 20 20 20 73 69 64 20 49 4e  ct....    sid IN
08a0: 54 45 47 45 52 20 20 4e 4f 54 20 4e 55 4c 4c 20  TEGER  NOT NULL 
08b0: 20 50 52 49 4d 41 52 59 20 4b 45 59 20 20 52 45   PRIMARY KEY  RE
08c0: 46 45 52 45 4e 43 45 53 20 73 79 6d 62 6f 6c 2c  FERENCES symbol,
08d0: 0a 09 20 20 20 20 70 69 64 20 49 4e 54 45 47 45  ..    pid INTEGE
08e0: 52 20 20 4e 4f 54 20 4e 55 4c 4c 20 20 20 20 20  R  NOT NULL     
08f0: 20 20 20 20 20 20 20 20 20 20 52 45 46 45 52 45            REFERE
0900: 4e 43 45 53 20 73 79 6d 62 6f 6c 0a 09 7d 0a 09  NCES symbol..}..
0910: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
0920: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c 6f 61    typemethod loa
0930: 64 20 7b 7d 20 7b 0a 09 23 20 54 4f 44 4f 0a 09  d {} {..# TODO..
0940: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
0950: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 72 75 6e    typemethod run
0960: 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73 20 6d 61   {} {..# Pass ma
0970: 6e 61 67 65 72 20 69 6e 74 65 72 66 61 63 65 2e  nager interface.
0980: 20 45 78 65 63 75 74 65 64 20 74 6f 20 70 65 72   Executed to per
0990: 66 6f 72 6d 20 74 68 65 0a 09 23 20 66 75 6e 63  form the..# func
09a0: 74 69 6f 6e 61 6c 69 74 79 20 6f 66 20 74 68 65  tionality of the
09b0: 20 70 61 73 73 2e 0a 0a 09 73 74 61 74 65 20 74   pass....state t
09c0: 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20  ransaction {..  
09d0: 20 20 72 65 70 6f 73 69 74 6f 72 79 20 20 20 64    repository   d
09e0: 65 74 65 72 6d 69 6e 65 73 79 6d 62 6f 6c 74 79  eterminesymbolty
09f0: 70 65 73 0a 0a 09 20 20 20 20 70 72 6f 6a 65 63  pes...    projec
0a00: 74 3a 3a 73 79 6d 20 70 72 69 6e 74 72 75 6c 65  t::sym printrule
0a10: 73 74 61 74 69 73 74 69 63 73 0a 09 20 20 20 20  statistics..    
0a20: 70 72 6f 6a 65 63 74 3a 3a 73 79 6d 20 70 72 69  project::sym pri
0a30: 6e 74 74 79 70 65 73 74 61 74 69 73 74 69 63 73  nttypestatistics
0a40: 0a 09 7d 0a 0a 09 69 66 20 7b 21 5b 74 72 6f 75  ..}...if {![trou
0a50: 62 6c 65 20 3f 5d 7d 20 7b 0a 09 20 20 20 20 55  ble ?]} {..    U
0a60: 6e 63 6f 6e 76 65 72 74 65 64 53 79 6d 62 6f 6c  nconvertedSymbol
0a70: 73 0a 09 20 20 20 20 42 61 64 53 79 6d 62 6f 6c  s..    BadSymbol
0a80: 54 79 70 65 73 0a 09 20 20 20 20 42 6c 6f 63 6b  Types..    Block
0a90: 65 64 45 78 63 6c 75 64 65 73 0a 09 20 20 20 20  edExcludes..    
0aa0: 49 6e 76 61 6c 69 64 54 61 67 73 0a 09 7d 0a 0a  InvalidTags..}..
0ab0: 09 69 66 20 7b 21 5b 74 72 6f 75 62 6c 65 20 3f  .if {![trouble ?
0ac0: 5d 7d 20 7b 0a 09 20 20 20 20 44 72 6f 70 45 78  ]} {..    DropEx
0ad0: 63 6c 75 64 65 64 53 79 6d 62 6f 6c 73 46 72 6f  cludedSymbolsFro
0ae0: 6d 52 65 66 65 72 65 6e 63 65 73 0a 09 20 20 20  mReferences..   
0af0: 20 44 65 74 65 72 6d 69 6e 65 50 72 65 66 65 72   DeterminePrefer
0b00: 65 64 50 61 72 65 6e 74 73 0a 09 7d 0a 0a 09 6c  edParents..}...l
0b10: 6f 67 20 77 72 69 74 65 20 31 20 63 6f 6c 6c 73  og write 1 colls
0b20: 79 6d 20 22 43 6f 6c 6c 61 74 69 6f 6e 20 63 6f  ym "Collation co
0b30: 6d 70 6c 65 74 65 64 22 0a 09 72 65 74 75 72 6e  mpleted"..return
0b40: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65  .    }..    type
0b50: 6d 65 74 68 6f 64 20 64 69 73 63 61 72 64 20 7b  method discard {
0b60: 7d 20 7b 0a 09 23 20 50 61 73 73 20 6d 61 6e 61  } {..# Pass mana
0b70: 67 65 72 20 69 6e 74 65 72 66 61 63 65 2e 20 45  ger interface. E
0b80: 78 65 63 75 74 65 64 20 66 6f 72 20 61 6c 6c 20  xecuted for all 
0b90: 70 61 73 73 65 73 20 61 66 74 65 72 20 74 68 65  passes after the
0ba0: 0a 09 23 20 72 75 6e 20 70 61 73 73 65 73 2c 20  ..# run passes, 
0bb0: 74 6f 20 72 65 6d 6f 76 65 20 61 6c 6c 20 64 61  to remove all da
0bc0: 74 61 20 6f 66 20 74 68 69 73 20 70 61 73 73 20  ta of this pass 
0bd0: 66 72 6f 6d 20 74 68 65 20 73 74 61 74 65 2c 0a  from the state,.
0be0: 09 23 20 61 73 20 62 65 69 6e 67 20 6f 75 74 20  .# as being out 
0bf0: 6f 66 20 64 61 74 65 2e 0a 0a 09 73 74 61 74 65  of date....state
0c00: 20 64 69 73 63 61 72 64 20 70 72 65 66 65 72 65   discard prefere
0c10: 64 70 61 72 65 6e 74 0a 09 72 65 74 75 72 6e 0a  dparent..return.
0c20: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23      }..    # # #
0c30: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
0c40: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
0c50: 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e  ##.    ## Intern
0c60: 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20  al methods..    
0c70: 70 72 6f 63 20 55 6e 63 6f 6e 76 65 72 74 65 64  proc Unconverted
0c80: 53 79 6d 62 6f 6c 73 20 7b 7d 20 7b 0a 09 23 20  Symbols {} {..# 
0c90: 50 61 72 61 6e 6f 69 61 20 2d 20 48 61 76 65 20  Paranoia - Have 
0ca0: 77 65 20 6c 65 66 74 20 73 79 6d 62 6f 6c 73 20  we left symbols 
0cb0: 77 69 74 68 6f 75 74 20 63 6f 6e 76 65 72 73 69  without conversi
0cc0: 6f 6e 0a 09 23 20 69 6e 66 6f 72 6d 61 74 69 6f  on..# informatio
0cd0: 6e 20 28 69 2e 65 2e 20 77 69 74 68 20 74 79 70  n (i.e. with typ
0ce0: 65 20 27 75 6e 64 65 66 69 6e 65 64 27 29 20 3f  e 'undefined') ?
0cf0: 0a 0a 09 73 65 74 20 75 6e 64 65 66 20 5b 70 72  ...set undef [pr
0d00: 6f 6a 65 63 74 3a 3a 73 79 6d 20 75 6e 64 65 66  oject::sym undef
0d10: 5d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 70 6e 61  ]...foreach {pna
0d20: 6d 65 20 73 6e 61 6d 65 7d 20 5b 73 74 61 74 65  me sname} [state
0d30: 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45   run {..    SELE
0d40: 43 54 20 50 2e 6e 61 6d 65 2c 20 53 2e 6e 61 6d  CT P.name, S.nam
0d50: 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 70 72  e..    FROM   pr
0d60: 6f 6a 65 63 74 20 50 2c 20 73 79 6d 62 6f 6c 20  oject P, symbol 
0d70: 53 0a 09 20 20 20 20 57 48 45 52 45 20 20 50 2e  S..    WHERE  P.
0d80: 70 69 64 20 3d 20 53 2e 70 69 64 0a 09 20 20 20  pid = S.pid..   
0d90: 20 41 4e 44 20 20 20 20 53 2e 74 79 70 65 20 3d   AND    S.type =
0da0: 20 24 75 6e 64 65 66 0a 09 7d 5d 20 7b 0a 09 20   $undef..}] {.. 
0db0: 20 20 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c     trouble fatal
0dc0: 20 22 24 70 6e 61 6d 65 20 3a 20 54 68 65 20 73   "$pname : The s
0dd0: 79 6d 62 6f 6c 20 27 24 73 6e 61 6d 65 27 20 77  ymbol '$sname' w
0de0: 61 73 20 6c 65 66 74 20 75 6e 64 65 66 69 6e 65  as left undefine
0df0: 64 22 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20  d"..}..return.  
0e00: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 42 61    }..    proc Ba
0e10: 64 53 79 6d 62 6f 6c 54 79 70 65 73 20 7b 7d 20  dSymbolTypes {} 
0e20: 7b 0a 09 23 20 50 61 72 61 6e 6f 69 61 20 2d 20  {..# Paranoia - 
0e30: 48 61 76 65 20 77 65 20 6c 65 66 74 20 73 79 6d  Have we left sym
0e40: 62 6f 6c 73 20 77 69 74 68 20 62 6f 67 75 73 20  bols with bogus 
0e50: 63 6f 6e 76 65 72 73 69 6f 6e 0a 09 23 20 69 6e  conversion..# in
0e60: 66 6f 72 6d 61 74 69 6f 6e 20 28 74 79 70 65 20  formation (type 
0e70: 6f 75 74 20 6f 66 20 74 68 65 20 76 61 6c 69 64  out of the valid
0e80: 20 72 61 6e 67 65 20 28 65 78 63 6c 75 64 65 64   range (excluded
0e90: 2c 20 62 72 61 6e 63 68 2c 0a 09 23 20 74 61 67  , branch,..# tag
0ea0: 29 29 20 3f 0a 0a 09 66 6f 72 65 61 63 68 20 7b  )) ?...foreach {
0eb0: 70 6e 61 6d 65 20 73 6e 61 6d 65 7d 20 5b 73 74  pname sname} [st
0ec0: 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53  ate run {..    S
0ed0: 45 4c 45 43 54 20 50 2e 6e 61 6d 65 2c 20 53 2e  ELECT P.name, S.
0ee0: 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20  name..    FROM  
0ef0: 20 70 72 6f 6a 65 63 74 20 50 2c 20 73 79 6d 62   project P, symb
0f00: 6f 6c 20 53 0a 09 20 20 20 20 57 48 45 52 45 20  ol S..    WHERE 
0f10: 20 50 2e 70 69 64 20 3d 20 53 2e 70 69 64 0a 09   P.pid = S.pid..
0f20: 20 20 20 20 41 4e 44 20 20 20 20 53 2e 74 79 70      AND    S.typ
0f30: 65 20 4e 4f 54 20 49 4e 20 28 30 2c 31 2c 32 29  e NOT IN (0,1,2)
0f40: 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 74 72 6f 75  ..}] {..    trou
0f50: 62 6c 65 20 66 61 74 61 6c 20 22 24 70 6e 61 6d  ble fatal "$pnam
0f60: 65 20 3a 20 54 68 65 20 73 79 6d 62 6f 6c 20 27  e : The symbol '
0f70: 24 73 6e 61 6d 65 27 20 68 61 73 20 6e 6f 20 70  $sname' has no p
0f80: 72 6f 70 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e  roper conversion
0f90: 20 74 79 70 65 22 0a 09 7d 0a 09 72 65 74 75 72   type"..}..retur
0fa0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  n.    }..    pro
0fb0: 63 20 42 6c 6f 63 6b 65 64 45 78 63 6c 75 64 65  c BlockedExclude
0fc0: 73 20 7b 7d 20 7b 0a 09 23 20 50 61 72 61 6e 6f  s {} {..# Parano
0fd0: 69 61 20 2d 20 48 61 76 65 20 77 65 20 73 63 68  ia - Have we sch
0fe0: 65 64 75 6c 65 64 20 73 79 6d 62 6f 6c 73 20 66  eduled symbols f
0ff0: 6f 72 20 65 78 63 6c 75 73 69 6f 6e 20 77 69 74  or exclusion wit
1000: 68 6f 75 74 0a 09 23 20 61 6c 73 6f 20 65 78 63  hout..# also exc
1010: 6c 75 64 69 6e 67 20 74 68 65 69 72 20 64 65 70  luding their dep
1020: 65 6e 64 65 6e 74 20 73 79 6d 62 6f 6c 73 20 3f  endent symbols ?
1030: 0a 0a 09 73 65 74 20 65 78 63 6c 20 5b 70 72 6f  ...set excl [pro
1040: 6a 65 63 74 3a 3a 73 79 6d 20 65 78 63 6c 75 64  ject::sym exclud
1050: 65 64 5d 0a 0a 09 66 6f 72 65 61 63 68 20 7b 70  ed]...foreach {p
1060: 6e 61 6d 65 20 73 6e 61 6d 65 20 62 6e 61 6d 65  name sname bname
1070: 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09  } [state run {..
1080: 20 20 20 20 53 45 4c 45 43 54 20 50 2e 6e 61 6d      SELECT P.nam
1090: 65 2c 20 53 2e 6e 61 6d 65 2c 20 53 42 2e 6e 61  e, S.name, SB.na
10a0: 6d 65 0a 09 20 20 20 20 46 52 4f 4d 20 20 20 70  me..    FROM   p
10b0: 72 6f 6a 65 63 74 20 50 2c 20 73 79 6d 62 6f 6c  roject P, symbol
10c0: 20 53 2c 20 62 6c 6f 63 6b 65 72 20 42 2c 20 73   S, blocker B, s
10d0: 79 6d 62 6f 6c 20 53 42 0a 09 20 20 20 20 57 48  ymbol SB..    WH
10e0: 45 52 45 20 20 50 2e 70 69 64 20 3d 20 53 2e 70  ERE  P.pid = S.p
10f0: 69 64 0a 09 20 20 20 20 41 4e 44 20 20 20 20 53  id..    AND    S
1100: 2e 74 79 70 65 20 3d 20 24 65 78 63 6c 0a 09 20  .type = $excl.. 
1110: 20 20 20 41 4e 44 20 20 20 20 53 2e 73 69 64 20     AND    S.sid 
1120: 3d 20 42 2e 73 69 64 0a 09 20 20 20 20 41 4e 44  = B.sid..    AND
1130: 20 20 20 20 42 2e 62 69 64 20 3d 20 53 42 2e 73      B.bid = SB.s
1140: 69 64 0a 09 20 20 20 20 41 4e 44 20 20 20 20 53  id..    AND    S
1150: 42 2e 74 79 70 65 20 21 3d 20 24 65 78 63 6c 0a  B.type != $excl.
1160: 09 7d 5d 20 7b 0a 09 20 20 20 20 74 72 6f 75 62  .}] {..    troub
1170: 6c 65 20 66 61 74 61 6c 20 22 24 70 6e 61 6d 65  le fatal "$pname
1180: 20 3a 20 54 68 65 20 73 79 6d 62 6f 6c 20 27 24   : The symbol '$
1190: 73 6e 61 6d 65 27 20 63 61 6e 6e 6f 74 20 62 65  sname' cannot be
11a0: 20 65 78 63 6c 75 64 65 64 20 61 73 20 74 68 65   excluded as the
11b0: 20 75 6e 65 78 63 6c 75 64 65 64 20 73 79 6d 62   unexcluded symb
11c0: 6f 6c 20 27 24 62 6e 61 6d 65 27 20 64 65 70 65  ol '$bname' depe
11d0: 6e 64 73 20 6f 6e 20 69 74 2e 22 0a 09 7d 0a 09  nds on it."..}..
11e0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
11f0: 20 20 70 72 6f 63 20 49 6e 76 61 6c 69 64 54 61    proc InvalidTa
1200: 67 73 20 7b 7d 20 7b 0a 09 23 20 50 61 72 61 6e  gs {} {..# Paran
1210: 6f 69 61 20 2d 20 48 61 76 65 20 77 65 20 73 63  oia - Have we sc
1220: 68 65 64 75 6c 65 64 20 73 79 6d 62 6f 6c 73 20  heduled symbols 
1230: 66 6f 72 20 63 6f 6e 76 65 72 73 69 6f 6e 20 61  for conversion a
1240: 73 20 74 61 67 73 0a 09 23 20 77 68 69 63 68 20  s tags..# which 
1250: 61 62 73 6f 6c 75 74 65 6c 79 20 63 61 6e 6e 6f  absolutely canno
1260: 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 61  t be converted a
1270: 73 20 74 61 67 73 20 64 75 65 20 74 6f 20 63 6f  s tags due to co
1280: 6d 6d 69 74 73 0a 09 23 20 6d 61 64 65 20 6f 6e  mmits..# made on
1290: 20 74 68 65 6d 20 3f 0a 0a 09 23 20 49 6e 20 6f   them ?...# In o
12a0: 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73  ther words, this
12b0: 20 63 68 65 63 6b 73 20 66 69 6e 64 73 20 6f 75   checks finds ou
12c0: 74 20 69 66 20 74 68 65 20 75 73 65 72 20 68 61  t if the user ha
12d0: 73 20 61 73 6b 65 64 0a 09 23 20 6e 6f 6e 73 65  s asked..# nonse
12e0: 6e 73 69 63 61 6c 20 63 6f 6e 76 65 72 73 69 6f  nsical conversio
12f0: 6e 73 20 6f 66 20 73 79 6d 62 6f 6c 73 2c 20 77  ns of symbols, w
1300: 68 69 63 68 20 73 68 6f 75 6c 64 20 68 61 76 65  hich should have
1310: 20 62 65 65 6e 0a 09 23 20 6c 65 66 74 20 74 6f   been..# left to
1320: 20 74 68 65 20 68 65 75 72 69 73 74 69 63 73 2c   the heuristics,
1330: 20 6d 6f 73 74 20 73 70 65 63 69 66 69 63 61 6c   most specifical
1340: 6c 79 0a 09 23 20 27 70 72 6f 6a 65 63 74 3a 3a  ly..# 'project::
1350: 73 79 6d 2e 48 61 73 43 6f 6d 6d 69 74 73 28 29  sym.HasCommits()
1360: 27 2e 0a 0a 09 73 65 74 20 74 61 67 20 5b 70 72  '....set tag [pr
1370: 6f 6a 65 63 74 3a 3a 73 79 6d 20 74 61 67 5d 0a  oject::sym tag].
1380: 0a 09 66 6f 72 65 61 63 68 20 7b 70 6e 61 6d 65  ..foreach {pname
1390: 20 73 6e 61 6d 65 7d 20 5b 73 74 61 74 65 20 72   sname} [state r
13a0: 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54  un {..    SELECT
13b0: 20 50 2e 6e 61 6d 65 2c 20 53 2e 6e 61 6d 65 0a   P.name, S.name.
13c0: 09 20 20 20 20 46 52 4f 4d 20 20 20 70 72 6f 6a  .    FROM   proj
13d0: 65 63 74 20 50 2c 20 73 79 6d 62 6f 6c 20 53 0a  ect P, symbol S.
13e0: 09 20 20 20 20 57 48 45 52 45 20 20 50 2e 70 69  .    WHERE  P.pi
13f0: 64 20 3d 20 53 2e 70 69 64 0a 09 20 20 20 20 41  d = S.pid..    A
1400: 4e 44 20 20 20 20 53 2e 74 79 70 65 20 3d 20 24  ND    S.type = $
1410: 74 61 67 0a 09 20 20 20 20 41 4e 44 20 20 20 20  tag..    AND    
1420: 53 2e 63 6f 6d 6d 69 74 5f 63 6f 75 6e 74 20 3e  S.commit_count >
1430: 20 30 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 74 72   0..}] {..    tr
1440: 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 24 70 6e  ouble fatal "$pn
1450: 61 6d 65 20 3a 20 54 68 65 20 73 79 6d 62 6f 6c  ame : The symbol
1460: 20 27 24 73 6e 61 6d 65 27 20 63 61 6e 6e 6f 74   '$sname' cannot
1470: 20 62 65 20 66 6f 72 63 65 64 20 74 6f 20 62 65   be forced to be
1480: 20 63 6f 6e 76 65 72 74 65 64 20 61 73 20 74 61   converted as ta
1490: 67 20 62 65 63 61 75 73 65 20 69 74 20 68 61 73  g because it has
14a0: 20 63 6f 6d 6d 69 74 73 2e 22 0a 09 7d 0a 09 72   commits."..}..r
14b0: 65 74 75 72 6e 20 0a 20 20 20 20 7d 0a 0a 20 20  eturn .    }..  
14c0: 20 20 70 72 6f 63 20 44 72 6f 70 45 78 63 6c 75    proc DropExclu
14d0: 64 65 64 53 79 6d 62 6f 6c 73 46 72 6f 6d 52 65  dedSymbolsFromRe
14e0: 66 65 72 65 6e 63 65 73 20 7b 7d 20 7b 0a 09 23  ferences {} {..#
14f0: 20 54 68 65 20 65 78 63 6c 75 64 65 64 20 73 79   The excluded sy
1500: 6d 62 6f 6c 73 20 63 61 6e 6e 20 62 65 20 75 73  mbols cann be us
1510: 65 64 20 61 73 20 62 6c 6f 63 6b 65 72 73 20 6e  ed as blockers n
1520: 6f 72 20 61 73 0a 09 23 20 70 6f 73 73 69 62 6c  or as..# possibl
1530: 65 20 70 61 72 65 6e 74 20 66 6f 72 20 6f 74 68  e parent for oth
1540: 65 72 20 73 79 6d 62 6f 6c 73 2e 20 57 65 20 6e  er symbols. We n
1550: 6f 77 20 64 72 6f 70 20 74 68 65 20 72 65 6c 65  ow drop the rele
1560: 76 61 6e 74 0a 09 23 20 65 6e 74 72 69 65 73 20  vant..# entries 
1570: 74 6f 20 70 72 65 76 65 6e 74 20 74 68 65 6d 20  to prevent them 
1580: 66 72 6f 6d 20 63 61 75 73 69 6e 67 20 63 6f 6e  from causing con
1590: 66 75 73 69 6f 6e 20 6c 61 74 65 72 20 6f 6e 2e  fusion later on.
15a0: 0a 0a 09 73 65 74 20 65 78 63 6c 20 5b 70 72 6f  ...set excl [pro
15b0: 6a 65 63 74 3a 3a 73 79 6d 20 65 78 63 6c 75 64  ject::sym exclud
15c0: 65 64 5d 0a 0a 09 73 74 61 74 65 20 72 75 6e 20  ed]...state run 
15d0: 7b 0a 09 20 20 20 20 44 45 4c 45 54 45 20 46 52  {..    DELETE FR
15e0: 4f 4d 20 62 6c 6f 63 6b 65 72 0a 09 20 20 20 20  OM blocker..    
15f0: 57 48 45 52 45 20 62 69 64 20 49 4e 20 28 53 45  WHERE bid IN (SE
1600: 4c 45 43 54 20 73 69 64 0a 09 09 09 20 20 46 52  LECT sid....  FR
1610: 4f 4d 20 20 20 73 79 6d 62 6f 6c 0a 09 09 09 20  OM   symbol.... 
1620: 20 57 68 45 52 45 20 20 74 79 70 65 20 3d 20 24   WhERE  type = $
1630: 65 78 63 6c 29 3b 0a 09 20 20 20 20 44 45 4c 45  excl);..    DELE
1640: 54 45 20 46 52 4f 4d 20 70 61 72 65 6e 74 0a 09  TE FROM parent..
1650: 20 20 20 20 57 48 45 52 45 20 70 69 64 20 49 4e      WHERE pid IN
1660: 20 28 53 45 4c 45 43 54 20 73 69 64 0a 09 09 09   (SELECT sid....
1670: 20 20 46 52 4f 4d 20 20 20 73 79 6d 62 6f 6c 0a    FROM   symbol.
1680: 09 09 09 20 20 57 68 45 52 45 20 20 74 79 70 65  ...  WhERE  type
1690: 20 3d 20 24 65 78 63 6c 29 3b 0a 09 7d 0a 09 72   = $excl);..}..r
16a0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
16b0: 20 70 72 6f 63 20 44 65 74 65 72 6d 69 6e 65 50   proc DetermineP
16c0: 72 65 66 65 72 65 64 50 61 72 65 6e 74 73 20 7b  referedParents {
16d0: 7d 20 7b 0a 09 61 72 72 61 79 20 73 65 74 20 70  } {..array set p
16e0: 72 65 66 65 72 65 64 20 7b 7d 0a 0a 09 23 20 50  refered {}...# P
16f0: 68 61 73 65 20 49 3a 20 50 75 6c 6c 20 74 68 65  hase I: Pull the
1700: 20 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e 74   possible parent
1710: 73 2c 20 75 73 69 6e 67 20 73 6f 72 74 69 6e 67  s, using sorting
1720: 20 74 6f 20 70 75 74 20 74 68 65 0a 09 23 20 20   to put the..#  
1730: 20 20 20 20 20 20 20 20 70 72 65 66 65 72 65 64          prefered
1740: 20 70 61 72 65 6e 74 20 6f 66 20 65 61 63 68 20   parent of each 
1750: 73 79 6d 62 6f 6c 20 6c 61 73 74 20 61 6d 6f 6e  symbol last amon
1760: 67 20 61 6c 6c 0a 09 23 20 20 20 20 20 20 20 20  g all..#        
1770: 20 20 63 61 6e 64 69 64 61 74 65 73 2c 20 61 6c    candidates, al
1780: 6c 6f 77 69 6e 67 20 75 73 20 67 65 74 20 74 68  lowing us get th
1790: 65 20 70 72 65 66 65 72 65 64 20 6f 6e 65 20 62  e prefered one b
17a0: 79 0a 09 23 20 20 20 20 20 20 20 20 20 20 65 61  y..#          ea
17b0: 63 68 20 63 61 6e 64 69 64 61 74 65 20 6f 76 65  ch candidate ove
17c0: 72 77 72 69 74 69 6e 67 20 61 6c 6c 20 70 72 65  rwriting all pre
17d0: 76 69 6f 75 73 20 73 65 6c 65 63 74 69 6f 6e 73  vious selections
17e0: 2e 0a 0a 09 66 6f 72 65 61 63 68 20 7b 73 20 70  ....foreach {s p
17f0: 20 73 6e 61 6d 65 20 70 6e 61 6d 65 20 70 72 6e   sname pname prn
1800: 61 6d 65 7d 20 5b 73 74 61 74 65 20 72 75 6e 20  ame} [state run 
1810: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 20 20  {..    SELECT   
1820: 53 2e 73 69 64 2c 20 50 2e 70 69 64 2c 20 53 2e  S.sid, P.pid, S.
1830: 6e 61 6d 65 2c 20 53 42 2e 6e 61 6d 65 2c 20 50  name, SB.name, P
1840: 52 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d  R.name..    FROM
1850: 20 20 20 20 20 73 79 6d 62 6f 6c 20 53 2c 20 70       symbol S, p
1860: 61 72 65 6e 74 20 50 2c 20 73 79 6d 62 6f 6c 20  arent P, symbol 
1870: 53 42 2c 20 70 72 6f 6a 65 63 74 20 50 52 0a 09  SB, project PR..
1880: 20 20 20 20 57 48 45 52 45 20 20 20 20 53 2e 73      WHERE    S.s
1890: 69 64 20 3d 20 50 2e 73 69 64 0a 09 20 20 20 20  id = P.sid..    
18a0: 41 4e 44 20 20 20 20 20 20 50 2e 70 69 64 20 3d  AND      P.pid =
18b0: 20 53 42 2e 73 69 64 0a 09 20 20 20 20 41 4e 44   SB.sid..    AND
18c0: 20 20 20 20 20 20 53 2e 70 69 64 20 3d 20 50 52        S.pid = PR
18d0: 2e 70 69 64 0a 09 20 20 20 20 4f 52 44 45 52 20  .pid..    ORDER 
18e0: 42 59 20 50 2e 6e 20 41 53 43 2c 20 50 2e 70 69  BY P.n ASC, P.pi
18f0: 64 20 44 45 53 43 0a 09 20 20 20 20 2d 2d 20 48  d DESC..    -- H
1900: 69 67 68 65 72 20 76 6f 74 65 73 20 61 6e 64 20  igher votes and 
1910: 73 6d 61 6c 6c 65 72 20 69 64 73 20 28 3d 20 65  smaller ids (= e
1920: 61 72 6c 69 65 72 20 62 72 61 6e 63 68 65 73 29  arlier branches)
1930: 20 6c 61 73 74 0a 09 20 20 20 20 2d 2d 20 57 65   last..    -- We
1940: 20 73 69 6d 70 6c 79 20 6b 65 65 70 20 74 68 65   simply keep the
1950: 20 6c 61 73 74 20 70 6f 73 73 69 62 6c 65 20 70   last possible p
1960: 61 72 65 6e 74 20 66 6f 72 20 65 61 63 68 0a 09  arent for each..
1970: 20 20 20 20 2d 2d 20 73 79 6d 62 6f 6c 2e 20 20      -- symbol.  
1980: 54 68 69 73 20 70 61 72 65 6e 74 20 77 69 6c 6c  This parent will
1990: 20 68 61 76 65 20 74 68 65 20 6d 61 78 20 6e 75   have the max nu
19a0: 6d 62 65 72 20 6f 66 20 76 6f 74 65 73 0a 09 20  mber of votes.. 
19b0: 20 20 20 2d 2d 20 66 6f 72 20 69 74 73 20 73 79     -- for its sy
19c0: 6d 62 6f 6c 20 61 6e 64 20 77 69 6c 6c 20 62 65  mbol and will be
19d0: 20 74 68 65 20 65 61 72 6c 69 65 73 74 20 63 72   the earliest cr
19e0: 65 61 74 65 64 20 62 72 61 6e 63 68 0a 09 20 20  eated branch..  
19f0: 20 20 2d 2d 20 70 6f 73 73 69 62 6c 65 20 61 6d    -- possible am
1a00: 6f 6e 67 20 61 6c 6c 20 77 69 74 68 20 6d 61 6e  ong all with man
1a10: 79 20 76 6f 74 65 73 2e 0a 09 7d 5d 20 7b 0a 09  y votes...}] {..
1a20: 20 20 20 20 73 65 74 20 70 72 65 66 65 72 65 64      set prefered
1a30: 28 24 73 29 20 5b 6c 69 73 74 20 24 70 20 24 73  ($s) [list $p $s
1a40: 6e 61 6d 65 20 24 70 6e 61 6d 65 20 24 70 72 6e  name $pname $prn
1a50: 61 6d 65 5d 0a 09 7d 0a 0a 09 23 20 50 68 61 73  ame]..}...# Phas
1a60: 65 20 49 49 3a 20 57 72 69 74 65 20 74 68 65 20  e II: Write the 
1a70: 66 6f 75 6e 64 20 70 72 65 66 65 72 65 6e 63 65  found preference
1a80: 73 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  s back into the 
1a90: 74 61 62 6c 65 0a 09 23 20 20 20 20 20 20 20 20  table..#        
1aa0: 20 20 20 74 68 69 73 20 70 61 73 73 20 64 65 66     this pass def
1ab0: 69 6e 65 64 20 66 6f 72 20 69 74 2e 0a 0a 09 66  ined for it....f
1ac0: 6f 72 65 61 63 68 20 7b 73 20 78 7d 20 5b 61 72  oreach {s x} [ar
1ad0: 72 61 79 20 67 65 74 20 70 72 65 66 65 72 65 64  ray get prefered
1ae0: 5d 20 7b 0a 09 20 20 20 20 73 74 72 75 63 74 3a  ] {..    struct:
1af0: 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 78 20  :list assign $x 
1b00: 70 20 73 6e 61 6d 65 20 70 6e 61 6d 65 20 70 72  p sname pname pr
1b10: 6e 61 6d 65 0a 09 20 20 20 20 73 74 61 74 65 20  name..    state 
1b20: 72 75 6e 20 7b 0a 09 09 49 4e 53 45 52 54 20 49  run {...INSERT I
1b30: 4e 54 4f 20 70 72 65 66 65 72 65 64 70 61 72 65  NTO preferedpare
1b40: 6e 74 20 28 73 69 64 2c 20 70 69 64 29 0a 09 09  nt (sid, pid)...
1b50: 56 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20  VALUES          
1b60: 20 20 20 20 20 20 20 20 20 20 20 28 24 73 2c 20             ($s, 
1b70: 20 24 70 29 3b 0a 09 20 20 20 20 7d 0a 0a 09 20   $p);..    }... 
1b80: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 33 20 70     log write 3 p
1b90: 63 6f 6c 6c 73 79 6d 20 22 24 70 72 6e 61 6d 65  collsym "$prname
1ba0: 20 3a 20 27 24 73 6e 61 6d 65 27 73 20 70 72 65   : '$sname's pre
1bb0: 66 65 72 65 64 20 70 61 72 65 6e 74 20 69 73 20  fered parent is 
1bc0: 27 24 70 6e 61 6d 65 27 22 0a 09 7d 0a 0a 09 23  '$pname'"..}...#
1bd0: 20 50 68 61 73 65 20 49 49 49 3a 20 43 68 65 63   Phase III: Chec
1be0: 6b 20 74 68 65 20 72 65 73 75 6c 74 20 74 68 61  k the result tha
1bf0: 74 20 61 6c 6c 20 73 79 6d 62 6f 6c 73 20 65 78  t all symbols ex
1c00: 63 65 70 74 20 66 6f 72 0a 09 23 20 20 20 20 20  cept for..#     
1c10: 20 20 20 20 20 20 20 74 72 75 6e 6b 73 20 68 61         trunks ha
1c20: 76 65 20 61 20 70 72 65 66 65 72 65 64 20 70 61  ve a prefered pa
1c30: 72 65 6e 74 2e 0a 0a 09 66 6f 72 65 61 63 68 20  rent....foreach 
1c40: 7b 70 6e 61 6d 65 20 73 6e 61 6d 65 7d 20 5b 73  {pname sname} [s
1c50: 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20  tate run {..    
1c60: 53 45 4c 45 43 54 20 53 2e 6e 61 6d 65 2c 20 50  SELECT S.name, P
1c70: 52 2e 6e 61 6d 65 0a 09 20 20 20 20 46 52 4f 4d  R.name..    FROM
1c80: 20 20 20 70 72 6f 6a 65 63 74 20 50 52 2c 20 73     project PR, s
1c90: 79 6d 62 6f 6c 20 53 20 4c 45 46 54 20 4f 55 54  ymbol S LEFT OUT
1ca0: 45 52 20 4a 4f 49 4e 20 70 72 65 66 65 72 65 64  ER JOIN prefered
1cb0: 70 61 72 65 6e 74 20 50 0a 09 20 20 20 20 4f 4e  parent P..    ON
1cc0: 20 20 20 20 20 53 2e 73 69 64 20 3d 20 50 2e 73       S.sid = P.s
1cd0: 69 64 0a 09 20 20 20 20 57 48 45 52 45 20 20 50  id..    WHERE  P
1ce0: 2e 70 69 64 20 49 53 20 4e 55 4c 4c 0a 09 20 20  .pid IS NULL..  
1cf0: 20 20 41 4e 44 20 20 20 20 53 2e 6e 61 6d 65 20    AND    S.name 
1d00: 21 3d 20 27 3a 74 72 75 6e 6b 3a 27 0a 09 20 20  != ':trunk:'..  
1d10: 20 20 41 4e 44 20 20 20 20 53 2e 70 69 64 20 3d    AND    S.pid =
1d20: 20 50 52 2e 70 69 64 0a 09 7d 5d 20 7b 0a 09 20   PR.pid..}] {.. 
1d30: 20 20 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c     trouble fatal
1d40: 20 22 24 70 72 6e 61 6d 65 20 3a 20 27 24 73 6e   "$prname : '$sn
1d50: 61 6d 65 27 20 68 61 73 20 6e 6f 20 70 72 65 66  ame' has no pref
1d60: 65 72 65 64 20 70 61 72 65 6e 74 2e 22 0a 09 7d  ered parent."..}
1d70: 0a 0a 09 23 20 54 68 65 20 72 65 76 65 72 73 65  ...# The reverse
1d80: 2c 20 68 61 76 69 6e 67 20 70 72 65 66 65 72 65  , having prefere
1d90: 64 20 70 61 72 65 6e 74 73 20 66 6f 72 20 75 6e  d parents for un
1da0: 6b 6e 6f 77 6e 20 73 79 6d 62 6f 6c 73 0a 09 23  known symbols..#
1db0: 20 63 61 6e 6e 6f 74 20 6f 63 63 75 72 2e 0a 09   cannot occur...
1dc0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
1dd0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
1de0: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
1df0: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
1e00: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a   Configuration..
1e10: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69      pragma -hasi
1e20: 6e 73 74 61 6e 63 65 73 20 20 20 6e 6f 20 3b 20  nstances   no ; 
1e30: 23 20 73 69 6e 67 6c 65 74 6f 6e 0a 20 20 20 20  # singleton.    
1e40: 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69  pragma -hastypei
1e50: 6e 66 6f 20 20 20 20 6e 6f 20 3b 20 23 20 6e 6f  nfo    no ; # no
1e60: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20   introspection. 
1e70: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79     pragma -hasty
1e80: 70 65 64 65 73 74 72 6f 79 20 6e 6f 20 3b 20 23  pedestroy no ; #
1e90: 20 69 6d 6d 6f 72 74 61 6c 0a 0a 20 20 20 20 23   immortal..    #
1ea0: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
1eb0: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
1ec0: 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70  ######.}..namesp
1ed0: 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66  ace eval ::vc::f
1ee0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
1ef0: 76 73 3a 3a 70 61 73 73 20 7b 0a 20 20 20 20 6e  vs::pass {.    n
1f00: 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20  amespace export 
1f10: 63 6f 6c 6c 73 79 6d 0a 20 20 20 20 6e 61 6d 65  collsym.    name
1f20: 73 70 61 63 65 20 65 76 61 6c 20 63 6f 6c 6c 73  space eval colls
1f30: 79 6d 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20  ym {..namespace 
1f40: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73  import ::vc::fos
1f50: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
1f60: 3a 3a 72 65 70 6f 73 69 74 6f 72 79 0a 09 6e 61  ::repository..na
1f70: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
1f80: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
1f90: 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a  ort::cvs::state.
1fa0: 09 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20  .namespace eval 
1fb0: 70 72 6f 6a 65 63 74 20 7b 0a 09 20 20 20 20 6e  project {..    n
1fc0: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
1fd0: 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  ::vc::fossil::im
1fe0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65  port::cvs::proje
1ff0: 63 74 3a 3a 73 79 6d 0a 09 7d 0a 09 6e 61 6d 65  ct::sym..}..name
2000: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
2010: 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c  c::tools::troubl
2020: 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  e..namespace imp
2030: 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a  ort ::vc::tools:
2040: 3a 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 69 73 74  :log..log regist
2050: 65 72 20 63 6f 6c 6c 73 79 6d 0a 20 20 20 20 7d  er collsym.    }
2060: 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23  .}..# # ## ### #
2070: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
2080: 23 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23  ########### ####
2090: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a0: 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61 63 6b  #.## Ready..pack
20b0: 61 67 65 20 70 72 6f 76 69 64 65 20 76 63 3a 3a  age provide vc::
20c0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
20d0: 63 76 73 3a 3a 70 61 73 73 3a 3a 63 6f 6c 6c 73  cvs::pass::colls
20e0: 79 6d 20 31 2e 30 0a 72 65 74 75 72 6e 0a        ym 1.0.return.