From dcf12ba8f3b31eead602c530a9fbfd5579c64630 Mon Sep 17 00:00:00 2001 From: Nicolas Cavigneaux Date: Fri, 16 Jan 2015 15:59:52 +0100 Subject: fix(mercurial): show author name in `hgsl` alias log alias (#3500) Closes #3500 --- plugins/mercurial/mercurial.plugin.zsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'plugins/mercurial/mercurial.plugin.zsh') diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh index e098664c0..68a3d9a5c 100644 --- a/plugins/mercurial/mercurial.plugin.zsh +++ b/plugins/mercurial/mercurial.plugin.zsh @@ -10,7 +10,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' -- cgit v1.2.3-70-g09d2 From e52584c90195d0cc0979efec88b94271a31fe494 Mon Sep 17 00:00:00 2001 From: anatolyrr Date: Sun, 16 Jun 2019 16:50:11 +0300 Subject: perf(mercurial): improve performance of `hg_prompt_info` (#7929) Replaced two different calls of hg with one `hg --id --branch` for retrieving information whether we're in a repo (will be empty if not), whether the repo is dirty (revision id will contain "+" if there are uncommitted changed), and the branch name. Closes #6197 Closes #7929 --- plugins/mercurial/mercurial.plugin.zsh | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-) (limited to 'plugins/mercurial/mercurial.plugin.zsh') diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh index 68a3d9a5c..f110507fd 100644 --- a/plugins/mercurial/mercurial.plugin.zsh +++ b/plugins/mercurial/mercurial.plugin.zsh @@ -35,12 +35,29 @@ function hg_get_branch_name() { } 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" + local info rev branch dirty + + if ! info=$(hg id --id --branch 2>/dev/null); then + return + fi + + rev="${info[(w)1]}" + branch="${${info[(w)2]}:gs/%/%%}" + + if [[ "$rev" = *+ ]]; then + dirty="$ZSH_THEME_HG_PROMPT_DIRTY" + else + dirty="$ZSH_THEME_HG_PROMPT_CLEAN" fi - unset _DISPLAY + + echo "${ZSH_PROMPT_BASE_COLOR}\ +${ZSH_THEME_HG_PROMPT_PREFIX}\ +${ZSH_THEME_REPO_NAME_COLOR}\ +${branch}\ +${ZSH_PROMPT_BASE_COLOR}\ +${dirty}\ +${ZSH_THEME_HG_PROMPT_SUFFIX}\ +${ZSH_PROMPT_BASE_COLOR}" } function hg_dirty_choose { -- cgit v1.2.3-70-g09d2 From 24974a135c0bdd4c2d824e4836177ae292f8f56a Mon Sep 17 00:00:00 2001 From: Romain Failliot Date: Sun, 18 Feb 2018 19:19:03 -0500 Subject: feat(mercurial)!: use `PREFIX` and `SUFFIX` settings in `hg_prompt_info` (#6631) BREAKING CHANGE: the `hg_prompt_info` function now uses `ZSH_THEME_HG_PROMPT_PREFIX` and `ZSH_THEME_HG_PROMPT_SUFFIX` variables when displaying branch information, similar to the `git_prompt_info` function. Closes #6631 --- plugins/mercurial/mercurial.plugin.zsh | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) (limited to 'plugins/mercurial/mercurial.plugin.zsh') diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh index f110507fd..111464af6 100644 --- a/plugins/mercurial/mercurial.plugin.zsh +++ b/plugins/mercurial/mercurial.plugin.zsh @@ -50,14 +50,7 @@ function hg_prompt_info { dirty="$ZSH_THEME_HG_PROMPT_CLEAN" fi - echo "${ZSH_PROMPT_BASE_COLOR}\ -${ZSH_THEME_HG_PROMPT_PREFIX}\ -${ZSH_THEME_REPO_NAME_COLOR}\ -${branch}\ -${ZSH_PROMPT_BASE_COLOR}\ -${dirty}\ -${ZSH_THEME_HG_PROMPT_SUFFIX}\ -${ZSH_PROMPT_BASE_COLOR}" + echo "${ZSH_THEME_HG_PROMPT_PREFIX}${branch}${dirty}${ZSH_THEME_HG_PROMPT_SUFFIX}" } function hg_dirty_choose { -- cgit v1.2.3-70-g09d2 From d058801a18270800c906d92dd41e275f4da24397 Mon Sep 17 00:00:00 2001 From: Pandu POLUAN Date: Mon, 11 May 2020 14:55:20 +0700 Subject: feat(mercurial): add `hgci` alias for interactive commit (#8912) Closes #8912 --- plugins/mercurial/README.md | 1 + plugins/mercurial/mercurial.plugin.zsh | 1 + 2 files changed, 2 insertions(+) (limited to 'plugins/mercurial/mercurial.plugin.zsh') diff --git a/plugins/mercurial/README.md b/plugins/mercurial/README.md index a362de4ce..19d4a17b1 100644 --- a/plugins/mercurial/README.md +++ b/plugins/mercurial/README.md @@ -16,6 +16,7 @@ plugins=(... mercurial) | `hga` | `hg add` | | `hgc` | `hg commit` | | `hgca` | `hg commit --amend` | +| `hgci` | `hg commit --interactive` | | `hgb` | `hg branch` | | `hgba` | `hg branches` | | `hgbk` | `hg bookmarks` | diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh index 111464af6..8b50da9d8 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' -- cgit v1.2.3-70-g09d2 From 4119f53004de987215e4ae2ce49d0f818ad58c63 Mon Sep 17 00:00:00 2001 From: Marc Cornellà Date: Thu, 2 Dec 2021 11:12:18 +0100 Subject: perf(mercurial): optimize utility functions --- plugins/mercurial/mercurial.plugin.zsh | 101 ++++++++++++++++++++------------- themes/minimal.zsh-theme | 32 ++++++----- 2 files changed, 78 insertions(+), 55 deletions(-) (limited to 'plugins/mercurial/mercurial.plugin.zsh') diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh index 8b50da9d8..6e72f0b1e 100644 --- a/plugins/mercurial/mercurial.plugin.zsh +++ b/plugins/mercurial/mercurial.plugin.zsh @@ -21,65 +21,86 @@ 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 { - local info rev branch dirty - - if ! info=$(hg id --id --branch 2>/dev/null); then + if [[ ! -f "$dir/.hg/branch" ]]; then + echo default return fi - rev="${info[(w)1]}" - branch="${${info[(w)2]}:gs/%/%%}" + echo "$(<"$dir/.hg/branch")" +} - if [[ "$rev" = *+ ]]; then - dirty="$ZSH_THEME_HG_PROMPT_DIRTY" - else - dirty="$ZSH_THEME_HG_PROMPT_CLEAN" +function hg_get_bookmark_name() { + local dir + if ! dir=$(hg_root); then + return fi - echo "${ZSH_THEME_HG_PROMPT_PREFIX}${branch}${dirty}${ZSH_THEME_HG_PROMPT_SUFFIX}" + if [[ ! -f "$dir/.hg/bookmarks.current" ]]; then + return + fi + + echo "$(<"$dir/.hg/bookmarks.current")" } -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_prompt_info { + local dir branch dirty + 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/branch" ]]; then + branch=default + else + branch="$(<"$dir/.hg/branch")" + fi -function hgic() { - hg incoming "$@" | grep "changeset" | wc -l -} + dirty="$(hg_dirty)" -function hgoc() { - hg outgoing "$@" | grep "changeset" | wc -l + 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 { + local hg_status + if ! hg_status="$(hg status -mar 2>/dev/null)"; then + return fi + + # grep exits with 0 when dirty + if command grep -Eq '^\s*[ACDIM!?L]' <<< "$hg_status"; then + echo $ZSH_THEME_HG_PROMPT_DIRTY + return + fi + + echo $ZSH_THEME_HG_PROMPT_CLEAN } diff --git a/themes/minimal.zsh-theme b/themes/minimal.zsh-theme index e05df9c9b..588ab6982 100644 --- a/themes/minimal.zsh-theme +++ b/themes/minimal.zsh-theme @@ -2,23 +2,25 @@ ZSH_THEME_GIT_PROMPT_PREFIX="%{$reset_color%}%{$fg[white]%}[" ZSH_THEME_GIT_PROMPT_SUFFIX="" ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[red]%}●%{$fg[white]%}]%{$reset_color%} " ZSH_THEME_GIT_PROMPT_CLEAN="]%{$reset_color%} " -ZSH_THEME_SVN_PROMPT_PREFIX=$ZSH_THEME_GIT_PROMPT_PREFIX -ZSH_THEME_SVN_PROMPT_SUFFIX=$ZSH_THEME_GIT_PROMPT_SUFFIX -ZSH_THEME_SVN_PROMPT_DIRTY=$ZSH_THEME_GIT_PROMPT_DIRTY -ZSH_THEME_SVN_PROMPT_CLEAN=$ZSH_THEME_GIT_PROMPT_CLEAN -ZSH_THEME_HG_PROMPT_PREFIX=$ZSH_THEME_GIT_PROMPT_PREFIX -ZSH_THEME_HG_PROMPT_SUFFIX=$ZSH_THEME_GIT_PROMPT_SUFFIX -ZSH_THEME_HG_PROMPT_DIRTY=$ZSH_THEME_GIT_PROMPT_DIRTY -ZSH_THEME_HG_PROMPT_CLEAN=$ZSH_THEME_GIT_PROMPT_CLEAN + +ZSH_THEME_SVN_PROMPT_PREFIX="$ZSH_THEME_GIT_PROMPT_PREFIX" +ZSH_THEME_SVN_PROMPT_SUFFIX="$ZSH_THEME_GIT_PROMPT_SUFFIX" +ZSH_THEME_SVN_PROMPT_DIRTY="$ZSH_THEME_GIT_PROMPT_DIRTY" +ZSH_THEME_SVN_PROMPT_CLEAN="$ZSH_THEME_GIT_PROMPT_CLEAN" + +ZSH_THEME_HG_PROMPT_PREFIX="$ZSH_THEME_GIT_PROMPT_PREFIX" +ZSH_THEME_HG_PROMPT_SUFFIX="$ZSH_THEME_GIT_PROMPT_SUFFIX" +ZSH_THEME_HG_PROMPT_DIRTY="$ZSH_THEME_GIT_PROMPT_DIRTY" +ZSH_THEME_HG_PROMPT_CLEAN="$ZSH_THEME_GIT_PROMPT_CLEAN" vcs_status() { - if [[ $(whence in_svn) != "" ]] && in_svn; then - svn_prompt_info - elif [[ $(whence in_hg) != "" ]] && in_hg; then - hg_prompt_info - else - git_prompt_info - fi + if (( ${+functions[in_svn]} )) && in_svn; then + svn_prompt_info + elif (( ${+functions[in_hg]} )) && in_hg; then + hg_prompt_info + else + git_prompt_info + fi } PROMPT='%2~ $(vcs_status)»%b ' -- cgit v1.2.3-70-g09d2 From 1c07001896de18cd0a742d7892b948ba7bab10c7 Mon Sep 17 00:00:00 2001 From: David Sutherland Date: Thu, 17 Oct 2013 16:48:58 +1000 Subject: fix(mercurial): correctly check for untracked files in `hg_dirty` (#2177) Closes #2177 Closes #6197 Co-authored-by: Henrik Ravn --- plugins/mercurial/mercurial.plugin.zsh | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) (limited to 'plugins/mercurial/mercurial.plugin.zsh') diff --git a/plugins/mercurial/mercurial.plugin.zsh b/plugins/mercurial/mercurial.plugin.zsh index 6e72f0b1e..9b85d02f6 100644 --- a/plugins/mercurial/mercurial.plugin.zsh +++ b/plugins/mercurial/mercurial.plugin.zsh @@ -91,13 +91,25 @@ function hg_prompt_info { } function hg_dirty { - local hg_status - if ! hg_status="$(hg status -mar 2>/dev/null)"; then + # 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*[ACDIM!?L]' <<< "$hg_status"; then + if command grep -Eq '^\s*[ACDIMR!?L].*$' <<< "$hg_status"; then echo $ZSH_THEME_HG_PROMPT_DIRTY return fi -- cgit v1.2.3-70-g09d2