Hex Artifact Content
Not logged in

Artifact dbcd2bfeb08542dbda9b1ec0b5d54428e9b2e232:

File tools/cvs2fossil/lib/c2f_pass.tcl part of check-in [4df56a9e7e] - For the record an alternative design for the main method of the pass manager where the four principal loops (skip, setup, run, and defer) are merged into two (skip/setup) and (run/defer). Not really less code, also more complex to understand and maintain. The fact that 'setup' and 'run' is performed for the same passes is more difficult to see. This code will not be used. by aku on 2007-10-13 23:42:08.

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 3b 20 23 20 52 65 71 75 69 72 65       ; # Require
0350: 64 20 72 75 6e 74 69 6d 65 2e 0a 70 61 63 6b 61  d runtime..packa
0360: 67 65 20 72 65 71 75 69 72 65 20 73 6e 69 74 20  ge require snit 
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0380: 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20 4f             ; # O
0390: 4f 20 73 79 73 74 65 6d 2e 0a 70 61 63 6b 61 67  O system..packag
03a0: 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a 66 6f  e require vc::fo
03b0: 73 73 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76  ssil::import::cv
03c0: 73 3a 3a 73 74 61 74 65 20 20 3b 20 23 20 53 74  s::state  ; # St
03d0: 61 74 65 20 73 74 6f 72 61 67 65 0a 70 61 63 6b  ate storage.pack
03e0: 61 67 65 20 72 65 71 75 69 72 65 20 76 63 3a 3a  age require vc::
03f0: 74 6f 6f 6c 73 3a 3a 6d 69 73 63 20 20 20 20 20  tools::misc     
0400: 20 20 20 20 20 20 20 20 20 20 20 20 3b 20 23 20              ; # 
0410: 54 65 78 74 20 66 6f 72 6d 61 74 74 69 6e 67 0a  Text formatting.
0420: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20  package require 
0430: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f 75 62  vc::tools::troub
0440: 6c 65 20 20 20 20 20 20 20 20 20 20 20 20 20 20  le              
0450: 3b 20 23 20 45 72 72 6f 72 20 72 65 70 6f 72 74  ; # Error report
0460: 69 6e 67 2e 0a 70 61 63 6b 61 67 65 20 72 65 71  ing..package req
0470: 75 69 72 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a  uire vc::tools::
0480: 6c 6f 67 20 20 20 20 20 20 20 20 20 20 20 20 20  log             
0490: 20 20 20 20 20 3b 20 23 20 55 73 65 72 20 66 65       ; # User fe
04a0: 65 64 62 61 63 6b 2e 0a 70 61 63 6b 61 67 65 20  edback..package 
04b0: 72 65 71 75 69 72 65 20 73 74 72 75 63 74 3a 3a  require struct::
04c0: 6c 69 73 74 20 20 20 20 20 20 20 20 20 20 20 20  list            
04d0: 20 20 20 20 20 20 20 20 3b 20 23 20 50 6f 72 74          ; # Port
04e0: 61 62 6c 65 20 6c 61 73 73 69 67 6e 0a 0a 23 20  able lassign..# 
04f0: 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23  # ## ### ##### #
0500: 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23  ####### ########
0510: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0520: 23 23 23 23 23 23 23 23 23 23 23 0a 23 23 20 0a  ###########.## .
0530: 0a 73 6e 69 74 3a 3a 74 79 70 65 20 3a 3a 76 63  .snit::type ::vc
0540: 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f 72 74  ::fossil::import
0550: 3a 3a 63 76 73 3a 3a 70 61 73 73 20 7b 0a 20 20  ::cvs::pass {.  
0560: 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23 23    # # ## ### ###
0570: 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23 23  ## ######## ####
0580: 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23 23  #########.    ##
0590: 20 50 75 62 6c 69 63 20 41 50 49 2c 20 4d 65 74   Public API, Met
05a0: 68 6f 64 73 20 28 53 65 74 75 70 2c 20 71 75 65  hods (Setup, que
05b0: 72 79 29 0a 0a 20 20 20 20 74 79 70 65 6d 65 74  ry)..    typemet
05c0: 68 6f 64 20 64 65 66 69 6e 65 20 7b 6e 61 6d 65  hod define {name
05d0: 20 64 65 73 63 72 69 70 74 69 6f 6e 20 63 6f 6d   description com
05e0: 6d 61 6e 64 7d 20 7b 0a 09 69 66 20 7b 5b 69 6e  mand} {..if {[in
05f0: 66 6f 20 65 78 69 73 74 73 20 6d 79 64 65 73 63  fo exists mydesc
0600: 28 24 6e 61 6d 65 29 5d 7d 20 7b 0a 09 20 20 20  ($name)]} {..   
0610: 20 74 72 6f 75 62 6c 65 20 69 6e 74 65 72 6e 61   trouble interna
0620: 6c 20 22 4d 75 6c 74 69 70 6c 65 20 64 65 66 69  l "Multiple defi
0630: 6e 69 74 69 6f 6e 73 20 66 6f 72 20 70 61 73 73  nitions for pass
0640: 20 63 6f 64 65 20 27 24 6e 61 6d 65 27 22 0a 09   code '$name'"..
0650: 7d 0a 09 6c 61 70 70 65 6e 64 20 6d 79 70 61 73  }..lappend mypas
0660: 73 65 73 20 24 6e 61 6d 65 0a 09 73 65 74 20 6d  ses $name..set m
0670: 79 64 65 73 63 28 24 6e 61 6d 65 29 20 24 64 65  ydesc($name) $de
0680: 73 63 72 69 70 74 69 6f 6e 0a 09 73 65 74 20 6d  scription..set m
0690: 79 63 6d 64 28 24 6e 61 6d 65 29 20 20 24 63 6f  ycmd($name)  $co
06a0: 6d 6d 61 6e 64 0a 09 72 65 74 75 72 6e 0a 20 20  mmand..return.  
06b0: 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65 74    }..    typemet
06c0: 68 6f 64 20 68 65 6c 70 20 7b 7d 20 7b 0a 09 74  hod help {} {..t
06d0: 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 22 0a 09  rouble info ""..
06e0: 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 43 6f  trouble info "Co
06f0: 6e 76 65 72 73 69 6f 6e 20 70 61 73 73 65 73 3a  nversion passes:
0700: 22 0a 09 74 72 6f 75 62 6c 65 20 69 6e 66 6f 20  "..trouble info 
0710: 22 22 0a 09 73 65 74 20 6e 20 30 0a 0a 09 73 65  ""..set n 0...se
0720: 74 20 63 6c 65 6e 20 5b 6d 61 78 20 5b 73 74 72  t clen [max [str
0730: 75 63 74 3a 3a 6c 69 73 74 20 6d 61 70 20 24 6d  uct::list map $m
0740: 79 70 61 73 73 65 73 20 7b 73 74 72 69 6e 67 20  ypasses {string 
0750: 6c 65 6e 67 74 68 7d 5d 5d 0a 09 73 65 74 20 63  length}]]..set c
0760: 66 6d 74 20 25 2d 24 7b 63 6c 65 6e 7d 73 0a 09  fmt %-${clen}s..
0770: 73 65 74 20 6e 66 6d 74 20 25 5b 73 74 72 69 6e  set nfmt %[strin
0780: 67 20 6c 65 6e 67 74 68 20 5b 6c 6c 65 6e 67 74  g length [llengt
0790: 68 20 24 6d 79 70 61 73 73 65 73 5d 5d 73 0a 0a  h $mypasses]]s..
07a0: 09 66 6f 72 65 61 63 68 20 63 6f 64 65 20 24 6d  .foreach code $m
07b0: 79 70 61 73 73 65 73 20 7b 0a 09 20 20 20 20 74  ypasses {..    t
07c0: 72 6f 75 62 6c 65 20 69 6e 66 6f 20 22 20 20 5b  rouble info "  [
07d0: 66 6f 72 6d 61 74 20 24 6e 66 6d 74 20 24 6e 5d  format $nfmt $n]
07e0: 3a 20 5b 66 6f 72 6d 61 74 20 24 63 66 6d 74 20  : [format $cfmt 
07f0: 24 63 6f 64 65 5d 20 3a 20 24 6d 79 64 65 73 63  $code] : $mydesc
0800: 28 24 63 6f 64 65 29 22 0a 09 20 20 20 20 69 6e  ($code)"..    in
0810: 63 72 20 6e 0a 09 7d 0a 09 74 72 6f 75 62 6c 65  cr n..}..trouble
0820: 20 69 6e 66 6f 20 22 22 0a 09 72 65 74 75 72 6e   info ""..return
0830: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20  .    }..    # # 
0840: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
0850: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0860: 23 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69  ###.    ## Publi
0870: 63 20 41 50 49 2c 20 4d 65 74 68 6f 64 73 20 28  c API, Methods (
0880: 45 78 65 63 75 74 69 6f 6e 29 0a 0a 20 20 20 20  Execution)..    
0890: 74 79 70 65 6d 65 74 68 6f 64 20 73 65 6c 65 63  typemethod selec
08a0: 74 20 7b 70 61 73 73 64 65 66 7d 20 7b 0a 09 73  t {passdef} {..s
08b0: 65 74 20 70 6c 20 5b 73 70 6c 69 74 20 24 70 61  et pl [split $pa
08c0: 73 73 64 65 66 20 3a 5d 0a 09 69 66 20 7b 5b 6c  ssdef :]..if {[l
08d0: 6c 65 6e 67 74 68 20 24 70 6c 5d 20 3e 20 32 7d  length $pl] > 2}
08e0: 20 7b 0a 09 20 20 20 20 74 72 6f 75 62 6c 65 20   {..    trouble 
08f0: 66 61 74 61 6c 20 22 42 61 64 20 70 61 73 73 20  fatal "Bad pass 
0900: 64 65 66 69 6e 69 74 69 6f 6e 20 27 24 70 61 73  definition '$pas
0910: 73 64 65 66 27 22 0a 09 20 20 20 20 74 72 6f 75  sdef'"..    trou
0920: 62 6c 65 20 66 61 74 61 6c 20 22 45 78 70 65 63  ble fatal "Expec
0930: 74 65 64 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20  ted at most one 
0940: 27 3a 27 22 0a 09 7d 20 65 6c 73 65 69 66 20 7b  ':'"..} elseif {
0950: 5b 6c 6c 65 6e 67 74 68 20 24 70 6c 5d 20 3d 3d  [llength $pl] ==
0960: 20 32 7d 20 7b 0a 09 20 20 20 20 73 74 72 75 63   2} {..    struc
0970: 74 3a 3a 6c 69 73 74 20 61 73 73 69 67 6e 20 24  t::list assign $
0980: 70 6c 20 73 74 61 72 74 20 65 6e 64 0a 0a 09 20  pl start end... 
0990: 20 20 20 69 66 20 7b 28 24 73 74 61 72 74 20 65     if {($start e
09a0: 71 20 22 22 29 20 26 26 20 28 24 65 6e 64 20 65  q "") && ($end e
09b0: 71 20 22 22 29 7d 20 7b 0a 09 09 74 72 6f 75 62  q "")} {...troub
09c0: 6c 65 20 66 61 74 61 6c 20 22 53 70 65 63 69 66  le fatal "Specif
09d0: 79 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f  y at least one o
09e0: 66 20 73 74 61 72 74 2d 20 6f 72 20 65 6e 64 2d  f start- or end-
09f0: 70 61 73 73 22 0a 09 09 73 65 74 20 6f 6b 20 30  pass"...set ok 0
0a00: 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 09  ..    } else {..
0a10: 09 73 65 74 20 6f 6b 20 31 0a 09 09 4f 6b 3f 20  .set ok 1...Ok? 
0a20: 24 73 74 61 72 74 20 73 74 61 72 74 20 6f 6b 0a  $start start ok.
0a30: 09 09 4f 6b 3f 20 24 65 6e 64 20 20 20 65 6e 64  ..Ok? $end   end
0a40: 20 20 20 6f 6b 0a 09 20 20 20 20 7d 0a 0a 09 20     ok..    }... 
0a50: 20 20 20 69 66 20 7b 24 6f 6b 7d 20 7b 0a 09 09     if {$ok} {...
0a60: 73 65 74 20 6d 79 73 74 61 72 74 20 5b 43 6f 6e  set mystart [Con
0a70: 76 65 72 74 20 24 73 74 61 72 74 20 30 5d 0a 09  vert $start 0]..
0a80: 09 73 65 74 20 6d 79 65 6e 64 20 20 20 5b 43 6f  .set myend   [Co
0a90: 6e 76 65 72 74 20 24 65 6e 64 20 65 6e 64 5d 0a  nvert $end end].
0aa0: 09 09 69 66 20 7b 24 6d 79 73 74 61 72 74 20 3e  ..if {$mystart >
0ab0: 20 24 6d 79 65 6e 64 7d 20 7b 0a 09 09 20 20 20   $myend} {...   
0ac0: 20 74 72 6f 75 62 6c 65 20 66 61 74 61 6c 20 22   trouble fatal "
0ad0: 53 74 61 72 74 20 70 61 73 73 20 69 73 20 61 66  Start pass is af
0ae0: 74 65 72 20 65 6e 64 20 70 61 73 73 22 0a 09 09  ter end pass"...
0af0: 7d 0a 09 20 20 20 20 7d 0a 09 7d 20 65 6c 73 65  }..    }..} else
0b00: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 6c  if {[llength $pl
0b10: 5d 20 3c 20 32 7d 20 7b 0a 09 20 20 20 20 73 65  ] < 2} {..    se
0b20: 74 20 73 74 61 72 74 20 5b 6c 69 6e 64 65 78 20  t start [lindex 
0b30: 24 70 6c 20 30 5d 0a 09 20 20 20 20 4f 6b 3f 20  $pl 0]..    Ok? 
0b40: 24 73 74 61 72 74 20 22 22 20 5f 5f 64 75 6d 6d  $start "" __dumm
0b50: 79 5f 5f 20 30 0a 09 20 20 20 20 73 65 74 20 6d  y__ 0..    set m
0b60: 79 73 74 61 72 74 20 5b 49 64 20 24 73 74 61 72  ystart [Id $star
0b70: 74 5d 0a 09 20 20 20 20 73 65 74 20 6d 79 65 6e  t]..    set myen
0b80: 64 20 20 20 24 6d 79 73 74 61 72 74 0a 09 7d 0a  d   $mystart..}.
0b90: 20 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d      }..    typem
0ba0: 65 74 68 6f 64 20 72 75 6e 20 7b 7d 20 7b 0a 09  ethod run {} {..
0bb0: 69 66 20 7b 24 6d 79 73 74 61 72 74 20 3c 20 30  if {$mystart < 0
0bc0: 7d 20 7b 73 65 74 20 6d 79 73 74 61 72 74 20 30  } {set mystart 0
0bd0: 7d 0a 09 69 66 20 7b 24 6d 79 65 6e 64 20 20 20  }..if {$myend   
0be0: 3c 20 30 7d 20 7b 73 65 74 20 6d 79 65 6e 64 20  < 0} {set myend 
0bf0: 65 6e 64 7d 0a 0a 09 23 20 54 4f 44 4f 3a 20 54  end}...# TODO: T
0c00: 69 6d 69 6e 67 20 73 74 61 74 69 73 74 69 63 73  iming statistics
0c10: 20 66 6f 72 20 74 68 65 20 70 61 73 73 65 73 2e   for the passes.
0c20: 0a 09 23 20 54 4f 44 4f 3a 20 41 72 74 69 66 61  ..# TODO: Artifa
0c30: 63 74 20 6d 61 6e 61 67 65 72 20 28 63 6c 65 61  ct manager (clea
0c40: 6e 20 61 66 74 65 72 20 70 61 73 73 3f 2e 20 6e  n after pass?. n
0c50: 65 65 64 20 74 6f 20 6b 6e 6f 77 20 73 6b 69 70  eed to know skip
0c60: 70 65 64 2f 64 65 66 65 72 65 64 20 70 61 73 73  ped/defered pass
0c70: 65 73 20 3f 29 0a 09 23 20 54 4f 44 4f 3a 20 0a  es ?)..# TODO: .
0c80: 09 23 20 54 4f 44 4f 3a 20 0a 0a 09 73 65 74 20  .# TODO: ...set 
0c90: 66 69 72 73 74 72 75 6e 20 5b 6c 69 6e 64 65 78  firstrun [lindex
0ca0: 20 24 6d 79 70 61 73 73 65 73 20 24 6d 79 73 74   $mypasses $myst
0cb0: 61 72 74 5d 0a 09 73 65 74 20 6c 61 73 74 72 75  art]..set lastru
0cc0: 6e 20 20 5b 6c 69 6e 64 65 78 20 24 6d 79 70 61  n  [lindex $mypa
0cd0: 73 73 65 73 20 24 6d 79 65 6e 64 5d 0a 0a 09 23  sses $myend]...#
0ce0: 20 57 65 20 68 61 76 65 20 69 6e 20 70 72 69 6e   We have in prin
0cf0: 63 69 70 6c 65 20 66 6f 75 72 20 6c 6f 6f 70 73  ciple four loops
0d00: 20 68 65 72 65 20 28 73 6b 69 70 2c 20 73 65 74   here (skip, set
0d10: 75 70 2c 20 72 75 6e 2c 20 61 6e 64 0a 09 23 20  up, run, and..# 
0d20: 64 65 66 65 72 29 2e 20 54 68 65 73 65 20 61 72  defer). These ar
0d30: 65 20 68 6f 77 65 76 65 72 20 6d 65 72 67 65 64  e however merged
0d40: 20 69 6e 74 6f 20 74 77 6f 2c 20 73 6b 69 70 2f   into two, skip/
0d50: 73 65 74 75 70 2c 20 61 6e 64 0a 09 23 20 72 75  setup, and..# ru
0d60: 6e 2f 64 65 66 65 72 2e 0a 0a 09 73 65 74 20 73  n/defer....set s
0d70: 6b 69 70 20 31 0a 09 66 6f 72 65 61 63 68 20 70  kip 1..foreach p
0d80: 20 5b 6c 72 61 6e 67 65 20 24 6d 79 70 61 73 73   [lrange $mypass
0d90: 65 73 20 30 20 24 6d 79 65 6e 64 5d 20 7b 0a 09  es 0 $myend] {..
0da0: 20 20 20 20 69 66 20 7b 24 70 20 65 71 20 24 66      if {$p eq $f
0db0: 69 72 73 74 72 75 6e 7d 20 7b 73 65 74 20 73 6b  irstrun} {set sk
0dc0: 69 70 20 30 7d 0a 09 20 20 20 20 69 66 20 7b 24  ip 0}..    if {$
0dd0: 73 6b 69 70 7d 20 7b 0a 09 09 6c 6f 67 20 77 72  skip} {...log wr
0de0: 69 74 65 20 30 20 70 61 73 73 20 22 53 6b 69 70  ite 0 pass "Skip
0df0: 20 20 24 70 22 20 0a 09 09 43 61 6c 6c 20 24 70    $p" ...Call $p
0e00: 20 6c 6f 61 64 0a 09 20 20 20 20 7d 20 65 6c 73   load..    } els
0e10: 65 20 7b 0a 09 09 6c 6f 67 20 77 72 69 74 65 20  e {...log write 
0e20: 30 20 70 61 73 73 20 22 53 65 74 75 70 20 24 70  0 pass "Setup $p
0e30: 22 20 0a 09 09 43 61 6c 6c 20 24 70 20 73 65 74  " ...Call $p set
0e40: 75 70 0a 09 20 20 20 20 7d 0a 09 7d 0a 0a 09 73  up..    }..}...s
0e50: 65 74 20 72 75 6e 20 31 0a 09 66 6f 72 65 61 63  et run 1..foreac
0e60: 68 20 70 20 5b 6c 72 61 6e 67 65 20 24 6d 79 70  h p [lrange $myp
0e70: 61 73 73 65 73 20 24 6d 79 73 74 61 72 74 20 65  asses $mystart e
0e80: 6e 64 5d 20 7b 0a 09 20 20 20 20 69 66 20 7b 24  nd] {..    if {$
0e90: 72 75 6e 7d 20 7b 0a 09 09 6c 6f 67 20 77 72 69  run} {...log wri
0ea0: 74 65 20 30 20 70 61 73 73 20 22 42 65 67 69 6e  te 0 pass "Begin
0eb0: 20 24 70 22 20 0a 09 09 43 61 6c 6c 20 24 70 20   $p" ...Call $p 
0ec0: 72 75 6e 0a 09 09 6c 6f 67 20 77 72 69 74 65 20  run...log write 
0ed0: 30 20 70 61 73 73 20 22 44 6f 6e 65 20 20 24 70  0 pass "Done  $p
0ee0: 22 0a 09 09 74 72 6f 75 62 6c 65 20 61 62 6f 72  "...trouble abor
0ef0: 74 3f 0a 09 20 20 20 20 7d 20 65 6c 73 65 20 7b  t?..    } else {
0f00: 0a 09 09 6c 6f 67 20 77 72 69 74 65 20 30 20 70  ...log write 0 p
0f10: 61 73 73 20 22 44 65 66 65 72 20 24 70 22 20 0a  ass "Defer $p" .
0f20: 09 09 43 61 6c 6c 20 24 70 20 64 69 73 63 61 72  ..Call $p discar
0f30: 64 0a 09 20 20 20 20 7d 0a 09 20 20 20 20 69 66  d..    }..    if
0f40: 20 7b 24 70 20 65 71 20 24 6c 61 73 74 72 75 6e   {$p eq $lastrun
0f50: 7d 20 7b 73 65 74 20 72 75 6e 20 30 7d 0a 09 7d  } {set run 0}..}
0f60: 0a 0a 09 73 74 61 74 65 20 72 65 6c 65 61 73 65  ...state release
0f70: 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a  ..return.    }..
0f80: 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23      # # ## ### #
0f90: 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23  #### ######## ##
0fa0: 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20  ###########.    
0fb0: 23 23 20 49 6e 74 65 72 6e 61 6c 20 6d 65 74 68  ## Internal meth
0fc0: 6f 64 73 0a 0a 20 20 20 20 70 72 6f 63 20 4f 6b  ods..    proc Ok
0fd0: 3f 20 7b 63 6f 64 65 20 6c 61 62 65 6c 20 6f 76  ? {code label ov
0fe0: 20 7b 65 6d 70 74 79 6f 6b 20 31 7d 7d 20 7b 0a   {emptyok 1}} {.
0ff0: 09 75 70 76 61 72 20 31 20 24 6f 76 20 6f 6b 0a  .upvar 1 $ov ok.
1000: 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d 79 64 65  .::variable myde
1010: 73 63 0a 09 69 66 20 7b 24 65 6d 70 74 79 6f 6b  sc..if {$emptyok
1020: 20 26 26 20 28 24 63 6f 64 65 20 65 71 20 22 22   && ($code eq ""
1030: 29 7d 20 72 65 74 75 72 6e 0a 09 69 66 20 7b 5b  )} return..if {[
1040: 69 6e 66 6f 20 65 78 69 73 74 73 20 6d 79 64 65  info exists myde
1050: 73 63 28 24 63 6f 64 65 29 5d 7d 20 72 65 74 75  sc($code)]} retu
1060: 72 6e 0a 09 69 66 20 7b 24 6c 61 62 65 6c 20 6e  rn..if {$label n
1070: 65 20 22 22 7d 20 7b 61 70 70 65 6e 64 20 6c 61  e ""} {append la
1080: 62 65 6c 20 22 20 22 7d 0a 09 74 72 6f 75 62 6c  bel " "}..troubl
1090: 65 20 66 61 74 61 6c 20 22 42 61 64 20 24 7b 6c  e fatal "Bad ${l
10a0: 61 62 65 6c 7d 70 61 73 73 20 63 6f 64 65 20 24  abel}pass code $
10b0: 63 6f 64 65 22 0a 09 73 65 74 20 6f 6b 20 30 0a  code"..set ok 0.
10c0: 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20  .return.    }.. 
10d0: 20 20 20 70 72 6f 63 20 43 6f 6e 76 65 72 74 20     proc Convert 
10e0: 7b 63 6f 64 65 20 64 65 66 61 75 6c 74 7d 20 7b  {code default} {
10f0: 0a 09 3a 3a 76 61 72 69 61 62 6c 65 20 6d 79 70  ..::variable myp
1100: 61 73 73 65 73 0a 09 72 65 74 75 72 6e 20 5b 65  asses..return [e
1110: 78 70 72 20 7b 28 24 63 6f 64 65 20 65 71 20 22  xpr {($code eq "
1120: 22 29 20 3f 20 24 64 65 66 61 75 6c 74 20 3a 20  ") ? $default : 
1130: 5b 49 64 20 24 63 6f 64 65 5d 7d 5d 0a 20 20 20  [Id $code]}].   
1140: 20 7d 0a 0a 20 20 20 20 70 72 6f 63 20 49 64 20   }..    proc Id 
1150: 7b 63 6f 64 65 7d 20 7b 0a 09 3a 3a 76 61 72 69  {code} {..::vari
1160: 61 62 6c 65 20 6d 79 70 61 73 73 65 73 0a 09 72  able mypasses..r
1170: 65 74 75 72 6e 20 5b 6c 73 65 61 72 63 68 20 2d  eturn [lsearch -
1180: 65 78 61 63 74 20 24 6d 79 70 61 73 73 65 73 20  exact $mypasses 
1190: 24 63 6f 64 65 5d 0a 20 20 20 20 7d 0a 0a 20 20  $code].    }..  
11a0: 20 20 70 72 6f 63 20 43 61 6c 6c 20 7b 63 6f 64    proc Call {cod
11b0: 65 20 61 72 67 73 7d 20 7b 0a 09 3a 3a 76 61 72  e args} {..::var
11c0: 69 61 62 6c 65 20 6d 79 63 6d 64 0a 09 73 65 74  iable mycmd..set
11d0: 20 63 6d 64 20 24 6d 79 63 6d 64 28 24 63 6f 64   cmd $mycmd($cod
11e0: 65 29 0a 09 66 6f 72 65 61 63 68 20 61 20 24 61  e)..foreach a $a
11f0: 72 67 73 20 7b 20 6c 61 70 70 65 6e 64 20 63 6d  rgs { lappend cm
1200: 64 20 24 61 20 7d 0a 09 65 76 61 6c 20 24 63 6d  d $a }..eval $cm
1210: 64 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d 0a  d..return.    }.
1220: 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23 20  .    # # ## ### 
1230: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20 23  ##### ######## #
1240: 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20 20  ############.   
1250: 20 23 23 20 49 6e 74 65 72 6e 61 6c 2c 20 73 74   ## Internal, st
1260: 61 74 65 0a 0a 20 20 20 20 74 79 70 65 76 61 72  ate..    typevar
1270: 69 61 62 6c 65 20 6d 79 70 61 73 73 65 73 20 20  iable mypasses  
1280: 20 20 20 20 7b 7d 20 3b 20 23 20 4c 69 73 74 20      {} ; # List 
1290: 6f 66 20 72 65 67 69 73 74 65 72 65 64 20 70 61  of registered pa
12a0: 73 73 65 73 20 28 63 6f 64 65 73 29 2e 0a 20 20  sses (codes)..  
12b0: 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d    typevariable m
12c0: 79 64 65 73 63 20 2d 61 72 72 61 79 20 7b 7d 20  ydesc -array {} 
12d0: 3b 20 23 20 50 61 73 73 20 64 65 73 63 72 69 70  ; # Pass descrip
12e0: 74 69 6f 6e 73 20 28 6f 6e 65 20 6c 69 6e 65 29  tions (one line)
12f0: 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62  ..    typevariab
1300: 6c 65 20 6d 79 63 6d 64 20 20 2d 61 72 72 61 79  le mycmd  -array
1310: 20 7b 7d 20 3b 20 23 20 50 61 73 73 20 63 61 6c   {} ; # Pass cal
1320: 6c 62 61 63 6b 20 63 6f 6d 6d 61 6e 64 2e 0a 0a  lback command...
1330: 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65      typevariable
1340: 20 6d 79 73 74 61 72 74 20 2d 31 0a 20 20 20 20   mystart -1.    
1350: 74 79 70 65 76 61 72 69 61 62 6c 65 20 6d 79 65  typevariable mye
1360: 6e 64 20 20 20 2d 31 0a 0a 20 20 20 20 23 20 23  nd   -1..    # #
1370: 20 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23   ## ### ##### ##
1380: 23 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23  ###### #########
1390: 23 23 23 23 0a 20 20 20 20 23 23 20 43 6f 6e 66  ####.    ## Conf
13a0: 69 67 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70  iguration..    p
13b0: 72 61 67 6d 61 20 2d 68 61 73 69 6e 73 74 61 6e  ragma -hasinstan
13c0: 63 65 73 20 20 20 6e 6f 20 3b 20 23 20 73 69 6e  ces   no ; # sin
13d0: 67 6c 65 74 6f 6e 0a 20 20 20 20 70 72 61 67 6d  gleton.    pragm
13e0: 61 20 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20  a -hastypeinfo  
13f0: 20 20 6e 6f 20 3b 20 23 20 6e 6f 20 69 6e 74 72    no ; # no intr
1400: 6f 73 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72  ospection.    pr
1410: 61 67 6d 61 20 2d 68 61 73 74 79 70 65 64 65 73  agma -hastypedes
1420: 74 72 6f 79 20 6e 6f 20 3b 20 23 20 69 6d 6d 6f  troy no ; # immo
1430: 72 74 61 6c 0a 0a 20 20 20 20 23 20 23 20 23 23  rtal..    # # ##
1440: 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23 23   ### ##### #####
1450: 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23 23  ### ############
1460: 23 0a 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65  #.}..namespace e
1470: 76 61 6c 20 3a 3a 76 63 3a 3a 66 6f 73 73 69 6c  val ::vc::fossil
1480: 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 20 7b 0a  ::import::cvs {.
1490: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78      namespace ex
14a0: 70 6f 72 74 20 70 61 73 73 0a 20 20 20 20 6e 61  port pass.    na
14b0: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 70 61 73  mespace eval pas
14c0: 73 20 7b 0a 09 6e 61 6d 65 73 70 61 63 65 20 69  s {..namespace i
14d0: 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 66 6f 73 73  mport ::vc::foss
14e0: 69 6c 3a 3a 69 6d 70 6f 72 74 3a 3a 63 76 73 3a  il::import::cvs:
14f0: 3a 73 74 61 74 65 0a 09 6e 61 6d 65 73 70 61 63  :state..namespac
1500: 65 20 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74  e import ::vc::t
1510: 6f 6f 6c 73 3a 3a 6d 69 73 63 3a 3a 2a 0a 09 6e  ools::misc::*..n
1520: 61 6d 65 73 70 61 63 65 20 69 6d 70 6f 72 74 20  amespace import 
1530: 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 74 72 6f  ::vc::tools::tro
1540: 75 62 6c 65 0a 09 6e 61 6d 65 73 70 61 63 65 20  uble..namespace 
1550: 69 6d 70 6f 72 74 20 3a 3a 76 63 3a 3a 74 6f 6f  import ::vc::too
1560: 6c 73 3a 3a 6c 6f 67 20 20 20 20 0a 09 6c 6f 67  ls::log    ..log
1570: 20 72 65 67 69 73 74 65 72 20 70 61 73 73 0a 20   register pass. 
1580: 20 20 20 7d 0a 7d 0a 0a 23 20 23 20 23 23 20 23     }.}..# # ## #
1590: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
15a0: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20  # ############# 
15b0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
15c0: 23 23 23 23 23 0a 23 23 20 52 65 61 64 79 0a 0a  #####.## Ready..
15d0: 70 61 63 6b 61 67 65 20 70 72 6f 76 69 64 65 20  package provide 
15e0: 76 63 3a 3a 66 6f 73 73 69 6c 3a 3a 69 6d 70 6f  vc::fossil::impo
15f0: 72 74 3a 3a 63 76 73 3a 3a 70 61 73 73 20 31 2e  rt::cvs::pass 1.
1600: 30 0a 72 65 74 75 72 6e 0a                       0.return.