diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-03-02 10:51:41 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-03-02 10:51:41 -0800 |
commit | e0b4048274b2cfc1617f2eff379cbe8435e13ed4 (patch) | |
tree | ebe2178b0ee2c361e8990e68b5b89b7a3a13c314 | |
parent | 39a2714f4a745ea3ba8e6c3e3cb0c01847ea413d (diff) | |
download | portage-e0b4048274b2cfc1617f2eff379cbe8435e13ed4.tar.gz portage-e0b4048274b2cfc1617f2eff379cbe8435e13ed4.tar.bz2 portage-e0b4048274b2cfc1617f2eff379cbe8435e13ed4.zip |
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().
-rw-r--r-- | pym/portage/dbapi/vartree.py | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 04e66ab76..cd8b1c1c1 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -1404,6 +1404,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): @@ -1448,6 +1451,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: |