changeset 4242:3e25132be4b4

Disabled eager resolution of libraries as they are defined. Made CTRL-C kill off subprocesses of mx.
author Doug Simon <doug.simon@oracle.com>
date Sat, 07 Jan 2012 23:59:02 +0100
parents 8fece0287975
children 37cd9490f7f0
files mxtool/mx.py
diffstat 1 files changed, 14 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/mxtool/mx.py	Fri Jan 06 22:11:20 2012 +0100
+++ b/mxtool/mx.py	Sat Jan 07 23:59:02 2012 +0100
@@ -295,7 +295,6 @@
             urls = pop_list(attrs, 'urls')
             l = Library(self, name, path, mustExist, urls)
             l.__dict__.update(attrs)
-            l.get_path(True)
             self.libs.append(l)
         
     def _load_commands(self, mxDir):
@@ -552,8 +551,8 @@
         delay = min(delay * 2, remaining, .05)
         time.sleep(delay)
 
-# Makes the current subprocess accessible to the timeout alarm handler
-# This is a tuple of the process object and args.
+# Makes the current subprocess accessible to the abort() function
+# This is a tuple of the Popen object and args.
 _currentSubprocess = None
 
 def run(args, nonZeroIsFatal=True, out=None, err=None, cwd=None, timeout=None):
@@ -585,7 +584,7 @@
         if not callable(out) and not callable(err) and timeout is None:
             # The preexec_fn=os.setsid
             p = subprocess.Popen(args, cwd=cwd, preexec_fn=preexec_fn)
-            _currentSubprocess = (p, args) 
+            _currentSubprocess = (p, args)
             retcode = p.wait()
         else:
             def redirect(stream, f):
@@ -615,9 +614,10 @@
         if _opts.verbose:
             raise e
         abort(e.errno)
+    except KeyboardInterrupt:
+        abort(1)
     finally:
         _currentSubprocess = None
-    
 
     if retcode and nonZeroIsFatal:
         if _opts.verbose:
@@ -741,6 +741,14 @@
     if it is None, the exit status is zero; if it has another type (such as a string),
     the object's value is printed and the exit status is one.
     """
+    
+    #import traceback
+    #traceback.print_stack()
+    currentSubprocess = _currentSubprocess
+    if currentSubprocess is not None:
+        p, _ = currentSubprocess
+        _kill_process_group(p.pid)
+    
     raise SystemExit(codeOrMessage)
 
 def download(path, urls, verbose=False):
@@ -1245,13 +1253,6 @@
     try:
         if opts.timeout != 0:
             def alarm_handler(signum, frame):
-                #import traceback
-                #traceback.print_stack()
-                currentSubprocess = _currentSubprocess
-                if currentSubprocess is not None:
-                    p, args = currentSubprocess
-                    log('Killing subprocess due to command timeout: ' + ' '.join(args))
-                    _kill_process_group(p.pid)
                 abort('Command timed out after ' + str(opts.timeout) + ' seconds: ' + ' '.join(commandAndArgs))
             signal.signal(signal.SIGALRM, alarm_handler)
             signal.alarm(opts.timeout)
@@ -1265,5 +1266,5 @@
 if __name__ == '__main__':
     # rename this module as 'mx' so it is not imported twice by the commands.py modules
     sys.modules['mx'] = sys.modules.pop('__main__')
-    
+
     main()