Hex Artifact Content
Not logged in

Artifact 7a61a65c10a70a907bfee2ea5698d1e28435e5ed:

File tools/cvs2fossil/lib/c2f_pfiltersym.tcl part of check-in [3a530ef947] - Continued work on pass 4. Now propagating the project level information about prefered parents down to the file level tags. Same for the file level branches is not yet done. by aku on 2007-11-06 08:05:40.

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 6c 6f 67 20 20 20 20 20 20 20 20  ols::log        
03b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03c0: 3b 20 23 20 55 73 65 72 20 66 65 65 64 62 61 63  ; # User feedbac
03d0: 6b 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  k..package requi
03e0: 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69  re vc::fossil::i
03f0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74  mport::cvs::stat
0400: 65 20 20 20 20 20 20 20 20 3b 20 23 20 53 74 61  e        ; # Sta
0410: 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 61 63 6b  te storage..pack
0420: 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a  age require vc::
0430: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
0440: 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 73 79  cvs::project::sy
0450: 6d 20 3b 20 23 20 50 72 6f 6a 65 63 74 20 6c 65  m ; # Project le
0460: 76 65 6c 20 73 79 6d 62 6f 6c 73 0a 0a 23 20 23  vel symbols..# #
0470: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
0480: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0490: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
04a0: 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65  ##########.## Re
04b0: 67 69 73 74 65 72 20 74 68 65 20 70 61 73 73 20  gister the pass 
04c0: 77 69 74 68 20 74 68 65 20 6d 61 6e 61 67 65 6d  with the managem
04d0: 65 6e 74 0a 0a 76 63 3a 3a 66 6f 73 73 69 6c 3a  ent..vc::fossil:
04e0: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61  :import::cvs::pa
04f0: 73 73 20 64 65 66 69 6e 65 20 5c 0a 20 20 20 20  ss define \.    
0500: 46 69 6c 74 65 72 53 79 6d 62 6f 6c 73 20 5c 0a  FilterSymbols \.
0510: 20 20 20 20 7b 46 69 6c 74 65 72 20 73 79 6d 62      {Filter symb
0520: 6f 6c 73 2c 20 72 65 6d 6f 76 65 20 61 6c 6c 20  ols, remove all 
0530: 65 78 63 6c 75 64 65 64 20 70 69 65 63 65 73 7d  excluded pieces}
0540: 20 5c 0a 20 20 20 20 3a 3a 76 63 3a 3a 66 6f 73   \.    ::vc::fos
0550: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
0560: 3a 3a 70 61 73 73 3a 3a 66 69 6c 74 65 72 73 79  ::pass::filtersy
0570: 6d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  m..# # ## ### ##
0580: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0590: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
05a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
05b0: 0a 23 23 20 0a 0a 73 6e 69 74 3a 3a 74 79 70 65  .## ..snit::type
05c0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
05d0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73  mport::cvs::pass
05e0: 3a 3a 66 69 6c 74 65 72 73 79 6d 20 7b 0a 20 20  ::filtersym {.  
05f0: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
0600: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0610: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
0620: 20 50 75 62 6c 69 63 20 41 50 49 0a 0a 20 20 20   Public API..   
0630: 20 74 79 70 65 6d 65 74 68 6f 64 20 73 65 74 75   typemethod setu
0640: 70 20 7b 7d 20 7b 0a 09 23 20 44 65 66 69 6e 65  p {} {..# Define
0650: 20 6e 61 6d 65 73 20 61 6e 64 20 73 74 72 75 63   names and struc
0660: 74 75 72 65 20 6f 66 20 74 68 65 20 70 65 72 73  ture of the pers
0670: 69 73 74 65 6e 74 20 73 74 61 74 65 20 6f 66 20  istent state of 
0680: 74 68 69 73 0a 09 23 20 70 61 73 73 2e 0a 0a 09  this..# pass....
0690: 73 74 61 74 65 20 72 65 61 64 69 6e 67 20 73 79  state reading sy
06a0: 6d 62 6f 6c 0a 09 73 74 61 74 65 20 72 65 61 64  mbol..state read
06b0: 69 6e 67 20 62 6c 6f 63 6b 65 72 0a 09 73 74 61  ing blocker..sta
06c0: 74 65 20 72 65 61 64 69 6e 67 20 70 61 72 65 6e  te reading paren
06d0: 74 0a 09 73 74 61 74 65 20 72 65 61 64 69 6e 67  t..state reading
06e0: 20 70 72 65 66 65 72 65 64 70 61 72 65 6e 74 0a   preferedparent.
06f0: 09 73 74 61 74 65 20 72 65 61 64 69 6e 67 20 72  .state reading r
0700: 65 76 69 73 69 6f 6e 0a 09 73 74 61 74 65 20 72  evision..state r
0710: 65 61 64 69 6e 67 20 62 72 61 6e 63 68 0a 09 73  eading branch..s
0720: 74 61 74 65 20 72 65 61 64 69 6e 67 20 74 61 67  tate reading tag
0730: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
0740: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 6c      typemethod l
0750: 6f 61 64 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73  oad {} {..# Pass
0760: 20 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 66 61   manager interfa
0770: 63 65 2e 20 45 78 65 63 75 74 65 64 20 74 6f 20  ce. Executed to 
0780: 6c 6f 61 64 20 64 61 74 61 20 63 6f 6d 70 75 74  load data comput
0790: 65 64 20 62 79 0a 09 23 20 74 68 69 73 20 70 61  ed by..# this pa
07a0: 73 73 20 69 6e 74 6f 20 6d 65 6d 6f 72 79 20 77  ss into memory w
07b0: 68 65 6e 20 74 68 69 73 20 70 61 73 73 20 69 73  hen this pass is
07c0: 20 73 6b 69 70 70 65 64 20 69 6e 73 74 65 61 64   skipped instead
07d0: 20 6f 66 0a 09 23 20 65 78 65 63 75 74 65 64 2e   of..# executed.
07e0: 0a 0a 09 23 20 54 68 65 20 72 65 73 75 6c 74 73  ...# The results
07f0: 20 6f 66 20 74 68 69 73 20 70 61 73 73 20 61 72   of this pass ar
0800: 65 20 66 75 6c 6c 79 20 69 6e 20 74 68 65 20 70  e fully in the p
0810: 65 72 73 69 73 74 65 6e 74 20 73 74 61 74 65 2c  ersistent state,
0820: 0a 09 23 20 74 68 65 72 65 20 69 73 20 6e 6f 74  ..# there is not
0830: 68 69 6e 67 20 74 6f 20 6c 6f 61 64 20 66 6f 72  hing to load for
0840: 20 74 68 65 20 6e 65 78 74 20 6f 6e 65 2e 0a 09   the next one...
0850: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
0860: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 72 75 6e    typemethod run
0870: 20 7b 7d 20 7b 0a 09 23 20 50 61 73 73 20 6d 61   {} {..# Pass ma
0880: 6e 61 67 65 72 20 69 6e 74 65 72 66 61 63 65 2e  nager interface.
0890: 20 45 78 65 63 75 74 65 64 20 74 6f 20 70 65 72   Executed to per
08a0: 66 6f 72 6d 20 74 68 65 0a 09 23 20 66 75 6e 63  form the..# func
08b0: 74 69 6f 6e 61 6c 69 74 79 20 6f 66 20 74 68 65  tionality of the
08c0: 20 70 61 73 73 2e 0a 0a 09 23 20 54 68 65 20 72   pass....# The r
08d0: 65 6d 6f 76 61 6c 20 6f 66 20 65 78 63 6c 75 64  emoval of exclud
08e0: 65 64 20 73 79 6d 62 6f 6c 73 20 61 6e 64 20 65  ed symbols and e
08f0: 76 65 72 79 74 68 69 6e 67 20 72 65 66 65 72 65  verything refere
0900: 6e 63 69 6e 67 0a 09 23 20 74 6f 20 74 68 65 6d  ncing..# to them
0910: 20 69 73 20 64 6f 6e 65 20 63 6f 6d 70 6c 65 74   is done complet
0920: 65 6c 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  ely in the datab
0930: 61 73 65 2e 0a 0a 09 73 74 61 74 65 20 74 72 61  ase....state tra
0940: 6e 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20  nsaction {..    
0950: 46 69 6c 74 65 72 45 78 63 6c 75 64 65 64 53 79  FilterExcludedSy
0960: 6d 62 6f 6c 73 0a 09 20 20 20 20 4d 75 74 61 74  mbols..    Mutat
0970: 65 54 61 67 73 54 6f 42 72 61 6e 63 68 0a 09 20  eTagsToBranch.. 
0980: 20 20 20 4d 75 74 61 74 65 42 72 61 6e 63 68 65     MutateBranche
0990: 73 54 6f 54 61 67 0a 09 20 20 20 20 41 64 6a 75  sToTag..    Adju
09a0: 73 74 54 61 67 50 61 72 65 6e 74 73 0a 09 20 20  stTagParents..  
09b0: 20 20 41 64 6a 75 73 74 42 72 61 6e 63 68 50 61    AdjustBranchPa
09c0: 72 65 6e 74 73 0a 0a 09 20 20 20 20 23 20 43 6f  rents...    # Co
09d0: 6e 73 69 64 65 72 20 61 20 72 65 72 75 6e 20 6f  nsider a rerun o
09e0: 66 20 74 68 65 20 70 61 73 73 20 32 20 70 61 72  f the pass 2 par
09f0: 61 6e 6f 69 61 20 63 68 65 63 6b 73 2e 0a 09 7d  anoia checks...}
0a00: 0a 0a 09 6c 6f 67 20 77 72 69 74 65 20 31 20 66  ...log write 1 f
0a10: 69 6c 74 65 72 73 79 6d 20 22 46 69 6c 74 65 72  iltersym "Filter
0a20: 69 6e 67 20 63 6f 6d 70 6c 65 74 65 64 22 0a 09  ing completed"..
0a30: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
0a40: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 64 69 73    typemethod dis
0a50: 63 61 72 64 20 7b 7d 20 7b 0a 09 23 20 50 61 73  card {} {..# Pas
0a60: 73 20 6d 61 6e 61 67 65 72 20 69 6e 74 65 72 66  s manager interf
0a70: 61 63 65 2e 20 45 78 65 63 75 74 65 64 20 66 6f  ace. Executed fo
0a80: 72 20 61 6c 6c 20 70 61 73 73 65 73 20 61 66 74  r all passes aft
0a90: 65 72 20 74 68 65 0a 09 23 20 72 75 6e 20 70 61  er the..# run pa
0aa0: 73 73 65 73 2c 20 74 6f 20 72 65 6d 6f 76 65 20  sses, to remove 
0ab0: 61 6c 6c 20 64 61 74 61 20 6f 66 20 74 68 69 73  all data of this
0ac0: 20 70 61 73 73 20 66 72 6f 6d 20 74 68 65 20 73   pass from the s
0ad0: 74 61 74 65 2c 0a 09 23 20 61 73 20 62 65 69 6e  tate,..# as bein
0ae0: 67 20 6f 75 74 20 6f 66 20 64 61 74 65 2e 0a 09  g out of date...
0af0: 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20  return.    }..  
0b00: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
0b10: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0b20: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
0b30: 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 6f 64   Internal method
0b40: 73 0a 0a 20 20 20 20 70 72 6f 63 20 46 69 6c 74  s..    proc Filt
0b50: 65 72 45 78 63 6c 75 64 65 64 53 79 6d 62 6f 6c  erExcludedSymbol
0b60: 73 20 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74  s {} {..log writ
0b70: 65 20 33 20 66 69 6c 74 65 72 73 79 6d 20 22 46  e 3 filtersym "F
0b80: 69 6c 74 65 72 20 6f 75 74 20 65 78 63 6c 75 64  ilter out exclud
0b90: 65 64 20 73 79 6d 62 6f 6c 73 20 61 6e 64 20 75  ed symbols and u
0ba0: 73 65 72 73 22 0a 0a 09 23 20 57 65 20 70 75 6c  sers"...# We pul
0bb0: 6c 20 61 6c 6c 20 74 68 65 20 65 78 63 6c 75 64  l all the exclud
0bc0: 65 64 20 73 79 6d 62 6f 6c 73 20 74 6f 67 65 74  ed symbols toget
0bd0: 68 65 72 20 69 6e 74 6f 20 61 20 74 61 62 6c 65  her into a table
0be0: 20 66 6f 72 0a 09 23 20 65 61 73 79 20 72 65 66   for..# easy ref
0bf0: 65 72 65 6e 63 65 20 62 79 20 74 68 65 20 75 70  erence by the up
0c00: 63 6f 6d 69 6e 67 20 44 45 4c 45 54 45 20 61 6e  coming DELETE an
0c10: 64 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e  d other statemen
0c20: 74 73 2e 0a 09 23 20 28 27 78 20 49 4e 20 74 61  ts...# ('x IN ta
0c30: 62 6c 65 27 20 63 6c 61 75 73 65 73 29 2e 0a 0a  ble' clauses)...
0c40: 09 73 65 74 20 65 78 63 6c 20 5b 70 72 6f 6a 65  .set excl [proje
0c50: 63 74 3a 3a 73 79 6d 20 65 78 63 6c 75 64 65 64  ct::sym excluded
0c60: 5d 0a 0a 09 73 74 61 74 65 20 72 75 6e 20 7b 0a  ]...state run {.
0c70: 09 20 20 20 20 43 52 45 41 54 45 20 54 45 4d 50  .    CREATE TEMP
0c80: 4f 52 41 52 59 20 54 41 42 4c 45 20 65 78 63 6c  ORARY TABLE excl
0c90: 75 64 65 64 73 79 6d 62 6f 6c 73 20 41 53 0a 09  udedsymbols AS..
0ca0: 20 20 20 20 53 45 4c 45 43 54 20 73 69 64 0a 09      SELECT sid..
0cb0: 20 20 20 20 46 52 4f 4d 20 20 20 73 79 6d 62 6f      FROM   symbo
0cc0: 6c 0a 09 20 20 20 20 57 48 45 52 45 20 20 74 79  l..    WHERE  ty
0cd0: 70 65 20 3d 20 24 65 78 63 6c 0a 09 7d 0a 0a 09  pe = $excl..}...
0ce0: 23 20 46 69 72 73 74 20 77 65 20 68 61 76 65 20  # First we have 
0cf0: 74 6f 20 68 61 6e 64 6c 65 20 74 68 65 20 70 6f  to handle the po
0d00: 73 73 69 62 69 6c 69 74 79 20 6f 66 20 61 6e 20  ssibility of an 
0d10: 65 78 63 6c 75 64 65 64 0a 09 23 20 4e 54 44 42  excluded..# NTDB
0d20: 2e 20 54 68 69 73 20 69 73 20 61 20 73 70 65 63  . This is a spec
0d30: 69 61 6c 20 73 70 65 63 69 61 6c 20 63 61 73 65  ial special case
0d40: 20 74 68 65 72 65 20 77 65 20 68 61 76 65 20 74   there we have t
0d50: 6f 0a 09 23 20 72 65 67 72 61 66 74 20 74 68 65  o..# regraft the
0d60: 20 72 65 76 69 73 69 6f 6e 73 20 77 68 69 63 68   revisions which
0d70: 20 61 72 65 20 73 68 61 72 65 64 20 62 65 74 77   are shared betw
0d80: 65 65 6e 20 74 68 65 20 4e 54 44 42 20 61 6e 64  een the NTDB and
0d90: 0a 09 23 20 54 72 75 6e 6b 20 6f 6e 74 6f 20 74  ..# Trunk onto t
0da0: 68 65 20 74 72 75 6e 6b 2c 20 70 72 65 76 65 6e  he trunk, preven
0db0: 74 69 6e 67 20 74 68 65 69 72 20 64 65 6c 65 74  ting their delet
0dc0: 69 6f 6e 20 6c 61 74 65 72 2e 20 57 65 0a 09 23  ion later. We..#
0dd0: 20 68 61 76 65 20 63 6f 64 65 20 66 6f 72 20 74   have code for t
0de0: 68 61 74 20 69 6e 20 27 66 69 6c 65 27 2c 20 68  hat in 'file', h
0df0: 6f 77 65 76 65 72 20 74 68 61 74 20 6f 70 65 72  owever that oper
0e00: 61 74 65 64 20 6f 6e 20 74 68 65 0a 09 23 20 69  ated on the..# i
0e10: 6e 2d 6d 65 6d 6f 72 79 20 72 65 76 69 73 69 6f  n-memory revisio
0e20: 6e 20 6f 62 6a 65 63 74 73 2c 20 77 68 69 63 68  n objects, which
0e30: 20 77 65 20 64 6f 20 6e 6f 74 20 68 61 76 65 20   we do not have 
0e40: 68 65 72 65 2e 20 57 65 20 64 6f 0a 09 23 20 74  here. We do..# t
0e50: 68 65 20 73 61 6d 65 20 6e 6f 77 20 77 69 74 68  he same now with
0e60: 6f 75 74 20 6f 62 6a 65 63 74 2c 20 62 79 20 64  out object, by d
0e70: 69 72 65 63 74 6c 79 20 6d 61 6e 69 70 75 6c 61  irectly manipula
0e80: 74 69 6e 67 20 74 68 65 0a 09 23 20 6c 69 6e 6b  ting the..# link
0e90: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
0ea0: 65 2e 0a 0a 09 61 72 72 61 79 20 73 65 74 20 6e  e....array set n
0eb0: 74 64 62 20 7b 7d 0a 09 61 72 72 61 79 20 73 65  tdb {}..array se
0ec0: 74 20 6c 69 6e 6b 20 7b 7d 0a 0a 09 66 6f 72 65  t link {}...fore
0ed0: 61 63 68 20 7b 69 64 20 70 61 72 65 6e 74 20 74  ach {id parent t
0ee0: 72 61 6e 73 66 65 72 7d 20 5b 73 74 61 74 65 20  ransfer} [state 
0ef0: 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43  run {..    SELEC
0f00: 54 20 52 2e 72 69 64 2c 20 52 2e 70 61 72 65 6e  T R.rid, R.paren
0f10: 74 2c 20 52 2e 64 62 63 68 69 6c 64 0a 09 20 20  t, R.dbchild..  
0f20: 20 20 46 52 4f 4d 20 20 72 65 76 69 73 69 6f 6e    FROM  revision
0f30: 20 52 2c 20 73 79 6d 62 6f 6c 20 53 0a 09 20 20   R, symbol S..  
0f40: 20 20 57 48 45 52 45 20 52 2e 6c 6f 64 20 3d 20    WHERE R.lod = 
0f50: 53 2e 73 69 64 0a 09 20 20 20 20 41 4e 44 20 20  S.sid..    AND  
0f60: 20 53 2e 73 69 64 20 49 4e 20 65 78 63 6c 75 64   S.sid IN exclud
0f70: 65 64 73 79 6d 62 6f 6c 73 0a 09 20 20 20 20 41  edsymbols..    A
0f80: 4e 44 20 20 20 52 2e 69 73 64 65 66 61 75 6c 74  ND   R.isdefault
0f90: 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 73 65 74 20  ..}] {..    set 
0fa0: 6e 74 64 62 28 24 69 64 29 20 24 70 61 72 65 6e  ntdb($id) $paren
0fb0: 74 0a 09 20 20 20 20 69 66 20 7b 24 74 72 61 6e  t..    if {$tran
0fc0: 73 66 65 72 20 65 71 20 22 22 7d 20 63 6f 6e 74  sfer eq ""} cont
0fd0: 69 6e 75 65 0a 09 20 20 20 20 73 65 74 20 6c 69  inue..    set li
0fe0: 6e 6b 28 24 69 64 29 20 24 74 72 61 6e 73 66 65  nk($id) $transfe
0ff0: 72 0a 09 7d 0a 0a 09 66 6f 72 65 61 63 68 20 6a  r..}...foreach j
1000: 6f 69 6e 74 20 5b 61 72 72 61 79 20 6e 61 6d 65  oint [array name
1010: 73 20 6c 69 6e 6b 5d 20 7b 0a 09 20 20 20 20 23  s link] {..    #
1020: 20 54 68 65 20 6a 6f 69 6e 74 73 20 61 72 65 20   The joints are 
1030: 74 68 65 20 68 69 67 68 65 73 74 20 4e 54 44 42  the highest NTDB
1040: 20 72 65 76 69 73 69 6f 6e 73 20 77 68 69 63 68   revisions which
1050: 20 61 72 65 0a 09 20 20 20 20 23 20 73 68 61 72   are..    # shar
1060: 65 64 20 77 69 74 68 20 74 68 65 69 72 20 72 65  ed with their re
1070: 73 70 65 63 74 69 76 65 20 74 72 75 6e 6b 2e 20  spective trunk. 
1080: 57 65 20 64 69 73 63 6f 6e 6e 65 63 74 20 66 72  We disconnect fr
1090: 6f 6d 0a 09 20 20 20 20 23 20 74 68 65 69 72 20  om..    # their 
10a0: 4e 54 44 42 20 63 68 69 6c 64 72 65 6e 2c 20 61  NTDB children, a
10b0: 6e 64 20 6d 61 6b 65 20 74 68 65 6d 20 70 61 72  nd make them par
10c0: 65 6e 74 73 20 6f 66 20 74 68 65 69 72 0a 09 20  ents of their.. 
10d0: 20 20 20 23 20 27 64 62 63 68 69 6c 64 27 2e 20     # 'dbchild'. 
10e0: 54 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 27  The associated '
10f0: 64 62 70 61 72 65 6e 74 27 20 69 73 20 73 71 75  dbparent' is squ
1100: 61 73 68 65 64 0a 09 20 20 20 20 23 20 69 6e 73  ashed..    # ins
1110: 74 65 61 64 2e 20 41 6c 6c 20 70 61 72 65 6e 74  tead. All parent
1120: 73 20 6f 66 20 74 68 65 20 6a 6f 69 6e 74 73 20  s of the joints 
1130: 61 72 65 20 6d 6f 76 65 64 20 74 6f 20 74 68 65  are moved to the
1140: 0a 09 20 20 20 20 23 20 74 72 75 6e 6b 20 61 73  ..    # trunk as
1150: 20 77 65 6c 6c 2e 0a 0a 09 20 20 20 20 73 65 74   well....    set
1160: 20 74 6a 6f 69 6e 74 20 24 6c 69 6e 6b 28 24 6a   tjoint $link($j
1170: 6f 69 6e 74 29 0a 09 20 20 20 20 73 65 74 20 74  oint)..    set t
1180: 6c 6f 64 20 5b 6c 69 6e 64 65 78 20 5b 73 74 61  lod [lindex [sta
1190: 74 65 20 72 75 6e 20 7b 0a 09 09 53 45 4c 45 43  te run {...SELEC
11a0: 54 20 6c 6f 64 20 46 52 4f 4d 20 72 65 76 69 73  T lod FROM revis
11b0: 69 6f 6e 20 57 48 45 52 45 20 72 69 64 20 3d 20  ion WHERE rid = 
11c0: 24 74 6a 6f 69 6e 74 0a 09 20 20 20 20 7d 5d 20  $tjoint..    }] 
11d0: 30 5d 0a 0a 09 20 20 20 20 23 20 43 6f 76 6e 65  0]...    # Covne
11e0: 72 74 20 64 62 2f 70 61 72 65 6e 74 2f 63 68 69  rt db/parent/chi
11f0: 6c 64 20 69 6e 74 6f 20 72 65 67 75 6c 61 72 20  ld into regular 
1200: 70 61 72 65 6e 74 2f 63 68 69 6c 64 20 6c 69 6e  parent/child lin
1210: 6b 73 2e 0a 09 20 20 20 20 73 74 61 74 65 20 72  ks...    state r
1220: 75 6e 20 7b 0a 09 09 55 50 44 41 54 45 20 72 65  un {...UPDATE re
1230: 76 69 73 69 6f 6e 20 53 45 54 20 64 62 70 61 72  vision SET dbpar
1240: 65 6e 74 20 3d 20 4e 55 4c 4c 2c 20 70 61 72 65  ent = NULL, pare
1250: 6e 74 20 3d 20 24 6a 6f 69 6e 74 20 20 57 48 45  nt = $joint  WHE
1260: 52 45 20 72 69 64 20 3d 20 24 74 6a 6f 69 6e 74  RE rid = $tjoint
1270: 20 3b 0a 09 09 55 50 44 41 54 45 20 72 65 76 69   ;...UPDATE revi
1280: 73 69 6f 6e 20 53 45 54 20 64 62 63 68 69 6c 64  sion SET dbchild
1290: 20 20 3d 20 4e 55 4c 4c 2c 20 63 68 69 6c 64 20    = NULL, child 
12a0: 20 3d 20 24 74 6a 6f 69 6e 74 20 57 48 45 52 45   = $tjoint WHERE
12b0: 20 72 69 64 20 3d 20 24 6a 6f 69 6e 74 20 20 3b   rid = $joint  ;
12c0: 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 77 68 69  ..    }..    whi
12d0: 6c 65 20 7b 31 7d 20 7b 0a 09 09 23 20 4d 6f 76  le {1} {...# Mov
12e0: 65 20 74 68 65 20 4e 54 44 42 20 74 72 75 6e 6b  e the NTDB trunk
12f0: 20 72 65 76 69 73 69 6f 6e 73 20 74 6f 20 74 72   revisions to tr
1300: 75 6e 6b 2e 0a 09 09 73 74 61 74 65 20 72 75 6e  unk....state run
1310: 20 7b 0a 09 09 20 20 20 20 55 50 44 41 54 45 20   {...    UPDATE 
1320: 72 65 76 69 73 69 6f 6e 20 53 45 54 20 6c 6f 64  revision SET lod
1330: 20 3d 20 24 74 6c 6f 64 2c 20 69 73 64 65 66 61   = $tlod, isdefa
1340: 75 6c 74 20 3d 20 30 20 57 48 45 52 45 20 72 69  ult = 0 WHERE ri
1350: 64 20 3d 20 24 6a 6f 69 6e 74 0a 09 09 7d 0a 09  d = $joint...}..
1360: 09 73 65 74 20 6c 61 73 74 20 24 6a 6f 69 6e 74  .set last $joint
1370: 0a 09 09 73 65 74 20 6a 6f 69 6e 74 20 24 6e 74  ...set joint $nt
1380: 64 62 28 24 6a 6f 69 6e 74 29 0a 09 09 69 66 20  db($joint)...if 
1390: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6e  {![info exists n
13a0: 74 64 62 28 24 6a 6f 69 6e 74 29 5d 7d 20 62 72  tdb($joint)]} br
13b0: 65 61 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 20 20  eak..    }...   
13c0: 20 23 20 52 65 61 63 68 65 64 20 74 68 65 20 4e   # Reached the N
13d0: 54 44 42 20 62 61 73 69 73 20 69 6e 20 74 68 65  TDB basis in the
13e0: 20 74 72 75 6e 6b 2e 20 46 69 6e 61 6c 69 7a 65   trunk. Finalize
13f0: 20 74 68 65 0a 09 20 20 20 20 23 20 70 61 72 65   the..    # pare
1400: 6e 74 2f 63 68 69 6c 64 20 6c 69 6e 6b 61 67 65  nt/child linkage
1410: 20 61 6e 64 20 73 71 75 61 73 68 20 74 68 65 20   and squash the 
1420: 62 72 61 6e 63 68 20 70 61 72 65 6e 74 20 73 79  branch parent sy
1430: 6d 62 6f 6c 0a 09 20 20 20 20 23 20 72 65 66 65  mbol..    # refe
1440: 72 65 6e 63 65 2e 0a 0a 09 20 20 20 20 73 74 61  rence....    sta
1450: 74 65 20 72 75 6e 20 7b 0a 09 09 55 50 44 41 54  te run {...UPDAT
1460: 45 20 72 65 76 69 73 69 6f 6e 20 53 45 54 20 63  E revision SET c
1470: 68 69 6c 64 20 20 20 3d 20 24 6c 61 73 74 20 57  hild   = $last W
1480: 48 45 52 45 20 72 69 64 20 3d 20 24 6a 6f 69 6e  HERE rid = $join
1490: 74 20 3b 0a 09 09 55 50 44 41 54 45 20 72 65 76  t ;...UPDATE rev
14a0: 69 73 69 6f 6e 20 53 45 54 20 62 70 61 72 65 6e  ision SET bparen
14b0: 74 20 3d 20 4e 55 4c 4c 20 20 57 48 45 52 45 20  t = NULL  WHERE 
14c0: 72 69 64 20 3d 20 24 6c 61 73 74 20 20 3b 0a 09  rid = $last  ;..
14d0: 20 20 20 20 7d 0a 09 7d 0a 0a 09 23 20 4e 6f 77      }..}...# Now
14e0: 20 74 68 61 74 20 74 68 65 20 73 70 65 63 69 61   that the specia
14f0: 6c 20 63 61 73 65 20 69 73 20 64 6f 6e 65 20 77  l case is done w
1500: 65 20 63 61 6e 20 73 69 6d 70 6c 79 20 6b 69 6c  e can simply kil
1510: 6c 20 61 6c 6c 20 74 68 65 0a 09 23 20 72 65 76  l all the..# rev
1520: 69 73 69 6f 6e 73 2c 20 74 61 67 73 2c 20 61 6e  isions, tags, an
1530: 64 20 62 72 61 6e 63 68 65 73 20 72 65 66 65 72  d branches refer
1540: 65 6e 63 69 6e 67 20 61 6e 79 20 6f 66 20 74 68  encing any of th
1550: 65 0a 09 23 20 65 78 63 6c 75 64 65 64 20 73 79  e..# excluded sy
1560: 6d 62 6f 6c 73 20 69 6e 20 73 6f 6d 65 20 77 61  mbols in some wa
1570: 79 2e 20 54 68 69 73 20 69 73 20 65 61 73 79 20  y. This is easy 
1580: 61 73 20 77 65 20 64 6f 20 6e 6f 74 20 68 61 76  as we do not hav
1590: 65 0a 09 23 20 74 6f 20 73 65 6c 65 63 74 20 74  e..# to select t
15a0: 68 65 6d 20 61 67 61 69 6e 20 61 6e 64 20 61 67  hem again and ag
15b0: 61 69 6e 20 66 72 6f 6d 20 74 68 65 20 62 61 73  ain from the bas
15c0: 65 20 74 61 62 6c 65 73 20 61 6e 79 0a 09 23 20  e tables any..# 
15d0: 6c 6f 6e 67 65 72 2e 0a 0a 09 73 74 61 74 65 20  longer....state 
15e0: 72 75 6e 20 7b 0a 09 20 20 20 20 44 45 4c 45 54  run {..    DELET
15f0: 45 20 46 52 4f 4d 20 72 65 76 69 73 69 6f 6e 20  E FROM revision 
1600: 57 48 45 52 45 20 6c 6f 64 20 49 4e 20 65 78 63  WHERE lod IN exc
1610: 6c 75 64 65 64 73 79 6d 62 6f 6c 73 3b 0a 09 20  ludedsymbols;.. 
1620: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 74     DELETE FROM t
1630: 61 67 20 20 20 20 20 20 57 48 45 52 45 20 6c 6f  ag      WHERE lo
1640: 64 20 49 4e 20 65 78 63 6c 75 64 65 64 73 79 6d  d IN excludedsym
1650: 62 6f 6c 73 3b 0a 09 20 20 20 20 44 45 4c 45 54  bols;..    DELET
1660: 45 20 46 52 4f 4d 20 74 61 67 20 20 20 20 20 20  E FROM tag      
1670: 57 48 45 52 45 20 73 69 64 20 49 4e 20 65 78 63  WHERE sid IN exc
1680: 6c 75 64 65 64 73 79 6d 62 6f 6c 73 3b 0a 09 20  ludedsymbols;.. 
1690: 20 20 20 44 45 4c 45 54 45 20 46 52 4f 4d 20 62     DELETE FROM b
16a0: 72 61 6e 63 68 20 20 20 57 48 45 52 45 20 6c 6f  ranch   WHERE lo
16b0: 64 20 49 4e 20 65 78 63 6c 75 64 65 64 73 79 6d  d IN excludedsym
16c0: 62 6f 6c 73 3b 0a 09 20 20 20 20 44 45 4c 45 54  bols;..    DELET
16d0: 45 20 46 52 4f 4d 20 62 72 61 6e 63 68 20 20 20  E FROM branch   
16e0: 57 48 45 52 45 20 73 69 64 20 49 4e 20 65 78 63  WHERE sid IN exc
16f0: 6c 75 64 65 64 73 79 6d 62 6f 6c 73 3b 0a 0a 09  ludedsymbols;...
1700: 20 20 20 20 44 52 4f 50 20 54 41 42 4c 45 20 65      DROP TABLE e
1710: 78 63 6c 75 64 65 64 73 79 6d 62 6f 6c 73 3b 0a  xcludedsymbols;.
1720: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
1730: 0a 0a 20 20 20 20 70 72 6f 63 20 4d 75 74 61 74  ..    proc Mutat
1740: 65 54 61 67 73 54 6f 42 72 61 6e 63 68 20 7b 7d  eTagsToBranch {}
1750: 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 33 20   {..log write 3 
1760: 66 69 6c 74 65 72 73 79 6d 20 22 4d 75 74 61 74  filtersym "Mutat
1770: 65 20 74 61 67 73 20 74 6f 20 62 72 61 6e 63 68  e tags to branch
1780: 65 73 22 0a 0a 09 23 20 4e 65 78 74 2c 20 6e 6f  es"...# Next, no
1790: 77 20 74 68 61 74 20 77 65 20 6b 6e 6f 77 20 77  w that we know w
17a0: 68 69 63 68 20 73 79 6d 62 6f 6c 73 20 61 72 65  hich symbols are
17b0: 20 77 68 61 74 20 77 65 20 6c 6f 6f 6b 20 66 6f   what we look fo
17c0: 72 0a 09 23 20 66 69 6c 65 20 6c 65 76 65 6c 20  r..# file level 
17d0: 74 61 67 73 20 77 68 69 63 68 20 61 72 65 20 61  tags which are a
17e0: 63 74 75 61 6c 6c 79 20 63 6f 6e 76 65 72 74 65  ctually converte
17f0: 64 20 61 73 20 62 72 61 6e 63 68 65 73 0a 09 23  d as branches..#
1800: 20 28 70 72 6f 6a 65 63 74 20 6c 65 76 65 6c 29   (project level)
1810: 2c 20 61 6e 64 20 70 75 74 20 74 68 65 6d 20 69  , and put them i
1820: 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63 74 20  nto the correct 
1830: 74 61 62 6c 65 2e 0a 0a 09 73 65 74 20 62 72 61  table....set bra
1840: 6e 63 68 20 5b 70 72 6f 6a 65 63 74 3a 3a 73 79  nch [project::sy
1850: 6d 20 62 72 61 6e 63 68 5d 0a 0a 09 66 6f 72 65  m branch]...fore
1860: 61 63 68 20 7b 69 64 20 66 69 64 20 6c 6f 64 20  ach {id fid lod 
1870: 73 69 64 20 72 65 76 7d 20 5b 73 74 61 74 65 20  sid rev} [state 
1880: 72 75 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43  run {..    SELEC
1890: 54 20 54 2e 74 69 64 2c 20 54 2e 66 69 64 2c 20  T T.tid, T.fid, 
18a0: 54 2e 6c 6f 64 2c 20 54 2e 73 69 64 2c 20 54 2e  T.lod, T.sid, T.
18b0: 72 65 76 0a 09 20 20 20 20 46 52 4f 4d 20 74 61  rev..    FROM ta
18c0: 67 20 54 2c 20 73 79 6d 62 6f 6c 20 53 0a 09 20  g T, symbol S.. 
18d0: 20 20 20 57 48 45 52 45 20 54 2e 73 69 64 20 3d     WHERE T.sid =
18e0: 20 53 2e 73 69 64 0a 09 20 20 20 20 41 4e 44 20   S.sid..    AND 
18f0: 53 2e 74 79 70 65 20 3d 20 24 62 72 61 6e 63 68  S.type = $branch
1900: 0a 09 7d 5d 20 7b 0a 09 20 20 20 20 73 74 61 74  ..}] {..    stat
1910: 65 20 72 75 6e 20 7b 0a 09 09 44 45 4c 45 54 45  e run {...DELETE
1920: 20 46 52 4f 4d 20 74 61 67 20 57 48 45 52 45 20   FROM tag WHERE 
1930: 74 69 64 20 3d 20 24 69 64 20 3b 0a 09 09 49 4e  tid = $id ;...IN
1940: 53 45 52 54 20 49 4e 54 4f 20 62 72 61 6e 63 68  SERT INTO branch
1950: 20 28 62 69 64 2c 20 66 69 64 2c 20 20 6c 6f 64   (bid, fid,  lod
1960: 2c 20 20 73 69 64 2c 20 20 72 6f 6f 74 2c 20 66  ,  sid,  root, f
1970: 69 72 73 74 2c 20 62 72 61 29 0a 09 09 56 41 4c  irst, bra)...VAL
1980: 55 45 53 20 20 20 20 20 20 20 20 20 20 20 20 20  UES             
1990: 28 24 69 64 2c 20 24 66 69 64 2c 20 24 6c 6f 64  ($id, $fid, $lod
19a0: 2c 20 24 73 69 64 2c 20 24 72 65 76 2c 20 4e 55  , $sid, $rev, NU
19b0: 4c 4c 2c 20 20 27 27 29 3b 0a 09 20 20 20 20 7d  LL,  '');..    }
19c0: 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ..}..return.    
19d0: 7d 0a 0a 20 20 20 20 70 72 6f 63 20 4d 75 74 61  }..    proc Muta
19e0: 74 65 42 72 61 6e 63 68 65 73 54 6f 54 61 67 20  teBranchesToTag 
19f0: 7b 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20  {} {..log write 
1a00: 33 20 66 69 6c 74 65 72 73 79 6d 20 22 4d 75 74  3 filtersym "Mut
1a10: 61 74 65 20 62 72 61 6e 63 68 65 73 20 74 6f 20  ate branches to 
1a20: 74 61 67 73 22 0a 0a 09 23 20 4e 65 78 74 2c 20  tags"...# Next, 
1a30: 6e 6f 77 20 74 68 61 74 20 77 65 20 6b 6e 6f 77  now that we know
1a40: 20 77 68 69 63 68 20 73 79 6d 62 6f 6c 73 20 61   which symbols a
1a50: 72 65 20 77 68 61 74 20 77 65 20 6c 6f 6f 6b 20  re what we look 
1a60: 66 6f 72 0a 09 23 20 66 69 6c 65 20 6c 65 76 65  for..# file leve
1a70: 6c 20 62 72 61 6e 63 68 65 73 20 77 68 69 63 68  l branches which
1a80: 20 61 72 65 20 61 63 74 75 61 6c 6c 79 20 63 6f   are actually co
1a90: 6e 76 65 72 74 65 64 20 61 73 20 74 61 67 73 0a  nverted as tags.
1aa0: 09 23 20 28 70 72 6f 6a 65 63 74 20 6c 65 76 65  .# (project leve
1ab0: 6c 29 2c 20 61 6e 64 20 70 75 74 20 74 68 65 6d  l), and put them
1ac0: 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63   into the correc
1ad0: 74 20 74 61 62 6c 65 2e 0a 0a 09 73 65 74 20 74  t table....set t
1ae0: 61 67 20 5b 70 72 6f 6a 65 63 74 3a 3a 73 79 6d  ag [project::sym
1af0: 20 74 61 67 5d 0a 0a 09 66 6f 72 65 61 63 68 20   tag]...foreach 
1b00: 7b 69 64 20 66 69 64 20 6c 6f 64 20 73 69 64 20  {id fid lod sid 
1b10: 72 6f 6f 74 20 66 69 72 73 74 20 62 72 61 7d 20  root first bra} 
1b20: 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 20 20  [state run {..  
1b30: 20 20 53 45 4c 45 43 54 20 42 2e 62 69 64 2c 20    SELECT B.bid, 
1b40: 42 2e 66 69 64 2c 20 42 2e 6c 6f 64 2c 20 42 2e  B.fid, B.lod, B.
1b50: 73 69 64 2c 20 42 2e 72 6f 6f 74 2c 20 42 2e 66  sid, B.root, B.f
1b60: 69 72 73 74 2c 20 42 2e 62 72 61 0a 09 20 20 20  irst, B.bra..   
1b70: 20 46 52 4f 4d 20 62 72 61 6e 63 68 20 42 2c 20   FROM branch B, 
1b80: 73 79 6d 62 6f 6c 20 53 0a 09 20 20 20 20 57 48  symbol S..    WH
1b90: 45 52 45 20 42 2e 73 69 64 20 3d 20 53 2e 73 69  ERE B.sid = S.si
1ba0: 64 0a 09 20 20 20 20 41 4e 44 20 53 2e 74 79 70  d..    AND S.typ
1bb0: 65 20 3d 20 24 74 61 67 0a 09 7d 5d 20 7b 0a 09  e = $tag..}] {..
1bc0: 20 20 20 20 73 74 61 74 65 20 72 75 6e 20 7b 0a      state run {.
1bd0: 09 09 44 45 4c 45 54 45 20 46 52 4f 4d 20 62 72  ..DELETE FROM br
1be0: 61 6e 63 68 20 57 48 45 52 45 20 62 69 64 20 3d  anch WHERE bid =
1bf0: 20 24 69 64 20 3b 0a 09 09 49 4e 53 45 52 54 20   $id ;...INSERT 
1c00: 49 4e 54 4f 20 74 61 67 20 28 74 69 64 2c 20 66  INTO tag (tid, f
1c10: 69 64 2c 20 20 6c 6f 64 2c 20 20 73 69 64 2c 20  id,  lod,  sid, 
1c20: 20 72 65 76 29 0a 09 09 56 41 4c 55 45 53 20 20   rev)...VALUES  
1c30: 20 20 20 20 20 20 20 20 28 24 69 64 2c 20 24 66          ($id, $f
1c40: 69 64 2c 20 24 6c 6f 64 2c 20 24 73 69 64 2c 20  id, $lod, $sid, 
1c50: 24 72 6f 6f 74 29 3b 0a 09 20 20 20 20 7d 0a 09  $root);..    }..
1c60: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
1c70: 0a 20 20 20 20 23 20 41 64 6a 75 73 74 20 74 68  .    # Adjust th
1c80: 65 20 70 61 72 65 6e 74 73 20 6f 66 20 73 79 6d  e parents of sym
1c90: 62 6f 6c 73 20 74 6f 20 74 68 65 69 72 20 70 72  bols to their pr
1ca0: 65 66 65 72 72 65 64 20 70 61 72 65 6e 74 73 2e  eferred parents.
1cb0: 0a 0a 20 20 20 20 23 20 49 66 20 61 20 66 69 6c  ..    # If a fil
1cc0: 65 20 6c 65 76 65 6c 20 79 6d 62 6f 6c 20 68 61  e level ymbol ha
1cd0: 73 20 61 20 70 72 65 66 65 72 72 65 64 20 70 61  s a preferred pa
1ce0: 72 65 6e 74 20 74 68 61 74 20 69 73 20 64 69 66  rent that is dif
1cf0: 66 65 72 65 6e 74 0a 20 20 20 20 23 20 74 68 61  ferent.    # tha
1d00: 6e 20 69 74 73 20 63 75 72 72 65 6e 74 20 70 61  n its current pa
1d10: 72 65 6e 74 2c 20 61 6e 64 20 69 66 20 74 68 65  rent, and if the
1d20: 20 70 72 65 66 65 72 72 65 64 20 70 61 72 65 6e   preferred paren
1d30: 74 20 69 73 20 61 6e 0a 20 20 20 20 23 20 61 6c  t is an.    # al
1d40: 6c 6f 77 65 64 20 70 61 72 65 6e 74 20 6f 66 20  lowed parent of 
1d50: 74 68 65 20 73 79 6d 62 6f 6c 20 69 6e 20 74 68  the symbol in th
1d60: 69 73 20 66 69 6c 65 2c 20 74 68 65 6e 20 77 65  is file, then we
1d70: 20 67 72 61 66 74 20 74 68 65 0a 20 20 20 20 23   graft the.    #
1d80: 20 61 53 79 6d 62 6f 6c 20 6f 6e 74 6f 20 69 74   aSymbol onto it
1d90: 73 20 70 72 65 66 65 72 72 65 64 20 70 61 72 65  s preferred pare
1da0: 6e 74 2e 0a 0a 20 20 20 20 70 72 6f 63 20 41 64  nt...    proc Ad
1db0: 6a 75 73 74 54 61 67 50 61 72 65 6e 74 73 20 7b  justTagParents {
1dc0: 7d 20 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 33  } {..log write 3
1dd0: 20 66 69 6c 74 65 72 73 79 6d 20 22 41 64 6a 75   filtersym "Adju
1de0: 73 74 20 74 61 67 20 70 61 72 65 6e 74 73 22 0a  st tag parents".
1df0: 0a 09 23 20 46 69 6e 64 20 74 68 65 20 74 61 67  ..# Find the tag
1e00: 73 20 77 68 6f 73 65 20 63 75 72 72 65 6e 74 20  s whose current 
1e10: 70 61 72 65 6e 74 20 28 6c 6f 64 29 20 69 73 20  parent (lod) is 
1e20: 6e 6f 74 20 74 68 65 20 70 72 65 66 65 72 65 64  not the prefered
1e30: 0a 09 23 20 70 61 72 65 6e 74 2c 20 74 68 65 20  ..# parent, the 
1e40: 70 72 65 66 65 72 65 64 20 70 61 72 65 6e 74 20  prefered parent 
1e50: 69 73 20 6e 6f 74 20 74 68 65 20 74 72 75 6e 6b  is not the trunk
1e60: 2c 20 61 6e 64 20 74 68 65 0a 09 23 20 70 72 65  , and the..# pre
1e70: 66 65 72 65 64 20 70 61 72 65 6e 74 20 69 73 20  fered parent is 
1e80: 61 20 70 6f 73 73 69 62 6c 65 20 70 61 72 65 6e  a possible paren
1e90: 74 20 70 65 72 20 74 68 65 20 74 61 67 27 73 20  t per the tag's 
1ea0: 66 69 6c 65 20 28 29 2e 0a 0a 09 66 6f 72 65 61  file ()....forea
1eb0: 63 68 20 7b 69 64 20 66 69 64 20 6c 6f 64 20 70  ch {id fid lod p
1ec0: 69 64 20 70 72 65 66 65 72 65 64 6e 61 6d 65 20  id preferedname 
1ed0: 72 65 76 6e 72 7d 20 5b 73 74 61 74 65 20 72 75  revnr} [state ru
1ee0: 6e 20 7b 0a 09 20 20 20 20 53 45 4c 45 43 54 20  n {..    SELECT 
1ef0: 54 2e 74 69 64 2c 20 54 2e 66 69 64 2c 20 54 2e  T.tid, T.fid, T.
1f00: 6c 6f 64 2c 20 50 2e 70 69 64 2c 20 53 2e 6e 61  lod, P.pid, S.na
1f10: 6d 65 2c 20 52 2e 72 65 76 0a 09 20 20 20 20 46  me, R.rev..    F
1f20: 52 4f 4d 20 74 61 67 20 54 2c 20 70 72 65 66 65  ROM tag T, prefe
1f30: 72 65 64 70 61 72 65 6e 74 20 50 2c 20 73 79 6d  redparent P, sym
1f40: 62 6f 6c 20 53 2c 20 72 65 76 69 73 69 6f 6e 20  bol S, revision 
1f50: 52 0a 09 20 20 20 20 57 48 45 52 45 20 54 2e 73  R..    WHERE T.s
1f60: 69 64 20 3d 20 50 2e 73 69 64 0a 09 20 20 20 20  id = P.sid..    
1f70: 41 4e 44 20 20 20 54 2e 6c 6f 64 20 21 3d 20 50  AND   T.lod != P
1f80: 2e 70 69 64 0a 09 20 20 20 20 41 4e 44 20 20 20  .pid..    AND   
1f90: 50 2e 70 69 64 20 3d 20 53 2e 73 69 64 0a 09 20  P.pid = S.sid.. 
1fa0: 20 20 20 41 4e 44 20 20 20 53 2e 6e 61 6d 65 20     AND   S.name 
1fb0: 21 3d 20 27 3a 74 72 75 6e 6b 3a 27 0a 09 20 20  != ':trunk:'..  
1fc0: 20 20 41 4e 44 20 20 20 54 2e 72 65 76 20 3d 20    AND   T.rev = 
1fd0: 52 2e 72 69 64 09 0a 09 20 20 20 20 41 4e 44 20  R.rid...    AND 
1fe0: 20 20 50 2e 70 69 64 20 49 4e 20 28 53 45 4c 45    P.pid IN (SELE
1ff0: 43 54 20 42 2e 73 69 64 20 46 52 4f 4d 20 62 72  CT B.sid FROM br
2000: 61 6e 63 68 20 42 20 57 48 45 52 45 20 42 2e 72  anch B WHERE B.r
2010: 6f 6f 74 20 3d 20 52 2e 72 69 64 29 0a 09 7d 5d  oot = R.rid)..}]
2020: 20 7b 0a 09 20 20 20 20 23 20 54 68 65 20 6e 61   {..    # The na
2030: 6d 65 73 20 66 6f 72 20 75 73 65 20 69 6e 20 74  mes for use in t
2040: 68 65 20 6c 6f 67 20 6f 75 74 70 75 74 20 61 72  he log output ar
2050: 65 20 72 65 74 72 69 65 76 65 64 0a 09 20 20 20  e retrieved..   
2060: 20 23 20 73 65 70 61 72 61 74 65 6c 79 2c 20 74   # separately, t
2070: 6f 20 6b 65 65 70 20 74 68 65 20 6a 6f 69 6e 20  o keep the join 
2080: 73 65 6c 65 63 74 69 6e 67 20 74 68 65 20 61 64  selecting the ad
2090: 6a 75 73 74 61 62 6c 65 0a 09 20 20 20 20 23 20  justable..    # 
20a0: 74 61 67 73 20 73 6d 61 6c 6c 2c 20 6e 6f 74 20  tags small, not 
20b0: 62 75 72 64 65 6e 65 64 20 77 69 74 68 20 74 68  burdened with th
20c0: 65 20 64 65 72 65 66 65 72 65 6e 63 69 6e 67 20  e dereferencing 
20d0: 6f 66 20 6c 69 6e 6b 73 0a 09 20 20 20 20 23 20  of links..    # 
20e0: 74 6f 20 6e 61 6d 65 2e 0a 0a 09 20 20 20 20 73  to name....    s
20f0: 65 74 20 74 61 67 6e 61 6d 65 20 5b 6c 69 6e 64  et tagname [lind
2100: 65 78 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a  ex [state run {.
2110: 09 09 53 45 4c 45 43 54 20 53 2e 6e 61 6d 65 20  ..SELECT S.name 
2120: 46 52 4f 4d 20 74 61 67 20 54 2c 20 73 79 6d 62  FROM tag T, symb
2130: 6f 6c 20 53 20 57 48 45 52 45 20 54 2e 73 69 64  ol S WHERE T.sid
2140: 20 3d 20 53 2e 73 69 64 20 41 4e 44 20 54 2e 74   = S.sid AND T.t
2150: 69 64 20 3d 20 24 69 64 0a 09 20 20 20 20 7d 5d  id = $id..    }]
2160: 20 30 5d 0a 09 20 20 20 20 73 65 74 20 6f 6c 64   0]..    set old
2170: 6e 61 6d 65 20 5b 6c 69 6e 64 65 78 20 5b 73 74  name [lindex [st
2180: 61 74 65 20 72 75 6e 20 7b 0a 09 09 53 45 4c 45  ate run {...SELE
2190: 43 54 20 4c 2e 6e 61 6d 65 20 46 52 4f 4d 20 73  CT L.name FROM s
21a0: 79 6d 62 6f 6c 20 4c 20 57 48 45 52 45 20 4c 2e  ymbol L WHERE L.
21b0: 73 69 64 20 3d 20 24 6c 6f 64 0a 09 20 20 20 20  sid = $lod..    
21c0: 7d 5d 20 30 5d 0a 09 20 20 20 20 73 74 72 75 63  }] 0]..    struc
21d0: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 5b  t::list assign [
21e0: 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 53 45  state run {...SE
21f0: 4c 45 43 54 20 46 2e 6e 61 6d 65 2c 20 50 2e 6e  LECT F.name, P.n
2200: 61 6d 65 0a 09 09 46 52 4f 4d 20 66 69 6c 65 20  ame...FROM file 
2210: 46 2c 20 70 72 6f 6a 65 63 74 20 50 0a 09 09 57  F, project P...W
2220: 48 45 52 45 20 46 2e 66 69 64 20 3d 20 24 66 69  HERE F.fid = $fi
2230: 64 20 41 4e 44 20 46 2e 70 69 64 20 3d 20 50 2e  d AND F.pid = P.
2240: 70 69 64 0a 09 20 20 20 20 7d 5d 20 66 6e 61 6d  pid..    }] fnam
2250: 65 20 70 72 6e 61 6d 65 0a 0a 09 20 20 20 20 23  e prname...    #
2260: 20 44 6f 20 74 68 65 20 67 72 61 66 74 69 6e 67   Do the grafting
2270: 2e 0a 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74  ....    log writ
2280: 65 20 33 20 66 69 6c 74 65 72 73 79 6d 20 22 24  e 3 filtersym "$
2290: 70 72 6e 61 6d 65 20 3a 20 47 72 61 66 74 69 6e  prname : Graftin
22a0: 67 20 74 61 67 20 27 24 74 61 67 6e 61 6d 65 27  g tag '$tagname'
22b0: 20 6f 6e 20 24 66 6e 61 6d 65 2f 24 72 65 76 6e   on $fname/$revn
22c0: 72 20 66 72 6f 6d 20 27 24 6f 6c 64 6e 61 6d 65  r from '$oldname
22d0: 27 20 6f 6e 74 6f 20 27 24 70 72 65 66 65 72 65  ' onto '$prefere
22e0: 64 6e 61 6d 65 27 22 0a 09 20 20 20 20 73 74 61  dname'"..    sta
22f0: 74 65 20 72 75 6e 20 7b 0a 09 09 55 50 44 41 54  te run {...UPDAT
2300: 45 20 74 61 67 20 53 45 54 20 6c 6f 64 20 3d 20  E tag SET lod = 
2310: 24 70 69 64 20 57 48 45 52 45 20 74 69 64 20 3d  $pid WHERE tid =
2320: 20 24 69 64 20 3b 0a 09 20 20 20 20 7d 0a 09 7d   $id ;..    }..}
2330: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
2340: 20 20 20 20 70 72 6f 63 20 41 64 6a 75 73 74 42      proc AdjustB
2350: 72 61 6e 63 68 50 61 72 65 6e 74 73 20 7b 7d 20  ranchParents {} 
2360: 7b 0a 09 6c 6f 67 20 77 72 69 74 65 20 33 20 66  {..log write 3 f
2370: 69 6c 74 65 72 73 79 6d 20 22 41 64 6a 75 73 74  iltersym "Adjust
2380: 20 62 72 61 6e 63 68 20 70 61 72 65 6e 74 73 22   branch parents"
2390: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
23a0: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
23b0: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
23c0: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20  ###########.    
23d0: 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ## Configuration
23e0: 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61  ..    pragma -ha
23f0: 73 69 6e 73 74 61 6e 63 65 73 20 20 20 6e 6f 20  sinstances   no 
2400: 3b 20 23 20 73 69 6e 67 6c 65 74 6f 6e 0a 20 20  ; # singleton.  
2410: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70    pragma -hastyp
2420: 65 69 6e 66 6f 20 20 20 20 6e 6f 20 3b 20 23 20  einfo    no ; # 
2430: 6e 6f 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e  no introspection
2440: 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73  .    pragma -has
2450: 74 79 70 65 64 65 73 74 72 6f 79 20 6e 6f 20 3b  typedestroy no ;
2460: 20 23 20 69 6d 6d 6f 72 74 61 6c 0a 0a 20 20 20   # immortal..   
2470: 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23   # # ## ### ####
2480: 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23  # ######## #####
2490: 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65  ########.}..name
24a0: 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a  space eval ::vc:
24b0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
24c0: 3a 63 76 73 3a 3a 70 61 73 73 20 7b 0a 20 20 20  :cvs::pass {.   
24d0: 20 6e 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72   namespace expor
24e0: 74 20 66 69 6c 74 65 72 73 79 6d 0a 20 20 20 20  t filtersym.    
24f0: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 66  namespace eval f
2500: 69 6c 74 65 72 73 79 6d 20 7b 0a 09 6e 61 6d 65  iltersym {..name
2510: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
2520: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
2530: 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e  t::cvs::state..n
2540: 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 70 72  amespace eval pr
2550: 6f 6a 65 63 74 20 7b 0a 09 20 20 20 20 6e 61 6d  oject {..    nam
2560: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
2570: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
2580: 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74  rt::cvs::project
2590: 3a 3a 73 79 6d 0a 09 7d 0a 09 6e 61 6d 65 73 70  ::sym..}..namesp
25a0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
25b0: 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6c 6f 67  :tools::log..log
25c0: 20 72 65 67 69 73 74 65 72 20 66 69 6c 74 65 72   register filter
25d0: 73 79 6d 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23  sym.    }.}..# #
25e0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
25f0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
2600: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
2610: 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65  ##########.## Re
2620: 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f  ady..package pro
2630: 76 69 64 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a  vide vc::fossil:
2640: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61  :import::cvs::pa
2650: 73 73 3a 3a 66 69 6c 74 65 72 73 79 6d 20 31 2e  ss::filtersym 1.
2660: 30 0a 72 65 74 75 72 6e 0a                       0.return.