1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
#!/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())
|