cc033184acfd946e0c25ae935af4459a9669834c
[tests.git] / system / utils.py
1 # Thierry Parmentelat <thierry.parmentelat@inria.fr>
2 # Copyright (C) 2010 INRIA 
3 #
4 import time, os, re, glob, sys
5 from pprint import PrettyPrinter
6
7 options={}
8
9 def init_options(options_arg):
10     global options
11     options=options_arg
12
13 # how could this accept a list again ?
14 def header(message):
15     now=time.strftime("%H:%M:%S", time.localtime())
16     print "*",now,'--',message
17
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)
22
23
24
25 def system(command,background=False,silent=False):
26     if getattr(options,'dry_run',None):
27         print 'dry_run:',command
28         return 0
29     
30     if silent :    
31         if command.find(';')>=0: command = "(%s) 2> /dev/null" % command
32         else: command += " 2> /dev/null"
33     if background: command += " &"
34     if silent:
35         print '.',
36         sys.stdout.flush()
37     else:
38         now=time.strftime("%H:%M:%S", time.localtime())
39         # don't show in summary
40         print "->",now,'--',
41         sys.stdout.flush()
42     return os.system("set -x; " + command)
43
44 ### WARNING : this ALWAYS does its job, even in dry_run mode
45 def output_of (command):
46     import commands
47 #    if options.dry_run:
48 #        print 'dry_run',command
49 #        return (0,'[[dry-run - fake output]]')
50 #    else:
51     (code,string) = commands.getstatusoutput(command)
52     return (code,string)
53
54
55
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)
63     
64 def locate_hooks_scripts (message,path,extensions):
65     print message,'searching',path,'for extensions',extensions
66     scripts=[]
67     for ext in extensions:
68         # skip helper programs
69         scripts += glob.glob (path+'/[a-zA-Z]*.'+ext)
70     return scripts
71     
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):
79         if k.find("_")==0: continue
80         if k in exclude_options_keys: continue
81         print "    ",k,":",getattr(options,k)
82
83
84