Hex Artifact Content
Not logged in

Artifact 852144546e242a873be533117963bbfcba119412:

File tools/cvs2fossil/lib/c2f_pfiltersym.tcl part of check-in [2516f4a56d] - Bugfix. When I introduced the 'revisionbranchchildren' table to pass 2 I forgot to update pass 4 as well. Added code to drop the excluded revisons from this table as well, as either parent of branches, or branch child of some other revision. by aku on 2007-11-16 03:54:54.

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 56 2e 20 43 6f 6d 69 6e 67 20 61 66 74  s IV. Coming aft
0210: 65 72 20 74 68 65 20 73 79 6d 62 6f 6c 20 63 6f  er the symbol co
0220: 6c 6c 61 74 69 6f 6e 20 70 61 73 73 20 74 68 69  llation pass thi
0230: 73 20 70 61 73 73 20 6e 6f 77 0a 23 23 20 72 65  s pass now.## re
0240: 6d 6f 76 65 73 20 61 6c 6c 20 72 65 76 69 73 69  moves all revisi
0250: 6f 6e 73 20 61 6e 64 20 73 79 6d 62 6f 6c 73 20  ons and symbols 
0260: 72 65 66 65 72 65 6e 63 69 6e 67 20 61 6e 79 20  referencing any 
0270: 6f 66 20 74 68 65 20 65 78 63 6c 75 64 65 64 0a  of the excluded.
0280: 23 23 20 73 79 6d 62 6f 6c 73 20 66 72 6f 6d 20  ## symbols from 
0290: 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20 64  the persistent d
02a0: 61 74 61 62 61 73 65 2e 0a 0a 23 20 23 20 23 23  atabase...# # ##
02b0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
02c0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
02d0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  # ##############
02e0: 23 23 23 23 23 23 23 0a 23 23 20 52 65 71 75 69  #######.## Requi
02f0: 72 65 6d 65 6e 74 73 0a 0a 70 61 63 6b 61 67 65  rements..package
0300: 20 72 65 71 75 69 72 65 20 54 63 6c 20 38 2e 34   require Tcl 8.4
0310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b                 ;
0330: 20 23 20 52 65 71 75 69 72 65 64 20 72 75 6e 74   # Required runt
0340: 69 6d 65 2e 0a 70 61 63 6b 61 67 65 20 72 65 71  ime..package req
0350: 75 69 72 65 20 73 6e 69 74 20 20 20 20 20 20 20  uire snit       
0360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0370: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 4f             ; # O
0380: 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b 61 67  O system..packag
0390: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f  e require vc::to
03a0: 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 20 20 20 20  ols::misc       
03b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03c0: 3b 20 23 20 54 65 78 74 20 66 6f 72 6d 61 74 74  ; # Text formatt
03d0: 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72 65 71  ing..package req
03e0: 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a  uire vc::tools::
03f0: 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20 20 20  log             
0400: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 55             ; # U
0410: 73 65 72 20 66 65 65 64 62 61 63 6b 2e 0a 70 61  ser feedback..pa
0420: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63  ckage require vc
0430: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
0440: 3a 3a 63 76 73 3a 3a 73 74 61 74 65 20 20 20 20  ::cvs::state    
0450: 20 20 20 20 3b 20 23 20 53 74 61 74 65 20 73 74      ; # State st
0460: 6f 72 61 67 65 2e 0a 70 61 63 6b 61 67 65 20 72  orage..package r
0470: 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69  equire vc::fossi
0480: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
0490: 69 6e 74 65 67 72 69 74 79 20 20 20 20 3b 20 23  integrity    ; #
04a0: 20 53 74 61 74 65 20 73 74 6f 72 61 67 65 20 69   State storage i
04b0: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 73 2e  ntegrity checks.
04c0: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
04d0: 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70   vc::fossil::imp
04e0: 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63  ort::cvs::projec
04f0: 74 3a 3a 73 79 6d 20 3b 20 23 20 50 72 6f 6a 65  t::sym ; # Proje
0500: 63 74 20 6c 65 76 65 6c 20 73 79 6d 62 6f 6c 73  ct level symbols
0510: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
0520: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0530: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
0540: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
0550: 23 23 20 52 65 67 69 73 74 65 72 20 74 68 65 20  ## Register the 
0560: 70 61 73 73 20 77 69 74 68 20 74 68 65 20 6d 61  pass with the ma
0570: 6e 61 67 65 6d 65 6e 74 0a 0a 76 63 3a 3a 66 6f  nagement..vc::fo
0580: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
0590: 73 3a 3a 70 61 73 73 20 64 65 66 69 6e 65 20 5c  s::pass define \
05a0: 0a 20 20 20 20 46 69 6c 74 65 72 53 79 6d 62 6f  .    FilterSymbo
05b0: 6c 73 20 5c 0a 20 20 20 20 7b 46 69 6c 74 65 72  ls \.    {Filter
05c0: 20 73 79 6d 62 6f 6c 73 2c 20 72 65 6d 6f 76 65   symbols, remove
05d0: 20 61 6c 6c 20 65 78 63 6c 75 64 65 64 20 70 69   all excluded pi
05e0: 65 63 65 73 7d 20 5c 0a 20 20 20 20 3a 3a 76 63  eces} \.    ::vc
05f0: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
0600: 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 66 69 6c  ::cvs::pass::fil
0610: 74 65 72 73 79 6d 0a 0a 23 20 23 20 23 23 20 23  tersym..# # ## #
0620: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
0630: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20  # ############# 
0640: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0650: 23 23 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74 3a  #####.## ..snit:
0660: 3a 74 79 70 65 20 3a 3a 76 63 3a 3a 66 6f 73 73  :type ::vc::foss
0670: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
0680: 3a 70 61 73 73 3a 3a 66 69 6c 74 65 72 73 79 6d  :pass::filtersym
0690: 20 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23 23   {.    # # ## ##
06a0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
06b0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
06c0: 20 20 20 23 23 20 50 75 62 6c 69 63 20 41 50 49     ## Public API
06d0: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64  ..    typemethod
06e0: 20 73 65 74 75 70 20 7b 7d 20 7b 0a 09 23 20 44   setup {} {..# D
06f0: 65 66 69 6e 65 20 6e 61 6d 65 73 20 61 6e 64 20  efine names and 
0700: 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 65  structure of the
0710: 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 61 74   persistent stat
0720: 65 20 6f 66 20 74 68 69 73 0a 09 23 20 70 61 73  e of this..# pas
0730: 73 2e 0a 0a 09 73 74 61 74 65 20 72 65 61 64 69  s....state readi
0740: 6e 67 20 73 79 6d 62 6f 6c 0a 09 73 74 61 74 65  ng symbol..state
0750: 20 72 65 61 64 69 6e 67 20 62 6c 6f 63 6b 65 72   reading blocker
0760: 0a 09 73 74 61 74 65 20 72 65 61 64 69 6e 67 20  ..state reading 
0770: 70 61 72 65 6e 74 0a 09 73 74 61 74 65 20 72 65  parent..state re
0780: 61 64 69 6e 67 20 70 72 65 66 65 72 65 64 70 61  ading preferedpa
0790: 72 65 6e 74 0a 09 73 74 61 74 65 20 72 65 61 64  rent..state read
07a0: 69 6e 67 20 72 65 76 69 73 69 6f 6e 0a 09 73 74  ing revision..st
07b0: 61 74 65 20 72 65 61 64 69 6e 67 20 72 65 76 69  ate reading revi
07c0: 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c 64 72  sionbranchchildr
07d0: 65 6e 0a 09 73 74 61 74 65 20 72 65 61 64 69 6e  en..state readin
07e0: 67 20 62 72 61 6e 63 68 0a 09 73 74 61 74 65 20  g branch..state 
07f0: 72 65 61 64 69 6e 67 20 74 61 67 0a 0a 09 73 74  reading tag...st
0800: 61 74 65 20 77 72 69 74 69 6e 67 20 6e 6f 6f 70  ate writing noop
0810: 20 7b 0a 09 20 20 20 20 69 64 20 20 20 20 49 4e   {..    id    IN
0820: 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c 20 20  TEGER NOT NULL  
0830: 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 2d 2d 20  PRIMARY KEY, -- 
0840: 74 61 67 2f 62 72 61 6e 63 68 20 72 65 66 65 72  tag/branch refer
0850: 65 6e 63 65 0a 09 20 20 20 20 6e 6f 6f 70 20 20  ence..    noop  
0860: 49 4e 54 45 47 45 52 20 4e 4f 54 20 4e 55 4c 4c  INTEGER NOT NULL
0870: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
0880: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f  }..    typemetho
0890: 64 20 6c 6f 61 64 20 7b 7d 20 7b 0a 09 23 20 50  d load {} {..# P
08a0: 61 73 73 20 6d 61 6e 61 67 65 72 20 69 6e 74 65  ass manager inte
08b0: 72 66 61 63 65 2e 20 45 78 65 63 75 74 65 64 20  rface. Executed 
08c0: 74 6f 20 6c 6f 61 64 20 64 61 74 61 20 63 6f 6d  to load data com
08d0: 70 75 74 65 64 20 62 79 0a 09 23 20 74 68 69 73  puted by..# this
08e0: 20 70 61 73 73 20 69 6e 74 6f 20 6d 65 6d 6f 72   pass into memor
08f0: 79 20 77 68 65 6e 20 74 68 69 73 20 70 61 73 73  y when this pass
0900: 20 69 73 20 73 6b 69 70 70 65 64 20 69 6e 73 74   is skipped inst
0910: 65 61 64 20 6f 66 0a 09 23 20 65 78 65 63 75 74  ead of..# execut
0920: 65 64 2e 0a 0a 09 23 20 54 68 65 20 72 65 73 75  ed....# The resu
0930: 6c 74 73 20 6f 66 20 74 68 69 73 20 70 61 73 73  lts of this pass
0940: 20 61 72 65 20 66 75 6c 6c 79 20 69 6e 20 74 68   are fully in th
0950: 65 20 70 65 72 73 69 73 74 65 6e 74 20 73 74 61  e persistent sta
0960: 74 65 2c 0a 09 23 20 74 68 65 72 65 20 69 73 20  te,..# there is 
0970: 6e 6f 74 68 69 6e 67 20 74 6f 20 6c 6f 61 64 20  nothing to load 
0980: 66 6f 72 20 74 68 65 20 6e 65 78 74 20 6f 6e 65  for the next one
0990: 2e 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  ...return.    }.
09a0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20  .    typemethod 
09b0: 72 75 6e 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73  run {} {..# Pass
09c0: 20 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 66 61   manager interfa
09d0: 63 65 2e 20 45 78 65 63 75 74 65 64 20 74 6f 20  ce. Executed to 
09e0: 70 65 72 66 6f 72 6d 20 74 68 65 0a 09 23 20 66  perform the..# f
09f0: 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 6f 66 20  unctionality of 
0a00: 74 68 65 20 70 61 73 73 2e 0a 0a 09 23 20 54 68  the pass....# Th
0a10: 65 20 72 65 6d 6f 76 61 6c 20 6f 66 20 65 78 63  e removal of exc
0a20: 6c 75 64 65 64 20 73 79 6d 62 6f 6c 73 20 61 6e  luded symbols an
0a30: 64 20 65 76 65 72 79 74 68 69 6e 67 20 72 65 66  d everything ref
0a40: 65 72 65 6e 63 69 6e 67 0a 09 23 20 74 6f 20 74  erencing..# to t
0a50: 68 65 6d 20 69 73 20 64 6f 6e 65 20 63 6f 6d 70  hem is done comp
0a60: 6c 65 74 65 6c 79 20 69 6e 20 74 68 65 20 64 61  letely in the da
0a70: 74 61 62 61 73 65 2e 0a 0a 09 73 74 61 74 65 20  tabase....state 
0a80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20  transaction {.. 
0a90: 20 20 20 46 69 6c 74 65 72 45 78 63 6c 75 64 65     FilterExclude
0aa0: 64 53 79 6d 62 6f 6c 73 0a 09 20 20 20 20 4d 75  dSymbols..    Mu
0ab0: 74 61 74 65 53 79 6d 62 6f 6c 73 0a 09 20 20 20  tateSymbols..   
0ac0: 20 41 64 6a 75 73 74 50 61 72 65 6e 74 73 0a 09   AdjustParents..
0ad0: 20 20 20 20 52 65 66 69 6e 65 53 79 6d 62 6f 6c      RefineSymbol
0ae0: 73 0a 0a 09 20 20 20 20 23 20 53 74 72 69 63 74  s...    # Strict
0af0: 20 69 6e 74 65 67 72 69 74 79 20 65 6e 66 6f 72   integrity enfor
0b00: 63 65 73 20 74 68 61 74 20 61 6c 6c 20 6d 65 74  ces that all met
0b10: 61 20 65 6e 74 72 69 65 73 20 61 72 65 20 69 6e  a entries are in
0b20: 0a 09 20 20 20 20 23 20 74 68 65 20 73 61 6d 65  ..    # the same
0b30: 20 4c 4f 44 20 61 73 20 74 68 65 20 72 65 76 69   LOD as the revi
0b40: 73 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 6d 2e  sion using them.
0b50: 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 09   At this point..
0b60: 20 20 20 20 23 20 74 68 69 73 20 6d 61 79 20 6e      # this may n
0b70: 6f 74 20 62 65 20 74 72 75 65 20 61 6e 79 20 6c  ot be true any l
0b80: 6f 6e 67 65 72 2e 20 49 66 20 61 20 4e 54 44 42  onger. If a NTDB
0b90: 20 77 61 73 20 65 78 63 6c 75 64 65 64 0a 09 20   was excluded.. 
0ba0: 20 20 20 23 20 74 68 65 6e 20 61 6c 6c 20 72 65     # then all re
0bb0: 76 69 73 69 6f 6e 73 20 69 74 20 73 68 61 72 65  visions it share
0bc0: 64 20 77 69 74 68 20 74 68 65 20 74 72 75 6e 6b  d with the trunk
0bd0: 20 77 65 72 65 20 6d 6f 76 65 64 0a 09 20 20 20   were moved..   
0be0: 20 23 20 74 6f 20 74 68 65 20 74 72 75 6e 6b 20   # to the trunk 
0bf0: 4c 4f 44 2c 20 68 6f 77 65 76 65 72 20 74 68 65  LOD, however the
0c00: 69 72 20 6d 65 74 61 20 65 6e 74 72 69 65 73 20  ir meta entries 
0c10: 77 69 6c 6c 20 73 74 69 6c 6c 0a 09 20 20 20 20  will still..    
0c20: 23 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 6e  # refer to the n
0c30: 6f 77 20 67 6f 6e 65 20 4c 4f 44 20 73 79 6d 62  ow gone LOD symb
0c40: 6f 6c 2e 20 54 68 69 73 20 69 73 20 66 69 6e 65  ol. This is fine
0c50: 20 68 6f 77 65 76 65 72 2c 0a 09 20 20 20 20 23   however,..    #
0c60: 20 69 74 20 77 69 6c 6c 20 6e 6f 74 20 61 66 66   it will not aff
0c70: 65 63 74 20 6f 75 72 20 61 62 69 6c 69 74 79 20  ect our ability 
0c80: 74 6f 20 75 73 65 20 74 68 65 20 6d 65 74 61 20  to use the meta 
0c90: 65 6e 74 72 69 65 73 0a 09 20 20 20 20 23 20 74  entries..    # t
0ca0: 6f 20 64 69 73 74 69 6e 67 75 69 73 68 20 61 6e  o distinguish an
0cb0: 64 20 67 72 6f 75 70 20 72 65 76 69 73 69 6f 6e  d group revision
0cc0: 73 20 69 6e 74 6f 20 63 68 61 6e 67 65 73 65 74  s into changeset
0cd0: 73 2e 20 49 74 0a 09 20 20 20 20 23 20 73 68 6f  s. It..    # sho
0ce0: 75 6c 64 20 62 65 20 6e 6f 74 65 64 20 74 68 61  uld be noted tha
0cf0: 74 20 77 65 20 63 61 6e 6e 6f 74 20 73 69 6d 70  t we cannot simp
0d00: 6c 79 20 73 77 69 74 63 68 20 74 68 65 20 6d 65  ly switch the me
0d10: 74 61 0a 09 20 20 20 20 23 20 65 6e 74 72 69 65  ta..    # entrie
0d20: 73 20 6f 76 65 72 20 74 6f 20 74 68 65 20 74 72  s over to the tr
0d30: 75 6e 6b 20 65 69 74 68 65 72 2c 20 61 73 20 74  unk either, as t
0d40: 68 61 74 20 6d 61 79 20 63 61 75 73 65 20 74 68  hat may cause th
0d50: 65 0a 09 20 20 20 20 23 20 6d 6f 64 69 66 69 65  e..    # modifie
0d60: 64 20 65 6e 74 72 69 65 73 20 74 6f 20 76 69 6f  d entries to vio
0d70: 6c 61 74 65 20 74 68 65 20 75 6e 69 71 75 65 2d  late the unique-
0d80: 6e 65 73 73 20 63 6f 6e 73 74 72 61 69 6e 0a 09  ness constrain..
0d90: 20 20 20 20 23 20 73 65 74 20 6f 6e 20 74 68 61      # set on tha
0da0: 74 20 74 61 62 6c 65 2e 0a 09 20 20 20 20 69 6e  t table...    in
0db0: 74 65 67 72 69 74 79 20 6d 65 74 61 72 65 6c 61  tegrity metarela
0dc0: 78 65 64 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69  xed..}...log wri
0dd0: 74 65 20 31 20 66 69 6c 74 65 72 73 79 6d 20 22  te 1 filtersym "
0de0: 46 69 6c 74 65 72 69 6e 67 20 63 6f 6d 70 6c 65  Filtering comple
0df0: 74 65 64 22 0a 09 72 65 74 75 72 6e 0a 20 20 20  ted"..return.   
0e00: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68   }..    typemeth
0e10: 6f 64 20 64 69 73 63 61 72 64 20 7b 7d 20 7b 0a  od discard {} {.
0e20: 09 23 20 50 61 73 73 20 6d 61 6e 61 67 65 72 20  .# Pass manager 
0e30: 69 6e 74 65 72 66 61 63 65 2e 20 45 78 65 63 75  interface. Execu
0e40: 74 65 64 20 66 6f 72 20 61 6c 6c 20 70 61 73 73  ted for all pass
0e50: 65 73 20 61 66 74 65 72 20 74 68 65 0a 09 23 20  es after the..# 
0e60: 72 75 6e 20 70 61 73 73 65 73 2c 20 74 6f 20 72  run passes, to r
0e70: 65 6d 6f 76 65 20 61 6c 6c 20 64 61 74 61 20 6f  emove all data o
0e80: 66 20 74 68 69 73 20 70 61 73 73 20 66 72 6f 6d  f this pass from
0e90: 20 74 68 65 20 73 74 61 74 65 2c 0a 09 23 20 61   the state,..# a
0ea0: 73 20 62 65 69 6e 67 20 6f 75 74 20 6f 66 20 64  s being out of d
0eb0: 61 74 65 2e 0a 09 72 65 74 75 72 6e 0a 20 20 20  ate...return.   
0ec0: 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23   }..    # # ## #
0ed0: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
0ee0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
0ef0: 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20      ## Internal 
0f00: 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20 70 72 6f  methods..    pro
0f10: 63 20 46 69 6c 74 65 72 45 78 63 6c 75 64 65 64  c FilterExcluded
0f20: 53 79 6d 62 6f 6c 73 20 7b 7d 20 7b 0a 09 6c 6f  Symbols {} {..lo
0f30: 67 20 77 72 69 74 65 20 33 20 66 69 6c 74 65 72  g write 3 filter
0f40: 73 79 6d 20 22 46 69 6c 74 65 72 20 6f 75 74 20  sym "Filter out 
0f50: 65 78 63 6c 75 64 65 64 20 73 79 6d 62 6f 6c 73  excluded symbols
0f60: 20 61 6e 64 20 75 73 65 72 73 22 0a 0a 09 23 20   and users"...# 
0f70: 57 65 20 70 75 6c 6c 20 61 6c 6c 20 74 68 65 20  We pull all the 
0f80: 65 78 63 6c 75 64 65 64 20 73 79 6d 62 6f 6c 73  excluded symbols
0f90: 20 74 6f 67 65 74 68 65 72 20 69 6e 74 6f 20 61   together into a
0fa0: 20 74 61 62 6c 65 20 66 6f 72 0a 09 23 20 65 61   table for..# ea
0fb0: 73 79 20 72 65 66 65 72 65 6e 63 65 20 62 79 20  sy reference by 
0fc0: 74 68 65 20 75 70 63 6f 6d 69 6e 67 20 44 45 4c  the upcoming DEL
0fd0: 45 54 45 20 61 6e 64 20 6f 74 68 65 72 20 73 74  ETE and other st
0fe0: 61 74 65 6d 65 6e 74 73 2e 0a 09 23 20 28 27 78  atements...# ('x
0ff0: 20 49 4e 20 74 61 62 6c 65 27 20 63 6c 61 75 73   IN table' claus
1000: 65 73 29 2e 0a 0a 09 73 65 74 20 65 78 63 6c 20  es)....set excl 
1010: 5b 70 72 6f 6a 65 63 74 3a 3a 73 79 6d 20 65 78  [project::sym ex
1020: 63 6c 75 64 65 64 5d 0a 0a 09 73 74 61 74 65 20  cluded]...state 
1030: 72 75 6e 20 7b 0a 09 20 20 20 20 43 52 45 41 54  run {..    CREAT
1040: 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
1050: 45 20 65 78 63 6c 75 64 65 64 73 79 6d 62 6f 6c  E excludedsymbol
1060: 73 20 41 53 0a 09 20 20 20 20 53 45 4c 45 43 54  s AS..    SELECT
1070: 20 73 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 20   sid..    FROM  
1080: 20 73 79 6d 62 6f 6c 0a 09 20 20 20 20 57 48 45   symbol..    WHE
1090: 52 45 20 20 74 79 70 65 20 3d 20 24 65 78 63 6c  RE  type = $excl
10a0: 0a 09 7d 0a 0a 09 23 20 46 69 72 73 74 20 77 65  ..}...# First we
10b0: 20 68 61 76 65 20 74 6f 20 68 61 6e 64 6c 65 20   have to handle 
10c0: 74 68 65 20 70 6f 73 73 69 62 69 6c 69 74 79 20  the possibility 
10d0: 6f 66 20 61 6e 20 65 78 63 6c 75 64 65 64 0a 09  of an excluded..
10e0: 23 20 4e 54 44 42 2e 20 54 68 69 73 20 69 73 20  # NTDB. This is 
10f0: 61 20 73 70 65 63 69 61 6c 20 73 70 65 63 69 61  a special specia
1100: 6c 20 63 61 73 65 20 74 68 65 72 65 20 77 65 20  l case there we 
1110: 68 61 76 65 20 74 6f 0a 09 23 20 72 65 67 72 61  have to..# regra
1120: 66 74 20 74 68 65 20 72 65 76 69 73 69 6f 6e 73  ft the revisions
1130: 20 77 68 69 63 68 20 61 72 65 20 73 68 61 72 65   which are share
1140: 64 20 62 65 74 77 65 65 6e 20 74 68 65 20 4e 54  d between the NT
1150: 44 42 20 61 6e 64 0a 09 23 20 54 72 75 6e 6b 20  DB and..# Trunk 
1160: 6f 6e 74 6f 20 74 68 65 20 74 72 75 6e 6b 2c 20  onto the trunk, 
1170: 70 72 65 76 65 6e 74 69 6e 67 20 74 68 65 69 72  preventing their
1180: 20 64 65 6c 65 74 69 6f 6e 20 6c 61 74 65 72 2e   deletion later.
1190: 20 57 65 0a 09 23 20 68 61 76 65 20 63 6f 64 65   We..# have code
11a0: 20 66 6f 72 20 74 68 61 74 20 69 6e 20 27 66 69   for that in 'fi
11b0: 6c 65 27 2c 20 68 6f 77 65 76 65 72 20 74 68 61  le', however tha
11c0: 74 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 74 68  t operated on th
11d0: 65 0a 09 23 20 69 6e 2d 6d 65 6d 6f 72 79 20 72  e..# in-memory r
11e0: 65 76 69 73 69 6f 6e 20 6f 62 6a 65 63 74 73 2c  evision objects,
11f0: 20 77 68 69 63 68 20 77 65 20 64 6f 20 6e 6f 74   which we do not
1200: 20 68 61 76 65 20 68 65 72 65 2e 20 57 65 20 64   have here. We d
1210: 6f 0a 09 23 20 74 68 65 20 73 61 6d 65 20 6e 6f  o..# the same no
1220: 77 20 77 69 74 68 6f 75 74 20 6f 62 6a 65 63 74  w without object
1230: 2c 20 62 79 20 64 69 72 65 63 74 6c 79 20 6d 61  , by directly ma
1240: 6e 69 70 75 6c 61 74 69 6e 67 20 74 68 65 0a 09  nipulating the..
1250: 23 20 6c 69 6e 6b 73 20 69 6e 20 74 68 65 20 64  # links in the d
1260: 61 74 61 62 61 73 65 2e 0a 0a 09 61 72 72 61 79  atabase....array
1270: 20 73 65 74 20 6e 74 64 62 20 7b 7d 0a 09 61 72   set ntdb {}..ar
1280: 72 61 79 20 73 65 74 20 6c 69 6e 6b 20 7b 7d 0a  ray set link {}.
1290: 0a 09 66 6f 72 65 61 63 68 20 7b 69 64 20 70 61  ..foreach {id pa
12a0: 72 65 6e 74 20 74 72 61 6e 73 66 65 72 7d 20 5b  rent transfer} [
12b0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20  state run {..   
12c0: 20 53 45 4c 45 43 54 20 52 2e 72 69 64 2c 20 52   SELECT R.rid, R
12d0: 2e 70 61 72 65 6e 74 2c 20 52 2e 64 62 63 68 69  .parent, R.dbchi
12e0: 6c 64 0a 09 20 20 20 20 46 52 4f 4d 20 20 72 65  ld..    FROM  re
12f0: 76 69 73 69 6f 6e 20 52 2c 20 73 79 6d 62 6f 6c  vision R, symbol
1300: 20 53 0a 09 20 20 20 20 57 48 45 52 45 20 52 2e   S..    WHERE R.
1310: 6c 6f 64 20 3d 20 53 2e 73 69 64 0a 09 20 20 20  lod = S.sid..   
1320: 20 41 4e 44 20 20 20 53 2e 73 69 64 20 49 4e 20   AND   S.sid IN 
1330: 65 78 63 6c 75 64 65 64 73 79 6d 62 6f 6c 73 0a  excludedsymbols.
1340: 09 20 20 20 20 41 4e 44 20 20 20 52 2e 69 73 64  .    AND   R.isd
1350: 65 66 61 75 6c 74 0a 09 7d 5d 20 7b 0a 09 20 20  efault..}] {..  
1360: 20 20 73 65 74 20 6e 74 64 62 28 24 69 64 29 20    set ntdb($id) 
1370: 24 70 61 72 65 6e 74 0a 09 20 20 20 20 69 66 20  $parent..    if 
1380: 7b 24 74 72 61 6e 73 66 65 72 20 65 71 20 22 22  {$transfer eq ""
1390: 7d 20 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20  } continue..    
13a0: 73 65 74 20 6c 69 6e 6b 28 24 69 64 29 20 24 74  set link($id) $t
13b0: 72 61 6e 73 66 65 72 0a 09 7d 0a 0a 09 66 6f 72  ransfer..}...for
13c0: 65 61 63 68 20 6a 6f 69 6e 74 20 5b 61 72 72 61  each joint [arra
13d0: 79 20 6e 61 6d 65 73 20 6c 69 6e 6b 5d 20 7b 0a  y names link] {.
13e0: 09 20 20 20 20 23 20 54 68 65 20 6a 6f 69 6e 74  .    # The joint
13f0: 73 20 61 72 65 20 74 68 65 20 68 69 67 68 65 73  s are the highes
1400: 74 20 4e 54 44 42 20 72 65 76 69 73 69 6f 6e 73  t NTDB revisions
1410: 20 77 68 69 63 68 20 61 72 65 0a 09 20 20 20 20   which are..    
1420: 23 20 73 68 61 72 65 64 20 77 69 74 68 20 74 68  # shared with th
1430: 65 69 72 20 72 65 73 70 65 63 74 69 76 65 20 74  eir respective t
1440: 72 75 6e 6b 2e 20 57 65 20 64 69 73 63 6f 6e 6e  runk. We disconn
1450: 65 63 74 20 66 72 6f 6d 0a 09 20 20 20 20 23 20  ect from..    # 
1460: 74 68 65 69 72 20 4e 54 44 42 20 63 68 69 6c 64  their NTDB child
1470: 72 65 6e 2c 20 61 6e 64 20 6d 61 6b 65 20 74 68  ren, and make th
1480: 65 6d 20 70 61 72 65 6e 74 73 20 6f 66 20 74 68  em parents of th
1490: 65 69 72 0a 09 20 20 20 20 23 20 27 64 62 63 68  eir..    # 'dbch
14a0: 69 6c 64 27 2e 20 54 68 65 20 61 73 73 6f 63 69  ild'. The associ
14b0: 61 74 65 64 20 27 64 62 70 61 72 65 6e 74 27 20  ated 'dbparent' 
14c0: 69 73 20 73 71 75 61 73 68 65 64 0a 09 20 20 20  is squashed..   
14d0: 20 23 20 69 6e 73 74 65 61 64 2e 20 41 6c 6c 20   # instead. All 
14e0: 70 61 72 65 6e 74 73 20 6f 66 20 74 68 65 20 6a  parents of the j
14f0: 6f 69 6e 74 73 20 61 72 65 20 6d 6f 76 65 64 20  oints are moved 
1500: 74 6f 20 74 68 65 0a 09 20 20 20 20 23 20 74 72  to the..    # tr
1510: 75 6e 6b 20 61 73 20 77 65 6c 6c 2e 0a 0a 09 20  unk as well.... 
1520: 20 20 20 73 65 74 20 74 6a 6f 69 6e 74 20 24 6c     set tjoint $l
1530: 69 6e 6b 28 24 6a 6f 69 6e 74 29 0a 09 20 20 20  ink($joint)..   
1540: 20 73 65 74 20 74 6c 6f 64 20 5b 6c 69 6e 64 65   set tlod [linde
1550: 78 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09  x [state run {..
1560: 09 53 45 4c 45 43 54 20 6c 6f 64 20 46 52 4f 4d  .SELECT lod FROM
1570: 20 72 65 76 69 73 69 6f 6e 20 57 48 45 52 45 20   revision WHERE 
1580: 72 69 64 20 3d 20 24 74 6a 6f 69 6e 74 0a 09 20  rid = $tjoint.. 
1590: 20 20 20 7d 5d 20 30 5d 0a 0a 09 20 20 20 20 23     }] 0]...    #
15a0: 20 43 6f 76 6e 65 72 74 20 64 62 2f 70 61 72 65   Covnert db/pare
15b0: 6e 74 2f 63 68 69 6c 64 20 69 6e 74 6f 20 72 65  nt/child into re
15c0: 67 75 6c 61 72 20 70 61 72 65 6e 74 2f 63 68 69  gular parent/chi
15d0: 6c 64 20 6c 69 6e 6b 73 2e 0a 09 20 20 20 20 73  ld links...    s
15e0: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 55 50 44  tate run {...UPD
15f0: 41 54 45 20 72 65 76 69 73 69 6f 6e 20 53 45 54  ATE revision SET
1600: 20 64 62 70 61 72 65 6e 74 20 3d 20 4e 55 4c 4c   dbparent = NULL
1610: 2c 20 70 61 72 65 6e 74 20 3d 20 24 6a 6f 69 6e  , parent = $join
1620: 74 20 20 57 48 45 52 45 20 72 69 64 20 3d 20 24  t  WHERE rid = $
1630: 74 6a 6f 69 6e 74 20 3b 0a 09 09 55 50 44 41 54  tjoint ;...UPDAT
1640: 45 20 72 65 76 69 73 69 6f 6e 20 53 45 54 20 64  E revision SET d
1650: 62 63 68 69 6c 64 20 20 3d 20 4e 55 4c 4c 2c 20  bchild  = NULL, 
1660: 63 68 69 6c 64 20 20 3d 20 24 74 6a 6f 69 6e 74  child  = $tjoint
1670: 20 57 48 45 52 45 20 72 69 64 20 3d 20 24 6a 6f   WHERE rid = $jo
1680: 69 6e 74 20 20 3b 0a 09 20 20 20 20 7d 0a 09 20  int  ;..    }.. 
1690: 20 20 20 77 68 69 6c 65 20 7b 31 7d 20 7b 0a 09     while {1} {..
16a0: 09 23 20 4d 6f 76 65 20 74 68 65 20 4e 54 44 42  .# Move the NTDB
16b0: 20 74 72 75 6e 6b 20 72 65 76 69 73 69 6f 6e 73   trunk revisions
16c0: 20 74 6f 20 74 72 75 6e 6b 2e 0a 09 09 73 74 61   to trunk....sta
16d0: 74 65 20 72 75 6e 20 7b 0a 09 09 20 20 20 20 55  te run {...    U
16e0: 50 44 41 54 45 20 72 65 76 69 73 69 6f 6e 20 53  PDATE revision S
16f0: 45 54 20 6c 6f 64 20 3d 20 24 74 6c 6f 64 2c 20  ET lod = $tlod, 
1700: 69 73 64 65 66 61 75 6c 74 20 3d 20 30 20 57 48  isdefault = 0 WH
1710: 45 52 45 20 72 69 64 20 3d 20 24 6a 6f 69 6e 74  ERE rid = $joint
1720: 0a 09 09 7d 0a 09 09 73 65 74 20 6c 61 73 74 20  ...}...set last 
1730: 24 6a 6f 69 6e 74 0a 09 09 73 65 74 20 6a 6f 69  $joint...set joi
1740: 6e 74 20 24 6e 74 64 62 28 24 6a 6f 69 6e 74 29  nt $ntdb($joint)
1750: 0a 09 09 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78  ...if {![info ex
1760: 69 73 74 73 20 6e 74 64 62 28 24 6a 6f 69 6e 74  ists ntdb($joint
1770: 29 5d 7d 20 62 72 65 61 6b 0a 09 20 20 20 20 7d  )]} break..    }
1780: 0a 0a 09 20 20 20 20 23 20 52 65 61 63 68 65 64  ...    # Reached
1790: 20 74 68 65 20 4e 54 44 42 20 62 61 73 69 73 20   the NTDB basis 
17a0: 69 6e 20 74 68 65 20 74 72 75 6e 6b 2e 20 46 69  in the trunk. Fi
17b0: 6e 61 6c 69 7a 65 20 74 68 65 0a 09 20 20 20 20  nalize the..    
17c0: 23 20 70 61 72 65 6e 74 2f 63 68 69 6c 64 20 6c  # parent/child l
17d0: 69 6e 6b 61 67 65 20 61 6e 64 20 73 71 75 61 73  inkage and squas
17e0: 68 20 74 68 65 20 62 72 61 6e 63 68 20 70 61 72  h the branch par
17f0: 65 6e 74 20 73 79 6d 62 6f 6c 0a 09 20 20 20 20  ent symbol..    
1800: 23 20 72 65 66 65 72 65 6e 63 65 2e 0a 0a 09 20  # reference.... 
1810: 20 20 20 73 74 61 74 65 20 72 75 6e 20 7b 0a 09     state run {..
1820: 09 55 50 44 41 54 45 20 72 65 76 69 73 69 6f 6e  .UPDATE revision
1830: 20 53 45 54 20 63 68 69 6c 64 20 20 20 3d 20 24   SET child   = $
1840: 6c 61 73 74 20 57 48 45 52 45 20 72 69 64 20 3d  last WHERE rid =
1850: 20 24 6a 6f 69 6e 74 20 3b 0a 09 09 55 50 44 41   $joint ;...UPDA
1860: 54 45 20 72 65 76 69 73 69 6f 6e 20 53 45 54 20  TE revision SET 
1870: 62 70 61 72 65 6e 74 20 3d 20 4e 55 4c 4c 20 20  bparent = NULL  
1880: 57 48 45 52 45 20 72 69 64 20 3d 20 24 6c 61 73  WHERE rid = $las
1890: 74 20 20 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a  t  ;..    }..}..
18a0: 09 23 20 4e 6f 77 20 74 68 61 74 20 74 68 65 20  .# Now that the 
18b0: 73 70 65 63 69 61 6c 20 63 61 73 65 20 69 73 20  special case is 
18c0: 64 6f 6e 65 20 77 65 20 63 61 6e 20 73 69 6d 70  done we can simp
18d0: 6c 79 20 6b 69 6c 6c 20 61 6c 6c 20 74 68 65 0a  ly kill all the.
18e0: 09 23 20 72 65 76 69 73 69 6f 6e 73 2c 20 74 61  .# revisions, ta
18f0: 67 73 2c 20 61 6e 64 20 62 72 61 6e 63 68 65 73  gs, and branches
1900: 20 72 65 66 65 72 65 6e 63 69 6e 67 20 61 6e 79   referencing any
1910: 20 6f 66 20 74 68 65 0a 09 23 20 65 78 63 6c 75   of the..# exclu
1920: 64 65 64 20 73 79 6d 62 6f 6c 73 20 69 6e 20 73  ded symbols in s
1930: 6f 6d 65 20 77 61 79 2e 20 54 68 69 73 20 69 73  ome way. This is
1940: 20 65 61 73 79 20 61 73 20 77 65 20 64 6f 20 6e   easy as we do n
1950: 6f 74 20 68 61 76 65 0a 09 23 20 74 6f 20 73 65  ot have..# to se
1960: 6c 65 63 74 20 74 68 65 6d 20 61 67 61 69 6e 20  lect them again 
1970: 61 6e 64 20 61 67 61 69 6e 20 66 72 6f 6d 20 74  and again from t
1980: 68 65 20 62 61 73 65 20 74 61 62 6c 65 73 20 61  he base tables a
1990: 6e 79 0a 09 23 20 6c 6f 6e 67 65 72 2e 0a 0a 09  ny..# longer....
19a0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20  state run {..   
19b0: 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
19c0: 59 20 54 41 42 4c 45 20 65 78 63 6c 75 64 65 64  Y TABLE excluded
19d0: 72 65 76 69 73 69 6f 6e 73 20 41 53 0a 09 20 20  revisions AS..  
19e0: 20 20 53 45 4c 45 43 54 20 72 69 64 20 46 52 4f    SELECT rid FRO
19f0: 4d 20 72 65 76 69 73 69 6f 6e 20 57 48 45 52 45  M revision WHERE
1a00: 20 6c 6f 64 20 49 4e 20 65 78 63 6c 75 64 65 64   lod IN excluded
1a10: 73 79 6d 62 6f 6c 73 3b 0a 0a 09 20 20 20 20 44  symbols;...    D
1a20: 45 4c 45 54 45 20 46 52 4f 4d 20 72 65 76 69 73  ELETE FROM revis
1a30: 69 6f 6e 20 57 48 45 52 45 20 6c 6f 64 20 49 4e  ion WHERE lod IN
1a40: 20 65 78 63 6c 75 64 65 64 73 79 6d 62 6f 6c 73   excludedsymbols
1a50: 3b 0a 09 20 20 20 20 44 45 4c 45 54 45 20 46 52  ;..    DELETE FR
1a60: 4f 4d 20 74 61 67 20 20 20 20 20 20 57 48 45 52  OM tag      WHER
1a70: 45 20 6c 6f 64 20 49 4e 20 65 78 63 6c 75 64 65  E lod IN exclude
1a80: 64 73 79 6d 62 6f 6c 73 3b 0a 09 20 20 20 20 44  dsymbols;..    D
1a90: 45 4c 45 54 45 20 46 52 4f 4d 20 74 61 67 20 20  ELETE FROM tag  
1aa0: 20 20 20 20 57 48 45 52 45 20 73 69 64 20 49 4e      WHERE sid IN
1ab0: 20 65 78 63 6c 75 64 65 64 73 79 6d 62 6f 6c 73   excludedsymbols
1ac0: 3b 0a 09 20 20 20 20 44 45 4c 45 54 45 20 46 52  ;..    DELETE FR
1ad0: 4f 4d 20 62 72 61 6e 63 68 20 20 20 57 48 45 52  OM branch   WHER
1ae0: 45 20 6c 6f 64 20 49 4e 20 65 78 63 6c 75 64 65  E lod IN exclude
1af0: 64 73 79 6d 62 6f 6c 73 3b 0a 09 20 20 20 20 44  dsymbols;..    D
1b00: 45 4c 45 54 45 20 46 52 4f 4d 20 62 72 61 6e 63  ELETE FROM branc
1b10: 68 20 20 20 57 48 45 52 45 20 73 69 64 20 49 4e  h   WHERE sid IN
1b20: 20 65 78 63 6c 75 64 65 64 73 79 6d 62 6f 6c 73   excludedsymbols
1b30: 3b 0a 0a 09 20 20 20 20 44 45 4c 45 54 45 20 46  ;...    DELETE F
1b40: 52 4f 4d 20 72 65 76 69 73 69 6f 6e 62 72 61 6e  ROM revisionbran
1b50: 63 68 63 68 69 6c 64 72 65 6e 20 57 48 45 52 45  chchildren WHERE
1b60: 20 72 69 64 20 20 49 4e 20 65 78 63 6c 75 64 65   rid  IN exclude
1b70: 64 72 65 76 69 73 69 6f 6e 73 3b 0a 09 20 20 20  drevisions;..   
1b80: 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 72 65 76   DELETE FROM rev
1b90: 69 73 69 6f 6e 62 72 61 6e 63 68 63 68 69 6c 64  isionbranchchild
1ba0: 72 65 6e 20 57 48 45 52 45 20 62 72 69 64 20 49  ren WHERE brid I
1bb0: 4e 20 65 78 63 6c 75 64 65 64 72 65 76 69 73 69  N excludedrevisi
1bc0: 6f 6e 73 3b 0a 0a 09 20 20 20 20 44 52 4f 50 20  ons;...    DROP 
1bd0: 54 41 42 4c 45 20 65 78 63 6c 75 64 65 64 72 65  TABLE excludedre
1be0: 76 69 73 69 6f 6e 73 3b 0a 09 20 20 20 20 44 52  visions;..    DR
1bf0: 4f 50 20 54 41 42 4c 45 20 65 78 63 6c 75 64 65  OP TABLE exclude
1c00: 64 73 79 6d 62 6f 6c 73 3b 0a 09 7d 0a 09 72 65  dsymbols;..}..re
1c10: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
1c20: 70 72 6f 63 20 4d 75 74 61 74 65 53 79 6d 62 6f  proc MutateSymbo
1c30: 6c 73 20 7b 7d 20 7b 0a 09 23 20 4e 65 78 74 2c  ls {} {..# Next,
1c40: 20 6e 6f 77 20 74 68 61 74 20 77 65 20 6b 6e 6f   now that we kno
1c50: 77 20 77 68 69 63 68 20 73 79 6d 62 6f 6c 73 20  w which symbols 
1c60: 61 72 65 20 77 68 61 74 20 77 65 20 6c 6f 6f 6b  are what we look
1c70: 20 66 6f 72 0a 09 23 20 66 69 6c 65 20 6c 65 76   for..# file lev
1c80: 65 6c 20 74 61 67 73 20 77 68 69 63 68 20 61 72  el tags which ar
1c90: 65 20 61 63 74 75 61 6c 6c 79 20 63 6f 6e 76 65  e actually conve
1ca0: 72 74 65 64 20 61 73 20 62 72 61 6e 63 68 65 73  rted as branches
1cb0: 0a 09 23 20 28 70 72 6f 6a 65 63 74 20 6c 65 76  ..# (project lev
1cc0: 65 6c 2c 20 61 6e 64 20 76 69 63 65 20 76 65 72  el, and vice ver
1cd0: 73 61 29 2c 20 61 6e 64 20 6d 6f 76 65 20 74 68  sa), and move th
1ce0: 65 6d 20 74 6f 20 74 68 65 0a 09 23 20 63 6f 72  em to the..# cor
1cf0: 72 65 63 74 20 74 61 62 6c 65 73 2e 0a 0a 09 23  rect tables....#
1d00: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
1d10: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
1d20: 23 23 23 23 23 23 0a 0a 09 6c 6f 67 20 77 72 69  ######...log wri
1d30: 74 65 20 33 20 66 69 6c 74 65 72 73 79 6d 20 22  te 3 filtersym "
1d40: 4d 75 74 61 74 65 20 73 79 6d 62 6f 6c 73 2c 20  Mutate symbols, 
1d50: 70 72 65 70 61 72 61 74 69 6f 6e 22 0a 0a 09 73  preparation"...s
1d60: 65 74 20 62 72 61 6e 63 68 20 5b 70 72 6f 6a 65  et branch [proje
1d70: 63 74 3a 3a 73 79 6d 20 62 72 61 6e 63 68 5d 0a  ct::sym branch].
1d80: 09 73 65 74 20 74 61 67 20 20 20 20 5b 70 72 6f  .set tag    [pro
1d90: 6a 65 63 74 3a 3a 73 79 6d 20 74 61 67 5d 0a 0a  ject::sym tag]..
1da0: 09 73 65 74 20 74 61 67 73 74 6f 6d 75 74 61 74  .set tagstomutat
1db0: 65 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09  e [state run {..
1dc0: 20 20 20 20 53 45 4c 45 43 54 20 54 2e 74 69 64      SELECT T.tid
1dd0: 2c 20 54 2e 66 69 64 2c 20 54 2e 6c 6f 64 2c 20  , T.fid, T.lod, 
1de0: 54 2e 73 69 64 2c 20 54 2e 72 65 76 0a 09 20 20  T.sid, T.rev..  
1df0: 20 20 46 52 4f 4d 20 74 61 67 20 54 2c 20 73 79    FROM tag T, sy
1e00: 6d 62 6f 6c 20 53 0a 09 20 20 20 20 57 48 45 52  mbol S..    WHER
1e10: 45 20 54 2e 73 69 64 20 3d 20 53 2e 73 69 64 0a  E T.sid = S.sid.
1e20: 09 20 20 20 20 41 4e 44 20 53 2e 74 79 70 65 20  .    AND S.type 
1e30: 3d 20 24 62 72 61 6e 63 68 0a 09 7d 5d 0a 0a 09  = $branch..}]...
1e40: 73 65 74 20 62 72 61 6e 63 68 65 73 74 6f 6d 75  set branchestomu
1e50: 74 61 74 65 20 5b 73 74 61 74 65 20 72 75 6e 20  tate [state run 
1e60: 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20 42 2e  {..    SELECT B.
1e70: 62 69 64 2c 20 42 2e 66 69 64 2c 20 42 2e 6c 6f  bid, B.fid, B.lo
1e80: 64 2c 20 42 2e 73 69 64 2c 20 42 2e 72 6f 6f 74  d, B.sid, B.root
1e90: 2c 20 42 2e 66 69 72 73 74 2c 20 42 2e 62 72 61  , B.first, B.bra
1ea0: 0a 09 20 20 20 20 46 52 4f 4d 20 62 72 61 6e 63  ..    FROM branc
1eb0: 68 20 42 2c 20 73 79 6d 62 6f 6c 20 53 0a 09 20  h B, symbol S.. 
1ec0: 20 20 20 57 48 45 52 45 20 42 2e 73 69 64 20 3d     WHERE B.sid =
1ed0: 20 53 2e 73 69 64 0a 09 20 20 20 20 41 4e 44 20   S.sid..    AND 
1ee0: 53 2e 74 79 70 65 20 3d 20 24 74 61 67 0a 09 7d  S.type = $tag..}
1ef0: 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 34 20  ]...log write 4 
1f00: 66 69 6c 74 65 72 73 79 6d 20 22 43 68 61 6e 67  filtersym "Chang
1f10: 69 6e 67 20 5b 6e 73 70 20 5b 65 78 70 72 20 7b  ing [nsp [expr {
1f20: 5b 6c 6c 65 6e 67 74 68 20 24 74 61 67 73 74 6f  [llength $tagsto
1f30: 6d 75 74 61 74 65 5d 2f 35 7d 5d 20 74 61 67 5d  mutate]/5}] tag]
1f40: 20 69 6e 74 6f 20 62 72 61 6e 63 68 65 73 22 0a   into branches".
1f50: 09 6c 6f 67 20 77 72 69 74 65 20 34 20 66 69 6c  .log write 4 fil
1f60: 74 65 72 73 79 6d 20 22 43 68 61 6e 67 69 6e 67  tersym "Changing
1f70: 20 5b 6e 73 70 20 5b 65 78 70 72 20 7b 5b 6c 6c   [nsp [expr {[ll
1f80: 65 6e 67 74 68 20 24 62 72 61 6e 63 68 65 73 74  ength $branchest
1f90: 6f 6d 75 74 61 74 65 5d 2f 37 7d 5d 20 62 72 61  omutate]/7}] bra
1fa0: 6e 63 68 20 62 72 61 6e 63 68 65 73 5d 20 69 6e  nch branches] in
1fb0: 74 6f 20 74 61 67 73 22 0a 0a 09 23 20 23 20 23  to tags"...# # #
1fc0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
1fd0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
1fe0: 23 23 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 33  ##...log write 3
1ff0: 20 66 69 6c 74 65 72 73 79 6d 20 22 4d 75 74 61   filtersym "Muta
2000: 74 65 20 74 61 67 73 20 74 6f 20 62 72 61 6e 63  te tags to branc
2010: 68 65 73 22 0a 0a 09 66 6f 72 65 61 63 68 20 7b  hes"...foreach {
2020: 69 64 20 66 69 64 20 6c 6f 64 20 73 69 64 20 72  id fid lod sid r
2030: 65 76 7d 20 24 74 61 67 73 74 6f 6d 75 74 61 74  ev} $tagstomutat
2040: 65 20 7b 0a 09 20 20 20 20 73 74 61 74 65 20 72  e {..    state r
2050: 75 6e 20 7b 0a 09 09 44 45 4c 45 54 45 20 46 52  un {...DELETE FR
2060: 4f 4d 20 74 61 67 20 57 48 45 52 45 20 74 69 64  OM tag WHERE tid
2070: 20 3d 20 24 69 64 20 3b 0a 09 09 49 4e 53 45 52   = $id ;...INSER
2080: 54 20 49 4e 54 4f 20 62 72 61 6e 63 68 20 28 62  T INTO branch (b
2090: 69 64 2c 20 66 69 64 2c 20 20 6c 6f 64 2c 20 20  id, fid,  lod,  
20a0: 73 69 64 2c 20 20 72 6f 6f 74 2c 20 66 69 72 73  sid,  root, firs
20b0: 74 2c 20 62 72 61 2c 20 70 6f 73 29 0a 09 09 56  t, bra, pos)...V
20c0: 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20  ALUES           
20d0: 20 20 28 24 69 64 2c 20 24 66 69 64 2c 20 24 6c    ($id, $fid, $l
20e0: 6f 64 2c 20 24 73 69 64 2c 20 24 72 65 76 2c 20  od, $sid, $rev, 
20f0: 4e 55 4c 4c 2c 20 20 27 27 2c 20 20 2d 31 29 3b  NULL,  '',  -1);
2100: 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 6c 6f 67  ..    }..}...log
2110: 20 77 72 69 74 65 20 33 20 66 69 6c 74 65 72 73   write 3 filters
2120: 79 6d 20 22 4f 6b 2e 22 0a 0a 09 23 20 23 20 23  ym "Ok."...# # #
2130: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
2140: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
2150: 23 23 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 33  ##...log write 3
2160: 20 66 69 6c 74 65 72 73 79 6d 20 22 4d 75 74 61   filtersym "Muta
2170: 74 65 20 62 72 61 6e 63 68 65 73 20 74 6f 20 74  te branches to t
2180: 61 67 73 22 0a 0a 09 66 6f 72 65 61 63 68 20 7b  ags"...foreach {
2190: 69 64 20 66 69 64 20 6c 6f 64 20 73 69 64 20 72  id fid lod sid r
21a0: 6f 6f 74 20 66 69 72 73 74 20 62 72 61 7d 20 24  oot first bra} $
21b0: 62 72 61 6e 63 68 65 73 74 6f 6d 75 74 61 74 65  branchestomutate
21c0: 20 7b 0a 09 20 20 20 20 73 74 61 74 65 20 72 75   {..    state ru
21d0: 6e 20 7b 0a 09 09 44 45 4c 45 54 45 20 46 52 4f  n {...DELETE FRO
21e0: 4d 20 62 72 61 6e 63 68 20 57 48 45 52 45 20 62  M branch WHERE b
21f0: 69 64 20 3d 20 24 69 64 20 3b 0a 09 09 49 4e 53  id = $id ;...INS
2200: 45 52 54 20 49 4e 54 4f 20 74 61 67 20 28 74 69  ERT INTO tag (ti
2210: 64 2c 20 66 69 64 2c 20 20 6c 6f 64 2c 20 20 73  d, fid,  lod,  s
2220: 69 64 2c 20 20 72 65 76 29 0a 09 09 56 41 4c 55  id,  rev)...VALU
2230: 45 53 20 20 20 20 20 20 20 20 20 20 28 24 69 64  ES          ($id
2240: 2c 20 24 66 69 64 2c 20 24 6c 6f 64 2c 20 24 73  , $fid, $lod, $s
2250: 69 64 2c 20 24 72 6f 6f 74 29 3b 0a 09 20 20 20  id, $root);..   
2260: 20 7d 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 74   }..}...log writ
2270: 65 20 33 20 66 69 6c 74 65 72 73 79 6d 20 22 4f  e 3 filtersym "O
2280: 6b 2e 22 0a 0a 09 23 20 23 20 23 23 20 23 23 23  k."...# # ## ###
2290: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
22a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 09 72  #############..r
22b0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
22c0: 20 23 20 41 64 6a 75 73 74 20 74 68 65 20 70 61   # Adjust the pa
22d0: 72 65 6e 74 73 20 6f 66 20 73 79 6d 62 6f 6c 73  rents of symbols
22e0: 20 74 6f 20 74 68 65 69 72 20 70 72 65 66 65 72   to their prefer
22f0: 72 65 64 20 70 61 72 65 6e 74 73 2e 0a 0a 20 20  red parents...  
2300: 20 20 23 20 49 66 20 61 20 66 69 6c 65 20 6c 65    # If a file le
2310: 76 65 6c 20 79 6d 62 6f 6c 20 68 61 73 20 61 20  vel ymbol has a 
2320: 70 72 65 66 65 72 72 65 64 20 70 61 72 65 6e 74  preferred parent
2330: 20 74 68 61 74 20 69 73 20 64 69 66 66 65 72 65   that is differe
2340: 6e 74 0a 20 20 20 20 23 20 74 68 61 6e 20 69 74  nt.    # than it
2350: 73 20 63 75 72 72 65 6e 74 20 70 61 72 65 6e 74  s current parent
2360: 2c 20 61 6e 64 20 69 66 20 74 68 65 20 70 72 65  , and if the pre
2370: 66 65 72 72 65 64 20 70 61 72 65 6e 74 20 69 73  ferred parent is
2380: 20 61 6e 0a 20 20 20 20 23 20 61 6c 6c 6f 77 65   an.    # allowe
2390: 64 20 70 61 72 65 6e 74 20 6f 66 20 74 68 65 20  d parent of the 
23a0: 73 79 6d 62 6f 6c 20 69 6e 20 74 68 69 73 20 66  symbol in this f
23b0: 69 6c 65 2c 20 74 68 65 6e 20 77 65 20 67 72 61  ile, then we gra
23c0: 66 74 20 74 68 65 0a 20 20 20 20 23 20 61 53 79  ft the.    # aSy
23d0: 6d 62 6f 6c 20 6f 6e 74 6f 20 69 74 73 20 70 72  mbol onto its pr
23e0: 65 66 65 72 72 65 64 20 70 61 72 65 6e 74 2e 0a  eferred parent..
23f0: 0a 20 20 20 20 70 72 6f 63 20 41 64 6a 75 73 74  .    proc Adjust
2400: 50 61 72 65 6e 74 73 20 7b 7d 20 7b 0a 09 6c 6f  Parents {} {..lo
2410: 67 20 77 72 69 74 65 20 33 20 66 69 6c 74 65 72  g write 3 filter
2420: 73 79 6d 20 22 41 64 6a 75 73 74 20 70 61 72 65  sym "Adjust pare
2430: 6e 74 73 2c 20 6c 6f 61 64 69 6e 67 20 64 61 74  nts, loading dat
2440: 61 20 69 6e 20 70 72 65 70 61 72 61 74 69 6f 6e  a in preparation
2450: 22 0a 0a 09 23 20 57 65 20 70 75 6c 6c 20 69 6d  "...# We pull im
2460: 70 6f 72 74 61 6e 74 20 6d 61 70 73 20 6f 6e 63  portant maps onc
2470: 65 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 73 6f  e into memory so
2480: 20 74 68 61 74 20 77 65 20 64 6f 20 71 75 69 63   that we do quic
2490: 6b 0a 09 23 20 68 61 73 68 20 6c 6f 6f 6b 75 70  k..# hash lookup
24a0: 20 6c 61 74 65 72 20 77 68 65 6e 20 70 72 6f 63   later when proc
24b0: 65 73 73 69 6e 67 20 74 68 65 20 67 72 61 66 74  essing the graft
24c0: 20 63 61 6e 64 69 64 61 74 65 73 2e 0a 0a 09 23   candidates....#
24d0: 20 54 61 67 2f 42 72 61 6e 63 68 20 6e 61 6d 65   Tag/Branch name
24e0: 73 20 2e 2e 2e 0a 09 61 72 72 61 79 20 73 65 74  s .....array set
24f0: 20 73 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 7b   sn [state run {
2500: 20 53 45 4c 45 43 54 20 54 2e 74 69 64 2c 20 53   SELECT T.tid, S
2510: 2e 6e 61 6d 65 20 46 52 4f 4d 20 74 61 67 20 54  .name FROM tag T
2520: 2c 20 20 20 20 73 79 6d 62 6f 6c 20 53 20 57 48  ,    symbol S WH
2530: 45 52 45 20 54 2e 73 69 64 20 3d 20 53 2e 73 69  ERE T.sid = S.si
2540: 64 20 7d 5d 0a 09 61 72 72 61 79 20 73 65 74 20  d }]..array set 
2550: 73 6e 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 20  sn [state run { 
2560: 53 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 53 2e  SELECT B.bid, S.
2570: 6e 61 6d 65 20 46 52 4f 4d 20 62 72 61 6e 63 68  name FROM branch
2580: 20 42 2c 20 73 79 6d 62 6f 6c 20 53 20 57 48 45   B, symbol S WHE
2590: 52 45 20 42 2e 73 69 64 20 3d 20 53 2e 73 69 64  RE B.sid = S.sid
25a0: 20 7d 5d 0a 09 23 20 53 79 6d 62 6f 6c 20 6e 61   }]..# Symbol na
25b0: 6d 65 73 20 2e 2e 2e 0a 09 61 72 72 61 79 20 73  mes .....array s
25c0: 65 74 20 73 78 20 5b 73 74 61 74 65 20 72 75 6e  et sx [state run
25d0: 20 7b 20 53 45 4c 45 43 54 20 4c 2e 73 69 64 2c   { SELECT L.sid,
25e0: 20 4c 2e 6e 61 6d 65 20 46 52 4f 4d 20 73 79 6d   L.name FROM sym
25f0: 62 6f 6c 20 4c 20 7d 5d 0a 09 23 20 46 69 6c 65  bol L }]..# File
2600: 73 20 61 6e 64 20 70 72 6f 6a 65 63 74 73 2e 0a  s and projects..
2610: 09 61 72 72 61 79 20 73 65 74 20 66 70 6e 20 7b  .array set fpn {
2620: 7d 0a 09 66 6f 72 65 61 63 68 20 7b 69 64 20 66  }..foreach {id f
2630: 6e 20 70 6e 7d 20 5b 73 74 61 74 65 20 72 75 6e  n pn} [state run
2640: 20 7b 0a 09 09 53 45 4c 45 43 54 20 46 2e 66 69   {...SELECT F.fi
2650: 64 2c 20 46 2e 6e 61 6d 65 2c 20 50 2e 6e 61 6d  d, F.name, P.nam
2660: 65 0a 09 09 46 52 4f 4d 20 20 20 66 69 6c 65 20  e...FROM   file 
2670: 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 09 57  F, project P...W
2680: 48 45 52 45 20 20 46 2e 70 69 64 20 3d 20 50 2e  HERE  F.pid = P.
2690: 70 69 64 0a 09 7d 5d 20 7b 20 73 65 74 20 66 70  pid..}] { set fp
26a0: 6e 28 24 69 64 29 20 5b 6c 69 73 74 20 24 66 6e  n($id) [list $fn
26b0: 20 24 70 6e 5d 20 7d 0a 0a 09 73 65 74 20 74 61   $pn] }...set ta
26c0: 67 73 74 6f 61 64 6a 75 73 74 20 5b 73 74 61 74  gstoadjust [stat
26d0: 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c  e run {..    SEL
26e0: 45 43 54 20 54 2e 74 69 64 2c 20 54 2e 66 69 64  ECT T.tid, T.fid
26f0: 2c 20 54 2e 6c 6f 64 2c 20 50 2e 70 69 64 2c 20  , T.lod, P.pid, 
2700: 53 2e 6e 61 6d 65 2c 20 52 2e 72 65 76 2c 20 52  S.name, R.rev, R
2710: 2e 72 69 64 0a 09 20 20 20 20 46 52 4f 4d 20 74  .rid..    FROM t
2720: 61 67 20 54 2c 20 70 72 65 66 65 72 65 64 70 61  ag T, preferedpa
2730: 72 65 6e 74 20 50 2c 20 73 79 6d 62 6f 6c 20 53  rent P, symbol S
2740: 2c 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20  , revision R..  
2750: 20 20 57 48 45 52 45 20 54 2e 73 69 64 20 3d 20    WHERE T.sid = 
2760: 50 2e 73 69 64 0a 09 20 20 20 20 41 4e 44 20 20  P.sid..    AND  
2770: 20 54 2e 6c 6f 64 20 21 3d 20 50 2e 70 69 64 0a   T.lod != P.pid.
2780: 09 20 20 20 20 41 4e 44 20 20 20 50 2e 70 69 64  .    AND   P.pid
2790: 20 3d 20 53 2e 73 69 64 0a 09 20 20 20 20 41 4e   = S.sid..    AN
27a0: 44 20 20 20 53 2e 6e 61 6d 65 20 21 3d 20 27 3a  D   S.name != ':
27b0: 74 72 75 6e 6b 3a 27 0a 09 20 20 20 20 41 4e 44  trunk:'..    AND
27c0: 20 20 20 54 2e 72 65 76 20 3d 20 52 2e 72 69 64     T.rev = R.rid
27d0: 09 0a 09 7d 5d 0a 0a 09 73 65 74 20 62 72 61 6e  ...}]...set bran
27e0: 63 68 65 73 74 6f 61 64 6a 75 73 74 20 5b 73 74  chestoadjust [st
27f0: 61 74 65 20 72 75 6e 20 7b 0a 09 20 20 20 20 53  ate run {..    S
2800: 45 4c 45 43 54 20 42 2e 62 69 64 2c 20 42 2e 66  ELECT B.bid, B.f
2810: 69 64 2c 20 42 2e 6c 6f 64 2c 20 42 2e 70 6f 73  id, B.lod, B.pos
2820: 2c 20 50 2e 70 69 64 2c 20 53 2e 6e 61 6d 65 2c  , P.pid, S.name,
2830: 20 52 2e 72 65 76 2c 20 52 2e 72 69 64 0a 09 20   R.rev, R.rid.. 
2840: 20 20 20 46 52 4f 4d 20 62 72 61 6e 63 68 20 42     FROM branch B
2850: 2c 20 70 72 65 66 65 72 65 64 70 61 72 65 6e 74  , preferedparent
2860: 20 50 2c 20 73 79 6d 62 6f 6c 20 53 2c 20 72 65   P, symbol S, re
2870: 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48  vision R..    WH
2880: 45 52 45 20 42 2e 73 69 64 20 3d 20 50 2e 73 69  ERE B.sid = P.si
2890: 64 0a 09 20 20 20 20 41 4e 44 20 20 20 42 2e 6c  d..    AND   B.l
28a0: 6f 64 20 21 3d 20 50 2e 70 69 64 0a 09 20 20 20  od != P.pid..   
28b0: 20 41 4e 44 20 20 20 50 2e 70 69 64 20 3d 20 53   AND   P.pid = S
28c0: 2e 73 69 64 0a 09 20 20 20 20 41 4e 44 20 20 20  .sid..    AND   
28d0: 53 2e 6e 61 6d 65 20 21 3d 20 27 3a 74 72 75 6e  S.name != ':trun
28e0: 6b 3a 27 0a 09 20 20 20 20 41 4e 44 20 20 20 42  k:'..    AND   B
28f0: 2e 72 6f 6f 74 20 3d 20 52 2e 72 69 64 09 0a 09  .root = R.rid...
2900: 7d 5d 0a 0a 09 73 65 74 20 74 6d 61 78 20 5b 65  }]...set tmax [e
2910: 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 74  xpr {[llength $t
2920: 61 67 73 74 6f 61 64 6a 75 73 74 5d 20 2f 20 37  agstoadjust] / 7
2930: 7d 5d 0a 09 73 65 74 20 62 6d 61 78 20 5b 65 78  }]..set bmax [ex
2940: 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 62 72  pr {[llength $br
2950: 61 6e 63 68 65 73 74 6f 61 64 6a 75 73 74 5d 20  anchestoadjust] 
2960: 2f 20 38 7d 5d 0a 0a 09 6c 6f 67 20 77 72 69 74  / 8}]...log writ
2970: 65 20 34 20 66 69 6c 74 65 72 73 79 6d 20 22 52  e 4 filtersym "R
2980: 65 70 61 72 65 6e 74 69 6e 67 20 61 74 20 6d 6f  eparenting at mo
2990: 73 74 20 5b 6e 73 70 20 24 74 6d 61 78 20 74 61  st [nsp $tmax ta
29a0: 67 5d 22 0a 09 6c 6f 67 20 77 72 69 74 65 20 34  g]"..log write 4
29b0: 20 66 69 6c 74 65 72 73 79 6d 20 22 52 65 70 61   filtersym "Repa
29c0: 72 65 6e 74 69 6e 67 20 61 74 20 6d 6f 73 74 20  renting at most 
29d0: 5b 6e 73 70 20 24 62 6d 61 78 20 62 72 61 6e 63  [nsp $bmax branc
29e0: 68 20 62 72 61 6e 63 68 65 73 5d 22 0a 0a 09 6c  h branches]"...l
29f0: 6f 67 20 77 72 69 74 65 20 33 20 66 69 6c 74 65  og write 3 filte
2a00: 72 73 79 6d 20 22 41 64 6a 75 73 74 20 74 61 67  rsym "Adjust tag
2a10: 20 70 61 72 65 6e 74 73 22 0a 0a 09 23 20 46 69   parents"...# Fi
2a20: 6e 64 20 74 68 65 20 74 61 67 73 20 77 68 6f 73  nd the tags whos
2a30: 65 20 63 75 72 72 65 6e 74 20 70 61 72 65 6e 74  e current parent
2a40: 20 28 6c 6f 64 29 20 69 73 20 6e 6f 74 20 74 68   (lod) is not th
2a50: 65 20 70 72 65 66 65 72 65 64 0a 09 23 20 70 61  e prefered..# pa
2a60: 72 65 6e 74 2c 20 74 68 65 20 70 72 65 66 65 72  rent, the prefer
2a70: 65 64 20 70 61 72 65 6e 74 20 69 73 20 6e 6f 74  ed parent is not
2a80: 20 74 68 65 20 74 72 75 6e 6b 2c 20 61 6e 64 20   the trunk, and 
2a90: 74 68 65 0a 09 23 20 70 72 65 66 65 72 65 64 20  the..# prefered 
2aa0: 70 61 72 65 6e 74 20 69 73 20 61 20 70 6f 73 73  parent is a poss
2ab0: 69 62 6c 65 20 70 61 72 65 6e 74 20 70 65 72 20  ible parent per 
2ac0: 74 68 65 20 74 61 67 27 73 20 72 65 76 69 73 69  the tag's revisi
2ad0: 6f 6e 2e 0a 0a 09 73 65 74 20 66 6d 74 20 25 5b  on....set fmt %[
2ae0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 74  string length $t
2af0: 6d 61 78 5d 73 0a 09 73 65 74 20 6d 78 73 20 5b  max]s..set mxs [
2b00: 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 74 6d 61  format $fmt $tma
2b10: 78 5d 0a 0a 09 73 65 74 20 6e 20 30 0a 09 66 6f  x]...set n 0..fo
2b20: 72 65 61 63 68 20 7b 69 64 20 66 69 64 20 6c 6f  reach {id fid lo
2b30: 64 20 70 69 64 20 70 72 65 66 65 72 65 64 6e 61  d pid preferedna
2b40: 6d 65 20 72 65 76 6e 72 20 72 69 64 7d 20 24 74  me revnr rid} $t
2b50: 61 67 73 74 6f 61 64 6a 75 73 74 20 7b 0a 0a 09  agstoadjust {...
2b60: 20 20 20 20 23 20 42 4f 54 54 4c 45 2d 4e 45 43      # BOTTLE-NEC
2b70: 4b 20 2e 2e 2e 0a 09 20 20 20 20 23 0a 09 20 20  K .....    #..  
2b80: 20 20 23 20 54 68 65 20 63 68 65 63 6b 20 69 66    # The check if
2b90: 20 74 68 65 20 63 61 6e 64 69 64 61 74 65 20 28   the candidate (
2ba0: 70 69 64 29 20 69 73 20 74 72 75 6c 79 20 76 69  pid) is truly vi
2bb0: 61 62 6c 65 20 69 73 0a 09 20 20 20 20 23 20 62  able is..    # b
2bc0: 61 73 65 64 20 66 69 6e 64 69 6e 67 20 74 68 65  ased finding the
2bd0: 20 62 72 61 6e 63 68 20 61 73 20 70 6f 73 73 69   branch as possi
2be0: 62 6c 65 20 70 61 72 65 6e 74 2c 20 61 6e 64 20  ble parent, and 
2bf0: 64 6f 6e 65 0a 09 20 20 20 20 23 20 6e 6f 77 20  done..    # now 
2c00: 69 6e 73 74 65 61 64 20 6f 66 20 61 73 20 70 61  instead of as pa
2c10: 72 74 20 6f 66 20 74 68 65 20 61 6c 72 65 61 64  rt of the alread
2c20: 79 20 63 6f 6d 70 6c 65 78 20 6a 6f 69 6e 2e 0a  y complex join..
2c30: 09 20 20 20 20 23 0a 09 20 20 20 20 23 20 2e 2e  .    #..    # ..
2c40: 2e 20 41 4e 44 20 50 2e 70 69 64 20 49 4e 20 28  . AND P.pid IN (
2c50: 53 45 4c 45 43 54 20 42 2e 73 69 64 0a 09 20 20  SELECT B.sid..  
2c60: 20 20 23 20 20 20 20 20 20 20 20 20 20 20 20 20    #             
2c70: 20 20 20 20 20 20 46 52 4f 4d 20 62 72 61 6e 63        FROM branc
2c80: 68 20 42 0a 09 20 20 20 20 23 20 20 20 20 20 20  h B..    #      
2c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 57 48 45               WHE
2ca0: 52 45 20 42 2e 72 6f 6f 74 20 3d 20 52 2e 72 69  RE B.root = R.ri
2cb0: 64 29 0a 0a 09 20 20 20 20 69 66 20 7b 21 5b 6c  d)...    if {![l
2cc0: 69 6e 64 65 78 20 5b 73 74 61 74 65 20 72 75 6e  index [state run
2cd0: 20 7b 0a 09 09 53 45 4c 45 43 54 20 43 4f 55 4e   {...SELECT COUN
2ce0: 54 28 2a 29 0a 09 09 46 52 4f 4d 20 62 72 61 6e  T(*)...FROM bran
2cf0: 63 68 20 42 0a 09 09 57 48 45 52 45 20 20 42 2e  ch B...WHERE  B.
2d00: 73 69 64 20 20 3d 20 24 70 69 64 0a 09 09 41 4e  sid  = $pid...AN
2d10: 44 20 20 20 20 42 2e 72 6f 6f 74 20 3d 20 24 72  D    B.root = $r
2d20: 69 64 0a 09 20 20 20 20 7d 5d 20 30 5d 7d 20 7b  id..    }] 0]} {
2d30: 0a 09 09 69 6e 63 72 20 74 6d 61 78 20 2d 31 0a  ...incr tmax -1.
2d40: 09 09 73 65 74 20 20 6d 78 73 20 5b 66 6f 72 6d  ..set  mxs [form
2d50: 61 74 20 24 66 6d 74 20 24 74 6d 61 78 5d 0a 09  at $fmt $tmax]..
2d60: 09 63 6f 6e 74 69 6e 75 65 0a 09 20 20 20 20 7d  .continue..    }
2d70: 0a 0a 09 20 20 20 20 23 0a 09 20 20 20 20 23 20  ...    #..    # 
2d80: 42 4f 54 54 4c 45 2d 4e 45 43 4b 20 2e 2e 2e 0a  BOTTLE-NECK ....
2d90: 0a 09 20 20 20 20 23 20 54 68 65 20 6e 61 6d 65  ..    # The name
2da0: 73 20 66 6f 72 20 75 73 65 20 69 6e 20 74 68 65  s for use in the
2db0: 20 6c 6f 67 20 6f 75 74 70 75 74 20 61 72 65 20   log output are 
2dc0: 72 65 74 72 69 65 76 65 64 0a 09 20 20 20 20 23  retrieved..    #
2dd0: 20 73 65 70 61 72 61 74 65 6c 79 2c 20 74 6f 20   separately, to 
2de0: 6b 65 65 70 20 74 68 65 20 6a 6f 69 6e 20 73 65  keep the join se
2df0: 6c 65 63 74 69 6e 67 20 74 68 65 20 61 64 6a 75  lecting the adju
2e00: 73 74 61 62 6c 65 0a 09 20 20 20 20 23 20 74 61  stable..    # ta
2e10: 67 73 20 73 6d 61 6c 6c 2c 20 6e 6f 74 20 62 75  gs small, not bu
2e20: 72 64 65 6e 65 64 20 77 69 74 68 20 74 68 65 20  rdened with the 
2e30: 64 65 72 65 66 65 72 65 6e 63 69 6e 67 20 6f 66  dereferencing of
2e40: 20 6c 69 6e 6b 73 0a 09 20 20 20 20 23 20 74 6f   links..    # to
2e50: 20 6e 61 6d 65 2e 0a 0a 09 20 20 20 20 73 65 74   name....    set
2e60: 20 74 61 67 6e 61 6d 65 20 24 73 6e 28 24 69 64   tagname $sn($id
2e70: 29 0a 09 20 20 20 20 73 65 74 20 6f 6c 64 6e 61  )..    set oldna
2e80: 6d 65 20 24 73 78 28 24 6c 6f 64 29 0a 09 20 20  me $sx($lod)..  
2e90: 20 20 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61    struct::list a
2ea0: 73 73 69 67 6e 20 24 66 70 6e 28 24 66 69 64 29  ssign $fpn($fid)
2eb0: 20 66 6e 61 6d 65 20 70 72 6e 61 6d 65 0a 0a 09   fname prname...
2ec0: 20 20 20 20 23 20 44 6f 20 74 68 65 20 67 72 61      # Do the gra
2ed0: 66 74 69 6e 67 2e 0a 0a 09 20 20 20 20 6c 6f 67  fting....    log
2ee0: 20 77 72 69 74 65 20 34 20 66 69 6c 74 65 72 73   write 4 filters
2ef0: 79 6d 20 22 5c 5b 5b 66 6f 72 6d 61 74 20 24 66  ym "\[[format $f
2f00: 6d 74 20 24 6e 5d 2f 24 6d 78 73 5c 5d 20 24 70  mt $n]/$mxs\] $p
2f10: 72 6e 61 6d 65 20 3a 20 47 72 61 66 74 69 6e 67  rname : Grafting
2f20: 20 74 61 67 20 27 24 74 61 67 6e 61 6d 65 27 20   tag '$tagname' 
2f30: 6f 6e 20 24 66 6e 61 6d 65 2f 24 72 65 76 6e 72  on $fname/$revnr
2f40: 20 66 72 6f 6d 20 27 24 6f 6c 64 6e 61 6d 65 27   from '$oldname'
2f50: 20 6f 6e 74 6f 20 27 24 70 72 65 66 65 72 65 64   onto '$prefered
2f60: 6e 61 6d 65 27 22 0a 09 20 20 20 20 73 74 61 74  name'"..    stat
2f70: 65 20 72 75 6e 20 7b 20 55 50 44 41 54 45 20 74  e run { UPDATE t
2f80: 61 67 20 53 45 54 20 6c 6f 64 20 3d 20 24 70 69  ag SET lod = $pi
2f90: 64 20 57 48 45 52 45 20 74 69 64 20 3d 20 24 69  d WHERE tid = $i
2fa0: 64 20 3b 20 7d 0a 09 20 20 20 20 69 6e 63 72 20  d ; }..    incr 
2fb0: 6e 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 74 65  n..}...log write
2fc0: 20 33 20 66 69 6c 74 65 72 73 79 6d 20 22 52 65   3 filtersym "Re
2fd0: 70 61 72 65 6e 74 65 64 20 5b 6e 73 70 20 24 6e  parented [nsp $n
2fe0: 20 74 61 67 5d 22 0a 0a 09 6c 6f 67 20 77 72 69   tag]"...log wri
2ff0: 74 65 20 33 20 66 69 6c 74 65 72 73 79 6d 20 22  te 3 filtersym "
3000: 41 64 6a 75 73 74 20 62 72 61 6e 63 68 20 70 61  Adjust branch pa
3010: 72 65 6e 74 73 22 0a 0a 09 23 20 46 69 6e 64 20  rents"...# Find 
3020: 74 68 65 20 62 72 61 6e 63 68 65 73 20 77 68 6f  the branches who
3030: 73 65 20 63 75 72 72 65 6e 74 20 70 61 72 65 6e  se current paren
3040: 74 20 28 6c 6f 64 29 20 69 73 20 6e 6f 74 20 74  t (lod) is not t
3050: 68 65 0a 09 23 20 70 72 65 66 65 72 65 64 20 70  he..# prefered p
3060: 61 72 65 6e 74 2c 20 74 68 65 20 70 72 65 66 65  arent, the prefe
3070: 72 65 64 20 70 61 72 65 6e 74 20 69 73 20 6e 6f  red parent is no
3080: 74 20 74 68 65 20 74 72 75 6e 6b 2c 20 61 6e 64  t the trunk, and
3090: 0a 09 23 20 74 68 65 20 70 72 65 66 65 72 65 64  ..# the prefered
30a0: 20 70 61 72 65 6e 74 20 69 73 20 61 20 70 6f 73   parent is a pos
30b0: 73 69 62 6c 65 20 70 61 72 65 6e 74 20 70 65 72  sible parent per
30c0: 20 74 68 65 20 62 72 61 6e 63 68 27 73 0a 09 23   the branch's..#
30d0: 20 72 65 76 69 73 69 6f 6e 2e 0a 0a 09 73 65 74   revision....set
30e0: 20 66 6d 74 20 25 5b 73 74 72 69 6e 67 20 6c 65   fmt %[string le
30f0: 6e 67 74 68 20 24 62 6d 61 78 5d 73 0a 09 73 65  ngth $bmax]s..se
3100: 74 20 6d 78 73 20 5b 66 6f 72 6d 61 74 20 24 66  t mxs [format $f
3110: 6d 74 20 24 62 6d 61 78 5d 0a 0a 09 73 65 74 20  mt $bmax]...set 
3120: 6e 20 30 0a 09 66 6f 72 65 61 63 68 20 7b 69 64  n 0..foreach {id
3130: 20 66 69 64 20 6c 6f 64 20 70 6f 73 20 70 69 64   fid lod pos pid
3140: 20 70 72 65 66 65 72 65 64 6e 61 6d 65 20 72 65   preferedname re
3150: 76 6e 72 20 72 69 64 7d 20 24 62 72 61 6e 63 68  vnr rid} $branch
3160: 65 73 74 6f 61 64 6a 75 73 74 20 7b 0a 0a 09 20  estoadjust {... 
3170: 20 20 20 23 20 42 4f 54 54 4c 45 2d 4e 45 43 4b     # BOTTLE-NECK
3180: 20 2e 2e 2e 0a 09 20 20 20 20 23 0a 09 20 20 20   .....    #..   
3190: 20 23 20 54 68 65 20 63 68 65 63 6b 20 69 66 20   # The check if 
31a0: 74 68 65 20 63 61 6e 64 69 64 61 74 65 20 28 70  the candidate (p
31b0: 69 64 29 20 69 73 20 74 72 75 6c 79 20 76 69 61  id) is truly via
31c0: 62 6c 65 20 69 73 0a 09 20 20 20 20 23 20 62 61  ble is..    # ba
31d0: 73 65 64 20 6f 6e 20 74 68 65 20 62 72 61 6e 63  sed on the branc
31e0: 68 20 70 6f 73 69 74 69 6f 6e 73 20 69 6e 20 74  h positions in t
31f0: 68 65 20 73 70 61 77 6e 69 6e 67 20 72 65 76 69  he spawning revi
3200: 73 69 6f 6e 2c 0a 09 20 20 20 20 23 20 61 6e 64  sion,..    # and
3210: 20 64 6f 6e 65 20 6e 6f 77 20 69 6e 73 74 65 61   done now instea
3220: 64 20 6f 66 20 61 73 20 70 61 72 74 20 6f 66 20  d of as part of 
3230: 74 68 65 20 61 6c 72 65 61 64 79 20 63 6f 6d 70  the already comp
3240: 6c 65 78 0a 09 20 20 20 20 23 20 6a 6f 69 6e 2e  lex..    # join.
3250: 0a 09 20 20 20 20 23 0a 09 20 20 20 20 23 20 2e  ..    #..    # .
3260: 2e 2e 20 41 4e 44 20 50 2e 70 69 64 20 49 4e 20  .. AND P.pid IN 
3270: 28 53 45 4c 45 43 54 20 42 58 2e 73 69 64 0a 09  (SELECT BX.sid..
3280: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 20      #           
3290: 20 20 20 20 20 20 20 20 46 52 4f 4d 20 62 72 61          FROM bra
32a0: 6e 63 68 20 42 58 0a 09 20 20 20 20 23 20 20 20  nch BX..    #   
32b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
32c0: 57 48 45 52 45 20 42 58 2e 72 6f 6f 74 20 3d 20  WHERE BX.root = 
32d0: 52 2e 72 69 64 0a 09 20 20 20 20 23 20 20 20 20  R.rid..    #    
32e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
32f0: 4e 44 20 20 20 42 58 2e 70 6f 73 20 3e 20 42 2e  ND   BX.pos > B.
3300: 70 6f 73 29 0a 0a 09 20 20 20 20 69 66 20 7b 21  pos)...    if {!
3310: 5b 6c 69 6e 64 65 78 20 5b 73 74 61 74 65 20 72  [lindex [state r
3320: 75 6e 20 7b 0a 09 09 53 45 4c 45 43 54 20 43 4f  un {...SELECT CO
3330: 55 4e 54 28 2a 29 0a 09 09 46 52 4f 4d 20 62 72  UNT(*)...FROM br
3340: 61 6e 63 68 20 42 0a 09 09 57 48 45 52 45 20 20  anch B...WHERE  
3350: 42 2e 73 69 64 20 20 3d 20 24 70 69 64 0a 09 09  B.sid  = $pid...
3360: 41 4e 44 20 20 20 20 42 2e 72 6f 6f 74 20 3d 20  AND    B.root = 
3370: 24 72 69 64 0a 09 09 41 4e 44 20 20 20 20 42 2e  $rid...AND    B.
3380: 70 6f 73 20 20 3e 20 24 70 6f 73 0a 09 20 20 20  pos  > $pos..   
3390: 20 7d 5d 20 30 5d 7d 20 7b 0a 09 09 69 6e 63 72   }] 0]} {...incr
33a0: 20 62 6d 61 78 20 2d 31 0a 09 09 73 65 74 20 20   bmax -1...set  
33b0: 6d 78 73 20 5b 66 6f 72 6d 61 74 20 24 66 6d 74  mxs [format $fmt
33c0: 20 24 62 6d 61 78 5d 0a 09 09 63 6f 6e 74 69 6e   $bmax]...contin
33d0: 75 65 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20 20  ue..    }...    
33e0: 23 0a 09 20 20 20 20 23 20 42 4f 54 54 4c 45 2d  #..    # BOTTLE-
33f0: 4e 45 43 4b 20 2e 2e 2e 0a 0a 09 20 20 20 20 23  NECK ......    #
3400: 20 54 68 65 20 6e 61 6d 65 73 20 66 6f 72 20 75   The names for u
3410: 73 65 20 69 6e 20 74 68 65 20 6c 6f 67 20 6f 75  se in the log ou
3420: 74 70 75 74 20 61 72 65 20 72 65 74 72 69 65 76  tput are retriev
3430: 65 64 0a 09 20 20 20 20 23 20 73 65 70 61 72 61  ed..    # separa
3440: 74 65 6c 79 2c 20 74 6f 20 6b 65 65 70 20 74 68  tely, to keep th
3450: 65 20 6a 6f 69 6e 20 73 65 6c 65 63 74 69 6e 67  e join selecting
3460: 20 74 68 65 20 61 64 6a 75 73 74 61 62 6c 65 0a   the adjustable.
3470: 09 20 20 20 20 23 20 74 61 67 73 20 73 6d 61 6c  .    # tags smal
3480: 6c 2c 20 6e 6f 74 20 62 75 72 64 65 6e 65 64 20  l, not burdened 
3490: 77 69 74 68 20 74 68 65 20 64 65 72 65 66 65 72  with the derefer
34a0: 65 6e 63 69 6e 67 20 6f 66 20 6c 69 6e 6b 73 0a  encing of links.
34b0: 09 20 20 20 20 23 20 74 6f 20 6e 61 6d 65 2e 0a  .    # to name..
34c0: 0a 09 20 20 20 20 73 65 74 20 62 72 61 6e 61 6d  ..    set branam
34d0: 65 20 24 73 6e 28 24 69 64 29 0a 09 20 20 20 20  e $sn($id)..    
34e0: 73 65 74 20 6f 6c 64 6e 61 6d 65 20 24 73 78 28  set oldname $sx(
34f0: 24 6c 6f 64 29 0a 09 20 20 20 20 73 74 72 75 63  $lod)..    struc
3500: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24  t::list assign $
3510: 66 70 6e 28 24 66 69 64 29 20 66 6e 61 6d 65 20  fpn($fid) fname 
3520: 70 72 6e 61 6d 65 0a 0a 09 20 20 20 20 23 20 44  prname...    # D
3530: 6f 20 74 68 65 20 67 72 61 66 74 69 6e 67 2e 0a  o the grafting..
3540: 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20  ..    log write 
3550: 34 20 66 69 6c 74 65 72 73 79 6d 20 22 5c 5b 5b  4 filtersym "\[[
3560: 66 6f 72 6d 61 74 20 24 66 6d 74 20 24 6e 5d 2f  format $fmt $n]/
3570: 24 6d 78 73 5c 5d 20 24 70 72 6e 61 6d 65 20 3a  $mxs\] $prname :
3580: 20 47 72 61 66 74 69 6e 67 20 62 72 61 6e 63 68   Grafting branch
3590: 20 27 24 62 72 61 6e 61 6d 65 27 20 6f 6e 20 24   '$braname' on $
35a0: 66 6e 61 6d 65 2f 24 72 65 76 6e 72 20 66 72 6f  fname/$revnr fro
35b0: 6d 20 27 24 6f 6c 64 6e 61 6d 65 27 20 6f 6e 74  m '$oldname' ont
35c0: 6f 20 27 24 70 72 65 66 65 72 65 64 6e 61 6d 65  o '$preferedname
35d0: 27 22 0a 09 20 20 20 20 73 74 61 74 65 20 72 75  '"..    state ru
35e0: 6e 20 7b 20 55 50 44 41 54 45 20 74 61 67 20 53  n { UPDATE tag S
35f0: 45 54 20 6c 6f 64 20 3d 20 24 70 69 64 20 57 48  ET lod = $pid WH
3600: 45 52 45 20 74 69 64 20 3d 20 24 69 64 20 3b 20  ERE tid = $id ; 
3610: 7d 0a 09 20 20 20 20 69 6e 63 72 20 6e 0a 09 7d  }..    incr n..}
3620: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 33 20 66  ...log write 3 f
3630: 69 6c 74 65 72 73 79 6d 20 22 52 65 70 61 72 65  iltersym "Repare
3640: 6e 74 65 64 20 5b 6e 73 70 20 24 6e 20 62 72 61  nted [nsp $n bra
3650: 6e 63 68 20 62 72 61 6e 63 68 65 73 5d 22 0a 09  nch branches]"..
3660: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
3670: 20 20 70 72 6f 63 20 52 65 66 69 6e 65 53 79 6d    proc RefineSym
3680: 62 6f 6c 73 20 7b 7d 20 7b 0a 09 23 20 54 61 67  bols {} {..# Tag
3690: 73 20 61 6e 64 20 62 72 61 6e 63 68 65 73 20 61  s and branches a
36a0: 72 65 20 6d 61 72 6b 65 64 20 61 73 20 6e 6f 72  re marked as nor
36b0: 6d 61 6c 2f 6e 6f 6f 70 20 62 61 73 65 64 20 6f  mal/noop based o
36c0: 6e 20 74 68 65 20 6f 70 0a 09 23 20 6f 66 20 74  n the op..# of t
36d0: 68 65 69 72 20 72 65 76 69 73 69 6f 6e 2e 0a 0a  heir revision...
36e0: 09 6c 6f 67 20 77 72 69 74 65 20 33 20 66 69 6c  .log write 3 fil
36f0: 74 65 72 73 79 6d 20 22 52 65 66 69 6e 65 20 73  tersym "Refine s
3700: 79 6d 62 6f 6c 73 20 28 6e 6f 2d 6f 70 20 6f 72  ymbols (no-op or
3710: 20 6e 6f 74 3f 29 22 0a 0a 09 6c 6f 67 20 77 72   not?)"...log wr
3720: 69 74 65 20 34 20 66 69 6c 74 65 72 73 79 6d 20  ite 4 filtersym 
3730: 22 20 20 20 20 52 65 67 75 6c 61 72 20 74 61 67  "    Regular tag
3740: 73 22 0a 09 73 74 61 74 65 20 72 75 6e 20 7b 0a  s"..state run {.
3750: 09 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3760: 20 6e 6f 6f 70 0a 09 20 20 20 20 53 45 4c 45 43   noop..    SELEC
3770: 54 20 54 2e 74 69 64 2c 20 30 0a 09 20 20 20 20  T T.tid, 0..    
3780: 46 52 4f 4d 20 74 61 67 20 54 2c 20 72 65 76 69  FROM tag T, revi
3790: 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52  sion R..    WHER
37a0: 45 20 54 2e 72 65 76 20 20 3d 20 52 2e 72 69 64  E T.rev  = R.rid
37b0: 0a 09 20 20 20 20 41 4e 44 20 20 20 52 2e 6f 70  ..    AND   R.op
37c0: 20 20 21 3d 20 30 20 2d 2d 20 30 20 3d 3d 20 6e    != 0 -- 0 == n
37d0: 6f 74 68 69 6e 67 0a 09 7d 0a 0a 09 6c 6f 67 20  othing..}...log 
37e0: 77 72 69 74 65 20 34 20 66 69 6c 74 65 72 73 79  write 4 filtersy
37f0: 6d 20 22 20 20 20 20 4e 6f 2d 6f 70 20 74 61 67  m "    No-op tag
3800: 73 22 0a 09 73 74 61 74 65 20 72 75 6e 20 7b 0a  s"..state run {.
3810: 09 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f  .    INSERT INTO
3820: 20 6e 6f 6f 70 0a 09 20 20 20 20 53 45 4c 45 43   noop..    SELEC
3830: 54 20 54 2e 74 69 64 2c 20 31 0a 09 20 20 20 20  T T.tid, 1..    
3840: 46 52 4f 4d 20 74 61 67 20 54 2c 20 72 65 76 69  FROM tag T, revi
3850: 73 69 6f 6e 20 52 0a 09 20 20 20 20 57 48 45 52  sion R..    WHER
3860: 45 20 54 2e 72 65 76 20 20 3d 20 52 2e 72 69 64  E T.rev  = R.rid
3870: 0a 09 20 20 20 20 41 4e 44 20 20 20 52 2e 6f 70  ..    AND   R.op
3880: 20 20 20 3d 20 30 20 2d 2d 20 6e 6f 74 68 69 6e     = 0 -- nothin
3890: 67 0a 09 7d 0a 0a 09 6c 6f 67 20 77 72 69 74 65  g..}...log write
38a0: 20 34 20 66 69 6c 74 65 72 73 79 6d 20 22 20 20   4 filtersym "  
38b0: 20 20 52 65 67 75 6c 61 72 20 62 72 61 6e 63 68    Regular branch
38c0: 65 73 22 0a 09 73 74 61 74 65 20 72 75 6e 20 7b  es"..state run {
38d0: 0a 09 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54  ..    INSERT INT
38e0: 4f 20 6e 6f 6f 70 0a 09 20 20 20 20 53 45 4c 45  O noop..    SELE
38f0: 43 54 20 42 2e 62 69 64 2c 20 30 0a 09 20 20 20  CT B.bid, 0..   
3900: 20 46 52 4f 4d 20 62 72 61 6e 63 68 20 42 2c 20   FROM branch B, 
3910: 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20 20 20  revision R..    
3920: 57 48 45 52 45 20 42 2e 72 6f 6f 74 20 3d 20 52  WHERE B.root = R
3930: 2e 72 69 64 0a 09 20 20 20 20 41 4e 44 20 20 20  .rid..    AND   
3940: 52 2e 6f 70 20 20 21 3d 20 30 20 2d 2d 20 6e 6f  R.op  != 0 -- no
3950: 74 68 69 6e 67 0a 09 7d 0a 0a 09 6c 6f 67 20 77  thing..}...log w
3960: 72 69 74 65 20 34 20 66 69 6c 74 65 72 73 79 6d  rite 4 filtersym
3970: 20 22 20 20 20 20 4e 6f 2d 6f 70 20 62 72 61 6e   "    No-op bran
3980: 63 68 65 73 22 0a 09 73 74 61 74 65 20 72 75 6e  ches"..state run
3990: 20 7b 0a 09 20 20 20 20 49 4e 53 45 52 54 20 49   {..    INSERT I
39a0: 4e 54 4f 20 6e 6f 6f 70 0a 09 20 20 20 20 53 45  NTO noop..    SE
39b0: 4c 45 43 54 20 42 2e 62 69 64 2c 20 31 0a 09 20  LECT B.bid, 1.. 
39c0: 20 20 20 46 52 4f 4d 20 62 72 61 6e 63 68 20 42     FROM branch B
39d0: 2c 20 72 65 76 69 73 69 6f 6e 20 52 0a 09 20 20  , revision R..  
39e0: 20 20 57 48 45 52 45 20 42 2e 72 6f 6f 74 20 3d    WHERE B.root =
39f0: 20 52 2e 72 69 64 0a 09 20 20 20 20 41 4e 44 20   R.rid..    AND 
3a00: 20 20 52 2e 6f 70 20 20 20 3d 20 30 20 2d 2d 20    R.op   = 0 -- 
3a10: 6e 6f 74 68 69 6e 67 0a 09 7d 0a 09 72 65 74 75  nothing..}..retu
3a20: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20  rn.    }..    # 
3a30: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
3a40: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
3a50: 23 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e  #####.    ## Con
3a60: 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20  figuration..    
3a70: 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 73 74 61  pragma -hasinsta
3a80: 6e 63 65 73 20 20 20 6e 6f 20 3b 20 23 20 73 69  nces   no ; # si
3a90: 6e 67 6c 65 74 6f 6e 0a 20 20 20 20 70 72 61 67  ngleton.    prag
3aa0: 6d 61 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20  ma -hastypeinfo 
3ab0: 20 20 20 6e 6f 20 3b 20 23 20 6e 6f 20 69 6e 74     no ; # no int
3ac0: 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70  rospection.    p
3ad0: 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 64 65  ragma -hastypede
3ae0: 73 74 72 6f 79 20 6e 6f 20 3b 20 23 20 69 6d 6d  stroy no ; # imm
3af0: 6f 72 74 61 6c 0a 0a 20 20 20 20 23 20 23 20 23  ortal..    # # #
3b00: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
3b10: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
3b20: 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20  ##.}..namespace 
3b30: 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69  eval ::vc::fossi
3b40: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
3b50: 70 61 73 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73  pass {.    names
3b60: 70 61 63 65 20 65 78 70 6f 72 74 20 66 69 6c 74  pace export filt
3b70: 65 72 73 79 6d 0a 20 20 20 20 6e 61 6d 65 73 70  ersym.    namesp
3b80: 61 63 65 20 65 76 61 6c 20 66 69 6c 74 65 72 73  ace eval filters
3b90: 79 6d 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20  ym {..namespace 
3ba0: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73  import ::vc::fos
3bb0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
3bc0: 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 61  ::state..namespa
3bd0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
3be0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
3bf0: 63 76 73 3a 3a 69 6e 74 65 67 72 69 74 79 0a 09  cvs::integrity..
3c00: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 70  namespace eval p
3c10: 72 6f 6a 65 63 74 20 7b 0a 09 20 20 20 20 6e 61  roject {..    na
3c20: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
3c30: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
3c40: 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63  ort::cvs::projec
3c50: 74 3a 3a 73 79 6d 0a 09 7d 0a 09 6e 61 6d 65 73  t::sym..}..names
3c60: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63  pace import ::vc
3c70: 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 6e  ::tools::misc::n
3c80: 73 70 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d  sp..namespace im
3c90: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73  port ::vc::tools
3ca0: 3a 3a 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 69 73  ::log..log regis
3cb0: 74 65 72 20 66 69 6c 74 65 72 73 79 6d 0a 20 20  ter filtersym.  
3cc0: 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23    }.}..# # ## ##
3cd0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
3ce0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
3cf0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
3d00: 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70  ####.## Ready..p
3d10: 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76  ackage provide v
3d20: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
3d30: 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 66 69  t::cvs::pass::fi
3d40: 6c 74 65 72 73 79 6d 20 31 2e 30 0a 72 65 74 75  ltersym 1.0.retu
3d50: 72 6e 0a                                         rn.