Bastian Blank
2011-Jun-24  18:02 UTC
[Pkg-xen-changes] r899 - in trunk/xen-common/debian: bin lib/python/debian_xen
Author: waldi
Date: Fri Jun 24 18:02:08 2011
New Revision: 899
Log:
* debian/bin/genorig.py: Adopt changes from xen package.
* debian/lib/python/debian_xen/debian.py: Update allowed version types.
Modified:
   trunk/xen-common/debian/bin/genorig.py
   trunk/xen-common/debian/lib/python/debian_xen/debian.py
Modified: trunk/xen-common/debian/bin/genorig.py
=============================================================================---
trunk/xen-common/debian/bin/genorig.py	Fri Jun 24 17:44:58 2011	(r898)
+++ trunk/xen-common/debian/bin/genorig.py	Fri Jun 24 18:02:08 2011	(r899)
@@ -10,6 +10,32 @@
 
 from debian_xen.debian import VersionXen, Changelog
 
+
+class RepoHg(object):
+    def __init__(self, repo, options):
+        self.repo = repo
+        self.tag = options.tag or ''tip''
+
+    def do_archive(self, info):
+        orig_dir = os.path.join(info.temp_dir, info.orig_dir)
+        args = [''hg'', ''archive'',
''-r'', self.tag, os.path.realpath(orig_dir)]
+        if info.files:
+            args.extend(itertools.chain(*((''-I'', i) for i in
info.files)))
+        subprocess.check_call(args, cwd=self.repo)
+
+
+class RepoGit(object):
+    def __init__(self, repo, options):
+        self.repo = repo
+        self.tag = options.tag or ''HEAD''
+
+    def do_archive(self, info):
+        temp_tar = os.path.join(info.temp_dir, ''orig.tar'')
+        args = (''git'', ''archive'',
''--prefix'', ''%s/'' % info.orig_dir,
''-o'', os.path.realpath(temp_tar), self.tag)
+        subprocess.check_call(args, cwd=self.repo)
+        subprocess.check_call((''tar'', ''-C'',
info.temp_dir, ''-xf'', temp_tar))
+
+
 class Main(object):
     log = sys.stdout.write
 
@@ -18,65 +44,61 @@
             ''tools/Rules.mk'',
''tools/cross-install'', ''tools/examples'',
''tools/hotplug'')
 
     def __init__(self, options, repo):
-        self.options, self.repo = options, repo
+        self.options = options
 
         self.changelog_entry = Changelog(version=VersionXen)[0]
         self.source = self.changelog_entry.source
 
+        if options.version:
+            self.version = options.version
+        else:
+            raise NotImplementedError
+
+        if os.path.exists(os.path.join(repo, ''.hg'')):
+            self.repo = RepoHg(repo, options)
+        elif os.path.exists(os.path.join(repo, ''.git'')):
+            self.repo = RepoGit(repo, options)
+        else:
+            raise NotImplementedError
+
+        if options.component:
+            self.orig_dir = options.component
+            self.orig_tar = ''%s_%s.orig-%s.tar.gz'' %
(self.source, self.version, options.component)
+        else:
+            self.orig_dir = ''%s-%s'' % (self.source,
self.version)
+            self.orig_tar = ''%s_%s.orig.tar.gz'' %
(self.source, self.version)
+
     def __call__(self):
         import tempfile
-        self.dir = tempfile.mkdtemp(prefix=''genorig'',
dir=''debian'')
+        self.temp_dir = tempfile.mkdtemp(prefix=''genorig'',
dir=''debian'')
         try:
-            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_version(self):
-        if self.options.version:
-            self.version = self.options.version
-            return
-        raise NotImplementedError
+            shutil.rmtree(self.temp_dir)
 
     def do_archive(self):
         self.log("Create archive.\n")
-
-        arg_dir = os.path.join(os.path.realpath(self.dir), self.orig_dir)
-        args = (''hg'', ''archive'',
''-r'', self.options.tag, arg_dir) +
tuple(itertools.chain(*((''-I'', i) for i in self.files)))
-        p = subprocess.Popen(args, cwd=self.repo)
-        if p.wait():
-            raise RuntimeError
-
-    def do_changelog(self):
-        self.log("Exporting changelog.\n")
-
-        log = open("%s/%s/Changelog" % (self.dir, self.orig_dir),
''w'')
-        args = (''hg'', ''log'',
''-r'', ''%s:0'' % self.options.tag) +
tuple(self.files)
-        p = subprocess.Popen(args, cwd=self.repo, stdout=log)
-        if p.wait():
-            raise RuntimeError
-
-        log.close()
+        self.repo.do_archive(self)
 
     def do_tar(self):
         out = "../orig/%s" % self.orig_tar
         self.log("Generate tarball %s\n" % out)
 
-        p = subprocess.Popen((''tar'', ''-C'',
self.dir, ''-czf'', out, self.orig_dir))
-        if p.wait():
-            raise RuntimeError
+        try:
+            os.stat(out)
+            raise RuntimeError("Destination already exists")
+        except OSError: pass
+
+        subprocess.check_call((''tar'', ''-C'',
self.temp_dir, ''-czf'', out, self.orig_dir))
+
 
 if __name__ == ''__main__'':
     from optparse import OptionParser
     p = OptionParser(prog=sys.argv[0], usage=''%prog [OPTION]...
DIR'')
-    p.add_option("-t", "--tag", dest="tag",
default=''tip'')
-    p.add_option("-v", "--version",
dest="version")
+    p.add_option(''-c'', ''--component'',
dest=''component'')
+    p.add_option(''-t'', ''--tag'',
dest=''tag'')
+    p.add_option(''-v'', ''--version'',
dest=''version'')
     options, args = p.parse_args()
     if len(args) != 1:
         raise RuntimeError
Modified: trunk/xen-common/debian/lib/python/debian_xen/debian.py
=============================================================================---
trunk/xen-common/debian/lib/python/debian_xen/debian.py	Fri Jun 24 17:44:58 2011
(r898)
+++ trunk/xen-common/debian/lib/python/debian_xen/debian.py	Fri Jun 24 18:02:08
2011	(r899)
@@ -94,15 +94,13 @@
     _version_xen_rules = ur"""
 ^
 (?P<version>
-    (?P<major>\d+)
-    \.\d+
+    \d+\.\d+
 )
 \.\d+
 (?:
-    \+hg
-    (?P<hg_rev>
-        \d+
-    )
+    \+hg\d+
+    |
+    ~rc\d+
 )?
 -
 (?:[^-]+)
@@ -116,8 +114,4 @@
         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()()