Merge branch 'sz/submodule-force-update' into maint-1.7.11
authorJunio C Hamano <gitster@pobox.com>
Tue, 11 Sep 2012 18:10:17 +0000 (11:10 -0700)
committerJunio C Hamano <gitster@pobox.com>
Tue, 11 Sep 2012 18:10:17 +0000 (11:10 -0700)
* sz/submodule-force-update:
Make 'git submodule update --force' always check out submodules.

Documentation/git-submodule.txt
git-submodule.sh
t/t7406-submodule-update.sh
index fbbbcb282cc8d6b2fd9c0ea8aea28d4a584646ea..2de7bf090094cd4a5c2d6697493040b445077bf7 100644 (file)
@@ -149,6 +149,11 @@ submodule with the `--init` option.
 +
 If `--recursive` is specified, this command will recurse into the
 registered submodules, and update any nested submodules within.
++
+If `--force` is specified, the submodule will be checked out (using
+`git checkout --force` if appropriate), even if the commit specified in the
+index of the containing repository already matches the commit checked out in
+the submodule.
 
 summary::
        Show commit summary between the given commit (defaults to HEAD) and
@@ -210,7 +215,9 @@ OPTIONS
        This option is only valid for add and update commands.
        When running add, allow adding an otherwise ignored submodule path.
        When running update, throw away local changes in submodules when
-       switching to a different commit.
+       switching to a different commit; and always run a checkout operation
+       in the submodule, even if the commit listed in the index of the
+       containing repository matches the commit checked out in the submodule.
 
 --cached::
        This option is only valid for status and summary commands.  These
index dd3ae0e1a0f52118933a64a49f85652e87a0fb3e..e89b516039347ce8d3f28efaf8894d75e6bf1d8e 100755 (executable)
@@ -564,7 +564,7 @@ Maybe you want to use 'update --init'?")"
                        die "$(eval_gettext "Unable to find current revision in submodule path '\$sm_path'")"
                fi
 
-               if test "$subsha1" != "$sha1"
+               if test "$subsha1" != "$sha1" -o -n "$force"
                then
                        subforce=$force
                        # If we don't already have a -f flag and the submodule has never been checked out
index 646298b2125fbbb7379ffb041099dc0d4bafaa55..15426530e49ef2e42cda2528f4a72a784eb40cd9 100755 (executable)
@@ -123,6 +123,18 @@ test_expect_success 'submodule update should throw away changes with --force ' '
        )
 '
 
+test_expect_success 'submodule update --force forcibly checks out submodules' '
+       (cd super &&
+        (cd submodule &&
+         rm -f file
+        ) &&
+        git submodule update --force submodule &&
+        (cd submodule &&
+         test "$(git status -s file)" = ""
+        )
+       )
+'
+
 test_expect_success 'submodule update --rebase staying on master' '
        (cd super/submodule &&
          git checkout master