@@ -24,24 +24,39 @@ def main() -> int:
24
24
25
25
deps = recursive_get_deps (sys .argv [1 ])
26
26
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))
29
29
return 0
30
30
31
31
32
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 :
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
+
36
45
# get dependencies of the dependency
37
46
try :
38
- dep_path = rospack .get_path (dep [ 0 ] ) + "/package.xml"
47
+ dep_path = rospack .get_path (package ) + "/package.xml"
39
48
except rospkg .common .ResourceNotFound :
40
- print (f"could not find { dep [ 0 ] } " )
49
+ print (f"could not find { package } " )
41
50
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
45
60
46
61
47
62
def packagexml_parser (path : str ) -> Mapping :
0 commit comments