Tweak movefile() timestamp preservation code to maximize precision for old
authorZac Medico <zmedico@gentoo.org>
Sun, 13 Dec 2009 03:51:52 +0000 (03:51 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 13 Dec 2009 03:51:52 +0000 (03:51 -0000)
timestamps that are closer to the epoch. (trunk r15039)

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

pym/portage/__init__.py

index 0775fbc311a743054f2170bb45203b89da0ca9fb..723c722d3ce7ad939eb16b0ed88373b19739f3a9 100644 (file)
@@ -7676,28 +7676,28 @@ def movefile(src, dest, newmtime=None, sstat=None, mysettings=None,
                                        else:
                                                # Prevent mtime from rounding up to the next second.
                                                int_mtime = sstat[stat.ST_MTIME]
-                                               mtime_str = "%i.9999999" % int_mtime
-                                               min_len = len(str(int_mtime)) + 2
-                                               while True:
-                                                       mtime_str = mtime_str[:-1]
-                                                       newmtime = float(mtime_str)
-                                                       if int_mtime == long(newmtime):
-                                                               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
-                                                                       newmtime = float(mtime_str)
-                                                               break
-                                                       elif len(mtime_str) <= min_len:
-                                                               # This shouldn't happen, but let's make sure
-                                                               # we can never have an infinite loop.
-                                                               newmtime = int_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
+                                               newmtime = float(mtime_str)
 
                                        os.utime(dest, (newmtime, newmtime))
                                newmtime = sstat[stat.ST_MTIME]