+# -*- python3 -*-
# Thierry Parmentelat <thierry.parmentelat@inria.fr>
-# Copyright (C) 2010 INRIA
+# Copyright (C) 2015 INRIA
#
-import time, os, re, glob, sys
+import sys
+import time
+import os
+import re
+import glob
+import subprocess
from pprint import PrettyPrinter
options={}
# how could this accept a list again ?
def header(message):
now = time.strftime("%H:%M:%S", time.localtime())
- print "*", now, '--', message
+ print("*", now, '--', message)
def pprint(message, spec, depth=2):
now = time.strftime("%H:%M:%S", time.localtime())
- print ">", now, "--", message
+ print(">", now, "--", message)
PrettyPrinter(indent=8, depth=depth).pprint(spec)
-
-def system(command, background=False, silent=False, dry_run=None):
+# 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
+ print('dry_run:', command)
return 0
if silent :
if background:
command += " &"
if silent:
- print '.',
+ print('.', end=' ')
sys.stdout.flush()
else:
now = time.strftime("%H:%M:%S", time.localtime())
# don't show in summary
- print "->", now, '--',
+ print("->", now, '--', end=' ')
sys.stdout.flush()
if not silent:
command = "set -x; " + command
- return os.system(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 commands
- (code, string) = commands.getstatusoutput(command)
+ import subprocess
+ (code, string) = subprocess.getstatusoutput(command)
return (code, string)
return re.compile(pattern).match(string)
def locate_hooks_scripts (message, path, extensions):
- print message, 'searching', path, 'for extensions', extensions
+ print(message, 'searching', path, 'for extensions', extensions)
scripts = []
for ext in extensions:
# skip helper programs
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
+ 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)
+ print(" ", k, ":", getattr(options, k))