From 5e8992fa950206127230595234de0b866e5229f4 Mon Sep 17 00:00:00 2001 From: Silvio Rhatto Date: Thu, 5 Oct 2017 11:34:00 -0300 Subject: Adds sup --- sup | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100755 sup 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 +# +# 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 [..] +# + +# 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 -- cgit v1.2.3