From: Zac Medico Date: Wed, 2 Mar 2011 18:51:41 +0000 (-0800) Subject: dblink.getcontents(): generate parent directories X-Git-Tag: v2.1.9.43~15 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=efd2f0cc74a743fcc15f95ff5edae817c341cc49;p=portage.git 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(). --- 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: