mirror of
https://github.com/dcarrillo/prezto.git
synced 2024-12-22 16:18:00 +00:00
[zprezto-update] Add convenience function to update zprezto (#1344)
* [zprezto-update] Add convenience function to update zprezto This function checks if there is any update to zprezto, and if so will pull in the changes. It will not attempt a pull unless it is fastforwardable. It also makes sure the user is on the master branch before attempting. * [zprezto-update] Improve resilience of the function Better error checking of status of the git repository and better error producing. Fit columns into mostly 80 width and add a missing printf argument. Use ( ) around the function so changing directory does not affect the outer scope. * [README] Add instructions on using zprezto-update function
This commit is contained in:
parent
eb47b45a0d
commit
87868441eb
11
README.md
11
README.md
@ -50,9 +50,16 @@ window or tab.
|
|||||||
Updating
|
Updating
|
||||||
--------
|
--------
|
||||||
|
|
||||||
Pull the latest changes and update submodules.
|
Run `zprezto-update` to automatically check if there is an update to zprezto.
|
||||||
|
If there are no file conflicts, zprezto its submodules will be automatically
|
||||||
|
be updated. If there are conflicts you will instructed to go
|
||||||
|
into the `$ZPREZTODIR` directory and resolve them yourself.
|
||||||
|
|
||||||
git pull && git submodule update --init --recursive
|
To pull the latest changes and update submodules manually:
|
||||||
|
|
||||||
|
cd $ZPREZTODIR
|
||||||
|
git pull
|
||||||
|
git submodule update --init --recursive
|
||||||
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
46
init.zsh
46
init.zsh
@ -17,6 +17,52 @@ if ! autoload -Uz is-at-least || ! is-at-least "$min_zsh_version"; then
|
|||||||
fi
|
fi
|
||||||
unset min_zsh_version
|
unset min_zsh_version
|
||||||
|
|
||||||
|
# zprezto convenience updater
|
||||||
|
# The function is surrounded by ( ) instead of { } so it starts in a subshell
|
||||||
|
# and won't affect the environment of the calling shell
|
||||||
|
function zprezto-update () (
|
||||||
|
function cannot-fast-forward {
|
||||||
|
local STATUS="$1"
|
||||||
|
[[ "${STATUS}" ]] && printf "%s\n" "${STATUS}"
|
||||||
|
printf "Unable to fast-forward the changes. You can fix this by "
|
||||||
|
printf "running\ncd '%s' and then\n'git pull' " "${ZPREZTODIR}"
|
||||||
|
printf "to manually pull and possibly merge in changes\n"
|
||||||
|
}
|
||||||
|
cd -q -- "${ZPREZTODIR}" || return 7
|
||||||
|
local orig_branch="$(git symbolic-ref HEAD 2>/dev/null | cut -d '/' -f 3)"
|
||||||
|
if [[ "$orig_branch" == "master" ]]; then
|
||||||
|
git fetch || return "$?"
|
||||||
|
local UPSTREAM=$(git rev-parse '@{u}')
|
||||||
|
local LOCAL=$(git rev-parse @)
|
||||||
|
local REMOTE=$(git rev-parse "$UPSTREAM")
|
||||||
|
local BASE=$(git merge-base @ "$UPSTREAM")
|
||||||
|
if [[ $LOCAL == $REMOTE ]]; then
|
||||||
|
printf "There are no updates.\n"
|
||||||
|
return 0
|
||||||
|
elif [[ $LOCAL == $BASE ]]; then
|
||||||
|
printf "There is an update availible. Trying to pull.\n\n"
|
||||||
|
if git pull --ff-only; then
|
||||||
|
printf "Syncing submodules\n"
|
||||||
|
git submodule update --recursive
|
||||||
|
return $?
|
||||||
|
else
|
||||||
|
cannot-fast-forward
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
elif [[ $REMOTE == $BASE ]]; then
|
||||||
|
cannot-fast-forward "Commits in master that aren't in upstream."
|
||||||
|
return 1
|
||||||
|
else
|
||||||
|
cannot-fast-forward "Upstream and local have diverged."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
printf "zprezto install at '%s' is not on the master branch " "${ZPREZTODIR}"
|
||||||
|
printf "(you're on '%s')\nUnable to automatically update.\n" "${orig_branch}"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
)
|
||||||
#
|
#
|
||||||
# Module Loader
|
# Module Loader
|
||||||
#
|
#
|
||||||
|
Loading…
Reference in New Issue
Block a user