From 4a41d496a8006fdc05e4eb0faf762d6ad043a96e Mon Sep 17 00:00:00 2001 From: Guido Günther Date: Wed, 11 Jan 2017 19:00:48 +0100 Subject: import-orig: Move orig.tar.gz with filter-pristine-tar If we filter a tarball and use filter-pristine-tar we want pristine-tar to see the correct file name. If a file already exists at that location move it. If we wouldn't move the existing tarball but rather e.g. create the symlink in a temp directory we risk gbp buildpackage picking up the unfiltered tarball later. Closes: #558777 --- gbp/scripts/import_orig.py | 6 ++++++ tests/component/deb/test_import_orig.py | 38 +++++++++++++++++++++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/gbp/scripts/import_orig.py b/gbp/scripts/import_orig.py index 5c948276..df2b0cb6 100644 --- a/gbp/scripts/import_orig.py +++ b/gbp/scripts/import_orig.py @@ -18,8 +18,10 @@ """Import a new upstream version into a Git repository""" import os +import shutil import sys import tempfile +import time import gbp.command_wrappers as gbpc from gbp.deb import (DebianPkgPolicy, parse_changelog_repo) from gbp.deb.upstreamsource import DebianUpstreamSource, unpack_component_tarball @@ -197,6 +199,10 @@ def prepare_pristine_tar(archive, pkg, version): if os.path.basename(archive) != os.path.basename(link): try: if not is_link_target(archive, link): + if os.path.exists(link): + backup = "%s.%d" % (link, time.time()) + gbp.log.info("%s already exists, moving to %s" % (link, backup)) + shutil.move(link, backup) os.symlink(os.path.abspath(archive), link) linked = True except OSError as err: diff --git a/tests/component/deb/test_import_orig.py b/tests/component/deb/test_import_orig.py index a9b7645d..d9e171e5 100644 --- a/tests/component/deb/test_import_orig.py +++ b/tests/component/deb/test_import_orig.py @@ -295,3 +295,41 @@ class TestImportOrig(ComponentTestBase): with assert_raises(KeyError): t.getmember(f) t.close() + + def test_filter_with_orig_tarball(self): + """ + Test that using a filter works even with an upstream tarball + that has already the correct name (#558777) + """ + dsc = self._dsc('2.6-2') + ok_(import_dsc(['arg0', '--pristine-tar', dsc]) == 0) + repo = ComponentTestGitRepository(self.pkg) + os.chdir(self.pkg) + self._check_repo_state(repo, 'master', ['master', 'upstream', 'pristine-tar']) + + f = 'hello-debhelper_2.8.orig.tar.gz' + src = os.path.join(DEB_TEST_DATA_DIR, 'dsc-3.0', f) + shutil.copy(src, '..') + + ok_(import_orig(['arg0', + '--no-interactive', + '--pristine-tar', + '--filter-pristine-tar', + '--filter=README*', + '../hello-debhelper_2.8.orig.tar.gz']) == 0) + self._check_repo_state(repo, 'master', ['master', 'upstream', 'pristine-tar'], + tags=['debian/2.6-2', 'upstream/2.6', 'upstream/2.8']) + + filtered = os.path.join('..', f) + ok_(os.path.exists(filtered)) + eq_(os.readlink(filtered).split('/')[-1], + 'hello-debhelper_2.8.orig.gbp.tar.gz') + # Check if tar got filtered properly + t = tarfile.open(name=filtered, mode="r:gz") + for f in ['hello-2.8/configure']: + i = t.getmember(f) + eq_(type(i), tarfile.TarInfo) + for f in ['hello-2.8/README']: + with assert_raises(KeyError): + t.getmember(f) + t.close() -- cgit v1.2.3