From 33af263d36a8a8240989dfb3a0af590681897417 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89ric=20Araujo?= Date: Tue, 2 Aug 2011 03:16:12 +0200 Subject: Fix incorrect mtime comparison in distutils (#11933). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- Lib/distutils/dep_util.py | 7 ++++--- Misc/ACKS | 1 + Misc/NEWS | 2 ++ 3 files changed, 7 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 diff --git a/Misc/ACKS b/Misc/ACKS index ff0a29a..a04b637 100644 --- a/Misc/ACKS +++ b/Misc/ACKS @@ -309,6 +309,7 @@ Hans de Graaff Eddy De Greef Duncan Grisby Fabian Groffen +John S. Gruber Dag Gruneau Filip Gruszczyński Michael Guravage diff --git a/Misc/NEWS b/Misc/NEWS index 01660d5..e824332 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -37,6 +37,8 @@ Core and Builtins Library ------- +- Issue #11933: Fix incorrect mtime comparison in distutils. + - Issues #11104, #8688: Fix the behavior of distutils' sdist command with manually-maintained MANIFEST files. -- cgit v0.12