diff options
author | Markus Lehtonen <markus.lehtonen@linux.intel.com> | 2013-08-27 19:22:44 +0300 |
---|---|---|
committer | Guido Günther <agx@sigxcpu.org> | 2013-09-10 09:15:43 +0200 |
commit | e54289ef2a5f72456834de3a21c2e6c3f2ebdb6b (patch) | |
tree | 14da3a0a0c8dba35ffab3a4319b9be3ba0676ba8 | |
parent | f738be32630724eb5f8c53035b1571e45cd547f4 (diff) | |
download | git-buildpackage-e54289ef2a5f72456834de3a21c2e6c3f2ebdb6b.tar.gz git-buildpackage-e54289ef2a5f72456834de3a21c2e6c3f2ebdb6b.tar.bz2 git-buildpackage-e54289ef2a5f72456834de3a21c2e6c3f2ebdb6b.zip |
common/buildpackage: fix handling of empty tarball prefix
Previously empty prefix in tarball generation introduced a leading slash
in all filenames in the archive.
Signed-off-by: Markus Lehtonen <markus.lehtonen@linux.intel.com>
-rw-r--r-- | gbp/scripts/common/buildpackage.py | 31 |
1 files changed, 24 insertions, 7 deletions
diff --git a/gbp/scripts/common/buildpackage.py b/gbp/scripts/common/buildpackage.py index c80a24f8..0522cd6b 100644 --- a/gbp/scripts/common/buildpackage.py +++ b/gbp/scripts/common/buildpackage.py @@ -34,6 +34,22 @@ wc_name = "WC" wc_index = ".git/gbp_index" +def sanitize_prefix(prefix): + """ + Sanitize the prefix used for generating source archives + + >>> sanitize_prefix('') + '/' + >>> sanitize_prefix('foo/') + 'foo/' + >>> sanitize_prefix('/foo/bar') + 'foo/bar/' + """ + if prefix: + return prefix.strip('/') + '/' + return '/' + + def git_archive_submodules(repo, treeish, output, prefix, comp_type, comp_level, comp_opts): """ Create tar.gz of an archive with submodules @@ -43,13 +59,13 @@ def git_archive_submodules(repo, treeish, output, prefix, comp_type, comp_level, Exception handling is left to the caller. """ - + prefix = sanitize_prefix(prefix) tarfile = output.rsplit('.', 1)[0] tempdir = tempfile.mkdtemp() submodule_tarfile = os.path.join(tempdir, "submodule.tar") try: # generate main tarfile - repo.archive(format='tar', prefix='%s/' % (prefix), + repo.archive(format='tar', prefix=prefix, output=tarfile, treeish=treeish) # generate each submodule's tarfile and append it to the main archive @@ -57,7 +73,7 @@ def git_archive_submodules(repo, treeish, output, prefix, comp_type, comp_level, tarpath = [subdir, subdir[2:]][subdir.startswith("./")] gbp.log.debug("Processing submodule %s (%s)" % (subdir, commit[0:8])) - repo.archive(format='tar', prefix='%s/%s/' % (prefix, tarpath), + repo.archive(format='tar', prefix='%s%s/' % (prefix, tarpath), output=submodule_tarfile, treeish=commit, cwd=subdir) CatenateTarArchive(tarfile)(submodule_tarfile) @@ -75,8 +91,9 @@ def git_archive_single(treeish, output, prefix, comp_type, comp_level, comp_opts Exception handling is left to the caller. """ + prefix = sanitize_prefix(prefix) pipe = pipes.Template() - pipe.prepend("git archive --format=tar --prefix=%s/ %s" % (prefix, treeish), '.-') + pipe.prepend("git archive --format=tar --prefix=%s %s" % (prefix, treeish), '.-') pipe.append('%s -c -%s %s' % (comp_type, comp_level, comp_opts), '--') ret = pipe.copy('', output) if ret: @@ -87,10 +104,10 @@ def git_archive_single(treeish, output, prefix, comp_type, comp_level, comp_opts def dump_tree(repo, export_dir, treeish, with_submodules): "dump a tree to output_dir" output_dir = os.path.dirname(export_dir) - prefix = os.path.basename(export_dir) + prefix = sanitize_prefix(os.path.basename(export_dir)) pipe = pipes.Template() - pipe.prepend('git archive --format=tar --prefix=%s/ %s' % (prefix, treeish), '.-') + pipe.prepend('git archive --format=tar --prefix=%s %s' % (prefix, treeish), '.-') pipe.append('tar -C %s -xf -' % output_dir, '-.') top = os.path.abspath(os.path.curdir) try: @@ -106,7 +123,7 @@ def dump_tree(repo, export_dir, treeish, with_submodules): tarpath = [subdir, subdir[2:]][subdir.startswith("./")] os.chdir(subdir) pipe = pipes.Template() - pipe.prepend('git archive --format=tar --prefix=%s/%s/ %s' % + pipe.prepend('git archive --format=tar --prefix=%s%s/ %s' % (prefix, tarpath, commit), '.-') pipe.append('tar -C %s -xf -' % output_dir, '-.') ret = pipe.copy('', '') |