diff --git a/server/doc/mansrc/eit-query.1.txt b/server/doc/mansrc/eit-query.1.txt index 16e57f4c0..f3a709083 100644 --- a/server/doc/mansrc/eit-query.1.txt +++ b/server/doc/mansrc/eit-query.1.txt @@ -11,7 +11,7 @@ eit-query - miscellaneous package metadata queries SYNOPSIS -------- -eit query [-h] {tags,needed,revdeps,sets,desc} ... +eit query [-h] {tags,needed,required,revdeps,sets,desc} ... INTRODUCTION @@ -39,6 +39,9 @@ ACTION *needed*:: show libraries (.so) required by matched packages +*required*:: + show packages requiring the given library name + *revdeps*:: show reverse dependencies of packages diff --git a/server/eit/commands/query.py b/server/eit/commands/query.py index d4b6c3769..c1b83907c 100644 --- a/server/eit/commands/query.py +++ b/server/eit/commands/query.py @@ -74,6 +74,19 @@ class EitQuery(EitCommand): help=_("package names")) needed_parser.set_defaults(func=self._needed) + required_parser = subparsers.add_parser( + "required", + help=_("show packages requiring the given library name")) + required_parser.add_argument( + "libraries", nargs='+', metavar="", + help=_("library name (example: libdl.so.2)")) + required_parser.add_argument("--quiet", "-q", action="store_true", + default=self._quiet, + help=_('quiet output, for scripting purposes')) + required_parser.add_argument("inrepo", action="store_const", + const=None) + required_parser.set_defaults(func=self._required) + revdeps_parser = subparsers.add_parser("revdeps", help=_("show reverse dependencies of packages")) revdeps_parser.add_argument("--quiet", "-q", action="store_true", @@ -231,6 +244,52 @@ tools. return exit_st + def _required(self, entropy_server): + """ + Eit query required code. + """ + repository_ids = [] + if self._repository_id is None: + repository_ids += entropy_server.repositories() + else: + repository_ids.append(self._repository_id) + + exit_st = 0 + key_sorter = lambda x: entropy_server.open_repository( + x[1]).retrieveAtom(x[0]) + for library in self._nsargs.libraries: + + pkg_matches = set() + for repository_id in repository_ids: + repo = entropy_server.open_repository(repository_id) + package_ids = repo.searchNeeded(library, like=True) + pkg_matches.update( + [(x, repository_id) for x in package_ids]) + + matches = sorted(pkg_matches, key=key_sorter) + for package_id, repository_id in matches: + repo = entropy_server.open_repository(repository_id) + if self._quiet: + atom = repo.retrieveAtom(package_id) + entropy_server.output(atom, level="generic") + else: + print_package_info( + package_id, entropy_server, + repo, quiet=False) + + if not matches and not self._quiet: + entropy_server.output( + "%s: %s" % ( + purple(_("Nothing found for")), + teal(library) + ), + importance=1, + level="warning") + if not matches: + exit_st = 1 + + return exit_st + def _revdeps(self, entropy_server): """ Eit query revdeps code.