From 524950fb6c647194ad9e0d3b7b2195d671424d1c Mon Sep 17 00:00:00 2001
From: Jaroslav Mracek <jmracek@redhat.com>
Date: Tue, 9 Apr 2019 20:54:12 +0200
Subject: [PATCH] Accept multiple specs in repoquery options (RhBug:1667898,1656801)
It allows with repoquery command to use --what* options multiple times
(append option) or add multiple arguments separated by comma.
https://bugzilla.redhat.com/show_bug.cgi?id=1667898
https://bugzilla.redhat.com/show_bug.cgi?id=1656801
---
dnf.spec | 2 +-
dnf/cli/commands/repoquery.py | 39 +++++++++++++++++++++++++--------------
tests/test_repoquery.py | 4 ++--
3 files changed, 28 insertions(+), 17 deletions(-)
diff --git a/dnf.spec b/dnf.spec
index bbbe954..e3002db 100644
--- a/dnf.spec
+++ b/dnf.spec
@@ -1,5 +1,5 @@
# default dependencies
-%global hawkey_version 0.35.1
+%global hawkey_version 0.35.2
%global libcomps_version 0.1.8
%global libmodulemd_version 1.4.0
%global rpm_version 4.14.0
diff --git a/dnf/cli/commands/repoquery.py b/dnf/cli/commands/repoquery.py
index 0e5073f..c31501f 100644
--- a/dnf/cli/commands/repoquery.py
+++ b/dnf/cli/commands/repoquery.py
@@ -126,24 +126,33 @@ class RepoQueryCommand(commands.Command):
help=_('show only results from this ARCH'))
parser.add_argument('-f', '--file', metavar='FILE', nargs='+',
help=_('show only results that owns FILE'))
- parser.add_argument('--whatconflicts', metavar='REQ',
+ parser.add_argument('--whatconflicts', default=[], action=OptionParser._SplitCallback,
+ metavar='REQ',
help=_('show only results that conflict REQ'))
- parser.add_argument('--whatdepends', metavar='REQ',
+ parser.add_argument('--whatdepends', default=[], action=OptionParser._SplitCallback,
+ metavar='REQ',
help=_('shows results that requires, suggests, supplements, enhances,'
'or recommends package provides and files REQ'))
- parser.add_argument('--whatobsoletes', metavar='REQ',
+ parser.add_argument('--whatobsoletes', default=[], action=OptionParser._SplitCallback,
+ metavar='REQ',
help=_('show only results that obsolete REQ'))
- parser.add_argument('--whatprovides', metavar='REQ',
+ parser.add_argument('--whatprovides', default=[], action=OptionParser._SplitCallback,
+ metavar='REQ',
help=_('show only results that provide REQ'))
- parser.add_argument('--whatrequires', metavar='REQ',
+ parser.add_argument('--whatrequires', default=[], action=OptionParser._SplitCallback,
+ metavar='REQ',
help=_('shows results that requires package provides and files REQ'))
- parser.add_argument('--whatrecommends', metavar='REQ',
+ parser.add_argument('--whatrecommends', default=[], action=OptionParser._SplitCallback,
+ metavar='REQ',
help=_('show only results that recommend REQ'))
- parser.add_argument('--whatenhances', metavar='REQ',
+ parser.add_argument('--whatenhances', default=[], action=OptionParser._SplitCallback,
+ metavar='REQ',
help=_('show only results that enhance REQ'))
- parser.add_argument('--whatsuggests', metavar='REQ',
+ parser.add_argument('--whatsuggests', default=[], action=OptionParser._SplitCallback,
+ metavar='REQ',
help=_('show only results that suggest REQ'))
- parser.add_argument('--whatsupplements', metavar='REQ',
+ parser.add_argument('--whatsupplements', default=[], action=OptionParser._SplitCallback,
+ metavar='REQ',
help=_('show only results that supplement REQ'))
whatrequiresform = parser.add_mutually_exclusive_group()
whatrequiresform.add_argument("--alldeps", action="store_true",
@@ -354,10 +363,12 @@ class RepoQueryCommand(commands.Command):
return t.union(done)
def by_all_deps(self, requires_name, depends_name, query):
- name = requires_name or depends_name
- defaultquery = query.intersection(dnf.subject.Subject(name).get_best_query(
- self.base.sack, with_provides=False, with_filenames=False))
- requiresquery = query.filter(requires__glob=name)
+ names = requires_name or depends_name
+ defaultquery = self.base.sack.query().filter(empty=True)
+ for name in names:
+ defaultquery.union(query.intersection(dnf.subject.Subject(name).get_best_query(
+ self.base.sack, with_provides=False, with_filenames=False)))
+ requiresquery = query.filter(requires__glob=names)
if depends_name:
requiresquery = requiresquery.union(query.filter(recommends__glob=depends_name))
requiresquery = requiresquery.union(query.filter(enhances__glob=depends_name))
@@ -446,7 +457,7 @@ class RepoQueryCommand(commands.Command):
if self.opts.whatobsoletes:
q.filterm(obsoletes=self.opts.whatobsoletes)
if self.opts.whatprovides:
- query_for_provide = q.filter(provides__glob=[self.opts.whatprovides])
+ query_for_provide = q.filter(provides__glob=self.opts.whatprovides)
if query_for_provide:
q = query_for_provide
else:
diff --git a/tests/test_repoquery.py b/tests/test_repoquery.py
index 9e6cc7d..9182537 100644
--- a/tests/test_repoquery.py
+++ b/tests/test_repoquery.py
@@ -78,8 +78,8 @@ class ArgParseTest(tests.support.TestCase):
def test_parse(self):
tests.support.command_configure(self.cmd, ['--whatrequires', 'prudence'])
- self.assertIsNone(self.cmd.opts.whatprovides)
- self.assertEqual(self.cmd.opts.whatrequires, 'prudence')
+ self.assertEqual(self.cmd.opts.whatprovides, [])
+ self.assertEqual(self.cmd.opts.whatrequires, ['prudence'])
self.assertEqual(self.cmd.opts.queryformat,
dnf.cli.commands.repoquery.QFORMAT_DEFAULT)
--
libgit2 0.28.2