diff options
-rw-r--r-- | pym/portage/dbapi/vartree.py | 26 |
1 files changed, 21 insertions, 5 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 2df2f841f..03db114b1 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -342,12 +342,17 @@ class vardbapi(dbapi): cpc = self.cpcache[mycp] if cpc[0] == mystat: return cpc[1] - list = listdir(self.getpath(mysplit[0]), EmptyOnError=1) + try: + dir_list = os.listdir(self.getpath(mysplit[0])) + except EnvironmentError, e: + from portage.exception import PermissionDenied + if e.errno == PermissionDenied.errno: + raise PermissionDenied(e) + del e + dir_list = [] - if (list is None): - return [] returnme = [] - for x in list: + for x in dir_list: if x.startswith("."): continue if x[0] == '-': @@ -892,7 +897,7 @@ class dblink(object): 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: @@ -904,6 +909,12 @@ class dblink(object): 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. @@ -1792,6 +1803,11 @@ class dblink(object): 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 |