From d67407803d9588f09564083741bfa0aa9603cbb5 Mon Sep 17 00:00:00 2001 From: Nicolas Alt Date: Mon, 28 Oct 2019 14:10:34 +0100 Subject: [PATCH 1/8] Selection of dependency types with cmd line option --- src/rosdep2/lookup.py | 6 ++++-- src/rosdep2/main.py | 16 ++++++++++++++-- src/rosdep2/rospack.py | 8 +------- src/rosdep2/rospkg_loader.py | 19 +++++++++++++++++-- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/rosdep2/lookup.py b/src/rosdep2/lookup.py index 29eeb9d39..f61e186c6 100644 --- a/src/rosdep2/lookup.py +++ b/src/rosdep2/lookup.py @@ -325,7 +325,7 @@ def get_resources_that_need(self, rosdep_name): @staticmethod def create_from_rospkg(rospack=None, rosstack=None, sources_loader=None, - verbose=False): + verbose=False, dependency_types=[]): """ Create :class:`RosdepLookup` based on current ROS package environment. @@ -336,6 +336,8 @@ def create_from_rospkg(rospack=None, rosstack=None, instance used to crawl ROS stacks. :param sources_loader: (optional) Override SourcesLoader used for managing sources.list data sources. + :param dependency_types: (optional) List of dependency types. + Allowed: "build", "buildtool", "run", "test" """ # initialize the loader if rospack is None: @@ -355,7 +357,7 @@ def create_from_rospkg(rospack=None, rosstack=None, # Create the rospkg loader on top of the underlay loader = RosPkgLoader(rospack=rospack, rosstack=rosstack, - underlay_key=underlay_key) + underlay_key=underlay_key, dependency_types=dependency_types) # create our actual instance lookup = RosdepLookup(rosdep_db, loader) diff --git a/src/rosdep2/main.py b/src/rosdep2/main.py index 6010033ab..cbbf1ff91 100644 --- a/src/rosdep2/main.py +++ b/src/rosdep2/main.py @@ -123,16 +123,21 @@ class UsageError(Exception): """ -def _get_default_RosdepLookup(options): +_global_options = None + +def _get_default_RosdepLookup(options=None): """ Helper routine for converting command-line options into appropriate RosdepLookup instance. """ + global _global_options + if options is None: + options = _global_options os_override = convert_os_override_option(options.os_override) sources_loader = SourcesListLoader.create_default(sources_cache_dir=options.sources_cache_dir, os_override=os_override, verbose=options.verbose) - lookup = RosdepLookup.create_from_rospkg(sources_loader=sources_loader) + lookup = RosdepLookup.create_from_rospkg(sources_loader=sources_loader, dependency_types=options.dependency_types) lookup.verbose = options.verbose return lookup @@ -295,6 +300,7 @@ def setup_environment_variables(ros_distro): def _rosdep_main(args): # sources cache dir is our local database. + global _global_options default_sources_cache = get_sources_cache_dir() parser = OptionParser(usage=_usage, prog='rosdep') @@ -366,8 +372,14 @@ def _rosdep_main(args): help="Affects the 'update' verb. " 'If specified end-of-life distros are being ' 'fetched too.') + parser.add_option('-t', '--dependency-types', dest='dependency_types', + type="choice", choices=("build", "buildtool", "run", "test"), + default=[], action='append', + help='Dependency types to install, can be given multiple times. ' + 'Chose from build, buildtool, run, test. Default: all.') options, args = parser.parse_args(args) + _global_options = options if options.print_version or options.print_all_versions: # First print the rosdep version. print('{}'.format(__version__)) diff --git a/src/rosdep2/rospack.py b/src/rosdep2/rospack.py index c5b13f04c..cefb3f3de 100644 --- a/src/rosdep2/rospack.py +++ b/src/rosdep2/rospack.py @@ -50,13 +50,7 @@ def call_pkg_config(option, pkg_name): def init_rospack_interface(): - class Options(object): - - def __init__(self): - self.os_override = None - self.sources_cache_dir = get_sources_cache_dir() - self.verbose = False - lookup = _get_default_RosdepLookup(Options()) + lookup = _get_default_RosdepLookup() return lookup.get_rosdep_view(DEFAULT_VIEW_KEY) diff --git a/src/rosdep2/rospkg_loader.py b/src/rosdep2/rospkg_loader.py index 5b415675d..7def688c5 100644 --- a/src/rosdep2/rospkg_loader.py +++ b/src/rosdep2/rospkg_loader.py @@ -59,7 +59,7 @@ class RosPkgLoader(RosdepLoader): - def __init__(self, rospack=None, rosstack=None, underlay_key=None): + def __init__(self, rospack=None, rosstack=None, underlay_key=None, dependency_types=[]): """ :param underlay_key: If set, all views loaded by this loader will depend on this key. @@ -78,6 +78,13 @@ def __init__(self, rospack=None, rosstack=None, underlay_key=None): self._loadable_resource_cache = None self._catkin_packages_cache = None + # Dependency types to include + check_dep = lambda type_ : type_ in dependency_types or not dependency_types + self.include_build_depends = check_dep('build') + self.include_buildtool_depends = check_dep('buildtool') + self.include_run_depends = check_dep('run') + self.include_test_depends = check_dep('test') + def load_view(self, view_name, rosdep_db, verbose=False): """ Load view data into *rosdep_db*. If the view has already @@ -140,7 +147,15 @@ def get_rosdeps(self, resource_name, implicit=True): if resource_name in self.get_catkin_paths(): pkg = catkin_pkg.package.parse_package(self.get_catkin_paths()[resource_name]) pkg.evaluate_conditions(os.environ) - deps = pkg.build_depends + pkg.buildtool_depends + pkg.run_depends + pkg.test_depends + deps = [] + if self.include_build_depends: + deps += pkg.build_depends + if self.include_buildtool_depends: + deps += pkg.buildtool_depends + if self.include_run_depends: + deps += pkg.run_depends + if self.include_test_depends: + deps += pkg.test_depends return [d.name for d in deps if d.evaluated_condition] elif resource_name in self.get_loadable_resources(): return self._rospack.get_rosdeps(resource_name, implicit=implicit) From 078d1cbf2f89a6f20e1a6876e870fed9ba44baff Mon Sep 17 00:00:00 2001 From: Nicolas Alt Date: Mon, 28 Oct 2019 14:10:34 +0100 Subject: [PATCH 2/8] Selection of dependency types with cmd line option --- src/rosdep2/lookup.py | 6 ++++-- src/rosdep2/main.py | 16 ++++++++++++++-- src/rosdep2/rospack.py | 8 +------- src/rosdep2/rospkg_loader.py | 19 +++++++++++++++++-- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/rosdep2/lookup.py b/src/rosdep2/lookup.py index 1d8d979b3..fd89ae1a3 100644 --- a/src/rosdep2/lookup.py +++ b/src/rosdep2/lookup.py @@ -328,7 +328,7 @@ def get_resources_that_need(self, rosdep_name): @staticmethod def create_from_rospkg(rospack=None, rosstack=None, sources_loader=None, - verbose=False): + verbose=False, dependency_types=[]): """ Create :class:`RosdepLookup` based on current ROS package environment. @@ -339,6 +339,8 @@ def create_from_rospkg(rospack=None, rosstack=None, instance used to crawl ROS stacks. :param sources_loader: (optional) Override SourcesLoader used for managing sources.list data sources. + :param dependency_types: (optional) List of dependency types. + Allowed: "build", "buildtool", "run", "test" """ # initialize the loader if rospack is None: @@ -358,7 +360,7 @@ def create_from_rospkg(rospack=None, rosstack=None, # Create the rospkg loader on top of the underlay loader = RosPkgLoader(rospack=rospack, rosstack=rosstack, - underlay_key=underlay_key) + underlay_key=underlay_key, dependency_types=dependency_types) # create our actual instance lookup = RosdepLookup(rosdep_db, loader) diff --git a/src/rosdep2/main.py b/src/rosdep2/main.py index 268fcbdc1..7f6166a97 100644 --- a/src/rosdep2/main.py +++ b/src/rosdep2/main.py @@ -123,16 +123,21 @@ class UsageError(Exception): """ -def _get_default_RosdepLookup(options): +_global_options = None + +def _get_default_RosdepLookup(options=None): """ Helper routine for converting command-line options into appropriate RosdepLookup instance. """ + global _global_options + if options is None: + options = _global_options os_override = convert_os_override_option(options.os_override) sources_loader = SourcesListLoader.create_default(sources_cache_dir=options.sources_cache_dir, os_override=os_override, verbose=options.verbose) - lookup = RosdepLookup.create_from_rospkg(sources_loader=sources_loader) + lookup = RosdepLookup.create_from_rospkg(sources_loader=sources_loader, dependency_types=options.dependency_types) lookup.verbose = options.verbose return lookup @@ -295,6 +300,7 @@ def setup_environment_variables(ros_distro): def _rosdep_main(args): # sources cache dir is our local database. + global _global_options default_sources_cache = get_sources_cache_dir() parser = OptionParser(usage=_usage, prog='rosdep') @@ -368,8 +374,14 @@ def _rosdep_main(args): help="Affects the 'update' verb. " 'If specified end-of-life distros are being ' 'fetched too.') + parser.add_option('-t', '--dependency-types', dest='dependency_types', + type="choice", choices=("build", "buildtool", "run", "test"), + default=[], action='append', + help='Dependency types to install, can be given multiple times. ' + 'Chose from build, buildtool, run, test. Default: all.') options, args = parser.parse_args(args) + _global_options = options if options.print_version or options.print_all_versions: # First print the rosdep version. print('{}'.format(__version__)) diff --git a/src/rosdep2/rospack.py b/src/rosdep2/rospack.py index c5b13f04c..cefb3f3de 100644 --- a/src/rosdep2/rospack.py +++ b/src/rosdep2/rospack.py @@ -50,13 +50,7 @@ def call_pkg_config(option, pkg_name): def init_rospack_interface(): - class Options(object): - - def __init__(self): - self.os_override = None - self.sources_cache_dir = get_sources_cache_dir() - self.verbose = False - lookup = _get_default_RosdepLookup(Options()) + lookup = _get_default_RosdepLookup() return lookup.get_rosdep_view(DEFAULT_VIEW_KEY) diff --git a/src/rosdep2/rospkg_loader.py b/src/rosdep2/rospkg_loader.py index 95a10c5d4..2a4dbd513 100644 --- a/src/rosdep2/rospkg_loader.py +++ b/src/rosdep2/rospkg_loader.py @@ -59,7 +59,7 @@ class RosPkgLoader(RosdepLoader): - def __init__(self, rospack=None, rosstack=None, underlay_key=None): + def __init__(self, rospack=None, rosstack=None, underlay_key=None, dependency_types=[]): """ :param underlay_key: If set, all views loaded by this loader will depend on this key. @@ -78,6 +78,13 @@ def __init__(self, rospack=None, rosstack=None, underlay_key=None): self._loadable_resource_cache = None self._catkin_packages_cache = None + # Dependency types to include + check_dep = lambda type_ : type_ in dependency_types or not dependency_types + self.include_build_depends = check_dep('build') + self.include_buildtool_depends = check_dep('buildtool') + self.include_run_depends = check_dep('run') + self.include_test_depends = check_dep('test') + def load_view(self, view_name, rosdep_db, verbose=False): """ Load view data into *rosdep_db*. If the view has already @@ -140,7 +147,15 @@ def get_rosdeps(self, resource_name, implicit=True): if resource_name in self.get_catkin_paths(): pkg = catkin_pkg.package.parse_package(self.get_catkin_paths()[resource_name]) pkg.evaluate_conditions(os.environ) - deps = pkg.build_depends + pkg.buildtool_depends + pkg.run_depends + pkg.test_depends + pkg.buildtool_export_depends + deps = [] + if self.include_build_depends: + deps += pkg.build_depends + pkg.buildtool_export_depends + if self.include_buildtool_depends: + deps += pkg.buildtool_depends + if self.include_run_depends: + deps += pkg.run_depends + if self.include_test_depends: + deps += pkg.test_depends return [d.name for d in deps if d.evaluated_condition] elif resource_name in self.get_loadable_resources(): rosdeps = set(self._rospack.get_rosdeps(resource_name, implicit=False)) From c8a2a3deb558865847ecad64a8aa069f05756dc9 Mon Sep 17 00:00:00 2001 From: Mateus Amarante Date: Sun, 4 Oct 2020 14:11:24 -0300 Subject: [PATCH 3/8] Remove global variable + fix errors detected by the tests --- src/rosdep2/main.py | 17 +++++------------ src/rosdep2/rospack.py | 9 ++++++++- src/rosdep2/rospkg_loader.py | 4 +++- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/rosdep2/main.py b/src/rosdep2/main.py index 7f6166a97..2204c3a17 100644 --- a/src/rosdep2/main.py +++ b/src/rosdep2/main.py @@ -123,16 +123,11 @@ class UsageError(Exception): """ -_global_options = None - -def _get_default_RosdepLookup(options=None): +def _get_default_RosdepLookup(options): """ Helper routine for converting command-line options into appropriate RosdepLookup instance. """ - global _global_options - if options is None: - options = _global_options os_override = convert_os_override_option(options.os_override) sources_loader = SourcesListLoader.create_default(sources_cache_dir=options.sources_cache_dir, os_override=os_override, @@ -300,7 +295,6 @@ def setup_environment_variables(ros_distro): def _rosdep_main(args): # sources cache dir is our local database. - global _global_options default_sources_cache = get_sources_cache_dir() parser = OptionParser(usage=_usage, prog='rosdep') @@ -375,13 +369,12 @@ def _rosdep_main(args): 'If specified end-of-life distros are being ' 'fetched too.') parser.add_option('-t', '--dependency-types', dest='dependency_types', - type="choice", choices=("build", "buildtool", "run", "test"), - default=[], action='append', - help='Dependency types to install, can be given multiple times. ' - 'Chose from build, buildtool, run, test. Default: all.') + type="choice", choices=("build", "buildtool", "run", "test"), + default=[], action='append', + help='Dependency types to install, can be given multiple times. ' + 'Chose from build, buildtool, run, test. Default: all.') options, args = parser.parse_args(args) - _global_options = options if options.print_version or options.print_all_versions: # First print the rosdep version. print('{}'.format(__version__)) diff --git a/src/rosdep2/rospack.py b/src/rosdep2/rospack.py index cefb3f3de..5c6de001f 100644 --- a/src/rosdep2/rospack.py +++ b/src/rosdep2/rospack.py @@ -50,7 +50,14 @@ def call_pkg_config(option, pkg_name): def init_rospack_interface(): - lookup = _get_default_RosdepLookup() + class Options(object): + + def __init__(self): + self.os_override = None + self.sources_cache_dir = get_sources_cache_dir() + self.verbose = False + self.dependency_types = ['build', 'buildtool', 'run', 'test'] + lookup = _get_default_RosdepLookup(Options()) return lookup.get_rosdep_view(DEFAULT_VIEW_KEY) diff --git a/src/rosdep2/rospkg_loader.py b/src/rosdep2/rospkg_loader.py index 2a4dbd513..802437a23 100644 --- a/src/rosdep2/rospkg_loader.py +++ b/src/rosdep2/rospkg_loader.py @@ -79,7 +79,9 @@ def __init__(self, rospack=None, rosstack=None, underlay_key=None, dependency_ty self._catkin_packages_cache = None # Dependency types to include - check_dep = lambda type_ : type_ in dependency_types or not dependency_types + def check_dep(dep_type): + return dep_type in dependency_types or not dependency_types + self.include_build_depends = check_dep('build') self.include_buildtool_depends = check_dep('buildtool') self.include_run_depends = check_dep('run') From 9c47130665d79d1462b8a9ec4662821b299b9980 Mon Sep 17 00:00:00 2001 From: Mateus Amarante Date: Sun, 4 Oct 2020 14:14:11 -0300 Subject: [PATCH 4/8] Consider build_export_depends separately --- src/rosdep2/main.py | 4 ++-- src/rosdep2/rospack.py | 2 +- src/rosdep2/rospkg_loader.py | 5 ++++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/rosdep2/main.py b/src/rosdep2/main.py index 2204c3a17..28f1c4c1c 100644 --- a/src/rosdep2/main.py +++ b/src/rosdep2/main.py @@ -369,10 +369,10 @@ def _rosdep_main(args): 'If specified end-of-life distros are being ' 'fetched too.') parser.add_option('-t', '--dependency-types', dest='dependency_types', - type="choice", choices=("build", "buildtool", "run", "test"), + type="choice", choices=("build", "buildtool", "build_export", "run", "test"), default=[], action='append', help='Dependency types to install, can be given multiple times. ' - 'Chose from build, buildtool, run, test. Default: all.') + 'Chose from build, buildtool, build_export, run, test. Default: all.') options, args = parser.parse_args(args) if options.print_version or options.print_all_versions: diff --git a/src/rosdep2/rospack.py b/src/rosdep2/rospack.py index 5c6de001f..a64b0d385 100644 --- a/src/rosdep2/rospack.py +++ b/src/rosdep2/rospack.py @@ -56,7 +56,7 @@ def __init__(self): self.os_override = None self.sources_cache_dir = get_sources_cache_dir() self.verbose = False - self.dependency_types = ['build', 'buildtool', 'run', 'test'] + self.dependency_types = ['build', 'buildtool', 'build_export', 'run', 'test'] lookup = _get_default_RosdepLookup(Options()) return lookup.get_rosdep_view(DEFAULT_VIEW_KEY) diff --git a/src/rosdep2/rospkg_loader.py b/src/rosdep2/rospkg_loader.py index 802437a23..2bdd54b4b 100644 --- a/src/rosdep2/rospkg_loader.py +++ b/src/rosdep2/rospkg_loader.py @@ -84,6 +84,7 @@ def check_dep(dep_type): self.include_build_depends = check_dep('build') self.include_buildtool_depends = check_dep('buildtool') + self.include_build_export_depends = check_dep('build_export') self.include_run_depends = check_dep('run') self.include_test_depends = check_dep('test') @@ -151,9 +152,11 @@ def get_rosdeps(self, resource_name, implicit=True): pkg.evaluate_conditions(os.environ) deps = [] if self.include_build_depends: - deps += pkg.build_depends + pkg.buildtool_export_depends + deps += pkg.build_depends if self.include_buildtool_depends: deps += pkg.buildtool_depends + if self.include_build_export_depends: + deps += pkg.build_export_depends if self.include_run_depends: deps += pkg.run_depends if self.include_test_depends: From 65a52212c087ec01aab20c4dfd968033a5563e6e Mon Sep 17 00:00:00 2001 From: Mateus Amarante Date: Sun, 4 Oct 2020 16:04:15 -0300 Subject: [PATCH 5/8] Test RosdepLookup dependency_types argument --- Makefile | 2 +- test/test_rosdep_lookup.py | 41 +++++++++++++++++++ .../multi_dep_type_catkin_package/package.xml | 19 +++++++++ 3 files changed, 61 insertions(+), 1 deletion(-) create mode 100644 test/tree/catkin/multi_dep_type_catkin_package/package.xml diff --git a/Makefile b/Makefile index de0456317..4a1082d77 100644 --- a/Makefile +++ b/Makefile @@ -27,4 +27,4 @@ testsetup: echo "running rosdep tests" test: testsetup - nosetests --with-coverage --cover-package=rosdep2 --with-xunit test + nosetests3 --with-coverage --cover-package=rosdep2 --with-xunit test diff --git a/test/test_rosdep_lookup.py b/test/test_rosdep_lookup.py index 0bc4f2db5..594c11ab9 100644 --- a/test/test_rosdep_lookup.py +++ b/test/test_rosdep_lookup.py @@ -329,6 +329,47 @@ def test_RosdepLookup_get_rosdeps(): assert set(lookup.get_rosdeps('metapackage_with_deps', implicit=False)) == set(['catkin', 'simple_catkin_package', 'another_catkin_package']) +def test_RosdepLookup_dependency_types(): + from rosdep2.loader import RosdepLoader + from rosdep2.lookup import RosdepLookup + rospack, rosstack = get_test_rospkgs() + + sources_loader = create_test_SourcesListLoader() + default_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, + sources_loader=sources_loader) + buildtool_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, + sources_loader=sources_loader, dependency_types=['buildtool']) + build_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, + sources_loader=sources_loader, dependency_types=['build']) + build_export_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, + sources_loader=sources_loader, dependency_types=['build_export']) + run_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, + sources_loader=sources_loader, dependency_types=['run']) + test_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, + sources_loader=sources_loader, dependency_types=['test']) + doc_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, + sources_loader=sources_loader, dependency_types=['doc']) + mix_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, + sources_loader=sources_loader, dependency_types=['build', 'build_export']) + + buildtool_deps = ['catkin'] + build_deps = ['testboost', 'eigen'] + build_export_deps = ['eigen', 'testtinyxml'] + run_deps = ['eigen', 'testlibtool', 'testtinyxml'] # build_export + exec + test_deps = ['curl'] + doc_deps = ['epydoc'] + default_deps = buildtool_deps + build_deps + build_export_deps + run_deps + test_deps + + assert set(buildtool_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(buildtool_deps) + assert set(build_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(build_deps) + assert set(build_export_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(build_export_deps) + assert set(test_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(test_deps) + assert set(run_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(run_deps) + assert set(mix_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(build_deps + build_export_deps) + assert set(default_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(default_deps) + assert set(doc_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set() + + def test_RosdepLookup_get_resources_that_need(): from rosdep2.lookup import RosdepLookup rospack, rosstack = get_test_rospkgs() diff --git a/test/tree/catkin/multi_dep_type_catkin_package/package.xml b/test/tree/catkin/multi_dep_type_catkin_package/package.xml new file mode 100644 index 000000000..470c21121 --- /dev/null +++ b/test/tree/catkin/multi_dep_type_catkin_package/package.xml @@ -0,0 +1,19 @@ + + multi_dep_type_catkin_package + 0.0.0 + + This is a package with depencencies of multiple types + + Nobody + BSD + + catkin + + eigen + testboost + testtinyxml + testlibtool + curl + epydoc + + From 0b9f7d390e842c05b3922914ec555fb2883622dc Mon Sep 17 00:00:00 2001 From: Mateus Amarante Date: Sun, 4 Oct 2020 16:20:11 -0300 Subject: [PATCH 6/8] Add support to exec and doc depends --- src/rosdep2/main.py | 4 ++-- src/rosdep2/rospack.py | 2 +- src/rosdep2/rospkg_loader.py | 16 +++++++++++----- test/test_rosdep_lookup.py | 10 +++++++--- 4 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/rosdep2/main.py b/src/rosdep2/main.py index 28f1c4c1c..064743e4f 100644 --- a/src/rosdep2/main.py +++ b/src/rosdep2/main.py @@ -369,10 +369,10 @@ def _rosdep_main(args): 'If specified end-of-life distros are being ' 'fetched too.') parser.add_option('-t', '--dependency-types', dest='dependency_types', - type="choice", choices=("build", "buildtool", "build_export", "run", "test"), + type="choice", choices=("build", "buildtool", "build_export", "exec", "run", "test", "doc"), default=[], action='append', help='Dependency types to install, can be given multiple times. ' - 'Chose from build, buildtool, build_export, run, test. Default: all.') + 'Chose from build, buildtool, build_export, exec, run, test, doc. Default: all.') options, args = parser.parse_args(args) if options.print_version or options.print_all_versions: diff --git a/src/rosdep2/rospack.py b/src/rosdep2/rospack.py index a64b0d385..c51044994 100644 --- a/src/rosdep2/rospack.py +++ b/src/rosdep2/rospack.py @@ -56,7 +56,7 @@ def __init__(self): self.os_override = None self.sources_cache_dir = get_sources_cache_dir() self.verbose = False - self.dependency_types = ['build', 'buildtool', 'build_export', 'run', 'test'] + self.dependency_types = [] lookup = _get_default_RosdepLookup(Options()) return lookup.get_rosdep_view(DEFAULT_VIEW_KEY) diff --git a/src/rosdep2/rospkg_loader.py b/src/rosdep2/rospkg_loader.py index 2bdd54b4b..6ccf2ba59 100644 --- a/src/rosdep2/rospkg_loader.py +++ b/src/rosdep2/rospkg_loader.py @@ -80,13 +80,17 @@ def __init__(self, rospack=None, rosstack=None, underlay_key=None, dependency_ty # Dependency types to include def check_dep(dep_type): - return dep_type in dependency_types or not dependency_types + if dependency_types: + return dep_type in dependency_types + else: + return dep_type in ['buildtool', 'build', 'build_export', 'exec', 'test'] self.include_build_depends = check_dep('build') self.include_buildtool_depends = check_dep('buildtool') - self.include_build_export_depends = check_dep('build_export') - self.include_run_depends = check_dep('run') + self.include_build_export_depends = check_dep('build_export') or check_dep('run') + self.include_exec_depends = check_dep('exec') or check_dep('run') self.include_test_depends = check_dep('test') + self.include_doc_depends = check_dep('doc') def load_view(self, view_name, rosdep_db, verbose=False): """ @@ -157,10 +161,12 @@ def get_rosdeps(self, resource_name, implicit=True): deps += pkg.buildtool_depends if self.include_build_export_depends: deps += pkg.build_export_depends - if self.include_run_depends: - deps += pkg.run_depends + if self.include_exec_depends: + deps += pkg.exec_depends if self.include_test_depends: deps += pkg.test_depends + if self.include_doc_depends: + deps += pkg.doc_depends return [d.name for d in deps if d.evaluated_condition] elif resource_name in self.get_loadable_resources(): rosdeps = set(self._rospack.get_rosdeps(resource_name, implicit=False)) diff --git a/test/test_rosdep_lookup.py b/test/test_rosdep_lookup.py index 594c11ab9..8efce1019 100644 --- a/test/test_rosdep_lookup.py +++ b/test/test_rosdep_lookup.py @@ -343,6 +343,8 @@ def test_RosdepLookup_dependency_types(): sources_loader=sources_loader, dependency_types=['build']) build_export_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader, dependency_types=['build_export']) + exec_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, + sources_loader=sources_loader, dependency_types=['exec']) run_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, sources_loader=sources_loader, dependency_types=['run']) test_lookup = RosdepLookup.create_from_rospkg(rospack=rospack, rosstack=rosstack, @@ -355,19 +357,21 @@ def test_RosdepLookup_dependency_types(): buildtool_deps = ['catkin'] build_deps = ['testboost', 'eigen'] build_export_deps = ['eigen', 'testtinyxml'] + exec_deps = ['eigen', 'testlibtool'] run_deps = ['eigen', 'testlibtool', 'testtinyxml'] # build_export + exec test_deps = ['curl'] doc_deps = ['epydoc'] - default_deps = buildtool_deps + build_deps + build_export_deps + run_deps + test_deps + default_deps = buildtool_deps + build_deps + build_export_deps + exec_deps + test_deps assert set(buildtool_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(buildtool_deps) assert set(build_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(build_deps) assert set(build_export_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(build_export_deps) - assert set(test_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(test_deps) + assert set(exec_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(exec_deps) assert set(run_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(run_deps) + assert set(test_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(test_deps) assert set(mix_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(build_deps + build_export_deps) assert set(default_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(default_deps) - assert set(doc_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set() + assert set(doc_lookup.get_rosdeps('multi_dep_type_catkin_package')) == set(doc_deps) def test_RosdepLookup_get_resources_that_need(): From 099c46d5d29460370d771a8a323664a8ef853dbd Mon Sep 17 00:00:00 2001 From: Mateus Amarante Date: Sun, 4 Oct 2020 18:42:12 -0300 Subject: [PATCH 7/8] Test -t option for keys() --- test/test_rosdep_main.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/test/test_rosdep_main.py b/test/test_rosdep_main.py index 9d9d315de..9eaa4b8ad 100644 --- a/test/test_rosdep_main.py +++ b/test/test_rosdep_main.py @@ -269,6 +269,12 @@ def test_keys(self): rosdep_main(['keys', 'another_catkin_package'] + cmd_extras + ['-i']) stdout, stderr = b assert stdout.getvalue().strip() == 'catkin', stdout.getvalue() + with fakeout() as b: + rosdep_main(['keys', 'multi_dep_type_catkin_package', '-t', 'test', '-t', 'doc'] + cmd_extras) + stdout, stderr = b + output_keys = set(stdout.getvalue().split()) + expected_keys = set(['curl', 'epydoc']) + assert output_keys == expected_keys, stdout.getvalue() except SystemExit: assert False, 'system exit occurred' try: From 3f9bc89dace43c75070c6a4c0f2863cf9e4021fd Mon Sep 17 00:00:00 2001 From: Mateus Amarante Date: Sun, 4 Oct 2020 18:45:29 -0300 Subject: [PATCH 8/8] Minor update in help message --- src/rosdep2/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/rosdep2/main.py b/src/rosdep2/main.py index 064743e4f..b097f84bf 100644 --- a/src/rosdep2/main.py +++ b/src/rosdep2/main.py @@ -372,7 +372,7 @@ def _rosdep_main(args): type="choice", choices=("build", "buildtool", "build_export", "exec", "run", "test", "doc"), default=[], action='append', help='Dependency types to install, can be given multiple times. ' - 'Chose from build, buildtool, build_export, exec, run, test, doc. Default: all.') + 'Chose from build, buildtool, build_export, exec, run, test, doc. Default: all except doc.') options, args = parser.parse_args(args) if options.print_version or options.print_all_versions: