#!/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 ' 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:]))