Skip to content

Instantly share code, notes, and snippets.

@realtimeprojects
Forked from woods/git_svn_bash_prompt.sh
Created February 12, 2012 14:38

Revisions

  1. @woods woods revised this gist Mar 5, 2010. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -66,6 +66,8 @@ function set_git_branch {
    else
    remote=""
    fi
    else
    remote=""
    fi
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
  2. @woods woods revised this gist Aug 15, 2009. 1 changed file with 2 additions and 1 deletion.
    3 changes: 2 additions & 1 deletion git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -82,7 +82,8 @@ function set_git_branch {
    BRANCH="${state}(${branch})${remote}${COLOR_NONE} "
    }

    # Determine the branch information for this subversion repository.
    # Determine the branch information for this subversion repository. No support
    # for svn status, since that needs to hit the remote repository.
    function set_svn_branch {
    # Capture the output of the "git status" command.
    svn_info="$(svn info | egrep '^URL: ' 2> /dev/null)"
  3. @woods woods revised this gist Aug 15, 2009. 1 changed file with 2 additions and 0 deletions.
    2 changes: 2 additions & 0 deletions git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -18,6 +18,8 @@
    # Scott Woods <[email protected]>
    # West Arete Computing
    #
    # Based on work by halbtuerke and lakiolen.
    #
    # http://gist.github.com/31967


  4. @woods woods revised this gist Aug 15, 2009. 1 changed file with 18 additions and 7 deletions.
    25 changes: 18 additions & 7 deletions git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -1,14 +1,25 @@
    #!/bin/bash
    #
    # Set our bash prompt according to:
    # * the branch/status of the current git repository
    # * the branch of the current subversion repository
    # * the return value of the previous command
    # DESCRIPTION:
    #
    # Set the bash prompt according to:
    # * the branch/status of the current git repository
    # * the branch of the current subversion repository
    # * the return value of the previous command
    #
    # http://gist.github.com/31967
    # USAGE:
    #
    # 1. Save this file as ~/.git_svn_bash_prompt
    # 2. Add the following line to the end of your ~/.profile or ~/.bash_profile:
    # . ~/.git_svn_bash_prompt
    #
    # Scott Woods <[email protected]>
    # West Arete Computing
    # AUTHOR:
    #
    # Scott Woods <[email protected]>
    # West Arete Computing
    #
    # http://gist.github.com/31967


    # The various escape codes that we can use to color our prompt.
    RED="\[\033[0;31m\]"
  5. @woods woods revised this gist Aug 15, 2009. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -5,7 +5,7 @@
    # * the branch of the current subversion repository
    # * the return value of the previous command
    #
    # Originally based on http://gist.github.com/31934
    # http://gist.github.com/31967
    #
    # Scott Woods <[email protected]>
    # West Arete Computing
  6. @woods woods revised this gist Aug 15, 2009. 1 changed file with 24 additions and 17 deletions.
    41 changes: 24 additions & 17 deletions git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -32,7 +32,7 @@ function is_svn_repository {
    }

    # Determine the branch/state information for this git repository.
    function parse_git_branch {
    function set_git_branch {
    # Capture the output of the "git status" command.
    git_status="$(git status 2> /dev/null)"

    @@ -65,12 +65,12 @@ function parse_git_branch {
    branch=${BASH_REMATCH[1]}
    fi

    # Return the prompt.
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    # Set the final branch string.
    BRANCH="${state}(${branch})${remote}${COLOR_NONE} "
    }

    # Determine the branch information for this subversion repository.
    function parse_svn_branch {
    function set_svn_branch {
    # Capture the output of the "git status" command.
    svn_info="$(svn info | egrep '^URL: ' 2> /dev/null)"

    @@ -83,31 +83,38 @@ function parse_svn_branch {
    branch='trunk'
    fi

    # Return the prompt.
    echo "(${branch}) "
    # Set the final branch string.
    BRANCH="(${branch}) "
    }

    # Return the prompt symbol to use, colorized based on the return value of the
    # previous command.
    function prompt_symbol () {
    function set_prompt_symbol () {
    if test $1 -eq 0 ; then
    echo "\$"
    PROMPT_SYMBOL="\$"
    else
    echo "${RED}\$${COLOR_NONE}"
    PROMPT_SYMBOL="${RED}\$${COLOR_NONE}"
    fi
    }

    # Set the full prompt.
    function prompt_func () {
    last_return_value=$?
    # Set the full bash prompt.
    function set_bash_prompt () {
    # Set the PROMPT_SYMBOL variable. We do this first so we don't lose the
    # return value of the last command.
    set_prompt_symbol $?

    # Set the BRANCH variable.
    if is_git_repository ; then
    branch="$(parse_git_branch)"
    set_git_branch
    elif is_svn_repository ; then
    branch="$(parse_svn_branch)"
    set_svn_branch
    else
    branch=''
    BRANCH=''
    fi
    PS1="\u@\h \w $branch$(prompt_symbol $last_return_value) "

    # Set the bash prompt variable.
    PS1="\u@\h \w ${BRANCH}${PROMPT_SYMBOL} "
    }

    PROMPT_COMMAND=prompt_func
    # Tell bash to execute this function just before displaying its prompt.
    PROMPT_COMMAND=set_bash_prompt
  7. @woods woods revised this gist Aug 15, 2009. 1 changed file with 112 additions and 76 deletions.
    188 changes: 112 additions & 76 deletions git_svn_bash_prompt.sh
    Original file line number Diff line number Diff line change
    @@ -1,77 +1,113 @@
    #!/bin/bash
    #
    # Set our bash prompt according to the branch/status of the current git
    # repository.
    #
    # Forked from http://gist.github.com/31934

    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    GREEN="\[\033[0;32m\]"
    BLUE="\[\033[0;34m\]"
    LIGHT_RED="\[\033[1;31m\]"
    LIGHT_GREEN="\[\033[1;32m\]"
    WHITE="\[\033[1;37m\]"
    LIGHT_GRAY="\[\033[0;37m\]"
    COLOR_NONE="\[\e[0m\]"

    function is_git_repository {
    git branch > /dev/null 2>&1
    }

    function parse_git_branch {
    # Only display git info if we're inside a git repository.
    is_git_repository || return 1

    # Capture the output of the "git status" command.
    git_status="$(git status 2> /dev/null)"

    # Set color based on clean/staged/dirty.
    if [[ ${git_status} =~ "working directory clean" ]]; then
    state="${GREEN}"
    elif [[ ${git_status} =~ "Changes to be committed" ]]; then
    state="${YELLOW}"
    else
    state="${RED}"
    fi

    # Set arrow icon based on status against remote.
    remote_pattern="# Your branch is (.*) of"
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
    remote=""
    else
    remote=""
    fi
    fi
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    fi

    # Get the name of the branch.
    branch_pattern="^# On branch ([^${IFS}]*)"
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    fi

    # Display the prompt.
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    }

    function prompt_symbol () {
    # Set color of dollar prompt based on return value of previous command.
    if test $1 -eq 0
    then
    echo "\$"
    else
    echo "${RED}\$${COLOR_NONE}"
    fi
    }

    function prompt_func () {
    last_return_value=$?
    PS1="\u@\h \w $(parse_git_branch)$(prompt_symbol $last_return_value) "
    }

    #!/bin/bash
    #
    # Set our bash prompt according to:
    # * the branch/status of the current git repository
    # * the branch of the current subversion repository
    # * the return value of the previous command
    #
    # Originally based on http://gist.github.com/31934
    #
    # Scott Woods <[email protected]>
    # West Arete Computing

    # The various escape codes that we can use to color our prompt.
    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    GREEN="\[\033[0;32m\]"
    BLUE="\[\033[0;34m\]"
    LIGHT_RED="\[\033[1;31m\]"
    LIGHT_GREEN="\[\033[1;32m\]"
    WHITE="\[\033[1;37m\]"
    LIGHT_GRAY="\[\033[0;37m\]"
    COLOR_NONE="\[\e[0m\]"

    # Detect whether the current directory is a git repository.
    function is_git_repository {
    git branch > /dev/null 2>&1
    }

    # Detect whether the current directory is a subversion repository.
    function is_svn_repository {
    test -d .svn
    }

    # Determine the branch/state information for this git repository.
    function parse_git_branch {
    # Capture the output of the "git status" command.
    git_status="$(git status 2> /dev/null)"

    # Set color based on clean/staged/dirty.
    if [[ ${git_status} =~ "working directory clean" ]]; then
    state="${GREEN}"
    elif [[ ${git_status} =~ "Changes to be committed" ]]; then
    state="${YELLOW}"
    else
    state="${RED}"
    fi

    # Set arrow icon based on status against remote.
    remote_pattern="# Your branch is (.*) of"
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
    remote=""
    else
    remote=""
    fi
    fi
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    fi

    # Get the name of the branch.
    branch_pattern="^# On branch ([^${IFS}]*)"
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    fi

    # Return the prompt.
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    }

    # Determine the branch information for this subversion repository.
    function parse_svn_branch {
    # Capture the output of the "git status" command.
    svn_info="$(svn info | egrep '^URL: ' 2> /dev/null)"

    # Get the name of the branch.
    branch_pattern="^URL: .*/(branches|tags)/([^/]+)"
    trunk_pattern="^URL: .*/trunk(/.*)?$"
    if [[ ${svn_info} =~ $branch_pattern ]]; then
    branch=${BASH_REMATCH[2]}
    elif [[ ${svn_info} =~ $trunk_pattern ]]; then
    branch='trunk'
    fi

    # Return the prompt.
    echo "(${branch}) "
    }

    # Return the prompt symbol to use, colorized based on the return value of the
    # previous command.
    function prompt_symbol () {
    if test $1 -eq 0 ; then
    echo "\$"
    else
    echo "${RED}\$${COLOR_NONE}"
    fi
    }

    # Set the full prompt.
    function prompt_func () {
    last_return_value=$?
    if is_git_repository ; then
    branch="$(parse_git_branch)"
    elif is_svn_repository ; then
    branch="$(parse_svn_branch)"
    else
    branch=''
    fi
    PS1="\u@\h \w $branch$(prompt_symbol $last_return_value) "
    }

    PROMPT_COMMAND=prompt_func
  8. @woods woods renamed this gist Aug 15, 2009. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  9. @woods woods revised this gist Dec 26, 2008. 1 changed file with 19 additions and 9 deletions.
    28 changes: 19 additions & 9 deletions gistfile1.sh
    Original file line number Diff line number Diff line change
    @@ -3,7 +3,7 @@
    # Set our bash prompt according to the branch/status of the current git
    # repository.
    #
    # Taken from http://gist.github.com/31934
    # Forked from http://gist.github.com/31934

    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    @@ -20,33 +20,43 @@ function is_git_repository {
    }

    function parse_git_branch {
    # Only display git info if we're inside a git repository.
    is_git_repository || return 1

    # Capture the output of the "git status" command.
    git_status="$(git status 2> /dev/null)"
    branch_pattern="^# On branch ([^${IFS}]*)"
    remote_pattern="# Your branch is (.*) of"
    diverge_pattern="# Your branch and (.*) have diverged"

    # Set color based on clean/staged/dirty.
    if [[ ${git_status} =~ "working directory clean" ]]; then
    state="${GREEN}"
    elif [[ ${git_status} =~ "Untracked files" ]]; then
    state="${RED}"
    else
    elif [[ ${git_status} =~ "Changes to be committed" ]]; then
    state="${YELLOW}"
    else
    state="${RED}"
    fi
    # add an else if or two here if you want to get more specific

    # Set arrow icon based on status against remote.
    remote_pattern="# Your branch is (.*) of"
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
    remote=""
    else
    remote=""
    fi
    fi
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    fi

    # Get the name of the branch.
    branch_pattern="^# On branch ([^${IFS}]*)"
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    fi

    # Display the prompt.
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    }

    function prompt_symbol () {
  10. @woods woods revised this gist Dec 5, 2008. 1 changed file with 36 additions and 19 deletions.
    55 changes: 36 additions & 19 deletions gistfile1.sh
    Original file line number Diff line number Diff line change
    @@ -1,50 +1,67 @@
    #!/bin/bash
    #
    # Set our bash prompt according to the branch/status of the current git
    # repository.
    #
    # Taken from http://gist.github.com/31934

    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    GREEN="\[\033[0;32m\]"
    GREEN="\[\033[0;32m\]"
    BLUE="\[\033[0;34m\]"
    LIGHT_RED="\[\033[1;31m\]"
    LIGHT_GREEN="\[\033[1;32m\]"
    WHITE="\[\033[1;37m\]"
    LIGHT_GRAY="\[\033[0;37m\]"
    COLOR_NONE="\[\e[0m\]"

    function parse_git_branch {
    function is_git_repository {
    git branch > /dev/null 2>&1
    }

    [ -d .git ] || return 1
    function parse_git_branch {
    is_git_repository || return 1
    git_status="$(git status 2> /dev/null)"
    branch_pattern="^# On branch ([^${IFS}]*)"
    remote_pattern="# Your branch is (.*) of"
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ! ${git_status}} =~ "working directory clean" ]]; then
    state="${RED}"
    if [[ ${git_status} =~ "working directory clean" ]]; then
    state="${GREEN}"
    elif [[ ${git_status} =~ "Untracked files" ]]; then
    state="${RED}"
    else
    state="${YELLOW}"
    fi
    # add an else if or two here if you want to get more specific
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
    remote="${YELLOW}"
    remote=""
    else
    remote="${YELLOW}"
    remote=""
    fi
    fi
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote="${YELLOW}"
    remote=""
    fi
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    echo " (${branch})${remote}${state}"
    echo "${state}(${branch})${remote}${COLOR_NONE} "
    fi
    }

    function prompt_func() {
    previous_return_value=$?;
    # prompt="${TITLEBAR}$BLUE[$RED\w$GREEN$(__git_ps1)$YELLOW$(git_dirty_flag)$BLUE]$COLOR_NONE "
    prompt="${TITLEBAR}${BLUE}[${RED}\w${GREEN}$(parse_git_branch)${BLUE}]${COLOR_NONE} "
    if test $previous_return_value -eq 0
    then
    PS1="${prompt}"
    else
    PS1="${prompt}${RED}${COLOR_NONE} "
    fi
    function prompt_symbol () {
    # Set color of dollar prompt based on return value of previous command.
    if test $1 -eq 0
    then
    echo "\$"
    else
    echo "${RED}\$${COLOR_NONE}"
    fi
    }

    function prompt_func () {
    last_return_value=$?
    PS1="\u@\h \w $(parse_git_branch)$(prompt_symbol $last_return_value) "
    }

    PROMPT_COMMAND=prompt_func
  11. @halbtuerke halbtuerke revised this gist Dec 4, 2008. 1 changed file with 31 additions and 6 deletions.
    37 changes: 31 additions & 6 deletions gistfile1.sh
    Original file line number Diff line number Diff line change
    @@ -1,25 +1,50 @@
    RED="\[\033[0;31m\]"
    YELLOW="\[\033[0;33m\]"
    GREEN="\[\033[0;32m\]"
    BLUE="\[\033[0;34m\]"
    LIGHT_RED="\[\033[1;31m\]"
    LIGHT_GREEN="\[\033[1;32m\]"
    WHITE="\[\033[1;37m\]"
    LIGHT_GRAY="\[\033[0;37m\]"
    COLOR_NONE="\[\e[0m\]"

    function parse_git_branch {

    [ -d .git ] || return 1
    git_status="$(git status 2> /dev/null)"
    branch_pattern="^# On branch ([^${IFS}]*)"
    remote_pattern="# Your branch is (.*) of"
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ! ${git_status}} =~ "working directory clean" ]]; then
    state="*"
    state="${RED}"
    fi
    # add an else if or two here if you want to get more specific
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
    remote=""
    remote="${YELLOW}"
    else
    remote=""
    remote="${YELLOW}"
    fi
    fi
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    remote="${YELLOW}"
    fi
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    echo " <${branch}${state}${remote}>"
    echo " (${branch})${remote}${state}"
    fi
    }
    }

    function prompt_func() {
    previous_return_value=$?;
    # prompt="${TITLEBAR}$BLUE[$RED\w$GREEN$(__git_ps1)$YELLOW$(git_dirty_flag)$BLUE]$COLOR_NONE "
    prompt="${TITLEBAR}${BLUE}[${RED}\w${GREEN}$(parse_git_branch)${BLUE}]${COLOR_NONE} "
    if test $previous_return_value -eq 0
    then
    PS1="${prompt}"
    else
    PS1="${prompt}${RED}${COLOR_NONE} "
    fi
    }

    PROMPT_COMMAND=prompt_func
  12. lakiolen revised this gist Dec 4, 2008. 1 changed file with 17 additions and 5 deletions.
    22 changes: 17 additions & 5 deletions gistfile1.sh
    Original file line number Diff line number Diff line change
    @@ -1,13 +1,25 @@
    function parse_git_branch {
    [ -d .git ] || return 1
    git_status="$(git status 2> /dev/null)"
    pattern="^# On branch ([^${IFS}]*)"
    branch_pattern="^# On branch ([^${IFS}]*)"
    remote_pattern="# Your branch is (.*) of"
    diverge_pattern="# Your branch and (.*) have diverged"
    if [[ ! ${git_status}} =~ "working directory clean" ]]; then
    state="*"
    fi
    # add an else if or two here if you want to get more specific

    if [[ ${git_status} =~ ${pattern} ]]; then
    if [[ ${git_status} =~ ${remote_pattern} ]]; then
    if [[ ${BASH_REMATCH[1]} == "ahead" ]]; then
    remote=""
    else
    remote=""
    fi
    fi
    if [[ ${git_status} =~ ${diverge_pattern} ]]; then
    remote=""
    fi
    if [[ ${git_status} =~ ${branch_pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    echo "[${branch}${state}]"
    echo " <${branch}${state}${remote}>"
    fi
    }
    }
  13. @invalid-email-address Anonymous renamed this gist Dec 3, 2008. 1 changed file with 0 additions and 0 deletions.
    File renamed without changes.
  14. @invalid-email-address Anonymous created this gist Dec 3, 2008.
    13 changes: 13 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,13 @@
    function parse_git_branch {
    git_status="$(git status 2> /dev/null)"
    pattern="^# On branch ([^${IFS}]*)"
    if [[ ! ${git_status}} =~ "working directory clean" ]]; then
    state="*"
    fi
    # add an else if or two here if you want to get more specific

    if [[ ${git_status} =~ ${pattern} ]]; then
    branch=${BASH_REMATCH[1]}
    echo "[${branch}${state}]"
    fi
    }