[Pkg-xen-changes] r516 - in trunk/xen-common/debian: bin lib lib/python lib/python/debian_xen
Bastian Blank
waldi at alioth.debian.org
Sat Jan 26 23:19:10 UTC 2008
Author: waldi
Date: Sat Jan 26 23:19:10 2008
New Revision: 516
Log:
bin/genorig.py, debian/lib/python/debian_xen: Add.
Added:
trunk/xen-common/debian/bin/
trunk/xen-common/debian/bin/genorig.py (contents, props changed)
trunk/xen-common/debian/lib/
trunk/xen-common/debian/lib/python/
trunk/xen-common/debian/lib/python/debian_xen/
trunk/xen-common/debian/lib/python/debian_xen/__init__.py
trunk/xen-common/debian/lib/python/debian_xen/debian.py
Added: trunk/xen-common/debian/bin/genorig.py
==============================================================================
--- (empty file)
+++ trunk/xen-common/debian/bin/genorig.py Sat Jan 26 23:19:10 2008
@@ -0,0 +1,76 @@
+#!/usr/bin/env python
+
+import os, os.path, re, shutil, sys
+
+sys.path.append(sys.path[0] + '/../lib/python')
+
+from debian_xen.debian import VersionXen, Changelog
+
+class GenOrig(object):
+ log = sys.stdout.write
+
+ files = ['config', 'Config.mk', 'docs/Docs.mk', 'docs/Makefile', 'docs/man', 'tools/Rules.mk', 'tools/examples']
+
+ def __init__(self, repo, tag, version):
+ self.repo, self.tag, self.version = repo, tag, version
+
+ self.changelog_entry = Changelog(version = VersionXen)[0]
+ self.source = self.changelog_entry.source
+
+ def __call__(self):
+ import tempfile
+ self.dir = tempfile.mkdtemp(prefix = 'genorig', dir = 'debian')
+ try:
+ self.do_update()
+ self.do_version()
+
+ self.orig_dir = "%s-%s" % (self.source, self.version)
+ self.orig_tar = "%s_%s.orig.tar.gz" % (self.source, self.version)
+
+ self.do_archive()
+ self.do_changelog()
+ self.do_tar()
+ finally:
+ shutil.rmtree(self.dir)
+
+ def do_update(self):
+ if self.tag is None:
+ return
+ raise NotImplementedError
+
+ def do_version(self):
+ if self.version is not None:
+ return
+ raise NotImplementedError
+
+ def do_archive(self):
+ self.log("Create archive.\n")
+ include_args = ' '.join(('-I %s' % i for i in self.files))
+ f = os.popen("cd %s; hg archive %s %s/%s" % (self.repo, include_args, os.path.realpath(self.dir), self.orig_dir))
+ if f.close() is not None:
+ raise RuntimeError
+
+ def do_changelog(self):
+ self.log("Exporting changelog.\n")
+ file_args = ' '.join(self.files)
+ f = os.popen("cd %s; hg log %s" % (self.repo, file_args))
+ f_out = file("%s/%s/Changelog" % (self.dir, self.orig_dir), 'w')
+ shutil.copyfileobj(f, f_out)
+ if f.close() is not None:
+ raise RuntimeError
+ f_out.close()
+
+ def do_tar(self):
+ out = "../orig/%s" % self.orig_tar
+ self.log("Generate tarball %s\n" % out)
+ f = os.popen("tar -C %s -czf %s %s" % (self.dir, out, self.orig_dir))
+ if f.close() is not None:
+ raise RuntimeError
+
+if __name__ == '__main__':
+ from optparse import OptionParser
+ p = OptionParser()
+ p.add_option("-t", "--tag", dest = "tag")
+ p.add_option("-v", "--version", dest = "version")
+ options, args = p.parse_args(sys.argv)
+ GenOrig(args[1], options.tag, options.version)()
Added: trunk/xen-common/debian/lib/python/debian_xen/__init__.py
==============================================================================
Added: trunk/xen-common/debian/lib/python/debian_xen/debian.py
==============================================================================
--- (empty file)
+++ trunk/xen-common/debian/lib/python/debian_xen/debian.py Sat Jan 26 23:19:10 2008
@@ -0,0 +1,123 @@
+import re, os
+
+class Changelog(list):
+ _rules = r"""
+^
+(?P<source>
+ \w[-+0-9a-z.]+
+)
+\
+\(
+(?P<version>
+ [^\(\)\ \t]+
+)
+\)
+\s+
+(?P<distribution>
+ [-+0-9a-zA-Z.]+
+)
+\;
+"""
+ _re = re.compile(_rules, re.X)
+
+ class Entry(object):
+ __slot__ = 'distribution', 'source', 'version'
+
+ def __init__(self, distribution, source, version):
+ self.distribution, self.source, self.version = distribution, source, version
+
+ def __init__(self, dir = '', version = None):
+ if version is None:
+ version = Version
+ f = file(os.path.join(dir, "debian/changelog"))
+ while True:
+ line = f.readline()
+ if not line:
+ break
+ match = self._re.match(line)
+ if not match:
+ continue
+ try:
+ v = version(match.group('version'))
+ except Exception:
+ if not len(self):
+ raise
+ v = Version(match.group('version'))
+ self.append(self.Entry(match.group('distribution'), match.group('source'), v))
+
+class Version(object):
+ _version_rules = ur"""
+^
+(?:
+ (?P<epoch>
+ \d+
+ )
+ :
+)?
+(?P<upstream>
+ .+?
+)
+(?:
+ -
+ (?P<debian>[^-]+)
+)?
+$
+"""
+ _version_re = re.compile(_version_rules, re.X)
+
+ def __init__(self, version):
+ match = self._version_re.match(version)
+ if match is None:
+ raise RuntimeError, "Invalid debian version"
+ self.epoch = None
+ if match.group("epoch") is not None:
+ self.epoch = int(match.group("epoch"))
+ self.upstream = match.group("upstream")
+ self.debian = match.group("debian")
+
+ def __str__(self):
+ return self.complete
+
+ @property
+ def complete(self):
+ if self.epoch is not None:
+ return "%d:%s" % (self.epoch, self.complete_noepoch)
+ return self.complete_noepoch
+
+ @property
+ def complete_noepoch(self):
+ if self.debian is not None:
+ return "%s-%s" % (self.upstream, self.debian)
+ return self.upstream
+
+class VersionXen(Version):
+ _version_xen_rules = ur"""
+^
+(?P<version>
+ (?P<major>\d+)
+ \.\d+
+)
+\.\d+
+(?:
+ \+hg
+ (?P<hg_rev>
+ \d+
+ )
+)?
+-
+(?:[^-]+)
+$
+"""
+ _version_xen_re = re.compile(_version_xen_rules, re.X)
+
+ def __init__(self, version):
+ super(VersionXen, self).__init__(version)
+ match = self._version_xen_re.match(version)
+ if match is None:
+ raise ValueError("Invalid debian xen version")
+ d = match.groupdict()
+ self.xen_major = d['major']
+ self.xen_version = d['version']
+
+if __name__ == '__main__':
+ gencontrol()()
More information about the Pkg-xen-changes
mailing list