]> gitweb.fluxo.info Git - utils-git.git/commitdiff
Adds sup
authorSilvio Rhatto <rhatto@riseup.net>
Thu, 5 Oct 2017 14:34:00 +0000 (11:34 -0300)
committerSilvio Rhatto <rhatto@riseup.net>
Thu, 5 Oct 2017 14:34:00 +0000 (11:34 -0300)
sup [new file with mode: 0755]

diff --git a/sup b/sup
new file mode 100755 (executable)
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