feat(branch): show mercurial bookmarks if used (#9948)

Co-authored-by: Marc Cornellà <hello@mcornella.com>
This commit is contained in:
whoami 2021-12-01 19:49:42 +03:00 committed by GitHub
parent c66fc00401
commit 46e63340ee
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 56 additions and 36 deletions

View file

@ -1,31 +1,47 @@
# Branch # Branch plugin
Displays the current Git or Mercurial branch fast. This plugin displays the current Git or Mercurial branch, fast. If in a Mercurial repository,
also display the current bookmark, if present.
To use it, add `branch` to the plugins array in your zshrc file:
```zsh
plugins=(... branch)
```
## Speed test ## Speed test
### Mercurial - `hg branch`:
```shell ```console
$ time hg branch $ time hg branch
0.11s user 0.14s system 70% cpu 0.355 total 0.11s user 0.14s system 70% cpu 0.355 total
``` ```
### Branch plugin - branch plugin:
```shell ```console
$ time zsh /tmp/branch_prompt_info_test.zsh $ time zsh /tmp/branch_prompt_info_test.zsh
0.00s user 0.01s system 78% cpu 0.014 total 0.00s user 0.01s system 78% cpu 0.014 total
``` ```
## Usage ## Usage
Edit your theme file (eg.: `~/.oh-my-zsh/theme/robbyrussell.zsh-theme`) Copy your theme to `$ZSH_CUSTOM/themes/` and modify it to add `$(branch_prompt_info)` in your prompt.
adding `$(branch_prompt_info)` in your prompt like this: This example is for the `robbyrussell` theme:
```diff ```diff
- PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}' diff --git a/themes/robbyrussell.zsh-theme b/themes/robbyrussell.zsh-theme
+ PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)$(branch_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}' index 2fd5f2cd..9d89a464 100644
--- a/themes/robbyrussell.zsh-theme
+++ b/themes/robbyrussell.zsh-theme
@@ -1,5 +1,5 @@
PROMPT="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
-PROMPT+=' %{$fg[cyan]%}%c%{$reset_color%} $(git_prompt_info)'
+PROMPT+=' %{$fg[cyan]%}%c%{$reset_color%} $(branch_prompt_info)'
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}git:(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
``` ```
## Maintainer ## Maintainer

View file

@ -3,29 +3,33 @@
# Oct 2, 2015 # Oct 2, 2015
function branch_prompt_info() { function branch_prompt_info() {
# Defines path as current directory # Start checking in current working directory
local current_dir=$PWD local branch="" dir="$PWD"
# While current path is not root path while [[ "$dir" != '/' ]]; do
while [[ $current_dir != '/' ]] # Found .git directory
do if [[ -d "${dir}/.git" ]]; then
# Git repository branch="${"$(<"${dir}/.git/HEAD")"##*/}"
if [[ -d "${current_dir}/.git" ]] echo '±' "${branch:gs/%/%%}"
then return
echo '±' ${"$(<"$current_dir/.git/HEAD")"##*/}
return;
fi fi
# Mercurial repository
if [[ -d "${current_dir}/.hg" ]] # Found .hg directory
then if [[ -d "${dir}/.hg" ]]; then
if [[ -f "$current_dir/.hg/branch" ]] if [[ -f "${dir}/.hg/branch" ]]; then
then branch="$(<"${dir}/.hg/branch")"
echo '☿' $(<"$current_dir/.hg/branch")
else else
echo '☿ default' branch="default"
fi fi
return;
if [[ -f "${dir}/.hg/bookmarks.current" ]]; then
branch="${branch}/$(<"${dir}/.hg/bookmarks.current")"
fi fi
# Defines path as parent directory and keeps looking for :)
current_dir="${current_dir:h}" echo '☿' "${branch:gs/%/%%}"
return
fi
# Check parent directory
dir="${dir:h}"
done done
} }