Add ability to list all deps
These changes add a new feature which allows users to list all dependencies for their platform in csv format or one dep per line. This is really useful if people want to take the deps found in bindeps.txt and use them in an RPM spec file to build an RPM. USAGE: bindep -l newline * lists all dependencies one per line bindep -l csv * lists all dependencies in csv format Change-Id: I0277689ba727737e11b0adcddf6300b58614ac18
This commit is contained in:
parent
125de90c2a
commit
71c58d24c0
@ -194,6 +194,25 @@ class Depends(object):
|
||||
result.append(rule)
|
||||
return result
|
||||
|
||||
def list_all_packages(self, rules, output_format='newline'):
|
||||
"""Print a list of all packages that are required on this platform
|
||||
according to the passed in rules. This is useful if we want to build
|
||||
RPMs based on the deps listed in bindeps.txt
|
||||
|
||||
:param rules: A list of rules, as returned by active_rules.
|
||||
:param output_format: The format to print the output in. Currently
|
||||
we support newline format which will print 1 package per line, and
|
||||
csv format which prints a csv list.
|
||||
:return: List of all required packages regardless of whether they are
|
||||
missing.
|
||||
"""
|
||||
packages_list = [rule[0] for rule in rules]
|
||||
if output_format == 'csv':
|
||||
logging.info(','.join(packages_list))
|
||||
elif output_format == 'newline':
|
||||
logging.info('\n'.join(packages_list))
|
||||
return packages_list
|
||||
|
||||
def check_rules(self, rules):
|
||||
"""Evaluate rules against the local environment.
|
||||
|
||||
|
@ -41,6 +41,12 @@ def main(depends=None):
|
||||
parser.add_option(
|
||||
"--profiles", action="store_true",
|
||||
help="List the platform and configuration profiles.")
|
||||
parser.add_option(
|
||||
"-l", "--list_all", dest="list_all", choices=["newline", "csv"],
|
||||
type="choice", action="store",
|
||||
help="List all dependencies for this platform and profile."
|
||||
" Pass in either 'newline' or 'csv' to specify the format"
|
||||
" of the output.")
|
||||
opts, args = parser.parse_args()
|
||||
if depends is None:
|
||||
depends = bindep.depends.get_depends(opts.filename)
|
||||
@ -61,6 +67,9 @@ def main(depends=None):
|
||||
profiles = ["default"]
|
||||
profiles = profiles + depends.platform_profiles()
|
||||
rules = depends.active_rules(profiles)
|
||||
if opts.list_all:
|
||||
depends.list_all_packages(rules, opts.list_all)
|
||||
return 0
|
||||
errors = depends.check_rules(rules)
|
||||
for error in errors:
|
||||
if error[0] == 'missing':
|
||||
|
@ -350,6 +350,65 @@ class TestDepends(TestCase):
|
||||
set(r[0] for r in depends.active_rules(['platform:rpm', 'test'])),
|
||||
Equals({"install5", "install6", "install8", "install9"}))
|
||||
|
||||
def test_list_all(self):
|
||||
depends = Depends(dedent("""\
|
||||
install1
|
||||
install2 [test]
|
||||
install3 [platform:rpm]
|
||||
install4 [platform:dpkg]
|
||||
install5 [quark]
|
||||
install6 [platform:dpkg test]
|
||||
install7 [quark test]
|
||||
install8 [platform:dpkg platform:rpm]
|
||||
install9 [platform:dpkg platform:rpm test]
|
||||
installA [!platform:dpkg]
|
||||
installB [!platform:dpkg test]
|
||||
installC [!platform:dpkg !test]
|
||||
installD [platform:dpkg !test]
|
||||
installE [platform:dpkg !platform:rpm]
|
||||
installF [platform:dpkg !platform:rpm test]
|
||||
installG [!platform:dpkg !platform:rpm]
|
||||
installH [!platform:dpkg !platform:rpm test]
|
||||
installI [!platform:dpkg !platform:rpm !test]
|
||||
installJ [platform:dpkg !platform:rpm !test]
|
||||
"""))
|
||||
|
||||
rules_dpkg = depends.active_rules(['platform:dpkg'])
|
||||
result_dpkg = set(r[0] for r in rules_dpkg)
|
||||
self.assertEqual(result_dpkg,
|
||||
set(depends.list_all_packages(rules_dpkg,
|
||||
output_format='newline')))
|
||||
self.assertEqual(result_dpkg,
|
||||
set(depends.list_all_packages(rules_dpkg,
|
||||
output_format='csv')))
|
||||
|
||||
rules_dpkg_test = depends.active_rules(['platform:dpkg', 'test'])
|
||||
result_dpkg_test = set(r[0] for r in rules_dpkg_test)
|
||||
self.assertEqual(result_dpkg_test, set(depends.list_all_packages(
|
||||
rules_dpkg_test,
|
||||
output_format='newline')))
|
||||
self.assertEqual(result_dpkg_test, set(depends.list_all_packages(
|
||||
rules_dpkg_test,
|
||||
output_format='csv')))
|
||||
|
||||
rules_rpm = depends.active_rules(['platform:rpm'])
|
||||
result_rpm = set(r[0] for r in rules_rpm)
|
||||
self.assertEqual(result_rpm, set(depends.list_all_packages(rules_rpm,
|
||||
output_format='newline')))
|
||||
self.assertEqual(result_rpm, set(depends.list_all_packages(rules_rpm,
|
||||
output_format='csv')))
|
||||
|
||||
rules_rpm_test = depends.active_rules(['platform:rpm', 'test'])
|
||||
result_rpm_test = set(r[0] for r in rules_rpm_test)
|
||||
self.assertEqual(result_rpm_test,
|
||||
set(depends.list_all_packages(
|
||||
rules_rpm_test,
|
||||
output_format='newline')))
|
||||
self.assertEqual(result_rpm_test,
|
||||
set(depends.list_all_packages(
|
||||
rules_rpm_test,
|
||||
output_format='csv')))
|
||||
|
||||
def test_platforms(self):
|
||||
depends = Depends(dedent("""\
|
||||
install1
|
||||
|
Loading…
x
Reference in New Issue
Block a user