Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/rpms/bump-dx
blob: e221f629a909daa953561403034c1458cce3a0c8 (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
102
103
104
105
106
107
108
#!/usr/bin/env python
import os
import subprocess
import sys
import time


DEXTROSE_VERSION = 3


def run_pipe(command, cwd=None):
    pipe = subprocess.Popen(command, stdout=subprocess.PIPE, cwd=cwd)
    stdout, stderr_ = pipe.communicate()
    if pipe.returncode:
        raise subprocess.CalledProcessError(pipe.returncode, command)

    return stdout


def get_git_config(name):
    return run_pipe(['git', 'config', '--get', name]).strip()


def get_author():
    name = get_git_config('user.name')
    email = get_git_config('user.email')
    return '%(name)s <%(email)s>' % locals()


def get_checksum(path):
    directory, name = os.path.split(path)
    return run_pipe(['md5sum', name], cwd=directory)


def update_spec_lines(spec, package_name, patch_version):
    dextrose_version = DEXTROSE_VERSION
    upstream_version = None
    epoch = ''
    author = get_author()
    for index, line in enumerate(spec[:]):
        line = line.strip()
        if line.startswith('Version:'):
            upstream_version = line.split()[-1]

        elif line.startswith('Epoch:'):
            epoch = line.split()[-1] + ':'

        elif line.startswith('Release:'):
            spec[index] = 'Release: %(patch_version)s.dx%(dextrose_version)s%%{?dist}\n' % locals()

        elif line.startswith('Source') and 'dextrose/patchsets' in line:
            without_version = line[:-len('YYYYMMDD.tar.gz')]
            spec[index] = without_version + patch_version + '.tar.gz\n'

        elif line == '%changelog':
            date = time.strftime('%a %b %e %Y')
            header = '* %(date)s %(author)s - %(epoch)s%(upstream_version)s-%(patch_version)s.dx%(dextrose_version)s\n' % locals()
            message = '- update to Dextrose %(dextrose_version)s patch set %(patch_version)s\n' % locals()
            spec[index + 1:index + 1] = [header, message]


def update_spec(package_name, patch_version):
    spec_name = os.path.join(package_name, package_name + '.spec')
    spec = file(spec_name).readlines()
    update_spec_lines(spec, package_name, patch_version)
    file(spec_name, 'w').writelines(spec)


def copy_patchset(package_name, patch_version):
    dextrose_version = DEXTROSE_VERSION
    source_path = 'sunjammer:public_html/dextrose/patchsets/%(package_name)s-dx%(dextrose_version)s-%(patch_version)s.tar.gz' % locals()
    subprocess.check_call(['scp', '-4', source_path, package_name + '/'])


def update_sources(package_name, patch_version):
    dextrose_version = DEXTROSE_VERSION
    sources_name = os.path.join(package_name, 'sources')
    old_checksums = file(sources_name).readlines()
    checksums = [line
                 for line in old_checksums
                 if '-dx' + str(DEXTROSE_VERSION) + '-' not in line]
    tarball_name = '%(package_name)s-dx%(dextrose_version)s-%(patch_version)s.tar.gz' % locals()
    tarball_path = os.path.join(package_name, tarball_name)
    checksums.append(get_checksum(tarball_path))
    file(sources_name, 'w').writelines(checksums)


def bump_package(package_name, patch_version):
    copy_patchset(package_name, patch_version)
    update_spec(package_name, patch_version)
    update_sources(package_name, patch_version)


def print_syntax(my_name):
    print 'Usage: ./bump-dx <package name> <patch version>'
    print 'Update RPM spec file to use updated DX3 patch set'
    return 1


def main(my_name, args):
    if len(args) != 2:
        return print_syntax(my_name)

    package_name, patch_version = args
    bump_package(package_name, patch_version)


sys.exit(main(sys.argv[0], sys.argv[1:]))