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