# $Id$
-import time
-import os
-import commands
-import pprint
+import time, os, re, glob, sys
+from pprint import PrettyPrinter
+
+options={}
+
+def init_options(options_arg):
+ global options
+ options=options_arg
# how could this accept a list again ?
def header(message):
now=time.strftime("%H:%M:%S", time.localtime())
print "*",now,'--',message
-def show_spec(message,spec,depth=2):
+def pprint(message,spec,depth=2):
now=time.strftime("%H:%M:%S", time.localtime())
print ">",now,"--",message
- pprint.PrettyPrinter(indent=6,depth=depth).pprint(spec)
+ PrettyPrinter(indent=8,depth=depth).pprint(spec)
+
+
+
+def system(command,background=False):
+ if background: command += " &"
+ if options.dry_run:
+ print 'dry_run:',command
+ return 0
+ else:
+ now=time.strftime("%H:%M:%S", time.localtime())
+ print "*",now,'--',
+ sys.stdout.flush()
+ return os.system("set -x; " + command)
+
+### WARNING : this ALWAYS does its job, even in dry_run mode
+def output_of (command):
+ import commands
+# if options.dry_run:
+# print 'dry_run',command
+# return (0,'[[dry-run - fake output]]')
+# else:
+ (code,string) = commands.getstatusoutput(command)
+ return (code,string)
-def system(command):
+
+
+# convenience: translating shell-like pattern into regexp
+def match (string, pattern):
+ # tmp - there's probably much simpler
+ # rewrite * into .*, ? into .
+ pattern=pattern.replace("*",".*")
+ pattern=pattern.replace("?",".")
+ return re.compile(pattern).match(string)
+
+def locate_sanity_scripts (message,path,extensions):
+ print message,'searching',path,'for extensions',extensions
+ scripts=[]
+ for ext in extensions:
+ scripts += glob.glob (path+'/*.'+ext)
+ return scripts
+
+# quick & dirty - should probably use the parseroption object instead
+# and move to TestMain as well
+exclude_options_keys = [ 'ensure_value' , 'read_file', 'read_module' ]
+def show_options (message,options):
now=time.strftime("%H:%M:%S", time.localtime())
- print "+",now,':',command
- return os.system("set -x; " + command)
-
-# checks whether a given hostname/ip responds to ping
-ping_timeout_option = None
-def check_ping (hostname):
- # check OS (support for macos)
- global ping_timeout_option
- if not ping_timeout_option:
- (status,osname) = commands.getstatusoutput("uname -s")
- if status != 0:
- raise Exception, "Cannot figure your OS name"
- if osname == "Linux":
- ping_timeout_option="-w"
- elif osname == "Darwin":
- ping_timeout_option="-t"
-
- command="ping -c 1 %s 1 %s"%(ping_timeout_option,hostname)
- (status,output) = commands.getstatusoutput(command)
- return status == 0
-
-# inserts a backslash before each occurence of the following chars
-# \ " ' < > & | ; ( ) $ * ~
-def backslash_shell_specials (command):
- result=''
- for char in command:
- if char in "\\\"'<>&|;()$*~":
- result +='\\'+char
- else:
- result +=char
- return result
+ print ">",now,"--",message
+ for k in dir(options):
+ if k.find("_")==0: continue
+ if k in exclude_options_keys: continue
+ print " ",k,":",getattr(options,k)
+
+