Mercurial > dotfiles
diff .zsh/50.vcs_functions.zsh @ 0:c30d68fbd368
Initial import from svn.
author | Augie Fackler <durin42@gmail.com> |
---|---|
date | Wed, 26 Nov 2008 10:56:09 -0600 |
parents | |
children | b4bfce76123f |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/.zsh/50.vcs_functions.zsh @@ -0,0 +1,126 @@ +## vcs_functions +# This file contains a handful of functions that relate to using some version +# control tool or other. + +# Function to grab the url of an svn wc +function svnurlof() { + local url + url=`svn info $1 2> /dev/null | grep '^URL: ' | sed 's/URL: //'` + if [ x"$url" = "x" ] ; then + url=`git svn info $1 2> /dev/null | grep '^URL: ' | sed 's/URL: //'` + fi + if [ x"$url" = "x" ] ; then + local dir + dir=$1 + if [ x"$dir" = "x" ] ; then + dir="." + fi + url=`hg -R $dir svn info 2> /dev/null | grep '^URL: ' | sed 's/URL: //'` + fi + if [ x"$url" = "x" ] ; then + echo -n 'No repo found (tried svn, git-svn, hgsvnclient)' + fi + echo $url +} + +# Function to clean locks out of svn wcs +function clean_svn_source_trees() { + for aa in */ ; do + pushd $aa > /dev/null + if [ -e .svn ] ; then + echo $aa 'is an svn checkout, cleaning' && svn cleanup + fi + popd > /dev/null + done +} + +# Function to update source trees of known VCS tools in the working dir. +# "known" means ones I'm forced to use on a regular basis +function update_source_trees() { + for aa in */ ; do + pushd $aa > /dev/null + if [ -e .svn ] ; then + echo $aa 'is an svn checkout, updating' + svn up + elif [ -e .hg/svn ] ; then + echo $aa 'is an hg-svn checkout, updating' + hg svn pull + hg svn gentags + hg up + elif [ -e .git/svn ] ; then + echo $aa 'is a git-svn checkout, updating' + git svn fetch + git repack + git gc + elif [ -e .git ] ; then + echo $aa 'is a git checkout, updating' + git pull origin master + git repack + git gc + elif [ -e .hg ] ; then + echo $aa 'is an hg checkout, updating' && hg pull && hg up + elif [ -e _MTN ] ; then + echo $aa "is an mtn co, updating" && mtn pull && mtn up + fi + popd > /dev/null + done +} + +function vcs_current_branch() { + hg branch 2> /dev/null > /dev/null + if [ $? = 0 ] ; then + local br=`hg branch | head -c 10` + local rid=`hg parents | head -n 1 | awk '{print $2}' | head -c 7` + echo "$br $rid" + return 0 + fi + git branch 2> /dev/null > /dev/null + if [ $? = 0 ] ; then + git branch --verbose | grep '^*' | sed 's/* //;s/ /:/;s/ .*//;s/:/ /' + return 0 + fi + # when wc-ng comes out, we'll probably do the following + # svn info 2> /dev/null > /dev/null + if [ -e .svn ] ; then + local d=`svn info | grep URL | sed 's/.*://'` + local br=`echo $d | awk '{ + if ( index($1, "trunk") ) { + print "trunk" + } else { + x = index($1, "branches") ; + if ( x != 0 ) { + sub(".*/branches/", ""); + sub("/.*", ""); + print $0 + } + } + }'` + local rev=`svn info | grep Revision | sed 's/.*: /r/'` + echo $br $rev + return 0 + fi + return 1 +} + +# change to the root dir of the current wc +function wcroot() { + local root=`hg root 2> /dev/null` + if [ x$root != 'x' ] ; then + cd $root + return 0 + fi + git branch 2> /dev/null > /dev/null + if [ $? = 0 ] ; then + while [ ! -e .git ] ; do + cd .. + done + return 0 + fi + if [ -e .svn ] ; then + while [ -e ../.svn ] ; do + cd .. + done + return 0 + fi + echo No working copy found'!' +}