aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xsup83
1 files changed, 83 insertions, 0 deletions
diff --git a/sup b/sup
new file mode 100755
index 0000000..b06f16f
--- /dev/null
+++ b/sup
@@ -0,0 +1,83 @@
+#!/bin/bash
+#
+# Commit submodule changes
+#
+# Usage:
+#
+# 1. From a submodule folder:
+#
+# sup # go the upward repo and commit
+#
+# 2. From the top-level git repo:
+#
+# sup <submodule>
+#
+# Usage in an alternative design:
+#
+# 1. From a submodule folder:
+#
+# sup # go the upward repo and commit
+#
+# 2. From the top-level git repo:
+#
+# sup # detect changed submodules
+# sup <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
+if [ ! -d ".git" ]; then
+ echo "$BASENAME: not a git 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" )
+fi