Hex Artifact Content
Not logged in

Artifact bba80efcbb5a57725cbc350c9790e4073cb76859:

File tools/cvs2fossil/lib/pkgIndex.tcl part of check-in [00bf8c198e] - The performance was still not satisfying, even with faster recomputing of successors. Doing it multiple times (Building the graph in each breaker and sort passes) eats time. Caching in memory blows the memory. Chosen solution: Cache this information in the database.

Created a new pass 'CsetDeps' which is run between 'InitCsets' and 'BreakRevCsetCycles' (i.e. changeset creation and first breaker pass). It computes the changeset dependencies from the file-level dependencies once and saves the result in the state, in the new table 'cssuccessor'. Now the breaker and sort passes can get the information quickly, with virtually no effort. The dependencies are recomputed incrementally when a changeset is split by one of the breaker passes, for its fragments and its predecessors.

The loop check is now trivial, and integrated into the successor computation, with the heavy lifting for the detailed analysis and reporting moved down into the type-dependent SQL queries. The relevant new method is 'loops'. Now that the loop check is incremental the pass based checks have been removed from the integrity module, and the option '--loopcheck' has been eliminated. For paranoia the graph setup and modification code got its loop check reinstated as an assert, redusing the changeset report code.

Renumbered the breaker and sort passes. A number of places, like graph setup and traversal, loading of changesets, etc. got feedback indicators to show their progress.

The selection of revision and symbol changesets for the associated breaker passes was a bit on the slow side. We now keep changeset lists sorted by type (during loading or general construction) and access them directly.

by aku on 2007-12-02 20:04:40.

0000: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
0010: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
0020: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
0040: 20 50 61 63 6b 61 67 65 20 6d 61 6e 61 67 65 6d   Package managem
0050: 65 6e 74 2e 0a 23 23 20 49 6e 64 65 78 20 6f 66  ent..## Index of
0060: 20 74 68 65 20 6c 6f 63 61 6c 20 70 61 63 6b 61   the local packa
0070: 67 65 73 20 72 65 71 75 69 72 65 64 20 62 79 20  ges required by 
0080: 63 76 73 32 66 6f 73 73 69 6c 0a 23 20 23 20 23  cvs2fossil.# # #
0090: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
00a0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
00b0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
00c0: 23 23 23 23 23 23 23 23 0a 69 66 20 7b 21 5b 70  ########.if {![p
00d0: 61 63 6b 61 67 65 20 76 73 61 74 69 73 66 69 65  ackage vsatisfie
00e0: 73 20 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69  s [package requi
00f0: 72 65 20 54 63 6c 5d 20 38 2e 34 5d 7d 20 72 65  re Tcl] 8.4]} re
0100: 74 75 72 6e 0a 70 61 63 6b 61 67 65 20 69 66 6e  turn.package ifn
0110: 65 65 64 65 64 20 76 63 3a 3a 66 6f 73 73 69 6c  eeded vc::fossil
0120: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 20 20 20  ::import::cvs   
0130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0140: 20 31 2e 30 20 5b 6c 69 73 74 20 73 6f 75 72 63   1.0 [list sourc
0150: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69  e [file join $di
0160: 72 20 63 76 73 32 66 6f 73 73 69 6c 2e 74 63 6c  r cvs2fossil.tcl
0170: 5d 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e 65 65  ]].package ifnee
0180: 64 65 64 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  ded vc::fossil::
0190: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 66 69 6c  import::cvs::fil
01a0: 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31  e              1
01b0: 2e 30 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20  .0 [list source 
01c0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20  [file join $dir 
01d0: 63 32 66 5f 66 69 6c 65 2e 74 63 6c 5d 5d 0a 70  c2f_file.tcl]].p
01e0: 61 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64 20  ackage ifneeded 
01f0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0200: 72 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 6c  rt::cvs::file::l
0210: 6f 64 6d 67 72 20 20 20 20 20 20 31 2e 30 20 5b  odmgr      1.0 [
0220: 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c  list source [fil
0230: 65 20 6a 6f 69 6e 20 24 64 69 72 20 63 32 66 5f  e join $dir c2f_
0240: 66 6c 6f 64 6d 67 72 2e 74 63 6c 5d 5d 0a 70 61  flodmgr.tcl]].pa
0250: 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64 20 76  ckage ifneeded v
0260: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0270: 74 3a 3a 63 76 73 3a 3a 66 69 6c 65 3a 3a 72 65  t::cvs::file::re
0280: 76 20 20 20 20 20 20 20 20 20 31 2e 30 20 5b 6c  v         1.0 [l
0290: 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c 65  ist source [file
02a0: 20 6a 6f 69 6e 20 24 64 69 72 20 63 32 66 5f 66   join $dir c2f_f
02b0: 72 65 76 2e 74 63 6c 5d 5d 0a 70 61 63 6b 61 67  rev.tcl]].packag
02c0: 65 20 69 66 6e 65 65 64 65 64 20 76 63 3a 3a 66  e ifneeded vc::f
02d0: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
02e0: 76 73 3a 3a 66 69 6c 65 3a 3a 73 79 6d 20 20 20  vs::file::sym   
02f0: 20 20 20 20 20 20 31 2e 30 20 5b 6c 69 73 74 20        1.0 [list 
0300: 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69  source [file joi
0310: 6e 20 24 64 69 72 20 63 32 66 5f 66 73 79 6d 2e  n $dir c2f_fsym.
0320: 74 63 6c 5d 5d 0a 70 61 63 6b 61 67 65 20 69 66  tcl]].package if
0330: 6e 65 65 64 65 64 20 76 63 3a 3a 66 6f 73 73 69  needed vc::fossi
0340: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
0350: 66 69 6c 65 3a 3a 74 72 75 6e 6b 20 20 20 20 20  file::trunk     
0360: 20 20 31 2e 30 20 5b 6c 69 73 74 20 73 6f 75 72    1.0 [list sour
0370: 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  ce [file join $d
0380: 69 72 20 63 32 66 5f 66 74 72 75 6e 6b 2e 74 63  ir c2f_ftrunk.tc
0390: 6c 5d 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e 65  l]].package ifne
03a0: 65 64 65 64 20 76 63 3a 3a 66 6f 73 73 69 6c 3a  eded vc::fossil:
03b0: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 6f 70  :import::cvs::op
03c0: 74 69 6f 6e 20 20 20 20 20 20 20 20 20 20 20 20  tion            
03d0: 31 2e 30 20 5b 6c 69 73 74 20 73 6f 75 72 63 65  1.0 [list source
03e0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72   [file join $dir
03f0: 20 63 32 66 5f 6f 70 74 69 6f 6e 2e 74 63 6c 5d   c2f_option.tcl]
0400: 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e 65 65 64  ].package ifneed
0410: 65 64 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69  ed vc::fossil::i
0420: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65  mport::cvs::inte
0430: 67 72 69 74 79 20 20 20 20 20 20 20 20 20 31 2e  grity         1.
0440: 30 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 5b  0 [list source [
0450: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 63  file join $dir c
0460: 32 66 5f 69 6e 74 65 67 72 69 74 79 2e 74 63 6c  2f_integrity.tcl
0470: 5d 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e 65 65  ]].package ifnee
0480: 64 65 64 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  ded vc::fossil::
0490: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73  import::cvs::pas
04a0: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31  s              1
04b0: 2e 30 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20  .0 [list source 
04c0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20  [file join $dir 
04d0: 63 32 66 5f 70 61 73 73 2e 74 63 6c 5d 5d 0a 70  c2f_pass.tcl]].p
04e0: 61 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64 20  ackage ifneeded 
04f0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0500: 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 63  rt::cvs::pass::c
0510: 6f 6c 6c 61 72 20 20 20 20 20 20 31 2e 30 20 5b  ollar      1.0 [
0520: 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c  list source [fil
0530: 65 20 6a 6f 69 6e 20 24 64 69 72 20 63 32 66 5f  e join $dir c2f_
0540: 70 63 6f 6c 6c 61 72 2e 74 63 6c 5d 5d 0a 70 61  pcollar.tcl]].pa
0550: 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64 20 76  ckage ifneeded v
0560: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0570: 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 63 6f  t::cvs::pass::co
0580: 6c 6c 72 65 76 20 20 20 20 20 31 2e 30 20 5b 6c  llrev     1.0 [l
0590: 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c 65  ist source [file
05a0: 20 6a 6f 69 6e 20 24 64 69 72 20 63 32 66 5f 70   join $dir c2f_p
05b0: 63 6f 6c 6c 72 65 76 2e 74 63 6c 5d 5d 0a 70 61  collrev.tcl]].pa
05c0: 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64 20 76  ckage ifneeded v
05d0: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
05e0: 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 63 6f  t::cvs::pass::co
05f0: 6c 6c 73 79 6d 20 20 20 20 20 31 2e 30 20 5b 6c  llsym     1.0 [l
0600: 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c 65  ist source [file
0610: 20 6a 6f 69 6e 20 24 64 69 72 20 63 32 66 5f 70   join $dir c2f_p
0620: 63 6f 6c 6c 73 79 6d 2e 74 63 6c 5d 5d 0a 70 61  collsym.tcl]].pa
0630: 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64 20 76  ckage ifneeded v
0640: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0650: 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 66 69  t::cvs::pass::fi
0660: 6c 74 65 72 73 79 6d 20 20 20 31 2e 30 20 5b 6c  ltersym   1.0 [l
0670: 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c 65  ist source [file
0680: 20 6a 6f 69 6e 20 24 64 69 72 20 63 32 66 5f 70   join $dir c2f_p
0690: 66 69 6c 74 65 72 73 79 6d 2e 74 63 6c 5d 5d 0a  filtersym.tcl]].
06a0: 70 61 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64  package ifneeded
06b0: 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70   vc::fossil::imp
06c0: 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a  ort::cvs::pass::
06d0: 69 6e 69 74 63 73 65 74 73 20 20 20 31 2e 30 20  initcsets   1.0 
06e0: 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69  [list source [fi
06f0: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 63 32 66  le join $dir c2f
0700: 5f 70 69 6e 69 74 63 73 65 74 73 2e 74 63 6c 5d  _pinitcsets.tcl]
0710: 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e 65 65 64  ].package ifneed
0720: 65 64 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69  ed vc::fossil::i
0730: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73  mport::cvs::pass
0740: 3a 3a 63 73 65 74 64 65 70 73 20 20 20 20 31 2e  ::csetdeps    1.
0750: 30 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 5b  0 [list source [
0760: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 63  file join $dir c
0770: 32 66 5f 70 63 73 65 74 64 65 70 73 2e 74 63 6c  2f_pcsetdeps.tcl
0780: 5d 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e 65 65  ]].package ifnee
0790: 64 65 64 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  ded vc::fossil::
07a0: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73  import::cvs::pas
07b0: 73 3a 3a 62 72 65 61 6b 72 63 79 63 6c 65 20 31  s::breakrcycle 1
07c0: 2e 30 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20  .0 [list source 
07d0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20  [file join $dir 
07e0: 63 32 66 5f 70 62 72 65 61 6b 72 63 79 63 6c 65  c2f_pbreakrcycle
07f0: 2e 74 63 6c 5d 5d 0a 70 61 63 6b 61 67 65 20 69  .tcl]].package i
0800: 66 6e 65 65 64 65 64 20 76 63 3a 3a 66 6f 73 73  fneeded vc::foss
0810: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
0820: 3a 70 61 73 73 3a 3a 72 74 6f 70 73 6f 72 74 20  :pass::rtopsort 
0830: 20 20 20 31 2e 30 20 5b 6c 69 73 74 20 73 6f 75     1.0 [list sou
0840: 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  rce [file join $
0850: 64 69 72 20 63 32 66 5f 70 72 74 6f 70 73 6f 72  dir c2f_prtopsor
0860: 74 2e 74 63 6c 5d 5d 0a 70 61 63 6b 61 67 65 20  t.tcl]].package 
0870: 69 66 6e 65 65 64 65 64 20 76 63 3a 3a 66 6f 73  ifneeded vc::fos
0880: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
0890: 3a 3a 70 61 73 73 3a 3a 62 72 65 61 6b 73 63 79  ::pass::breakscy
08a0: 63 6c 65 20 31 2e 30 20 5b 6c 69 73 74 20 73 6f  cle 1.0 [list so
08b0: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
08c0: 24 64 69 72 20 63 32 66 5f 70 62 72 65 61 6b 73  $dir c2f_pbreaks
08d0: 63 79 63 6c 65 2e 74 63 6c 5d 5d 0a 70 61 63 6b  cycle.tcl]].pack
08e0: 61 67 65 20 69 66 6e 65 65 64 65 64 20 76 63 3a  age ifneeded vc:
08f0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
0900: 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 62 72 65 61  :cvs::pass::brea
0910: 6b 61 63 79 63 6c 65 20 31 2e 30 20 5b 6c 69 73  kacycle 1.0 [lis
0920: 74 20 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  t source [file j
0930: 6f 69 6e 20 24 64 69 72 20 63 32 66 5f 70 62 72  oin $dir c2f_pbr
0940: 65 61 6b 61 63 79 63 6c 65 2e 74 63 6c 5d 5d 0a  eakacycle.tcl]].
0950: 70 61 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64  package ifneeded
0960: 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70   vc::fossil::imp
0970: 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 3a 3a  ort::cvs::pass::
0980: 61 74 6f 70 73 6f 72 74 20 20 20 20 31 2e 30 20  atopsort    1.0 
0990: 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69  [list source [fi
09a0: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 63 32 66  le join $dir c2f
09b0: 5f 70 61 74 6f 70 73 6f 72 74 2e 74 63 6c 5d 5d  _patopsort.tcl]]
09c0: 0a 70 61 63 6b 61 67 65 20 69 66 6e 65 65 64 65  .package ifneede
09d0: 64 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d  d vc::fossil::im
09e0: 70 6f 72 74 3a 3a 63 76 73 3a 3a 63 79 63 6c 65  port::cvs::cycle
09f0: 62 72 65 61 6b 65 72 20 20 20 20 20 20 31 2e 30  breaker      1.0
0a00: 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66   [list source [f
0a10: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 63 32  ile join $dir c2
0a20: 66 5f 63 79 63 6c 65 62 72 65 61 6b 65 72 2e 74  f_cyclebreaker.t
0a30: 63 6c 5d 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e  cl]].package ifn
0a40: 65 65 64 65 64 20 76 63 3a 3a 66 6f 73 73 69 6c  eeded vc::fossil
0a50: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70  ::import::cvs::p
0a60: 72 6f 6a 65 63 74 20 20 20 20 20 20 20 20 20 20  roject          
0a70: 20 31 2e 30 20 5b 6c 69 73 74 20 73 6f 75 72 63   1.0 [list sourc
0a80: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69  e [file join $di
0a90: 72 20 63 32 66 5f 70 72 6f 6a 65 63 74 2e 74 63  r c2f_project.tc
0aa0: 6c 5d 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e 65  l]].package ifne
0ab0: 65 64 65 64 20 76 63 3a 3a 66 6f 73 73 69 6c 3a  eded vc::fossil:
0ac0: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72  :import::cvs::pr
0ad0: 6f 6a 65 63 74 3a 3a 6c 6f 64 6d 67 72 20 20 20  oject::lodmgr   
0ae0: 31 2e 30 20 5b 6c 69 73 74 20 73 6f 75 72 63 65  1.0 [list source
0af0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72   [file join $dir
0b00: 20 63 32 66 5f 70 6c 6f 64 6d 67 72 2e 74 63 6c   c2f_plodmgr.tcl
0b10: 5d 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e 65 65  ]].package ifnee
0b20: 64 65 64 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a  ded vc::fossil::
0b30: 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 72 6f  import::cvs::pro
0b40: 6a 65 63 74 3a 3a 72 65 76 20 20 20 20 20 20 31  ject::rev      1
0b50: 2e 30 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20  .0 [list source 
0b60: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20  [file join $dir 
0b70: 63 32 66 5f 70 72 65 76 2e 74 63 6c 5d 5d 0a 70  c2f_prev.tcl]].p
0b80: 61 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64 20  ackage ifneeded 
0b90: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0ba0: 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74  rt::cvs::project
0bb0: 3a 3a 72 65 76 6c 69 6e 6b 20 20 31 2e 30 20 5b  ::revlink  1.0 [
0bc0: 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c  list source [fil
0bd0: 65 20 6a 6f 69 6e 20 24 64 69 72 20 63 32 66 5f  e join $dir c2f_
0be0: 70 72 65 76 6c 69 6e 6b 2e 74 63 6c 5d 5d 0a 70  prevlink.tcl]].p
0bf0: 61 63 6b 61 67 65 20 69 66 6e 65 65 64 65 64 20  ackage ifneeded 
0c00: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
0c10: 72 74 3a 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74  rt::cvs::project
0c20: 3a 3a 73 79 6d 20 20 20 20 20 20 31 2e 30 20 5b  ::sym      1.0 [
0c30: 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66 69 6c  list source [fil
0c40: 65 20 6a 6f 69 6e 20 24 64 69 72 20 63 32 66 5f  e join $dir c2f_
0c50: 70 73 79 6d 2e 74 63 6c 5d 5d 0a 70 61 63 6b 61  psym.tcl]].packa
0c60: 67 65 20 69 66 6e 65 65 64 65 64 20 76 63 3a 3a  ge ifneeded vc::
0c70: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
0c80: 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 74 72  cvs::project::tr
0c90: 75 6e 6b 20 20 20 20 31 2e 30 20 5b 6c 69 73 74  unk    1.0 [list
0ca0: 20 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f   source [file jo
0cb0: 69 6e 20 24 64 69 72 20 63 32 66 5f 70 74 72 75  in $dir c2f_ptru
0cc0: 6e 6b 2e 74 63 6c 5d 5d 0a 70 61 63 6b 61 67 65  nk.tcl]].package
0cd0: 20 69 66 6e 65 65 64 65 64 20 76 63 3a 3a 66 6f   ifneeded vc::fo
0ce0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
0cf0: 73 3a 3a 72 65 70 6f 73 69 74 6f 72 79 20 20 20  s::repository   
0d00: 20 20 20 20 20 31 2e 30 20 5b 6c 69 73 74 20 73       1.0 [list s
0d10: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
0d20: 20 24 64 69 72 20 63 32 66 5f 72 65 70 6f 73 69   $dir c2f_reposi
0d30: 74 6f 72 79 2e 74 63 6c 5d 5d 0a 70 61 63 6b 61  tory.tcl]].packa
0d40: 67 65 20 69 66 6e 65 65 64 65 64 20 76 63 3a 3a  ge ifneeded vc::
0d50: 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a  fossil::import::
0d60: 63 76 73 3a 3a 73 74 61 74 65 20 20 20 20 20 20  cvs::state      
0d70: 20 20 20 20 20 20 20 31 2e 30 20 5b 6c 69 73 74         1.0 [list
0d80: 20 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f   source [file jo
0d90: 69 6e 20 24 64 69 72 20 63 32 66 5f 73 74 61 74  in $dir c2f_stat
0da0: 65 2e 74 63 6c 5d 5d 0a 70 61 63 6b 61 67 65 20  e.tcl]].package 
0db0: 69 66 6e 65 65 64 65 64 20 76 63 3a 3a 72 63 73  ifneeded vc::rcs
0dc0: 3a 3a 70 61 72 73 65 72 20 20 20 20 20 20 20 20  ::parser        
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0de0: 20 20 20 20 31 2e 30 20 5b 6c 69 73 74 20 73 6f      1.0 [list so
0df0: 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  urce [file join 
0e00: 24 64 69 72 20 72 63 73 70 61 72 73 65 72 2e 74  $dir rcsparser.t
0e10: 63 6c 5d 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e  cl]].package ifn
0e20: 65 65 64 65 64 20 76 63 3a 3a 74 6f 6f 6c 73 3a  eeded vc::tools:
0e30: 3a 64 6f 74 20 20 20 20 20 20 20 20 20 20 20 20  :dot            
0e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e50: 20 31 2e 30 20 5b 6c 69 73 74 20 73 6f 75 72 63   1.0 [list sourc
0e60: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69  e [file join $di
0e70: 72 20 64 6f 74 2e 74 63 6c 5d 5d 0a 70 61 63 6b  r dot.tcl]].pack
0e80: 61 67 65 20 69 66 6e 65 65 64 65 64 20 76 63 3a  age ifneeded vc:
0e90: 3a 74 6f 6f 6c 73 3a 3a 69 64 20 20 20 20 20 20  :tools::id      
0ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0eb0: 20 20 20 20 20 20 20 20 31 2e 30 20 5b 6c 69 73          1.0 [lis
0ec0: 74 20 73 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a  t source [file j
0ed0: 6f 69 6e 20 24 64 69 72 20 69 64 2e 74 63 6c 5d  oin $dir id.tcl]
0ee0: 5d 0a 70 61 63 6b 61 67 65 20 69 66 6e 65 65 64  ].package ifneed
0ef0: 65 64 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f  ed vc::tools::lo
0f00: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
0f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2e                1.
0f20: 30 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 5b  0 [list source [
0f30: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 6c  file join $dir l
0f40: 6f 67 2e 74 63 6c 5d 5d 0a 70 61 63 6b 61 67 65  og.tcl]].package
0f50: 20 69 66 6e 65 65 64 65 64 20 76 63 3a 3a 74 6f   ifneeded vc::to
0f60: 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 20 20 20 20  ols::misc       
0f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f80: 20 20 20 20 20 31 2e 30 20 5b 6c 69 73 74 20 73       1.0 [list s
0f90: 6f 75 72 63 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ource [file join
0fa0: 20 24 64 69 72 20 6d 69 73 63 2e 74 63 6c 5d 5d   $dir misc.tcl]]
0fb0: 0a 70 61 63 6b 61 67 65 20 69 66 6e 65 65 64 65  .package ifneede
0fc0: 64 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f  d vc::tools::tro
0fd0: 75 62 6c 65 20 20 20 20 20 20 20 20 20 20 20 20  uble            
0fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2e 30               1.0
0ff0: 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 5b 66   [list source [f
1000: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 20 74 72  ile join $dir tr
1010: 6f 75 62 6c 65 2e 74 63 6c 5d 5d 0a              ouble.tcl]].