ed9d08a091
to autoloads the functions and sources the scripts, instead of executing zimfw during startup, and having it always figuring out what do to on the fly. This takes out the worry about zimfw interfering with the startup time, and allows room to add more features to it. So, zstyle was replaced by a custom zmodule function to define the modules, with the extra ability of allowing users to set custom fpath paths, autoloaded functions and sourced scripts per module.
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 QUIET=${6}
|
|
readonly CLEAR_LINE=$'\E[2K\r'
|
|
(( ! QUIET )) && print -Rn ${CLEAR_LINE}"Updating ${MODULE} …"
|
|
if ! builtin cd ${DIR} 2>/dev/null; then
|
|
print -u2 -PR ${CLEAR_LINE}"%F{red}✗ %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}✗ %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
|
|
(( ! QUIET )) && print -PR ${CLEAR_LINE}"%F{green}✓%f %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}✗ %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}✗ %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}✗ %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 (( ! QUIET )); then
|
|
[[ -n ${LOG} ]] && OUT=${OUT}$'\n'${(F):- ${(f)^LOG}}
|
|
print -PR ${CLEAR_LINE}"%F{green}✓%f %B${MODULE}:%b ${OUT}"
|
|
fi
|
|
else
|
|
print -u2 -PR ${CLEAR_LINE}"%F{red}✗ %B${MODULE}:%b Error during git submodule update%f"$'\n'${(F):- ${(f)^ERR}}
|
|
return 1
|
|
fi
|