3ee22a4ebc
When not in the repo root dir `in_hg` used `hg summary` which is terribly slow on big repositories, and `hg_get_branch_name` called `hg branch` which is also pretty slow as well. Based on the [branch](https://github.com/robbyrussell/oh-my-zsh/tree/master/plugins/branch) plugin, I created the function `hg_get_dir` that fetch the `.hg` directory if it exists, going up in the directory tree. From there, we know if we're in an HG repository if `in_hg` returns a non empty string, and we can simply get the branch name from the content of the `.hg/branch` file. ### Benchmarks Based on 10 calls to `hg_get_branch_name` in subdir (so that the old `hg summary` is called), here are the average times: * Before: `/tmp/test.zsh 0.08s user 0.04s system 96% cpu 0.133 total` * After: `/tmp/test.zsh 0.00s user 0.00s system 71% cpu 0.008 total` It's faster and it uses less CPU! The other changes after that are purely esthetic (fit in 80 columns and indentation fix). |
||
---|---|---|
.. | ||
mercurial.plugin.zsh | ||
README.md |
Mercurial plugin
Usage
Update .zshrc:
-
Add name to the list of plugins, e.g.
plugins=(... mercurial ...)
(that is pretty obvious). -
Switch to a theme which uses
hg_prompt_info
.Or, customize the
$PROMPT
variable of your current theme to contain current folder mercurial repo info. This can be done by putting a custom version of the theme in$ZSH_CUSTOM
or by changing$PROMPT
in.zshrc
after loading the theme.The
robbyrussell
theme is used by default, so you need to modify$PROMPT
var by adding$(hg_prompt_info)
after$(git_prompt_info)
, so it looks like this:PROMPT='${ret_status}%{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)$(hg_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'
-
Initialize additional vars used in plugin. So in short put next in .zshrc:
ZSH_THEME_HG_PROMPT_PREFIX="%{$fg_bold[magenta]%}hg:(%{$fg[red]%}" ZSH_THEME_HG_PROMPT_SUFFIX="%{$reset_color%}" ZSH_THEME_HG_PROMPT_DIRTY="%{$fg[magenta]%}) %{$fg[yellow]%}✗%{$reset_color%}" ZSH_THEME_HG_PROMPT_CLEAN="%{$fg[magenta]%})"
What's inside?
Adds handy aliases:
general
hgc
-hg commit
hgb
-hg branch
hgba
-hg branches
hgbk
-hg bookmarks
hgco
-hg checkout
hgd
-hg diff
hged
-hg diffmerge
pull and update
hgi
-hg incoming
hgl
-hg pull -u
hglr
-hg pull --rebase
hgo
-hg outgoing
hgp
-hg push
hgs
-hg status
hgsl
-hg log --limit 20 --template "{node|short} | {date|isodatesec} | {author|user}: {desc|strip|firstline}\n"
this is the 'git commit --amend' equivalent
hgca
-hg qimport -r tip ; hg qrefresh -e ; hg qfinish tip
list unresolved files (since hg does not list unmerged files in the status command)
hgun
-hg resolve --list
Displays repo branch and directory status in prompt
This is the same as git plugin does.
Note: Additional changes to .zshrc, or using a theme designed to use hg_prompt_info
, are required in order for this to work.
Mantainers
ptrv - original creator
oshybystyi - created this README and know how most of code works