diff --git a/debian/patches/features/all/xen/gen-patch b/debian/patches/features/all/xen/gen-patch new file mode 100755 index 000000000..c26444c1f --- /dev/null +++ b/debian/patches/features/all/xen/gen-patch @@ -0,0 +1,76 @@ +#!/usr/bin/env python + +import os.path, re, sys + +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) + if match.group(3) is not None: + self.patch = int(match.group(3)) + else: + self.patch = None + +class GenPatch(object): + def __init__(self, path, identifier, repo_linux, repo_xen, version): + self.path = path + self.identifier = identifier + self.repo_linux = repo_linux + self.repo_xen = repo_xen + self.version = version + + def __call__(self): + f = os.popen("cd '%s'; hg id" % self.repo_xen) + hg_id = f.readline().split(" ", 1)[0] + if f.close() is not None: + raise RuntimeError + + f = os.popen("cd '%s'; hg log -r '%s'" % (self.repo_xen, hg_id)) + hg_changeset = f.readline().strip().split(" ")[-1].split(':')[0] + if f.close() is not None: + raise RuntimeError + + f = os.popen("cd '%s'; git checkout -q 'v%s'" % (self.repo_linux, self.version.complete)) + if f.close() is not None: + raise RuntimeError + + base = "%s-%s-%s" % (self.identifier.lower(), version.release, hg_changeset) + patch = "%s.patch" % base + log = "%s.log" % base + series = "%s.series" % base + + import tempfile + tmpdir = tempfile.mkdtemp(prefix = 'gen-patch') + try: + tmpdir_linux = os.path.join(tmpdir, "a") + tmpdir_xen = os.path.join(tmpdir, "b") + os.symlink(self.repo_linux, tmpdir_linux) + os.symlink(self.repo_xen, tmpdir_xen) + f = os.popen("cd '%s'; diff -x '.hg*' -x '.git*' -urN a b > '%s.in'" % (tmpdir, os.path.join(self.path, patch))) + if f.close() >> 8 != 1: + raise RuntimeError + finally: + import shutil + shutil.rmtree(tmpdir) + + out = file(os.path.join(self.path, log), 'w') + out.write(" * Update xen patch to changeset %s from %s %s branch.\n" % (hg_changeset, self.identifier, self.version.release)) + out.close() + + out = file(os.path.join(self.path, series), 'w') + out.write("+ features/all/xen/%s *_xen *_xen-vserver\n" % patch) + out.close() + +if __name__ == '__main__': + path = os.path.realpath(os.path.dirname(sys.argv[0])) + identifier = sys.argv[1] + repo_linux = sys.argv[2] + repo_xen = sys.argv[3] + version = Version(sys.argv[4]) + GenPatch(path, identifier, repo_linux, repo_xen, version)()