linux/debian/patches/bugfix/all/stable/gen-patch

81 lines
2.8 KiB
Python
Executable File

#!/usr/bin/env python
import os.path, re, sys, textwrap
sys.path.append('debian/lib/python')
from debian_linux.config import ConfigCoreHierarchy
from debian_linux.debian import Changelog
class Version(object):
_rules = ur"^(\d+\.\d+\.\d+)\.(\d+)$"
_re = re.compile(_rules)
def __init__(self, version):
self.complete = version
match = self._re.match(version)
if match is None:
raise RuntimeError
self.release = match.group(1)
self.patch = int(match.group(2))
class GenPatch(object):
def __init__(self, path, repo, version):
self.config = ConfigCoreHierarchy(['debian/config'])
self.package_version = Changelog()[0].version
self.path = path
self.repo = repo
self.version = version
def __call__(self):
base = self.version.complete
patch = base + '.patch'
log = base + '.log'
series = base + '.series'
if self.version.patch == 1:
tag_in = "v%s" % self.version.release
else:
tag_in = "v%s.%d" % (self.version.release, self.version.patch - 1)
tag_out = "v%s" % self.version.complete
print tag_in, tag_out
backports = self.config[('backports',)]
diff_filter = '-x Makefile'
if self.version.release == self.package_version.upstream:
diff_filter += ' ' + ' '.join("-x '%s'" % re.sub(r'/$', r'/*', path)
for path in backports)
git_paths = ''
else:
git_paths = ' '.join("'%s'" % path for path in backports
if backports[path] == self.version.release)
f = os.popen("cd %s; git diff %s %s -- %s | filterdiff -p 1 %s > %s" %
(self.repo, tag_in, tag_out, git_paths, diff_filter,
os.path.join(self.path, patch)))
if f.close() is not None:
raise RuntimeError
f = os.popen("cd %s; git log --oneline --reverse %s..%s^ -- %s" %
(self.repo, tag_in, tag_out, git_paths))
out = file(os.path.join(self.path, log), 'w')
out.write(" * Add stable release %s:\n" % self.version.complete)
for line in f:
line = line.strip()
if not line:
continue
hash, log = line.split(' ', 1)
log = textwrap.wrap(log, 74)
log = '\n '.join(log)
out.write(" - %s\n" % log)
if f.close() is not None:
raise RuntimeError
out = file(os.path.join(self.path, series), 'w')
out.write("+ bugfix/all/stable/%s\n" % patch)
out.close()
if __name__ == '__main__':
path = os.path.realpath(os.path.dirname(sys.argv[0]))
repo = sys.argv[1]
for i in sys.argv[2:]:
GenPatch(path, repo, Version(i))()