1 # Thierry Parmentelat <thierry.parmentelat@inria.fr>
2 # Copyright (C) 2010 INRIA
4 import time, os, re, glob, sys
5 from pprint import PrettyPrinter
9 def init_options(options_arg):
13 # how could this accept a list again ?
15 now = time.strftime("%H:%M:%S", time.localtime())
16 print "*", now, '--', message
18 def pprint(message, spec, depth=2):
19 now = time.strftime("%H:%M:%S", time.localtime())
20 print ">", now, "--", message
21 PrettyPrinter(indent=8, depth=depth).pprint(spec)
25 def system(command, background=False, silent=False, dry_run=None):
26 dry_run = dry_run if dry_run is not None else getattr(options, 'dry_run', False)
28 print 'dry_run:', command
32 if command.find(';') >= 0:
33 command = "({}) 2> /dev/null".format(command)
34 else: command += " 2> /dev/null"
41 now = time.strftime("%H:%M:%S", time.localtime())
42 # don't show in summary
43 print "->", now, '--',
46 command = "set -x; " + command
47 return os.system(command)
49 ### WARNING : this ALWAYS does its job, even in dry_run mode
50 def output_of (command):
52 (code, string) = commands.getstatusoutput(command)
56 # convenience: translating shell-like pattern into regexp
57 def match (string, pattern):
58 # tmp - there's probably much simpler
59 # rewrite * into .*, ? into .
60 pattern = pattern.replace("*",".*")
61 pattern = pattern.replace("?",".")
62 return re.compile(pattern).match(string)
64 def locate_hooks_scripts (message, path, extensions):
65 print message, 'searching', path, 'for extensions', extensions
67 for ext in extensions:
68 # skip helper programs
69 scripts += glob.glob (path+'/[a-zA-Z]*.' + ext)
72 # quick & dirty - should probably use the parseroption object instead
73 # and move to TestMain as well
74 exclude_options_keys = [ 'ensure_value' , 'read_file', 'read_module' ]
75 def show_options (message, options):
76 now = time.strftime("%H:%M:%S", time.localtime())
77 print ">", now, "--", message
78 for k in dir(options):
81 if k in exclude_options_keys:
83 print " ", k, ":", getattr(options, k)