#!/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
|
|
)
|