Hex Artifact Content
Not logged in

Artifact 5835c5aa1e8e3b3b0524c0069001a755a7b294a3:

File tools/cvs2fossil/lib/c2f_option.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 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 4f 70 74  ########..## Opt
0200: 69 6f 6e 20 64 61 74 61 62 61 73 65 2c 20 70 72  ion database, pr
0210: 6f 63 65 73 73 65 73 20 74 68 65 20 63 6f 6d 6d  ocesses the comm
0220: 61 6e 64 20 6c 69 6e 65 2e 20 4e 6f 74 65 20 74  and line. Note t
0230: 68 61 74 20 6e 6f 74 20 61 6c 6c 20 6f 66 0a 23  hat not all of.#
0240: 23 20 74 68 65 20 6f 70 74 69 6f 6e 20 69 6e 66  # the option inf
0250: 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73 74 6f 72  ormation is stor
0260: 65 64 20 68 65 72 65 2e 20 50 61 72 74 73 20 61  ed here. Parts a
0270: 72 65 20 70 72 6f 70 61 67 61 74 65 64 20 74 6f  re propagated to
0280: 0a 23 23 20 6f 74 68 65 72 20 70 69 65 63 65 73  .## other pieces
0290: 20 6f 66 20 74 68 65 20 73 79 73 74 65 6d 20 61   of the system a
02a0: 6e 64 20 68 61 6e 64 6c 65 64 20 74 68 65 72 65  nd handled there
02b0: 2c 20 76 69 61 20 6f 70 74 69 6f 6e 0a 23 23 20  , via option.## 
02c0: 64 65 6c 65 67 61 74 69 6f 6e 0a 0a 23 20 23 20  delegation..# # 
02d0: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
02e0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
02f0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
0300: 23 23 23 23 23 23 23 23 23 0a 23 23 20 52 65 71  #########.## Req
0310: 75 69 72 65 6d 65 6e 74 73 0a 0a 70 61 63 6b 61  uirements..packa
0320: 67 65 20 72 65 71 75 69 72 65 20 54 63 6c 20 38  ge require Tcl 8
0330: 2e 34 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .4              
0340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0350: 20 3b 20 23 20 52 65 71 75 69 72 65 64 20 72 75   ; # Required ru
0360: 6e 74 69 6d 65 2e 0a 70 61 63 6b 61 67 65 20 72  ntime..package r
0370: 65 71 75 69 72 65 20 73 6e 69 74 20 20 20 20 20  equire snit     
0380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0390: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
03a0: 20 4f 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b   OO system..pack
03b0: 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a  age require vc::
03c0: 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 20 20  tools::trouble  
03d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03e0: 20 20 3b 20 23 20 45 72 72 6f 72 20 72 65 70 6f    ; # Error repo
03f0: 72 74 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72  rting..package r
0400: 65 71 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73  equire vc::tools
0410: 3a 3a 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20  ::log           
0420: 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23               ; #
0430: 20 55 73 65 72 20 66 65 65 64 62 61 63 6b 2e 0a   User feedback..
0440: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0450: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20  vc::tools::misc 
0460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0470: 20 20 20 20 20 20 3b 20 23 20 4d 69 73 63 2e 20        ; # Misc. 
0480: 70 61 74 68 20 72 65 66 6f 72 6d 61 74 74 69 6e  path reformattin
0490: 67 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  g..package requi
04a0: 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69  re vc::fossil::i
04b0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73  mport::cvs::pass
04c0: 20 20 20 20 20 20 20 20 20 3b 20 23 20 50 61 73           ; # Pas
04d0: 73 20 6d 61 6e 61 67 65 6d 65 6e 74 0a 70 61 63  s management.pac
04e0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a  kage require vc:
04f0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
0500: 3a 63 76 73 3a 3a 70 61 73 73 3a 3a 63 6f 6c 6c  :cvs::pass::coll
0510: 61 72 20 3b 20 23 20 50 61 73 73 20 49 2e 0a 70  ar ; # Pass I..p
0520: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76  ackage require v
0530: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0540: 74 3a 3a 63 76 73 3a 3a 72 65 70 6f 73 69 74 6f  t::cvs::reposito
0550: 72 79 20 20 20 3b 20 23 20 52 65 70 6f 73 69 74  ry   ; # Reposit
0560: 6f 72 79 20 6d 61 6e 61 67 65 6d 65 6e 74 0a 70  ory management.p
0570: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 76  ackage require v
0580: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0590: 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 20 20 20  t::cvs::state   
05a0: 20 20 20 20 20 3b 20 23 20 53 74 61 74 65 20 73       ; # State s
05b0: 74 6f 72 61 67 65 0a 70 61 63 6b 61 67 65 20 72  torage.package r
05c0: 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69  equire vc::fossi
05d0: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
05e0: 69 6e 74 65 67 72 69 74 79 20 20 20 20 3b 20 23  integrity    ; #
05f0: 20 53 74 61 74 65 20 69 6e 74 65 67 72 69 74 79   State integrity
0600: 20 63 68 65 63 6b 73 2e 0a 70 61 63 6b 61 67 65   checks..package
0610: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
0620: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
0630: 3a 3a 70 72 6f 6a 65 63 74 3a 3a 73 79 6d 20 3b  ::project::sym ;
0640: 20 23 20 50 72 6f 6a 65 63 74 20 6c 65 76 65 6c   # Project level
0650: 20 73 79 6d 62 6f 6c 73 0a 70 61 63 6b 61 67 65   symbols.package
0660: 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f 73   require vc::fos
0670: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
0680: 3a 3a 63 79 63 6c 65 62 72 65 61 6b 65 72 20 3b  ::cyclebreaker ;
0690: 20 23 20 42 72 65 61 6b 69 6e 67 20 64 65 70 65   # Breaking depe
06a0: 6e 64 65 6e 63 79 20 63 79 63 6c 65 73 2e 0a 0a  ndency cycles...
06b0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
06c0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
06d0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
06e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
06f0: 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76  ..snit::type ::v
0700: 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72  c::fossil::impor
0710: 74 3a 3a 63 76 73 3a 3a 6f 70 74 69 6f 6e 20 7b  t::cvs::option {
0720: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
0730: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
0740: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
0750: 20 23 23 20 50 75 62 6c 69 63 20 41 50 49 2c 20   ## Public API, 
0760: 4f 70 74 69 6f 6e 73 2e 0a 0a 20 20 20 20 23 20  Options...    # 
0770: 2d 2d 68 65 6c 70 2c 20 2d 2d 68 65 6c 70 2d 70  --help, --help-p
0780: 61 73 73 65 73 2c 20 2d 68 0a 20 20 20 20 23 20  asses, -h.    # 
0790: 2d 2d 76 65 72 73 69 6f 6e 0a 20 20 20 20 23 20  --version.    # 
07a0: 2d 70 2c 20 2d 2d 70 61 73 73 2c 20 2d 2d 70 61  -p, --pass, --pa
07b0: 73 73 65 73 0a 20 20 20 20 23 20 2d 2d 69 67 6e  sses.    # --ign
07c0: 6f 72 65 2d 63 6f 6e 66 6c 69 63 74 69 6e 67 2d  ore-conflicting-
07d0: 61 74 74 69 63 73 0a 20 20 20 20 23 20 2d 2d 70  attics.    # --p
07e0: 72 6f 6a 65 63 74 0a 20 20 20 20 23 20 2d 76 2c  roject.    # -v,
07f0: 20 2d 2d 76 65 72 62 6f 73 65 0a 20 20 20 20 23   --verbose.    #
0800: 20 2d 71 2c 20 2d 2d 71 75 69 65 74 0a 20 20 20   -q, --quiet.   
0810: 20 23 20 2d 2d 73 74 61 74 65 20 28 63 6f 6e 76   # --state (conv
0820: 65 72 73 69 6f 6e 20 73 74 61 74 75 73 2c 20 61  ersion status, a
0830: 6c 61 20 63 6f 6e 66 69 67 2e 63 61 63 68 65 29  la config.cache)
0840: 0a 20 20 20 20 23 20 2d 2d 74 72 75 6e 6b 2d 6f  .    # --trunk-o
0850: 6e 6c 79 0a 20 20 20 20 23 20 2d 2d 65 78 63 6c  nly.    # --excl
0860: 75 64 65 2c 20 2d 2d 66 6f 72 63 65 2d 74 61 67  ude, --force-tag
0870: 2c 20 2d 2d 66 6f 72 63 65 2d 62 72 61 6e 63 68  , --force-branch
0880: 0a 20 20 20 20 23 20 2d 2d 62 61 74 63 68 0a 0a  .    # --batch..
0890: 20 20 20 20 23 20 2d 6f 2c 20 2d 2d 6f 75 74 70      # -o, --outp
08a0: 75 74 0a 20 20 20 20 23 20 2d 2d 64 72 79 2d 72  ut.    # --dry-r
08b0: 75 6e 0a 20 20 20 20 23 20 2d 2d 73 79 6d 62 6f  un.    # --symbo
08c0: 6c 2d 74 72 61 6e 73 66 6f 72 6d 20 52 45 3a 58  l-transform RE:X
08d0: 58 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  X..    # # ## ##
08e0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
08f0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
0900: 20 20 20 23 23 20 50 75 62 6c 69 63 20 41 50 49     ## Public API
0910: 2c 20 4d 65 74 68 6f 64 73 0a 0a 20 20 20 20 74  , Methods..    t
0920: 79 70 65 6d 65 74 68 6f 64 20 70 72 6f 63 65 73  ypemethod proces
0930: 73 20 7b 61 72 67 75 6d 65 6e 74 73 7d 20 7b 0a  s {arguments} {.
0940: 09 23 20 53 79 6e 74 61 78 20 6f 66 20 61 72 67  .# Syntax of arg
0950: 75 6d 65 6e 74 73 3a 20 3f 6f 70 74 69 6f 6e 20  uments: ?option 
0960: 3f 76 61 6c 75 65 3f 2e 2e 2e 3f 20 2f 70 61 74  ?value?...? /pat
0970: 68 2f 74 6f 2f 63 76 73 2f 72 65 70 6f 73 69 74  h/to/cvs/reposit
0980: 6f 72 79 0a 0a 09 77 68 69 6c 65 20 7b 5b 49 73  ory...while {[Is
0990: 4f 70 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73  Option arguments
09a0: 20 2d 3e 20 6f 70 74 69 6f 6e 5d 7d 20 7b 0a 09   -> option]} {..
09b0: 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 63      switch -exac
09c0: 74 20 2d 2d 20 24 6f 70 74 69 6f 6e 20 7b 0a 09  t -- $option {..
09d0: 09 2d 68 20 20 20 20 20 20 20 20 20 20 20 20 20  .-h             
09e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 0a 09               -..
09f0: 09 2d 2d 68 65 6c 70 20 20 20 20 20 20 20 20 20  .--help         
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 50               { P
0a10: 72 69 6e 74 48 65 6c 70 20 20 20 20 3b 20 65 78  rintHelp    ; ex
0a20: 69 74 20 30 20 7d 0a 09 09 2d 2d 68 65 6c 70 2d  it 0 }...--help-
0a30: 70 61 73 73 65 73 20 20 20 20 20 20 20 20 20 20  passes          
0a40: 20 20 20 20 20 7b 20 70 61 73 73 20 68 65 6c 70       { pass help
0a50: 20 20 20 20 3b 20 65 78 69 74 20 30 20 7d 0a 09      ; exit 0 }..
0a60: 09 2d 2d 76 65 72 73 69 6f 6e 20 20 20 20 20 20  .--version      
0a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 20 50               { P
0a80: 72 69 6e 74 56 65 72 73 69 6f 6e 20 3b 20 65 78  rintVersion ; ex
0a90: 69 74 20 30 20 7d 0a 09 09 2d 70 20 20 20 20 20  it 0 }...-p     
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ab0: 20 20 20 20 20 2d 0a 09 09 2d 2d 70 61 73 73 20       -...--pass 
0ac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ad0: 20 20 20 20 20 2d 0a 09 09 2d 2d 70 61 73 73 65       -...--passe
0ae0: 73 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  s               
0af0: 20 20 20 20 20 7b 20 70 61 73 73 20 73 65 6c 65       { pass sele
0b00: 63 74 20 5b 56 61 6c 75 65 20 61 72 67 75 6d 65  ct [Value argume
0b10: 6e 74 73 5d 20 7d 0a 09 09 2d 2d 69 67 6e 6f 72  nts] }...--ignor
0b20: 65 2d 63 6f 6e 66 6c 69 63 74 69 6e 67 2d 61 74  e-conflicting-at
0b30: 74 69 63 73 20 7b 20 63 6f 6c 6c 61 72 20 69 67  tics { collar ig
0b40: 6e 6f 72 65 5f 63 6f 6e 66 6c 69 63 74 69 6e 67  nore_conflicting
0b50: 5f 61 74 74 69 63 73 20 7d 0a 09 09 2d 2d 70 72  _attics }...--pr
0b60: 6f 6a 65 63 74 20 20 20 20 20 20 20 20 20 20 20  oject           
0b70: 20 20 20 20 20 20 20 20 7b 20 72 65 70 6f 73 69          { reposi
0b80: 74 6f 72 79 20 61 64 64 20 5b 56 61 6c 75 65 20  tory add [Value 
0b90: 61 72 67 75 6d 65 6e 74 73 5d 20 7d 0a 09 09 2d  arguments] }...-
0ba0: 76 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v               
0bb0: 20 20 20 20 20 20 20 20 20 20 20 2d 0a 09 09 2d             -...-
0bc0: 2d 76 65 72 62 6f 73 65 20 20 20 20 20 20 20 20  -verbose        
0bd0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 6c 6f 67             { log
0be0: 20 76 65 72 62 6f 73 65 20 7d 0a 09 09 2d 71 20   verbose }...-q 
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c00: 20 20 20 20 20 20 20 20 20 2d 0a 09 09 2d 2d 71           -...--q
0c10: 75 69 65 74 20 20 20 20 20 20 20 20 20 20 20 20  uiet            
0c20: 20 20 20 20 20 20 20 20 20 7b 20 6c 6f 67 20 71           { log q
0c30: 75 69 65 74 20 7d 0a 09 09 2d 2d 73 74 61 74 65  uiet }...--state
0c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c50: 20 20 20 20 20 7b 20 73 74 61 74 65 20 75 73 65       { state use
0c60: 20 5b 56 61 6c 75 65 20 61 72 67 75 6d 65 6e 74   [Value argument
0c70: 73 5d 20 7d 0a 09 09 2d 2d 74 72 75 6e 6b 2d 6f  s] }...--trunk-o
0c80: 6e 6c 79 20 20 20 20 20 20 20 20 20 20 20 20 20  nly             
0c90: 20 20 20 7b 20 72 65 70 6f 73 69 74 6f 72 79 20     { repository 
0ca0: 74 72 75 6e 6b 6f 6e 6c 79 21 20 7d 0a 09 09 2d  trunkonly! }...-
0cb0: 2d 65 78 63 6c 75 64 65 20 20 20 20 20 20 20 20  -exclude        
0cc0: 20 20 20 20 20 20 20 20 20 20 20 7b 20 70 72 6f             { pro
0cd0: 6a 65 63 74 3a 3a 73 79 6d 20 65 78 63 6c 75 64  ject::sym exclud
0ce0: 65 20 20 20 20 20 5b 56 61 6c 75 65 20 61 72 67  e     [Value arg
0cf0: 75 6d 65 6e 74 73 5d 20 7d 0a 09 09 2d 2d 66 6f  uments] }...--fo
0d00: 72 63 65 2d 74 61 67 20 20 20 20 20 20 20 20 20  rce-tag         
0d10: 20 20 20 20 20 20 20 20 7b 20 70 72 6f 6a 65 63          { projec
0d20: 74 3a 3a 73 79 6d 20 66 6f 72 63 65 74 61 67 20  t::sym forcetag 
0d30: 20 20 20 5b 56 61 6c 75 65 20 61 72 67 75 6d 65     [Value argume
0d40: 6e 74 73 5d 20 7d 0a 09 09 2d 2d 66 6f 72 63 65  nts] }...--force
0d50: 2d 62 72 61 6e 63 68 20 20 20 20 20 20 20 20 20  -branch         
0d60: 20 20 20 20 20 7b 20 70 72 6f 6a 65 63 74 3a 3a       { project::
0d70: 73 79 6d 20 66 6f 72 63 65 62 72 61 6e 63 68 20  sym forcebranch 
0d80: 5b 56 61 6c 75 65 20 61 72 67 75 6d 65 6e 74 73  [Value arguments
0d90: 5d 20 7d 0a 09 09 2d 2d 62 61 74 63 68 20 20 20  ] }...--batch   
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0db0: 20 20 7b 20 6c 6f 67 20 6e 6f 70 72 6f 67 72 65    { log noprogre
0dc0: 73 73 20 7d 0a 09 09 2d 2d 64 6f 74 73 20 20 20  ss }...--dots   
0dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0de0: 20 20 20 7b 20 63 79 63 6c 65 62 72 65 61 6b 65     { cyclebreake
0df0: 72 20 64 6f 74 73 74 6f 20 5b 56 61 6c 75 65 20  r dotsto [Value 
0e00: 61 72 67 75 6d 65 6e 74 73 5d 20 7d 0a 09 09 2d  arguments] }...-
0e10: 2d 77 61 74 63 68 20 20 20 20 20 20 20 20 20 20  -watch          
0e20: 20 20 20 20 20 20 20 20 20 20 20 7b 20 63 79 63             { cyc
0e30: 6c 65 62 72 65 61 6b 65 72 20 77 61 74 63 68 20  lebreaker watch 
0e40: 20 5b 56 61 6c 75 65 20 61 72 67 75 6d 65 6e 74   [Value argument
0e50: 73 5d 20 7d 0a 09 09 64 65 66 61 75 6c 74 20 7b  s] }...default {
0e60: 0a 09 09 20 20 20 20 55 73 61 67 65 20 24 62 61  ...    Usage $ba
0e70: 64 6f 70 74 69 6f 6e 24 6f 70 74 69 6f 6e 5c 6e  doption$option\n
0e80: 24 67 65 74 68 65 6c 70 0a 09 09 7d 0a 09 20 20  $gethelp...}..  
0e90: 20 20 7d 0a 09 7d 0a 0a 09 69 66 20 7b 5b 6c 6c    }..}...if {[ll
0ea0: 65 6e 67 74 68 20 24 61 72 67 75 6d 65 6e 74 73  ength $arguments
0eb0: 5d 20 3e 20 31 7d 20 55 73 61 67 65 0a 09 69 66  ] > 1} Usage..if
0ec0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 61 72 67 75   {[llength $argu
0ed0: 6d 65 6e 74 73 5d 20 3c 20 31 7d 20 7b 20 55 73  ments] < 1} { Us
0ee0: 61 67 65 20 24 6e 6f 63 76 73 20 7d 0a 09 72 65  age $nocvs }..re
0ef0: 70 6f 73 69 74 6f 72 79 20 62 61 73 65 20 5b 73  pository base [s
0f00: 74 72 69 70 74 72 61 69 6c 69 6e 67 73 6c 61 73  triptrailingslas
0f10: 68 20 5b 6c 69 6e 64 65 78 20 24 61 72 67 75 6d  h [lindex $argum
0f20: 65 6e 74 73 20 30 5d 5d 0a 0a 09 56 61 6c 69 64  ents 0]]...Valid
0f30: 61 74 65 0a 09 72 65 74 75 72 6e 0a 20 20 20 20  ate..return.    
0f40: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  }..    # # ## ##
0f50: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
0f60: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
0f70: 20 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d     ## Internal m
0f80: 65 74 68 6f 64 73 2c 20 70 72 69 6e 74 69 6e 67  ethods, printing
0f90: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 0a 20   information... 
0fa0: 20 20 20 70 72 6f 63 20 50 72 69 6e 74 48 65 6c     proc PrintHel
0fb0: 70 20 7b 7d 20 7b 0a 09 67 6c 6f 62 61 6c 20 61  p {} {..global a
0fc0: 72 67 76 30 0a 09 74 72 6f 75 62 6c 65 20 69 6e  rgv0..trouble in
0fd0: 66 6f 20 22 55 73 61 67 65 3a 20 24 61 72 67 76  fo "Usage: $argv
0fe0: 30 20 24 75 73 61 67 65 22 0a 09 74 72 6f 75 62  0 $usage"..troub
0ff0: 6c 65 20 69 6e 66 6f 20 22 22 0a 09 74 72 6f 75  le info ""..trou
1000: 62 6c 65 20 69 6e 66 6f 20 22 20 20 49 6e 66 6f  ble info "  Info
1010: 72 6d 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 22  rmation options"
1020: 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22  ..trouble info "
1030: 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20  "..trouble info 
1040: 22 20 20 20 20 2d 68 2c 20 2d 2d 68 65 6c 70 20  "    -h, --help 
1050: 20 20 20 50 72 69 6e 74 20 74 68 69 73 20 6d 65     Print this me
1060: 73 73 61 67 65 20 61 6e 64 20 65 78 69 74 20 77  ssage and exit w
1070: 69 74 68 20 73 75 63 63 65 73 73 22 0a 09 74 72  ith success"..tr
1080: 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20 20 20  ouble info "    
1090: 2d 2d 68 65 6c 70 2d 70 61 73 73 65 73 20 50 72  --help-passes Pr
10a0: 69 6e 74 20 6c 69 73 74 20 6f 66 20 70 61 73 73  int list of pass
10b0: 65 73 20 61 6e 64 20 65 78 69 74 20 77 69 74 68  es and exit with
10c0: 20 73 75 63 63 65 73 73 22 0a 09 74 72 6f 75 62   success"..troub
10d0: 6c 65 20 69 6e 66 6f 20 22 20 20 20 20 2d 2d 76  le info "    --v
10e0: 65 72 73 69 6f 6e 20 20 20 20 20 50 72 69 6e 74  ersion     Print
10f0: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
1100: 6f 66 20 24 61 72 67 76 30 22 0a 09 74 72 6f 75  of $argv0"..trou
1110: 62 6c 65 20 69 6e 66 6f 20 22 20 20 20 20 2d 76  ble info "    -v
1120: 2c 20 2d 2d 76 65 72 62 6f 73 65 20 49 6e 63 72  , --verbose Incr
1130: 65 61 73 65 20 61 70 70 6c 69 63 61 74 69 6f 6e  ease application
1140: 27 73 20 76 65 72 62 6f 73 69 74 79 22 0a 09 74  's verbosity"..t
1150: 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20 20  rouble info "   
1160: 20 2d 71 2c 20 2d 2d 71 75 69 65 74 20 20 20 44   -q, --quiet   D
1170: 65 63 72 65 61 73 65 20 61 70 70 6c 69 63 61 74  ecrease applicat
1180: 69 6f 6e 27 73 20 76 65 72 62 6f 73 69 74 79 22  ion's verbosity"
1190: 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22  ..trouble info "
11a0: 20 20 20 20 2d 2d 62 61 74 63 68 20 20 20 20 20      --batch     
11b0: 20 20 44 69 73 61 62 6c 65 20 74 68 65 20 70 72    Disable the pr
11c0: 6f 67 72 65 73 73 20 66 65 65 64 62 61 63 6b 20  ogress feedback 
11d0: 73 74 61 6e 64 61 72 64 20 74 6f 22 0a 09 74 72  standard to"..tr
11e0: 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20 20 20  ouble info "    
11f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
1200: 74 65 72 61 63 74 69 76 65 20 75 73 65 2e 22 0a  teractive use.".
1210: 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 22  .trouble info ""
1220: 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22  ..trouble info "
1230: 20 20 43 6f 6e 76 65 72 73 69 6f 6e 20 63 6f 6e    Conversion con
1240: 74 72 6f 6c 20 6f 70 74 69 6f 6e 73 22 0a 09 74  trol options"..t
1250: 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 22 0a 09  rouble info ""..
1260: 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20  trouble info "  
1270: 20 20 2d 70 2c 20 2d 2d 70 61 73 73 20 50 41 53    -p, --pass PAS
1280: 53 20 20 20 20 20 20 20 20 20 20 20 20 52 75 6e  S            Run
1290: 20 6f 6e 6c 79 20 74 68 65 20 73 70 65 63 69 66   only the specif
12a0: 69 65 64 20 63 6f 6e 76 65 72 73 69 6f 6e 20 70  ied conversion p
12b0: 61 73 73 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e  ass"..trouble in
12c0: 66 6f 20 22 20 20 20 20 2d 70 2c 20 2d 2d 70 61  fo "    -p, --pa
12d0: 73 73 65 73 20 3f 53 54 41 52 54 3f 3a 3f 45 4e  sses ?START?:?EN
12e0: 44 3f 20 52 75 6e 20 6f 6e 6c 79 20 74 68 65 20  D? Run only the 
12f0: 70 61 73 73 65 73 20 53 54 41 52 54 20 74 68 72  passes START thr
1300: 6f 75 67 68 20 45 4e 44 2c 22 0a 09 74 72 6f 75  ough END,"..trou
1310: 62 6c 65 20 69 6e 66 6f 20 22 20 20 20 20 20 20  ble info "      
1320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1330: 20 20 20 20 20 20 20 20 20 69 6e 63 6c 75 73 69           inclusi
1340: 76 65 2e 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e  ve."..trouble in
1350: 66 6f 20 22 22 0a 09 74 72 6f 75 62 6c 65 20 69  fo ""..trouble i
1360: 6e 66 6f 20 22 20 20 20 20 20 20 20 20 20 20 20  nfo "           
1370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1380: 20 20 20 20 50 61 73 73 65 73 20 61 72 65 20 73      Passes are s
1390: 70 65 63 69 66 69 65 64 20 62 79 20 6e 61 6d 65  pecified by name
13a0: 2e 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f  ."..trouble info
13b0: 20 22 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66   ""..trouble inf
13c0: 6f 20 22 20 20 20 20 2d 2d 69 67 6e 6f 72 65 2d  o "    --ignore-
13d0: 63 6f 6e 66 6c 69 63 74 69 6e 67 2d 61 74 74 69  conflicting-atti
13e0: 63 73 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66  cs"..trouble inf
13f0: 6f 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20  o "             
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 50 72 65 76 65 6e 74 20 61 62 6f 72 74 20    Prevent abort 
1420: 77 68 65 6e 20 63 6f 6e 66 6c 69 63 74 69 6e 67  when conflicting
1430: 20 61 72 63 68 69 76 65 73 22 0a 09 74 72 6f 75   archives"..trou
1440: 62 6c 65 20 69 6e 66 6f 20 22 20 20 20 20 20 20  ble info "      
1450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1460: 20 20 20 20 20 20 20 20 20 77 65 72 65 20 66 6f           were fo
1470: 75 6e 64 20 69 6e 20 62 6f 74 68 20 72 65 67 75  und in both regu
1480: 6c 61 72 20 61 6e 64 20 41 74 74 69 63 2e 22 0a  lar and Attic.".
1490: 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 22  .trouble info ""
14a0: 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22  ..trouble info "
14b0: 20 20 20 20 2d 2d 73 74 61 74 65 20 50 41 54 48      --state PATH
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
14d0: 61 76 65 20 73 74 61 74 65 20 74 6f 20 74 68 65  ave state to the
14e0: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 2c   specified file,
14f0: 20 61 6e 64 22 0a 09 74 72 6f 75 62 6c 65 20 69   and"..trouble i
1500: 6e 66 6f 20 22 20 20 20 20 20 20 20 20 20 20 20  nfo "           
1510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1520: 20 20 20 20 6c 6f 61 64 20 73 74 61 74 65 20 6f      load state o
1530: 66 20 70 72 65 76 69 6f 75 73 20 72 75 6e 73 20  f previous runs 
1540: 66 72 6f 6d 20 69 74 20 74 6f 6f 2e 22 0a 09 74  from it too."..t
1550: 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 22 0a 09  rouble info ""..
1560: 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20  trouble info "  
1570: 20 20 2d 2d 65 78 63 6c 75 64 65 20 3f 50 52 4f    --exclude ?PRO
1580: 4a 45 43 54 3a 3f 53 59 4d 42 4f 4c 20 45 78 63  JECT:?SYMBOL Exc
1590: 6c 75 64 65 20 74 68 65 20 6e 61 6d 65 64 20 73  lude the named s
15a0: 79 6d 62 6f 6c 20 66 72 6f 6d 20 61 6c 6c 20 6f  ymbol from all o
15b0: 72 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f  r"..trouble info
15c0: 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20 20   "              
15d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15e0: 20 6a 75 73 74 20 74 68 65 20 73 70 65 63 69 66   just the specif
15f0: 69 65 64 20 70 72 6f 6a 65 63 74 2e 20 42 6f 74  ied project. Bot
1600: 68 20 70 72 6f 6a 65 63 74 22 0a 09 74 72 6f 75  h project"..trou
1610: 62 6c 65 20 69 6e 66 6f 20 22 20 20 20 20 20 20  ble info "      
1620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1630: 20 20 20 20 20 20 20 20 20 61 6e 64 20 73 79 6d           and sym
1640: 62 6f 6c 20 6e 61 6d 65 73 20 61 72 65 20 67 6c  bol names are gl
1650: 6f 62 20 70 61 74 74 65 72 6e 73 2e 22 0a 09 74  ob patterns."..t
1660: 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 22 0a 09  rouble info ""..
1670: 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20  trouble info "  
1680: 20 20 2d 2d 66 6f 72 63 65 2d 74 61 67 20 3f 50    --force-tag ?P
1690: 52 4f 4a 45 43 54 3a 3f 53 59 4d 42 4f 4c 22 0a  ROJECT:?SYMBOL".
16a0: 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20  .trouble info " 
16b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 46 6f                Fo
16d0: 72 63 65 20 74 68 65 20 6e 61 6d 65 64 20 73 79  rce the named sy
16e0: 6d 62 6f 6c 20 66 72 6f 6d 20 61 6c 6c 20 6f 72  mbol from all or
16f0: 20 6a 75 73 74 22 0a 09 74 72 6f 75 62 6c 65 20   just"..trouble 
1700: 69 6e 66 6f 20 22 20 20 20 20 20 20 20 20 20 20  info "          
1710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1720: 20 20 20 20 20 74 68 65 20 73 70 65 63 69 66 69       the specifi
1730: 65 64 20 70 72 6f 6a 65 63 74 20 74 6f 20 62 65  ed project to be
1740: 20 63 6f 6e 76 65 72 74 65 64 20 61 73 22 0a 09   converted as"..
1750: 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20  trouble info "  
1760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1770: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 61 67               tag
1780: 2e 20 42 6f 74 68 20 70 72 6f 6a 65 63 74 20 61  . Both project a
1790: 6e 64 20 73 79 6d 62 6f 6c 20 6e 61 6d 65 73 20  nd symbol names 
17a0: 61 72 65 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e  are"..trouble in
17b0: 66 6f 20 22 20 20 20 20 20 20 20 20 20 20 20 20  fo "            
17c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d0: 20 20 20 67 6c 6f 62 20 70 61 74 74 65 72 6e 73     glob patterns
17e0: 2e 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f  ."..trouble info
17f0: 20 22 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66   ""..trouble inf
1800: 6f 20 22 20 20 20 20 2d 2d 66 6f 72 63 65 2d 62  o "    --force-b
1810: 72 61 6e 63 68 20 3f 50 52 4f 4a 45 43 54 3a 3f  ranch ?PROJECT:?
1820: 53 59 4d 42 4f 4c 22 0a 09 74 72 6f 75 62 6c 65  SYMBOL"..trouble
1830: 20 69 6e 66 6f 20 22 20 20 20 20 20 20 20 20 20   info "         
1840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1850: 20 20 20 20 20 20 46 6f 72 63 65 20 74 68 65 20        Force the 
1860: 6e 61 6d 65 64 20 73 79 6d 62 6f 6c 20 66 72 6f  named symbol fro
1870: 6d 20 61 6c 6c 20 6f 72 20 6a 75 73 74 22 0a 09  m all or just"..
1880: 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20  trouble info "  
1890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
18b0: 20 73 70 65 63 69 66 69 65 64 20 70 72 6f 6a 65   specified proje
18c0: 63 74 20 74 6f 20 62 65 20 63 6f 6e 76 65 72 74  ct to be convert
18d0: 65 64 20 61 73 22 0a 09 74 72 6f 75 62 6c 65 20  ed as"..trouble 
18e0: 69 6e 66 6f 20 22 20 20 20 20 20 20 20 20 20 20  info "          
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1900: 20 20 20 20 20 62 72 61 6e 63 68 2e 20 42 6f 74       branch. Bot
1910: 68 20 70 72 6f 6a 65 63 74 20 61 6e 64 20 73 79  h project and sy
1920: 6d 62 6f 6c 20 6e 61 6d 65 73 22 0a 09 74 72 6f  mbol names"..tro
1930: 75 62 6c 65 20 69 6e 66 6f 20 22 20 20 20 20 20  uble info "     
1940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1950: 20 20 20 20 20 20 20 20 20 20 61 72 65 20 67 6c            are gl
1960: 6f 62 20 70 61 74 74 65 72 6e 73 2e 22 0a 09 74  ob patterns."..t
1970: 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 22 0a 09  rouble info ""..
1980: 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20  trouble info "  
1990: 20 20 2d 2d 64 6f 74 73 20 50 41 54 48 20 20 20    --dots PATH   
19a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 57 72 69               Wri
19b0: 74 65 20 74 68 65 20 63 68 61 6e 67 65 73 65 74  te the changeset
19c0: 20 67 72 61 70 68 73 20 62 65 66 6f 72 65 2c 20   graphs before, 
19d0: 61 66 74 65 72 2c 22 0a 09 74 72 6f 75 62 6c 65  after,"..trouble
19e0: 20 69 6e 66 6f 20 22 20 20 20 20 20 20 20 20 20   info "         
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a00: 20 20 20 20 20 20 61 6e 64 20 64 75 72 69 6e 67        and during
1a10: 20 62 72 65 61 6b 69 6e 67 20 74 68 65 20 6f 66   breaking the of
1a20: 20 63 79 63 6c 65 73 20 74 6f 20 74 68 65 22 0a   cycles to the".
1a30: 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20  .trouble info " 
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 69                di
1a60: 72 65 63 6f 74 72 79 20 50 41 54 48 2c 20 75 73  recotry PATH, us
1a70: 69 6e 67 20 47 72 61 70 68 56 69 7a 27 73 20 64  ing GraphViz's d
1a80: 6f 74 20 66 6f 72 6d 61 74 22 0a 09 74 72 6f 75  ot format"..trou
1a90: 62 6c 65 20 69 6e 66 6f 20 22 22 0a 0a 09 23 20  ble info ""...# 
1aa0: 2d 2d 70 72 6f 6a 65 63 74 2c 20 2d 2d 63 61 63  --project, --cac
1ab0: 68 65 0a 09 23 20 2e 2e 2e 0a 09 72 65 74 75 72  he..# .....retur
1ac0: 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  n.    }..    pro
1ad0: 63 20 50 72 69 6e 74 56 65 72 73 69 6f 6e 20 7b  c PrintVersion {
1ae0: 7d 20 7b 0a 09 67 6c 6f 62 61 6c 20 61 72 67 76  } {..global argv
1af0: 30 0a 09 73 65 74 20 76 20 5b 70 61 63 6b 61 67  0..set v [packag
1b00: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f  e require vc::fo
1b10: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
1b20: 73 5d 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f  s]..trouble info
1b30: 20 22 24 61 72 67 76 30 20 76 24 76 22 0a 09 72   "$argv0 v$v"..r
1b40: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
1b50: 20 70 72 6f 63 20 55 73 61 67 65 20 7b 7b 74 65   proc Usage {{te
1b60: 78 74 20 7b 7d 7d 7d 20 7b 0a 09 67 6c 6f 62 61  xt {}}} {..globa
1b70: 6c 20 61 72 67 76 30 0a 09 74 72 6f 75 62 6c 65  l argv0..trouble
1b80: 20 66 61 74 61 6c 20 22 55 73 61 67 65 3a 20 24   fatal "Usage: $
1b90: 61 72 67 76 30 20 24 75 73 61 67 65 22 0a 09 69  argv0 $usage"..i
1ba0: 66 20 7b 24 74 65 78 74 20 6e 65 20 22 22 7d 20  f {$text ne ""} 
1bb0: 7b 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20  { trouble fatal 
1bc0: 22 24 74 65 78 74 22 20 7d 0a 09 65 78 69 74 20  "$text" }..exit 
1bd0: 31 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23  1.    }..    # #
1be0: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
1bf0: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
1c00: 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65  ####.    ## Inte
1c10: 72 6e 61 6c 20 6d 65 74 68 6f 64 73 2c 20 63 6f  rnal methods, co
1c20: 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 6f 63 65  mmand line proce
1c30: 73 73 69 6e 67 0a 0a 20 20 20 20 74 79 70 65 76  ssing..    typev
1c40: 61 72 69 61 62 6c 65 20 75 73 61 67 65 20 20 20  ariable usage   
1c50: 20 20 22 3f 6f 70 74 69 6f 6e 20 3f 76 61 6c 75    "?option ?valu
1c60: 65 3f 2e 2e 2e 3f 20 63 76 73 2d 72 65 70 6f 73  e?...? cvs-repos
1c70: 69 74 6f 72 79 2d 70 61 74 68 22 0a 20 20 20 20  itory-path".    
1c80: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6e 6f 63  typevariable noc
1c90: 76 73 20 20 20 20 20 22 20 20 20 20 20 20 20 54  vs     "       T
1ca0: 68 65 20 63 76 73 2d 72 65 70 6f 73 69 74 6f 72  he cvs-repositor
1cb0: 79 2d 70 61 74 68 20 69 73 20 6d 69 73 73 69 6e  y-path is missin
1cc0: 67 2e 22 0a 20 20 20 20 74 79 70 65 76 61 72 69  g.".    typevari
1cd0: 61 62 6c 65 20 62 61 64 6f 70 74 69 6f 6e 20 22  able badoption "
1ce0: 20 20 20 20 20 20 20 42 61 64 20 6f 70 74 69 6f         Bad optio
1cf0: 6e 20 22 0a 20 20 20 20 74 79 70 65 76 61 72 69  n ".    typevari
1d00: 61 62 6c 65 20 67 65 74 68 65 6c 70 20 20 20 22  able gethelp   "
1d10: 20 20 20 20 20 20 20 55 73 65 20 2d 2d 68 65 6c         Use --hel
1d20: 70 20 74 6f 20 67 65 74 20 68 65 6c 70 2e 22 0a  p to get help.".
1d30: 0a 20 20 20 20 70 72 6f 63 20 49 73 4f 70 74 69  .    proc IsOpti
1d40: 6f 6e 20 7b 61 76 20 5f 20 6f 76 7d 20 7b 0a 09  on {av _ ov} {..
1d50: 75 70 76 61 72 20 31 20 24 61 76 20 61 72 67 75  upvar 1 $av argu
1d60: 6d 65 6e 74 73 20 24 6f 76 20 6f 70 74 69 6f 6e  ments $ov option
1d70: 0a 09 73 65 74 20 63 61 6e 64 69 64 61 74 65 20  ..set candidate 
1d80: 5b 6c 69 6e 64 65 78 20 24 61 72 67 75 6d 65 6e  [lindex $argumen
1d90: 74 73 20 30 5d 0a 09 69 66 20 7b 21 5b 73 74 72  ts 0]..if {![str
1da0: 69 6e 67 20 6d 61 74 63 68 20 2d 2a 20 24 63 61  ing match -* $ca
1db0: 6e 64 69 64 61 74 65 5d 7d 20 7b 72 65 74 75 72  ndidate]} {retur
1dc0: 6e 20 30 7d 0a 09 73 65 74 20 6f 70 74 69 6f 6e  n 0}..set option
1dd0: 20 20 20 20 24 63 61 6e 64 69 64 61 74 65 0a 09      $candidate..
1de0: 73 65 74 20 61 72 67 75 6d 65 6e 74 73 20 5b 6c  set arguments [l
1df0: 72 61 6e 67 65 20 24 61 72 67 75 6d 65 6e 74 73  range $arguments
1e00: 20 31 20 65 6e 64 5d 0a 09 72 65 74 75 72 6e 20   1 end]..return 
1e10: 31 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f  1.    }..    pro
1e20: 63 20 56 61 6c 75 65 20 7b 61 76 7d 20 7b 0a 09  c Value {av} {..
1e30: 75 70 76 61 72 20 31 20 24 61 76 20 61 72 67 75  upvar 1 $av argu
1e40: 6d 65 6e 74 73 0a 09 73 65 74 20 76 20 20 20 20  ments..set v    
1e50: 20 20 20 20 20 5b 6c 69 6e 64 65 78 20 24 61 72       [lindex $ar
1e60: 67 75 6d 65 6e 74 73 20 30 5d 0a 09 73 65 74 20  guments 0]..set 
1e70: 61 72 67 75 6d 65 6e 74 73 20 5b 6c 72 61 6e 67  arguments [lrang
1e80: 65 20 24 61 72 67 75 6d 65 6e 74 73 20 31 20 65  e $arguments 1 e
1e90: 6e 64 5d 0a 09 72 65 74 75 72 6e 20 24 76 0a 20  nd]..return $v. 
1ea0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23 23     }..    # # ##
1eb0: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
1ec0: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
1ed0: 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72 6e 61  #.    ## Interna
1ee0: 6c 20 6d 65 74 68 6f 64 73 2c 20 73 74 61 74 65  l methods, state
1ef0: 20 76 61 6c 69 64 61 74 69 6f 6e 0a 0a 20 20 20   validation..   
1f00: 20 70 72 6f 63 20 56 61 6c 69 64 61 74 65 20 7b   proc Validate {
1f10: 7d 20 7b 0a 09 23 20 50 72 65 76 65 6e 74 20 69  } {..# Prevent i
1f20: 6e 2d 64 65 70 74 68 20 76 61 6c 69 64 61 74 69  n-depth validati
1f30: 6f 6e 20 69 66 20 74 68 65 20 6f 70 74 69 6f 6e  on if the option
1f40: 73 20 77 65 72 65 20 61 6c 72 65 61 64 79 20 62  s were already b
1f50: 61 64 2e 0a 09 74 72 6f 75 62 6c 65 20 61 62 6f  ad...trouble abo
1f60: 72 74 3f 0a 0a 09 72 65 70 6f 73 69 74 6f 72 79  rt?...repository
1f70: 20 76 61 6c 69 64 61 74 65 0a 09 73 74 61 74 65   validate..state
1f80: 20 20 20 20 20 20 73 65 74 75 70 0a 0a 09 74 72        setup...tr
1f90: 6f 75 62 6c 65 20 61 62 6f 72 74 3f 0a 09 72 65  ouble abort?..re
1fa0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
1fb0: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
1fc0: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
1fd0: 23 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 43  #######.    ## C
1fe0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20  onfiguration..  
1ff0: 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69 6e 73    pragma -hasins
2000: 74 61 6e 63 65 73 20 20 20 6e 6f 20 3b 20 23 20  tances   no ; # 
2010: 73 69 6e 67 6c 65 74 6f 6e 0a 20 20 20 20 70 72  singleton.    pr
2020: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69 6e 66  agma -hastypeinf
2030: 6f 20 20 20 20 6e 6f 20 3b 20 23 20 6e 6f 20 69  o    no ; # no i
2040: 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20  ntrospection.   
2050: 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65   pragma -hastype
2060: 64 65 73 74 72 6f 79 20 6e 6f 20 3b 20 23 20 69  destroy no ; # i
2070: 6d 6d 6f 72 74 61 6c 0a 0a 20 20 20 20 23 20 23  mmortal..    # #
2080: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
2090: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
20a0: 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63  ####.}..namespac
20b0: 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73  e eval ::vc::fos
20c0: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
20d0: 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61 63 65   {.    namespace
20e0: 20 65 78 70 6f 72 74 20 6f 70 74 69 6f 6e 0a 20   export option. 
20f0: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
2100: 6c 20 6f 70 74 69 6f 6e 20 7b 0a 09 6e 61 6d 65  l option {..name
2110: 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76  space import ::v
2120: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a  c::tools::misc::
2130: 73 74 72 69 70 74 72 61 69 6c 69 6e 67 73 6c 61  striptrailingsla
2140: 73 68 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d  sh..namespace im
2150: 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69  port ::vc::fossi
2160: 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a  l::import::cvs::
2170: 70 61 73 73 0a 09 6e 61 6d 65 73 70 61 63 65 20  pass..namespace 
2180: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73  import ::vc::fos
2190: 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73  sil::import::cvs
21a0: 3a 3a 70 61 73 73 3a 3a 63 6f 6c 6c 61 72 0a 09  ::pass::collar..
21b0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
21c0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
21d0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 63 79 63 6c  mport::cvs::cycl
21e0: 65 62 72 65 61 6b 65 72 0a 09 6e 61 6d 65 73 70  ebreaker..namesp
21f0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
2200: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
2210: 3a 63 76 73 3a 3a 72 65 70 6f 73 69 74 6f 72 79  :cvs::repository
2220: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  ..namespace impo
2230: 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a  rt ::vc::fossil:
2240: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74  :import::cvs::st
2250: 61 74 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69  ate..namespace i
2260: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73  mport ::vc::foss
2270: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
2280: 3a 69 6e 74 65 67 72 69 74 79 0a 09 6e 61 6d 65  :integrity..name
2290: 73 70 61 63 65 20 65 76 61 6c 20 70 72 6f 6a 65  space eval proje
22a0: 63 74 20 7b 0a 09 20 20 20 20 6e 61 6d 65 73 70  ct {..    namesp
22b0: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
22c0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
22d0: 3a 63 76 73 3a 3a 70 72 6f 6a 65 63 74 3a 3a 73  :cvs::project::s
22e0: 79 6d 0a 09 7d 0a 09 6e 61 6d 65 73 70 61 63 65  ym..}..namespace
22f0: 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f   import ::vc::to
2300: 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 0a 09 6e 61  ols::trouble..na
2310: 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a  mespace import :
2320: 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 0a  :vc::tools::log.
2330: 20 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20      }.}..# # ## 
2340: 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23  ### ##### ######
2350: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
2360: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23   ###############
2370: 23 23 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a  ######.## Ready.
2380: 0a 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65  .package provide
2390: 20 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70   vc::fossil::imp
23a0: 6f 72 74 3a 3a 63 76 73 3a 3a 6f 70 74 69 6f 6e  ort::cvs::option
23b0: 20 31 2e 30 0a 72 65 74 75 72 6e 0a               1.0.return.