Hex Artifact Content
Not logged in

Artifact b27a6e1d116415dc5ca7d92637f4729089ca5c32:

File tools/cvs2fossil/lib/c2f_pass.tcl part of check-in [47d52d1efd] - Added convenience method for assertions and used it in place of the existing if/trouble internal constructions. Changed API of 'log write' so that we can defer substituation of the message to when the write actually happen, and converted all places which would be hit by double-substitution. The remaining 'log write' calls will be converted incrementally. by aku on 2007-11-28 05:39:49.

0000: 23 23 20 2d 2a 2d 20 74 63 6c 20 2d 2a 2d 0a 23  ## -*- tcl -*-.#
0010: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0020: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0030: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
0040: 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20  ############.## 
0050: 43 6f 70 79 72 69 67 68 74 20 28 63 29 20 32 30  Copyright (c) 20
0060: 30 37 20 41 6e 64 72 65 61 73 20 4b 75 70 72 69  07 Andreas Kupri
0070: 65 73 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66  es..#.# This sof
0080: 74 77 61 72 65 20 69 73 20 6c 69 63 65 6e 73 65  tware is license
0090: 64 20 61 73 20 64 65 73 63 72 69 62 65 64 20 69  d as described i
00a0: 6e 20 74 68 65 20 66 69 6c 65 20 4c 49 43 45 4e  n the file LICEN
00b0: 53 45 2c 20 77 68 69 63 68 0a 23 20 79 6f 75 20  SE, which.# you 
00c0: 73 68 6f 75 6c 64 20 68 61 76 65 20 72 65 63 65  should have rece
00d0: 69 76 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  ived as part of 
00e0: 74 68 69 73 20 64 69 73 74 72 69 62 75 74 69 6f  this distributio
00f0: 6e 2e 0a 23 0a 23 20 54 68 69 73 20 73 6f 66 74  n..#.# This soft
0100: 77 61 72 65 20 63 6f 6e 73 69 73 74 73 20 6f 66  ware consists of
0110: 20 76 6f 6c 75 6e 74 61 72 79 20 63 6f 6e 74 72   voluntary contr
0120: 69 62 75 74 69 6f 6e 73 20 6d 61 64 65 20 62 79  ibutions made by
0130: 20 6d 61 6e 79 0a 23 20 69 6e 64 69 76 69 64 75   many.# individu
0140: 61 6c 73 2e 20 20 46 6f 72 20 65 78 61 63 74 20  als.  For exact 
0150: 63 6f 6e 74 72 69 62 75 74 69 6f 6e 20 68 69 73  contribution his
0160: 74 6f 72 79 2c 20 73 65 65 20 74 68 65 20 72 65  tory, see the re
0170: 76 69 73 69 6f 6e 0a 23 20 68 69 73 74 6f 72 79  vision.# history
0180: 20 61 6e 64 20 6c 6f 67 73 2c 20 61 76 61 69 6c   and logs, avail
0190: 61 62 6c 65 20 61 74 20 68 74 74 70 3a 2f 2f 66  able at http://f
01a0: 6f 73 73 69 6c 2d 73 63 6d 2e 68 77 61 63 69 2e  ossil-scm.hwaci.
01b0: 63 6f 6d 2f 66 6f 73 73 69 6c 0a 23 20 23 20 23  com/fossil.# # #
01c0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
01d0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
01e0: 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23  ## #############
01f0: 23 23 23 23 23 23 23 23 0a 0a 23 23 20 50 61 73  ########..## Pas
0200: 73 20 6d 61 6e 61 67 65 72 2e 20 41 6c 6c 20 70  s manager. All p
0210: 61 73 73 65 73 20 72 65 67 69 73 74 65 72 20 68  asses register h
0220: 65 72 65 2c 20 77 69 74 68 20 63 6f 64 65 2c 20  ere, with code, 
0230: 64 65 73 63 72 69 70 74 69 6f 6e 2c 20 61 6e 64  description, and
0240: 0a 23 23 20 63 61 6c 6c 62 61 63 6b 73 20 28 2e  .## callbacks (.
0250: 2e 2e 20 73 65 74 75 70 2c 20 72 75 6e 2c 20 66  .. setup, run, f
0260: 69 6e 61 6c 69 7a 65 29 2e 20 4f 70 74 69 6f 6e  inalize). Option
0270: 20 70 72 6f 63 65 73 73 69 6e 67 20 61 6e 64 20   processing and 
0280: 68 65 6c 70 0a 23 23 20 71 75 65 72 79 20 74 68  help.## query th
0290: 69 73 20 6d 61 6e 61 67 65 72 20 74 6f 20 64 79  is manager to dy
02a0: 6e 61 6d 69 63 61 6c 6c 79 20 63 72 65 61 74 65  namically create
02b0: 20 74 68 65 20 72 65 6c 65 76 61 6e 74 20 74 65   the relevant te
02c0: 78 74 73 2e 0a 0a 23 20 23 20 23 23 20 23 23 23  xts...# # ## ###
02d0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23  ############# ##
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 0a 23 23 20 52 65 71 75 69 72 65 6d 65  ###.## Requireme
0310: 6e 74 73 0a 0a 70 61 63 6b 61 67 65 20 72 65 71  nts..package req
0320: 75 69 72 65 20 54 63 6c 20 38 2e 34 20 20 20 20  uire Tcl 8.4    
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0340: 20 20 20 20 20 20 20 20 3b 20 23 20 52 65 71 75          ; # Requ
0350: 69 72 65 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61  ired runtime..pa
0360: 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73 6e  ckage require sn
0370: 69 74 20 20 20 20 20 20 20 20 20 20 20 20 20 20  it              
0380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0390: 20 3b 20 23 20 4f 4f 20 73 79 73 74 65 6d 2e 0a   ; # OO system..
03a0: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
03b0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
03c0: 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74 65 20 20  rt::cvs::state  
03d0: 20 20 20 3b 20 23 20 53 74 61 74 65 20 73 74 6f     ; # State sto
03e0: 72 61 67 65 0a 70 61 63 6b 61 67 65 20 72 65 71  rage.package req
03f0: 75 69 72 65 20 76 63 3a 3a 66 6f 73 73 69 6c 3a  uire vc::fossil:
0400: 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69 6e  :import::cvs::in
0410: 74 65 67 72 69 74 79 20 3b 20 23 20 53 74 61 74  tegrity ; # Stat
0420: 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
0430: 6b 73 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75  ks..package requ
0440: 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6d  ire vc::tools::m
0450: 69 73 63 20 20 20 20 20 20 20 20 20 20 20 20 20  isc             
0460: 20 20 20 20 20 20 20 3b 20 23 20 54 65 78 74 20         ; # Text 
0470: 66 6f 72 6d 61 74 74 69 6e 67 0a 70 61 63 6b 61  formatting.packa
0480: 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 74  ge require vc::t
0490: 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65 20 20 20  ools::trouble   
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 3b 20                ; 
04b0: 23 20 45 72 72 6f 72 20 72 65 70 6f 72 74 69 6e  # Error reportin
04c0: 67 2e 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69  g..package requi
04d0: 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f  re vc::tools::lo
04e0: 67 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g               
04f0: 20 20 20 20 20 20 3b 20 23 20 55 73 65 72 20 66        ; # User f
0500: 65 65 64 62 61 63 6b 2e 0a 70 61 63 6b 61 67 65  eedback..package
0510: 20 72 65 71 75 69 72 65 20 73 74 72 75 63 74 3a   require struct:
0520: 3a 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20  :list           
0530: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20              ; # 
0540: 50 6f 72 74 61 62 6c 65 20 6c 61 73 73 69 67 6e  Portable lassign
0550: 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23 23  ..# # ## ### ###
0560: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0570: 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23  ######### ######
0580: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  ###############.
0590: 23 23 0a 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a  ##..snit::type :
05a0: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
05b0: 6f 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 20 7b  ort::cvs::pass {
05c0: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
05d0: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
05e0: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
05f0: 20 23 23 20 50 75 62 6c 69 63 20 41 50 49 2c 20   ## Public API, 
0600: 4d 65 74 68 6f 64 73 20 28 53 65 74 75 70 2c 20  Methods (Setup, 
0610: 71 75 65 72 79 29 0a 0a 20 20 20 20 74 79 70 65  query)..    type
0620: 6d 65 74 68 6f 64 20 64 65 66 69 6e 65 20 7b 6e  method define {n
0630: 61 6d 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20  ame description 
0640: 63 6f 6d 6d 61 6e 64 7d 20 7b 0a 09 69 6e 74 65  command} {..inte
0650: 67 72 69 74 79 20 61 73 73 65 72 74 20 7b 0a 09  grity assert {..
0660: 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 69 73 74      ![info exist
0670: 73 20 6d 79 64 65 73 63 28 24 6e 61 6d 65 29 5d  s mydesc($name)]
0680: 0a 09 7d 20 7b 4d 75 6c 74 69 70 6c 65 20 64 65  ..} {Multiple de
0690: 66 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 70 61  finitions for pa
06a0: 73 73 20 63 6f 64 65 20 27 24 6e 61 6d 65 27 7d  ss code '$name'}
06b0: 0a 09 6c 61 70 70 65 6e 64 20 6d 79 70 61 73 73  ..lappend mypass
06c0: 65 73 20 24 6e 61 6d 65 0a 09 73 65 74 20 6d 79  es $name..set my
06d0: 64 65 73 63 28 24 6e 61 6d 65 29 20 24 64 65 73  desc($name) $des
06e0: 63 72 69 70 74 69 6f 6e 0a 09 73 65 74 20 6d 79  cription..set my
06f0: 63 6d 64 28 24 6e 61 6d 65 29 20 20 24 63 6f 6d  cmd($name)  $com
0700: 6d 61 6e 64 0a 09 72 65 74 75 72 6e 0a 20 20 20  mand..return.   
0710: 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68   }..    typemeth
0720: 6f 64 20 68 65 6c 70 20 7b 7d 20 7b 0a 09 74 72  od help {} {..tr
0730: 6f 75 62 6c 65 20 69 6e 66 6f 20 22 22 0a 09 74  ouble info ""..t
0740: 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 43 6f 6e  rouble info "Con
0750: 76 65 72 73 69 6f 6e 20 70 61 73 73 65 73 3a 22  version passes:"
0760: 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22  ..trouble info "
0770: 22 0a 09 73 65 74 20 6e 20 30 0a 0a 09 73 65 74  "..set n 0...set
0780: 20 63 6c 65 6e 20 5b 6d 61 78 20 5b 73 74 72 75   clen [max [stru
0790: 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 24 6d 79  ct::list map $my
07a0: 70 61 73 73 65 73 20 7b 73 74 72 69 6e 67 20 6c  passes {string l
07b0: 65 6e 67 74 68 7d 5d 5d 0a 09 73 65 74 20 63 66  ength}]]..set cf
07c0: 6d 74 20 25 2d 24 7b 63 6c 65 6e 7d 73 0a 09 73  mt %-${clen}s..s
07d0: 65 74 20 6e 66 6d 74 20 25 5b 73 74 72 69 6e 67  et nfmt %[string
07e0: 20 6c 65 6e 67 74 68 20 5b 6c 6c 65 6e 67 74 68   length [llength
07f0: 20 24 6d 79 70 61 73 73 65 73 5d 5d 73 0a 0a 09   $mypasses]]s...
0800: 66 6f 72 65 61 63 68 20 63 6f 64 65 20 24 6d 79  foreach code $my
0810: 70 61 73 73 65 73 20 7b 0a 09 20 20 20 20 74 72  passes {..    tr
0820: 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20 5b 66  ouble info "  [f
0830: 6f 72 6d 61 74 20 24 6e 66 6d 74 20 24 6e 5d 3a  ormat $nfmt $n]:
0840: 20 5b 66 6f 72 6d 61 74 20 24 63 66 6d 74 20 24   [format $cfmt $
0850: 63 6f 64 65 5d 20 3a 20 24 6d 79 64 65 73 63 28  code] : $mydesc(
0860: 24 63 6f 64 65 29 22 0a 09 20 20 20 20 69 6e 63  $code)"..    inc
0870: 72 20 6e 0a 09 7d 0a 09 74 72 6f 75 62 6c 65 20  r n..}..trouble 
0880: 69 6e 66 6f 20 22 22 0a 09 72 65 74 75 72 6e 0a  info ""..return.
0890: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23      }..    # # #
08a0: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
08b0: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
08c0: 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69 63  ##.    ## Public
08d0: 20 41 50 49 2c 20 4d 65 74 68 6f 64 73 20 28 45   API, Methods (E
08e0: 78 65 63 75 74 69 6f 6e 29 0a 0a 20 20 20 20 74  xecution)..    t
08f0: 79 70 65 6d 65 74 68 6f 64 20 73 65 6c 65 63 74  ypemethod select
0900: 20 7b 70 61 73 73 64 65 66 7d 20 7b 0a 09 73 65   {passdef} {..se
0910: 74 20 70 6c 20 5b 73 70 6c 69 74 20 24 70 61 73  t pl [split $pas
0920: 73 64 65 66 20 3a 5d 0a 09 69 66 20 7b 5b 6c 6c  sdef :]..if {[ll
0930: 65 6e 67 74 68 20 24 70 6c 5d 20 3e 20 32 7d 20  ength $pl] > 2} 
0940: 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20 66  {..    trouble f
0950: 61 74 61 6c 20 22 42 61 64 20 70 61 73 73 20 64  atal "Bad pass d
0960: 65 66 69 6e 69 74 69 6f 6e 20 27 24 70 61 73 73  efinition '$pass
0970: 64 65 66 27 22 0a 09 20 20 20 20 74 72 6f 75 62  def'"..    troub
0980: 6c 65 20 66 61 74 61 6c 20 22 45 78 70 65 63 74  le fatal "Expect
0990: 65 64 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 27  ed at most one '
09a0: 3a 27 22 0a 09 7d 20 65 6c 73 65 69 66 20 7b 5b  :'"..} elseif {[
09b0: 6c 6c 65 6e 67 74 68 20 24 70 6c 5d 20 3d 3d 20  llength $pl] == 
09c0: 32 7d 20 7b 0a 09 20 20 20 20 73 74 72 75 63 74  2} {..    struct
09d0: 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24 70  ::list assign $p
09e0: 6c 20 73 74 61 72 74 20 65 6e 64 0a 0a 09 20 20  l start end...  
09f0: 20 20 69 66 20 7b 28 24 73 74 61 72 74 20 65 71    if {($start eq
0a00: 20 22 22 29 20 26 26 20 28 24 65 6e 64 20 65 71   "") && ($end eq
0a10: 20 22 22 29 7d 20 7b 0a 09 09 74 72 6f 75 62 6c   "")} {...troubl
0a20: 65 20 66 61 74 61 6c 20 22 53 70 65 63 69 66 79  e fatal "Specify
0a30: 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 66   at least one of
0a40: 20 73 74 61 72 74 2d 20 6f 72 20 65 6e 64 2d 70   start- or end-p
0a50: 61 73 73 22 0a 09 09 73 65 74 20 6f 6b 20 30 0a  ass"...set ok 0.
0a60: 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09 09  .    } else {...
0a70: 73 65 74 20 6f 6b 20 31 0a 09 09 4f 6b 3f 20 24  set ok 1...Ok? $
0a80: 73 74 61 72 74 20 73 74 61 72 74 20 6f 6b 0a 09  start start ok..
0a90: 09 4f 6b 3f 20 24 65 6e 64 20 20 20 65 6e 64 20  .Ok? $end   end 
0aa0: 20 20 6f 6b 0a 09 20 20 20 20 7d 0a 0a 09 20 20    ok..    }...  
0ab0: 20 20 69 66 20 7b 24 6f 6b 7d 20 7b 0a 09 09 73    if {$ok} {...s
0ac0: 65 74 20 6d 79 73 74 61 72 74 20 5b 43 6f 6e 76  et mystart [Conv
0ad0: 65 72 74 20 24 73 74 61 72 74 20 30 5d 0a 09 09  ert $start 0]...
0ae0: 73 65 74 20 6d 79 65 6e 64 20 20 20 5b 43 6f 6e  set myend   [Con
0af0: 76 65 72 74 20 24 65 6e 64 20 20 20 5b 65 78 70  vert $end   [exp
0b00: 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d 79 70  r {[llength $myp
0b10: 61 73 73 65 73 5d 20 2d 20 31 7d 5d 5d 0a 09 09  asses] - 1}]]...
0b20: 69 66 20 7b 24 6d 79 73 74 61 72 74 20 3e 20 24  if {$mystart > $
0b30: 6d 79 65 6e 64 7d 20 7b 0a 09 09 20 20 20 20 74  myend} {...    t
0b40: 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22 53 74  rouble fatal "St
0b50: 61 72 74 20 70 61 73 73 20 69 73 20 61 66 74 65  art pass is afte
0b60: 72 20 65 6e 64 20 70 61 73 73 22 0a 09 09 7d 0a  r end pass"...}.
0b70: 09 20 20 20 20 7d 0a 09 7d 20 65 6c 73 65 69 66  .    }..} elseif
0b80: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 6c 5d 20   {[llength $pl] 
0b90: 3c 20 32 7d 20 7b 0a 09 20 20 20 20 73 65 74 20  < 2} {..    set 
0ba0: 73 74 61 72 74 20 5b 6c 69 6e 64 65 78 20 24 70  start [lindex $p
0bb0: 6c 20 30 5d 0a 09 20 20 20 20 4f 6b 3f 20 24 73  l 0]..    Ok? $s
0bc0: 74 61 72 74 20 22 22 20 5f 5f 64 75 6d 6d 79 5f  tart "" __dummy_
0bd0: 5f 20 30 0a 09 20 20 20 20 73 65 74 20 6d 79 73  _ 0..    set mys
0be0: 74 61 72 74 20 5b 49 64 20 24 73 74 61 72 74 5d  tart [Id $start]
0bf0: 0a 09 20 20 20 20 73 65 74 20 6d 79 65 6e 64 20  ..    set myend 
0c00: 20 20 24 6d 79 73 74 61 72 74 0a 09 7d 0a 20 20    $mystart..}.  
0c10: 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74    }..    typemet
0c20: 68 6f 64 20 72 75 6e 20 7b 7d 20 7b 0a 09 69 66  hod run {} {..if
0c30: 20 7b 24 6d 79 73 74 61 72 74 20 3c 20 30 7d 20   {$mystart < 0} 
0c40: 7b 73 65 74 20 6d 79 73 74 61 72 74 20 30 7d 0a  {set mystart 0}.
0c50: 09 69 66 20 7b 24 6d 79 65 6e 64 20 20 20 3c 20  .if {$myend   < 
0c60: 30 7d 20 7b 73 65 74 20 6d 79 65 6e 64 20 5b 65  0} {set myend [e
0c70: 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d  xpr {[llength $m
0c80: 79 70 61 73 73 65 73 5d 20 2d 20 31 7d 5d 7d 0a  ypasses] - 1}]}.
0c90: 0a 09 73 65 74 20 73 6b 69 70 70 65 64 20 5b 6c  ..set skipped [l
0ca0: 72 61 6e 67 65 20 24 6d 79 70 61 73 73 65 73 20  range $mypasses 
0cb0: 30 20 5b 65 78 70 72 20 7b 24 6d 79 73 74 61 72  0 [expr {$mystar
0cc0: 74 20 2d 20 31 7d 5d 5d 0a 09 73 65 74 20 72 75  t - 1}]]..set ru
0cd0: 6e 20 20 20 20 20 5b 6c 72 61 6e 67 65 20 24 6d  n     [lrange $m
0ce0: 79 70 61 73 73 65 73 20 24 6d 79 73 74 61 72 74  ypasses $mystart
0cf0: 20 24 6d 79 65 6e 64 5d 0a 09 73 65 74 20 64 65   $myend]..set de
0d00: 66 65 72 65 64 20 5b 6c 72 61 6e 67 65 20 24 6d  fered [lrange $m
0d10: 79 70 61 73 73 65 73 20 5b 65 78 70 72 20 7b 24  ypasses [expr {$
0d20: 6d 79 65 6e 64 20 2b 20 31 7d 5d 20 65 6e 64 5d  myend + 1}] end]
0d30: 0a 0a 09 66 6f 72 65 61 63 68 20 70 20 24 73 6b  ...foreach p $sk
0d40: 69 70 70 65 64 20 7b 0a 09 20 20 20 20 6c 6f 67  ipped {..    log
0d50: 20 77 72 69 74 65 20 30 20 70 61 73 73 20 22 53   write 0 pass "S
0d60: 6b 69 70 20 20 24 70 22 0a 09 20 20 20 20 43 61  kip  $p"..    Ca
0d70: 6c 6c 20 24 70 20 6c 6f 61 64 0a 09 7d 0a 09 66  ll $p load..}..f
0d80: 6f 72 65 61 63 68 20 70 20 24 72 75 6e 20 7b 0a  oreach p $run {.
0d90: 09 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 30  .    log write 0
0da0: 20 70 61 73 73 20 22 53 65 74 75 70 20 24 70 22   pass "Setup $p"
0db0: 0a 09 20 20 20 20 43 61 6c 6c 20 24 70 20 73 65  ..    Call $p se
0dc0: 74 75 70 0a 09 7d 0a 09 66 6f 72 65 61 63 68 20  tup..}..foreach 
0dd0: 70 20 24 72 75 6e 20 7b 0a 09 20 20 20 20 6c 6f  p $run {..    lo
0de0: 67 20 77 72 69 74 65 20 30 20 70 61 73 73 20 22  g write 0 pass "
0df0: 42 65 67 69 6e 20 24 70 22 0a 09 20 20 20 20 54  Begin $p"..    T
0e00: 69 6d 65 20 24 70 20 5b 6c 69 6e 64 65 78 20 5b  ime $p [lindex [
0e10: 74 69 6d 65 20 7b 43 61 6c 6c 20 24 70 20 72 75  time {Call $p ru
0e20: 6e 7d 20 31 5d 20 30 5d 0a 09 20 20 20 20 6c 6f  n} 1] 0]..    lo
0e30: 67 20 77 72 69 74 65 20 30 20 70 61 73 73 20 22  g write 0 pass "
0e40: 44 6f 6e 65 20 20 24 70 22 0a 09 20 20 20 20 74  Done  $p"..    t
0e50: 72 6f 75 62 6c 65 20 61 62 6f 72 74 3f 0a 09 7d  rouble abort?..}
0e60: 0a 09 66 6f 72 65 61 63 68 20 70 20 24 64 65 66  ..foreach p $def
0e70: 65 72 65 64 20 7b 0a 09 20 20 20 20 6c 6f 67 20  ered {..    log 
0e80: 77 72 69 74 65 20 30 20 70 61 73 73 20 22 44 65  write 0 pass "De
0e90: 66 65 72 20 24 70 22 0a 09 20 20 20 20 43 61 6c  fer $p"..    Cal
0ea0: 6c 20 24 70 20 64 69 73 63 61 72 64 0a 09 7d 0a  l $p discard..}.
0eb0: 0a 09 73 74 61 74 65 20 72 65 6c 65 61 73 65 0a  ..state release.
0ec0: 09 53 68 6f 77 54 69 6d 65 73 0a 09 72 65 74 75  .ShowTimes..retu
0ed0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  rn.    }..    pr
0ee0: 6f 63 20 54 69 6d 65 20 7b 70 61 73 73 20 75 73  oc Time {pass us
0ef0: 65 63 6f 6e 64 73 7d 20 7b 0a 09 3a 3a 76 61 72  econds} {..::var
0f00: 69 61 62 6c 65 20 6d 79 74 69 6d 65 0a 09 6c 61  iable mytime..la
0f10: 70 70 65 6e 64 20 20 20 20 6d 79 74 69 6d 65 20  ppend    mytime 
0f20: 24 70 61 73 73 20 24 75 73 65 63 6f 6e 64 73 0a  $pass $useconds.
0f30: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
0f40: 20 20 20 70 72 6f 63 20 53 68 6f 77 54 69 6d 65     proc ShowTime
0f50: 73 20 7b 7d 20 7b 0a 09 3a 3a 76 61 72 69 61 62  s {} {..::variab
0f60: 6c 65 20 6d 79 74 69 6d 65 0a 09 66 6f 72 65 61  le mytime..forea
0f70: 63 68 20 7b 70 61 73 73 20 75 73 65 63 6f 6e 64  ch {pass usecond
0f80: 73 7d 20 24 6d 79 74 69 6d 65 20 7b 0a 09 20 20  s} $mytime {..  
0f90: 20 20 73 65 74 20 73 65 63 20 5b 66 6f 72 6d 61    set sec [forma
0fa0: 74 20 25 38 2e 32 66 20 5b 65 78 70 72 20 7b 64  t %8.2f [expr {d
0fb0: 6f 75 62 6c 65 28 24 75 73 65 63 6f 6e 64 73 29  ouble($useconds)
0fc0: 2f 31 65 36 7d 5d 5d 0a 09 20 20 20 20 6c 6f 67  /1e6}]]..    log
0fd0: 20 77 72 69 74 65 20 30 20 70 61 73 73 20 22 24   write 0 pass "$
0fe0: 73 65 63 20 73 65 63 2f 24 70 61 73 73 22 0a 09  sec sec/$pass"..
0ff0: 7d 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  }..return.    }.
1000: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
1010: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
1020: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
1030: 20 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74   ## Internal met
1040: 68 6f 64 73 0a 0a 20 20 20 20 70 72 6f 63 20 4f  hods..    proc O
1050: 6b 3f 20 7b 63 6f 64 65 20 6c 61 62 65 6c 20 6f  k? {code label o
1060: 76 20 7b 65 6d 70 74 79 6f 6b 20 31 7d 7d 20 7b  v {emptyok 1}} {
1070: 0a 09 75 70 76 61 72 20 31 20 24 6f 76 20 6f 6b  ..upvar 1 $ov ok
1080: 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d 79 64  ..::variable myd
1090: 65 73 63 0a 09 69 66 20 7b 24 65 6d 70 74 79 6f  esc..if {$emptyo
10a0: 6b 20 26 26 20 28 24 63 6f 64 65 20 65 71 20 22  k && ($code eq "
10b0: 22 29 7d 20 72 65 74 75 72 6e 0a 09 69 66 20 7b  ")} return..if {
10c0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 64  [info exists myd
10d0: 65 73 63 28 24 63 6f 64 65 29 5d 7d 20 72 65 74  esc($code)]} ret
10e0: 75 72 6e 0a 09 69 66 20 7b 24 6c 61 62 65 6c 20  urn..if {$label 
10f0: 6e 65 20 22 22 7d 20 7b 61 70 70 65 6e 64 20 6c  ne ""} {append l
1100: 61 62 65 6c 20 22 20 22 7d 0a 09 74 72 6f 75 62  abel " "}..troub
1110: 6c 65 20 66 61 74 61 6c 20 22 42 61 64 20 24 7b  le fatal "Bad ${
1120: 6c 61 62 65 6c 7d 70 61 73 73 20 63 6f 64 65 20  label}pass code 
1130: 24 63 6f 64 65 22 0a 09 73 65 74 20 6f 6b 20 30  $code"..set ok 0
1140: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
1150: 20 20 20 20 70 72 6f 63 20 43 6f 6e 76 65 72 74      proc Convert
1160: 20 7b 63 6f 64 65 20 64 65 66 61 75 6c 74 7d 20   {code default} 
1170: 7b 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d 79  {..::variable my
1180: 70 61 73 73 65 73 0a 09 72 65 74 75 72 6e 20 5b  passes..return [
1190: 65 78 70 72 20 7b 28 24 63 6f 64 65 20 65 71 20  expr {($code eq 
11a0: 22 22 29 20 3f 20 24 64 65 66 61 75 6c 74 20 3a  "") ? $default :
11b0: 20 5b 49 64 20 24 63 6f 64 65 5d 7d 5d 0a 20 20   [Id $code]}].  
11c0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 49 64    }..    proc Id
11d0: 20 7b 63 6f 64 65 7d 20 7b 0a 09 3a 3a 76 61 72   {code} {..::var
11e0: 69 61 62 6c 65 20 6d 79 70 61 73 73 65 73 0a 09  iable mypasses..
11f0: 72 65 74 75 72 6e 20 5b 6c 73 65 61 72 63 68 20  return [lsearch 
1200: 2d 65 78 61 63 74 20 24 6d 79 70 61 73 73 65 73  -exact $mypasses
1210: 20 24 63 6f 64 65 5d 0a 20 20 20 20 7d 0a 0a 20   $code].    }.. 
1220: 20 20 20 70 72 6f 63 20 43 61 6c 6c 20 7b 63 6f     proc Call {co
1230: 64 65 20 61 72 67 73 7d 20 7b 0a 09 3a 3a 76 61  de args} {..::va
1240: 72 69 61 62 6c 65 20 6d 79 63 6d 64 0a 09 73 65  riable mycmd..se
1250: 74 20 63 6d 64 20 24 6d 79 63 6d 64 28 24 63 6f  t cmd $mycmd($co
1260: 64 65 29 0a 09 66 6f 72 65 61 63 68 20 61 20 24  de)..foreach a $
1270: 61 72 67 73 20 7b 20 6c 61 70 70 65 6e 64 20 63  args { lappend c
1280: 6d 64 20 24 61 20 7d 0a 09 65 76 61 6c 20 24 63  md $a }..eval $c
1290: 6d 64 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  md..return.    }
12a0: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
12b0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
12c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
12d0: 20 20 23 23 20 49 6e 74 65 72 6e 61 6c 2c 20 73    ## Internal, s
12e0: 74 61 74 65 0a 0a 20 20 20 20 74 79 70 65 76 61  tate..    typeva
12f0: 72 69 61 62 6c 65 20 6d 79 70 61 73 73 65 73 20  riable mypasses 
1300: 20 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 74       {} ; # List
1310: 20 6f 66 20 72 65 67 69 73 74 65 72 65 64 20 70   of registered p
1320: 61 73 73 65 73 20 28 63 6f 64 65 73 29 2e 0a 20  asses (codes).. 
1330: 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20     typevariable 
1340: 6d 79 64 65 73 63 20 2d 61 72 72 61 79 20 7b 7d  mydesc -array {}
1350: 20 3b 20 23 20 50 61 73 73 20 64 65 73 63 72 69   ; # Pass descri
1360: 70 74 69 6f 6e 73 20 28 6f 6e 65 20 6c 69 6e 65  ptions (one line
1370: 29 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61  )..    typevaria
1380: 62 6c 65 20 6d 79 63 6d 64 20 20 2d 61 72 72 61  ble mycmd  -arra
1390: 79 20 7b 7d 20 3b 20 23 20 50 61 73 73 20 63 61  y {} ; # Pass ca
13a0: 6c 6c 62 61 63 6b 20 63 6f 6d 6d 61 6e 64 2e 0a  llback command..
13b0: 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c  .    typevariabl
13c0: 65 20 6d 79 73 74 61 72 74 20 2d 31 0a 20 20 20  e mystart -1.   
13d0: 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79   typevariable my
13e0: 65 6e 64 20 20 20 2d 31 0a 20 20 20 20 74 79 70  end   -1.    typ
13f0: 65 76 61 72 69 61 62 6c 65 20 6d 79 74 69 6d 65  evariable mytime
1400: 20 20 7b 7d 20 3b 20 23 20 54 69 6d 69 6e 67 20    {} ; # Timing 
1410: 64 61 74 61 20 66 6f 72 20 65 61 63 68 20 65 78  data for each ex
1420: 65 63 75 74 65 64 20 70 61 73 73 2e 0a 0a 20 20  ecuted pass...  
1430: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
1440: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
1450: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
1460: 20 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0a 0a   Configuration..
1470: 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 69      pragma -hasi
1480: 6e 73 74 61 6e 63 65 73 20 20 20 6e 6f 20 3b 20  nstances   no ; 
1490: 23 20 73 69 6e 67 6c 65 74 6f 6e 0a 20 20 20 20  # singleton.    
14a0: 70 72 61 67 6d 61 20 2d 68 61 73 74 79 70 65 69  pragma -hastypei
14b0: 6e 66 6f 20 20 20 20 6e 6f 20 3b 20 23 20 6e 6f  nfo    no ; # no
14c0: 20 69 6e 74 72 6f 73 70 65 63 74 69 6f 6e 0a 20   introspection. 
14d0: 20 20 20 70 72 61 67 6d 61 20 2d 68 61 73 74 79     pragma -hasty
14e0: 70 65 64 65 73 74 72 6f 79 20 6e 6f 20 3b 20 23  pedestroy no ; #
14f0: 20 69 6d 6d 6f 72 74 61 6c 0a 0a 20 20 20 20 23   immortal..    #
1500: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
1510: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
1520: 23 23 23 23 23 23 0a 7d 0a 0a 6e 61 6d 65 73 70  ######.}..namesp
1530: 61 63 65 20 65 76 61 6c 20 3a 3a 76 63 3a 3a 66  ace eval ::vc::f
1540: 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63  ossil::import::c
1550: 76 73 20 7b 0a 20 20 20 20 6e 61 6d 65 73 70 61  vs {.    namespa
1560: 63 65 20 65 78 70 6f 72 74 20 70 61 73 73 0a 20  ce export pass. 
1570: 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 76 61     namespace eva
1580: 6c 20 70 61 73 73 20 7b 0a 09 6e 61 6d 65 73 70  l pass {..namesp
1590: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
15a0: 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a  :fossil::import:
15b0: 3a 63 76 73 3a 3a 73 74 61 74 65 0a 09 6e 61 6d  :cvs::state..nam
15c0: 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a  espace import ::
15d0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
15e0: 72 74 3a 3a 63 76 73 3a 3a 69 6e 74 65 67 72 69  rt::cvs::integri
15f0: 74 79 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d  ty..namespace im
1600: 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73  port ::vc::tools
1610: 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e 61 6d 65 73  ::misc::*..names
1620: 70 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63  pace import ::vc
1630: 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62 6c 65  ::tools::trouble
1640: 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f  ..namespace impo
1650: 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a  rt ::vc::tools::
1660: 6c 6f 67 0a 09 6c 6f 67 20 72 65 67 69 73 74 65  log..log registe
1670: 72 20 70 61 73 73 0a 20 20 20 20 7d 0a 7d 0a 0a  r pass.    }.}..
1680: 23 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23  # # ## ### #####
1690: 20 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23   ######## ######
16a0: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
16b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 23 23  #############.##
16c0: 20 52 65 61 64 79 0a 0a 70 61 63 6b 61 67 65 20   Ready..package 
16d0: 70 72 6f 76 69 64 65 20 76 63 3a 3a 66 6f 73 73  provide vc::foss
16e0: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
16f0: 3a 70 61 73 73 20 31 2e 30 0a 72 65 74 75 72 6e  :pass 1.0.return
1700: 0a                                               .