In movefile mtime rounding code, generate nanosecond resolution (9 decimal
authorZac Medico <zmedico@gentoo.org>
Sun, 13 Dec 2009 03:53:22 +0000 (03:53 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 13 Dec 2009 03:53:22 +0000 (03:53 -0000)
places) in order to ensure that the floating point representation is the
highest value possible without rounding up. (trunk r15046)

svn path=/main/branches/2.1.7/; revision=15080

pym/portage/__init__.py

index 9a0b7265db04390d463ded118d6661d62f322438..82064c35fa60e33a62d12883ead9966b4b1acc6d 100644 (file)
@@ -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