aboutsummaryrefslogtreecommitdiff
path: root/commit
diff options
context:
space:
mode:
authorSilvio Rhatto <rhatto@riseup.net>2014-09-18 16:37:38 -0300
committerSilvio Rhatto <user@example.org>2014-09-18 16:37:38 -0300
commit70beacc179ea415ea5db2a3bb7699c597709cb65 (patch)
tree0c7301fe71fd0e2c8d046c8ce40466b04bb8dc31 /commit
downloadutils-git-70beacc179ea415ea5db2a3bb7699c597709cb65.tar.gz
utils-git-70beacc179ea415ea5db2a3bb7699c597709cb65.tar.bz2
Initial import
Diffstat (limited to 'commit')
-rwxr-xr-xcommit145
1 files changed, 145 insertions, 0 deletions
diff --git a/commit b/commit
new file mode 100755
index 0000000..e5bed59
--- /dev/null
+++ b/commit
@@ -0,0 +1,145 @@
+#!/bin/bash
+#
+# Commit both on git and svn
+#
+
+# Parameters
+ARGS="$*"
+
+# Check if a file is inside a git repository
+# Usage: git_folder <file>
+function git_folder {
+
+ local folder="$1" 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 <folder>
+ 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 <folder>
+
+ 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 <<EOF >> .git/config"
+ else
+ echo "cat <<EOF >> $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//'`"
+ git commit -a -m "$params"
+}
+
+# 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
+ fi
+fi