summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pym/portage.py14
1 files changed, 13 insertions, 1 deletions
diff --git a/pym/portage.py b/pym/portage.py
index a39e16ee..14183f22 100644
--- a/pym/portage.py
+++ b/pym/portage.py
@@ -5574,6 +5574,7 @@ class dblink:
self.updateprotect = protect_obj.updateprotect
self.isprotected = protect_obj.isprotected
self.contentscache=[]
+ self._contents_inodes = None
def lockdb(self):
if self.lock_num == 0:
@@ -5856,13 +5857,24 @@ class dblink:
destfile = normalize_path(
os.path.join(destroot, filename.lstrip(os.path.sep)))
try:
- os.lstat(destfile) # lexists requires >=python-2.4
+ mylstat = os.lstat(destfile)
except OSError:
return True
pkgfiles = self.getcontents()
if pkgfiles and filename in pkgfiles:
return True
+ if pkgfiles:
+ if self._contents_inodes is None:
+ self._contents_inodes = set()
+ for x in pkgfiles:
+ try:
+ lstat = os.lstat(x)
+ self._contents_inodes.add((lstat.st_dev, lstat.st_ino))
+ except OSError:
+ pass
+ if (mylstat.st_dev, mylstat.st_ino) in self._contents_inodes:
+ return True
return False