From a55db3e249485b5d01e4a131e4f1b20d4418fc53 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 12 Dec 2009 07:44:16 +0000 Subject: [PATCH] In movefile mtime rounding code, generate nanosecond resolution (9 decimal places) in order to ensure that the floating point representation is the highest value possible without rounding up. svn path=/main/trunk/; revision=15046 --- pym/portage/__init__.py | 36 +++++++++++++++--------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 062f38a39..646295fee 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -7671,29 +7671,23 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None, newmtime = sstat.st_mtime else: # Prevent mtime from rounding up to the next second. + # Generate nanosecond resolution (9 decimal places) in + # order to ensure that the floating point representation + # is the highest value possible without rounding up. int_mtime = sstat[stat.ST_MTIME] mtime_str = "%i." % int_mtime - digits = 0 - max_digits = 9 - while digits < max_digits: - if int_mtime == long(float(mtime_str + "9")): - mtime_str += "9" - digits += 1 - else: - if digits < max_digits: - another_digit = None - for i in range(1, 9): - i_str = str(i) - if int_mtime != \ - long(float(mtime_str + i_str)): - break - else: - another_digit = i_str - if another_digit is not None: - mtime_str += another_digit - digits += 1 - break - if digits > 0: + nonzero_digits = 0 + decimal_places = 9 + for i in range(max_digits): + for digit in range(9, -1, -1): + digit_str = str(digit) + if int_mtime == long(float(mtime_str + digit_str)): + break + if digit > 0: + nonzero_digits += 1 + mtime_str += digit_str + + if nonzero_digits > 0: newmtime = float(mtime_str) else: newmtime = int_mtime -- 2.26.2