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

63 lines
2.0 KiB
Python
Executable File

#!/usr/bin/env python
import os.path, re, sys, textwrap
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.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
f = os.popen("cd %s; git diff %s %s | filterdiff -p 1 -x Makefile > %s" % (self.repo, tag_in, tag_out, os.path.join(self.path, patch)))
if f.close() is not None:
raise RuntimeError
f = os.popen("cd %s; git log --pretty=oneline -r %s..%s^" % (self.repo, tag_in, tag_out))
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))()