From 03d43c46b82255db86ef81d3002ef29126ba6242 Mon Sep 17 00:00:00 2001 From: Hugues Hiegel Date: Wed, 7 Mar 2012 19:02:59 +0100 Subject: Revert "[Prompts] uses vcs_info" This reverts commit 44565988a8345b19f39cd2a4619cd2c0fcecf9a9. --- 01_Internal.zsh | 195 ++++++++++++++++++++++++++++++++++++++++++++++++++ 10_Environment.zsh | 5 +- 12_Prompts.zsh | 47 ++++++------ 61_VCS.zsh | 22 ------ net:foret/Prompts.zsh | 2 +- 5 files changed, 223 insertions(+), 48 deletions(-) delete mode 100644 61_VCS.zsh diff --git a/01_Internal.zsh b/01_Internal.zsh index 963e731..b8bec64 100644 --- a/01_Internal.zsh +++ b/01_Internal.zsh @@ -95,6 +95,201 @@ __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 66e5815..66774ce 100644 --- a/10_Environment.zsh +++ b/10_Environment.zsh @@ -21,10 +21,9 @@ export SHELL=`which zsh` ## Colors autoload colors && colors -c_='[' +c_='['$color[none]";" _c=m -_C_="%{$c_" -C_=$_C_$color[none]";" +C_="%{$c_" _C="$_c%}" unset has_termcaps diff --git a/12_Prompts.zsh b/12_Prompts.zsh index 49ed318..ba8c7fb 100644 --- a/12_Prompts.zsh +++ b/12_Prompts.zsh @@ -265,19 +265,23 @@ __update_prompt_elements() SVNREV=${SVNREV:+$C_$_prompt_colors[doubledot]$_C $C_$SVNSTATUS$_C"r"$SVNREV} [ "$DEBUG" = "yes" ] && echo - # get VCS status + # 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 " Update VCS info..." - vcs_info 2>&- - VCSROOT=${vcs_info_msg_0_/ */} - VCSBRANCH=${vcs_info_msg_0_/$VCSROOT /} - VCSROOT=${VCSROOT/$HOME/\~} - VCSBRANCHSIZE=0 #TBD + [ "$DEBUG" = "yes" ] && echo -n " GIT status..." + GITBRANCH=$(__get_gcl_branch git) + GITBRANCHSIZE=${#GITBRANCH} + [ $GITBRANCHSIZE -gt 0 ] && GITBRANCHSIZE=$(($GITBRANCHSIZE)) [ "$DEBUG" = "yes" ] && echo [ "$DEBUG" = "yes" ] && echo -n " Path..." MY_PATH="%(!.%d.%~)" - CURDIR=$(print -Pn $MY_PATH) + PATHSIZE=$(print -Pn $MY_PATH) PATHSIZE=${#PATHSIZE} [ "$DEBUG" = "yes" ] && echo [ "$DEBUG" = "yes" ] && echo -n " Resize path / gitbranch..." @@ -287,32 +291,31 @@ __update_prompt_elements() #minimalpathsize=${#minimalpathsize} minimalpathsize=10 minimalgitsize=10 # git-abbrev-commit-ish... - if [ $VCSBRANCHSIZE -gt 0 ] + if [ $GITBRANCHSIZE -gt 0 ] then - if [ $spaceleft -lt $(( $PATHSIZE )) ] + if [ $spaceleft -lt $(( $PATHSIZE + $GITBRANCHSIZE )) ] then - CHUNKABLE=${${VCSBRANCH/*→/}/←*/} + CHUNKABLE=${${GITBRANCH/*→/}/←*/} # reduce the git-branch until it is shrinked to $minimalgitsize characters max. - if [ $VCSBRANCHSIZE -gt $minimalgitsize ] + if [ $GITBRANCHSIZE -gt $minimalgitsize ] then - VCSBRANCHCHUNK=$(( $VCSBRANCHSIZE - ($spaceleft - $PATHSIZE) )) - [ $((${#CHUNKABLE} - $VCSBRANCHCHUNK)) -lt $minimalgitsize ] && VCSBRANCHCHUNK=$((${#CHUNKABLE} - $minimalgitsize)) + GITBRANCHCHUNK=$(( $GITBRANCHSIZE - ($spaceleft - $PATHSIZE) )) + [ $((${#CHUNKABLE} - $GITBRANCHCHUNK)) -lt $minimalgitsize ] && GITBRANCHCHUNK=$((${#CHUNKABLE} - $minimalgitsize)) fi - CHUNKABLE=`print -Pn "%"$(( ${#CHUNKABLE} - $VCSBRANCHCHUNK ))">¬>"${CHUNKABLE%\~*}` + CHUNKABLE=`print -Pn "%"$(( ${#CHUNKABLE} - $GITBRANCHCHUNK ))">¬>"${CHUNKABLE%\~*}` - VCSBRANCH=${VCSBRANCH/→*←/→$CHUNKABLE←} + GITBRANCH=${GITBRANCH/→*←/→$CHUNKABLE←} fi fi # then we reduce the path until it reaches the last path element, - spaceleft=$(($spaceleft - $VCSBRANCHSIZE)) + spaceleft=$(($spaceleft - $GITBRANCHSIZE)) [ $spaceleft -lt $minimalpathsize ] && spaceleft=$minimalpathsize - if [ -n "$VCSBRANCH" ] + if [ -n "$GITBRANCH" ] then - #VCSBRANCH=$C_$_prompt_colors[soft_generic]$_C${${VCSBRANCH/→/$C_"30"$_C}/←/$C_$_prompt_colors[soft_generic]$_C}"$C_$color[none]$_C" + 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" fi - [ -n "$VCSROOT" ] && CURDIR=${CURDIR/$VCSROOT*/$VCSROOT} - CURDIR="$C_$_prompt_colors[path]$_C%`echo $spaceleft`<..<"$CURDIR"%<<$C_$color[none]$_C" + CURDIR="$C_$_prompt_colors[path]$_C%`echo $spaceleft`<..<"$MY_PATH"%<<$C_$color[none]$_C" [ "$DEBUG" = "yes" ] && echo } @@ -338,7 +341,7 @@ __two_lines_prompt () ## Le prompt le plus magnifique du monde, et c'est le mien ! # Affiche l'user, l'host, le tty et le pwd. Rien que ça... PS1=$AGENTS$MAILSTAT$ERROR$BATTERY$C_$_prompt_colors[bar]$_C$HBAR$DATE" -"$C_$prompt_color[default]$_C$C_$_prompt_colors[user]$_C"%n"$C_$_prompt_colors[arob]$_C"@"$C_$_prompt_colors[host]$_C"%M"$C_$_prompt_colors[display]$_C"${DISPLAY:+($DISPLAY)} "$CURDIR$VCSBRANCH" "$C_$_prompt_colors[dies]$_C"%#"$C_$_prompt_colors[cmd]$_C" " +"$C_$prompt_color[default]$_C$C_$_prompt_colors[user]$_C"%n"$C_$_prompt_colors[arob]$_C"@"$C_$_prompt_colors[host]$_C"%M"$C_$_prompt_colors[display]$_C"${DISPLAY:+($DISPLAY)} "$CURDIR$CVSTAG$SVNREV$GITBRANCH$HGBRANCH" "$C_$_prompt_colors[dies]$_C"%#"$C_$_prompt_colors[cmd]$_C" " } diff --git a/61_VCS.zsh b/61_VCS.zsh deleted file mode 100644 index 466e585..0000000 --- a/61_VCS.zsh +++ /dev/null @@ -1,22 +0,0 @@ -## -## Part of configuration files for Zsh 4 -## by Hugues Hiegel -## -## 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 "%R $_reset_$C_$color[cyan];$color[bold]$_C/$C_$_prompt_colors[bold_generic]$_C%S$_reset_ [$_reset_%c%u%b$_reset_]" -zstyle ':vcs_info:*' actionformats "%R $_reset_/%S %B[$_reset_(%a) %c%u%b$_reset_%B]$_reset_" -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 - diff --git a/net:foret/Prompts.zsh b/net:foret/Prompts.zsh index bc31463..9964836 100644 --- a/net:foret/Prompts.zsh +++ b/net:foret/Prompts.zsh @@ -26,6 +26,6 @@ __two_lines_prompt () ## Le prompt le plus magnifique du monde, et c'est le mien ! # Affiche l'user, l'host, le tty et le pwd. Rien que ça... PS1=$AGENTS$MAILSTAT$ERROR$BATTERY$C_$_prompt_colors[bar]$_C$STLINUX$HBAR$DATE" -"$C_$prompt_color[default]$_C$C_$_prompt_colors[user]$_C"%n"$C_$_prompt_colors[arob]$_C"@"$C_$_prompt_colors[host]$_C"%m"$C_$_prompt_colors[display]$_C"${DISPLAY:+($DISPLAY)} "$CURDIR$VCSBRANCH" "$C_$_prompt_colors[soft_generic]$_C$COMPILATION$C_$_prompt_colors[dies]$_C"%#"$C_$_prompt_colors[cmd]$_C" " +"$C_$prompt_color[default]$_C$C_$_prompt_colors[user]$_C"%n"$C_$_prompt_colors[arob]$_C"@"$C_$_prompt_colors[host]$_C"%m"$C_$_prompt_colors[display]$_C"${DISPLAY:+($DISPLAY)} "$CURDIR$CVSTAG$SVNREV$GITBRANCH$HGBRANCH" "$C_$_prompt_colors[soft_generic]$_C$COMPILATION$C_$_prompt_colors[dies]$_C"%#"$C_$_prompt_colors[cmd]$_C" " } -- cgit v1.2.3