Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSascha Silbe <silbe@activitycentral.com>2011-08-15 12:35:20 (GMT)
committer Anish Mangal <anish@sugarlabs.org>2011-09-19 13:35:59 (GMT)
commit9cc48faafc055ac4cc41ee122582f5dbb04ac375 (patch)
tree01f271932e5d6ab2f562504069c16972ad0d5ab6
parent47e3cb1a31dc24be531fa9ebfcae184033b8c91e (diff)
Add script for updating packages to the latest Dextrose patch set
-rwxr-xr-xrpms/bump-dx108
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:]))