oh-my-zsh/plugins/mercurial
Creak 3ee22a4ebc Optimize in_hg and hg_get_branch_name
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).
2016-11-06 12:30:31 -05:00
..
mercurial.plugin.zsh Optimize in_hg and hg_get_branch_name 2016-11-06 12:30:31 -05:00
README.md Mercurial plugin: revise README 2015-11-16 16:57:42 -05:00

Mercurial plugin

Usage

Update .zshrc:

  1. Add name to the list of plugins, e.g. plugins=(... mercurial ...) (that is pretty obvious).

  2. 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%}'
    
  3. 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