martes, 8 de enero de 2013

Prompt para desarrolladores multi SCM

Para los que manejan varios SCMs a la vez, ya sea por gusto o por necesidad, va un tip para definir el tipo de SCM del directorio actual, y si hay archivos sin comitear (mostrando un * en el prompt).
En el caso de git, también muesta el branch en el que estás trabajando.

Ponelo en el ~/.bashrc o cualquier otro archivo que se importe al iniciar la sesión de bash:

-----------------------------------------------
PS1='\[\033[01;32m\]\h\[\033[00m\] \[\033[01;34m\]\W\[\033[01;33m\]$(get_repo_info)\[\033[00m\]\$ '

function get_repo_info {
    INFO=""
    DIRTY=""

    for i in svn:info bzr:info hg:summary
    do
        TYPE=`echo $i | cut -f1 -d':'`
        COMMAND=`echo $i | cut -f2 -d':'`
        if [ "$INFO" == "" ] && [ `$TYPE $COMMAND 2>/dev/null | wc -l` -gt 0 ]
        then
            [ `$TYPE status 2> /dev/null | grep -v '?' | wc -l` -gt 0 ] && DIRTY='*'
            INFO="⚡$TYPE$DIRTY"
        fi
    done

    if [ "$INFO" == "" ] && [ `git branch 2>/dev/null | wc -l` -gt 0 ]
    then
        BRANCH=`git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1/"`
        [ `git status --porcelain 2> /dev/null | wc -l` -gt 0 ] && DIRTY='*'
        INFO="⚡git:$BRANCH$DIRTY"
    fi

    echo $INFO
}
-----------------------------------------------

Y si querés verlo antes de probarlo, una captura: