From f54745c085301b5748abe74db76fd0b20d84220b Mon Sep 17 00:00:00 2001 From: Dirk Thomas Date: Fri, 15 Jun 2012 15:51:48 -0700 Subject: [PATCH] modified dependency generation to be more debian-ish (direct build dependencies + recursive runtime dependencies of these) --- src/buildfarm/dependency_walker.py | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/src/buildfarm/dependency_walker.py b/src/buildfarm/dependency_walker.py index 4c11afe..8853049 100644 --- a/src/buildfarm/dependency_walker.py +++ b/src/buildfarm/dependency_walker.py @@ -7,17 +7,19 @@ from rosdistro import sanitize_package_name, debianize_package_name -def _get_recursive_dependencies(dependency_dict, package_name, package_list): +def _get_dependencies(dependency_dict, package_name, package_list, recursive=False): dependencies = set(package_list[p] for p in dependency_dict[package_name] if p in package_list) - for p in [ p for p in dependency_dict[package_name] if p in package_list ]: - dependencies.update(_get_recursive_dependencies(dependency_dict, p, package_list)) + if recursive: + for p in [ p for p in dependency_dict[package_name] if p in package_list ]: + dependencies.update(_get_dependencies(dependency_dict, p, package_list, recursive)) return dependencies def get_dependencies(workspace, repository_list, rosdistro): if not os.path.isdir(workspace): os.makedirs(workspace) - dependencies = {} + build_dependencies = {} + runtime_dependencies = {} packages = {} package_urls = {} @@ -46,7 +48,8 @@ def get_dependencies(workspace, repository_list, rosdistro): if not os.path.isfile(stack_xml_path): if rosdistro == 'backports': packages[name] = sanitize_package_name(name) - dependencies[name] = [] + build_dependencies[name] = [] + runtime_dependencies[name] = [] package_urls[name] = url print "Processing backport %s, no stack.xml file found in repo %s. Continuing"%(name, url) else: @@ -56,17 +59,24 @@ def get_dependencies(workspace, repository_list, rosdistro): stack = rospkg.stack.parse_stack_file(stack_xml_path) catkin_project_name = stack.name - print "Dependencies:", ', '.join([d.name for d in stack.build_depends]) packages[catkin_project_name] = debianize_package_name(rosdistro, catkin_project_name) - dependencies[catkin_project_name] = [d.name for d in stack.build_depends] + build_dependencies[catkin_project_name] = [d.name for d in stack.build_depends] + runtime_dependencies[catkin_project_name] = [d.name for d in stack.depends] package_urls[catkin_project_name] = url result = {} urls = {} - for k, v in dependencies.iteritems(): - result[packages[k]] = _get_recursive_dependencies(dependencies, k, packages) + # combines direct buildtime- and recursive runtime-dependencies + for k in package_urls.keys(): + print '\nDependencies for: ', k + result[packages[k]] = _get_dependencies(build_dependencies, k, packages) + print 'Direct build-dependencies:', ', '.join(result[packages[k]]) + recursive_runtime_dependencies = _get_dependencies(runtime_dependencies, k, packages, True) + print 'Recursive runtime-dependencies:', ', '.join(recursive_runtime_dependencies) + result[packages[k]].update(recursive_runtime_dependencies) + print 'Combined dependencies:', ', '.join(result[packages[k]]) urls[package_urls[k]] = packages[k] return result, urls