ee99fe8a36
so the normal output is focused on the given action, and output for additional steps perfomed after the given action is only shown in verbose mode. Also, the output of wget is only shown in verbose mode. This is because wget always shows some output (to stderr) even when there are no errors. See https://serverfault.com/q/70889/302338 This should give a friendlier output. See #360
61 lines
2.2 KiB
Plaintext
61 lines
2.2 KiB
Plaintext
# This runs in a new shell
|
|
readonly MODULE=${1}
|
|
readonly DIR=${2}
|
|
readonly URL=${3}
|
|
readonly TYPE=${4}
|
|
readonly REV=${5}
|
|
readonly -i PRINTLEVEL=${6}
|
|
readonly CLEAR_LINE=$'\E[2K\r'
|
|
(( PRINTLEVEL > 0 )) && print -Rn ${CLEAR_LINE}"Updating ${MODULE}<%= ellipsis %>"
|
|
if ! builtin cd -q ${DIR} 2>/dev/null; then
|
|
print -u2 -PR ${CLEAR_LINE}"%F{red}<%= error %>%B${MODULE}:%b Not installed%f"
|
|
return 1
|
|
fi
|
|
if [[ ${PWD} != $(command git rev-parse --show-toplevel 2>/dev/null) ]]; then
|
|
# Not in repo root. Will not try to update.
|
|
return 0
|
|
fi
|
|
if [[ ${URL} != $(command git config --get remote.origin.url) ]]; then
|
|
print -u2 -PR ${CLEAR_LINE}"%F{red}<%= error %>%B${MODULE}:%b URL does not match. Expected ${URL}. Will not try to update.%f"
|
|
return 1
|
|
fi
|
|
if [[ ${TYPE} == tag ]]; then
|
|
if [[ ${REV} == $(command git describe --tags --exact-match 2>/dev/null) ]]; then
|
|
(( PRINTLEVEL > 0 )) && print -PR ${CLEAR_LINE}"<%= okay %>%B${MODULE}:%b Already up to date"
|
|
return 0
|
|
fi
|
|
fi
|
|
if ! ERR=$(command git fetch -pq origin ${REV} 2>&1); then
|
|
print -u2 -PR ${CLEAR_LINE}"%F{red}<%= error %>%B${MODULE}:%b Error during git fetch%f"$'\n'${(F):- ${(f)^ERR}}
|
|
return 1
|
|
fi
|
|
if [[ ${TYPE} == branch ]]; then
|
|
LOG_REV=${REV}@{u}
|
|
else
|
|
LOG_REV=${REV}
|
|
fi
|
|
LOG=$(command git log --graph --color --format='%C(yellow)%h%C(reset) %s %C(cyan)(%cr)%C(reset)' ..${LOG_REV} 2>/dev/null)
|
|
if ! ERR=$(command git checkout -q ${REV} -- 2>&1); then
|
|
print -u2 -PR ${CLEAR_LINE}"%F{red}<%= error %>%B${MODULE}:%b Error during git checkout%f"$'\n'${(F):- ${(f)^ERR}}
|
|
return 1
|
|
fi
|
|
if [[ ${TYPE} == branch ]]; then
|
|
if ! OUT=$(command git merge --ff-only --no-progress -n 2>&1); then
|
|
print -u2 -PR ${CLEAR_LINE}"%F{red}<%= error %>%B${MODULE}:%b Error during git merge%f"$'\n'${(F):- ${(f)^OUT}}
|
|
return 1
|
|
fi
|
|
# keep just first line of OUT
|
|
OUT=${OUT%%($'\n'|$'\r')*}
|
|
else
|
|
OUT="Updating to ${TYPE} ${REV}"
|
|
fi
|
|
if ERR=$(command git submodule update --init --recursive -q 2>&1); then
|
|
if (( PRINTLEVEL > 0 )); then
|
|
[[ -n ${LOG} ]] && OUT=${OUT}$'\n'${(F):- ${(f)^LOG}}
|
|
print -PR ${CLEAR_LINE}"<%= okay %>%B${MODULE}:%b ${OUT}"
|
|
fi
|
|
else
|
|
print -u2 -PR ${CLEAR_LINE}"%F{red}<%= error %>%B${MODULE}:%b Error during git submodule update%f"$'\n'${(F):- ${(f)^ERR}}
|
|
return 1
|
|
fi
|