Created
December 15, 2015 11:34
-
-
Save Blackskyliner/5aae9720c71b668379ba to your computer and use it in GitHub Desktop.
check-gitversion.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
function printHelp { | |
echo """CheckGitHash Agent | |
Dieses Tool prüft, ob die Version eines lokalen Git-Rrepositories, welches in <dir> liegt, mit der Version von <repoUri> übereinstimmt. | |
Dabei wird die lokale Version mit dem <branch> von <repoUri> verglichen. | |
Usage: $0 <dir> <repoUri> [<branch>] | |
Argumente: | |
dir - Lokales Git-Repository, welches geprüft werden soll | |
repoUri - Entferntes Git-Repository, von welchem die aktuelle Version verglichen werden soll | |
branch - Der Branch des entfernten Git-Repositories, der geprüft werden soll (default: master) | |
Rückgabewerte: | |
0 - Versionen sind gleich | |
1 - Versionen sind unterschiedlich | |
2 - Prüfung konnte nicht durchgeführt werden | |
3 - Zu wenig/viele Argumente an die Funktion übergeben""" | |
} | |
if [[ $# -ne 3 && $# -ne 2 ]]; then | |
printHelp; | |
exit 3; | |
fi | |
if [[ $# -eq 2 ]]; then | |
REMOTE_BRANCH='master' | |
else | |
REMOTE_BRANCH=$3 | |
fi | |
REMOTE_URI=$2 | |
LOCAL_URI=$1 | |
if [[ -e ${LOCAL_URI} ]]; then | |
# Das lokale Verzeichnis existiert | |
if [[ -e ${LOCAL_URI}/.git ]]; then | |
# ... und ist durch GIT verwaltet. | |
LS_REMOTE=$(git ls-remote "${REMOTE_URI}" "${REMOTE_BRANCH}"); | |
if [[ $? -eq 0 ]]; then | |
# Der Git Server wurde erreicht und es konnten die Remoterefs ausgelesen werden | |
LS_HITS=$(echo "${LS_REMOTE}" | wc -l) | |
if [[ ${LS_HITS} -eq 1 && $(echo ${LS_REMOTE} | wc -c) -gt 1 ]]; then | |
# Exakt 1 Ergebnis (Remoteref) | |
REMOTE_HASH=$(echo ${LS_REMOTE} | cut -f 1 -d ' ') | |
pushd "${LOCAL_URI}" > /dev/null | |
LOCAL_HASH=$(git log -1 --format="%H") | |
LOCAL_REPO=$(git rev-parse --abbrev-ref HEAD) | |
popd > /dev/null | |
if [[ ${REMOTE_HASH} = ${LOCAL_HASH} ]]; then | |
exit 0 | |
else | |
echo -n "(Remote:${REMOTE_BRANCH}) ${REMOTE_HASH:0:8}" | |
echo " != ${LOCAL_HASH:0:8} (Lokal:${LOCAL_REPO})" | |
exit 1 | |
fi | |
elif [[ ${LS_HITS} -eq 1 ]]; then | |
# Kein Ergenis | |
echo "Der angegebene Branch '${REMOTE_BRANCH}' existiert nicht unter '${REMOTE_URI}'" | |
else | |
# Mehrere Ergenisse (Remoterefs) | |
echo "Der angegebene Branch '${REMOTE_BRANCH}' für '${REMOTE_URI}' ist mehrdeutig:" | |
echo "${LS_REMOTE}" | |
fi | |
else | |
echo "'${REMOTE_URI}' ist nicht erreichbar!" | |
fi | |
else | |
echo "'${LOCAL_URI}' ist kein Git Repository!" | |
fi | |
else | |
echo "'${LOCAL_URI}' existiert nicht!" | |
fi | |
exit 2 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment