The cirros image was rebuilt against the 3.13.0-83 kernel, drivers e1000e, igbvf...
[packages/trusty/cirros-testvm.git] / cirros-testvm / src-cirros / buildroot-2015.05 / support / download / 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 (executable)
index 0000000..fd5f539
--- /dev/null
@@ -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}"