2 import time, os, re, glob, sys
3 from pprint import PrettyPrinter
7 def init_options(options_arg):
11 # how could this accept a list again ?
13 now=time.strftime("%H:%M:%S", time.localtime())
14 print "*",now,'--',message
16 def pprint(message,spec,depth=2):
17 now=time.strftime("%H:%M:%S", time.localtime())
18 print ">",now,"--",message
19 PrettyPrinter(indent=8,depth=depth).pprint(spec)
23 def system(command,background=False,silent=False):
25 print 'dry_run:',command
28 if silent : command += " 2> /dev/null"
29 if background: command += " &"
34 now=time.strftime("%H:%M:%S", time.localtime())
35 # don't show in summary
38 return os.system("set -x; " + command)
40 ### WARNING : this ALWAYS does its job, even in dry_run mode
41 def output_of (command):
44 # print 'dry_run',command
45 # return (0,'[[dry-run - fake output]]')
47 (code,string) = commands.getstatusoutput(command)
52 # convenience: translating shell-like pattern into regexp
53 def match (string, pattern):
54 # tmp - there's probably much simpler
55 # rewrite * into .*, ? into .
56 pattern=pattern.replace("*",".*")
57 pattern=pattern.replace("?",".")
58 return re.compile(pattern).match(string)
60 def locate_hooks_scripts (message,path,extensions):
61 print message,'searching',path,'for extensions',extensions
63 for ext in extensions:
64 # skip helper programs
65 scripts += glob.glob (path+'/[a-zA-Z]*.'+ext)
68 # quick & dirty - should probably use the parseroption object instead
69 # and move to TestMain as well
70 exclude_options_keys = [ 'ensure_value' , 'read_file', 'read_module' ]
71 def show_options (message,options):
72 now=time.strftime("%H:%M:%S", time.localtime())
73 print ">",now,"--",message
74 for k in dir(options):
75 if k.find("_")==0: continue
76 if k in exclude_options_keys: continue
77 print " ",k,":",getattr(options,k)