From 52f6ee63394875e8ea3facc6e31e187c1df55de6 Mon Sep 17 00:00:00 2001 From: Zhang Qiang Date: Thu, 9 Feb 2012 19:27:16 +0800 Subject: [PATCH] Add git archive_tar API, and use git archive to gen tar ball --- gitbuildsys/cmd_build.py | 19 ++----------------- gitbuildsys/git.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 17 deletions(-) diff --git a/gitbuildsys/cmd_build.py b/gitbuildsys/cmd_build.py index e09b403..64b22f5 100644 --- a/gitbuildsys/cmd_build.py +++ b/gitbuildsys/cmd_build.py @@ -21,7 +21,6 @@ import os import time -import tarfile import tempfile import glob import shutil @@ -109,23 +108,9 @@ def do(opts, args): workdir = localpkg.get_workdir() localpkg.remove_all() - srcdir = "%s-%s" % (name, version) - os.mkdir(srcdir) - - tarball = '%s-%s-tizen.tar.bz2' % (name, version) + tarball = '%s/%s-%s-tizen.tar.bz2' % (workdir, name, version) msger.info('archive git tree to tar ball: %s' % tarball) - tarfp = '%s/%s' % (workdir, tarball) - tar = tarfile.open(tarfp, 'w:bz2') - for f in mygit.ls_files(): - if f.startswith('packaging'): - continue - dirname = "%s/%s" % (srcdir, os.path.dirname(f)) - if not os.path.exists(dirname): - os.makedirs(dirname) - shutil.copy(f, dirname) - tar.add("%s/%s" % (srcdir, f)) - tar.close() - shutil.rmtree(srcdir, ignore_errors = True) + mygit.archive_tar("%s-%s/" % (name, version), tarball) for f in glob.glob('packaging/*'): shutil.copy(f, workdir) diff --git a/gitbuildsys/git.py b/gitbuildsys/git.py index ca0e8b1..9f61a68 100644 --- a/gitbuildsys/git.py +++ b/gitbuildsys/git.py @@ -119,3 +119,35 @@ class Git: else: return (br in self.get_branches()[1]) + + def archive_tar(self, prefix, tarname, treeish = None): + """Archive git tree to tar ball + @prefix: tarball topdir + @output: output tarball name + @treeish: commit ID archive from + """ + filetypes = ['.tar.gz', '.tar.bz2', '.tgz'] + tarfile = None + compress = None + for type in filetypes: + if tarname.endswith(type): + tarfile = "%s.tar" % tarname.replace(type, '') + compress = type + break + else: + raise errors.GitError("Can't support tarball type, "\ + "supported types: %s" % ', '.join(filetypes)) + + if treeish is None: + treeish = 'HEAD' + + options = [ treeish, '--output=%s' % tarfile, \ + '--prefix=%s' % prefix ] + self._exec_git('archive', options) + + if compress == '.tar.bz2': + runner.quiet('bzip2 -f %s' % tarfile) + + if compress == 'gz': + # TODO: implement later. + pass -- 2.7.4