Hex Artifact Content
Not logged in

Artifact 98d1ccdb7b4b2f9c80fcf511382cc57c63fd2bfa:

File tools/cvs2fossil/lib/c2f_pass.tcl part of check-in [9a763fe596] - Reworked time keeping in the pass manager, the microseconds kept by by the 'time' command flow over after roughly 72 minutes (2^32 microseconds). We now use 'clock seconds' to explicitly keep time. This should flow over only after abuut 136 years. The loss of resolution is ok, the converter does not need it. Seconds are good enough. by aku on 2007-12-06 04:05:36.

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 73  Begin $p"..    s
0e00: 65 74 20 73 65 63 62 65 67 69 6e 20 5b 63 6c 6f  et secbegin [clo
0e10: 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 09 20 20 20  ck seconds]..   
0e20: 20 43 61 6c 6c 20 24 70 20 72 75 6e 0a 09 20 20   Call $p run..  
0e30: 20 20 73 65 74 20 73 65 63 73 74 6f 70 20 20 5b    set secstop  [
0e40: 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0a 09  clock seconds]..
0e50: 20 20 20 20 6c 6f 67 20 77 72 69 74 65 20 30 20      log write 0 
0e60: 70 61 73 73 20 22 44 6f 6e 65 20 20 24 70 22 0a  pass "Done  $p".
0e70: 09 20 20 20 20 54 69 6d 65 20 24 70 20 5b 65 78  .    Time $p [ex
0e80: 70 72 20 7b 24 73 65 63 73 74 6f 70 20 2d 20 24  pr {$secstop - $
0e90: 73 65 63 62 65 67 69 6e 7d 5d 0a 09 20 20 20 20  secbegin}]..    
0ea0: 74 72 6f 75 62 6c 65 20 61 62 6f 72 74 3f 0a 09  trouble abort?..
0eb0: 7d 0a 09 66 6f 72 65 61 63 68 20 70 20 24 64 65  }..foreach p $de
0ec0: 66 65 72 65 64 20 7b 0a 09 20 20 20 20 6c 6f 67  fered {..    log
0ed0: 20 77 72 69 74 65 20 30 20 70 61 73 73 20 22 44   write 0 pass "D
0ee0: 65 66 65 72 20 24 70 22 0a 09 20 20 20 20 43 61  efer $p"..    Ca
0ef0: 6c 6c 20 24 70 20 64 69 73 63 61 72 64 0a 09 7d  ll $p discard..}
0f00: 0a 0a 09 73 74 61 74 65 20 72 65 6c 65 61 73 65  ...state release
0f10: 0a 09 53 68 6f 77 54 69 6d 65 73 0a 09 72 65 74  ..ShowTimes..ret
0f20: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74  urn.    }..    t
0f30: 79 70 65 6d 65 74 68 6f 64 20 63 75 72 72 65 6e  ypemethod curren
0f40: 74 20 7b 7d 20 7b 20 72 65 74 75 72 6e 20 24 6d  t {} { return $m
0f50: 79 63 75 72 72 65 6e 74 70 61 73 73 20 7d 0a 0a  ycurrentpass }..
0f60: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
0f70: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
0f80: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20  ###########.    
0f90: 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68  ## Internal meth
0fa0: 6f 64 73 0a 0a 20 20 20 20 70 72 6f 63 20 54 69  ods..    proc Ti
0fb0: 6d 65 20 7b 70 61 73 73 20 73 65 63 6f 6e 64 73  me {pass seconds
0fc0: 7d 20 7b 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20  } {..::variable 
0fd0: 6d 79 74 69 6d 65 0a 09 6c 61 70 70 65 6e 64 20  mytime..lappend 
0fe0: 20 20 20 6d 79 74 69 6d 65 20 24 70 61 73 73 20     mytime $pass 
0ff0: 24 73 65 63 6f 6e 64 73 0a 09 53 68 6f 77 54 69  $seconds..ShowTi
1000: 6d 65 20 20 20 20 20 20 20 20 20 20 24 70 61 73  me          $pas
1010: 73 20 24 73 65 63 6f 6e 64 73 0a 09 72 65 74 75  s $seconds..retu
1020: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 72  rn.    }..    pr
1030: 6f 63 20 53 68 6f 77 54 69 6d 65 73 20 7b 7d 20  oc ShowTimes {} 
1040: 7b 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d 79  {..::variable my
1050: 74 69 6d 65 0a 09 66 6f 72 65 61 63 68 20 7b 70  time..foreach {p
1060: 61 73 73 20 73 65 63 6f 6e 64 73 7d 20 24 6d 79  ass seconds} $my
1070: 74 69 6d 65 20 7b 0a 09 20 20 20 20 53 68 6f 77  time {..    Show
1080: 54 69 6d 65 20 24 70 61 73 73 20 24 73 65 63 6f  Time $pass $seco
1090: 6e 64 73 0a 09 7d 0a 09 72 65 74 75 72 6e 0a 20  nds..}..return. 
10a0: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 53     }..    proc S
10b0: 68 6f 77 54 69 6d 65 20 7b 70 61 73 73 20 73 65  howTime {pass se
10c0: 63 6f 6e 64 73 7d 20 7b 0a 09 6c 6f 67 20 77 72  conds} {..log wr
10d0: 69 74 65 20 30 20 70 61 73 73 20 22 5b 66 6f 72  ite 0 pass "[for
10e0: 6d 61 74 20 25 38 64 20 24 73 65 63 6f 6e 64 73  mat %8d $seconds
10f0: 5d 20 73 65 63 2f 24 70 61 73 73 22 0a 09 72 65  ] sec/$pass"..re
1100: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
1110: 70 72 6f 63 20 4f 6b 3f 20 7b 63 6f 64 65 20 6c  proc Ok? {code l
1120: 61 62 65 6c 20 6f 76 20 7b 65 6d 70 74 79 6f 6b  abel ov {emptyok
1130: 20 31 7d 7d 20 7b 0a 09 75 70 76 61 72 20 31 20   1}} {..upvar 1 
1140: 24 6f 76 20 6f 6b 0a 09 3a 3a 76 61 72 69 61 62  $ov ok..::variab
1150: 6c 65 20 6d 79 64 65 73 63 0a 09 69 66 20 7b 24  le mydesc..if {$
1160: 65 6d 70 74 79 6f 6b 20 26 26 20 28 24 63 6f 64  emptyok && ($cod
1170: 65 20 65 71 20 22 22 29 7d 20 72 65 74 75 72 6e  e eq "")} return
1180: 0a 09 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  ..if {[info exis
1190: 74 73 20 6d 79 64 65 73 63 28 24 63 6f 64 65 29  ts mydesc($code)
11a0: 5d 7d 20 72 65 74 75 72 6e 0a 09 69 66 20 7b 24  ]} return..if {$
11b0: 6c 61 62 65 6c 20 6e 65 20 22 22 7d 20 7b 61 70  label ne ""} {ap
11c0: 70 65 6e 64 20 6c 61 62 65 6c 20 22 20 22 7d 0a  pend label " "}.
11d0: 09 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22  .trouble fatal "
11e0: 42 61 64 20 24 7b 6c 61 62 65 6c 7d 70 61 73 73  Bad ${label}pass
11f0: 20 63 6f 64 65 20 24 63 6f 64 65 22 0a 09 73 65   code $code"..se
1200: 74 20 6f 6b 20 30 0a 09 72 65 74 75 72 6e 0a 20  t ok 0..return. 
1210: 20 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 43     }..    proc C
1220: 6f 6e 76 65 72 74 20 7b 63 6f 64 65 20 64 65 66  onvert {code def
1230: 61 75 6c 74 7d 20 7b 0a 09 3a 3a 76 61 72 69 61  ault} {..::varia
1240: 62 6c 65 20 6d 79 70 61 73 73 65 73 0a 09 72 65  ble mypasses..re
1250: 74 75 72 6e 20 5b 65 78 70 72 20 7b 28 24 63 6f  turn [expr {($co
1260: 64 65 20 65 71 20 22 22 29 20 3f 20 24 64 65 66  de eq "") ? $def
1270: 61 75 6c 74 20 3a 20 5b 49 64 20 24 63 6f 64 65  ault : [Id $code
1280: 5d 7d 5d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70  ]}].    }..    p
1290: 72 6f 63 20 49 64 20 7b 63 6f 64 65 7d 20 7b 0a  roc Id {code} {.
12a0: 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d 79 70 61  .::variable mypa
12b0: 73 73 65 73 0a 09 72 65 74 75 72 6e 20 5b 6c 73  sses..return [ls
12c0: 65 61 72 63 68 20 2d 65 78 61 63 74 20 24 6d 79  earch -exact $my
12d0: 70 61 73 73 65 73 20 24 63 6f 64 65 5d 0a 20 20  passes $code].  
12e0: 20 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 43 61    }..    proc Ca
12f0: 6c 6c 20 7b 63 6f 64 65 20 61 72 67 73 7d 20 7b  ll {code args} {
1300: 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d 79 63  ..::variable myc
1310: 6d 64 0a 09 73 65 74 20 63 6d 64 20 24 6d 79 63  md..set cmd $myc
1320: 6d 64 28 24 63 6f 64 65 29 0a 09 66 6f 72 65 61  md($code)..forea
1330: 63 68 20 61 20 24 61 72 67 73 20 7b 20 6c 61 70  ch a $args { lap
1340: 70 65 6e 64 20 63 6d 64 20 24 61 20 7d 0a 09 65  pend cmd $a }..e
1350: 76 61 6c 20 24 63 6d 64 0a 09 72 65 74 75 72 6e  val $cmd..return
1360: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20  .    }..    # # 
1370: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
1380: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
1390: 23 23 23 0a 20 20 20 20 23 23 20 49 6e 74 65 72  ###.    ## Inter
13a0: 6e 61 6c 2c 20 73 74 61 74 65 0a 0a 20 20 20 20  nal, state..    
13b0: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 70  typevariable myp
13c0: 61 73 73 65 73 20 20 20 20 20 20 7b 7d 20 3b 20  asses      {} ; 
13d0: 23 20 4c 69 73 74 20 6f 66 20 72 65 67 69 73 74  # List of regist
13e0: 65 72 65 64 20 70 61 73 73 65 73 20 28 63 6f 64  ered passes (cod
13f0: 65 73 29 2e 0a 20 20 20 20 74 79 70 65 76 61 72  es)..    typevar
1400: 69 61 62 6c 65 20 6d 79 64 65 73 63 20 2d 61 72  iable mydesc -ar
1410: 72 61 79 20 7b 7d 20 3b 20 23 20 50 61 73 73 20  ray {} ; # Pass 
1420: 64 65 73 63 72 69 70 74 69 6f 6e 73 20 28 6f 6e  descriptions (on
1430: 65 20 6c 69 6e 65 29 2e 0a 20 20 20 20 74 79 70  e line)..    typ
1440: 65 76 61 72 69 61 62 6c 65 20 6d 79 63 6d 64 20  evariable mycmd 
1450: 20 2d 61 72 72 61 79 20 7b 7d 20 3b 20 23 20 50   -array {} ; # P
1460: 61 73 73 20 63 61 6c 6c 62 61 63 6b 20 63 6f 6d  ass callback com
1470: 6d 61 6e 64 2e 0a 0a 20 20 20 20 74 79 70 65 76  mand...    typev
1480: 61 72 69 61 62 6c 65 20 6d 79 73 74 61 72 74 20  ariable mystart 
1490: 20 20 20 20 20 20 2d 31 0a 20 20 20 20 74 79 70        -1.    typ
14a0: 65 76 61 72 69 61 62 6c 65 20 6d 79 65 6e 64 20  evariable myend 
14b0: 20 20 20 20 20 20 20 20 2d 31 0a 20 20 20 20 74          -1.    t
14c0: 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 74 69  ypevariable myti
14d0: 6d 65 20 20 20 20 20 20 20 20 7b 7d 20 3b 20 23  me        {} ; #
14e0: 20 54 69 6d 69 6e 67 20 64 61 74 61 20 66 6f 72   Timing data for
14f0: 20 65 61 63 68 20 65 78 65 63 75 74 65 64 20 70   each executed p
1500: 61 73 73 2e 0a 20 20 20 20 74 79 70 65 76 61 72  ass..    typevar
1510: 69 61 62 6c 65 20 6d 79 63 75 72 72 65 6e 74 70  iable mycurrentp
1520: 61 73 73 20 7b 7d 20 3b 20 23 20 50 61 73 73 20  ass {} ; # Pass 
1530: 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
1540: 67 2e 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23  g...    # # ## #
1550: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
1560: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
1570: 20 20 20 20 23 23 20 43 6f 6e 66 69 67 75 72 61      ## Configura
1580: 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61 67 6d 61  tion..    pragma
1590: 20 2d 68 61 73 69 6e 73 74 61 6e 63 65 73 20 20   -hasinstances  
15a0: 20 6e 6f 20 3b 20 23 20 73 69 6e 67 6c 65 74 6f   no ; # singleto
15b0: 6e 0a 20 20 20 20 70 72 61 67 6d 61 20 2d 68 61  n.    pragma -ha
15c0: 73 74 79 70 65 69 6e 66 6f 20 20 20 20 6e 6f 20  stypeinfo    no 
15d0: 3b 20 23 20 6e 6f 20 69 6e 74 72 6f 73 70 65 63  ; # no introspec
15e0: 74 69 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20  tion.    pragma 
15f0: 2d 68 61 73 74 79 70 65 64 65 73 74 72 6f 79 20  -hastypedestroy 
1600: 6e 6f 20 3b 20 23 20 69 6d 6d 6f 72 74 61 6c 0a  no ; # immortal.
1610: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
1620: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
1630: 23 23 23 23 23 23 23 23 23 23 23 23 0a 7d 0a 0a  ############.}..
1640: 6e 61 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a  namespace eval :
1650: 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70  :vc::fossil::imp
1660: 6f 72 74 3a 3a 63 76 73 20 7b 0a 20 20 20 20 6e  ort::cvs {.    n
1670: 61 6d 65 73 70 61 63 65 20 65 78 70 6f 72 74 20  amespace export 
1680: 70 61 73 73 0a 20 20 20 20 6e 61 6d 65 73 70 61  pass.    namespa
1690: 63 65 20 65 76 61 6c 20 70 61 73 73 20 7b 0a 09  ce eval pass {..
16a0: 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74  namespace import
16b0: 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69   ::vc::fossil::i
16c0: 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 73 74 61 74  mport::cvs::stat
16d0: 65 0a 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70  e..namespace imp
16e0: 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  ort ::vc::fossil
16f0: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a 3a 69  ::import::cvs::i
1700: 6e 74 65 67 72 69 74 79 0a 09 6e 61 6d 65 73 70  ntegrity..namesp
1710: 61 63 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a  ace import ::vc:
1720: 3a 74 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a  :tools::misc::*.
1730: 09 6e 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72  .namespace impor
1740: 74 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74  t ::vc::tools::t
1750: 72 6f 75 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63  rouble..namespac
1760: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74  e import ::vc::t
1770: 6f 6f 6c 73 3a 3a 6c 6f 67 0a 09 6c 6f 67 20 72  ools::log..log r
1780: 65 67 69 73 74 65 72 20 70 61 73 73 0a 20 20 20  egister pass.   
1790: 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23 23 23   }.}..# # ## ###
17a0: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
17b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23 23  ############# ##
17c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17d0: 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a 70 61  ###.## Ready..pa
17e0: 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20 76 63  ckage provide vc
17f0: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
1800: 3a 3a 63 76 73 3a 3a 70 61 73 73 20 31 2e 30 0a  ::cvs::pass 1.0.
1810: 72 65 74 75 72 6e 0a                             return.