diff options
author | Hugues Hiegel <hugues@hiegel.fr> | 2012-03-08 12:29:44 +0100 |
---|---|---|
committer | Hugues Hiegel <hugues.hiegel@qosmos.com> | 2012-03-08 13:35:08 +0100 |
commit | dc2abe342ec7e0d674ea7c510566aba5a6b37f1e (patch) | |
tree | 0266c374f5e978e6b2992974027a6561fe5d6573 | |
parent | f61008d24c79c105c77682b2f7ce1c40b32744dc (diff) |
Get backs vcs_info.
-rw-r--r-- | 01_Internal.zsh | 195 | ||||
-rw-r--r-- | 10_Environment.zsh | 5 | ||||
-rw-r--r-- | 12_Prompts.zsh | 78 | ||||
-rw-r--r-- | 61_VCS.zsh | 22 |
4 files changed, 51 insertions, 249 deletions
diff --git a/01_Internal.zsh b/01_Internal.zsh index b8bec64..963e731 100644 --- a/01_Internal.zsh +++ b/01_Internal.zsh @@ -95,201 +95,6 @@ __preprint() fi } -__get_gcl_branch () -{ - case $1 in - git) - __get_git_branch - ;; - hg) - __get_hg_branch - ;; - *) - ;; - esac -} - -__get_hg_branch () -{ - HGROOT=$(hg root 2>/dev/null) - if [ ! -z "$HGROOT" ] - then - hg branch - fi -} - -__cleanup_git_branch_name() { sed 's,^tags/,,;s,^remotes/,,;s,\^0$,,' } - -__get_git_branch () -{ - local my_git_branch checkouted_branch="yes" - - if [ -f ".repo/manifests.git/config" ] - then - my_git_branch=$(grep merge .repo/manifests.git/config | awk '{print $3}') - if [ $my_git_branch != "" ] - then - echo " [$my_git_branch]" - return - fi - fi - - # Get git branch only from git managed folders (not ignored subfolders..) - [ "$( ( git ls-files ; git ls-tree HEAD . ) 2>&- | head -n1)" = "" -a \( ! -d .git -o "$(git rev-parse --git-dir 2>&-)" != ".git" \) -a "$(git rev-parse --is-inside-git-dir 2>&-)" != "true" ] && return - - GIT_DIR=$(git rev-parse --git-dir) - - # Get current working GIT branch - my_git_branch="$(git branch 2>&- | grep -E '^\* ' | cut -c3-)" - - if [ "$my_git_branch" != "" ] - then - # If not on a working GIT branch, get the named current commit-ish inside parenthesis - [ "$my_git_branch" = "(no branch)" ] &&\ - checkouted_branch="" && \ - my_git_branch="$(git name-rev --name-only HEAD 2>&- | __cleanup_git_branch_name)" - - # If neither on a named commit-ish, show commit-id - if [ "$my_git_branch" = "undefined" ] - then - my_git_branch="$(git rev-parse --verify HEAD 2>&-)" - fi - else - # Initial commit - if [ -L $GIT_DIR/HEAD -a ! -f $GIT_DIR/HEAD ] - then - my_git_branch="$(basename $GIT_DIR/$(LC_ALL=C stat --printf="%N\n" $GIT_DIR/HEAD | tr '`' "'" | cut -d\' -f4))" - else - my_git_branch="$(basename $GIT_DIR/$(cat $GIT_DIR/HEAD | sed 's/^\([0-9a-f]\{2\}\)\([0-9a-f]\{38\}\)$/objects\/\1\/\2/;s/^ref: //'))" - fi - fi - - my_git_branch="→"$my_git_branch"←" - - # Rebase in progress ? - if [ -d $GIT_DIR/rebase-merge -o -d $GIT_DIR/rebase-apply ] - then - local rebase current last - local REBASE_DIR - - if [ -d $GIT_DIR/rebase-merge ] - then - REBASE_DIR=$GIT_DIR/rebase-merge - else - REBASE_DIR=$GIT_DIR/rebase-apply - fi - - if [ "$REBASE_DIR" = "$GIT_DIR/rebase-merge" ] - then - current=$(< $REBASE_DIR/done wc -l) - last=$(( $current + $(< $REBASE_DIR/git-rebase-todo grep -v "^#\|^[[:blank:]]*$" | wc -l) )) - rebase=$rebase$rebase_in_progress": " - else - current=$(cat $REBASE_DIR/next) - last=$(cat $REBASE_DIR/last) - fi - - my_git_branch="[$current/$last: "$(git name-rev --name-only "$(cat $REBASE_DIR/onto 2>/dev/null)" 2>/dev/null | __cleanup_git_branch_name)".."$(echo $my_git_branch)"]" - [ -r $REBASE_DIR/head-name ] && my_git_branch=$my_git_branch" "$(< $REBASE_DIR/head-name sed 's/^refs\///;s/^heads\///') - else - # No rebase in progress, put '(' ')' if needed - [ ! "$checkouted_branch" ] && my_git_branch="($my_git_branch)" - fi - - echo " "$my_git_branch -} - -__get_guilt_series () -{ - # Guilt - # - guilt="" - - if ( __cmd_exists guilt && guilt status >/dev/null 2>&- ) - then - applied=$(guilt applied 2>/dev/null | wc -l) - unapplied=$(guilt unapplied 2>/dev/null | wc -l) - if [ $(($applied + $unapplied)) -gt 0 ] - then - guilt=" "$c_$_guilt_colors[applied]$_C - while [ $applied -gt 0 ] - do - guilt=$guilt"·" - applied=$(($applied - 1)) - done - guilt=$guilt$c_$_guilt_colors[unapplied]$_C - while [ $unapplied -gt 0 ] - do - guilt=$guilt"·" - unapplied=$(($unapplied - 1)) - done - guilt=$guilt$C_$colors[none]$_C - fi - fi - - echo $guilt -} - -# We *must* have previously checked that -# we obtained a correct GIT branch with -# a call to `__get_git_branch` -__get_git_status () -{ - local my_git_status cached changed managment_folder - - if [ ! -z "$DO_NOT_CHECK_GIT_STATUS" ] - then - return - fi - - my_git_status=$_gcl_colors[uptodate]; - - if [ -f ".repo/manifests.git/config" ] - then - echo $my_git_status - return - fi - - if [ "$(git rev-parse --is-inside-git-dir)" = "true" -o "$(git config --get core.bare)" = "true" ] ; then - echo "$_gcl_colors[gitdir]" - return - fi - - if [ "$(git diff --cached 2>&- | grep '^diff ' | head -n1 )" != "" ] ; then - cached="yes" - fi - if [ "$(git ls-files -m 2>&- | head -n1)" != "" ] ; then - changed="yes" - fi - - GIT_DIR=$(git rev-parse --git-dir 2>/dev/null) - - if [ "$cached" != "" -a "$changed" != "" ] - then - my_git_status="$_gcl_colors[mixed]" - elif [ "$cached" != "" ] - then - my_git_status="$_gcl_colors[cached]" - elif [ "$changed" != "" ] - then - my_git_status="$_gcl_colors[changed]" - elif [ "$(git cat-file -t HEAD 2>/dev/null)" != "commit" ] - then - if [ ! -z "$(git ls-files)" ] ; then - my_git_status="$_gcl_colors[cached]" - else - my_git_status="$_gcl_colors[init]" - fi - fi - - if [ $(git ls-files --unmerged | wc -l) -gt 0 ] - then - my_git_status="${_gcl_colors[merging]:+$_gcl_colors[merging];}$my_git_status" - fi - - echo $my_git_status -} - __zsh_status () { if [ $ZDOTDIR != "" ] diff --git a/10_Environment.zsh b/10_Environment.zsh index 66774ce..66e5815 100644 --- a/10_Environment.zsh +++ b/10_Environment.zsh @@ -21,9 +21,10 @@ export SHELL=`which zsh` ## Colors autoload colors && colors -c_='['$color[none]";" +c_='[' _c=m -C_="%{$c_" +_C_="%{$c_" +C_=$_C_$color[none]";" _C="$_c%}" unset has_termcaps diff --git a/12_Prompts.zsh b/12_Prompts.zsh index f927813..857e042 100644 --- a/12_Prompts.zsh +++ b/12_Prompts.zsh @@ -238,49 +238,20 @@ __update_prompt_elements() ## Second line of prompt : don't let the path garbage the entire line ## - # get cvs tag + # get VCS status # - CVSTAG="" - [ "$DEBUG" = "yes" ] && echo -n " CVS status..." - if [ -d CVS ] - then - CVSTAG=$(test -e CVS/Tag && cat CVS/Tag || basename $(cat CVS/Root 2>&- || echo "HEAD") ) - CVSTAG=${CVSTAG:+ $C_$_gcl_colors[uptodate]$_C$CVSTAG} - fi - - # get svn status - # - [ "$DEBUG" = "yes" ] && echo -n " SVN status..." - SVNREV=$(LC_ALL=C svn info 2>&- $PWD | awk '/^Revision: / {print $2}') - SVNREVSIZE=${#${SVNREV:+ r$SVNREV}} - if [ "$SVNREV" != "" ] - then - if [ ! -z "$CHECK_SVN_STATUS" ] - then - SVNSTATUS="$(svn diff 2>&-)" - SVNSTATUS=${${SVNSTATUS:+$_gcl_colors[changed]}:-$_gcl_colors[uptodate]} - fi - fi - SVNREV=${SVNREV:+$C_$_prompt_colors[doubledot]$_C $C_$SVNSTATUS$_C"r"$SVNREV} - [ "$DEBUG" = "yes" ] && echo - - # get hg status - [ "$DEBUG" = "yes" ] && echo -n " HG status..." - HGBRANCH=$(__get_gcl_branch hg) - [ ! -z "$HGBRANCH" ] && HGBRANCH=" "$HGBRANCH - [ "$DEBUG" = "yes" ] && echo - - # get git status - # - [ "$DEBUG" = "yes" ] && echo -n " GIT status..." - GITBRANCH=$(__get_gcl_branch git) - GITBRANCHSIZE=${#GITBRANCH} - [ $GITBRANCHSIZE -gt 0 ] && GITBRANCHSIZE=$(($GITBRANCHSIZE)) + [ "$DEBUG" = "yes" ] && echo -n " Update VCS info..." + vcs_info 2>&- + VCSROOT=${vcs_info_msg_1_} + VCSROOT=${VCSROOT/$HOME/\~} + VCSSUBDIR=${vcs_info_msg_2_} + VCSBRANCH=${vcs_info_msg_0_} + VCSBRANCHSIZE=0 #TBD [ "$DEBUG" = "yes" ] && echo [ "$DEBUG" = "yes" ] && echo -n " Path..." MY_PATH="%(!.%d.%~)" - PATHSIZE=$(print -Pn $MY_PATH) + CURDIR=$(print -Pn $MY_PATH) PATHSIZE=${#PATHSIZE} [ "$DEBUG" = "yes" ] && echo [ "$DEBUG" = "yes" ] && echo -n " Resize path / gitbranch..." @@ -290,34 +261,35 @@ __update_prompt_elements() #minimalpathsize=${#minimalpathsize} minimalpathsize=10 minimalgitsize=10 # git-abbrev-commit-ish... - if [ $GITBRANCHSIZE -gt 0 ] + if [ $VCSBRANCHSIZE -gt 0 ] then - if [ $spaceleft -lt $(( $PATHSIZE + $GITBRANCHSIZE )) ] + if [ $spaceleft -lt $(( $PATHSIZE )) ] then - CHUNKABLE=${${GITBRANCH/*→/}/←*/} + CHUNKABLE=${${VCSBRANCH/*→/}/←*/} # reduce the git-branch until it is shrinked to $minimalgitsize characters max. - if [ $GITBRANCHSIZE -gt $minimalgitsize ] + if [ $VCSBRANCHSIZE -gt $minimalgitsize ] then - GITBRANCHCHUNK=$(( $GITBRANCHSIZE - ($spaceleft - $PATHSIZE) )) - [ $((${#CHUNKABLE} - $GITBRANCHCHUNK)) -lt $minimalgitsize ] && GITBRANCHCHUNK=$((${#CHUNKABLE} - $minimalgitsize)) + VCSBRANCHCHUNK=$(( $VCSBRANCHSIZE - ($spaceleft - $PATHSIZE) )) + [ $((${#CHUNKABLE} - $VCSBRANCHCHUNK)) -lt $minimalgitsize ] && VCSBRANCHCHUNK=$((${#CHUNKABLE} - $minimalgitsize)) fi - CHUNKABLE=`print -Pn "%"$(( ${#CHUNKABLE} - $GITBRANCHCHUNK ))">¬>"${CHUNKABLE%\~*}` + CHUNKABLE=`print -Pn "%"$(( ${#CHUNKABLE} - $VCSBRANCHCHUNK ))">¬>"${CHUNKABLE%\~*}` - GITBRANCH=${GITBRANCH/→*←/→$CHUNKABLE←} + VCSBRANCH=${VCSBRANCH/→*←/→$CHUNKABLE←} fi fi # then we reduce the path until it reaches the last path element, - spaceleft=$(($spaceleft - $GITBRANCHSIZE)) + spaceleft=$(($spaceleft - $VCSBRANCHSIZE)) [ $spaceleft -lt $minimalpathsize ] && spaceleft=$minimalpathsize - if [ -n "$GITBRANCH" ] + if [ -n "$VCSBRANCH" ] then - GITBRANCH=$C_$_prompt_colors[soft_generic]$_C${${GITBRANCH/→/$C_"$(__get_git_status)"$_C}/←/$C_$_prompt_colors[soft_generic]$_C}"$(__get_guilt_series)$C_$color[none]$_C" + #VCSBRANCH=$C_$_prompt_colors[soft_generic]$_C${${VCSBRANCH/→/$C_"30"$_C}/←/$C_$_prompt_colors[soft_generic]$_C}"$C_$color[none]$_C" fi - CURDIR="$C_$_prompt_colors[path]$_C%`echo $spaceleft`<..<"$MY_PATH"%<<$C_$color[none]$_C" - [ "$DEBUG" = "yes" ] && echo - VCSBRANCH=$CVSTAG$SVNREV$GITBRANCH$HGBRANCH + [ -n "$VCSROOT" ] && CURDIR=${CURDIR/$VCSROOT*/$VCSROOT} + CURDIR="$C_$_prompt_colors[path]$_C%`echo $spaceleft`<..<"$CURDIR"%<<$C_$color[none]$_C" + [ "$VCSSUBDIR" != "." ] && CURDIR+=$C_$color[cyan]";"$color[bold]$_C"/"$C_$_prompt_colors[path]$_C$VCSSUBDIR + [ "$DEBUG" = "yes" ] && echo } __redefine_prompt () @@ -337,6 +309,8 @@ __yeah_prompt () PS1=$C_$prompt_color[default]$_C$C_$_prompt_colors[user]$_C"%n"$C_$_prompt_colors[arob]$_C"@"$C_$_prompt_colors[host]$_C"%m "$CURDIR" "$C_$_prompt_colors[dies]$_C">"$C_$_prompt_colors[cmd]$_C" " } +setopt PROMPT_SUBST + __two_lines_prompt () { __cmd_exists __compilation && __compilation diff --git a/61_VCS.zsh b/61_VCS.zsh new file mode 100644 index 0000000..6122083 --- /dev/null +++ b/61_VCS.zsh @@ -0,0 +1,22 @@ +## +## Part of configuration files for Zsh 4 +## by Hugues Hiegel <hugues@hiegel.fr> +## +## NO WARRANTY PROVIDED, USE AT YOUR OWN RISKS +## +## You are encouraged to use, modify, and redistribute +## these files with or without this notice. +## + +# zshall + +_reset_=$C_$_prompt_colors[soft_generic]$_C + +autoload -Uz vcs_info +zstyle ':vcs_info:*' formats "$_reset_ [%c%u%b$_reset_]" "%R" "%S" +zstyle ':vcs_info:*' actionformats "$_reset_ [(%B%a$_reset_) %c%u%b$_reset_]$_reset_" "%R" "%S" +zstyle ':vcs_info:*' stagedstr "$C_$color[yellow];$color[bold]$_C" +zstyle ':vcs_info:*' unstagedstr "$_C_$color[green]$_C" +zstyle ':vcs_info:*' check-for-changes true +zstyle ':vcs_info:*' get-revision false + |