diff options
author | Junio C Hamano <gitster@pobox.com> | 2011-03-20 22:11:02 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2011-03-20 22:11:02 -0700 |
commit | 106040fe8ecb670261f423c285d494d6d0170558 (patch) | |
tree | 6f0ea7f876baf20cfb74488de36979a16c08cc1f | |
parent | eec8a512bc957efac656921a5aeeaef23bd9f729 (diff) | |
parent | b200021e150320459d4f1edf1099131e0f5ae297 (diff) | |
download | git-106040fe8ecb670261f423c285d494d6d0170558.tar.gz git-106040fe8ecb670261f423c285d494d6d0170558.tar.xz |
Merge branch 'so/submodule-no-update-first-time' into maint
* so/submodule-no-update-first-time:
t7406: "git submodule update {--merge|--rebase]" with new submodules
submodule: no [--merge|--rebase] when newly cloned
-rwxr-xr-x | git-submodule.sh | 9 | ||||
-rwxr-xr-x | t/t7406-submodule-update.sh | 52 |
2 files changed, 61 insertions, 0 deletions
diff --git a/git-submodule.sh b/git-submodule.sh index 8b9058971..3a13397e0 100755 --- a/git-submodule.sh +++ b/git-submodule.sh @@ -423,6 +423,7 @@ cmd_update() cmd_init "--" "$@" || return fi + cloned_modules= module_list "$@" | while read mode sha1 stage path do @@ -442,6 +443,7 @@ cmd_update() if ! test -d "$path"/.git -o -f "$path"/.git then module_clone "$path" "$url" "$reference"|| exit + cloned_modules="$cloned_modules;$name" subsha1= else subsha1=$(clear_local_git_env; cd "$path" && @@ -469,6 +471,13 @@ cmd_update() die "Unable to fetch in submodule path '$path'" fi + # Is this something we just cloned? + case ";$cloned_modules;" in + *";$name;"*) + # then there is no local change to integrate + update_module= ;; + esac + case "$update_module" in rebase) command="git rebase" diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh index bfb4975e9..fa9d23aa3 100755 --- a/t/t7406-submodule-update.sh +++ b/t/t7406-submodule-update.sh @@ -203,4 +203,56 @@ test_expect_success 'submodule init picks up merge' ' ) ' +test_expect_success 'submodule update --merge - ignores --merge for new submodules' ' + (cd super && + rm -rf submodule && + git submodule update submodule && + git status -s submodule >expect && + rm -rf submodule && + git submodule update --merge submodule && + git status -s submodule >actual && + test_cmp expect actual + ) +' + +test_expect_success 'submodule update --rebase - ignores --rebase for new submodules' ' + (cd super && + rm -rf submodule && + git submodule update submodule && + git status -s submodule >expect && + rm -rf submodule && + git submodule update --rebase submodule && + git status -s submodule >actual && + test_cmp expect actual + ) +' + +test_expect_success 'submodule update ignores update=merge config for new submodules' ' + (cd super && + rm -rf submodule && + git submodule update submodule && + git status -s submodule >expect && + rm -rf submodule && + git config submodule.submodule.update merge && + git submodule update submodule && + git status -s submodule >actual && + git config --unset submodule.submodule.update && + test_cmp expect actual + ) +' + +test_expect_success 'submodule update ignores update=rebase config for new submodules' ' + (cd super && + rm -rf submodule && + git submodule update submodule && + git status -s submodule >expect && + rm -rf submodule && + git config submodule.submodule.update rebase && + git submodule update submodule && + git status -s submodule >actual && + git config --unset submodule.submodule.update && + test_cmp expect actual + ) +' + test_done |