Commit 19eb4a20 authored by Greg Ward's avatar Greg Ward

'newer_group()' can now deal with missing files, in a way specified by

the 'missing' parameter.
parent 91c5d0ef
...@@ -120,11 +120,18 @@ def newer_pairwise (sources, targets): ...@@ -120,11 +120,18 @@ def newer_pairwise (sources, targets):
# newer_pairwise () # 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 """Return true if 'target' is out-of-date with respect to any
file listed in 'sources'. In other words, if 'target' exists and file listed in 'sources'. In other words, if 'target' exists and
is newer than every file in 'sources', return false; otherwise 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 the target doesn't even exist, then it's definitely out-of-date.
if not os.path.exists (target): if not os.path.exists (target):
...@@ -137,6 +144,14 @@ def newer_group (sources, target): ...@@ -137,6 +144,14 @@ def newer_group (sources, target):
from stat import ST_MTIME from stat import ST_MTIME
target_mtime = os.stat (target)[ST_MTIME] target_mtime = os.stat (target)[ST_MTIME]
for source in sources: 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] source_mtime = os.stat(source)[ST_MTIME]
if source_mtime > target_mtime: if source_mtime > target_mtime:
return 1 return 1
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment