X-Git-Url: https://review.fuel-infra.org/gitweb?a=blobdiff_plain;f=cirros-testvm%2Fsrc-cirros%2Fbuildroot-2015.05%2Fsupport%2Fdownload%2Fgit;fp=cirros-testvm%2Fsrc-cirros%2Fbuildroot-2015.05%2Fsupport%2Fdownload%2Fgit;h=fd5f5392ddec9387aa3b6f92ba4a2dd72edf7e73;hb=b0a0f15dfaa205161a7fcb20cf1b8cd4948c2ef3;hp=0000000000000000000000000000000000000000;hpb=c6ac3cd55ee2da956195eee393b0882105dfad4e;p=packages%2Ftrusty%2Fcirros-testvm.git diff --git a/cirros-testvm/src-cirros/buildroot-2015.05/support/download/git b/cirros-testvm/src-cirros/buildroot-2015.05/support/download/git new file mode 100755 index 0000000..fd5f539 --- /dev/null +++ b/cirros-testvm/src-cirros/buildroot-2015.05/support/download/git @@ -0,0 +1,52 @@ +#!/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 +# +# Call it as: +# .../git [-q] OUT_FILE REPO_URL CSET BASENAME +# +# Environment: +# GIT : the git command to call + +verbose=-v +while getopts :q OPT; do + case "${OPT}" in + q) verbose=-q; exec >/dev/null;; + \?) printf "unknown option '%s'\n" "${OPTARG}" >&2; exit 1;; + esac +done +shift $((OPTIND-1)) + +output="${1}" +repo="${2}" +cset="${3}" +basename="${4}" + +# Try a shallow clone, since it is faster than a full clone - but that only +# works if the version is a ref (tag or branch). Before trying to do a shallow +# clone we check if ${cset} is in the list provided by git ls-remote. If not +# we fall back on a full clone. +# +# Messages for the type of clone used are provided to ease debugging in case of +# problems +git_done=0 +if [ -n "$(${GIT} ls-remote "${repo}" "${cset}" 2>&1)" ]; then + printf "Doing shallow clone\n" + if ${GIT} clone ${verbose} --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 ${verbose} --bare "${repo}" "${basename}" +fi + +GIT_DIR="${basename}" \ +${GIT} archive --prefix="${basename}/" -o "${output}.tmp" --format=tar "${cset}" + +gzip <"${output}.tmp" >"${output}"