#!/bin/bash # # Commit both on git and svn # # Get the absolute folder from a file # Usage: absolute_folder function absolute_folder { local file="$1" cwd if [ -e "$file" ]; then cwd="`pwd`" cd `dirname $file` pwd cd $cwd fi } # Check if a file is inside a git repository # Usage: git_folder function git_folder { local file="$1" folder folders dir_list cwd if [ -e "$file" ]; then folder="`absolute_folder $file`" fi if [ -d "$folder/.git" ]; then GIT_FOLDER="$folder" return fi # reverse folder order dir_list="`echo $folder | tr '/' ' '`" for i in $dir_list; do folders="$i $folders" done cwd="`pwd`" cd $folder echo folders: $folders for i in $folders; do cd .. if [ -d "$(pwd)/.git" ]; then cd $cwd GIT_FOLDER="$(pwd)" return true fi done cd $cwd return 1 } # Check if a folder is inside a git repository function is_git { # simple git folder checker # usage: is_git if [ -z "$1" ]; then return 1 elif [ ! -d "$1" ]; then return 1 elif [ -d "$1/.git" ]; then return else ( cd "$1" && git status &> /dev/null ) if [ "$?" != "128" ]; then return else return 1 fi fi } # Check if a folder is inside a svn repository function is_svn { # simple svn folder checker # usage: is_svn if [ -d "$1/.svn" ]; then return else return 1 fi } # Push to repositories function git_push { if [ "`git remote | wc -l`" == "0" ]; then return elif git remote | grep -q 'all'; then git push all --all elif git remote | grep -q 'origin'; then git push --all fi } # Check user information function git_user { if ! grep -q "^\[user\]" $GIT_FOLDER/.git/config; then echo "No user configuration section found in the repository." echo "This might be a privacy issue" if [ -e "$HOME/.gitconfig" ]; then echo "You should try to use your default setting:" echo "cat <> .git/config" grep -A 2 "^\[user\]" $HOME/.gitconfig echo "EOF" fi exit 1 fi } if [ ! -z "$1" ]; then if is_svn .; then svn commit -m "$*" fi if is_git .; then git_folder $(pwd) git_user git commit -a -m "$*" git_push fi fi