diff options
author | Éric Araujo <merwok@netwok.org> | 2011-08-02 01:16:12 (GMT) |
---|---|---|
committer | Éric Araujo <merwok@netwok.org> | 2011-08-02 01:16:12 (GMT) |
commit | 33af263d36a8a8240989dfb3a0af590681897417 (patch) | |
tree | 1098452f7ada7cb96597061b1837924ae4a4609f /Lib/distutils | |
parent | 0db7f72cc74baeefaab647cd8f627a0d31becf16 (diff) | |
download | cpython-33af263d36a8a8240989dfb3a0af590681897417.zip cpython-33af263d36a8a8240989dfb3a0af590681897417.tar.gz cpython-33af263d36a8a8240989dfb3a0af590681897417.tar.bz2 |
Fix incorrect mtime comparison in distutils (#11933).
This is a regression introduced in 9211a5d7d0b4, when uses of ST_MTIME
constants were changed to uses of st_mtime attributes. As diagnosed in
the bug report, this change is not merely stylistic: st_mtime is a
float but ST_MTIME’s resolution is rounded to the seconds, so there was
a mismatch between the values seen by file_util and dep_util which
caused an sdist to be unnecessarily created a second time on an ext4
filesystem.
This patch has been tested by John S. Gruber, who reported the bug.
As this is a simple code revert, I think it’s okay to commit without a
unit test.
Diffstat (limited to 'Lib/distutils')
-rw-r--r-- | Lib/distutils/dep_util.py | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/Lib/distutils/dep_util.py b/Lib/distutils/dep_util.py index 4e40df6..2b75905 100644 --- a/Lib/distutils/dep_util.py +++ b/Lib/distutils/dep_util.py @@ -7,6 +7,7 @@ timestamp dependency analysis.""" __revision__ = "$Id$" import os +from stat import ST_MTIME from distutils.errors import DistutilsFileError def newer(source, target): @@ -27,7 +28,7 @@ def newer(source, target): if not os.path.exists(target): return True - return os.stat(source).st_mtime > os.stat(target).st_mtime + return os.stat(source)[ST_MTIME] > os.stat(target)[ST_MTIME] def newer_pairwise(sources, targets): """Walk two filename lists in parallel, testing if each source is newer @@ -71,7 +72,7 @@ def newer_group(sources, target, missing='error'): # is more recent than 'target', then 'target' is out-of-date and # we can immediately return true. If we fall through to the end # of the loop, then 'target' is up-to-date and we return false. - target_mtime = os.stat(target).st_mtime + target_mtime = os.stat(target)[ST_MTIME] for source in sources: if not os.path.exists(source): @@ -82,7 +83,7 @@ def newer_group(sources, target, missing='error'): elif missing == 'newer': # missing source means target is return True # out-of-date - if os.stat(source).st_mtime > target_mtime: + if os.stat(source)[ST_MTIME] > target_mtime: return True return False |