Recursive Update Script for SVN, Git, etc.

I am working with a bigger number of different version control systems. I use these from different locations, so I have the use-case of frequently updating those repositories.

The following script recursively traverses a directory structure; once it finds a repository of a “known”version control system it updates that repository and continues to go on in the directory structure. Additionally, it colors the output depending on the result. Furthermore, it is possible to skip certain directories by placing a file named “.skip” in a respective directory.

#!/bin/sh
#
# Copyright 2012, Ruediger Gad <r.c.g@gmx.de>
#
# This work is licensed under the Creative Commons Attribution-ShareAlike 3.0 Unported License.
# To view a copy of this license, visit http://creativecommons.org/licenses/by-sa/3.0/
# or send a letter to Creative Commons, 444 Castro Street, Suite 900, Mountain View, California, 94041, USA.
#
# Usage:
# Update all repositories from the current path on: update_repositories.sh
# Update all repositories within a given path: update_repositories.sh <PATH>
#

if [ $# -eq 0 ]
then
  START_DIR="$(pwd)"
else
  START_DIR="$1"
fi

function colorize_output(){
  OUTPUT=$("$@")
  if [ $? -eq 0 ]
  then
    echo -e "\E[42m$OUTPUT\E[0m" 
  else
    echo -e "\E[41m$OUTPUT\E[0m" 
  fi
}

function process_directory(){
  for i in "$1"/*
  do
    if [ -d "$i" ]
    then
      echo "Processing \"$i\"..."
      if [ -e "$i"/.skip ]
      then
        echo -e "\E[43mSkipping \"$i\"...\E[0m"
      elif [ -d "$i"/.svn ]
      then
        cd "$i"
        colorize_output svn up
        cd -  &> /dev/null
      elif [ -d "$i"/.git ]
      then
        cd "$i"
        colorize_output git pull
        cd - &> /dev/null
      elif [ -s "$i"/.osc ]
      then
        cd "$i"
        colorize_output osc up
        cd - &> /dev/null
      else
        process_directory "$i"
      fi
    fi
  done
}

process_directory "$START_DIR"

Advertisements
This entry was posted in Snippets and tagged . Bookmark the permalink.

One Response to Recursive Update Script for SVN, Git, etc.

  1. Pingback: Automatically clone all repositories defined in conf/gitolite.conf | ruedigergad

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s