#!/usr/bin/env 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}"