summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2007-07-30 07:26:07 +0000
committerZac Medico <zmedico@gentoo.org>2007-07-30 07:26:07 +0000
commitb49c4f8f5cbe9224f6efaaa9abd2ecef903c3c6f (patch)
tree1080c9459244eb3ac0d8bdfb0d8b0562d52a44c3
parentab44fb7115ae2fe87630b494101f2f823e67ddda (diff)
downloadportage-b49c4f8f5cbe9224f6efaaa9abd2ecef903c3c6f.tar.gz
portage-b49c4f8f5cbe9224f6efaaa9abd2ecef903c3c6f.tar.bz2
portage-b49c4f8f5cbe9224f6efaaa9abd2ecef903c3c6f.zip
Make dblink invalidate the vardbapi caches for each merge and unmerge. Don't use portage.listdir() since mtime granularity can prevent cachedir from invalidating it's cache properly and
this redundant cache layer isn't needed anyway. This should solve the intermittent failure of AUTOCLEAN to properly clean packages. (branches/2.1.2 r7205) svn path=/main/branches/2.1.2.9/; revision=7514
-rw-r--r--pym/portage.py28
1 files changed, 22 insertions, 6 deletions
diff --git a/pym/portage.py b/pym/portage.py
index 8fb456b7a..6bb5e1431 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -5304,12 +5304,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] == '-':
@@ -6980,7 +6985,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:
@@ -6992,6 +6997,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.
@@ -7666,6 +7677,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