_hg_ps1()
March 31, 2009 at 09:23 PM | categories: mercurial, bash | View CommentsIn honor of the decision
to move Python development to Mercurial, I
decided to write something helpful. I've found __git_ps1() to be incredibly
useful, so, here's my take on _hg_ps1():
_hg_root() { local basedir=$(pwd) while [ '/' != "${basedir}" ]; do if [ -d "${basedir}/.hg" ]; then break; fi basedir="$(readlink -f "${basedir}/..")" done [ '/' == "${basedir}" ] || echo -n "${basedir}" } _hg_ps1() { local g=$(_hg_root) if [ -n "${g}" ]; then local branch branch=$(hg branch) if [ -f "${g}/.hg/bookmarks.current" ]; then branch="$(< "${g}/.hg/bookmarks.current"):${branch}" fi if [ -n "${1-}" ]; then printf "$1" "${branch}" else printf " (%s)" "${branch}" fi fi }
Yes, I know that the hg root command does the same thing as my _hg_root(),
but it felt slow running mercurial before printing each prompt. The only
thing that's missing is showing when merges are in progress. I'll try to add
that the next time I need to do a manual merge.
Update: It seems that some of my repositories don't have a .hg/branch file
so I'm calling hg branch for that info. Also, the readlink line in
_hg_root() did not properly handle spaces.
