Artifact ef903ed6126bc9fd54bcaeb6b585bdf0c6683675:
File
tools/cvs2fossil/lib/c2f_repository.tcl
part of check-in
[67c24820c7]
- Reworked the whole handling of meta data (author, commit message, plus project/branch information), so that revisions now store only the meta id, everything else is stored centrally. All the relevant pieces (author, cmessage, symbols, projects) now also get numeric ids assigned early instead of when being saved to the state. Project ids are loaded from the state now too.
by
aku on
2007-10-14 01:58:07.
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 66 6f 73 73 require vc::foss
0430: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a il::import::cvs:
0440: 3a 70 72 6f 6a 65 63 74 20 3b 20 23 20 43 56 53 :project ; # CVS
0450: 20 70 72 6f 6a 65 63 74 73 2e 0a 70 61 63 6b 61 projects..packa
0460: 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 ge require vc::f
0470: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 ossil::import::c
0480: 76 73 3a 3a 73 74 61 74 65 20 20 20 3b 20 23 20 vs::state ; #
0490: 53 74 61 74 65 20 73 74 6f 72 61 67 65 2e 0a 70 State storage..p
04a0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 ackage require s
04b0: 74 72 75 63 74 3a 3a 6c 69 73 74 20 20 20 20 20 truct::list
04c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
04d0: 3b 20 23 20 4c 69 73 74 20 6f 70 65 72 61 74 69 ; # List operati
04e0: 6f 6e 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 ons..package req
04f0: 75 69 72 65 20 66 69 6c 65 75 74 69 6c 20 20 20 uire fileutil
0500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
0510: 20 20 20 20 20 20 3b 20 23 20 46 69 6c 65 20 6f ; # File o
0520: 70 65 72 61 74 69 6f 6e 73 2e 0a 0a 23 20 23 20 perations...# #
0530: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 ## ### ##### ###
0540: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 ##### ##########
0550: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 ### ############
0560: 23 23 23 23 23 23 23 23 23 0a 23 23 20 0a 0a 73 #########.## ..s
0570: 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63 3a 3a nit::type ::vc::
0580: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
0590: 63 76 73 3a 3a 72 65 70 6f 73 69 74 6f 72 79 20 cvs::repository
05a0: 7b 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 {. # # ## ###
05b0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 ##### ########
05c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 #############.
05d0: 20 20 23 23 20 50 75 62 6c 69 63 20 41 50 49 0a ## Public API.
05e0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
05f0: 62 61 73 65 20 7b 70 61 74 68 7d 20 7b 0a 09 23 base {path} {..#
0600: 20 43 6f 75 6c 64 20 62 65 20 63 68 65 63 6b 65 Could be checke
0610: 64 2c 20 65 61 73 69 65 72 20 74 6f 20 64 65 66 d, easier to def
0620: 65 72 20 74 6f 20 74 68 65 20 6f 76 65 72 61 6c er to the overal
0630: 6c 20 76 61 6c 69 64 61 74 69 6f 6e 2e 0a 09 73 l validation...s
0640: 65 74 20 6d 79 62 61 73 65 20 24 70 61 74 68 0a et mybase $path.
0650: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 .return. }..
0660: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 61 64 typemethod ad
0670: 64 20 7b 70 61 74 68 7d 20 7b 0a 09 23 20 4d 6f d {path} {..# Mo
0680: 73 74 20 74 68 69 6e 67 73 20 63 61 6e 6e 6f 74 st things cannot
0690: 20 62 65 20 63 68 65 63 6b 65 64 20 69 6d 6d 65 be checked imme
06a0: 64 69 61 74 65 6c 79 2c 20 61 73 20 74 68 65 20 diately, as the
06b0: 62 61 73 65 20 69 73 0a 09 23 20 6e 6f 74 20 6b base is..# not k
06c0: 6e 6f 77 6e 20 77 68 69 6c 65 20 70 72 6f 6a 65 nown while proje
06d0: 63 74 73 20 61 72 65 20 61 64 64 65 64 2e 20 57 cts are added. W
06e0: 65 20 63 61 6e 20 61 6e 64 20 64 6f 20 63 68 65 e can and do che
06f0: 63 6b 20 66 6f 72 0a 09 23 20 75 6e 69 71 75 65 ck for..# unique
0700: 6e 65 73 73 2e 20 57 65 20 61 63 63 65 70 74 20 ness. We accept
0710: 6d 75 6c 74 69 70 6c 65 20 6f 63 63 75 72 65 6e multiple occuren
0720: 63 65 73 20 6f 66 20 61 20 6e 61 6d 65 2c 20 61 ces of a name, a
0730: 6e 64 0a 09 23 20 74 72 65 61 74 20 74 68 65 6d nd..# treat them
0740: 20 61 73 20 61 20 73 69 6e 67 6c 65 20 70 72 6f as a single pro
0750: 6a 65 63 74 2e 0a 0a 09 69 66 20 7b 5b 6c 73 65 ject....if {[lse
0760: 61 72 63 68 20 2d 65 78 61 63 74 20 24 6d 79 70 arch -exact $myp
0770: 72 6f 6a 70 61 74 68 73 20 24 70 61 74 68 5d 20 rojpaths $path]
0780: 3e 3d 20 30 7d 20 72 65 74 75 72 6e 0a 09 6c 61 >= 0} return..la
0790: 70 70 65 6e 64 20 6d 79 70 72 6f 6a 70 61 74 68 ppend myprojpath
07a0: 73 20 24 70 61 74 68 0a 09 72 65 74 75 72 6e 0a s $path..return.
07b0: 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d }.. typem
07c0: 65 74 68 6f 64 20 70 72 6f 6a 65 63 74 73 20 7b ethod projects {
07d0: 7d 20 7b 0a 09 72 65 74 75 72 6e 20 5b 54 68 65 } {..return [The
07e0: 50 72 6f 6a 65 63 74 73 5d 0a 20 20 20 20 7d 0a Projects]. }.
07f0: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 . typemethod
0800: 62 61 73 65 3f 20 7b 7d 20 7b 20 72 65 74 75 72 base? {} { retur
0810: 6e 20 24 6d 79 62 61 73 65 20 7d 0a 0a 20 20 20 n $mybase }..
0820: 20 74 79 70 65 6d 65 74 68 6f 64 20 76 61 6c 69 typemethod vali
0830: 64 61 74 65 20 7b 7d 20 7b 0a 09 69 66 20 7b 21 date {} {..if {!
0840: 5b 49 73 52 65 70 6f 73 69 74 6f 72 79 42 61 73 [IsRepositoryBas
0850: 65 20 24 6d 79 62 61 73 65 20 6d 73 67 5d 7d 20 e $mybase msg]}
0860: 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 66 {.. trouble f
0870: 61 74 61 6c 20 24 6d 73 67 0a 09 20 20 20 20 23 atal $msg.. #
0880: 20 57 69 74 68 6f 75 74 20 61 20 67 6f 6f 64 20 Without a good
0890: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 63 base directory c
08a0: 68 65 63 6b 69 6e 67 20 61 6e 79 20 70 72 6f 6a hecking any proj
08b0: 65 63 74 73 20 69 73 0a 09 20 20 20 20 23 20 77 ects is.. # w
08c0: 61 73 74 65 64 20 74 69 6d 65 2c 20 73 6f 20 77 asted time, so w
08d0: 65 20 6c 65 61 76 65 20 6e 6f 77 2e 0a 09 20 20 e leave now...
08e0: 20 20 72 65 74 75 72 6e 0a 09 7d 0a 09 66 6f 72 return..}..for
08f0: 65 61 63 68 20 70 70 20 24 6d 79 70 72 6f 6a 70 each pp $myprojp
0900: 61 74 68 73 20 7b 0a 09 20 20 20 20 69 66 20 7b aths {.. if {
0910: 21 5b 49 73 50 72 6f 6a 65 63 74 42 61 73 65 20 ![IsProjectBase
0920: 24 6d 79 62 61 73 65 2f 24 70 70 20 24 6d 79 62 $mybase/$pp $myb
0930: 61 73 65 2f 43 56 53 52 4f 4f 54 20 6d 73 67 5d ase/CVSROOT msg]
0940: 7d 20 7b 0a 09 09 74 72 6f 75 62 6c 65 20 66 61 } {...trouble fa
0950: 74 61 6c 20 24 6d 73 67 0a 09 20 20 20 20 7d 0a tal $msg.. }.
0960: 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d .}..return. }
0970: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 .. typemethod
0980: 20 64 65 66 61 75 74 68 6f 72 20 7b 61 7d 20 7b defauthor {a} {
0990: 0a 09 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 ..if {![info exi
09a0: 73 74 73 20 6d 79 61 75 74 68 6f 72 28 24 61 29 sts myauthor($a)
09b0: 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d 79 ]} {.. set my
09c0: 61 75 74 68 6f 72 28 24 61 29 20 5b 69 6e 63 72 author($a) [incr
09d0: 20 6d 79 61 75 74 68 6f 72 63 6e 74 5d 0a 09 20 myauthorcnt]..
09e0: 20 20 20 6c 6f 67 20 77 72 69 74 65 20 36 20 72 log write 6 r
09f0: 65 70 6f 73 69 74 6f 72 79 20 22 61 75 74 68 6f epository "autho
0a00: 72 20 27 24 61 27 20 3d 20 20 24 6d 79 61 75 74 r '$a' = $myaut
0a10: 68 6f 72 28 24 61 29 22 0a 09 7d 0a 09 72 65 74 hor($a)"..}..ret
0a20: 75 72 6e 20 24 6d 79 61 75 74 68 6f 72 28 24 61 urn $myauthor($a
0a30: 29 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 ). }.. typ
0a40: 65 6d 65 74 68 6f 64 20 64 65 66 63 6d 65 73 73 emethod defcmess
0a50: 61 67 65 20 7b 63 6d 7d 20 7b 0a 09 69 66 20 7b age {cm} {..if {
0a60: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 ![info exists my
0a70: 63 6d 73 67 28 24 63 6d 29 5d 7d 20 7b 0a 09 20 cmsg($cm)]} {..
0a80: 20 20 20 73 65 74 20 6d 79 63 6d 73 67 28 24 63 set mycmsg($c
0a90: 6d 29 20 5b 69 6e 63 72 20 6d 79 63 6d 73 67 63 m) [incr mycmsgc
0aa0: 6e 74 5d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 nt].. log wri
0ab0: 74 65 20 36 20 72 65 70 6f 73 69 74 6f 72 79 20 te 6 repository
0ac0: 22 63 6d 65 73 73 61 67 65 20 27 24 63 6d 27 20 "cmessage '$cm'
0ad0: 3d 20 20 24 6d 79 63 6d 73 67 28 24 63 6d 29 22 = $mycmsg($cm)"
0ae0: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 63 ..}..return $myc
0af0: 6d 73 67 28 24 63 6d 29 0a 20 20 20 20 7d 0a 0a msg($cm). }..
0b00: 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 64 typemethod d
0b10: 65 66 73 79 6d 62 6f 6c 20 7b 70 69 64 20 6e 61 efsymbol {pid na
0b20: 6d 65 7d 20 7b 0a 09 73 65 74 20 6b 65 79 20 5b me} {..set key [
0b30: 6c 69 73 74 20 24 70 69 64 20 24 6e 61 6d 65 5d list $pid $name]
0b40: 0a 09 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 ..if {![info exi
0b50: 73 74 73 20 6d 79 73 79 6d 62 6f 6c 28 24 6b 65 sts mysymbol($ke
0b60: 79 29 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 y)]} {.. set
0b70: 6d 79 73 79 6d 62 6f 6c 28 24 6b 65 79 29 20 5b mysymbol($key) [
0b80: 69 6e 63 72 20 6d 79 73 79 6d 62 6f 6c 63 6e 74 incr mysymbolcnt
0b90: 5d 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 ].. log write
0ba0: 20 36 20 72 65 70 6f 73 69 74 6f 72 79 20 22 73 6 repository "s
0bb0: 79 6d 62 6f 6c 20 28 24 6b 65 79 29 20 3d 20 20 ymbol ($key) =
0bc0: 24 6d 79 73 79 6d 62 6f 6c 28 24 6b 65 79 29 22 $mysymbol($key)"
0bd0: 0a 09 7d 0a 09 72 65 74 75 72 6e 20 24 6d 79 73 ..}..return $mys
0be0: 79 6d 62 6f 6c 28 24 6b 65 79 29 0a 20 20 20 20 ymbol($key).
0bf0: 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f }.. typemetho
0c00: 64 20 64 65 66 6d 65 74 61 20 7b 70 69 64 20 62 d defmeta {pid b
0c10: 69 64 20 61 69 64 20 63 69 64 7d 20 7b 0a 09 73 id aid cid} {..s
0c20: 65 74 20 6b 65 79 20 5b 6c 69 73 74 20 24 70 69 et key [list $pi
0c30: 64 20 24 62 69 64 20 24 61 69 64 20 24 63 69 64 d $bid $aid $cid
0c40: 5d 0a 09 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 ]..if {![info ex
0c50: 69 73 74 73 20 6d 79 6d 65 74 61 28 24 6b 65 79 ists mymeta($key
0c60: 29 5d 7d 20 7b 0a 09 20 20 20 20 73 65 74 20 6d )]} {.. set m
0c70: 79 6d 65 74 61 28 24 6b 65 79 29 20 5b 69 6e 63 ymeta($key) [inc
0c80: 72 20 6d 79 6d 65 74 61 63 6e 74 5d 0a 09 20 20 r mymetacnt]..
0c90: 20 20 6c 6f 67 20 77 72 69 74 65 20 36 20 72 65 log write 6 re
0ca0: 70 6f 73 69 74 6f 72 79 20 22 6d 65 74 61 20 28 pository "meta (
0cb0: 24 6b 65 79 29 20 3d 20 20 24 6d 79 6d 65 74 61 $key) = $mymeta
0cc0: 28 24 6b 65 79 29 22 0a 09 7d 0a 09 72 65 74 75 ($key)"..}..retu
0cd0: 72 6e 20 24 6d 79 6d 65 74 61 28 24 6b 65 79 29 rn $mymeta($key)
0ce0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 70 61 . }.. # pa
0cf0: 73 73 20 49 20 72 65 73 75 6c 74 73 0a 20 20 20 ss I results.
0d00: 20 74 79 70 65 6d 65 74 68 6f 64 20 70 72 69 6e typemethod prin
0d10: 74 73 74 61 74 69 73 74 69 63 73 20 7b 7d 20 7b tstatistics {} {
0d20: 0a 09 73 65 74 20 70 72 6c 69 73 74 20 5b 54 68 ..set prlist [Th
0d30: 65 50 72 6f 6a 65 63 74 73 5d 0a 09 73 65 74 20 eProjects]..set
0d40: 6e 70 72 20 5b 6c 6c 65 6e 67 74 68 20 24 70 72 npr [llength $pr
0d50: 6c 69 73 74 5d 0a 0a 09 6c 6f 67 20 77 72 69 74 list]...log writ
0d60: 65 20 32 20 72 65 70 6f 73 69 74 6f 72 79 20 22 e 2 repository "
0d70: 53 63 61 6e 6e 65 64 20 5b 6e 73 70 20 24 6e 70 Scanned [nsp $np
0d80: 72 20 70 72 6f 6a 65 63 74 5d 22 0a 0a 09 69 66 r project]"...if
0d90: 20 7b 24 6e 70 72 20 3e 20 31 7d 20 7b 0a 09 20 {$npr > 1} {..
0da0: 20 20 20 73 65 74 20 20 62 6d 61 78 20 5b 6d 61 set bmax [ma
0db0: 78 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 x [struct::list
0dc0: 6d 61 70 20 24 70 72 6c 69 73 74 20 5b 6d 79 70 map $prlist [myp
0dd0: 72 6f 63 20 2e 42 61 73 65 4c 65 6e 67 74 68 5d roc .BaseLength]
0de0: 5d 5d 0a 09 20 20 20 20 69 6e 63 72 20 62 6d 61 ]].. incr bma
0df0: 78 20 32 0a 09 20 20 20 20 73 65 74 20 20 62 66 x 2.. set bf
0e00: 6d 74 20 25 2d 24 7b 62 6d 61 78 7d 73 0a 0a 09 mt %-${bmax}s...
0e10: 20 20 20 20 73 65 74 20 20 6e 6d 61 78 20 5b 6d set nmax [m
0e20: 61 78 20 5b 73 74 72 75 63 74 3a 3a 6c 69 73 74 ax [struct::list
0e30: 20 6d 61 70 20 24 70 72 6c 69 73 74 20 5b 6d 79 map $prlist [my
0e40: 70 72 6f 63 20 2e 4e 46 69 6c 65 4c 65 6e 67 74 proc .NFileLengt
0e50: 68 5d 5d 5d 0a 09 20 20 20 20 73 65 74 20 20 6e h]]].. set n
0e60: 66 6d 74 20 25 24 7b 6e 6d 61 78 7d 73 0a 09 7d fmt %${nmax}s..}
0e70: 20 65 6c 73 65 20 7b 0a 09 20 20 20 20 73 65 74 else {.. set
0e80: 20 62 66 6d 74 20 25 73 0a 09 20 20 20 20 73 65 bfmt %s.. se
0e90: 74 20 6e 66 6d 74 20 25 73 0a 09 7d 0a 0a 09 73 t nfmt %s..}...s
0ea0: 65 74 20 6b 65 65 70 20 7b 7d 0a 09 66 6f 72 65 et keep {}..fore
0eb0: 61 63 68 20 70 20 24 70 72 6c 69 73 74 20 7b 0a ach p $prlist {.
0ec0: 09 20 20 20 20 73 65 74 20 6e 66 69 6c 65 73 20 . set nfiles
0ed0: 5b 6c 6c 65 6e 67 74 68 20 5b 24 70 20 66 69 6c [llength [$p fil
0ee0: 65 6e 61 6d 65 73 5d 5d 0a 09 20 20 20 20 73 65 enames]].. se
0ef0: 74 20 6c 69 6e 65 20 22 50 72 6f 6a 65 63 74 20 t line "Project
0f00: 5b 66 6f 72 6d 61 74 20 24 62 66 6d 74 20 5c 22 [format $bfmt \"
0f10: 5b 24 70 20 70 72 69 6e 74 62 61 73 65 5d 5c 22 [$p printbase]\"
0f20: 5d 20 3a 20 5b 66 6f 72 6d 61 74 20 24 6e 66 6d ] : [format $nfm
0f30: 74 20 24 6e 66 69 6c 65 73 5d 20 5b 73 70 20 24 t $nfiles] [sp $
0f40: 6e 66 69 6c 65 73 20 66 69 6c 65 5d 22 0a 09 20 nfiles file]"..
0f50: 20 20 20 69 66 20 7b 24 6e 66 69 6c 65 73 20 3c if {$nfiles <
0f60: 20 31 7d 20 7b 0a 09 09 61 70 70 65 6e 64 20 6c 1} {...append l
0f70: 69 6e 65 20 22 2c 20 64 72 6f 70 70 65 64 22 0a ine ", dropped".
0f80: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09 . } else {...
0f90: 6c 61 70 70 65 6e 64 20 6b 65 65 70 20 24 70 0a lappend keep $p.
0fa0: 09 20 20 20 20 7d 0a 09 20 20 20 20 6c 6f 67 20 . }.. log
0fb0: 77 72 69 74 65 20 32 20 72 65 70 6f 73 69 74 6f write 2 reposito
0fc0: 72 79 20 24 6c 69 6e 65 0a 09 7d 0a 0a 09 69 66 ry $line..}...if
0fd0: 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 65 {![llength $kee
0fe0: 70 5d 7d 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 p]} {.. troub
0ff0: 6c 65 20 77 61 72 6e 20 22 44 72 6f 70 70 65 64 le warn "Dropped
1000: 20 61 6c 6c 20 70 72 6f 6a 65 63 74 73 22 0a 09 all projects"..
1010: 7d 20 65 6c 73 65 69 66 20 7b 24 6e 70 72 20 3d } elseif {$npr =
1020: 3d 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 65 70 = [llength $keep
1030: 5d 7d 20 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 ]} {.. log wr
1040: 69 74 65 20 32 20 72 65 70 6f 73 69 74 6f 72 79 ite 2 repository
1050: 20 22 4b 65 65 70 69 6e 67 20 61 6c 6c 20 70 72 "Keeping all pr
1060: 6f 6a 65 63 74 73 22 0a 09 7d 20 65 6c 73 65 20 ojects"..} else
1070: 7b 0a 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 {.. log write
1080: 20 32 20 72 65 70 6f 73 69 74 6f 72 79 20 22 4b 2 repository "K
1090: 65 65 70 69 6e 67 20 5b 6e 73 70 20 5b 6c 6c 65 eeping [nsp [lle
10a0: 6e 67 74 68 20 24 6b 65 65 70 5d 20 70 72 6f 6a ngth $keep] proj
10b0: 65 63 74 5d 22 0a 09 20 20 20 20 74 72 6f 75 62 ect]".. troub
10c0: 6c 65 20 77 61 72 6e 20 22 44 72 6f 70 70 65 64 le warn "Dropped
10d0: 20 5b 6e 73 70 20 5b 65 78 70 72 20 7b 24 6e 70 [nsp [expr {$np
10e0: 72 20 2d 20 5b 6c 6c 65 6e 67 74 68 20 24 6b 65 r - [llength $ke
10f0: 65 70 5d 7d 5d 20 7b 65 6d 70 74 79 20 70 72 6f ep]}] {empty pro
1100: 6a 65 63 74 7d 5d 22 0a 09 7d 0a 0a 09 23 20 4b ject}]"..}...# K
1110: 65 65 70 20 72 65 64 75 63 65 64 20 73 65 74 20 eep reduced set
1120: 6f 66 20 70 72 6f 6a 65 63 74 73 2e 0a 09 73 65 of projects...se
1130: 74 20 70 72 6f 6a 65 63 74 73 20 24 6b 65 65 70 t projects $keep
1140: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a ..return. }..
1150: 20 20 20 20 23 20 70 61 73 73 20 49 20 70 65 72 # pass I per
1160: 73 69 73 74 65 6e 63 65 0a 20 20 20 20 74 79 70 sistence. typ
1170: 65 6d 65 74 68 6f 64 20 70 65 72 73 69 73 74 20 emethod persist
1180: 7b 7d 20 7b 0a 09 73 74 61 74 65 20 74 72 61 6e {} {..state tran
1190: 73 61 63 74 69 6f 6e 20 7b 0a 09 20 20 20 20 66 saction {.. f
11a0: 6f 72 65 61 63 68 20 70 20 5b 54 68 65 50 72 6f oreach p [ThePro
11b0: 6a 65 63 74 73 5d 20 7b 20 24 70 20 70 65 72 73 jects] { $p pers
11c0: 69 73 74 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e ist }..}..return
11d0: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 . }.. type
11e0: 6d 65 74 68 6f 64 20 6c 6f 61 64 20 7b 7d 20 7b method load {} {
11f0: 0a 09 61 72 72 61 79 20 73 65 74 20 70 72 20 7b ..array set pr {
1200: 7d 0a 09 73 74 61 74 65 20 74 72 61 6e 73 61 63 }..state transac
1210: 74 69 6f 6e 20 7b 0a 09 20 20 20 20 66 6f 72 65 tion {.. fore
1220: 61 63 68 20 20 20 7b 70 69 64 20 20 6e 61 6d 65 ach {pid name
1230: 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 7b 0a 09 } [state run {..
1240: 09 53 45 4c 45 43 54 20 70 69 64 2c 20 6e 61 6d .SELECT pid, nam
1250: 65 20 46 52 4f 4d 20 70 72 6f 6a 65 63 74 20 3b e FROM project ;
1260: 0a 09 20 20 20 20 7d 5d 20 7b 0a 09 09 6c 61 70 .. }] {...lap
1270: 70 65 6e 64 20 6d 79 70 72 6f 6a 70 61 74 68 73 pend myprojpaths
1280: 20 24 6e 61 6d 65 0a 09 09 6c 61 70 70 65 6e 64 $name...lappend
1290: 20 6d 79 70 72 6f 6a 65 63 74 73 20 5b 73 65 74 myprojects [set
12a0: 20 70 72 28 24 70 69 64 29 20 5b 70 72 6f 6a 65 pr($pid) [proje
12b0: 63 74 20 25 41 55 54 4f 25 20 24 6e 61 6d 65 20 ct %AUTO% $name
12c0: 24 74 79 70 65 5d 5d 0a 09 09 24 70 72 28 24 70 $type]]...$pr($p
12d0: 69 64 29 20 73 65 74 69 64 20 24 70 69 64 0a 09 id) setid $pid..
12e0: 20 20 20 20 7d 0a 09 20 20 20 20 66 6f 72 65 61 }.. forea
12f0: 63 68 20 20 20 7b 66 69 64 20 20 70 69 64 20 20 ch {fid pid
1300: 6e 61 6d 65 20 20 76 69 73 69 62 6c 65 20 20 65 name visible e
1310: 78 65 63 7d 20 5b 73 74 61 74 65 20 72 75 6e 20 xec} [state run
1320: 7b 0a 09 09 53 45 4c 45 43 54 20 66 69 64 2c 20 {...SELECT fid,
1330: 70 69 64 2c 20 6e 61 6d 65 2c 20 76 69 73 69 62 pid, name, visib
1340: 6c 65 2c 20 65 78 65 63 20 46 52 4f 4d 20 66 69 le, exec FROM fi
1350: 6c 65 20 3b 0a 09 20 20 20 20 7d 5d 20 7b 0a 09 le ;.. }] {..
1360: 09 24 70 72 28 24 70 69 64 29 20 61 64 64 66 69 .$pr($pid) addfi
1370: 6c 65 20 24 6e 61 6d 65 20 24 76 69 73 69 62 6c le $name $visibl
1380: 65 20 24 65 78 65 63 0a 09 20 20 20 20 7d 0a 09 e $exec.. }..
1390: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
13a0: 0a 20 20 20 20 23 20 70 61 73 73 20 49 49 20 72 . # pass II r
13b0: 65 73 75 6c 74 73 0a 20 20 20 20 74 79 70 65 6d esults. typem
13c0: 65 74 68 6f 64 20 70 72 69 6e 74 72 65 76 73 74 ethod printrevst
13d0: 61 74 69 73 74 69 63 73 20 7b 7d 20 7b 0a 09 6c atistics {} {..l
13e0: 6f 67 20 77 72 69 74 65 20 32 20 72 65 70 6f 73 og write 2 repos
13f0: 69 74 6f 72 79 20 22 53 63 61 6e 6e 65 64 20 2e itory "Scanned .
1400: 2e 2e 22 0a 09 23 20 6e 75 6d 62 65 72 20 6f 66 .."..# number of
1410: 20 72 65 76 69 73 69 6f 6e 73 2c 20 73 79 6d 62 revisions, symb
1420: 6f 6c 73 2c 20 72 65 70 6f 73 69 74 6f 72 79 20 ols, repository
1430: 77 69 64 65 2c 20 70 65 72 20 70 72 6f 6a 65 63 wide, per projec
1440: 74 20 2e 2e 2e 0a 09 72 65 74 75 72 6e 0a 20 20 t .....return.
1450: 20 20 7d 0a 0a 20 20 20 20 23 20 70 61 73 73 20 }.. # pass
1460: 49 49 20 70 65 72 73 69 73 74 65 6e 63 65 0a 20 II persistence.
1470: 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20 70 65 typemethod pe
1480: 72 73 69 73 74 72 65 76 20 7b 7d 20 7b 0a 09 73 rsistrev {} {..s
1490: 74 61 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e tate transaction
14a0: 20 7b 0a 09 20 20 20 20 53 61 76 65 41 75 74 68 {.. SaveAuth
14b0: 6f 72 73 0a 09 20 20 20 20 53 61 76 65 43 6f 6d ors.. SaveCom
14c0: 6d 69 74 4d 65 73 73 61 67 65 73 0a 09 20 20 20 mitMessages..
14d0: 20 23 20 54 4f 44 4f 3a 20 53 61 76 65 20 73 79 # TODO: Save sy
14e0: 6d 62 6f 6c 73 20 6f 66 20 61 6c 6c 20 70 72 6f mbols of all pro
14f0: 6a 65 63 74 73 20 28 62 65 66 6f 72 65 20 74 68 jects (before th
1500: 65 20 72 65 76 69 73 69 6f 6e 73 0a 09 20 20 20 e revisions..
1510: 20 23 20 69 6e 20 74 68 65 20 70 72 6f 6a 65 63 # in the projec
1520: 74 73 2c 20 61 73 20 74 68 65 79 20 61 72 65 20 ts, as they are
1530: 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 referenced by th
1540: 65 20 6d 65 74 61 0a 09 20 20 20 20 23 20 74 75 e meta.. # tu
1550: 70 6c 65 73 29 0a 09 20 20 20 20 53 61 76 65 4d ples).. SaveM
1560: 65 74 61 0a 09 20 20 20 20 66 6f 72 65 61 63 68 eta.. foreach
1570: 20 70 20 5b 54 68 65 50 72 6f 6a 65 63 74 73 5d p [TheProjects]
1580: 20 7b 20 24 70 20 70 65 72 73 69 73 74 72 65 76 { $p persistrev
1590: 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20 20 }..}..return.
15a0: 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 }.. # # ##
15b0: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 ### ##### ######
15c0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 ## #############
15d0: 0a 20 20 20 20 23 23 20 53 74 61 74 65 0a 0a 20 . ## State..
15e0: 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 typevariable
15f0: 6d 79 62 61 73 65 20 20 20 20 20 20 20 20 20 20 mybase
1600: 7b 7d 20 3b 20 23 20 42 61 73 65 20 70 61 74 68 {} ; # Base path
1610: 20 74 6f 20 43 56 53 20 72 65 70 6f 73 69 74 6f to CVS reposito
1620: 72 79 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 ry.. typevari
1630: 61 62 6c 65 20 6d 79 70 72 6f 6a 70 61 74 68 73 able myprojpaths
1640: 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 74 {} ; # List
1650: 20 6f 66 20 70 61 74 68 73 20 74 6f 20 61 6c 6c of paths to all
1660: 20 64 65 63 6c 61 72 65 64 0a 09 09 09 09 20 20 declared.....
1670: 20 20 20 20 23 20 70 72 6f 6a 65 63 74 73 2c 20 # projects,
1680: 72 65 6c 61 74 69 76 65 20 74 6f 20 6d 79 62 61 relative to myba
1690: 73 65 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 se.. typevari
16a0: 61 62 6c 65 20 6d 79 70 72 6f 6a 65 63 74 73 20 able myprojects
16b0: 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 74 {} ; # List
16c0: 20 6f 66 20 6f 62 6a 65 63 74 73 20 66 6f 72 20 of objects for
16d0: 61 6c 6c 0a 09 09 09 09 20 20 20 20 20 20 23 20 all..... #
16e0: 64 65 63 6c 61 72 65 64 20 70 72 6f 6a 65 63 74 declared project
16f0: 73 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 s.. typevaria
1700: 62 6c 65 20 6d 79 61 75 74 68 6f 72 20 2d 61 72 ble myauthor -ar
1710: 72 61 79 20 7b 7d 20 3b 20 23 20 4e 61 6d 65 73 ray {} ; # Names
1720: 20 6f 66 20 61 6c 6c 20 61 75 74 68 6f 72 73 20 of all authors
1730: 66 6f 75 6e 64 2c 0a 09 09 09 09 20 20 20 20 20 found,.....
1740: 20 23 20 6d 61 70 73 20 74 6f 20 74 68 65 69 72 # maps to their
1750: 20 69 64 73 2e 0a 20 20 20 20 74 79 70 65 76 61 ids.. typeva
1760: 72 69 61 62 6c 65 20 6d 79 61 75 74 68 6f 72 63 riable myauthorc
1770: 6e 74 20 20 20 20 20 30 20 20 3b 20 23 20 43 6f nt 0 ; # Co
1780: 75 6e 74 65 72 20 66 6f 72 20 61 75 74 68 6f 72 unter for author
1790: 20 69 64 73 2e 0a 20 20 20 20 74 79 70 65 76 61 ids.. typeva
17a0: 72 69 61 62 6c 65 20 6d 79 63 6d 73 67 20 20 20 riable mycmsg
17b0: 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 41 6c -array {} ; # Al
17c0: 6c 20 63 6f 6d 6d 69 74 20 6d 65 73 73 61 67 65 l commit message
17d0: 73 20 66 6f 75 6e 64 2c 0a 09 09 09 09 20 20 20 s found,.....
17e0: 20 20 20 23 20 6d 61 70 73 20 74 6f 20 74 68 65 # maps to the
17f0: 69 72 20 69 64 73 2e 0a 20 20 20 20 74 79 70 65 ir ids.. type
1800: 76 61 72 69 61 62 6c 65 20 6d 79 63 6d 73 67 63 variable mycmsgc
1810: 6e 74 20 20 20 20 20 20 20 30 20 20 3b 20 23 20 nt 0 ; #
1820: 43 6f 75 6e 74 65 72 20 66 6f 72 20 6d 65 73 73 Counter for mess
1830: 61 67 65 20 69 64 73 2e 0a 20 20 20 20 74 79 70 age ids.. typ
1840: 65 76 61 72 69 61 62 6c 65 20 6d 79 6d 65 74 61 evariable mymeta
1850: 20 20 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 -array {} ; #
1860: 20 4d 61 70 73 20 61 6c 6c 20 6d 65 74 61 20 64 Maps all meta d
1870: 61 74 61 20 74 75 70 6c 65 73 0a 09 09 09 09 20 ata tuples.....
1880: 20 20 20 20 20 23 20 28 70 72 6f 6a 65 63 74 2c # (project,
1890: 20 62 72 61 6e 63 68 2c 20 61 75 74 68 6f 72 2c branch, author,
18a0: 0a 09 09 09 09 20 20 20 20 20 20 23 20 63 6d 65 ..... # cme
18b0: 73 73 61 67 65 29 20 74 6f 20 74 68 65 69 72 20 ssage) to their
18c0: 69 64 73 2e 0a 20 20 20 20 74 79 70 65 76 61 72 ids.. typevar
18d0: 69 61 62 6c 65 20 6d 79 6d 65 74 61 63 6e 74 20 iable mymetacnt
18e0: 20 20 20 20 20 20 30 20 20 3b 20 23 20 43 6f 75 0 ; # Cou
18f0: 6e 74 65 72 20 66 6f 72 20 6d 65 74 61 20 69 64 nter for meta id
1900: 73 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 s.. typevaria
1910: 62 6c 65 20 6d 79 73 79 6d 62 6f 6c 20 2d 61 72 ble mysymbol -ar
1920: 72 61 79 20 7b 7d 20 3b 20 23 20 4d 61 70 20 73 ray {} ; # Map s
1930: 79 6d 62 6f 6c 73 20 69 64 65 6e 74 69 66 69 65 ymbols identifie
1940: 64 20 62 79 0a 09 09 09 09 20 20 20 20 20 20 23 d by..... #
1950: 20 70 72 6f 6a 65 63 74 20 61 6e 64 20 6e 61 6d project and nam
1960: 65 20 74 6f 20 74 68 65 69 72 0a 09 09 09 09 20 e to their.....
1970: 20 20 20 20 20 23 20 69 64 2e 20 54 68 69 73 20 # id. This
1980: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6e information is n
1990: 6f 74 0a 09 09 09 09 20 20 20 20 20 20 23 20 73 ot..... # s
19a0: 61 76 65 64 20 64 69 72 65 63 74 6c 79 2e 0a 20 aved directly..
19b0: 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 typevariable
19c0: 6d 79 73 79 6d 62 6f 6c 63 6e 74 20 20 20 20 20 mysymbolcnt
19d0: 30 20 20 3b 20 23 20 43 6f 75 6e 74 65 72 20 66 0 ; # Counter f
19e0: 6f 72 20 73 79 6d 62 6f 6c 20 69 64 73 2e 0a 0a or symbol ids...
19f0: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 # # ## ### #
1a00: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 #### ######## ##
1a10: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 ###########.
1a20: 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68 ## Internal meth
1a30: 6f 64 73 0a 0a 20 20 20 20 70 72 6f 63 20 2e 42 ods.. proc .B
1a40: 61 73 65 4c 65 6e 67 74 68 20 7b 70 7d 20 7b 0a aseLength {p} {.
1a50: 09 72 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 .return [string
1a60: 6c 65 6e 67 74 68 20 5b 24 70 20 70 72 69 6e 74 length [$p print
1a70: 62 61 73 65 5d 5d 0a 20 20 20 20 7d 0a 0a 20 20 base]]. }..
1a80: 20 20 70 72 6f 63 20 2e 4e 46 69 6c 65 4c 65 6e proc .NFileLen
1a90: 67 74 68 20 7b 70 7d 20 7b 0a 09 72 65 74 75 72 gth {p} {..retur
1aa0: 6e 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 n [string length
1ab0: 20 5b 6c 6c 65 6e 67 74 68 20 5b 24 70 20 66 69 [llength [$p fi
1ac0: 6c 65 6e 61 6d 65 73 5d 5d 5d 0a 20 20 20 20 7d lenames]]]. }
1ad0: 0a 0a 20 20 20 20 70 72 6f 63 20 49 73 52 65 70 .. proc IsRep
1ae0: 6f 73 69 74 6f 72 79 42 61 73 65 20 7b 70 61 74 ositoryBase {pat
1af0: 68 20 6d 76 7d 20 7b 0a 09 3a 3a 76 61 72 69 61 h mv} {..::varia
1b00: 62 6c 65 20 6d 79 62 61 73 65 0a 09 75 70 76 61 ble mybase..upva
1b10: 72 20 31 20 24 6d 76 20 6d 73 67 0a 09 69 66 20 r 1 $mv msg..if
1b20: 7b 21 5b 66 69 6c 65 75 74 69 6c 3a 3a 74 65 73 {![fileutil::tes
1b30: 74 20 24 6d 79 62 61 73 65 20 20 20 20 20 20 20 t $mybase
1b40: 20 20 65 64 72 20 6d 73 67 20 7b 43 56 53 20 52 edr msg {CVS R
1b50: 65 70 6f 73 69 74 6f 72 79 7d 5d 7d 20 20 20 20 epository}]}
1b60: 20 20 7b 72 65 74 75 72 6e 20 30 7d 0a 09 69 66 {return 0}..if
1b70: 20 7b 21 5b 66 69 6c 65 75 74 69 6c 3a 3a 74 65 {![fileutil::te
1b80: 73 74 20 24 6d 79 62 61 73 65 2f 43 56 53 52 4f st $mybase/CVSRO
1b90: 4f 54 20 65 64 72 20 6d 73 67 20 7b 43 56 53 20 OT edr msg {CVS
1ba0: 41 64 6d 69 6e 20 44 69 72 65 63 74 6f 72 79 7d Admin Directory}
1bb0: 5d 7d 20 7b 72 65 74 75 72 6e 20 30 7d 0a 09 72 ]} {return 0}..r
1bc0: 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a 0a 20 eturn 1. }..
1bd0: 20 20 20 70 72 6f 63 20 49 73 50 72 6f 6a 65 63 proc IsProjec
1be0: 74 42 61 73 65 20 7b 70 61 74 68 20 61 64 6d 69 tBase {path admi
1bf0: 6e 20 6d 76 7d 20 7b 0a 09 75 70 76 61 72 20 31 n mv} {..upvar 1
1c00: 20 24 6d 76 20 6d 73 67 0a 09 69 66 20 7b 21 5b $mv msg..if {![
1c10: 66 69 6c 65 75 74 69 6c 3a 3a 74 65 73 74 20 24 fileutil::test $
1c20: 70 61 74 68 20 65 64 72 20 6d 73 67 20 50 72 6f path edr msg Pro
1c30: 6a 65 63 74 5d 7d 20 7b 72 65 74 75 72 6e 20 30 ject]} {return 0
1c40: 7d 0a 09 69 66 20 7b 0a 09 20 20 20 20 28 24 70 }..if {.. ($p
1c50: 61 74 68 20 65 71 20 24 61 64 6d 69 6e 29 20 7c ath eq $admin) |
1c60: 7c 0a 09 20 20 20 20 5b 73 74 72 69 6e 67 20 6d |.. [string m
1c70: 61 74 63 68 20 24 61 64 6d 69 6e 2f 2a 20 24 70 atch $admin/* $p
1c80: 61 74 68 5d 0a 09 7d 20 7b 0a 09 20 20 20 20 73 ath]..} {.. s
1c90: 65 74 20 6d 73 67 20 22 41 64 6d 69 6e 69 73 74 et msg "Administ
1ca0: 72 61 74 69 76 65 20 73 75 62 64 69 72 65 63 74 rative subdirect
1cb0: 6f 72 79 20 24 70 61 74 68 20 63 61 6e 6e 6f 74 ory $path cannot
1cc0: 20 62 65 20 61 20 70 72 6f 6a 65 63 74 22 0a 09 be a project"..
1cd0: 20 20 20 20 72 65 74 75 72 6e 20 30 0a 09 7d 0a return 0..}.
1ce0: 09 72 65 74 75 72 6e 20 31 0a 20 20 20 20 7d 0a .return 1. }.
1cf0: 0a 20 20 20 20 70 72 6f 63 20 54 68 65 50 72 6f . proc ThePro
1d00: 6a 65 63 74 73 20 7b 7d 20 7b 0a 09 75 70 76 61 jects {} {..upva
1d10: 72 20 31 20 74 79 70 65 20 74 79 70 65 0a 09 3a r 1 type type..:
1d20: 3a 76 61 72 69 61 62 6c 65 20 6d 79 70 72 6f 6a :variable myproj
1d30: 65 63 74 73 0a 09 3a 3a 76 61 72 69 61 62 6c 65 ects..::variable
1d40: 20 6d 79 70 72 6f 6a 70 61 74 68 73 0a 0a 09 69 myprojpaths...i
1d50: 66 20 7b 21 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 f {![llength $my
1d60: 70 72 6f 6a 65 63 74 73 5d 7d 20 7b 0a 09 20 20 projects]} {..
1d70: 20 20 73 65 74 20 6d 79 70 72 6f 6a 65 63 74 73 set myprojects
1d80: 20 5b 45 6d 70 74 79 50 72 6f 6a 65 63 74 73 20 [EmptyProjects
1d90: 24 6d 79 70 72 6f 6a 70 61 74 68 73 5d 0a 09 7d $myprojpaths]..}
1da0: 0a 09 72 65 74 75 72 6e 20 24 6d 79 70 72 6f 6a ..return $myproj
1db0: 65 63 74 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 ects. }..
1dc0: 70 72 6f 63 20 45 6d 70 74 79 50 72 6f 6a 65 63 proc EmptyProjec
1dd0: 74 73 20 7b 70 72 6f 6a 70 61 74 68 73 7d 20 7b ts {projpaths} {
1de0: 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d 79 62 ..::variable myb
1df0: 61 73 65 0a 09 75 70 76 61 72 20 31 20 74 79 70 ase..upvar 1 typ
1e00: 65 20 74 79 70 65 0a 09 73 65 74 20 72 65 73 20 e type..set res
1e10: 7b 7d 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 {}..if {[llength
1e20: 20 24 70 72 6f 6a 70 61 74 68 73 5d 7d 20 7b 0a $projpaths]} {.
1e30: 09 20 20 20 20 66 6f 72 65 61 63 68 20 70 70 20 . foreach pp
1e40: 24 70 72 6f 6a 70 61 74 68 73 20 7b 0a 09 09 6c $projpaths {...l
1e50: 61 70 70 65 6e 64 20 72 65 73 20 5b 70 72 6f 6a append res [proj
1e60: 65 63 74 20 25 41 55 54 4f 25 20 24 70 70 20 24 ect %AUTO% $pp $
1e70: 74 79 70 65 5d 0a 09 20 20 20 20 7d 0a 09 7d 20 type].. }..}
1e80: 65 6c 73 65 20 7b 0a 09 20 20 20 20 23 20 42 61 else {.. # Ba
1e90: 73 65 20 69 73 20 74 68 65 20 73 69 6e 67 6c 65 se is the single
1ea0: 20 70 72 6f 6a 65 63 74 2e 0a 09 20 20 20 20 6c project... l
1eb0: 61 70 70 65 6e 64 20 72 65 73 20 5b 70 72 6f 6a append res [proj
1ec0: 65 63 74 20 25 41 55 54 4f 25 20 22 22 20 24 74 ect %AUTO% "" $t
1ed0: 79 70 65 5d 0a 09 7d 0a 09 72 65 74 75 72 6e 20 ype]..}..return
1ee0: 24 72 65 73 0a 20 20 20 20 7d 0a 0a 20 20 20 20 $res. }..
1ef0: 70 72 6f 63 20 53 61 76 65 41 75 74 68 6f 72 73 proc SaveAuthors
1f00: 20 7b 7d 20 7b 0a 09 3a 3a 76 61 72 69 61 62 6c {} {..::variabl
1f10: 65 20 6d 79 61 75 74 68 6f 72 0a 09 66 6f 72 65 e myauthor..fore
1f20: 61 63 68 20 7b 6e 61 6d 65 20 61 69 64 7d 20 5b ach {name aid} [
1f30: 61 72 72 61 79 20 67 65 74 20 6d 79 61 75 74 68 array get myauth
1f40: 6f 72 5d 20 7b 0a 09 20 20 20 20 73 74 61 74 65 or] {.. state
1f50: 20 72 75 6e 20 7b 0a 09 09 49 4e 53 45 52 54 20 run {...INSERT
1f60: 49 4e 54 4f 20 61 75 74 68 6f 72 20 28 20 61 69 INTO author ( ai
1f70: 64 2c 20 20 6e 61 6d 65 29 0a 09 09 56 41 4c 55 d, name)...VALU
1f80: 45 53 20 20 20 20 20 20 20 20 20 20 20 20 20 28 ES (
1f90: 24 61 69 64 2c 20 24 6e 61 6d 65 29 3b 0a 09 20 $aid, $name);..
1fa0: 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 6e 0a }..}..return.
1fb0: 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 }.. proc
1fc0: 53 61 76 65 43 6f 6d 6d 69 74 4d 65 73 73 61 67 SaveCommitMessag
1fd0: 65 73 20 7b 7d 20 7b 0a 09 3a 3a 76 61 72 69 61 es {} {..::varia
1fe0: 62 6c 65 20 6d 79 63 6d 73 67 0a 09 66 6f 72 65 ble mycmsg..fore
1ff0: 61 63 68 20 7b 74 65 78 74 20 63 69 64 7d 20 5b ach {text cid} [
2000: 61 72 72 61 79 20 67 65 74 20 6d 79 63 6d 73 67 array get mycmsg
2010: 5d 20 7b 0a 09 20 20 20 20 73 74 61 74 65 20 72 ] {.. state r
2020: 75 6e 20 7b 0a 09 09 49 4e 53 45 52 54 20 49 4e un {...INSERT IN
2030: 54 4f 20 63 6d 65 73 73 61 67 65 20 28 20 63 69 TO cmessage ( ci
2040: 64 2c 20 20 74 65 78 74 29 0a 09 09 56 41 4c 55 d, text)...VALU
2050: 45 53 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ES
2060: 20 28 24 63 69 64 2c 20 24 74 65 78 74 29 3b 0a ($cid, $text);.
2070: 09 20 20 20 20 7d 0a 09 7d 0a 09 72 65 74 75 72 . }..}..retur
2080: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f n. }.. pro
2090: 63 20 53 61 76 65 4d 65 74 61 20 7b 7d 20 7b 0a c SaveMeta {} {.
20a0: 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d 79 6d 65 .::variable myme
20b0: 74 61 0a 09 66 6f 72 65 61 63 68 20 7b 6b 65 79 ta..foreach {key
20c0: 20 6d 69 64 7d 20 5b 61 72 72 61 79 20 67 65 74 mid} [array get
20d0: 20 6d 79 6d 65 74 61 5d 20 7b 0a 09 20 20 20 20 mymeta] {..
20e0: 73 74 72 75 63 74 3a 3a 6c 69 73 74 20 61 73 73 struct::list ass
20f0: 69 67 6e 20 24 6b 65 79 20 70 69 64 20 62 69 64 ign $key pid bid
2100: 20 61 69 64 20 63 69 64 0a 09 20 20 20 20 69 66 aid cid.. if
2110: 20 7b 24 62 69 64 20 65 71 20 22 22 7d 20 7b 0a {$bid eq ""} {.
2120: 09 09 23 20 54 72 75 6e 6b 2e 20 45 6e 63 6f 64 ..# Trunk. Encod
2130: 65 64 20 61 73 20 4e 55 4c 4c 2e 0a 09 09 73 74 ed as NULL....st
2140: 61 74 65 20 72 75 6e 20 7b 0a 09 09 20 20 20 20 ate run {...
2150: 49 4e 53 45 52 54 20 49 4e 54 4f 20 6d 65 74 61 INSERT INTO meta
2160: 20 28 20 6d 69 64 2c 20 20 70 69 64 2c 20 20 62 ( mid, pid, b
2170: 69 64 2c 20 20 61 69 64 2c 20 20 63 69 64 29 0a id, aid, cid).
2180: 09 09 20 20 20 20 56 41 4c 55 45 53 20 20 20 20 .. VALUES
2190: 20 20 20 20 20 20 20 28 24 6d 69 64 2c 20 24 70 ($mid, $p
21a0: 69 64 2c 20 4e 55 4c 4c 2c 20 24 61 69 64 2c 20 id, NULL, $aid,
21b0: 24 63 69 64 29 3b 0a 09 09 7d 0a 09 20 20 20 20 $cid);...}..
21c0: 7d 20 65 6c 73 65 20 7b 0a 09 09 73 74 61 74 65 } else {...state
21d0: 20 72 75 6e 20 7b 0a 09 09 20 20 20 20 49 4e 53 run {... INS
21e0: 45 52 54 20 49 4e 54 4f 20 6d 65 74 61 20 28 20 ERT INTO meta (
21f0: 6d 69 64 2c 20 20 70 69 64 2c 20 20 62 69 64 2c mid, pid, bid,
2200: 20 20 61 69 64 2c 20 20 63 69 64 29 0a 09 09 20 aid, cid)...
2210: 20 20 20 56 41 4c 55 45 53 20 20 20 20 20 20 20 VALUES
2220: 20 20 20 20 28 24 6d 69 64 2c 20 24 70 69 64 2c ($mid, $pid,
2230: 20 24 62 69 64 2c 20 24 61 69 64 2c 20 24 63 69 $bid, $aid, $ci
2240: 64 29 3b 0a 09 09 7d 0a 09 20 20 20 20 7d 0a 09 d);...}.. }..
2250: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a }..return. }.
2260: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 . # # ## ###
2270: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 ##### ######## #
2280: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 ############.
2290: 20 23 23 20 43 6f 6e 66 69 67 75 72 61 74 69 6f ## Configuratio
22a0: 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 n.. pragma -h
22b0: 61 73 69 6e 73 74 61 6e 63 65 73 20 20 20 6e 6f asinstances no
22c0: 20 3b 20 23 20 73 69 6e 67 6c 65 74 6f 6e 0a 20 ; # singleton.
22d0: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 pragma -hasty
22e0: 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20 3b 20 23 peinfo no ; #
22f0: 20 6e 6f 20 69 6e 74 72 6f 73 70 65 63 74 69 6f no introspectio
2300: 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 n. pragma -ha
2310: 73 74 79 70 65 64 65 73 74 72 6f 79 20 6e 6f 20 stypedestroy no
2320: 3b 20 23 20 69 6d 6d 6f 72 74 61 6c 0a 0a 20 20 ; # immortal..
2330: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23 # # ## ### ###
2340: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23 ## ######## ####
2350: 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d #########.}..nam
2360: 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 espace eval ::vc
2370: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 ::fossil::import
2380: 3a 3a 63 76 73 20 7b 0a 20 20 20 20 6e 61 6d 65 ::cvs {. name
2390: 73 70 61 63 65 20 65 78 70 6f 72 74 20 72 65 70 space export rep
23a0: 6f 73 69 74 6f 72 79 0a 20 20 20 20 6e 61 6d 65 ository. name
23b0: 73 70 61 63 65 20 65 76 61 6c 20 72 65 70 6f 73 space eval repos
23c0: 69 74 6f 72 79 20 7b 0a 09 6e 61 6d 65 73 70 61 itory {..namespa
23d0: 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a ce import ::vc::
23e0: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a fossil::import::
23f0: 63 76 73 3a 3a 70 72 6f 6a 65 63 74 0a 09 6e 61 cvs::project..na
2400: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a mespace import :
2410: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 :vc::fossil::imp
2420: 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 0a ort::cvs::state.
2430: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 .namespace impor
2440: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d t ::vc::tools::m
2450: 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73 70 61 63 isc::*..namespac
2460: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 e import ::vc::t
2470: 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e ools::trouble..n
2480: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 amespace import
2490: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 ::vc::tools::log
24a0: 0a 09 6c 6f 67 20 72 65 67 69 73 74 65 72 20 72 ..log register r
24b0: 65 70 6f 73 69 74 6f 72 79 0a 20 20 20 20 7d 0a epository. }.
24c0: 7d 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 }..# # ## ### ##
24d0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 ### ######## ###
24e0: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 ########## #####
24f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################
2500: 0a 23 23 20 52 65 61 64 79 0a 0a 72 65 74 75 72 .## Ready..retur
2510: 6e 0a n.