summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pym/portage/dbapi/vartree.py19
1 files changed, 18 insertions, 1 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py
index 9be12fb3e..b8881c817 100644
--- a/pym/portage/dbapi/vartree.py
+++ b/pym/portage/dbapi/vartree.py
@@ -822,8 +822,25 @@ class vardbapi(dbapi):
if not contents:
# Empty path is a code used to represent empty contents.
self._add_path("", pkg_hash)
+
+ # When adding paths, implicitly add parent directories,
+ # since we can't necessarily assume that they are
+ # explicitly listed in CONTENTS.
+ added_paths = set()
for x in contents:
- self._add_path(x[root_len:], pkg_hash)
+ x = x[root_len:]
+ added_paths.add(x)
+ self._add_path(x, pkg_hash)
+ x_split = x.split(os.sep)
+ x_split.pop()
+ while x_split:
+ parent = os.sep.join(x_split)
+ if parent in added_paths:
+ break
+ added_paths.add(parent)
+ self._add_path(parent, pkg_hash)
+ x_split.pop()
+
self._vardb._aux_cache["modified"].add(cpv)
def _add_path(self, path, pkg_hash):