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:]))
|