#!/usr/bin/env bash set -ex if [ $# -lt 3 ]; then echo "Usage: $0 " 1>&2 exit 2 fi REPO="$1" COMMIT="$2" DIR="$3" echo "Copy '$COMMIT' from '$REPO' to '$DIR'" if [ -f "$DIR"/.git-copy ]; then CURRENT=$(cat "$DIR"/.git-copy) if [ $(echo -n "$COMMIT" | wc -c) != "40" ]; then # On the off chance that $COMMIT is a remote head. ACTUAL=$(git ls-remote "$REPO" "$COMMIT" | cut -c 1-40 -) else ACTUAL="$COMMIT" fi if [ "$CURRENT" = "$ACTUAL" ]; then echo "Up to date." exit fi fi rm -rf "$DIR" git init -q "$DIR" git -C "$DIR" fetch -q --depth=1 "$REPO" "$COMMIT" git -C "$DIR" reset -q --hard FETCH_HEAD git -C "$DIR" rev-parse --verify HEAD > "$DIR"/.git-copy rm -rf "$DIR"/.git