Make dblink invalidate the vardbapi caches for each merge and unmerge. Don't use...
authorZac Medico <zmedico@gentoo.org>
Sun, 8 Jul 2007 16:50:42 +0000 (16:50 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 8 Jul 2007 16:50:42 +0000 (16:50 -0000)
svn path=/main/branches/2.1.2/; revision=7205

pym/portage.py

index cefbd0c8bcd81dfc0d8bd335eddb6031bfd55523..0fe86438122fd0b9fb787c139555dbdde58f8997 100644 (file)
@@ -5330,12 +5330,17 @@ class vardbapi(dbapi):
                        cpc=self.cpcache[mycp]
                        if cpc[0]==mystat:
                                return cpc[1]
-               list=listdir(self.root+VDB_PATH+"/"+mysplit[0],EmptyOnError=1)
+               cat_dir = os.path.join(self.root, VDB_PATH, mysplit[0])
+               try:
+                       dir_list = os.listdir(cat_dir)
+               except EnvironmentError, e:
+                       if e.errno == portage_exception.PermissionDenied.errno:
+                               raise portage_exception.PermissionDenied(cat_dir)
+                       del e
+                       dir_list = []
 
-               if (list is None):
-                       return []
-               returnme=[]
-               for x in list:
+               returnme = []
+               for x in dir_list:
                        if x.startswith("."):
                                continue
                        if x[0] == '-':
@@ -6994,7 +6999,7 @@ class dblink:
                if not os.path.exists(self.dbdir):
                        return
                try:
-                       for x in listdir(self.dbdir):
+                       for x in os.listdir(self.dbdir):
                                os.unlink(self.dbdir+"/"+x)
                        os.rmdir(self.dbdir)
                except OSError, e:
@@ -7006,6 +7011,12 @@ class dblink:
                        print
                        sys.exit(1)
 
+               # Due to mtime granularity, mtime checks do not always properly
+               # invalidate vardbapi caches.
+               self.vartree.dbapi.mtdircache.pop(self.cat, None)
+               self.vartree.dbapi.matchcache.pop(self.cat, None)
+               self.vartree.dbapi.cpcache.pop(self.mysplit[0], None)
+
        def clearcontents(self):
                """
                For a given db entry (self), erase the CONTENTS values.
@@ -7798,6 +7809,11 @@ class dblink:
                self.dbdir = self.dbpkgdir
                self.delete()
                _movefile(self.dbtmpdir, self.dbpkgdir, mysettings=self.settings)
+               # Due to mtime granularity, mtime checks do not always properly
+               # invalidate vardbapi caches.
+               self.vartree.dbapi.mtdircache.pop(self.cat, None)
+               self.vartree.dbapi.matchcache.pop(self.cat, None)
+               self.vartree.dbapi.cpcache.pop(self.mysplit[0], None)
                contents = self.getcontents()
 
                #write out our collection of md5sums