def __init__(self, rosdistro_name): self.packages = {} from buildfarm.ros_distro import Rosdistro # for fuerte we still fetch the new groovy rosdistro to get a list of distros rd = Rosdistro(rosdistro_name if rosdistro_name != 'fuerte' else 'groovy') self.rosdistro_index = rd._index self.rosdistro_dist = rd._dist # load wet rosdistro packages if rosdistro_name == 'fuerte': from buildfarm.ros_distro_fuerte import Rosdistro as RosdistroFuerte rd = RosdistroFuerte(rosdistro_name) for pkg_name in rd.get_package_list(): version = rd.get_version(pkg_name, full_version=True) if version: self.packages[pkg_name] = RosdistroVersion(pkg_name, 'wet', version) # load dry rosdistro stacks if rosdistro_name == 'groovy': dry_yaml = yaml.load(urllib2.urlopen(distro_uri(rosdistro_name))) stacks = dry_yaml['stacks'] or {} for stack_name, d in stacks.items(): if stack_name == '_rules': continue version = d.get('version') if version: if stack_name in self.packages: logging.warn("Stack '%s' exists in dry (%s) as well as in wet (%s) distro. Ignoring dry package." % (stack_name, version, self.packages[stack_name].version)) continue self.packages[stack_name] = RosdistroVersion(stack_name, 'dry', version) # load variants variants = dry_yaml['variants'] or {} for variant in variants: if len(variant) != 1: logging.warn("Not length 1 dict in variant '%s': skipping" % variant) continue variant_name = variant.keys()[0] if variant_name in self.packages: logging.warn("Variant '%s' exists also as a package in %s. Ignoring variant." % (variant_name, self.packages[variant_name].type)) continue self.packages[variant_name] = RosdistroVersion(variant_name, 'variant', '1.0.0')
def __init__(self, rosdistro_name): self.packages = {} from buildfarm.ros_distro import Rosdistro # for fuerte we still fetch the new groovy rosdistro to get a list of distros rd = Rosdistro(rosdistro_name if rosdistro_name != 'fuerte' else 'groovy') self.rosdistro_index = rd._index self.rosdistro_dist = rd._dist # load wet rosdistro packages if rosdistro_name == 'fuerte': from buildfarm.ros_distro_fuerte import Rosdistro as RosdistroFuerte rd = RosdistroFuerte(rosdistro_name) for pkg_name in rd.get_package_list(): version = rd.get_version(pkg_name, full_version=True) if version: self.packages[pkg_name] = RosdistroVersion(pkg_name, 'wet', version) # load dry rosdistro stacks if rosdistro_name == 'groovy': dry_yaml = yaml.load(urllib2.urlopen(distro_uri(rosdistro_name))) stacks = dry_yaml['stacks'] or {} for stack_name, d in stacks.items(): if stack_name == '_rules': continue version = d.get('version') if version: if stack_name in self.packages: logging.warn("Stack '%s' exists in dry (%s) as well as in wet (%s) distro. Ignoring dry package." % (stack_name, version, self.packages[stack_name].version)) continue self.packages[stack_name] = RosdistroVersion(stack_name, 'dry', version) # load variants variants = dry_yaml['variants'] or {} for variant in variants: if len(variant) != 1: logging.warn("Not length 1 dict in variant '%s': skipping" % variant) continue variant_name = variant.keys()[0] if variant_name in self.packages: logging.warn("Variant '%s' exists also as a package in %s. Ignoring variant." % (variant_name, self.packages[variant_name].type)) continue self.packages[variant_name] = RosdistroVersion(variant_name, 'variant', '1.0.0')
(returncode, result, message) = run_shell_command('debuild binary', repo_path, shell=True, show_stdout=False) if returncode != 0: raise RosGitBuildError("%s!!! Error building %s from %s: %s \n %s" % (level_prefix, deb_package_name, package_fetcher.url(package_name), 'debuild binary', message)) deb_files = glob.glob(os.path.join(repo_path, '..', '%s*.deb' % (deb_package_name + '_' + rd_obj.get_version(package_name, full_version=True)))) if len(deb_files) > 0: # install the deb from apt.debfile import DebPackage deb_pkg = DebPackage(deb_files[0]) deb_pkg.check() packages_needed = ' '.join(deb_pkg.missing_deps) (returncode, result, message) = run_shell_command('sudo apt-get -y install %s' % packages_needed, shell=True, show_stdout=True) if returncode != 0: raise RosGitBuildError("%s!!! Error building %s: can't install dependent packages %s" % (level_prefix, deb_package_name, packages_needed)) (returncode, result, message) = run_shell_command('sudo dpkg -i %s' % deb_files[0], shell=True, show_stdout=True) if returncode != 0: raise RosGitBuildError("%s!!! Error building %s from %s: %s \n %s" % (level_prefix, deb_package_name, package_fetcher.url(package_name), 'debuild binary', message)) else: raise RosGitBuildError("%s!!! Can't find a built debian package for %s after the build!" % (level_prefix, deb_package_name)) if __name__ == '__main__': args = parse_options() rd = Rosdistro(args.distro) fetch = VcsPackageFetcher(rd, args.workspace) cache = apt.Cache() for package in args.packages: if package in rd.get_package_list(): build_debian_package(fetch, package, cache, rd, get_dependencies=True) else: print('!!! Skipping nonexistent package %s' % (package))
% (level_prefix, deb_package_name, packages_needed)) (returncode, result, message) = run_shell_command('sudo dpkg -i %s' % deb_files[0], shell=True, show_stdout=True) if returncode != 0: raise RosGitBuildError( "%s!!! Error building %s from %s: %s \n %s" % (level_prefix, deb_package_name, package_fetcher.url(package_name), 'debuild binary', message)) else: raise RosGitBuildError( "%s!!! Can't find a built debian package for %s after the build!" % (level_prefix, deb_package_name)) if __name__ == '__main__': args = parse_options() rd = Rosdistro(args.distro) fetch = VcsPackageFetcher(rd, args.workspace) cache = apt.Cache() for package in args.packages: if package in rd.get_package_list(): build_debian_package(fetch, package, cache, rd, get_dependencies=True) else: print('!!! Skipping nonexistent package %s' % (package))