aboutsummaryrefslogtreecommitdiff
path: root/scommit
blob: 2c1606a0c222998011fa37b178dc52c4b5236e07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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