]> granicus.if.org Git - python/commitdiff
'newer_group()' can now deal with missing files, in a way specified by
authorGreg Ward <gward@python.net>
Sun, 9 Jan 2000 22:48:59 +0000 (22:48 +0000)
committerGreg Ward <gward@python.net>
Sun, 9 Jan 2000 22:48:59 +0000 (22:48 +0000)
the 'missing' parameter.

Lib/distutils/util.py

index 4f93cd44d5f5bcbbfc3e1a5f87e6a4898b5d4120..953c2e26e2a8c2979801aaa688b82e0e22723050 100644 (file)
@@ -120,11 +120,18 @@ def newer_pairwise (sources, targets):
 # newer_pairwise ()
 
 
-def newer_group (sources, target):
+def newer_group (sources, target, missing='error'):
     """Return true if 'target' is out-of-date with respect to any
        file listed in 'sources'.  In other words, if 'target' exists and
        is newer than every file in 'sources', return false; otherwise
-       return true."""
+       return true.  'missing' controls what we do when a source file is
+       missing; the default ("error") is to blow up with an OSError from
+       inside 'stat()'; if it is "ignore", we silently drop any missing
+       source files; if it is "newer", any missing source files make us
+       assume that 'target' is out-of-date (this is handy in "dry-run"
+       mode: it'll make you pretend to carry out commands that wouldn't
+       work because inputs are missing, but that doesn't matter because
+       you're not actually going to run the commands)."""
 
     # If the target doesn't even exist, then it's definitely out-of-date.
     if not os.path.exists (target):
@@ -137,6 +144,14 @@ def newer_group (sources, target):
     from stat import ST_MTIME
     target_mtime = os.stat (target)[ST_MTIME]
     for source in sources:
+        if not os.path.exists (source):
+            if missing == 'error':      # blow up when we stat() the file
+                pass                    
+            elif missing == 'ignore':   # missing source dropped from 
+                continue                #  target's dependency list
+            elif missing == 'newer':    # missing source means target is
+                return 1                #  out-of-date
+            
         source_mtime = os.stat(source)[ST_MTIME]
         if source_mtime > target_mtime:
             return 1