summaryrefslogtreecommitdiff
path: root/plugins/mercurial/mercurial.plugin.zsh
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/mercurial/mercurial.plugin.zsh')
-rw-r--r--plugins/mercurial/mercurial.plugin.zsh114
1 files changed, 79 insertions, 35 deletions
diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh
index e098664c0..9b85d02f6 100644
--- a/plugins/mercurial/mercurial.plugin.zsh
+++ b/plugins/mercurial/mercurial.plugin.zsh
@@ -2,6 +2,7 @@
alias hga='hg add'
alias hgc='hg commit'
alias hgca='hg commit --amend'
+alias hgci='hg commit --interactive'
alias hgb='hg branch'
alias hgba='hg branches'
alias hgbk='hg bookmarks'
@@ -10,7 +11,7 @@ alias hgd='hg diff'
alias hged='hg diffmerge'
alias hgp='hg push'
alias hgs='hg status'
-alias hgsl='hg log --limit 20 --template "{node|short} | {date|isodatesec} | {author|user}: {desc|strip|firstline}\n"'
+alias hgsl='hg log --limit 20 --template "{node|short} | {date|isodatesec} | {author|person}: {desc|strip|firstline}\n" '
alias hgun='hg resolve --list'
# pull and update
alias hgi='hg incoming'
@@ -20,55 +21,98 @@ alias hgo='hg outgoing'
alias hglg='hg log --stat -v'
alias hglgp='hg log --stat -p -v'
+function hgic() {
+ hg incoming "$@" | grep "changeset" | wc -l
+}
+
+function hgoc() {
+ hg outgoing "$@" | grep "changeset" | wc -l
+}
+
+# functions
+function hg_root() {
+ local dir="$PWD"
+ while [[ "$dir" != "/" ]]; do
+ if [[ -d "$dir/.hg" ]]; then
+ echo "$dir"
+ return 0
+ fi
+ dir="${dir:h}"
+ done
+ return 1
+}
+
function in_hg() {
- if $(hg branch > /dev/null 2>&1); then
- echo 1
- fi
+ hg_root >/dev/null
}
function hg_get_branch_name() {
- branch=`hg branch 2>/dev/null`
- if [ $? -eq 0 ]; then
- echo $branch
+ local dir
+ if ! dir=$(hg_root); then
+ return
fi
- unset branch
-}
-function hg_prompt_info {
- _DISPLAY=`hg branch 2>/dev/null`
- if [ $? -eq 0 ]; then
- echo "$ZSH_PROMPT_BASE_COLOR$ZSH_THEME_HG_PROMPT_PREFIX\
-$ZSH_THEME_REPO_NAME_COLOR$_DISPLAY$ZSH_PROMPT_BASE_COLOR$ZSH_PROMPT_BASE_COLOR$(hg_dirty)$ZSH_THEME_HG_PROMPT_SUFFIX$ZSH_PROMPT_BASE_COLOR"
+ if [[ ! -f "$dir/.hg/branch" ]]; then
+ echo default
+ return
fi
- unset _DISPLAY
+
+ echo "$(<"$dir/.hg/branch")"
}
-function hg_dirty_choose {
- hg status -mar 2> /dev/null | command grep -Eq '^\s*[ACDIM!?L]'
- if [ $? -eq 0 ]; then
- if [ $pipestatus[-1] -eq 0 ]; then
- # Grep exits with 0 when "One or more lines were selected", return "dirty".
- echo $1
- return
- fi
+function hg_get_bookmark_name() {
+ local dir
+ if ! dir=$(hg_root); then
+ return
fi
- echo $2
-}
-function hg_dirty {
- hg_dirty_choose $ZSH_THEME_HG_PROMPT_DIRTY $ZSH_THEME_HG_PROMPT_CLEAN
-}
+ if [[ ! -f "$dir/.hg/bookmarks.current" ]]; then
+ return
+ fi
-function hgic() {
- hg incoming "$@" | grep "changeset" | wc -l
+ echo "$(<"$dir/.hg/bookmarks.current")"
}
-function hgoc() {
- hg outgoing "$@" | grep "changeset" | wc -l
+function hg_prompt_info {
+ local dir branch dirty
+ if ! dir=$(hg_root); then
+ return
+ fi
+
+ if [[ ! -f "$dir/.hg/branch" ]]; then
+ branch=default
+ else
+ branch="$(<"$dir/.hg/branch")"
+ fi
+
+ dirty="$(hg_dirty)"
+
+ echo "${ZSH_THEME_HG_PROMPT_PREFIX}${branch:gs/%/%%}${dirty}${ZSH_THEME_HG_PROMPT_SUFFIX}"
}
-function hg_get_bookmark_name() {
- if [ $(in_hg) ]; then
- echo $(hg id -B)
+function hg_dirty {
+ # Do nothing if clean / dirty settings aren't defined
+ if [[ -z "$ZSH_THEME_HG_PROMPT_DIRTY" && -z "$ZSH_THEME_HG_PROMPT_CLEAN" ]]; then
+ return
+ fi
+
+ # Check if there are modifications
+ local hg_status
+ if [[ "$DISABLE_UNTRACKED_FILES_DIRTY" = true ]]; then
+ if ! hg_status="$(hg status -q 2>/dev/null)"; then
+ return
+ fi
+ else
+ if ! hg_status="$(hg status 2>/dev/null)"; then
+ return
+ fi
fi
+
+ # grep exits with 0 when dirty
+ if command grep -Eq '^\s*[ACDIMR!?L].*$' <<< "$hg_status"; then
+ echo $ZSH_THEME_HG_PROMPT_DIRTY
+ return
+ fi
+
+ echo $ZSH_THEME_HG_PROMPT_CLEAN
}