summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Ward <gward@python.net>2000-01-09 22:48:59 (GMT)
committerGreg Ward <gward@python.net>2000-01-09 22:48:59 (GMT)
commit7b7679eb79a7ad7766881b05fab0681850f79a6f (patch)
treedc3bec12a0db3ab4378efed68a2d022b5094f8f1
parentc9f3187be20631a2bbbce9d9d582beda148a2025 (diff)
downloadcpython-7b7679eb79a7ad7766881b05fab0681850f79a6f.zip
cpython-7b7679eb79a7ad7766881b05fab0681850f79a6f.tar.gz
cpython-7b7679eb79a7ad7766881b05fab0681850f79a6f.tar.bz2
'newer_group()' can now deal with missing files, in a way specified by
the 'missing' parameter.
-rw-r--r--Lib/distutils/util.py19
1 files changed, 17 insertions, 2 deletions
diff --git a/Lib/distutils/util.py b/Lib/distutils/util.py
index 4f93cd4..953c2e2 100644
--- a/Lib/distutils/util.py
+++ b/Lib/distutils/util.py
@@ -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