Hex Artifact Content
Not logged in

Artifact 2d2937d11bead564d9088fc99c2f72c4ce4bec0b:

File tools/cvs2fossil/lib/log.tcl part of check-in [38b967dcf5] - Merge aku's CVS import changes into the main line. Fix a small bug in diff.c. by drh on 2007-11-17 00:29:42. Also file tools/cvs2fossil/lib/log.tcl part of check-in [08ebab80cd] - Rewrote the algorithm for breaking internal dependencies to my liking. The complex part handling multiple splits has moved from the pass code to the changeset class itself, reusing the state computed for the first split. The state is a bit more complex to allow for its incremental update after a break has been done. Factored major pieces into separate procedures to keep the highlevel code readable. Added lots of official log output to help debugging in case of trouble. by aku on 2007-11-10 23:44:29.

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 55 74 69  ########..## Uti
0200: 6c 69 74 79 20 70 61 63 6b 61 67 65 2c 20 62 61  lity package, ba
0210: 73 69 63 20 75 73 65 72 20 66 65 65 64 62 61 63  sic user feedbac
0220: 6b 0a 0a 23 20 23 20 23 23 20 23 23 23 20 23 23  k..# # ## ### ##
0230: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0240: 23 23 23 23 23 23 23 23 23 23 20 23 23 23 23 23  ########## #####
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 0a 23 23 20 52 65 71 75 69 72 65 6d 65 6e 74 73  .## Requirements
0270: 0a 0a 70 61 63 6b 61 67 65 20 72 65 71 75 69 72  ..package requir
0280: 65 20 54 63 6c 20 38 2e 34 20 3b 20 23 20 52 65  e Tcl 8.4 ; # Re
0290: 71 75 69 72 65 64 20 72 75 6e 74 69 6d 65 0a 70  quired runtime.p
02a0: 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 73  ackage require s
02b0: 6e 69 74 20 20 20 20 3b 20 23 20 4f 4f 20 73 79  nit    ; # OO sy
02c0: 73 74 65 6d 2e 0a 0a 23 20 23 20 23 23 20 23 23  stem...# # ## ##
02d0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
02e0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 20 23   ############# #
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 0a 23 23 20 0a 0a 73 6e 69 74 3a 3a  ####.## ..snit::
0310: 74 79 70 65 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73  type ::vc::tools
0320: 3a 3a 6c 6f 67 20 7b 0a 20 20 20 20 23 20 23 20  ::log {.    # # 
0330: 23 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23  ## ### ##### ###
0340: 23 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23  ##### ##########
0350: 23 23 23 0a 20 20 20 20 23 23 20 50 75 62 6c 69  ###.    ## Publi
0360: 63 20 41 50 49 2c 20 4d 65 74 68 6f 64 73 0a 0a  c API, Methods..
0370: 20 20 20 20 23 20 57 72 69 74 65 20 74 68 65 20      # Write the 
0380: 6d 65 73 73 61 67 65 20 27 74 65 78 74 27 20 74  message 'text' t
0390: 6f 20 6c 6f 67 2c 20 66 6f 72 20 74 68 65 20 6e  o log, for the n
03a0: 61 6d 65 64 20 27 73 79 73 74 65 6d 27 2e 20 54  amed 'system'. T
03b0: 68 65 0a 20 20 20 20 23 20 6d 65 73 73 61 67 65  he.    # message
03c0: 20 69 73 20 77 72 69 74 74 65 6e 20 69 66 20 61   is written if a
03d0: 6e 64 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 6d  nd only if the m
03e0: 65 73 73 61 67 65 20 76 65 72 62 6f 73 69 74 79  essage verbosity
03f0: 20 69 73 20 6c 65 73 73 0a 20 20 20 20 23 20 6f   is less.    # o
0400: 72 20 65 71 75 61 6c 20 74 68 65 20 63 68 6f 73  r equal the chos
0410: 65 6e 20 76 65 72 62 6f 73 69 74 79 2e 20 41 20  en verbosity. A 
0420: 6d 65 73 73 61 67 65 20 6f 66 20 76 65 72 62 6f  message of verbo
0430: 73 69 74 79 20 30 20 63 61 6e 6e 6f 74 0a 20 20  sity 0 cannot.  
0440: 20 20 23 20 62 65 20 62 6c 6f 63 6b 65 64 2e 0a    # be blocked..
0450: 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64 20  .    typemethod 
0460: 77 72 69 74 65 20 7b 76 65 72 62 6f 73 69 74 79  write {verbosity
0470: 20 73 79 73 74 65 6d 20 74 65 78 74 7d 20 7b 0a   system text} {.
0480: 09 69 66 20 7b 24 76 65 72 62 6f 73 69 74 79 20  .if {$verbosity 
0490: 3e 20 24 6d 79 6c 6f 67 6c 65 76 65 6c 7d 20 72  > $myloglevel} r
04a0: 65 74 75 72 6e 0a 09 75 70 6c 65 76 65 6c 20 23  eturn..uplevel #
04b0: 30 20 5b 6c 69 6e 73 65 72 74 20 24 6d 79 6c 6f  0 [linsert $mylo
04c0: 67 63 6d 64 20 65 6e 64 20 77 72 69 74 65 20 5b  gcmd end write [
04d0: 53 79 73 74 65 6d 20 24 73 79 73 74 65 6d 5d 20  System $system] 
04e0: 24 74 65 78 74 5d 0a 09 72 65 74 75 72 6e 0a 20  $text]..return. 
04f0: 20 20 20 7d 0a 0a 20 20 20 20 23 20 53 69 6d 69     }..    # Simi
0500: 6c 61 72 20 74 6f 20 77 72 69 74 65 2c 20 65 73  lar to write, es
0510: 70 65 63 69 61 6c 6c 79 20 69 6e 20 74 68 65 20  pecially in the 
0520: 68 61 6e 64 6c 69 6e 67 20 6f 66 20 74 68 65 20  handling of the 
0530: 76 65 72 62 6f 73 69 74 79 2c 0a 20 20 20 20 23  verbosity,.    #
0540: 20 74 6f 20 64 72 69 76 65 20 70 72 6f 67 72 65   to drive progre
0550: 73 73 20 64 69 73 70 6c 61 79 73 2e 20 49 74 20  ss displays. It 
0560: 73 69 67 6e 61 6c 73 20 74 68 61 74 20 66 6f 72  signals that for
0570: 20 73 6f 6d 65 20 6c 6f 6e 67 0a 20 20 20 20 23   some long.    #
0580: 20 72 75 6e 6e 69 6e 67 20 6f 70 65 72 61 74 69   running operati
0590: 6f 6e 20 77 65 20 61 72 65 20 61 74 20 74 69 63  on we are at tic
05a0: 6b 20 27 6e 27 20 6f 66 20 61 74 20 6d 6f 73 74  k 'n' of at most
05b0: 20 27 6d 61 78 27 20 74 69 63 6b 73 2e 20 41 6e   'max' ticks. An
05c0: 0a 20 20 20 20 23 20 65 6d 70 74 79 20 27 6d 61  .    # empty 'ma
05d0: 78 27 20 69 6e 64 69 63 61 74 65 73 20 61 6e 20  x' indicates an 
05e0: 69 6e 66 69 6e 69 74 65 20 70 72 6f 67 72 65 73  infinite progres
05f0: 73 20 64 69 73 70 6c 61 79 2e 0a 0a 20 20 20 20  s display...    
0600: 74 79 70 65 6d 65 74 68 6f 64 20 70 72 6f 67 72  typemethod progr
0610: 65 73 73 20 7b 76 65 72 62 6f 73 69 74 79 20 73  ess {verbosity s
0620: 79 73 74 65 6d 20 6e 20 6d 61 78 7d 20 7b 0a 09  ystem n max} {..
0630: 69 66 20 7b 24 76 65 72 62 6f 73 69 74 79 20 3e  if {$verbosity >
0640: 20 24 6d 79 6c 6f 67 6c 65 76 65 6c 7d 20 72 65   $myloglevel} re
0650: 74 75 72 6e 0a 09 75 70 6c 65 76 65 6c 20 23 30  turn..uplevel #0
0660: 20 5b 6c 69 6e 73 65 72 74 20 24 6d 79 6c 6f 67   [linsert $mylog
0670: 63 6d 64 20 65 6e 64 20 70 72 6f 67 72 65 73 73  cmd end progress
0680: 20 5b 53 79 73 74 65 6d 20 24 73 79 73 74 65 6d   [System $system
0690: 5d 20 24 6e 20 24 6d 61 78 5d 0a 09 72 65 74 75  ] $n $max]..retu
06a0: 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 74 79  rn.    }..    ty
06b0: 70 65 6d 65 74 68 6f 64 20 76 69 73 69 62 6c 65  pemethod visible
06c0: 3f 20 7b 76 65 72 62 6f 73 69 74 79 7d 20 7b 0a  ? {verbosity} {.
06d0: 09 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24  .return [expr {$
06e0: 76 65 72 62 6f 73 69 74 79 20 3c 3d 20 24 6d 79  verbosity <= $my
06f0: 6c 6f 67 6c 65 76 65 6c 7d 5d 0a 20 20 20 20 7d  loglevel}].    }
0700: 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23 23  ..    # # ## ###
0710: 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23 20   ##### ######## 
0720: 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20 20  #############.  
0730: 20 20 23 20 50 75 62 6c 69 63 20 41 50 49 2c 20    # Public API, 
0740: 41 64 6d 69 6e 69 73 74 72 61 74 69 76 65 20 6d  Administrative m
0750: 65 74 68 6f 64 73 0a 0a 20 20 20 20 23 20 53 65  ethods..    # Se
0760: 74 20 76 65 72 62 6f 73 69 74 79 20 74 6f 20 74  t verbosity to t
0770: 68 65 20 63 68 6f 73 65 6e 20 27 6c 65 76 65 6c  he chosen 'level
0780: 27 2e 20 4f 6e 6c 79 20 6d 65 73 73 61 67 65 73  '. Only messages
0790: 20 77 69 74 68 20 61 20 6c 65 76 65 6c 0a 20 20   with a level.  
07a0: 20 20 23 20 6c 65 73 73 20 6f 72 20 65 71 75 61    # less or equa
07b0: 6c 20 74 6f 20 74 68 69 73 20 6f 6e 65 20 77 69  l to this one wi
07c0: 6c 6c 20 62 65 20 73 68 6f 77 6e 2e 0a 0a 20 20  ll be shown...  
07d0: 20 20 74 79 70 65 6d 65 74 68 6f 64 20 76 65 72    typemethod ver
07e0: 62 6f 73 69 74 79 20 7b 6c 65 76 65 6c 7d 20 7b  bosity {level} {
07f0: 0a 09 69 66 20 7b 24 6c 65 76 65 6c 20 3c 20 31  ..if {$level < 1
0800: 7d 20 7b 73 65 74 20 6c 65 76 65 6c 20 30 7d 0a  } {set level 0}.
0810: 09 73 65 74 20 6d 79 6c 6f 67 6c 65 76 65 6c 20  .set myloglevel 
0820: 24 6c 65 76 65 6c 0a 09 72 65 74 75 72 6e 0a 20  $level..return. 
0830: 20 20 20 7d 0a 0a 20 20 20 20 74 79 70 65 6d 65     }..    typeme
0840: 74 68 6f 64 20 76 65 72 62 6f 73 65 20 7b 7d 20  thod verbose {} 
0850: 7b 0a 09 69 6e 63 72 20 6d 79 6c 6f 67 6c 65 76  {..incr myloglev
0860: 65 6c 0a 09 72 65 74 75 72 6e 0a 20 20 20 20 7d  el..return.    }
0870: 0a 0a 20 20 20 20 74 79 70 65 6d 65 74 68 6f 64  ..    typemethod
0880: 20 71 75 69 65 74 20 7b 7d 20 7b 0a 09 69 66 20   quiet {} {..if 
0890: 7b 24 6d 79 6c 6f 67 6c 65 76 65 6c 20 3c 20 31  {$myloglevel < 1
08a0: 7d 20 72 65 74 75 72 6e 0a 09 69 6e 63 72 20 6d  } return..incr m
08b0: 79 6c 6f 67 6c 65 76 65 6c 20 2d 31 0a 09 72 65  yloglevel -1..re
08c0: 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20  turn.    }..    
08d0: 23 20 51 75 65 72 79 20 74 68 65 20 63 75 72 72  # Query the curr
08e0: 65 6e 74 6c 79 20 73 65 74 20 76 65 72 62 6f 73  ently set verbos
08f0: 69 74 79 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65  ity...    typeme
0900: 74 68 6f 64 20 76 65 72 62 6f 73 69 74 79 3f 20  thod verbosity? 
0910: 7b 7d 20 7b 0a 09 72 65 74 75 72 6e 20 20 24 6d  {} {..return  $m
0920: 79 6c 6f 67 6c 65 76 65 6c 0a 20 20 20 20 7d 0a  yloglevel.    }.
0930: 0a 20 20 20 20 23 20 53 65 74 20 74 68 65 20 6c  .    # Set the l
0940: 6f 67 20 63 61 6c 6c 62 61 63 6b 20 68 61 6e 64  og callback hand
0950: 6c 69 6e 67 20 74 68 65 20 61 63 74 75 61 6c 20  ling the actual 
0960: 6f 75 74 70 75 74 20 6f 66 20 6d 65 73 73 61 67  output of messag
0970: 65 73 20 67 6f 69 6e 67 0a 20 20 20 20 23 20 74  es going.    # t
0980: 68 72 6f 75 67 68 20 74 68 65 20 70 61 63 6b 61  hrough the packa
0990: 67 65 2e 0a 0a 20 20 20 20 74 79 70 65 6d 65 74  ge...    typemet
09a0: 68 6f 64 20 63 6f 6d 6d 61 6e 64 20 7b 63 6d 64  hod command {cmd
09b0: 70 72 65 66 69 78 7d 20 7b 0a 09 76 61 72 69 61  prefix} {..varia
09c0: 62 6c 65 20 6d 79 6c 6f 67 63 6d 64 20 24 63 6d  ble mylogcmd $cm
09d0: 64 70 72 65 66 69 78 0a 09 72 65 74 75 72 6e 0a  dprefix..return.
09e0: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 52 65 67      }..    # Reg
09f0: 69 73 74 65 72 20 61 20 73 79 73 74 65 6d 20 6e  ister a system n
0a00: 61 6d 65 2c 20 74 6f 20 65 6e 61 62 6c 65 20 74  ame, to enable t
0a10: 61 62 75 6c 61 72 20 66 6f 72 6d 61 74 74 69 6e  abular formattin
0a20: 67 2e 20 54 68 69 73 20 69 73 0a 20 20 20 20 23  g. This is.    #
0a30: 20 64 6f 6e 65 20 62 79 20 73 65 74 74 69 6e 67   done by setting
0a40: 20 75 70 20 61 20 66 6f 72 6d 61 74 20 73 70 65   up a format spe
0a50: 63 69 66 69 65 72 20 77 69 74 68 20 61 20 70 72  cifier with a pr
0a60: 6f 70 65 72 20 77 69 64 74 68 2e 20 54 68 69 73  oper width. This
0a70: 0a 20 20 20 20 23 20 69 73 20 68 61 6e 64 6c 65  .    # is handle
0a80: 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74  d in the generat
0a90: 69 6f 6e 20 63 6f 6d 6d 61 6e 64 2c 20 62 65 66  ion command, bef
0aa0: 6f 72 65 20 74 68 65 20 6f 75 74 70 75 74 20 63  ore the output c
0ab0: 61 6c 6c 62 61 63 6b 0a 20 20 20 20 23 20 69 73  allback.    # is
0ac0: 20 69 6e 76 6f 6b 65 64 2e 0a 0a 20 20 20 20 74   invoked...    t
0ad0: 79 70 65 6d 65 74 68 6f 64 20 72 65 67 69 73 74  ypemethod regist
0ae0: 65 72 20 7b 6e 61 6d 65 7d 20 7b 0a 09 73 65 74  er {name} {..set
0af0: 20 6e 6c 65 6e 20 5b 73 74 72 69 6e 67 20 6c 65   nlen [string le
0b00: 6e 67 74 68 20 24 6e 61 6d 65 5d 0a 09 69 66 20  ngth $name]..if 
0b10: 7b 24 6e 6c 65 6e 20 3c 20 24 6d 79 73 79 73 6c  {$nlen < $mysysl
0b20: 65 6e 7d 20 72 65 74 75 72 6e 0a 09 73 65 74 20  en} return..set 
0b30: 6d 79 73 79 73 6c 65 6e 20 24 6e 6c 65 6e 0a 09  mysyslen $nlen..
0b40: 73 65 74 20 6d 79 73 79 73 66 6d 74 20 25 2d 24  set mysysfmt %-$
0b50: 7b 6d 79 73 79 73 6c 65 6e 7d 73 0a 09 72 65 74  {mysyslen}s..ret
0b60: 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20 20 23  urn.    }..    #
0b70: 20 23 20 23 23 20 23 23 23 20 23 23 23 23 23 20   # ## ### ##### 
0b80: 23 23 23 23 23 23 23 23 20 23 23 23 23 23 23 23  ######## #######
0b90: 23 23 23 23 23 23 0a 20 20 20 20 23 23 20 49 6e  ######.    ## In
0ba0: 74 65 72 6e 61 6c 2c 20 73 74 61 74 65 0a 0a 20  ternal, state.. 
0bb0: 20 20 20 74 79 70 65 76 61 72 69 61 62 6c 65 20     typevariable 
0bc0: 6d 79 6c 6f 67 6c 65 76 65 6c 20 32 20 20 20 20  myloglevel 2    
0bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0be0: 20 3b 20 23 20 53 6f 6d 65 20 76 65 72 62 6f 73   ; # Some verbos
0bf0: 69 74 79 2c 20 6e 6f 74 20 74 6f 6f 20 6d 75 63  ity, not too muc
0c00: 68 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62  h.    typevariab
0c10: 6c 65 20 6d 79 6c 6f 67 63 6d 64 20 20 20 3a 3a  le mylogcmd   ::
0c20: 76 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 3a 3a  vc::tools::log::
0c30: 4f 55 54 20 3b 20 23 20 53 74 61 6e 64 61 72 64  OUT ; # Standard
0c40: 20 6f 75 74 70 75 74 20 74 6f 20 73 74 64 6f 75   output to stdou
0c50: 74 2e 0a 20 20 20 20 74 79 70 65 76 61 72 69 61  t..    typevaria
0c60: 62 6c 65 20 6d 79 73 79 73 66 6d 74 20 25 73 20  ble mysysfmt %s 
0c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c80: 20 20 20 20 20 3b 20 23 20 4e 6f 6e 2d 74 61 62       ; # Non-tab
0c90: 75 6c 61 72 20 66 6f 72 6d 61 74 74 69 6e 67 2e  ular formatting.
0ca0: 0a 20 20 20 20 74 79 70 65 76 61 72 69 61 62 6c  .    typevariabl
0cb0: 65 20 6d 79 73 79 73 6c 65 6e 20 30 20 20 20 20  e mysyslen 0    
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cd0: 20 20 20 3b 20 23 20 44 69 74 74 6f 2e 0a 0a 20     ; # Ditto... 
0ce0: 20 20 20 23 20 23 20 23 23 20 23 23 23 20 23 23     # # ## ### ##
0cf0: 23 23 23 20 23 23 23 23 23 23 23 23 20 23 23 23  ### ######## ###
0d00: 23 23 23 23 23 23 23 23 23 23 0a 20 20 20 20 23  ##########.    #
0d10: 23 20 49 6e 74 65 72 6e 61 6c 2c 20 68 65 6c 70  # Internal, help
0d20: 65 72 20 6d 65 74 68 6f 64 73 20 28 66 6f 72 6d  er methods (form
0d30: 61 74 74 69 6e 67 2c 20 64 69 73 70 61 74 63 68  atting, dispatch
0d40: 29 0a 0a 20 20 20 20 70 72 6f 63 20 53 79 73 74  )..    proc Syst
0d50: 65 6d 20 7b 73 7d 20 7b 0a 09 3a 3a 76 61 72 69  em {s} {..::vari
0d60: 61 62 6c 65 20 6d 79 73 79 73 66 6d 74 0a 09 72  able mysysfmt..r
0d70: 65 74 75 72 6e 20 5b 66 6f 72 6d 61 74 20 24 6d  eturn [format $m
0d80: 79 73 79 73 66 6d 74 20 24 73 5d 0a 20 20 20 20  ysysfmt $s].    
0d90: 7d 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23 23  }..    # # ## ##
0da0: 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23 23  # ##### ########
0db0: 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a 20   #############. 
0dc0: 20 20 20 23 23 20 53 74 61 6e 64 61 72 64 20 6f     ## Standard o
0dd0: 75 74 70 75 74 20 63 61 6c 6c 62 61 63 6b 2c 20  utput callback, 
0de0: 6d 6f 64 75 6c 65 20 69 6e 74 65 72 6e 61 6c 0a  module internal.
0df0: 0a 20 20 20 20 23 20 44 69 73 70 61 74 63 68 20  .    # Dispatch 
0e00: 74 6f 20 74 68 65 20 68 61 6e 64 6c 65 72 73 20  to the handlers 
0e10: 6f 66 20 74 68 65 20 70 6f 73 73 69 62 6c 65 20  of the possible 
0e20: 6f 70 65 72 61 74 69 6f 6e 73 2e 0a 0a 20 20 20  operations...   
0e30: 20 70 72 6f 63 20 4f 55 54 20 7b 6f 70 20 61 72   proc OUT {op ar
0e40: 67 73 7d 20 7b 0a 09 65 76 61 6c 20 5b 6c 69 6e  gs} {..eval [lin
0e50: 73 65 72 74 20 24 61 72 67 73 20 30 20 3a 3a 76  sert $args 0 ::v
0e60: 63 3a 3a 74 6f 6f 6c 73 3a 3a 6c 6f 67 3a 3a 4f  c::tools::log::O
0e70: 55 54 2f 24 6f 70 5d 0a 09 72 65 74 75 72 6e 0a  UT/$op]..return.
0e80: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 57 72 69      }..    # Wri
0e90: 74 65 20 68 61 6e 64 6c 65 72 2e 20 45 61 63 68  te handler. Each
0ea0: 20 6d 65 73 73 61 67 65 20 69 73 20 61 20 6c 69   message is a li
0eb0: 6e 65 2e 0a 0a 20 20 20 20 70 72 6f 63 20 4f 55  ne...    proc OU
0ec0: 54 2f 77 72 69 74 65 20 7b 73 79 73 74 65 6d 20  T/write {system 
0ed0: 74 65 78 74 7d 20 7b 0a 09 70 75 74 73 20 22 24  text} {..puts "$
0ee0: 73 79 73 74 65 6d 20 24 74 65 78 74 22 0a 09 72  system $text"..r
0ef0: 65 74 75 72 6e 0a 20 20 20 20 7d 0a 0a 20 20 20  eturn.    }..   
0f00: 20 23 20 50 72 6f 67 72 65 73 73 20 68 61 6e 64   # Progress hand
0f10: 6c 65 72 2e 20 55 73 65 73 20 5c 72 20 74 6f 20  ler. Uses \r to 
0f20: 72 65 74 75 72 6e 20 74 6f 20 74 68 65 20 62 65  return to the be
0f30: 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 0a 20  ginning of the. 
0f40: 20 20 20 23 20 63 75 72 72 65 6e 74 20 6c 69 6e     # current lin
0f50: 65 20 77 69 74 68 6f 75 74 20 61 64 76 61 6e 63  e without advanc
0f60: 69 6e 67 2e 0a 0a 20 20 20 20 70 72 6f 63 20 4f  ing...    proc O
0f70: 55 54 2f 70 72 6f 67 72 65 73 73 20 7b 73 79 73  UT/progress {sys
0f80: 74 65 6d 20 6e 20 6d 61 78 7d 20 7b 0a 09 69 66  tem n max} {..if
0f90: 20 7b 24 6d 61 78 20 65 71 20 7b 7d 7d 20 7b 0a   {$max eq {}} {.
0fa0: 09 20 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77  .    puts -nonew
0fb0: 6c 69 6e 65 20 22 24 73 79 73 74 65 6d 20 24 6e  line "$system $n
0fc0: 5c 72 22 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 20  \r"..} else {.. 
0fd0: 20 20 20 70 75 74 73 20 2d 6e 6f 6e 65 77 6c 69     puts -nonewli
0fe0: 6e 65 20 22 24 73 79 73 74 65 6d 20 5b 66 6f 72  ne "$system [for
0ff0: 6d 61 74 20 25 5b 73 74 72 69 6e 67 20 6c 65 6e  mat %[string len
1000: 67 74 68 20 24 6d 61 78 5d 73 20 24 6e 5d 2f 24  gth $max]s $n]/$
1010: 6d 61 78 5c 72 22 0a 09 7d 0a 09 66 6c 75 73 68  max\r"..}..flush
1020: 20 73 74 64 6f 75 74 0a 09 72 65 74 75 72 6e 0a   stdout..return.
1030: 20 20 20 20 7d 0a 0a 20 20 20 20 23 20 23 20 23      }..    # # #
1040: 23 20 23 23 23 20 23 23 23 23 23 20 23 23 23 23  # ### ##### ####
1050: 23 23 23 23 20 23 23 23 23 23 23 23 23 23 23 23  #### ###########
1060: 23 23 0a 20 20 20 20 23 23 20 43 6f 6e 66 69 67  ##.    ## Config
1070: 75 72 61 74 69 6f 6e 0a 0a 20 20 20 20 70 72 61  uration..    pra
1080: 67 6d 61 20 2d 68 61 73 69 6e 73 74 61 6e 63 65  gma -hasinstance
1090: 73 20 20 20 6e 6f 20 3b 20 23 20 73 69 6e 67 6c  s   no ; # singl
10a0: 65 74 6f 6e 0a 20 20 20 20 70 72 61 67 6d 61 20  eton.    pragma 
10b0: 2d 68 61 73 74 79 70 65 69 6e 66 6f 20 20 20 20  -hastypeinfo    
10c0: 6e 6f 20 3b 20 23 20 6e 6f 20 69 6e 74 72 6f 73  no ; # no intros
10d0: 70 65 63 74 69 6f 6e 0a 20 20 20 20 70 72 61 67  pection.    prag
10e0: 6d 61 20 2d 68 61 73 74 79 70 65 64 65 73 74 72  ma -hastypedestr
10f0: 6f 79 20 6e 6f 20 3b 20 23 20 69 6d 6d 6f 72 74  oy no ; # immort
1100: 61 6c 0a 0a 20 20 20 20 23 20 23 20 23 23 20 23  al..    # # ## #
1110: 23 23 20 23 23 23 23 23 20 23 23 23 23 23 23 23  ## ##### #######
1120: 23 20 23 23 23 23 23 23 23 23 23 23 23 23 23 0a  # #############.
1130: 7d 0a 0a 6e 61 6d 65 73 70 61 63 65 20 65 76 61  }..namespace eva
1140: 6c 20 3a 3a 76 63 3a 3a 74 6f 6f 6c 73 20 7b 0a  l ::vc::tools {.
1150: 20 20 20 20 6e 61 6d 65 73 70 61 63 65 20 65 78      namespace ex
1160: 70 6f 72 74 20 6c 6f 67 0a 7d 0a 0a 23 20 2d 2d  port log.}..# --
1170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1190: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
11b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 23 20 52 65  -----------.# Re
11c0: 61 64 79 0a 0a 70 61 63 6b 61 67 65 20 70 72 6f  ady..package pro
11d0: 76 69 64 65 20 76 63 3a 3a 74 6f 6f 6c 73 3a 3a  vide vc::tools::
11e0: 6c 6f 67 20 31 2e 30 0a 72 65 74 75 72 6e 0a     log 1.0.return.