Stefan Zager <sza...@google.com> writes:

> Currently, it will only do a checkout if the sha1 registered in the containing
> repository doesn't match the HEAD of the submodule, regardless of whether the
> submodule is dirty.  As discussed on the mailing list, the '--force' flag is a
> strong indicator that the state of the submodule is suspect, and should be 
> reset
> to HEAD.
>
> Signed-off-by: Stefan Zager <sza...@google.com>
> ---

Thanks for a reroll.  Will queue; looking good ;-)

>  Documentation/git-submodule.txt |  9 ++++++++-
>  git-submodule.sh                |  2 +-
>  t/t7406-submodule-update.sh     | 12 ++++++++++++
>  3 files changed, 21 insertions(+), 2 deletions(-)
>
> diff --git a/Documentation/git-submodule.txt b/Documentation/git-submodule.txt
> index fbbbcb2..2de7bf0 100644
> --- a/Documentation/git-submodule.txt
> +++ b/Documentation/git-submodule.txt
> @@ -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
> diff --git a/git-submodule.sh b/git-submodule.sh
> index aac575e..3aa7644 100755
> --- a/git-submodule.sh
> +++ b/git-submodule.sh
> @@ -578,7 +578,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
> diff --git a/t/t7406-submodule-update.sh b/t/t7406-submodule-update.sh
> index ce61d4c..9706436 100755
> --- a/t/t7406-submodule-update.sh
> +++ b/t/t7406-submodule-update.sh
> @@ -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
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to