#!/bin/bash # # Commit both on git and svn # # Parameters ARGS="$*" # Git application we use GIT="hit" # Check if a file is inside a git repository # Usage: git_folder function git_folder { local folder="$*" folder folders dir_list cwd 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" for i in $folders; do cd .. if [ -d "$(pwd)/.git" ]; then GIT_FOLDER="$(pwd)" cd "$cwd" return 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 # echo "Please configure the 'all' remote first." # exit 1 # #$GIT push --all fi } # Check user information function git_user { if [ -z "`git config --local user.email`" ] || [ -z "`git config --local user.name`" ]; then if echo $ARGS | grep -q -- '--config'; then if grep -q "^\[user\]" $HOME/.gitconfig; then grep -A 2 "^\[user\]" $HOME/.gitconfig >> $GIT_FOLDER/.git/config else grep -A 2 "^\[user\]" $HOME/.custom/gitconfig >> $GIT_FOLDER/.git/config fi else echo "No user configuration section found in the repository." echo "This might be a privacy issue" echo "" if [ -e "$HOME/.custom/gitconfig" ]; then echo "You should try to use your default setting:" echo "" if [ "$GIT_FOLDER" == "$(pwd)" ]; then echo "cat <> .git/config" else echo "cat <> $GIT_FOLDER/.git/config" fi grep -A 2 "^\[user\]" $HOME/.custom/gitconfig echo "EOF" echo "" echo "Use --config if you want these lines to be added at .git/config" fi exit 1 fi fi } # Commit changes function git_commit { # Remove '--config' from args, otherwise it goes to the commit log params="`echo $* | sed -e 's/--config//'`" # Avoid detached HEAD if $GIT branch | grep -q '^* (HEAD detached'; then echo "Beware: trying to commit in detached HEAD state; checkout to a branch first" exit 1 fi # If there are no staged files, commit everything. # Otherwise commit just what was staged if $GIT status --short | grep -q "^[AM]"; then flag="" else flag="-a" fi $GIT commit $flag -m "$params" || exit 1 } # Main if [ ! -z "$1" ]; then if is_svn .; then svn commit -m "$*" fi if is_git .; then git_folder $(pwd) git_user git_commit $* git_push # Avoid ssh lockfile issues by sleeping a bit sleep 1 $GIT fetch --all fi fi