buildrootschalter/support/download/git
Yann E. MORIN 8f76366c0f support/download: fix the git helper output file format
The git helper uses gzip to compress the intermediate tarball. But gzip
removes the source file, and create a new file named by appending .gz to
the original file name.

Thus, we end up with output.gz, while the download wrapper expects jsut
output, and thus believes the downlaod failed.

Fix that by storing the tar from git to a temporary file, then pipe this
file to gzip's stdin, and redirect gzip's stdout to the output file.

Reported-by: Graham Newton <gnewton@peavey-eu.com>
Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr>
Cc: Peter Seiderer <ps.report@gmx.net>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
2014-08-06 19:41:05 +02:00

40 lines
1.0 KiB
Bash
Executable File

#!/bin/bash
# We want to catch any unexpected failure, and exit immediately
set -e
# Download helper for git, to be called from the download wrapper script
# Expected arguments:
# $1: output file
# $2: git repo
# $3: git cset
# $4: package's basename (eg. foobar-1.2.3)
# And this environment:
# GIT : the git command to call
output="${1}"
repo="${2}"
cset="${3}"
basename="${4}"
# Try to see if we can do a shallow clone, since it is faster
# than a full clone.
git_done=0
if [ -n "$(${GIT} ls-remote "${repo}" "${cset}" 2>&1)" ]; then
printf "Doing shallow clone\n"
if ${GIT} clone --depth 1 -b "${cset}" --bare "${repo}" "${basename}"; then
git_done=1
else
printf "Shallow clone failed, falling back to doing a full clone\n"
fi
fi
if [ ${git_done} -eq 0 ]; then
printf "Doing full clone\n"
${GIT} clone --bare "${repo}" "${basename}"
fi
GIT_DIR="${basename}" \
${GIT} archive --prefix="${basename}/" -o "${output}.tmp" --format=tar "${cset}"
gzip <"${output}.tmp" >"${output}"