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.