summaryrefslogtreecommitdiff
path: root/packages/make-tarball
diff options
context:
space:
mode:
Diffstat (limited to 'packages/make-tarball')
-rwxr-xr-xpackages/make-tarball89
1 files changed, 89 insertions, 0 deletions
diff --git a/packages/make-tarball b/packages/make-tarball
new file mode 100755
index 00000000..98f669a9
--- /dev/null
+++ b/packages/make-tarball
@@ -0,0 +1,89 @@
+#!/usr/bin/python
+
+import contextlib
+import os
+import shutil
+import subprocess
+import sys
+import tempfile
+
+
+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)
+ 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)
+
+
+@contextlib.contextmanager
+def tmpdir():
+ t = tempfile.mkdtemp()
+ try:
+ yield t
+ finally:
+ shutil.rmtree(t)
+
+
+
+def main(args):
+
+ tag = None
+ if args:
+ tag = args[0]
+
+ with tmpdir() as td:
+ (stdout, _stderr) = tiny_p(['bzr', 'revno'])
+ revno = stdout.strip()
+
+ cmd = [sys.executable, join(os.pardir, 'tools', 'read-version')]
+ (stdout, _stderr) = tiny_p(cmd)
+ version = stdout.strip()
+
+ owcd = os.getcwd()
+ os.chdir(os.path.abspath(os.pardir))
+ if not os.path.exists('setup.py'):
+ raise RuntimeError("No setup.py found in %s" % (os.getcwd()))
+
+ cmd = ['bzr', 'ls', '--versioned']
+ (stdout, _stderr) = tiny_p(cmd)
+ fns = []
+ for fn in stdout.splitlines():
+ fn = fn.strip()
+ if not fn or fn.startswith("."):
+ continue
+ fns.append(fn)
+ bfn = 'cloud-init-%s-%s' % (version, revno)
+ os.makedirs(join(td, bfn))
+
+ for fn in fns:
+ if os.path.isfile(fn):
+ shutil.copy(fn, join(td, bfn, fn))
+ else:
+ shutil.copytree(fn, join(td, bfn, fn))
+
+ fn = '%s.tar.gz' % (bfn)
+ o_fn = join(td, fn)
+ cmd = ['tar', '-czf', o_fn, '-C', join(td), bfn]
+ tiny_p(cmd)
+
+ os.chdir(owcd)
+ shutil.move(o_fn, fn)
+
+ out = [revno, version, bfn, os.path.abspath(fn)]
+ print('\t'.join(out))
+
+ return 0
+
+
+if __name__ == '__main__':
+ sys.exit(main(sys.argv[1:]))
+