diff options
Diffstat (limited to 'utils/dockerd/git-short-commit.sh')
-rwxr-xr-x | utils/dockerd/git-short-commit.sh | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/utils/dockerd/git-short-commit.sh b/utils/dockerd/git-short-commit.sh new file mode 100755 index 000000000..ea8611ba5 --- /dev/null +++ b/utils/dockerd/git-short-commit.sh @@ -0,0 +1,48 @@ +#!/bin/sh +# +# USAGE: git-short-commit.sh <GIT_URL> <GIT_REF> <GIT_DIR> +# + +set -e + +error() { + echo "ERROR: ${*}" >&2 + exit 1 +} + +GIT_URL="${1}" +if [ -z "${GIT_URL}" ]; then + error "Git URL not specified" +fi + +GIT_REF="${2}" +if [ -z "${GIT_REF}" ]; then + error "Git reference not specified" +fi + +GIT_DIR="${3}" +if [ -z "${GIT_DIR}" ]; then + error "Git clone directory not specified" +fi + +clean_up() { + rm --force --recursive "${GIT_DIR}" +} +trap clean_up EXIT + +git init --quiet "${GIT_DIR}" +( + cd "${GIT_DIR}" + for PREFIX in "" "https://" "http://" "git@"; do + echo "Trying remote '${PREFIX}${GIT_URL}'" >&2 + git remote add origin "${PREFIX}${GIT_URL}" + + if git fetch --depth 1 origin "${GIT_REF}"; then + git checkout --detach FETCH_HEAD -- + git rev-parse --short HEAD + break + fi + + git remote remove origin + done +) |