git prompt
Following Martin's post on the subject, since I created my prompt, I've updated quite a lot.
It only showed the branch before, now it does so even when I'm on a detached head or something, and also shows when I'm in the middle of a rebase or a merge. You can see the zsh-fu for this. For example, when I'm in the middle of a rebase on my paid work repository, it looks like:
┌─(10:34)──<~/dev/mmsx master <rebase -i>>── └[artemis] (~/dev/mmsx/Build/)
With nice colors I cannot really show without a screenshot that I'm too lazy to do :) This is a recent addition that I shamelessly took from the contrib bash prompt in git-core package. And to be frank it's really needed, because it's cheap tests (basically looking for magic file names) and that it can tell you if you forgot to end a rebase or a merge, which can happen if you have been disturbed in the middle of it by a colleague for example.
I liked the '*' idea from Martin to show if the tree is dirty. Sadly it's not an option. Martin, to do that, you can do:
unclean= git diff-files --quiet && git diff-index --cached --quiet HEAD -- || unclean='*'
But this is a very expensive operation. On the glibc git repository, it takes seconds with cold cache (and it's not very surprising because it basically has to stat(3) a lot of stuff). And not having a shell for seconds is a bit extreme.
PS: I know my prompt only supports git, but:
- I barely care about other VCSes as I only use git and sometimes svn for packaging ;
- when I have to use svn it's for cheap stuff where I don't really need the prompt help.
