From: Zac Medico Date: Mon, 30 Jul 2007 07:26:07 +0000 (-0000) Subject: Make dblink invalidate the vardbapi caches for each merge and unmerge. Don't use... X-Git-Tag: v2.1.2.11~5 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=b49c4f8f5cbe9224f6efaaa9abd2ecef903c3c6f;p=portage.git 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 --- 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