diff options
author | Sascha Silbe <silbe@activitycentral.com> | 2011-08-15 12:35:20 (GMT) |
---|---|---|
committer | Anish Mangal <anish@sugarlabs.org> | 2011-09-19 13:35:59 (GMT) |
commit | 9cc48faafc055ac4cc41ee122582f5dbb04ac375 (patch) | |
tree | 01f271932e5d6ab2f562504069c16972ad0d5ab6 | |
parent | 47e3cb1a31dc24be531fa9ebfcae184033b8c91e (diff) |
Add script for updating packages to the latest Dextrose patch set
-rwxr-xr-x | rpms/bump-dx | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/rpms/bump-dx b/rpms/bump-dx new file mode 100755 index 0000000..e221f62 --- /dev/null +++ b/rpms/bump-dx @@ -0,0 +1,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:])) |