summaryrefslogtreecommitdiff
path: root/packages/bddeb
blob: 1a9f13f347922a7813e29be66a7e4856252a1387 (plain)
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
91
92
93
94
95
96
97
98
99
100
101
#!/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:
        pass
        #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():

    # cmd = ['apt-get', 'install', 'python-nose',
    #'pyflakes', 'python-mocker', 'cdbs', 'debhelper']
    # tiny_p(cmd)

    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)
        
        # Seems to want an original tar ball
        o_tar = "cloud-init_%s~bzr%s.orig.tar.gz" % (version, revno)
        cmd = ['tar', '-czf', join(td, o_tar), '-C', join(td, 'cloud-init')]
        cmd.extend(os.listdir(join(td, 'cloud-init')))
        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())