- now=time.strftime("%H:%M:%S", time.localtime())
- print "*",now,'--',message
-
-def show_spec(message,spec,depth=2):
- now=time.strftime("%H:%M:%S", time.localtime())
- print ">",now,"--",message
- pprint.PrettyPrinter(indent=6,depth=depth).pprint(spec)
-
-def system(command):
- now=time.strftime("%H:%M:%S", time.localtime())
- print "+",now
- 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
+ now = time.strftime("%H:%M:%S", time.localtime())
+ print("*", now, '--', message)
+
+def pprint(message, spec, depth=2):
+ now = time.strftime("%H:%M:%S", time.localtime())
+ print(">", now, "--", message)
+ PrettyPrinter(indent=8, depth=depth).pprint(spec)
+
+
+# set a default timeout to 15 minutes - this should be plenty even for installations
+# call with timeout=None if the intention really is to wait until full completion
+def system(command, background=False, silent=False, dry_run=None, timeout=15*60):
+ dry_run = dry_run if dry_run is not None else getattr(options, 'dry_run', False)
+ if dry_run:
+ print('dry_run:', command)
+ return 0
+
+ if silent :
+ if command.find(';') >= 0:
+ command = "({}) 2> /dev/null".format(command)
+ else: command += " 2> /dev/null"
+ if background:
+ command += " &"
+ if silent:
+ print('.', end=' ')
+ sys.stdout.flush()
+ else:
+ now = time.strftime("%H:%M:%S", time.localtime())
+ # don't show in summary
+ print("->", now, '--', end=' ')
+ sys.stdout.flush()
+ if not silent:
+ command = "set -x; " + command
+ try:
+ return subprocess.call(command, shell=True, timeout=timeout)
+ except subprocess.TimeoutExpired as e:
+ header("TIMEOUT when running command {}- {}".format(command, e))
+ return -1
+
+### WARNING : this ALWAYS does its job, even in dry_run mode
+def output_of (command):
+ import subprocess
+ (code, string) = subprocess.getstatusoutput(command)
+ return (code, string)
+
+
+# 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_hooks_scripts (message, path, extensions):
+ print(message, 'searching', path, 'for extensions', extensions)
+ scripts = []
+ for ext in extensions:
+ # skip helper programs
+ scripts += glob.glob (path+'/[a-zA-Z]*.' + 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, "--", message)
+ for k in dir(options):
+ if k.find("_") == 0:
+ continue
+ if k in exclude_options_keys:
+ continue
+ print(" ", k, ":", getattr(options, k))
+
+
+