#!/usr/bin/python import contextlib import glob import os import shutil import subprocess import sys import tempfile @contextlib.contextmanager def tmpdir(): t = tempfile.mkdtemp() try: yield t finally: shutil.rmtree(t) def join(*paths): p = os.path.join(*paths) return os.path.abspath(p) def tiny_p(cmd): # Darn python 2.6 doesn't have check_output (argggg) info("Running %s" % (cmd)) sp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, stdin=None) (out, err) = sp.communicate() if sp.returncode not in [0]: raise RuntimeError("Failed running %s [rc=%s] (%s, %s)" % (cmd, sp.returncode, out, err)) return (out, err) def info(msg): print("INFO: %s" % (msg)) def warn(msg): print("WARNING: %s" % (msg)) def archive_code(): (stdout, _stderr) = tiny_p([sys.executable, join(os.getcwd(), 'tar-me')]) lines = stdout.splitlines() revno = lines[0] version = lines[1] bname = lines[2] arc_fn = lines[3] return (revno, version, bname, arc_fn) def main(): with tmpdir() as td: (revno, version, bname, archive_fn) = archive_code() real_archive_fn = os.path.join(td, os.path.basename(archive_fn)) shutil.move(archive_fn, real_archive_fn) info("Archived code to %s" % (real_archive_fn)) cmd = ['tar', '-xvzf', real_archive_fn, '-C', td] stdout, stderr = tiny_p(cmd) edir = join(td, bname) shutil.move(edir, join(td, 'cloud-init')) shutil.copytree('debian.trunk', join(td, 'cloud-init', 'debian')) cmd = ['sed', '-i', '-e',"s,VERSION,%s," %(version), '-e', "s,REVNO,bzr%s," % (revno), join(td, 'cloud-init', 'debian', 'changelog')] tiny_p(cmd) ocwd = os.getcwd() os.chdir(join(td, 'cloud-init')) cmd = ['debuild'] tiny_p(cmd) debname = "cloud-init_%s~bzr%s-1_all.deb" % (version, revno) shutil.move(debname, join(owcwd, debname)) info("Wrote out debian package %s" % (join(owcwd, debname))) return 0 if __name__ == '__main__': sys.exit(main())