Skip to content

Commit 3905d74

Browse files
PetervDoorenar13pit
authored andcommitted
first attempt
1 parent 8bf8126 commit 3905d74

File tree

2 files changed

+168
-0
lines changed

2 files changed

+168
-0
lines changed

installer/parse_package_xml_2.py

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
#! /usr/bin/env python3
2+
3+
from typing import Mapping
4+
import os
5+
import sys
6+
import xml.etree.ElementTree as ET
7+
8+
from catkin_pkg.condition import evaluate_condition
9+
10+
import rospkg
11+
rospack = rospkg.RosPack()
12+
13+
import copy
14+
15+
16+
def main() -> int:
17+
"""
18+
Print all dependencies of the specified package
19+
"""
20+
21+
if len(sys.argv) != 2:
22+
print("Usage: parse_package_xml_2 PACKAGE.XML")
23+
return 1
24+
25+
deps = recursive_get_deps(sys.argv[1])
26+
for dep in deps:
27+
#print(f"Dependency on {dep[0]} with version {dep[1]}")
28+
print("\n".join(dep))
29+
return 0
30+
31+
32+
def recursive_get_deps(path: str) -> set:
33+
dep_set = packagexml_parser(path)["deps"]
34+
total_dep_set = copy.deepcopy(dep_set)
35+
for dep in dep_set:
36+
# get dependencies of the dependency
37+
try:
38+
dep_path = rospack.get_path(dep[0]) + "/package.xml"
39+
except rospkg.common.ResourceNotFound:
40+
print(f"could not find {dep[0]}")
41+
continue
42+
dep_dep_set = recursive_get_deps(dep_path)
43+
total_dep_set |= dep_dep_set
44+
return total_dep_set
45+
46+
47+
def packagexml_parser(path: str) -> Mapping:
48+
"""
49+
parse the xml file and return a list of dependencies as a mapping
50+
@param path: absolute path to the xml file to be parsed
51+
@return Mapping with the following fields:
52+
parsed: ...
53+
deps: list of strings naming the dependencies of the package
54+
"""
55+
tree = ET.parse(path)
56+
doc = tree.getroot()
57+
58+
dep_set = set()
59+
60+
dep_types = []
61+
dep_versions = []
62+
fields = ["name", "version", "description", "maintainer", "export"]
63+
parsed = {}
64+
65+
if os.getenv("TUE_INSTALL_SKIP_ROS_DEPS", "false") == "false":
66+
dep_types.extend(
67+
[
68+
"build_depend",
69+
"buildtool_depend",
70+
"build_export_depend",
71+
"buildtool_export_depend",
72+
"exec_depend",
73+
"depend",
74+
"run_depend",
75+
]
76+
)
77+
dep_versions.extend(["version_eq"])
78+
79+
if os.getenv("TUE_INSTALL_TEST_DEPEND", "false") == "true":
80+
dep_types.append("test_depend")
81+
82+
if os.getenv("TUE_INSTALL_DOC_DEPEND", "false") == "true":
83+
dep_types.append("doc_depend")
84+
85+
for types in fields + dep_types:
86+
parsed[types] = set()
87+
88+
for dep_type in dep_types:
89+
deps = doc.findall(dep_type)
90+
for dep in deps:
91+
if evaluate_condition(dep.attrib.get("condition", None), os.environ):
92+
version = None
93+
for dep_version in dep_versions:
94+
version = dep.get(dep_version)
95+
version = str(version)
96+
parsed[dep_type] |= {(dep.text, version)}
97+
dep_set |= parsed[dep_type]
98+
99+
for field in fields:
100+
values = doc.findall(field)
101+
if field == "export":
102+
for exports in values:
103+
parsed["build_type"] = {bt.text for bt in exports if bt.tag == "build_type"}
104+
else:
105+
parsed[field] |= {value.text for value in values}
106+
if field == "maintainer":
107+
emails = {}
108+
for value in values:
109+
emails[value.text] = value.attrib.get("email")
110+
parsed["emails"] = emails
111+
112+
return {"parser": parsed, "deps": dep_set}
113+
114+
115+
if __name__ == "__main__":
116+
sys.exit(main())

setup/versioning-test.bash

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
2+
function tue-check-version
3+
{
4+
if [ -z "$1" ]
5+
then
6+
echo "Invalid tue-check-version: needs package as argument."
7+
return 1
8+
fi
9+
10+
local ros_pkg_name=$1
11+
12+
local ros_pkg_dir
13+
ros_pkg_dir="$ROS_PACKAGE_INSTALL_DIR"/"$ros_pkg_name"
14+
15+
local pkg_xml="$ros_pkg_dir"/package.xml
16+
17+
local deps
18+
deps=$("$TUE_INSTALL_SCRIPTS_DIR"/parse_package_xml_2.py "$pkg_xml")
19+
for d in $deps
20+
do
21+
echo "depends on $d"
22+
done
23+
}
24+
25+
function _tue-dir-version
26+
{
27+
[ -d "$1" ] || return 1
28+
29+
local fs
30+
fs=$(ls "$1")
31+
for f in $fs
32+
do
33+
local pkg
34+
pkg=$f
35+
local version
36+
version=$(rosversion "$f")
37+
echo "package $pkg has version $version"
38+
done
39+
}
40+
41+
# ----------------------------------------------------------------------------------------------------
42+
43+
function tue-version
44+
{
45+
_tue-dir-version "$TUE_SYSTEM_DIR"/src
46+
}
47+
48+
# Initialize
49+
TUE_INSTALL_SCRIPTS_DIR=$TUE_DIR/installer
50+
51+
# Initialize
52+
ROS_PACKAGE_INSTALL_DIR=$TUE_SYSTEM_DIR/src

0 commit comments

Comments
 (0)