From fecf5b522b651f1304fdc8976e98776f3a130830 Mon Sep 17 00:00:00 2001 From: Thomas Petazzoni Date: Tue, 4 Feb 2014 14:36:56 +0100 Subject: [PATCH] pkg-download: make sure git downloads fail for unknown versions The current git download helper creates the tarball by doing: git archive | gzip -c > Unfortunately, even if "git archive" fails and returns a non-zero error code, gzip ignores that, compresses nothing, and returns success (zero error code). The consequence of this behavior is that when the git version provided in the package is incorrect, we are not failing during the download step, but later on when trying to extract the tarball (which was incorrectly created as a result of the failing git archive). To fix this, we change the tarball creation logic to: git archive -o .tmp && gzip -c .tmp > && rm -f .tmp If the build is interrupted during the "gzip" command, we may leave the .tmp file behind us, but this also happens with wget downloads, and is generally not considered a problem, since this temporary file will be overwritten next time we attempt to do download this package. Signed-off-by: Thomas Petazzoni Signed-off-by: Thomas De Schampheleire Signed-off-by: Peter Korsgaard --- package/pkg-download.mk | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package/pkg-download.mk b/package/pkg-download.mk index c00689b89c..2641d4e8b7 100644 --- a/package/pkg-download.mk +++ b/package/pkg-download.mk @@ -91,8 +91,9 @@ define DOWNLOAD_GIT (echo "Doing full clone" && \ $(GIT) clone --bare $($(PKG)_SITE) $($(PKG)_BASE_NAME))) && \ pushd $($(PKG)_BASE_NAME) > /dev/null && \ - $(GIT) archive --format=tar --prefix=$($(PKG)_BASE_NAME)/ $($(PKG)_DL_VERSION) | \ - gzip -c > $(DL_DIR)/$($(PKG)_SOURCE) && \ + $(GIT) archive --format=tar --prefix=$($(PKG)_BASE_NAME)/ -o $(DL_DIR)/.$($(PKG)_SOURCE).tmp $($(PKG)_DL_VERSION) && \ + gzip -c $(DL_DIR)/.$($(PKG)_SOURCE).tmp > $(DL_DIR)/$($(PKG)_SOURCE) && \ + rm -f $(DL_DIR)/.$($(PKG)_SOURCE).tmp && \ popd > /dev/null && \ rm -rf $($(PKG)_DL_DIR) && \ popd > /dev/null)