diff options
Diffstat (limited to 'scommit')
-rwxr-xr-x | scommit | 83 |
1 files changed, 83 insertions, 0 deletions
@@ -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 |