From e8c4475d25055cd9dec5a841db785459f455973e Mon Sep 17 00:00:00 2001 From: ruffsl Date: Tue, 13 Aug 2019 23:35:40 -0700 Subject: [PATCH 1/8] Initial check-in from ament_index_python Signed-off-by: ruffsl --- src/rosdep2/ament_packages/__init__.py | 35 ++++++++ src/rosdep2/ament_packages/constants.py | 17 ++++ src/rosdep2/ament_packages/packages.py | 69 ++++++++++++++++ src/rosdep2/ament_packages/resources.py | 93 ++++++++++++++++++++++ src/rosdep2/ament_packages/search_paths.py | 33 ++++++++ 5 files changed, 247 insertions(+) create mode 100644 src/rosdep2/ament_packages/__init__.py create mode 100644 src/rosdep2/ament_packages/constants.py create mode 100644 src/rosdep2/ament_packages/packages.py create mode 100644 src/rosdep2/ament_packages/resources.py create mode 100644 src/rosdep2/ament_packages/search_paths.py diff --git a/src/rosdep2/ament_packages/__init__.py b/src/rosdep2/ament_packages/__init__.py new file mode 100644 index 000000000..56a5dadaa --- /dev/null +++ b/src/rosdep2/ament_packages/__init__.py @@ -0,0 +1,35 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .constants import RESOURCE_INDEX_SUBFOLDER +from .packages import get_package_prefix +from .packages import get_package_share_directory +from .packages import get_packages_with_prefixes +from .packages import PackageNotFoundError +from .resources import get_resource +from .resources import get_resources +from .resources import has_resource +from .search_paths import get_search_paths + +__all__ = [ + 'get_package_prefix', + 'get_package_share_directory', + 'get_packages_with_prefixes', + 'get_resource', + 'get_resources', + 'get_search_paths', + 'has_resource', + 'PackageNotFoundError', + 'RESOURCE_INDEX_SUBFOLDER', +] diff --git a/src/rosdep2/ament_packages/constants.py b/src/rosdep2/ament_packages/constants.py new file mode 100644 index 000000000..38a6e05c6 --- /dev/null +++ b/src/rosdep2/ament_packages/constants.py @@ -0,0 +1,17 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + + +RESOURCE_INDEX_SUBFOLDER = 'share/ament_index/resource_index' +AMENT_PREFIX_PATH_ENV_VAR = 'AMENT_PREFIX_PATH' diff --git a/src/rosdep2/ament_packages/packages.py b/src/rosdep2/ament_packages/packages.py new file mode 100644 index 000000000..5c82ef2d8 --- /dev/null +++ b/src/rosdep2/ament_packages/packages.py @@ -0,0 +1,69 @@ +# Copyright 2017 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +from .resources import get_resource +from .resources import get_resources +from .search_paths import get_search_paths + + +class PackageNotFoundError(KeyError): + pass + + +def get_packages_with_prefixes(): + """ + Return a dict of package names to the prefixes in which they are found. + + :returns: dict of package names to their prefixes + :rtype: dict + """ + return get_resources('packages') + + +def get_package_prefix(package_name): + """ + Return the installation prefix directory of the given package. + + For example, if you install the package 'foo' into + '/home/user/ros2_ws/install' and you called this function with 'foo' as the + argument, then it will return that directory. + + :param str package_name: name of the package to locate + :returns: installation prefix of the package + :raises: :exc:`PackageNotFoundError` if the package is not found + """ + try: + content, package_prefix = get_resource('packages', package_name) + except LookupError: + raise PackageNotFoundError( + "package '{}' not found, searching: {}".format(package_name, get_search_paths())) + return package_prefix + + +def get_package_share_directory(package_name): + """ + Return the share directory of the given package. + + For example, if you install the package 'foo' into + '/home/user/ros2_ws/install' and you called this function with 'foo' as the + argument, then it will return '/home/user/ros2_ws/install/share/foo' as + the package's share directory. + + :param str package_name: name of the package to locate + :returns: share directory of the package + :raises: :exc:`PackageNotFoundError` if the package is not found + """ + return os.path.join(get_package_prefix(package_name), 'share', package_name) diff --git a/src/rosdep2/ament_packages/resources.py b/src/rosdep2/ament_packages/resources.py new file mode 100644 index 000000000..6281f04c1 --- /dev/null +++ b/src/rosdep2/ament_packages/resources.py @@ -0,0 +1,93 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +from .constants import RESOURCE_INDEX_SUBFOLDER + +from .search_paths import get_search_paths + + +def get_resource(resource_type, resource_name): + """ + Get the content of a specific resource and its prefix path. + + :param resource_type: the type of the resource + :type resource_type: str + :param resource_names: the name of the resource + :type resource_name: str + :returns: a tuple of the content (bytes) of the resource and its prefix path + :raises: :exc:`EnvironmentError` + :raises: :exc:`OSError` + :raises: :exc:`LookupError` + """ + assert resource_type, 'The resource type must not be empty' + assert resource_name, 'The resource name must not be empty' + for path in get_search_paths(): + resource_path = os.path.join(path, RESOURCE_INDEX_SUBFOLDER, resource_type, resource_name) + if os.path.isfile(resource_path): + try: + with open(resource_path, 'r') as h: + content = h.read() + except OSError as e: + raise OSError( + "Could not open the resource '%s' of type '%s':\n%s" + % (resource_name, resource_type, e)) + return content, path + raise LookupError( + "Could not find the resource '%s' of type '%s'" % (resource_name, resource_type)) + + +def get_resources(resource_type): + """ + Get the resource names of all resources of the specified type. + + :param resource_type: the type of the resource + :type resource_type: str + :returns: dict of resource names to the prefix path they are in + :raises: :exc:`EnvironmentError` + """ + assert resource_type, 'The resource type must not be empty' + resources = {} + for path in get_search_paths(): + resource_path = os.path.join(path, RESOURCE_INDEX_SUBFOLDER, resource_type) + if os.path.isdir(resource_path): + for resource in os.listdir(resource_path): + # Ignore subdirectories, and anything starting with a dot + if os.path.isdir(os.path.join(resource_path, resource)) \ + or resource.startswith('.'): + continue + if resource not in resources: + resources[resource] = path + return resources + + +def has_resource(resource_type, resource_name): + """ + Check if a specific resource exists. + + :param resource_type: the type of the resource + :type resource_type: str + :param resource_names: the name of the resource + :type resource_name: str + :returns: The prefix path if the resource exists, False otherwise + :raises: :exc:`EnvironmentError` + """ + assert resource_type, 'The resource type must not be empty' + assert resource_name, 'The resource name must not be empty' + for path in get_search_paths(): + resource_path = os.path.join(path, RESOURCE_INDEX_SUBFOLDER, resource_type, resource_name) + if os.path.isfile(resource_path): + return path + return False diff --git a/src/rosdep2/ament_packages/search_paths.py b/src/rosdep2/ament_packages/search_paths.py new file mode 100644 index 000000000..44cd1e166 --- /dev/null +++ b/src/rosdep2/ament_packages/search_paths.py @@ -0,0 +1,33 @@ +# Copyright 2015 Open Source Robotics Foundation, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import os + +from .constants import AMENT_PREFIX_PATH_ENV_VAR + + +def get_search_paths(): + """ + Get the paths from the environment variable '{AMENT_PREFIX_PATH_ENV_VAR}'. + + :returns: list of paths + :raises: :exc:`EnvironmentError` + """.format(AMENT_PREFIX_PATH_ENV_VAR=AMENT_PREFIX_PATH_ENV_VAR) + ament_prefix_path = os.environ.get(AMENT_PREFIX_PATH_ENV_VAR) + if not ament_prefix_path: + raise EnvironmentError( + "Environment variable '{}' is not set or empty".format(AMENT_PREFIX_PATH_ENV_VAR)) + + paths = ament_prefix_path.split(os.pathsep) + return [p for p in paths if p and os.path.exists(p)] From c12dcc1d0e0e428884d999e0a62d9acbb3b3f713 Mon Sep 17 00:00:00 2001 From: ruffsl Date: Tue, 13 Aug 2019 23:51:02 -0700 Subject: [PATCH 2/8] Remove dead code Signed-off-by: ruffsl --- src/rosdep2/ament_packages/__init__.py | 10 ----- src/rosdep2/ament_packages/packages.py | 42 --------------------- src/rosdep2/ament_packages/resources.py | 50 ------------------------- 3 files changed, 102 deletions(-) diff --git a/src/rosdep2/ament_packages/__init__.py b/src/rosdep2/ament_packages/__init__.py index 56a5dadaa..7fe79aca2 100644 --- a/src/rosdep2/ament_packages/__init__.py +++ b/src/rosdep2/ament_packages/__init__.py @@ -13,23 +13,13 @@ # limitations under the License. from .constants import RESOURCE_INDEX_SUBFOLDER -from .packages import get_package_prefix -from .packages import get_package_share_directory from .packages import get_packages_with_prefixes -from .packages import PackageNotFoundError -from .resources import get_resource from .resources import get_resources -from .resources import has_resource from .search_paths import get_search_paths __all__ = [ - 'get_package_prefix', - 'get_package_share_directory', 'get_packages_with_prefixes', - 'get_resource', 'get_resources', 'get_search_paths', - 'has_resource', - 'PackageNotFoundError', 'RESOURCE_INDEX_SUBFOLDER', ] diff --git a/src/rosdep2/ament_packages/packages.py b/src/rosdep2/ament_packages/packages.py index 5c82ef2d8..fa5559c65 100644 --- a/src/rosdep2/ament_packages/packages.py +++ b/src/rosdep2/ament_packages/packages.py @@ -14,13 +14,7 @@ import os -from .resources import get_resource from .resources import get_resources -from .search_paths import get_search_paths - - -class PackageNotFoundError(KeyError): - pass def get_packages_with_prefixes(): @@ -31,39 +25,3 @@ def get_packages_with_prefixes(): :rtype: dict """ return get_resources('packages') - - -def get_package_prefix(package_name): - """ - Return the installation prefix directory of the given package. - - For example, if you install the package 'foo' into - '/home/user/ros2_ws/install' and you called this function with 'foo' as the - argument, then it will return that directory. - - :param str package_name: name of the package to locate - :returns: installation prefix of the package - :raises: :exc:`PackageNotFoundError` if the package is not found - """ - try: - content, package_prefix = get_resource('packages', package_name) - except LookupError: - raise PackageNotFoundError( - "package '{}' not found, searching: {}".format(package_name, get_search_paths())) - return package_prefix - - -def get_package_share_directory(package_name): - """ - Return the share directory of the given package. - - For example, if you install the package 'foo' into - '/home/user/ros2_ws/install' and you called this function with 'foo' as the - argument, then it will return '/home/user/ros2_ws/install/share/foo' as - the package's share directory. - - :param str package_name: name of the package to locate - :returns: share directory of the package - :raises: :exc:`PackageNotFoundError` if the package is not found - """ - return os.path.join(get_package_prefix(package_name), 'share', package_name) diff --git a/src/rosdep2/ament_packages/resources.py b/src/rosdep2/ament_packages/resources.py index 6281f04c1..b30c59cf0 100644 --- a/src/rosdep2/ament_packages/resources.py +++ b/src/rosdep2/ament_packages/resources.py @@ -19,36 +19,6 @@ from .search_paths import get_search_paths -def get_resource(resource_type, resource_name): - """ - Get the content of a specific resource and its prefix path. - - :param resource_type: the type of the resource - :type resource_type: str - :param resource_names: the name of the resource - :type resource_name: str - :returns: a tuple of the content (bytes) of the resource and its prefix path - :raises: :exc:`EnvironmentError` - :raises: :exc:`OSError` - :raises: :exc:`LookupError` - """ - assert resource_type, 'The resource type must not be empty' - assert resource_name, 'The resource name must not be empty' - for path in get_search_paths(): - resource_path = os.path.join(path, RESOURCE_INDEX_SUBFOLDER, resource_type, resource_name) - if os.path.isfile(resource_path): - try: - with open(resource_path, 'r') as h: - content = h.read() - except OSError as e: - raise OSError( - "Could not open the resource '%s' of type '%s':\n%s" - % (resource_name, resource_type, e)) - return content, path - raise LookupError( - "Could not find the resource '%s' of type '%s'" % (resource_name, resource_type)) - - def get_resources(resource_type): """ Get the resource names of all resources of the specified type. @@ -71,23 +41,3 @@ def get_resources(resource_type): if resource not in resources: resources[resource] = path return resources - - -def has_resource(resource_type, resource_name): - """ - Check if a specific resource exists. - - :param resource_type: the type of the resource - :type resource_type: str - :param resource_names: the name of the resource - :type resource_name: str - :returns: The prefix path if the resource exists, False otherwise - :raises: :exc:`EnvironmentError` - """ - assert resource_type, 'The resource type must not be empty' - assert resource_name, 'The resource name must not be empty' - for path in get_search_paths(): - resource_path = os.path.join(path, RESOURCE_INDEX_SUBFOLDER, resource_type, resource_name) - if os.path.isfile(resource_path): - return path - return False From 5a4c8274a480d61221724ed87ba5189a66b7bea9 Mon Sep 17 00:00:00 2001 From: ruffsl Date: Tue, 13 Aug 2019 23:52:36 -0700 Subject: [PATCH 3/8] Expose AMENT_PREFIX_PATH_ENV_VAR Signed-off-by: ruffsl --- src/rosdep2/ament_packages/__init__.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/rosdep2/ament_packages/__init__.py b/src/rosdep2/ament_packages/__init__.py index 7fe79aca2..1acb2b49d 100644 --- a/src/rosdep2/ament_packages/__init__.py +++ b/src/rosdep2/ament_packages/__init__.py @@ -12,6 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. +from .constants import AMENT_PREFIX_PATH_ENV_VAR from .constants import RESOURCE_INDEX_SUBFOLDER from .packages import get_packages_with_prefixes from .resources import get_resources @@ -21,5 +22,6 @@ 'get_packages_with_prefixes', 'get_resources', 'get_search_paths', + 'AMENT_PREFIX_PATH_ENV_VAR', 'RESOURCE_INDEX_SUBFOLDER', ] From c27c866c66aabe5a84f58c3eebee21775d1bb1d8 Mon Sep 17 00:00:00 2001 From: ruffsl Date: Wed, 14 Aug 2019 16:32:23 -0700 Subject: [PATCH 4/8] Extend workspace packages using ament index Signed-off-by: ruffsl --- src/rosdep2/main.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/rosdep2/main.py b/src/rosdep2/main.py index 50a0bb4b6..d00e64df7 100644 --- a/src/rosdep2/main.py +++ b/src/rosdep2/main.py @@ -69,6 +69,9 @@ DEFAULT_SOURCES_LIST_URL from .rosdistrohelper import PreRep137Warning +from .ament_packages import AMENT_PREFIX_PATH_ENV_VAR +from .ament_packages import get_packages_with_prefixes + from .catkin_packages import find_catkin_packages_in from .catkin_packages import set_workspace_packages from .catkin_packages import get_workspace_packages @@ -476,6 +479,19 @@ def _package_args_handler(command, parser, options, args): print('Skipping non-existent path ' + path) set_workspace_packages(ws_pkgs) + # Lookup package names from ament index. + if AMENT_PREFIX_PATH_ENV_VAR in os.environ: + if options.verbose: + print( + 'Searching ' + AMENT_PREFIX_PATH_ENV_VAR + ' for ' + 'sources: ' + str(os.environ[AMENT_PREFIX_PATH_ENV_VAR].split(':'))) + ws_pkgs = get_workspace_packages() + pkgs = get_packages_with_prefixes().keys() + ws_pkgs.extend(pkgs) + # Make packages list unique + ws_pkgs = list(set(ws_pkgs)) + set_workspace_packages(ws_pkgs) + lookup = _get_default_RosdepLookup(options) # Handle the --skip-keys option by pretending that they are packages in the catkin workspace From 0b15d64b0854c6173b149209511e00929590abb8 Mon Sep 17 00:00:00 2001 From: ruffsl Date: Tue, 27 Aug 2019 16:22:58 -0700 Subject: [PATCH 5/8] Add readme detailing ament code origin --- src/rosdep2/ament_packages/README.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 src/rosdep2/ament_packages/README.md diff --git a/src/rosdep2/ament_packages/README.md b/src/rosdep2/ament_packages/README.md new file mode 100644 index 000000000..4261af056 --- /dev/null +++ b/src/rosdep2/ament_packages/README.md @@ -0,0 +1,5 @@ +Code within is folder is essentially copied directly from the `ament_package` repo, or more specificity the `ament_index_python` package. See original source here: + +https://github.com/ament/ament_index/tree/86f5a6712690830fe3e19752f70cfcdb00a3d223/ament_index_python/ament_index_python + +TODO: reconcile duplicate code via shared codebase From ea9b6fbd71fa4f22e3cb879635c7900ee4e5dde2 Mon Sep 17 00:00:00 2001 From: ruffsl Date: Tue, 27 Aug 2019 17:25:10 -0700 Subject: [PATCH 6/8] Update help message with note on ament --- src/rosdep2/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/rosdep2/main.py b/src/rosdep2/main.py index d00e64df7..afad1f9d5 100644 --- a/src/rosdep2/main.py +++ b/src/rosdep2/main.py @@ -297,8 +297,8 @@ def _rosdep_main(args): dest='ignore_src', default=False, action='store_true', help="Affects the 'check', 'install', and 'keys' verbs. " 'If specified then rosdep will ignore keys that ' - 'are found to be catkin packages anywhere in the ' - 'ROS_PACKAGE_PATH or in any of the directories ' + 'are found to be catkin or ament packages anywhere in the ' + 'ROS_PACKAGE_PATH, AMENT_PREFIX_PATH or in any of the directories ' 'given by the --from-paths option.') parser.add_option('--skip-keys', dest='skip_keys', action='append', default=[], From cc4674234a7121389d874ad69d6ad7d4f72a6566 Mon Sep 17 00:00:00 2001 From: ruffsl Date: Tue, 27 Aug 2019 17:29:41 -0700 Subject: [PATCH 7/8] Add test case for install with ament index Add fake_catkin_package that depends on packages in ament inedex. Also add testboost as a colliding package in ament inedex. --- test/test_rosdep_main.py | 5 +++++ .../ament_index/resource_index/packages/.baz | 0 .../share/ament_index/resource_index/packages/bar | 0 .../share/ament_index/resource_index/packages/foo | 0 .../resource_index/packages/metapackage_with_deps | 0 .../ament_index/resource_index/packages/spam/spam | 0 test/tree/catkin/fake_catkin_package/package.xml | 15 +++++++++++++++ 7 files changed, 20 insertions(+) create mode 100644 test/tree/ament/share/ament_index/resource_index/packages/.baz create mode 100644 test/tree/ament/share/ament_index/resource_index/packages/bar create mode 100644 test/tree/ament/share/ament_index/resource_index/packages/foo create mode 100644 test/tree/ament/share/ament_index/resource_index/packages/metapackage_with_deps create mode 100644 test/tree/ament/share/ament_index/resource_index/packages/spam/spam create mode 100644 test/tree/catkin/fake_catkin_package/package.xml diff --git a/test/test_rosdep_main.py b/test/test_rosdep_main.py index cc33f1d36..82a65078b 100644 --- a/test/test_rosdep_main.py +++ b/test/test_rosdep_main.py @@ -42,6 +42,7 @@ from mock import DEFAULT from rosdep2 import main +from rosdep2.ament_packages import AMENT_PREFIX_PATH_ENV_VAR from rosdep2.main import rosdep_main from rosdep2.main import setup_proxy_opener @@ -91,15 +92,19 @@ def setUp(self): del os.environ['ROSDEP_DEBUG'] self.old_rr = rospkg.get_ros_root() self.old_rpp = rospkg.get_ros_package_path() + self.old_app = os.getenv(AMENT_PREFIX_PATH_ENV_VAR, None) if 'ROS_ROOT' in os.environ: del os.environ['ROS_ROOT'] os.environ['ROS_PACKAGE_PATH'] = os.path.join(get_test_tree_dir()) + os.environ[AMENT_PREFIX_PATH_ENV_VAR] = os.path.join(get_test_tree_dir(), 'ament') def tearDown(self): if self.old_rr is not None: os.environ['ROS_ROOT'] = self.old_rr if self.old_rpp is not None: os.environ['ROS_PACKAGE_PATH'] = self.old_rpp + if self.old_app is not None: + os.environ[AMENT_PREFIX_PATH_ENV_VAR] = self.old_app def test_bad_commands(self): sources_cache = get_cache_dir() diff --git a/test/tree/ament/share/ament_index/resource_index/packages/.baz b/test/tree/ament/share/ament_index/resource_index/packages/.baz new file mode 100644 index 000000000..e69de29bb diff --git a/test/tree/ament/share/ament_index/resource_index/packages/bar b/test/tree/ament/share/ament_index/resource_index/packages/bar new file mode 100644 index 000000000..e69de29bb diff --git a/test/tree/ament/share/ament_index/resource_index/packages/foo b/test/tree/ament/share/ament_index/resource_index/packages/foo new file mode 100644 index 000000000..e69de29bb diff --git a/test/tree/ament/share/ament_index/resource_index/packages/metapackage_with_deps b/test/tree/ament/share/ament_index/resource_index/packages/metapackage_with_deps new file mode 100644 index 000000000..e69de29bb diff --git a/test/tree/ament/share/ament_index/resource_index/packages/spam/spam b/test/tree/ament/share/ament_index/resource_index/packages/spam/spam new file mode 100644 index 000000000..e69de29bb diff --git a/test/tree/catkin/fake_catkin_package/package.xml b/test/tree/catkin/fake_catkin_package/package.xml new file mode 100644 index 000000000..e3abe3bb7 --- /dev/null +++ b/test/tree/catkin/fake_catkin_package/package.xml @@ -0,0 +1,15 @@ + + fake_catkin_package + 0.0.0 + + This is a simple package + + Nobody + BSD + + catkin + + bar + foo + metapackage_with_deps + From a52f89f7fff9d2485e6386bcd87378930885408b Mon Sep 17 00:00:00 2001 From: ruffsl Date: Sun, 1 Sep 2019 13:20:12 -0700 Subject: [PATCH 8/8] Add ament_packages module to setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index 59d6d1a9d..30ddc49d4 100644 --- a/setup.py +++ b/setup.py @@ -6,7 +6,7 @@ setup( name='rosdep', version=__version__, # noqa:F821 - packages=['rosdep2', 'rosdep2.platforms'], + packages=['rosdep2', 'rosdep2.ament_packages', 'rosdep2.platforms'], package_dir={'': 'src'}, install_requires=['catkin_pkg >= 0.4.0', 'rospkg >= 1.1.8', 'rosdistro >= 0.7.0', 'PyYAML >= 3.1'], test_suite='nose.collector',