Skip to content

Commit 72508f2

Browse files
PetervDoorenar13pit
authored andcommitted
remove recursion and add lists
1 parent 3905d74 commit 72508f2

File tree

1 file changed

+25
-10
lines changed

1 file changed

+25
-10
lines changed

installer/parse_package_xml_2.py

+25-10
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,39 @@ def main() -> int:
2424

2525
deps = recursive_get_deps(sys.argv[1])
2626
for dep in deps:
27-
#print(f"Dependency on {dep[0]} with version {dep[1]}")
28-
print("\n".join(dep))
27+
print(f"Dependency on {dep[0]} with version {dep[1]}")
28+
#print("\n".join(dep))
2929
return 0
3030

3131

3232
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:
33+
parsed_packages = list()
34+
to_parse_packages = list()
35+
deps = set()
36+
37+
direct_deps = packagexml_parser(path)["deps"]
38+
to_parse_packages.extend([dep[0] for dep in direct_deps])
39+
deps |= direct_deps
40+
41+
while len(to_parse_packages) > 0:
42+
package = to_parse_packages.pop()
43+
parsed_packages.append(package)
44+
3645
# get dependencies of the dependency
3746
try:
38-
dep_path = rospack.get_path(dep[0]) + "/package.xml"
47+
dep_path = rospack.get_path(package) + "/package.xml"
3948
except rospkg.common.ResourceNotFound:
40-
print(f"could not find {dep[0]}")
49+
print(f"could not find {package}")
4150
continue
42-
dep_dep_set = recursive_get_deps(dep_path)
43-
total_dep_set |= dep_dep_set
44-
return total_dep_set
51+
dep_set = packagexml_parser(dep_path)["deps"]
52+
for dep in dep_set:
53+
if dep[0] in parsed_packages:
54+
continue
55+
if dep[0] not in to_parse_packages:
56+
# TODO check if package dep version also matches the one in the set.
57+
to_parse_packages.append(dep[0])
58+
deps |= {dep}
59+
return deps
4560

4661

4762
def packagexml_parser(path: str) -> Mapping:

0 commit comments

Comments
 (0)