8f76366c0f
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>
40 lines
1.0 KiB
Bash
Executable File
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}"
|