From 4cd6627ab728acf0e08bb62bd981de6601c773ea Mon Sep 17 00:00:00 2001 From: Markus Lehtonen Date: Tue, 17 Sep 2013 15:13:40 +0300 Subject: buildpackage/dump_tree: add 'recursive' option For selecting whether to dump all the files recursively or just the top level directory of the tree. Signed-off-by: Markus Lehtonen --- gbp/scripts/common/buildpackage.py | 12 +++++++++--- tests/04_test_submodules.py | 15 +++++++++++++-- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/gbp/scripts/common/buildpackage.py b/gbp/scripts/common/buildpackage.py index 0522cd6b..2e53b782 100644 --- a/gbp/scripts/common/buildpackage.py +++ b/gbp/scripts/common/buildpackage.py @@ -101,13 +101,19 @@ def git_archive_single(treeish, output, prefix, comp_type, comp_level, comp_opts #{ Functions to handle export-dir -def dump_tree(repo, export_dir, treeish, with_submodules): +def dump_tree(repo, export_dir, treeish, with_submodules, recursive=True): "dump a tree to output_dir" output_dir = os.path.dirname(export_dir) prefix = sanitize_prefix(os.path.basename(export_dir)) + if recursive: + paths = [] + else: + paths = ["'%s'" % nam for _mod, typ, _sha, nam in + repo.list_tree(treeish) if typ == 'blob'] pipe = pipes.Template() - pipe.prepend('git archive --format=tar --prefix=%s %s' % (prefix, treeish), '.-') + pipe.prepend('git archive --format=tar --prefix=%s %s -- %s' % + (prefix, treeish, ' '.join(paths)), '.-') pipe.append('tar -C %s -xf -' % output_dir, '-.') top = os.path.abspath(os.path.curdir) try: @@ -115,7 +121,7 @@ def dump_tree(repo, export_dir, treeish, with_submodules): if ret: raise GbpError("Error in dump_tree archive pipe") - if with_submodules: + if recursive and with_submodules: if repo.has_submodules(): repo.update_submodules() for (subdir, commit) in repo.get_submodules(treeish): diff --git a/tests/04_test_submodules.py b/tests/04_test_submodules.py index 4b072201..a18f8b51 100644 --- a/tests/04_test_submodules.py +++ b/tests/04_test_submodules.py @@ -22,6 +22,7 @@ SUBMODULES = [] SUBMODULE_NAMES = ["test_submodule", "sub module"] TMPDIR = None TESTFILE_NAME = "testfile" +TESTDIR_NAME = "testdir" class Submodule(object): """Class representing remote repo for Git submodule""" @@ -57,6 +58,8 @@ def test_empty_has_submodules(): def _add_dummy_data(repo, msg): """Commit dummy data to a Git repository""" shutil.copy(".git/HEAD", TESTFILE_NAME) + os.mkdir(TESTDIR_NAME) + shutil.copy(TESTFILE_NAME, os.path.join(TESTDIR_NAME, TESTFILE_NAME)) repo.add_files('.', force=True) repo.commit_all(msg) @@ -99,8 +102,16 @@ def test_dump_tree(): os.mkdir(dumpdir) ok_(buildpackage.dump_tree(REPO, dumpdir, "master", True)) ok_(os.path.exists(os.path.join(dumpdir, TESTFILE_NAME))) + ok_(os.path.exists(os.path.join(dumpdir, TESTDIR_NAME, TESTFILE_NAME))) ok_(os.path.exists(os.path.join(dumpdir, SUBMODULES[0].name, TESTFILE_NAME))) + # No submodules or subdirs if recursive is False + dumpdir = TMPDIR.join("dump2") + os.mkdir(dumpdir) + ok_(buildpackage.dump_tree(REPO, dumpdir, "master", True, False)) + ok_(os.path.exists(os.path.join(dumpdir, TESTFILE_NAME))) + ok_(not os.path.exists(os.path.join(dumpdir, TESTDIR_NAME))) + ok_(not os.path.exists(os.path.join(dumpdir, SUBMODULES[0].name))) def test_create_tarballs(): @@ -120,12 +131,12 @@ def test_check_tarfiles(): tarobj = tarfile.open(TMPDIR.join("test_0.1.orig.tar.bz2"), 'r:*') files = tarobj.getmembers() ok_("test-0.1/.gitmodules" in [ f.name for f in files ]) - eq_(len(files) , 6) + eq_(len(files) , 10) # Check tarball without submodules tarobj = tarfile.open(TMPDIR.join("test_0.2.orig.tar.bz2"), 'r:*') files = tarobj.getmembers() ok_(("test-0.2/%s" % TESTFILE_NAME) in [ f.name for f in files ]) - eq_(len(files) , 4) + eq_(len(files) , 6) def test_add_whitespace_submodule(): """Add a second submodule with name containing whitespace""" -- cgit v1.2.3