summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHugues Hiegel <hugues@hiegel.fr>2012-03-07 19:02:59 +0100
committerHugues Hiegel <hugues@hiegel.fr>2012-03-07 19:02:59 +0100
commit03d43c46b82255db86ef81d3002ef29126ba6242 (patch)
treec5d1493643ec2c329603b0dd39f6ce4cd87e6f6f
parent3d9871f39ee40c2648e60dd165c1b11d1006e8b6 (diff)
Revert "[Prompts] uses vcs_info"
This reverts commit 44565988a8345b19f39cd2a4619cd2c0fcecf9a9.
-rw-r--r--01_Internal.zsh195
-rw-r--r--10_Environment.zsh5
-rw-r--r--12_Prompts.zsh47
-rw-r--r--61_VCS.zsh22
-rw-r--r--net:foret/Prompts.zsh2
5 files changed, 223 insertions, 48 deletions
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 <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 "%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" "
}