From efd2f0cc74a743fcc15f95ff5edae817c341cc49 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Wed, 2 Mar 2011 10:51:41 -0800 Subject: [PATCH] dblink.getcontents(): generate parent directories We can't necessarily assume that they are explicitly listed in CONTENTS, and they are crucial for callers such as dblink.isowner(). --- pym/portage/dbapi/vartree.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 3bc30affd..52f0fbaa2 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -1403,6 +1403,9 @@ class dblink(object): myroot = self.settings['ROOT'] if myroot == os.path.sep: myroot = None + # used to generate parent dir entries + dir_entry = (_unicode_decode("dir"),) + eroot_split_len = len(self.settings["EROOT"].split(os.sep)) - 1 pos = 0 errors = [] for pos, line in enumerate(mylines): @@ -1447,6 +1450,19 @@ class dblink(object): if myroot is not None: path = os.path.join(myroot, path.lstrip(os.path.sep)) + # Implicitly add parent directories, since we can't necessarily + # assume that they are explicitly listed in CONTENTS, and it's + # useful for callers if they can rely on parent directory entries + # being generated here (crucial for things like dblink.isowner()). + path_split = path.split(os.sep) + path_split.pop() + while len(path_split) > eroot_split_len: + parent = os.sep.join(path_split) + if parent in pkgfiles: + break + pkgfiles[parent] = dir_entry + path_split.pop() + pkgfiles[path] = data if errors: -- 2.26.2