From 22eaa08ddeaf387d1b742af3b05cc39624f593c6 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Wed, 24 Jun 2009 07:12:40 +0000 Subject: 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 --- bin/portageq | 14 +++++++++----- 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 . Returns 1 if no owners could be found, - and 0 otherwise. + paths must either start with 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 !\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)" -- cgit v1.2.3-1-g7c22