aboutsummaryrefslogtreecommitdiff
path: root/scommit
diff options
context:
space:
mode:
Diffstat (limited to 'scommit')
-rwxr-xr-xscommit83
1 files changed, 83 insertions, 0 deletions
diff --git a/scommit b/scommit
new file mode 100755
index 0000000..2c1606a
--- /dev/null
+++ b/scommit
@@ -0,0 +1,83 @@
+#!/bin/bash
+#
+# Commit submodule changes
+#
+# Usage:
+#
+# 1. From a submodule folder:
+#
+# scommit # go the upward repo and commit
+#
+# 2. From the top-level git repo:
+#
+# scommit <submodule>
+#
+# Usage in an alternative design:
+#
+# 1. From a submodule folder:
+#
+# scommit # go the upward repo and commit
+#
+# 2. From the top-level git repo:
+#
+# scommit # detect changed submodules
+# scommit <submodule1> [..<submoduleN>]
+
+# Parameters
+DIRNAME="`dirname $0`"
+BASENAME="`basename $0`"
+PROJECT="$1"
+GIT="hit"
+
+# Check each file at the the submodule registry
+#function sup_registry {
+# $GIT status --short | grep -v "??" | awk '{ print $2 }' | while read module; do
+# if grep -q "\[submodule \"$module\"\]" .gitmodules; then
+# true
+# fi
+# done
+#}
+
+# Check if it is a git repository, and wheter we're in the top of it
+if [ ! -d ".git" ]; then
+ echo "$BASENAME: not a git repository, or not in the top-level of that repository"
+ exit 1
+fi
+
+# Remove trailing slash from project name
+PROJECT="`echo "$PROJECT" | sed -e 's|/$||'`"
+
+# Check if param is a project
+if [ ! -z "$PROJECT" ]; then
+ # Check if project is a registered submodule
+ if ! grep -q "\[submodule \"$PROJECT\"\]" .gitmodules; then
+ echo "$BASENAME: not a submodule: $PROJECT"
+ exit 1
+ fi
+
+ # Check if it has changes to be commited
+ #if ! $GIT status --short $PROJECT | grep -q "^[AM]"; then
+ # echo "$BASENAME: not changes to be commited for $PROJECT"
+ # exit 1
+ #fi
+
+ # Work with cached version only
+ #COMMIT="`$GIT diff --cached $PROJECT | grep '^\+Subproject commit ' | cut -d ' ' -f 3`"
+ #LOG="`cd $PROJECT &> /dev/null && git log -1 --oneline $COMMIT`"
+
+ # Always work with the latest commit
+ $GIT add $PROJECT
+ LOG="`cd $PROJECT &> /dev/null && git log -1 --oneline`"
+
+ MESSAGE="Updates $PROJECT: $LOG"
+ $DIRNAME/commit $MESSAGE
+else
+ # Get log
+ LOG="`git log -1 --oneline`"
+ BASE="$(basename `pwd`)"
+ MESSAGE="Updates $BASE: $LOG"
+
+ # Got upward and commit
+ #( cd .. &> /dev/null && $GIT add $BASE && $DIRNAME/commit "$MESSAGE" )
+ ( cd .. &> /dev/null && $GIT add -f $BASE && $DIRNAME/commit "$MESSAGE" )
+fi