summaryrefslogtreecommitdiff
path: root/git-submodule.sh
diff options
context:
space:
mode:
authorPeter Hutterer <peter.hutterer@who-t.net>2009-04-23 23:06:38 (GMT)
committerJunio C Hamano <gitster@pobox.com>2009-04-24 08:20:25 (GMT)
commitca2cedba70e9356a1a20b0e39acd07ab92fee80e (patch)
tree4499831d6ce4549bf5cb25204c7b3f5813b52398 /git-submodule.sh
parentea0b767c1ea66f687e58a9fcff45a5a518e699c3 (diff)
downloadgit-ca2cedba70e9356a1a20b0e39acd07ab92fee80e.zip
git-ca2cedba70e9356a1a20b0e39acd07ab92fee80e.tar.gz
git-ca2cedba70e9356a1a20b0e39acd07ab92fee80e.tar.bz2
git-submodule: add support for --rebase.
'git submodule update --rebase' rebases your local branch on top of what would have been checked out to a detached HEAD otherwise. In some cases, detaching the HEAD when updating a submodule complicates the workflow to commit to this submodule (checkout master, rebase, then commit). For submodules that require frequent updates but infrequent (if any) commits, a rebase can be executed directly by the git-submodule command, ensuring that the submodules stay on their respective branches. git-config key: submodule.$name.rebase (bool) Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net> Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'git-submodule.sh')
-rwxr-xr-xgit-submodule.sh33
1 files changed, 29 insertions, 4 deletions
diff --git a/git-submodule.sh b/git-submodule.sh
index 8e234a4..3176226 100755
--- a/git-submodule.sh
+++ b/git-submodule.sh
@@ -17,6 +17,7 @@ branch=
quiet=
cached=
nofetch=
+rebase=
#
# print stuff on stdout unless -q was specified
@@ -294,6 +295,11 @@ cmd_init()
git config submodule."$name".url "$url" ||
die "Failed to register url for submodule path '$path'"
+ test true != "$(git config -f .gitmodules --bool \
+ submodule."$name".rebase)" ||
+ git config submodule."$name".rebase true ||
+ die "Failed to register submodule path '$path' as rebasing"
+
say "Submodule '$name' ($url) registered for path '$path'"
done
}
@@ -321,6 +327,10 @@ cmd_update()
shift
nofetch=1
;;
+ -r|--rebase)
+ shift
+ rebase=true
+ ;;
--)
shift
break
@@ -339,6 +349,7 @@ cmd_update()
do
name=$(module_name "$path") || exit
url=$(git config submodule."$name".url)
+ rebase_module=$(git config --bool submodule."$name".rebase)
if test -z "$url"
then
# Only mention uninitialized submodules when its
@@ -359,6 +370,11 @@ cmd_update()
die "Unable to find current revision in submodule path '$path'"
fi
+ if test true = "$rebase"
+ then
+ rebase_module=true
+ fi
+
if test "$subsha1" != "$sha1"
then
force=
@@ -374,11 +390,20 @@ cmd_update()
die "Unable to fetch in submodule path '$path'"
fi
- (unset GIT_DIR; cd "$path" &&
- git-checkout $force -q "$sha1") ||
- die "Unable to checkout '$sha1' in submodule path '$path'"
+ if test true = "$rebase_module"
+ then
+ command="git-rebase"
+ action="rebase"
+ msg="rebased onto"
+ else
+ command="git-checkout $force -q"
+ action="checkout"
+ msg="checked out"
+ fi
- say "Submodule path '$path': checked out '$sha1'"
+ (unset GIT_DIR; cd "$path" && $command "$sha1") ||
+ die "Unable to $action '$sha1' in submodule path '$path'"
+ say "Submodule path '$path': $msg '$sha1'"
fi
done
}