まえおき:
zsh内(hg/git共通)。以下を .zshrc 内で定義し、「$(print_directory_info $(pwd))」の実行結果を$PROMPT辺りに追加すればok
function print_directory_info() { local absdir=$1 if [[ -d $absdir/.git ]] then # Git if [[ -e $absdir/.git/unpushed ]] then echo -n '*UNPUSHED* ' fi git branch --no-color 2>/dev/null \ | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/' elif [[ -d $absdir/.hg ]] then # Hg if [[ -e $absdir/.hg/unpushed ]] then echo -n '*UNPUSHED* ' fi cat $absdir/.hg/branch elif [[ -d $absdir/_darcs ]] then # Darcs basename $absdir elif [[ -r $absdir/CVS/Repository ]] then # CVS cat $absdir/CVS/Repository \ | sed -e 's!\([^/]*\).*!\1!' else # Unknown. if [[ $absdir = "/" ]] then # This is the root directory so exit from the recursion. echo else # Recurse to the parent dir. print_directory_info $(dirname $absdir) fi fi }
hg用。以下を ~/.hgrc に追加するだけでいい。単純
[hooks] commit = touch `hg root`/.hg/unpushed post-push = rm -f `hg root`/.hg/unpushed
gitもhgみたくhookでできるかと思いきや、hookは大元サーバでの用途のものしかなく、commit/push時に手元のリポジトリを操作する為のhookはなかったので、自前でラッパーを書く羽目に
#!/bin/sh # $Id$ if [ $# -lt 1 ]; then git elif [ $1 = "commit" ]; then git "$@" && touch `git rev-parse --git-dir`/unpushed elif [ $1 = "push" ]; then git "$@" && rm -f `git rev-parse --git-dir`/unpushed else git "$@" fi # vim:set ft=sh sw=2 ts=2 et:
setopt complete_aliases # 補完時にalias展開を行わない alias git=gitwrap
ていうか、zsh/hg/gitはこの未push検出機能を標準で備えるべき。
他の人は困ってないの?
■コメント