@@ -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
3232def 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
4762def packagexml_parser (path : str ) -> Mapping :
0 commit comments