rostree 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rostree-0.1.0/.gitignore +70 -0
- rostree-0.1.0/LICENSE +29 -0
- rostree-0.1.0/PKG-INFO +82 -0
- rostree-0.1.0/README.md +57 -0
- rostree-0.1.0/pyproject.toml +62 -0
- rostree-0.1.0/src/rostree/__init__.py +20 -0
- rostree-0.1.0/src/rostree/api.py +117 -0
- rostree-0.1.0/src/rostree/cli.py +288 -0
- rostree-0.1.0/src/rostree/core/__init__.py +22 -0
- rostree-0.1.0/src/rostree/core/finder.py +457 -0
- rostree-0.1.0/src/rostree/core/parser.py +105 -0
- rostree-0.1.0/src/rostree/core/tree.py +126 -0
- rostree-0.1.0/src/rostree/tui/__init__.py +1 -0
- rostree-0.1.0/src/rostree/tui/app.py +541 -0
rostree-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
.Python
|
|
7
|
+
build/
|
|
8
|
+
develop-eggs/
|
|
9
|
+
dist/
|
|
10
|
+
downloads/
|
|
11
|
+
eggs/
|
|
12
|
+
.eggs/
|
|
13
|
+
lib/
|
|
14
|
+
lib64/
|
|
15
|
+
parts/
|
|
16
|
+
sdist/
|
|
17
|
+
var/
|
|
18
|
+
wheels/
|
|
19
|
+
*.egg-info/
|
|
20
|
+
.installed.cfg
|
|
21
|
+
*.egg
|
|
22
|
+
|
|
23
|
+
# Virtual environments
|
|
24
|
+
.venv/
|
|
25
|
+
venv/
|
|
26
|
+
ENV/
|
|
27
|
+
env/
|
|
28
|
+
|
|
29
|
+
# uv
|
|
30
|
+
.uv/
|
|
31
|
+
uv.lock
|
|
32
|
+
|
|
33
|
+
# Pytest / coverage
|
|
34
|
+
.pytest_cache/
|
|
35
|
+
.coverage
|
|
36
|
+
.coverage.*
|
|
37
|
+
htmlcov/
|
|
38
|
+
.tox/
|
|
39
|
+
.nox/
|
|
40
|
+
|
|
41
|
+
# Node / frontend
|
|
42
|
+
node_modules/
|
|
43
|
+
npm-debug.log*
|
|
44
|
+
yarn-debug.log*
|
|
45
|
+
yarn-error.log*
|
|
46
|
+
pnpm-debug.log*
|
|
47
|
+
.npm
|
|
48
|
+
.eslintcache
|
|
49
|
+
*.tsbuildinfo
|
|
50
|
+
rosdep_viz_webapp/frontend/dist/
|
|
51
|
+
|
|
52
|
+
# IDE / editor
|
|
53
|
+
.idea/
|
|
54
|
+
.vscode/
|
|
55
|
+
*.swp
|
|
56
|
+
*.swo
|
|
57
|
+
*~
|
|
58
|
+
|
|
59
|
+
# OS
|
|
60
|
+
.DS_Store
|
|
61
|
+
Thumbs.db
|
|
62
|
+
|
|
63
|
+
# Env / secrets
|
|
64
|
+
.env
|
|
65
|
+
.env.local
|
|
66
|
+
.env.*.local
|
|
67
|
+
|
|
68
|
+
# Misc
|
|
69
|
+
*.log
|
|
70
|
+
.cache/
|
rostree-0.1.0/LICENSE
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
BSD 3-Clause License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026, The rosdep_viz authors
|
|
4
|
+
All rights reserved.
|
|
5
|
+
|
|
6
|
+
Redistribution and use in source and binary forms, with or without
|
|
7
|
+
modification, are permitted provided that the following conditions are met:
|
|
8
|
+
|
|
9
|
+
1. Redistributions of source code must retain the above copyright notice, this
|
|
10
|
+
list of conditions and the following disclaimer.
|
|
11
|
+
|
|
12
|
+
2. Redistributions in binary form must reproduce the above copyright notice,
|
|
13
|
+
this list of conditions and the following disclaimer in the documentation
|
|
14
|
+
and/or other materials provided with the distribution.
|
|
15
|
+
|
|
16
|
+
3. Neither the name of the copyright holder nor the names of its
|
|
17
|
+
contributors may be used to endorse or promote products derived from
|
|
18
|
+
this software without specific prior written permission.
|
|
19
|
+
|
|
20
|
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
|
21
|
+
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
|
22
|
+
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
23
|
+
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
|
|
24
|
+
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
|
25
|
+
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
|
26
|
+
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
|
|
27
|
+
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
28
|
+
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
|
29
|
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
rostree-0.1.0/PKG-INFO
ADDED
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: rostree
|
|
3
|
+
Version: 0.1.0
|
|
4
|
+
Summary: Explore ROS 2 package dependencies from the command line (CLI, TUI, library)
|
|
5
|
+
Author: rostree contributors
|
|
6
|
+
License: MIT
|
|
7
|
+
License-File: LICENSE
|
|
8
|
+
Keywords: cli,dependencies,ros,ros2,tui,visualization
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
17
|
+
Requires-Python: >=3.10
|
|
18
|
+
Requires-Dist: textual>=0.47.0
|
|
19
|
+
Provides-Extra: dev
|
|
20
|
+
Requires-Dist: black==25.1.0; extra == 'dev'
|
|
21
|
+
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
|
|
22
|
+
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
23
|
+
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
24
|
+
Description-Content-Type: text/markdown
|
|
25
|
+
|
|
26
|
+
# rostree
|
|
27
|
+
|
|
28
|
+
[](https://github.com/guilyx/rostree/actions/workflows/ci.yml)
|
|
29
|
+
[](https://codecov.io/gh/guilyx/rostree)
|
|
30
|
+
[](https://pypi.org/project/rostree/)
|
|
31
|
+
[](https://pypi.org/project/rostree/)
|
|
32
|
+
[](https://pypi.org/project/rostree/)
|
|
33
|
+
[](https://github.com/guilyx/rostree/blob/main/LICENSE)
|
|
34
|
+
|
|
35
|
+
Explore ROS 2 package dependencies from the command line (CLI, TUI, library).
|
|
36
|
+
|
|
37
|
+
**Docs:** [docs/README.md](docs/README.md) — overview, package discovery, dependency trees, usage, development.
|
|
38
|
+
|
|
39
|
+
## Quick start
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pip install -e . # or: uv pip install -e .
|
|
43
|
+
source /opt/ros/<distro>/setup.bash # and/or your workspace install/setup.bash
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### CLI commands
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
rostree # Launch interactive TUI
|
|
50
|
+
rostree scan # Scan host for ROS 2 workspaces
|
|
51
|
+
rostree scan ~/dev --depth 3 # Scan specific directories
|
|
52
|
+
rostree list # List known packages
|
|
53
|
+
rostree list --by-source # List packages grouped by source
|
|
54
|
+
rostree tree rclpy # Show dependency tree for a package
|
|
55
|
+
rostree tree rclpy --depth 3 # Limit tree depth
|
|
56
|
+
rostree tree rclpy --json # Output as JSON
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### TUI mode
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
rostree tui # Interactive terminal UI
|
|
63
|
+
rostree tui rclpy # Start TUI with a specific package tree
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
### Python API
|
|
67
|
+
|
|
68
|
+
```python
|
|
69
|
+
from rostree import list_known_packages, get_package_info, build_tree, scan_workspaces
|
|
70
|
+
|
|
71
|
+
packages = list_known_packages()
|
|
72
|
+
root = build_tree("rclpy", max_depth=5, runtime_only=True)
|
|
73
|
+
workspaces = scan_workspaces() # Scan host for ROS 2 workspaces
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Links
|
|
77
|
+
|
|
78
|
+
- [How the system works](docs/overview.md)
|
|
79
|
+
- [How packages are found](docs/package-discovery.md) (workspaces, AMENT_PREFIX_PATH, COLCON_WORKSPACE)
|
|
80
|
+
- [Dependency trees](docs/dependency-trees.md) (package.xml, runtime_only)
|
|
81
|
+
- [Usage](docs/usage.md) (CLI, TUI keys, API)
|
|
82
|
+
- [Development](docs/development.md) (layout, pre-commit, CI)
|
rostree-0.1.0/README.md
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# rostree
|
|
2
|
+
|
|
3
|
+
[](https://github.com/guilyx/rostree/actions/workflows/ci.yml)
|
|
4
|
+
[](https://codecov.io/gh/guilyx/rostree)
|
|
5
|
+
[](https://pypi.org/project/rostree/)
|
|
6
|
+
[](https://pypi.org/project/rostree/)
|
|
7
|
+
[](https://pypi.org/project/rostree/)
|
|
8
|
+
[](https://github.com/guilyx/rostree/blob/main/LICENSE)
|
|
9
|
+
|
|
10
|
+
Explore ROS 2 package dependencies from the command line (CLI, TUI, library).
|
|
11
|
+
|
|
12
|
+
**Docs:** [docs/README.md](docs/README.md) — overview, package discovery, dependency trees, usage, development.
|
|
13
|
+
|
|
14
|
+
## Quick start
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pip install -e . # or: uv pip install -e .
|
|
18
|
+
source /opt/ros/<distro>/setup.bash # and/or your workspace install/setup.bash
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
### CLI commands
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
rostree # Launch interactive TUI
|
|
25
|
+
rostree scan # Scan host for ROS 2 workspaces
|
|
26
|
+
rostree scan ~/dev --depth 3 # Scan specific directories
|
|
27
|
+
rostree list # List known packages
|
|
28
|
+
rostree list --by-source # List packages grouped by source
|
|
29
|
+
rostree tree rclpy # Show dependency tree for a package
|
|
30
|
+
rostree tree rclpy --depth 3 # Limit tree depth
|
|
31
|
+
rostree tree rclpy --json # Output as JSON
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### TUI mode
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
rostree tui # Interactive terminal UI
|
|
38
|
+
rostree tui rclpy # Start TUI with a specific package tree
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Python API
|
|
42
|
+
|
|
43
|
+
```python
|
|
44
|
+
from rostree import list_known_packages, get_package_info, build_tree, scan_workspaces
|
|
45
|
+
|
|
46
|
+
packages = list_known_packages()
|
|
47
|
+
root = build_tree("rclpy", max_depth=5, runtime_only=True)
|
|
48
|
+
workspaces = scan_workspaces() # Scan host for ROS 2 workspaces
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Links
|
|
52
|
+
|
|
53
|
+
- [How the system works](docs/overview.md)
|
|
54
|
+
- [How packages are found](docs/package-discovery.md) (workspaces, AMENT_PREFIX_PATH, COLCON_WORKSPACE)
|
|
55
|
+
- [Dependency trees](docs/dependency-trees.md) (package.xml, runtime_only)
|
|
56
|
+
- [Usage](docs/usage.md) (CLI, TUI keys, API)
|
|
57
|
+
- [Development](docs/development.md) (layout, pre-commit, CI)
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "rostree"
|
|
3
|
+
version = "0.1.0"
|
|
4
|
+
description = "Explore ROS 2 package dependencies from the command line (CLI, TUI, library)"
|
|
5
|
+
readme = "README.md"
|
|
6
|
+
requires-python = ">=3.10"
|
|
7
|
+
license = { text = "MIT" }
|
|
8
|
+
authors = [{ name = "rostree contributors" }]
|
|
9
|
+
keywords = ["ros2", "ros", "dependencies", "visualization", "tui", "cli"]
|
|
10
|
+
classifiers = [
|
|
11
|
+
"Development Status :: 3 - Alpha",
|
|
12
|
+
"License :: OSI Approved :: MIT License",
|
|
13
|
+
"Programming Language :: Python :: 3",
|
|
14
|
+
"Programming Language :: Python :: 3.10",
|
|
15
|
+
"Programming Language :: Python :: 3.11",
|
|
16
|
+
"Programming Language :: Python :: 3.12",
|
|
17
|
+
"Topic :: Scientific/Engineering :: Visualization",
|
|
18
|
+
"Environment :: Console",
|
|
19
|
+
]
|
|
20
|
+
dependencies = [
|
|
21
|
+
"textual>=0.47.0",
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
[project.optional-dependencies]
|
|
25
|
+
dev = [
|
|
26
|
+
"black==25.1.0",
|
|
27
|
+
"pytest>=7.0",
|
|
28
|
+
"pytest-cov>=4.0",
|
|
29
|
+
"ruff>=0.1.0",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[project.scripts]
|
|
33
|
+
rostree = "rostree.cli:main"
|
|
34
|
+
|
|
35
|
+
[build-system]
|
|
36
|
+
requires = ["hatchling"]
|
|
37
|
+
build-backend = "hatchling.build"
|
|
38
|
+
|
|
39
|
+
[tool.hatch.build.targets.wheel]
|
|
40
|
+
packages = ["src/rostree"]
|
|
41
|
+
|
|
42
|
+
[tool.hatch.build.targets.sdist]
|
|
43
|
+
include = ["src/rostree"]
|
|
44
|
+
|
|
45
|
+
[tool.ruff]
|
|
46
|
+
line-length = 100
|
|
47
|
+
target-version = "py310"
|
|
48
|
+
|
|
49
|
+
[tool.black]
|
|
50
|
+
line-length = 100
|
|
51
|
+
target-version = ["py310"]
|
|
52
|
+
include = '\.pyi?$'
|
|
53
|
+
extend-exclude = '''
|
|
54
|
+
/(
|
|
55
|
+
\.git
|
|
56
|
+
| \.venv
|
|
57
|
+
)/
|
|
58
|
+
'''
|
|
59
|
+
|
|
60
|
+
[tool.pytest.ini_options]
|
|
61
|
+
testpaths = ["tests"]
|
|
62
|
+
pythonpath = ["src"]
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"""rostree: visualize ROS 2 package dependencies as a tree (library, TUI, CLI)."""
|
|
2
|
+
|
|
3
|
+
from rostree.api import (
|
|
4
|
+
build_tree,
|
|
5
|
+
get_package_info,
|
|
6
|
+
list_known_packages,
|
|
7
|
+
list_known_packages_by_source,
|
|
8
|
+
scan_workspaces,
|
|
9
|
+
WorkspaceInfo,
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
__all__ = [
|
|
13
|
+
"build_tree",
|
|
14
|
+
"get_package_info",
|
|
15
|
+
"list_known_packages",
|
|
16
|
+
"list_known_packages_by_source",
|
|
17
|
+
"scan_workspaces",
|
|
18
|
+
"WorkspaceInfo",
|
|
19
|
+
]
|
|
20
|
+
__version__ = "0.1.0"
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"""Public API: use rostree from Python or from other tools."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
|
|
7
|
+
from rostree.core.finder import (
|
|
8
|
+
find_package_path,
|
|
9
|
+
list_package_paths,
|
|
10
|
+
list_packages_by_source,
|
|
11
|
+
scan_for_workspaces,
|
|
12
|
+
WorkspaceInfo,
|
|
13
|
+
)
|
|
14
|
+
from rostree.core.parser import parse_package_xml, PackageInfo
|
|
15
|
+
from rostree.core.tree import DependencyNode, build_dependency_tree
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def list_known_packages(
|
|
19
|
+
*,
|
|
20
|
+
extra_source_roots: list[Path] | None = None,
|
|
21
|
+
) -> dict[str, Path]:
|
|
22
|
+
"""
|
|
23
|
+
List all ROS 2 packages visible in the current environment.
|
|
24
|
+
|
|
25
|
+
Uses AMENT_PREFIX_PATH, COLCON_PREFIX_PATH, workspace source trees,
|
|
26
|
+
and optional extra_source_roots (user-added paths).
|
|
27
|
+
Returns a mapping from package name to path to its package.xml.
|
|
28
|
+
"""
|
|
29
|
+
return list_package_paths(extra_source_roots=extra_source_roots)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def list_known_packages_by_source(
|
|
33
|
+
*,
|
|
34
|
+
extra_source_roots: list[Path] | None = None,
|
|
35
|
+
) -> dict[str, list[str]]:
|
|
36
|
+
"""
|
|
37
|
+
List packages grouped by source (System, Workspace, Other, Source, Added).
|
|
38
|
+
|
|
39
|
+
Lets you distinguish your workspace packages from ROS distro (System),
|
|
40
|
+
third-party (Other), unbuilt source (Source), and user-added (Added).
|
|
41
|
+
Returns dict mapping source_label -> sorted list of package names.
|
|
42
|
+
"""
|
|
43
|
+
return list_packages_by_source(extra_source_roots=extra_source_roots)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def get_package_info(
|
|
47
|
+
package_name: str,
|
|
48
|
+
*,
|
|
49
|
+
extra_source_roots: list[Path] | None = None,
|
|
50
|
+
) -> PackageInfo | None:
|
|
51
|
+
"""
|
|
52
|
+
Get metadata and dependencies for a ROS 2 package by name.
|
|
53
|
+
|
|
54
|
+
Finds the package (install or source) and parses its package.xml.
|
|
55
|
+
Returns None if the package is not found or package.xml cannot be parsed.
|
|
56
|
+
"""
|
|
57
|
+
path = find_package_path(package_name, extra_source_roots=extra_source_roots)
|
|
58
|
+
if path is None:
|
|
59
|
+
return None
|
|
60
|
+
return parse_package_xml(path)
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
def build_tree(
|
|
64
|
+
root_package: str,
|
|
65
|
+
*,
|
|
66
|
+
max_depth: int | None = None,
|
|
67
|
+
include_buildtool: bool = False,
|
|
68
|
+
runtime_only: bool = False,
|
|
69
|
+
extra_source_roots: list[Path] | None = None,
|
|
70
|
+
) -> DependencyNode | None:
|
|
71
|
+
"""
|
|
72
|
+
Build a full dependency tree for a ROS 2 package.
|
|
73
|
+
|
|
74
|
+
Args:
|
|
75
|
+
root_package: Name of the root package.
|
|
76
|
+
max_depth: Optional maximum depth; None = unlimited.
|
|
77
|
+
include_buildtool: Whether to include buildtool dependencies.
|
|
78
|
+
runtime_only: If True, only depend and exec_depend (faster, smaller tree).
|
|
79
|
+
extra_source_roots: Optional list of Paths to scan for packages (user-added).
|
|
80
|
+
|
|
81
|
+
Returns:
|
|
82
|
+
Root DependencyNode, or None if root package is not found.
|
|
83
|
+
"""
|
|
84
|
+
return build_dependency_tree(
|
|
85
|
+
root_package,
|
|
86
|
+
max_depth=max_depth,
|
|
87
|
+
include_buildtool=include_buildtool,
|
|
88
|
+
runtime_only=runtime_only,
|
|
89
|
+
extra_source_roots=extra_source_roots,
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def scan_workspaces(
|
|
94
|
+
roots: list[Path] | None = None,
|
|
95
|
+
*,
|
|
96
|
+
max_depth: int = 4,
|
|
97
|
+
include_home: bool = True,
|
|
98
|
+
include_opt_ros: bool = True,
|
|
99
|
+
) -> list[WorkspaceInfo]:
|
|
100
|
+
"""
|
|
101
|
+
Scan the host machine for ROS 2 workspaces.
|
|
102
|
+
|
|
103
|
+
Args:
|
|
104
|
+
roots: Directories to start scanning from. Defaults to common locations.
|
|
105
|
+
max_depth: How deep to recurse when looking for workspaces.
|
|
106
|
+
include_home: If True and roots is None, include ~/ros*_ws, etc.
|
|
107
|
+
include_opt_ros: If True and roots is None, include /opt/ros/* distros.
|
|
108
|
+
|
|
109
|
+
Returns:
|
|
110
|
+
List of WorkspaceInfo for each discovered workspace.
|
|
111
|
+
"""
|
|
112
|
+
return scan_for_workspaces(
|
|
113
|
+
roots=roots,
|
|
114
|
+
max_depth=max_depth,
|
|
115
|
+
include_home=include_home,
|
|
116
|
+
include_opt_ros=include_opt_ros,
|
|
117
|
+
)
|