def create_tarball(package, version, output_dir, merged_dir): """Create a tarball of a merge with conflicts.""" quilt_format = False try: with open(merged_dir + '/debian/source/format', 'r') as fd: quilt_format = fd.read().strip() == '3.0 (quilt)' except IOError: pass if quilt_format: filename = '%s/%s_%s.debian.tar.gz' % (output_dir, package, version.without_epoch) contained = 'debian' source = merged_dir + '/debian' else: filename = "%s/%s_%s.src.tar.gz" % (output_dir, package, version.without_epoch) contained = "%s-%s" % (package, version.without_epoch) source = merged_dir tree.ensure("%s/tmp/" % config.get('ROOT')) parent = tempfile.mkdtemp(dir="%s/tmp/" % config.get('ROOT')) try: tree.copytree(source, "%s/%s" % (parent, contained)) shell.run(("tar", "czf", filename, contained), chdir=parent) logger.info("Created %s", tree.subdir(config.get('ROOT'), filename)) return os.path.basename(filename) finally: tree.remove(parent)
def create_patch(version, filename, merged_dir, basis_source, basis_dir): """Create the merged patch.""" parent = tempfile.mkdtemp() try: tree.copytree(merged_dir, "%s/%s" % (parent, version)) tree.copytree(basis_dir, "%s/%s" % (parent, basis_source["Version"])) with open(filename, "w") as diff: shell.run(("diff", "-pruN", basis_source["Version"], "%s" % version), chdir=parent, stdout=diff, okstatus=(0, 1, 2)) logger.info("Created %s", tree.subdir(ROOT, filename)) return os.path.basename(filename) finally: tree.remove(parent)
def create_patch(version, filename, merged_dir, basis, basis_dir): """Create the merged patch.""" parent = tempfile.mkdtemp() try: tree.copytree(merged_dir, "%s/%s" % (parent, version)) tree.copytree(basis_dir, "%s/%s" % (parent, basis.version)) with open(filename, "w") as diff: shell.run(("diff", "-pruN", str(basis.version), str(version)), chdir=parent, stdout=diff, okstatus=(0, 1, 2)) logger.info("Created %s", tree.subdir(config.get('ROOT'), filename)) return os.path.basename(filename) finally: tree.remove(parent)
def create_patch(package, version, output_dir, merged_dir, right_source, right_dir): """Create the merged patch.""" filename = "%s/%s_%s.patch" % (output_dir, package, version) parent = tempfile.mkdtemp() try: tree.copytree(merged_dir, "%s/%s" % (parent, version)) tree.copytree(right_dir, "%s/%s" % (parent, right_source["Version"])) with open(filename, "w") as diff: shell.run(("diff", "-pruN", right_source["Version"], "%s" % version), chdir=parent, stdout=diff, okstatus=(0, 1, 2)) logging.info("Created %s", tree.subdir(ROOT, filename)) return os.path.basename(filename) finally: tree.remove(parent)
def create_source(package, version, since, output_dir, merged_dir): """Create a source package without conflicts.""" contained = "%s-%s" % (package, version.upstream) dsc_filename = "%s_%s.dsc" % (package, version.without_epoch) tree.ensure("%s/tmp/" % config.get('ROOT')) parent = tempfile.mkdtemp(dir="%s/tmp/" % config.get('ROOT')) try: tree.copytree(merged_dir, "%s/%s" % (parent, contained)) match = '%s_%s.orig(-\w+)?.tar.(gz|bz2|xz)$' \ % (re.escape(package), re.escape(version.upstream)) for filename in os.listdir(output_dir): if re.match(match, filename) is None: continue path = os.path.join(output_dir, filename) if os.path.isfile(path): os.link(path, "%s/%s" % (parent, filename)) cmd = ("dpkg-source", ) if version.revision is not None and since.upstream != version.upstream: cmd += ("-sa", ) cmd += ("-b", contained) try: dpkg_source_output = subprocess.check_output( cmd, cwd=parent, stderr=subprocess.STDOUT) except subprocess.CalledProcessError, e: logger.warning("dpkg-source failed with code %d:\n%s\n", e.returncode, e.output) # for the message in the JSON report, just take the last line # and hope it's relevant... lastline = re.sub(r'.*\n', '', e.output.rstrip('\n'), flags=re.DOTALL) return (MergeResult.FAILED, "unable to build merged source package: " "dpkg-source failed with %d (%s)" % (e.returncode, lastline), create_tarball(package, version, output_dir, merged_dir)) else:
def create_tarball(package, version, output_dir, merged_dir): """Create a tarball of a merge with conflicts.""" filename = "%s/%s_%s.src.tar.gz" % (output_dir, package, version.without_epoch) contained = "%s-%s" % (package, version.without_epoch) parent = tempfile.mkdtemp() try: tree.copytree(merged_dir, "%s/%s" % (parent, contained)) debian_rules = "%s/%s/debian/rules" % (parent, contained) if os.path.isfile(debian_rules): os.chmod(debian_rules, os.stat(debian_rules).st_mode | 0111) shell.run(("tar", "czf", filename, contained), chdir=parent) logging.info("Created %s", tree.subdir(ROOT, filename)) return os.path.basename(filename) finally: tree.remove(parent)
def create_patch(package, version, output_dir, merged_dir, right_source, right_dir): """Create the merged patch.""" filename = "%s/%s_%s.patch" % (output_dir, package, version) parent = tempfile.mkdtemp() try: tree.copytree(merged_dir, "%s/%s" % (parent, version)) tree.copytree(right_dir, "%s/%s" % (parent, right_source["Version"])) with open(filename, "w") as diff: shell.run( ("diff", "-pruN", right_source["Version"], "%s" % version), chdir=parent, stdout=diff, okstatus=(0, 1, 2)) logging.info("Created %s", tree.subdir(ROOT, filename)) return os.path.basename(filename) finally: tree.remove(parent)
def create_source(package, version, since, output_dir, merged_dir): """Create a source package without conflicts.""" contained = "%s-%s" % (package, version.upstream) filename = "%s_%s.dsc" % (package, version.without_epoch) tree.ensure("%s/tmp/" % ROOT) parent = tempfile.mkdtemp(dir="%s/tmp/" % ROOT) try: tree.copytree(merged_dir, "%s/%s" % (parent, contained)) for ext in ['gz', 'bz2', 'xz']: orig_filename = "%s_%s.orig.tar.%s" % (package, version.upstream, ext) if os.path.isfile("%s/%s" % (output_dir, orig_filename)): os.link("%s/%s" % (output_dir, orig_filename), "%s/%s" % (parent, orig_filename)) break cmd = ("dpkg-source",) if version.revision is not None and since.upstream != version.upstream: cmd += ("-sa",) cmd += ("-b", contained) try: dpkg_source_output = subprocess.check_output(cmd, cwd=parent, stderr=subprocess.STDOUT) except subprocess.CalledProcessError, e: logger.warning("dpkg-source failed with code %d:\n%s\n", e.returncode, e.output) # for the message in the JSON report, just take the last line # and hope it's relevant... lastline = re.sub(r'.*\n', '', e.output.rstrip('\n'), flags=re.DOTALL) return (MergeResult.FAILED, "unable to build merged source package: " "dpkg-source failed with %d (%s)" % ( e.returncode, lastline), create_tarball(package, version, output_dir, merged_dir)) else:
def create_source(package, version, since, output_dir, merged_dir): """Create a source package without conflicts.""" contained = "%s-%s" % (package, version.upstream) filename = "%s_%s.dsc" % (package, version.without_epoch) parent = tempfile.mkdtemp() try: tree.copytree(merged_dir, "%s/%s" % (parent, contained)) orig_filename = "%s_%s.orig.tar.gz" % (package, version.upstream) if os.path.isfile("%s/%s" % (output_dir, orig_filename)): os.link("%s/%s" % (output_dir, orig_filename), "%s/%s" % (parent, orig_filename)) cmd = ("dpkg-source",) if version.revision is not None and since.upstream != version.upstream: cmd += ("-sa",) cmd += ("-b", contained) try: shell.run(cmd, chdir=parent) except (ValueError, OSError): logging.error("dpkg-source failed") return create_tarball(package, version, output_dir, merged_dir) if os.path.isfile("%s/%s" % (parent, filename)): logging.info("Created %s", filename) for name in os.listdir(parent): src = "%s/%s" % (parent, name) dest = "%s/%s" % (output_dir, name) if os.path.isfile(src) and not os.path.isfile(dest): os.link(src, dest) return os.path.basename(filename) else: logging.warning("Dropped dsc %s", tree.subdir(ROOT, filename)) return create_tarball(package, version, output_dir, merged_dir) finally: tree.remove(parent)
def create_source(package, version, since, output_dir, merged_dir): """Create a source package without conflicts.""" contained = "%s-%s" % (package, version.upstream) filename = "%s_%s.dsc" % (package, version.without_epoch) parent = tempfile.mkdtemp() try: tree.copytree(merged_dir, "%s/%s" % (parent, contained)) orig_filename = "%s_%s.orig.tar.gz" % (package, version.upstream) if os.path.isfile("%s/%s" % (output_dir, orig_filename)): os.link("%s/%s" % (output_dir, orig_filename), "%s/%s" % (parent, orig_filename)) cmd = ("dpkg-source", ) if version.revision is not None and since.upstream != version.upstream: cmd += ("-sa", ) cmd += ("-b", contained) try: shell.run(cmd, chdir=parent) except (ValueError, OSError): logging.error("dpkg-source failed") return create_tarball(package, version, output_dir, merged_dir) if os.path.isfile("%s/%s" % (parent, filename)): logging.info("Created %s", filename) for name in os.listdir(parent): src = "%s/%s" % (parent, name) dest = "%s/%s" % (output_dir, name) if os.path.isfile(src) and not os.path.isfile(dest): os.link(src, dest) return os.path.basename(filename) else: logging.warning("Dropped dsc %s", tree.subdir(ROOT, filename)) return create_tarball(package, version, output_dir, merged_dir) finally: tree.remove(parent)