diff options
author | Zac Medico <zmedico@gentoo.org> | 2009-06-24 07:12:40 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2009-06-24 07:12:40 +0000 |
commit | 22eaa08ddeaf387d1b742af3b05cc39624f593c6 (patch) | |
tree | 81f0c391e319956627b2cac5ff5ae6a1ad5a0179 | |
parent | 463b82e15e317cd210b78886a319fbdee8981a63 (diff) | |
download | portage-22eaa08ddeaf387d1b742af3b05cc39624f593c6.tar.gz portage-22eaa08ddeaf387d1b742af3b05cc39624f593c6.tar.bz2 portage-22eaa08ddeaf387d1b742af3b05cc39624f593c6.zip |
Add support to `portageq owners` for querying paths matching a given basename.
It is natural to support this since the vartree already maintains a basename
-> owner index anyway. There are plans for the packagekit backend is to
support this type of search.
svn path=/main/trunk/; revision=13681
-rwxr-xr-x | bin/portageq | 14 | ||||
-rw-r--r-- | pym/portage/dbapi/vartree.py | 17 |
2 files changed, 23 insertions, 8 deletions
diff --git a/bin/portageq b/bin/portageq index 89d5b6444..c21c783c1 100755 --- a/bin/portageq +++ b/bin/portageq @@ -161,8 +161,8 @@ def owners(argv): Given a list of files, print the packages that own the files and which files belong to each package. Files owned by a package are listed on the lines below it, indented by a single tab character (\\t). All file - paths must start with <root>. Returns 1 if no owners could be found, - and 0 otherwise. + paths must either start with <root> or be a basename alone. + Returns 1 if no owners could be found, and 0 otherwise. """ if len(argv) < 2: sys.stderr.write("ERROR: insufficient parameters!\n") @@ -183,18 +183,22 @@ def owners(argv): files = [] for f in argv[1:]: f = portage.normalize_path(f) - if not f.startswith(os.path.sep): + is_basename = os.sep not in f + if not is_basename and f[:1] != os.sep: if cwd is None: sys.stderr.write("ERROR: cwd does not exist!\n") sys.stderr.flush() return 2 f = os.path.join(cwd, f) f = portage.normalize_path(f) - if not f.startswith(root): + if not is_basename and not f.startswith(root): sys.stderr.write("ERROR: file paths must begin with <root>!\n") sys.stderr.flush() return 2 - files.append(f[len(root):]) + if is_basename: + files.append(f) + else: + files.append(f[len(root):]) owners = vardb._owners.get_owners(files) diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 139259177..5b6f54a6a 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -1527,7 +1527,12 @@ class vardbapi(dbapi): return x for path in path_iter: - name = os.path.basename(path.rstrip(os.path.sep)) + is_basename = os.sep != path[:1] + if is_basename: + name = path + else: + name = os.path.basename(path.rstrip(os.path.sep)) + if not name: continue @@ -1548,8 +1553,14 @@ class vardbapi(dbapi): if current_hash != hash_value: continue - if dblink(cpv).isowner(path, root): - yield dblink(cpv), path + + if is_basename: + for p in dblink(cpv).getcontents(): + if os.path.basename(p) == name: + yield dblink(cpv), p[len(root):] + else: + if dblink(cpv).isowner(path, root): + yield dblink(cpv), path class vartree(object): "this tree will scan a var/db/pkg database located at root (passed to init)" |