vardbapi: use float mtime for aux cache v2.2.0_alpha117
authorZac Medico <zmedico@gentoo.org>
Thu, 12 Jul 2012 20:58:30 +0000 (13:58 -0700)
committerZac Medico <zmedico@gentoo.org>
Thu, 12 Jul 2012 20:58:30 +0000 (13:58 -0700)
pym/portage/dbapi/vartree.py

index fbf2e747c8bdf62e50811ff8bda1b45eb8fa321b..dddc094d24975042ad556afe41db86497d3e8a95 100644 (file)
@@ -647,7 +647,8 @@ class vardbapi(dbapi):
                        if e.errno != errno.ENOENT:
                                raise
                        raise KeyError(mycpv)
-               mydir_mtime = mydir_stat[stat.ST_MTIME]
+               # Use float mtime when available.
+               mydir_mtime = mydir_stat.st_mtime
                pkg_data = self._aux_cache["packages"].get(mycpv)
                pull_me = cache_these.union(wants)
                mydata = {"_mtime_" : mydir_mtime}
@@ -660,13 +661,18 @@ class vardbapi(dbapi):
                                pkg_data = None
                        else:
                                cache_mtime, metadata = pkg_data
-                               if not isinstance(cache_mtime, (long, int)) or \
+                               if not isinstance(cache_mtime, (float, long, int)) or \
                                        not isinstance(metadata, dict):
                                        pkg_data = None
 
                if pkg_data:
                        cache_mtime, metadata = pkg_data
-                       cache_valid = cache_mtime == mydir_mtime
+                       if isinstance(cache_mtime, float):
+                               cache_valid = cache_mtime == mydir_stat.st_mtime
+                       else:
+                               # Cache may contain integer mtime.
+                               cache_valid = cache_mtime == mydir_stat[stat.ST_MTIME]
+
                if cache_valid:
                        # Migrate old metadata to unicode.
                        for k, v in metadata.items():