Hex Artifact Content
Not logged in

Artifact fccbbea0d27033af791d14e287ca824e3b7017ea:

File tools/cvs2fossil/lib/c2f_repository.tcl part of check-in [67600f777b] - Fixed handling of project objects when persisting them. Fill the project map. This is needed if the pass is not skipped. For the skip case we already initialize the project map when 'load'ing from the state. by aku on 2007-11-14 05:08:43.

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 52 65 70  ########..## Rep
0200: 6f 73 69 74 6f 72 79 20 6d 61 6e 61 67 65 72 2e  ository manager.
0210: 20 4b 65 65 70 73 20 70 72 6f 6a 65 63 74 73 20   Keeps projects 
0220: 61 6e 64 20 74 68 65 69 72 20 66 69 6c 65 73 20  and their files 
0230: 61 72 6f 75 6e 64 2e 0a 0a 70 61 63 6b 61 67 65  around...package
0240: 20 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73   provide vc::fos
0250: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
0260: 3a 3a 72 65 70 6f 73 69 74 6f 72 79 20 31 2e 30  ::repository 1.0
0270: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
0280: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0290: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
02a0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
02b0: 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73 0a  ## Requirements.
02c0: 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65  .package require
02d0: 20 54 63 6c 20 38 2e 34 20 20 20 20 20 20 20 20   Tcl 8.4        
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 3b 20 23 20 52 65 71 75 69 72 65 64 20 72    ; # Required r
0300: 75 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 67 65 20  untime..package 
0310: 72 65 71 75 69 72 65 20 73 6e 69 74 20 20 20 20  require snit    
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 3b 20 23 20 4f 4f 20           ; # OO 
0340: 73 79 73 74 65 6d 2e 0a 70 61 63 6b 61 67 65 20  system..package 
0350: 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c  require vc::tool
0360: 73 3a 3a 74 72 6f 75 62 6c 65 20 20 20 20 20 20  s::trouble      
0370: 20 20 20 20 20 20 20 20 20 3b 20 23 20 45 72 72           ; # Err
0380: 6f 72 20 72 65 70 6f 72 74 69 6e 67 2e 0a 70 61  or reporting..pa
0390: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63  ckage require vc
03a0: 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 20 20 20 20  ::tools::log    
03b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b                 ;
03c0: 20 23 20 55 73 65 72 20 66 65 65 64 62 61 63 6b   # User feedback
03d0: 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72  ..package requir
03e0: 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73  e vc::tools::mis
03f0: 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c               
0400: 20 20 20 3b 20 23 20 54 65 78 74 20 66 6f 72 6d     ; # Text form
0410: 61 74 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20  atting..package 
0420: 72 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c  require vc::tool
0430: 73 3a 3a 69 64 20 20 20 20 20 20 20 20 20 20 20  s::id           
0440: 20 20 20 20 20 20 20 20 20 3b 20 23 20 49 6e 64           ; # Ind
0450: 65 78 69 6e 67 20 61 6e 64 20 69 64 20 67 65 6e  exing and id gen
0460: 65 72 61 74 69 6f 6e 2e 0a 70 61 63 6b 61 67 65  eration..package
0470: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
0480: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
0490: 3a 3a 70 72 6f 6a 65 63 74 20 3b 20 23 20 43 56  ::project ; # CV
04a0: 53 20 70 72 6f 6a 65 63 74 73 2e 0a 70 61 63 6b  S projects..pack
04b0: 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a  age require vc::
04c0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
04d0: 63 76 73 3a 3a 73 74 61 74 65 20 20 20 3b 20 23  cvs::state   ; #
04e0: 20 53 74 61 74 65 20 73 74 6f 72 61 67 65 2e 0a   State storage..
04f0: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0500: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 20 20 20  struct::list    
0510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0520: 20 3b 20 23 20 4c 69 73 74 20 6f 70 65 72 61 74   ; # List operat
0530: 69 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72 65  ions..package re
0540: 71 75 69 72 65 20 66 69 6c 65 75 74 69 6c 20 20  quire fileutil  
0550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0560: 20 20 20 20 20 20 20 3b 20 23 20 46 69 6c 65 20         ; # File 
0570: 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 0a 23 20 23  operations...# #
0580: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
0590: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
05a0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
05b0: 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 0a 0a  ##########.## ..
05c0: 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a  snit::type ::vc:
05d0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
05e0: 3a 63 76 73 3a 3a 72 65 70 6f 73 69 74 6f 72 79  :cvs::repository
05f0: 20 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23 23   {.    # # ## ##
0600: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
0610: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
0620: 20 20 20 23 23 20 50 75 62 6c 69 63 20 41 50 49     ## Public API
0630: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64  ..    typemethod
0640: 20 62 61 73 65 20 7b 70 61 74 68 7d 20 7b 0a 09   base {path} {..
0650: 23 20 43 6f 75 6c 64 20 62 65 20 63 68 65 63 6b  # Could be check
0660: 65 64 2c 20 65 61 73 69 65 72 20 74 6f 20 64 65  ed, easier to de
0670: 66 65 72 20 74 6f 20 74 68 65 20 6f 76 65 72 61  fer to the overa
0680: 6c 6c 20 76 61 6c 69 64 61 74 69 6f 6e 2e 0a 09  ll validation...
0690: 73 65 74 20 6d 79 62 61 73 65 20 24 70 61 74 68  set mybase $path
06a0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
06b0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 61      typemethod a
06c0: 64 64 20 7b 70 61 74 68 7d 20 7b 0a 09 23 20 4d  dd {path} {..# M
06d0: 6f 73 74 20 74 68 69 6e 67 73 20 63 61 6e 6e 6f  ost things canno
06e0: 74 20 62 65 20 63 68 65 63 6b 65 64 20 69 6d 6d  t be checked imm
06f0: 65 64 69 61 74 65 6c 79 2c 20 61 73 20 74 68 65  ediately, as the
0700: 20 62 61 73 65 20 69 73 0a 09 23 20 6e 6f 74 20   base is..# not 
0710: 6b 6e 6f 77 6e 20 77 68 69 6c 65 20 70 72 6f 6a  known while proj
0720: 65 63 74 73 20 61 72 65 20 61 64 64 65 64 2e 20  ects are added. 
0730: 57 65 20 63 61 6e 20 61 6e 64 20 64 6f 20 63 68  We can and do ch
0740: 65 63 6b 20 66 6f 72 0a 09 23 20 75 6e 69 71 75  eck for..# uniqu
0750: 65 6e 65 73 73 2e 20 57 65 20 61 63 63 65 70 74  eness. We accept
0760: 20 6d 75 6c 74 69 70 6c 65 20 6f 63 63 75 72 65   multiple occure
0770: 6e 63 65 73 20 6f 66 20 61 20 6e 61 6d 65 2c 20  nces of a name, 
0780: 61 6e 64 0a 09 23 20 74 72 65 61 74 20 74 68 65  and..# treat the
0790: 6d 20 61 73 20 61 20 73 69 6e 67 6c 65 20 70 72  m as a single pr
07a0: 6f 6a 65 63 74 2e 0a 0a 09 69 66 20 7b 5b 6c 73  oject....if {[ls
07b0: 65 61 72 63 68 20 2d 65 78 61 63 74 20 24 6d 79  earch -exact $my
07c0: 70 72 6f 6a 70 61 74 68 73 20 24 70 61 74 68 5d  projpaths $path]
07d0: 20 3e 3d 20 30 7d 20 72 65 74 75 72 6e 0a 09 6c   >= 0} return..l
07e0: 61 70 70 65 6e 64 20 6d 79 70 72 6f 6a 70 61 74  append myprojpat
07f0: 68 73 20 24 70 61 74 68 0a 09 72 65 74 75 72 6e  hs $path..return
0800: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65  .    }..    type
0810: 6d 65 74 68 6f 64 20 74 72 75 6e 6b 6f 6e 6c 79  method trunkonly
0820: 21 20 7b 7d 20 7b 20 73 65 74 20 6d 79 74 72 75  ! {} { set mytru
0830: 6e 6b 6f 6e 6c 79 20 31 20 3b 20 72 65 74 75 72  nkonly 1 ; retur
0840: 6e 20 7d 0a 20 20 20 20 74 79 70 65 6d 65 74 68  n }.    typemeth
0850: 6f 64 20 74 72 75 6e 6b 6f 6e 6c 79 20 20 7b 7d  od trunkonly  {}
0860: 20 7b 20 72 65 74 75 72 6e 20 24 6d 79 74 72 75   { return $mytru
0870: 6e 6b 6f 6e 6c 79 20 7d 0a 0a 20 20 20 20 74 79  nkonly }..    ty
0880: 70 65 6d 65 74 68 6f 64 20 70 72 6f 6a 65 63 74  pemethod project
0890: 73 20 7b 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b  s {} {..return [
08a0: 54 68 65 50 72 6f 6a 65 63 74 73 5d 0a 20 20 20  TheProjects].   
08b0: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68   }..    typemeth
08c0: 6f 64 20 62 61 73 65 3f 20 7b 7d 20 7b 20 72 65  od base? {} { re
08d0: 74 75 72 6e 20 24 6d 79 62 61 73 65 20 7d 0a 0a  turn $mybase }..
08e0: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 76      typemethod v
08f0: 61 6c 69 64 61 74 65 20 7b 7d 20 7b 0a 09 69 66  alidate {} {..if
0900: 20 7b 21 5b 49 73 52 65 70 6f 73 69 74 6f 72 79   {![IsRepository
0910: 42 61 73 65 20 24 6d 79 62 61 73 65 20 6d 73 67  Base $mybase msg
0920: 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c  ]} {..    troubl
0930: 65 20 66 61 74 61 6c 20 24 6d 73 67 0a 09 20 20  e fatal $msg..  
0940: 20 20 23 20 57 69 74 68 6f 75 74 20 61 20 67 6f    # Without a go
0950: 6f 64 20 62 61 73 65 20 64 69 72 65 63 74 6f 72  od base director
0960: 79 20 63 68 65 63 6b 69 6e 67 20 61 6e 79 20 70  y checking any p
0970: 72 6f 6a 65 63 74 73 20 69 73 0a 09 20 20 20 20  rojects is..    
0980: 23 20 77 61 73 74 65 64 20 74 69 6d 65 2c 20 73  # wasted time, s
0990: 6f 20 77 65 20 6c 65 61 76 65 20 6e 6f 77 2e 0a  o we leave now..
09a0: 09 20 20 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09  .    return..}..
09b0: 66 6f 72 65 61 63 68 20 70 70 20 24 6d 79 70 72  foreach pp $mypr
09c0: 6f 6a 70 61 74 68 73 20 7b 0a 09 20 20 20 20 69  ojpaths {..    i
09d0: 66 20 7b 21 5b 49 73 50 72 6f 6a 65 63 74 42 61  f {![IsProjectBa
09e0: 73 65 20 24 6d 79 62 61 73 65 2f 24 70 70 20 24  se $mybase/$pp $
09f0: 6d 79 62 61 73 65 2f 43 56 53 52 4f 4f 54 20 6d  mybase/CVSROOT m
0a00: 73 67 5d 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65  sg]} {...trouble
0a10: 20 66 61 74 61 6c 20 24 6d 73 67 0a 09 20 20 20   fatal $msg..   
0a20: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20   }..}..return.  
0a30: 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74    }..    typemet
0a40: 68 6f 64 20 64 65 66 61 75 74 68 6f 72 20 20 20  hod defauthor   
0a50: 7b 61 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  {a}             
0a60: 20 20 7b 20 24 6d 79 61 75 74 68 6f 72 20 70 75    { $myauthor pu
0a70: 74 20 24 61 20 7d 0a 20 20 20 20 74 79 70 65 6d  t $a }.    typem
0a80: 65 74 68 6f 64 20 64 65 66 63 6d 65 73 73 61 67  ethod defcmessag
0a90: 65 20 7b 63 6d 7d 20 20 20 20 20 20 20 20 20 20  e {cm}          
0aa0: 20 20 20 20 7b 20 24 6d 79 63 6d 73 67 20 20 20      { $mycmsg   
0ab0: 70 75 74 20 24 63 6d 20 7d 0a 20 20 20 20 74 79  put $cm }.    ty
0ac0: 70 65 6d 65 74 68 6f 64 20 64 65 66 73 79 6d 62  pemethod defsymb
0ad0: 6f 6c 20 20 20 7b 70 69 64 20 6e 61 6d 65 7d 20  ol   {pid name} 
0ae0: 20 20 20 20 20 20 20 7b 20 24 6d 79 73 79 6d 62         { $mysymb
0af0: 6f 6c 20 70 75 74 20 5b 6c 69 73 74 20 24 70 69  ol put [list $pi
0b00: 64 20 24 6e 61 6d 65 5d 20 7d 0a 20 20 20 20 74  d $name] }.    t
0b10: 79 70 65 6d 65 74 68 6f 64 20 64 65 66 6d 65 74  ypemethod defmet
0b20: 61 20 20 20 20 20 7b 70 69 64 20 62 69 64 20 61  a     {pid bid a
0b30: 69 64 20 63 69 64 7d 20 7b 20 24 6d 79 6d 65 74  id cid} { $mymet
0b40: 61 20 20 20 70 75 74 20 5b 6c 69 73 74 20 24 70  a   put [list $p
0b50: 69 64 20 24 62 69 64 20 24 61 69 64 20 24 63 69  id $bid $aid $ci
0b60: 64 5d 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65  d] }..    typeme
0b70: 74 68 6f 64 20 63 6f 6d 6d 69 74 6d 65 73 73 61  thod commitmessa
0b80: 67 65 6f 66 20 7b 6d 69 64 7d 20 7b 0a 09 73 74  geof {mid} {..st
0b90: 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 69 67  ruct::list assig
0ba0: 6e 20 5b 24 6d 79 6d 65 74 61 20 6b 65 79 6f 66  n [$mymeta keyof
0bb0: 20 24 6d 69 64 5d 20 70 69 64 20 62 69 64 20 61   $mid] pid bid a
0bc0: 69 64 20 63 69 64 0a 09 72 65 74 75 72 6e 20 5b  id cid..return [
0bd0: 24 6d 79 63 6d 73 67 20 6b 65 79 6f 66 20 24 63  $mycmsg keyof $c
0be0: 69 64 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  id].    }..    #
0bf0: 20 70 61 73 73 20 49 20 72 65 73 75 6c 74 73 0a   pass I results.
0c00: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 70      typemethod p
0c10: 72 69 6e 74 73 74 61 74 69 73 74 69 63 73 20 7b  rintstatistics {
0c20: 7d 20 7b 0a 09 73 65 74 20 70 72 6c 69 73 74 20  } {..set prlist 
0c30: 5b 54 68 65 50 72 6f 6a 65 63 74 73 5d 0a 09 73  [TheProjects]..s
0c40: 65 74 20 6e 70 72 20 5b 6c 6c 65 6e 67 74 68 20  et npr [llength 
0c50: 24 70 72 6c 69 73 74 5d 0a 0a 09 6c 6f 67 20 77  $prlist]...log w
0c60: 72 69 74 65 20 32 20 72 65 70 6f 73 69 74 6f 72  rite 2 repositor
0c70: 79 20 22 53 63 61 6e 6e 65 64 20 5b 6e 73 70 20  y "Scanned [nsp 
0c80: 24 6e 70 72 20 70 72 6f 6a 65 63 74 5d 22 0a 0a  $npr project]"..
0c90: 09 69 66 20 7b 24 6e 70 72 20 3e 20 31 7d 20 7b  .if {$npr > 1} {
0ca0: 0a 09 20 20 20 20 73 65 74 20 20 62 6d 61 78 20  ..    set  bmax 
0cb0: 5b 6d 61 78 20 5b 73 74 72 75 63 74 3a 3a 6c 69  [max [struct::li
0cc0: 73 74 20 6d 61 70 20 24 70 72 6c 69 73 74 20 5b  st map $prlist [
0cd0: 6d 79 70 72 6f 63 20 2e 42 61 73 65 4c 65 6e 67  myproc .BaseLeng
0ce0: 74 68 5d 5d 5d 0a 09 20 20 20 20 69 6e 63 72 20  th]]]..    incr 
0cf0: 62 6d 61 78 20 32 0a 09 20 20 20 20 73 65 74 20  bmax 2..    set 
0d00: 20 62 66 6d 74 20 25 2d 24 7b 62 6d 61 78 7d 73   bfmt %-${bmax}s
0d10: 0a 0a 09 20 20 20 20 73 65 74 20 20 6e 6d 61 78  ...    set  nmax
0d20: 20 5b 6d 61 78 20 5b 73 74 72 75 63 74 3a 3a 6c   [max [struct::l
0d30: 69 73 74 20 6d 61 70 20 24 70 72 6c 69 73 74 20  ist map $prlist 
0d40: 5b 6d 79 70 72 6f 63 20 2e 4e 46 69 6c 65 4c 65  [myproc .NFileLe
0d50: 6e 67 74 68 5d 5d 5d 0a 09 20 20 20 20 73 65 74  ngth]]]..    set
0d60: 20 20 6e 66 6d 74 20 25 24 7b 6e 6d 61 78 7d 73    nfmt %${nmax}s
0d70: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20 20 20 20  ..} else {..    
0d80: 73 65 74 20 62 66 6d 74 20 25 73 0a 09 20 20 20  set bfmt %s..   
0d90: 20 73 65 74 20 6e 66 6d 74 20 25 73 0a 09 7d 0a   set nfmt %s..}.
0da0: 0a 09 73 65 74 20 6b 65 65 70 20 7b 7d 0a 09 66  ..set keep {}..f
0db0: 6f 72 65 61 63 68 20 70 20 24 70 72 6c 69 73 74  oreach p $prlist
0dc0: 20 7b 0a 09 20 20 20 20 73 65 74 20 6e 66 69 6c   {..    set nfil
0dd0: 65 73 20 5b 6c 6c 65 6e 67 74 68 20 5b 24 70 20  es [llength [$p 
0de0: 66 69 6c 65 6e 61 6d 65 73 5d 5d 0a 09 20 20 20  filenames]]..   
0df0: 20 73 65 74 20 6c 69 6e 65 20 22 50 72 6f 6a 65   set line "Proje
0e00: 63 74 20 5b 66 6f 72 6d 61 74 20 24 62 66 6d 74  ct [format $bfmt
0e10: 20 5c 22 5b 24 70 20 70 72 69 6e 74 62 61 73 65   \"[$p printbase
0e20: 5d 5c 22 5d 20 3a 20 5b 66 6f 72 6d 61 74 20 24  ]\"] : [format $
0e30: 6e 66 6d 74 20 24 6e 66 69 6c 65 73 5d 20 5b 73  nfmt $nfiles] [s
0e40: 70 20 24 6e 66 69 6c 65 73 20 66 69 6c 65 5d 22  p $nfiles file]"
0e50: 0a 09 20 20 20 20 69 66 20 7b 24 6e 66 69 6c 65  ..    if {$nfile
0e60: 73 20 3c 20 31 7d 20 7b 0a 09 09 61 70 70 65 6e  s < 1} {...appen
0e70: 64 20 6c 69 6e 65 20 22 2c 20 64 72 6f 70 70 65  d line ", droppe
0e80: 64 22 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b  d"..    } else {
0e90: 0a 09 09 6c 61 70 70 65 6e 64 20 6b 65 65 70 20  ...lappend keep 
0ea0: 24 70 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 6c  $p..    }..    l
0eb0: 6f 67 20 77 72 69 74 65 20 32 20 72 65 70 6f 73  og write 2 repos
0ec0: 69 74 6f 72 79 20 24 6c 69 6e 65 0a 09 7d 0a 0a  itory $line..}..
0ed0: 09 69 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24  .if {![llength $
0ee0: 6b 65 65 70 5d 7d 20 7b 0a 09 20 20 20 20 74 72  keep]} {..    tr
0ef0: 6f 75 62 6c 65 20 77 61 72 6e 20 22 44 72 6f 70  ouble warn "Drop
0f00: 70 65 64 20 61 6c 6c 20 70 72 6f 6a 65 63 74 73  ped all projects
0f10: 22 0a 09 7d 20 65 6c 73 65 69 66 20 7b 24 6e 70  "..} elseif {$np
0f20: 72 20 3d 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 6b  r == [llength $k
0f30: 65 65 70 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67  eep]} {..    log
0f40: 20 77 72 69 74 65 20 32 20 72 65 70 6f 73 69 74   write 2 reposit
0f50: 6f 72 79 20 22 4b 65 65 70 69 6e 67 20 61 6c 6c  ory "Keeping all
0f60: 20 70 72 6f 6a 65 63 74 73 22 0a 09 7d 20 65 6c   projects"..} el
0f70: 73 65 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72  se {..    log wr
0f80: 69 74 65 20 32 20 72 65 70 6f 73 69 74 6f 72 79  ite 2 repository
0f90: 20 22 4b 65 65 70 69 6e 67 20 5b 6e 73 70 20 5b   "Keeping [nsp [
0fa0: 6c 6c 65 6e 67 74 68 20 24 6b 65 65 70 5d 20 70  llength $keep] p
0fb0: 72 6f 6a 65 63 74 5d 22 0a 09 20 20 20 20 74 72  roject]"..    tr
0fc0: 6f 75 62 6c 65 20 77 61 72 6e 20 22 44 72 6f 70  ouble warn "Drop
0fd0: 70 65 64 20 5b 6e 73 70 20 5b 65 78 70 72 20 7b  ped [nsp [expr {
0fe0: 24 6e 70 72 20 2d 20 5b 6c 6c 65 6e 67 74 68 20  $npr - [llength 
0ff0: 24 6b 65 65 70 5d 7d 5d 20 7b 65 6d 70 74 79 20  $keep]}] {empty 
1000: 70 72 6f 6a 65 63 74 7d 5d 22 0a 09 7d 0a 0a 09  project}]"..}...
1010: 23 20 4b 65 65 70 20 72 65 64 75 63 65 64 20 73  # Keep reduced s
1020: 65 74 20 6f 66 20 70 72 6f 6a 65 63 74 73 2e 0a  et of projects..
1030: 09 73 65 74 20 70 72 6f 6a 65 63 74 73 20 24 6b  .set projects $k
1040: 65 65 70 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  eep..return.    
1050: 7d 0a 0a 20 20 20 20 23 20 70 61 73 73 20 49 20  }..    # pass I 
1060: 70 65 72 73 69 73 74 65 6e 63 65 0a 20 20 20 20  persistence.    
1070: 74 79 70 65 6d 65 74 68 6f 64 20 70 65 72 73 69  typemethod persi
1080: 73 74 20 7b 7d 20 7b 0a 09 3a 3a 76 61 72 69 61  st {} {..::varia
1090: 62 6c 65 20 6d 79 70 72 6f 6a 6d 61 70 0a 09 73  ble myprojmap..s
10a0: 74 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e  tate transaction
10b0: 20 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20   {..    foreach 
10c0: 70 20 5b 54 68 65 50 72 6f 6a 65 63 74 73 5d 20  p [TheProjects] 
10d0: 7b 0a 09 09 24 70 20 70 65 72 73 69 73 74 0a 09  {...$p persist..
10e0: 09 73 65 74 20 6d 79 70 72 6f 6a 6d 61 70 28 5b  .set myprojmap([
10f0: 24 70 20 69 64 5d 29 20 24 70 0a 09 20 20 20 20  $p id]) $p..    
1100: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  }..}..return.   
1110: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68   }..    typemeth
1120: 6f 64 20 6c 6f 61 64 20 7b 7d 20 7b 0a 09 73 74  od load {} {..st
1130: 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ate transaction 
1140: 7b 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20 20  {..    foreach  
1150: 20 7b 70 69 64 20 20 6e 61 6d 65 7d 20 5b 73 74   {pid  name} [st
1160: 61 74 65 20 72 75 6e 20 7b 0a 09 09 53 45 4c 45  ate run {...SELE
1170: 43 54 20 70 69 64 2c 20 6e 61 6d 65 20 46 52 4f  CT pid, name FRO
1180: 4d 20 70 72 6f 6a 65 63 74 20 3b 0a 09 20 20 20  M project ;..   
1190: 20 7d 5d 20 7b 0a 09 09 73 65 74 20 70 72 6f 6a   }] {...set proj
11a0: 65 63 74 20 5b 70 72 6f 6a 65 63 74 20 25 41 55  ect [project %AU
11b0: 54 4f 25 20 24 6e 61 6d 65 20 24 74 79 70 65 5d  TO% $name $type]
11c0: 0a 0a 09 09 6c 61 70 70 65 6e 64 20 6d 79 70 72  ....lappend mypr
11d0: 6f 6a 70 61 74 68 73 20 24 6e 61 6d 65 0a 09 09  ojpaths $name...
11e0: 6c 61 70 70 65 6e 64 20 6d 79 70 72 6f 6a 65 63  lappend myprojec
11f0: 74 73 20 20 24 70 72 6f 6a 65 63 74 0a 09 09 73  ts  $project...s
1200: 65 74 20 6d 79 70 72 6f 6a 6d 61 70 28 24 70 69  et myprojmap($pi
1210: 64 29 20 24 70 72 6f 6a 65 63 74 0a 09 09 24 70  d) $project...$p
1220: 72 6f 6a 65 63 74 20 73 65 74 69 64 20 24 70 69  roject setid $pi
1230: 64 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 66 6f  d..    }..    fo
1240: 72 65 61 63 68 20 20 20 7b 66 69 64 20 20 70 69  reach   {fid  pi
1250: 64 20 20 6e 61 6d 65 20 20 76 69 73 69 62 6c 65  d  name  visible
1260: 20 20 65 78 65 63 7d 20 5b 73 74 61 74 65 20 72    exec} [state r
1270: 75 6e 20 7b 0a 09 09 53 45 4c 45 43 54 20 66 69  un {...SELECT fi
1280: 64 2c 20 70 69 64 2c 20 6e 61 6d 65 2c 20 76 69  d, pid, name, vi
1290: 73 69 62 6c 65 2c 20 65 78 65 63 20 46 52 4f 4d  sible, exec FROM
12a0: 20 66 69 6c 65 20 3b 0a 09 20 20 20 20 7d 5d 20   file ;..    }] 
12b0: 7b 0a 09 09 24 6d 79 70 72 6f 6a 6d 61 70 28 24  {...$myprojmap($
12c0: 70 69 64 29 20 61 64 64 66 69 6c 65 20 24 6e 61  pid) addfile $na
12d0: 6d 65 20 24 76 69 73 69 62 6c 65 20 24 65 78 65  me $visible $exe
12e0: 63 20 24 66 69 64 0a 09 20 20 20 20 7d 0a 09 7d  c $fid..    }..}
12f0: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
1300: 20 20 20 20 23 20 70 61 73 73 20 49 49 20 72 65      # pass II re
1310: 73 75 6c 74 73 0a 20 20 20 20 74 79 70 65 6d 65  sults.    typeme
1320: 74 68 6f 64 20 70 72 69 6e 74 72 65 76 73 74 61  thod printrevsta
1330: 74 69 73 74 69 63 73 20 7b 7d 20 7b 0a 09 6c 6f  tistics {} {..lo
1340: 67 20 77 72 69 74 65 20 32 20 72 65 70 6f 73 69  g write 2 reposi
1350: 74 6f 72 79 20 22 53 63 61 6e 6e 65 64 20 2e 2e  tory "Scanned ..
1360: 2e 22 0a 09 23 20 6e 75 6d 62 65 72 20 6f 66 20  ."..# number of 
1370: 72 65 76 69 73 69 6f 6e 73 2c 20 73 79 6d 62 6f  revisions, symbo
1380: 6c 73 2c 20 72 65 70 6f 73 69 74 6f 72 79 20 77  ls, repository w
1390: 69 64 65 2c 20 70 65 72 20 70 72 6f 6a 65 63 74  ide, per project
13a0: 20 2e 2e 2e 0a 09 72 65 74 75 72 6e 0a 20 20 20   .....return.   
13b0: 20 7d 0a 0a 20 20 20 20 23 20 70 61 73 73 20 49   }..    # pass I
13c0: 49 20 70 65 72 73 69 73 74 65 6e 63 65 0a 20 20  I persistence.  
13d0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 70 65 72    typemethod per
13e0: 73 69 73 74 72 65 76 20 7b 7d 20 7b 0a 09 73 74  sistrev {} {..st
13f0: 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ate transaction 
1400: 7b 0a 09 20 20 20 20 53 61 76 65 41 75 74 68 6f  {..    SaveAutho
1410: 72 73 0a 09 20 20 20 20 53 61 76 65 43 6f 6d 6d  rs..    SaveComm
1420: 69 74 4d 65 73 73 61 67 65 73 0a 09 20 20 20 20  itMessages..    
1430: 23 20 54 4f 44 4f 3a 20 53 61 76 65 20 73 79 6d  # TODO: Save sym
1440: 62 6f 6c 73 20 6f 66 20 61 6c 6c 20 70 72 6f 6a  bols of all proj
1450: 65 63 74 73 20 28 62 65 66 6f 72 65 20 74 68 65  ects (before the
1460: 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 20   revisions..    
1470: 23 20 69 6e 20 74 68 65 20 70 72 6f 6a 65 63 74  # in the project
1480: 73 2c 20 61 73 20 74 68 65 79 20 61 72 65 20 72  s, as they are r
1490: 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65  eferenced by the
14a0: 20 6d 65 74 61 0a 09 20 20 20 20 23 20 74 75 70   meta..    # tup
14b0: 6c 65 73 29 0a 09 20 20 20 20 53 61 76 65 4d 65  les)..    SaveMe
14c0: 74 61 0a 09 20 20 20 20 66 6f 72 65 61 63 68 20  ta..    foreach 
14d0: 70 20 5b 54 68 65 50 72 6f 6a 65 63 74 73 5d 20  p [TheProjects] 
14e0: 7b 20 24 70 20 70 65 72 73 69 73 74 72 65 76 20  { $p persistrev 
14f0: 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20  }..}..return.   
1500: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68   }..    typemeth
1510: 6f 64 20 6c 6f 61 64 73 79 6d 62 6f 6c 73 20 7b  od loadsymbols {
1520: 7d 20 7b 0a 09 73 74 61 74 65 20 74 72 61 6e 73  } {..state trans
1530: 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 23 20  action {..    # 
1540: 57 65 20 6c 6f 61 64 20 74 68 65 20 73 79 6d 62  We load the symb
1550: 6f 6c 20 69 64 73 20 61 74 20 6c 61 72 67 65 20  ol ids at large 
1560: 74 6f 20 68 61 76 65 20 74 68 65 20 6d 61 70 70  to have the mapp
1570: 69 6e 67 0a 09 20 20 20 20 23 20 72 69 67 68 74  ing..    # right
1580: 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
1590: 69 6e 67 2e 0a 0a 09 20 20 20 20 66 6f 72 65 61  ing....    forea
15a0: 63 68 20 7b 73 69 64 20 70 69 64 20 6e 61 6d 65  ch {sid pid name
15b0: 20 74 63 20 62 63 20 63 63 7d 20 5b 73 74 61 74   tc bc cc} [stat
15c0: 65 20 72 75 6e 20 7b 0a 09 09 53 45 4c 45 43 54  e run {...SELECT
15d0: 20 73 69 64 2c 20 70 69 64 2c 20 6e 61 6d 65 2c   sid, pid, name,
15e0: 20 74 61 67 5f 63 6f 75 6e 74 2c 20 62 72 61 6e   tag_count, bran
15f0: 63 68 5f 63 6f 75 6e 74 2c 20 63 6f 6d 6d 69 74  ch_count, commit
1600: 5f 63 6f 75 6e 74 0a 09 09 46 52 4f 4d 20 73 79  _count...FROM sy
1610: 6d 62 6f 6c 0a 09 09 3b 0a 09 20 20 20 20 7d 5d  mbol...;..    }]
1620: 20 7b 0a 09 09 24 6d 79 73 79 6d 62 6f 6c 20 6d   {...$mysymbol m
1630: 61 70 20 24 73 69 64 20 5b 6c 69 73 74 20 24 70  ap $sid [list $p
1640: 69 64 20 24 6e 61 6d 65 5d 0a 09 09 73 65 74 20  id $name]...set 
1650: 70 72 6f 6a 65 63 74 20 24 6d 79 70 72 6f 6a 6d  project $myprojm
1660: 61 70 28 24 70 69 64 29 0a 0a 09 09 73 65 74 20  ap($pid)....set 
1670: 66 6f 72 63 65 20 20 5b 24 70 72 6f 6a 65 63 74  force  [$project
1680: 20 68 61 73 73 79 6d 62 6f 6c 20 24 6e 61 6d 65   hassymbol $name
1690: 5d 0a 09 09 73 65 74 20 73 79 6d 62 6f 6c 20 5b  ]...set symbol [
16a0: 24 70 72 6f 6a 65 63 74 20 67 65 74 73 79 6d 62  $project getsymb
16b0: 6f 6c 20 24 6e 61 6d 65 5d 0a 0a 09 09 23 20 46  ol $name]....# F
16c0: 6f 72 63 69 6e 67 20 68 61 70 70 65 6e 73 20 6f  orcing happens o
16d0: 6e 6c 79 20 66 6f 72 20 74 68 65 20 74 72 75 6e  nly for the trun
16e0: 6b 73 2e 0a 09 09 69 66 20 7b 24 66 6f 72 63 65  ks....if {$force
16f0: 7d 20 7b 20 24 73 79 6d 62 6f 6c 20 66 6f 72 63  } { $symbol forc
1700: 65 69 64 20 24 73 69 64 20 7d 0a 0a 09 09 23 20  eid $sid }....# 
1710: 53 65 74 20 74 68 65 20 6c 6f 61 64 65 64 20 63  Set the loaded c
1720: 6f 75 6e 74 73 2e 0a 09 09 24 73 79 6d 62 6f 6c  ounts....$symbol
1730: 20 64 65 66 63 6f 75 6e 74 73 20 24 74 63 20 24   defcounts $tc $
1740: 62 63 20 24 63 63 0a 0a 09 09 23 20 4e 6f 74 65  bc $cc....# Note
1750: 3a 20 54 68 65 20 74 79 70 65 20 69 73 20 6e 65  : The type is ne
1760: 69 74 68 65 72 20 72 65 74 72 69 65 76 65 64 20  ither retrieved 
1770: 6e 6f 72 20 73 65 74 2c 20 66 6f 72 0a 09 09 23  nor set, for...#
1780: 20 74 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   this is used to
1790: 20 6c 6f 61 64 20 74 68 65 20 70 61 73 73 20 49   load the pass I
17a0: 49 20 64 61 74 61 2c 20 77 68 69 63 68 20 6d 65  I data, which me
17b0: 61 6e 73 0a 09 09 23 20 74 68 61 74 20 65 76 65  ans...# that eve
17c0: 72 79 74 68 69 6e 67 20 69 73 20 27 75 6e 64 65  rything is 'unde
17d0: 66 69 6e 65 64 27 20 61 74 20 74 68 69 73 20 70  fined' at this p
17e0: 6f 69 6e 74 20 61 6e 79 77 61 79 2e 0a 0a 09 09  oint anyway.....
17f0: 23 20 66 75 74 75 72 65 3a 20 24 73 79 6d 62 6f  # future: $symbo
1800: 6c 20 6c 6f 61 64 20 28 62 6c 6f 63 6b 65 72 73  l load (blockers
1810: 2c 20 61 6e 64 20 70 61 72 65 6e 74 73 29 0a 09  , and parents)..
1820: 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e      }..}..return
1830: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65  .    }..    type
1840: 6d 65 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65  method determine
1850: 73 79 6d 62 6f 6c 74 79 70 65 73 20 7b 7d 20 7b  symboltypes {} {
1860: 0a 09 66 6f 72 65 61 63 68 20 70 72 6f 6a 65 63  ..foreach projec
1870: 74 20 5b 54 68 65 50 72 6f 6a 65 63 74 73 5d 20  t [TheProjects] 
1880: 7b 0a 09 20 20 20 20 24 70 72 6f 6a 65 63 74 20  {..    $project 
1890: 64 65 74 65 72 6d 69 6e 65 73 79 6d 62 6f 6c 74  determinesymbolt
18a0: 79 70 65 73 0a 09 7d 0a 09 72 65 74 75 72 6e 0a  ypes..}..return.
18b0: 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d      }..    typem
18c0: 65 74 68 6f 64 20 70 72 6f 6a 65 63 74 6f 66 20  ethod projectof 
18d0: 7b 70 69 64 7d 20 7b 0a 09 72 65 74 75 72 6e 20  {pid} {..return 
18e0: 24 6d 79 70 72 6f 6a 6d 61 70 28 24 70 69 64 29  $myprojmap($pid)
18f0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20  .    }..    # # 
1900: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
1910: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
1920: 23 23 23 0a 20 20 20 20 23 23 20 53 74 61 74 65  ###.    ## State
1930: 0a 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62  ..    typevariab
1940: 6c 65 20 6d 79 62 61 73 65 20 20 20 20 20 20 20  le mybase       
1950: 20 20 20 20 7b 7d 20 3b 20 23 20 42 61 73 65 20      {} ; # Base 
1960: 70 61 74 68 20 74 6f 20 43 56 53 20 72 65 70 6f  path to CVS repo
1970: 73 69 74 6f 72 79 2e 0a 20 20 20 20 74 79 70 65  sitory..    type
1980: 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a 70  variable myprojp
1990: 61 74 68 73 20 20 20 20 20 20 7b 7d 20 3b 20 23  aths      {} ; #
19a0: 20 4c 69 73 74 20 6f 66 20 70 61 74 68 73 20 74   List of paths t
19b0: 6f 20 61 6c 6c 20 64 65 63 6c 61 72 65 64 0a 09  o all declared..
19c0: 09 09 09 20 20 20 20 20 20 20 23 20 70 72 6f 6a  ...       # proj
19d0: 65 63 74 73 2c 20 72 65 6c 61 74 69 76 65 20 74  ects, relative t
19e0: 6f 20 6d 79 62 61 73 65 2e 0a 20 20 20 20 74 79  o mybase..    ty
19f0: 70 65 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f  pevariable mypro
1a00: 6a 65 63 74 73 20 20 20 20 20 20 20 7b 7d 20 3b  jects       {} ;
1a10: 20 23 20 4c 69 73 74 20 6f 66 20 6f 62 6a 65 63   # List of objec
1a20: 74 73 20 66 6f 72 20 61 6c 6c 0a 09 09 09 09 20  ts for all..... 
1a30: 20 20 20 20 20 20 23 20 64 65 63 6c 61 72 65 64        # declared
1a40: 20 70 72 6f 6a 65 63 74 73 2e 0a 20 20 20 20 74   projects..    t
1a50: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 70 72  ypevariable mypr
1a60: 6f 6a 6d 61 70 20 2d 61 72 72 61 79 20 7b 7d 20  ojmap -array {} 
1a70: 3b 20 23 20 4d 61 70 20 66 72 6f 6d 20 70 72 6f  ; # Map from pro
1a80: 6a 65 63 74 20 69 64 73 20 74 6f 20 74 68 65 69  ject ids to thei
1a90: 72 0a 09 09 09 09 20 20 20 20 20 20 20 23 20 6f  r.....       # o
1aa0: 62 6a 65 63 74 73 2e 0a 20 20 20 20 74 79 70 65  bjects..    type
1ab0: 76 61 72 69 61 62 6c 65 20 6d 79 61 75 74 68 6f  variable myautho
1ac0: 72 20 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23  r         {} ; #
1ad0: 20 4e 61 6d 65 73 20 6f 66 20 61 6c 6c 20 61 75   Names of all au
1ae0: 74 68 6f 72 73 20 66 6f 75 6e 64 2c 0a 09 09 09  thors found,....
1af0: 09 20 20 20 20 20 20 20 23 20 6d 61 70 73 20 74  .       # maps t
1b00: 6f 20 74 68 65 69 72 20 69 64 73 2e 0a 20 20 20  o their ids..   
1b10: 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79   typevariable my
1b20: 63 6d 73 67 20 20 20 20 20 20 20 20 20 20 20 7b  cmsg           {
1b30: 7d 20 3b 20 23 20 41 6c 6c 20 63 6f 6d 6d 69 74  } ; # All commit
1b40: 20 6d 65 73 73 61 67 65 73 20 66 6f 75 6e 64 2c   messages found,
1b50: 0a 09 09 09 09 20 20 20 20 20 20 20 23 20 6d 61  .....       # ma
1b60: 70 73 20 74 6f 20 74 68 65 69 72 20 69 64 73 2e  ps to their ids.
1b70: 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c  .    typevariabl
1b80: 65 20 6d 79 6d 65 74 61 20 20 20 20 20 20 20 20  e mymeta        
1b90: 20 20 20 7b 7d 20 3b 20 23 20 4d 61 70 73 20 61     {} ; # Maps a
1ba0: 6c 6c 20 6d 65 74 61 20 64 61 74 61 20 74 75 70  ll meta data tup
1bb0: 6c 65 73 0a 09 09 09 09 20 20 20 20 20 20 20 23  les.....       #
1bc0: 20 28 70 72 6f 6a 65 63 74 2c 20 62 72 61 6e 63   (project, branc
1bd0: 68 2c 20 61 75 74 68 6f 72 2c 0a 09 09 09 09 20  h, author,..... 
1be0: 20 20 20 20 20 20 23 20 63 6d 65 73 73 61 67 65        # cmessage
1bf0: 29 20 74 6f 20 74 68 65 69 72 20 69 64 73 2e 0a  ) to their ids..
1c00: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65      typevariable
1c10: 20 6d 79 73 79 6d 62 6f 6c 20 20 20 20 20 20 20   mysymbol       
1c20: 20 20 7b 7d 20 3b 20 23 20 4d 61 70 20 73 79 6d    {} ; # Map sym
1c30: 62 6f 6c 73 20 69 64 65 6e 74 69 66 69 65 64 20  bols identified 
1c40: 62 79 0a 09 09 09 09 20 20 20 20 20 20 20 23 20  by.....       # 
1c50: 70 72 6f 6a 65 63 74 20 61 6e 64 20 6e 61 6d 65  project and name
1c60: 20 74 6f 20 74 68 65 69 72 0a 09 09 09 09 20 20   to their.....  
1c70: 20 20 20 20 20 23 20 69 64 2e 20 54 68 69 73 20       # id. This 
1c80: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e  information is n
1c90: 6f 74 0a 09 09 09 09 20 20 20 20 20 20 20 23 20  ot.....       # 
1ca0: 73 61 76 65 64 20 64 69 72 65 63 74 6c 79 2e 0a  saved directly..
1cb0: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65      typevariable
1cc0: 20 6d 79 74 72 75 6e 6b 6f 6e 6c 79 20 20 20 20   mytrunkonly    
1cd0: 20 20 30 20 20 3b 20 23 20 42 6f 6f 6c 65 61 6e    0  ; # Boolean
1ce0: 20 66 6c 61 67 2e 20 53 65 74 20 62 79 20 6f 70   flag. Set by op
1cf0: 74 69 6f 6e 0a 09 09 09 09 20 20 20 20 20 20 20  tion.....       
1d00: 23 20 70 72 6f 63 65 73 73 69 6e 67 20 77 68 65  # processing whe
1d10: 6e 20 74 68 65 20 75 73 65 72 0a 09 09 09 09 20  n the user..... 
1d20: 20 20 20 20 20 20 23 20 72 65 71 75 65 73 74 65        # requeste
1d30: 64 20 61 20 74 72 75 6e 6b 2d 6f 6e 6c 79 20 69  d a trunk-only i
1d40: 6d 70 6f 72 74 0a 0a 20 20 20 20 23 20 23 20 23  mport..    # # #
1d50: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
1d60: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
1d70: 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e  ##.    ## Intern
1d80: 61 6c 20 6d 65 74 68 6f 64 73 0a 0a 20 20 20 20  al methods..    
1d90: 74 79 70 65 63 6f 6e 73 74 72 75 63 74 6f 72 20  typeconstructor 
1da0: 7b 0a 09 73 65 74 20 6d 79 61 75 74 68 6f 72 20  {..set myauthor 
1db0: 5b 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 69 64 20 25  [vc::tools::id %
1dc0: 41 55 54 4f 25 5d 0a 09 73 65 74 20 6d 79 63 6d  AUTO%]..set mycm
1dd0: 73 67 20 20 20 5b 76 63 3a 3a 74 6f 6f 6c 73 3a  sg   [vc::tools:
1de0: 3a 69 64 20 25 41 55 54 4f 25 5d 0a 09 73 65 74  :id %AUTO%]..set
1df0: 20 6d 79 6d 65 74 61 20 20 20 5b 76 63 3a 3a 74   mymeta   [vc::t
1e00: 6f 6f 6c 73 3a 3a 69 64 20 25 41 55 54 4f 25 5d  ools::id %AUTO%]
1e10: 0a 09 73 65 74 20 6d 79 73 79 6d 62 6f 6c 20 5b  ..set mysymbol [
1e20: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 69 64 20 25 41  vc::tools::id %A
1e30: 55 54 4f 25 5d 0a 09 72 65 74 75 72 6e 0a 20 20  UTO%]..return.  
1e40: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 2e 42    }..    proc .B
1e50: 61 73 65 4c 65 6e 67 74 68 20 7b 70 7d 20 7b 0a  aseLength {p} {.
1e60: 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20  .return [string 
1e70: 6c 65 6e 67 74 68 20 5b 24 70 20 70 72 69 6e 74  length [$p print
1e80: 62 61 73 65 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20  base]].    }..  
1e90: 20 20 70 72 6f 63 20 2e 4e 46 69 6c 65 4c 65 6e    proc .NFileLen
1ea0: 67 74 68 20 7b 70 7d 20 7b 0a 09 72 65 74 75 72  gth {p} {..retur
1eb0: 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  n [string length
1ec0: 20 5b 6c 6c 65 6e 67 74 68 20 5b 24 70 20 66 69   [llength [$p fi
1ed0: 6c 65 6e 61 6d 65 73 5d 5d 5d 0a 20 20 20 20 7d  lenames]]].    }
1ee0: 0a 0a 20 20 20 20 70 72 6f 63 20 49 73 52 65 70  ..    proc IsRep
1ef0: 6f 73 69 74 6f 72 79 42 61 73 65 20 7b 70 61 74  ositoryBase {pat
1f00: 68 20 6d 76 7d 20 7b 0a 09 3a 3a 76 61 72 69 61  h mv} {..::varia
1f10: 62 6c 65 20 6d 79 62 61 73 65 0a 09 75 70 76 61  ble mybase..upva
1f20: 72 20 31 20 24 6d 76 20 6d 73 67 0a 09 69 66 20  r 1 $mv msg..if 
1f30: 7b 21 5b 66 69 6c 65 75 74 69 6c 3a 3a 74 65 73  {![fileutil::tes
1f40: 74 20 24 6d 79 62 61 73 65 20 20 20 20 20 20 20  t $mybase       
1f50: 20 20 65 64 72 20 6d 73 67 20 7b 43 56 53 20 52    edr msg {CVS R
1f60: 65 70 6f 73 69 74 6f 72 79 7d 5d 7d 20 20 20 20  epository}]}    
1f70: 20 20 7b 72 65 74 75 72 6e 20 30 7d 0a 09 69 66    {return 0}..if
1f80: 20 7b 21 5b 66 69 6c 65 75 74 69 6c 3a 3a 74 65   {![fileutil::te
1f90: 73 74 20 24 6d 79 62 61 73 65 2f 43 56 53 52 4f  st $mybase/CVSRO
1fa0: 4f 54 20 65 64 72 20 6d 73 67 20 7b 43 56 53 20  OT edr msg {CVS 
1fb0: 41 64 6d 69 6e 20 44 69 72 65 63 74 6f 72 79 7d  Admin Directory}
1fc0: 5d 7d 20 7b 72 65 74 75 72 6e 20 30 7d 0a 09 72  ]} {return 0}..r
1fd0: 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a 0a 20  eturn 1.    }.. 
1fe0: 20 20 20 70 72 6f 63 20 49 73 50 72 6f 6a 65 63     proc IsProjec
1ff0: 74 42 61 73 65 20 7b 70 61 74 68 20 61 64 6d 69  tBase {path admi
2000: 6e 20 6d 76 7d 20 7b 0a 09 75 70 76 61 72 20 31  n mv} {..upvar 1
2010: 20 24 6d 76 20 6d 73 67 0a 09 69 66 20 7b 21 5b   $mv msg..if {![
2020: 66 69 6c 65 75 74 69 6c 3a 3a 74 65 73 74 20 24  fileutil::test $
2030: 70 61 74 68 20 65 64 72 20 6d 73 67 20 50 72 6f  path edr msg Pro
2040: 6a 65 63 74 5d 7d 20 7b 72 65 74 75 72 6e 20 30  ject]} {return 0
2050: 7d 0a 09 69 66 20 7b 0a 09 20 20 20 20 28 24 70  }..if {..    ($p
2060: 61 74 68 20 65 71 20 24 61 64 6d 69 6e 29 20 7c  ath eq $admin) |
2070: 7c 0a 09 20 20 20 20 5b 73 74 72 69 6e 67 20 6d  |..    [string m
2080: 61 74 63 68 20 24 61 64 6d 69 6e 2f 2a 20 24 70  atch $admin/* $p
2090: 61 74 68 5d 0a 09 7d 20 7b 0a 09 20 20 20 20 73  ath]..} {..    s
20a0: 65 74 20 6d 73 67 20 22 41 64 6d 69 6e 69 73 74  et msg "Administ
20b0: 72 61 74 69 76 65 20 73 75 62 64 69 72 65 63 74  rative subdirect
20c0: 6f 72 79 20 24 70 61 74 68 20 63 61 6e 6e 6f 74  ory $path cannot
20d0: 20 62 65 20 61 20 70 72 6f 6a 65 63 74 22 0a 09   be a project"..
20e0: 20 20 20 20 72 65 74 75 72 6e 20 30 0a 09 7d 0a      return 0..}.
20f0: 09 72 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a  .return 1.    }.
2100: 0a 20 20 20 20 70 72 6f 63 20 54 68 65 50 72 6f  .    proc ThePro
2110: 6a 65 63 74 73 20 7b 7d 20 7b 0a 09 75 70 76 61  jects {} {..upva
2120: 72 20 31 20 74 79 70 65 20 74 79 70 65 0a 09 3a  r 1 type type..:
2130: 3a 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a  :variable myproj
2140: 65 63 74 73 0a 09 3a 3a 76 61 72 69 61 62 6c 65  ects..::variable
2150: 20 6d 79 70 72 6f 6a 70 61 74 68 73 0a 0a 09 69   myprojpaths...i
2160: 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6d 79  f {![llength $my
2170: 70 72 6f 6a 65 63 74 73 5d 7d 20 7b 0a 09 20 20  projects]} {..  
2180: 20 20 73 65 74 20 6d 79 70 72 6f 6a 65 63 74 73    set myprojects
2190: 20 5b 45 6d 70 74 79 50 72 6f 6a 65 63 74 73 20   [EmptyProjects 
21a0: 24 6d 79 70 72 6f 6a 70 61 74 68 73 5d 0a 09 7d  $myprojpaths]..}
21b0: 0a 09 72 65 74 75 72 6e 20 24 6d 79 70 72 6f 6a  ..return $myproj
21c0: 65 63 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ects.    }..    
21d0: 70 72 6f 63 20 45 6d 70 74 79 50 72 6f 6a 65 63  proc EmptyProjec
21e0: 74 73 20 7b 70 72 6f 6a 70 61 74 68 73 7d 20 7b  ts {projpaths} {
21f0: 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d 79 62  ..::variable myb
2200: 61 73 65 0a 09 75 70 76 61 72 20 31 20 74 79 70  ase..upvar 1 typ
2210: 65 20 74 79 70 65 0a 09 73 65 74 20 72 65 73 20  e type..set res 
2220: 7b 7d 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68  {}..if {[llength
2230: 20 24 70 72 6f 6a 70 61 74 68 73 5d 7d 20 7b 0a   $projpaths]} {.
2240: 09 20 20 20 20 66 6f 72 65 61 63 68 20 70 70 20  .    foreach pp 
2250: 24 70 72 6f 6a 70 61 74 68 73 20 7b 0a 09 09 6c  $projpaths {...l
2260: 61 70 70 65 6e 64 20 72 65 73 20 5b 70 72 6f 6a  append res [proj
2270: 65 63 74 20 25 41 55 54 4f 25 20 24 70 70 20 24  ect %AUTO% $pp $
2280: 74 79 70 65 5d 0a 09 20 20 20 20 7d 0a 09 7d 20  type]..    }..} 
2290: 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 20 42 61  else {..    # Ba
22a0: 73 65 20 69 73 20 74 68 65 20 73 69 6e 67 6c 65  se is the single
22b0: 20 70 72 6f 6a 65 63 74 2e 0a 09 20 20 20 20 6c   project...    l
22c0: 61 70 70 65 6e 64 20 72 65 73 20 5b 70 72 6f 6a  append res [proj
22d0: 65 63 74 20 25 41 55 54 4f 25 20 22 22 20 24 74  ect %AUTO% "" $t
22e0: 79 70 65 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 20  ype]..}..return 
22f0: 24 72 65 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20  $res.    }..    
2300: 70 72 6f 63 20 53 61 76 65 41 75 74 68 6f 72 73  proc SaveAuthors
2310: 20 7b 7d 20 7b 0a 09 3a 3a 76 61 72 69 61 62 6c   {} {..::variabl
2320: 65 20 6d 79 61 75 74 68 6f 72 0a 09 66 6f 72 65  e myauthor..fore
2330: 61 63 68 20 7b 6e 61 6d 65 20 61 69 64 7d 20 5b  ach {name aid} [
2340: 24 6d 79 61 75 74 68 6f 72 20 67 65 74 5d 20 7b  $myauthor get] {
2350: 0a 09 20 20 20 20 73 74 61 74 65 20 72 75 6e 20  ..    state run 
2360: 7b 0a 09 09 49 4e 53 45 52 54 20 49 4e 54 4f 20  {...INSERT INTO 
2370: 61 75 74 68 6f 72 20 28 20 61 69 64 2c 20 20 6e  author ( aid,  n
2380: 61 6d 65 29 0a 09 09 56 41 4c 55 45 53 20 20 20  ame)...VALUES   
2390: 20 20 20 20 20 20 20 20 20 20 28 24 61 69 64 2c            ($aid,
23a0: 20 24 6e 61 6d 65 29 3b 0a 09 20 20 20 20 7d 0a   $name);..    }.
23b0: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  .}..return.    }
23c0: 0a 0a 20 20 20 20 70 72 6f 63 20 53 61 76 65 43  ..    proc SaveC
23d0: 6f 6d 6d 69 74 4d 65 73 73 61 67 65 73 20 7b 7d  ommitMessages {}
23e0: 20 7b 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d   {..::variable m
23f0: 79 63 6d 73 67 0a 09 66 6f 72 65 61 63 68 20 7b  ycmsg..foreach {
2400: 74 65 78 74 20 63 69 64 7d 20 5b 24 6d 79 63 6d  text cid} [$mycm
2410: 73 67 20 67 65 74 5d 20 7b 0a 09 20 20 20 20 73  sg get] {..    s
2420: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53  tate run {...INS
2430: 45 52 54 20 49 4e 54 4f 20 63 6d 65 73 73 61 67  ERT INTO cmessag
2440: 65 20 28 20 63 69 64 2c 20 20 74 65 78 74 29 0a  e ( cid,  text).
2450: 09 09 56 41 4c 55 45 53 20 20 20 20 20 20 20 20  ..VALUES        
2460: 20 20 20 20 20 20 20 28 24 63 69 64 2c 20 24 74         ($cid, $t
2470: 65 78 74 29 3b 0a 09 20 20 20 20 7d 0a 09 7d 0a  ext);..    }..}.
2480: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
2490: 20 20 20 70 72 6f 63 20 53 61 76 65 4d 65 74 61     proc SaveMeta
24a0: 20 7b 7d 20 7b 0a 09 3a 3a 76 61 72 69 61 62 6c   {} {..::variabl
24b0: 65 20 6d 79 6d 65 74 61 0a 09 66 6f 72 65 61 63  e mymeta..foreac
24c0: 68 20 7b 6b 65 79 20 6d 69 64 7d 20 5b 24 6d 79  h {key mid} [$my
24d0: 6d 65 74 61 20 67 65 74 5d 20 7b 0a 09 20 20 20  meta get] {..   
24e0: 20 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73   struct::list as
24f0: 73 69 67 6e 20 24 6b 65 79 20 70 69 64 20 62 69  sign $key pid bi
2500: 64 20 61 69 64 20 63 69 64 0a 09 20 20 20 20 73  d aid cid..    s
2510: 74 61 74 65 20 72 75 6e 20 7b 0a 09 09 49 4e 53  tate run {...INS
2520: 45 52 54 20 49 4e 54 4f 20 6d 65 74 61 20 28 20  ERT INTO meta ( 
2530: 6d 69 64 2c 20 20 70 69 64 2c 20 20 62 69 64 2c  mid,  pid,  bid,
2540: 20 20 61 69 64 2c 20 20 63 69 64 29 0a 09 09 56    aid,  cid)...V
2550: 41 4c 55 45 53 20 20 20 20 20 20 20 20 20 20 20  ALUES           
2560: 28 24 6d 69 64 2c 20 24 70 69 64 2c 20 24 62 69  ($mid, $pid, $bi
2570: 64 2c 20 24 61 69 64 2c 20 24 63 69 64 29 3b 0a  d, $aid, $cid);.
2580: 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72  .    }..}..retur
2590: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23  n.    }..    # #
25a0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
25b0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
25c0: 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e 66  ####.    ## Conf
25d0: 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70  iguration..    p
25e0: 72 61 67 6d 61 20 2d 68 61 73 69 6e 73 74 61 6e  ragma -hasinstan
25f0: 63 65 73 20 20 20 6e 6f 20 3b 20 23 20 73 69 6e  ces   no ; # sin
2600: 67 6c 65 74 6f 6e 0a 20 20 20 20 70 72 61 67 6d  gleton.    pragm
2610: 61 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20  a -hastypeinfo  
2620: 20 20 6e 6f 20 3b 20 23 20 6e 6f 20 69 6e 74 72    no ; # no intr
2630: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72  ospection.    pr
2640: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 64 65 73  agma -hastypedes
2650: 74 72 6f 79 20 6e 6f 20 3b 20 23 20 69 6d 6d 6f  troy no ; # immo
2660: 72 74 61 6c 0a 0a 20 20 20 20 23 20 23 20 23 23  rtal..    # # ##
2670: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
2680: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
2690: 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65  #.}..namespace e
26a0: 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  val ::vc::fossil
26b0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a  ::import::cvs {.
26c0: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78      namespace ex
26d0: 70 6f 72 74 20 72 65 70 6f 73 69 74 6f 72 79 0a  port repository.
26e0: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76      namespace ev
26f0: 61 6c 20 72 65 70 6f 73 69 74 6f 72 79 20 7b 0a  al repository {.
2700: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
2710: 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  t ::vc::fossil::
2720: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f  import::cvs::pro
2730: 6a 65 63 74 0a 09 6e 61 6d 65 73 70 61 63 65 20  ject..namespace 
2740: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73  import ::vc::fos
2750: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
2760: 3a 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 61  ::state..namespa
2770: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
2780: 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09  tools::misc::*..
2790: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
27a0: 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 69 64   ::vc::tools::id
27b0: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  ..namespace impo
27c0: 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a  rt ::vc::tools::
27d0: 74 72 6f 75 62 6c 65 0a 09 6e 61 6d 65 73 70 61  trouble..namespa
27e0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a  ce import ::vc::
27f0: 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6c 6f 67 20  tools::log..log 
2800: 72 65 67 69 73 74 65 72 20 72 65 70 6f 73 69 74  register reposit
2810: 6f 72 79 0a 20 20 20 20 7d 0a 7d 0a 0a 23 20 23  ory.    }.}..# #
2820: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
2830: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
2840: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
2850: 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65  ##########.## Re
2860: 61 64 79 0a 0a 72 65 74 75 72 6e 0a              ady..return.