submodule.c: correctly handle nested submodules in is_submodule_modified
commit40069d6e3a195c8c2414ea60ed75b84ae47f88a1
authorStefan Beller <sbeller@google.com>
Wed, 29 Mar 2017 22:26:16 +0000 (29 15:26 -0700)
committerJunio C Hamano <gitster@pobox.com>
Thu, 30 Mar 2017 00:37:21 +0000 (29 17:37 -0700)
tree56220e959c945701a608005f942fd7a40fa006ee
parentdd6962dd731e6ec679f772d2bb14657f79062580
submodule.c: correctly handle nested submodules in is_submodule_modified

Suppose I have a superproject 'super', with two submodules 'super/sub'
and 'super/sub1'. 'super/sub' itself contains a submodule
'super/sub/subsub'. Now suppose I run, from within 'super':

    echo hi >sub/subsub/stray-file
    echo hi >sub1/stray-file

Currently we get would see the following output in git-status:

    git status --short
     m sub
     ? sub1

With this patch applied, the untracked file in the nested submodule is
displayed as an untracked file on the 'super' level as well.

    git status --short
     ? sub
     ? sub1

This doesn't change the output of 'git status --porcelain=1' for nested
submodules, because its output is always ' M' for either untracked files
or local modifications no matter the nesting level of the submodule.

'git status --porcelain=2' is affected by this change in a nested
submodule, though. Without this patch it would report the direct submodule
as modified and having no untracked files. With this patch it would report
untracked files. Chalk this up as a bug fix.

This bug fix also affects the default output (non-short, non-porcelain)
of git-status, which is not tested here.

Signed-off-by: Stefan Beller <sbeller@google.com>
Reviewed-by: Jonathan Nieder <jrnieder@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/git-status.txt
submodule.c
t/t3600-rm.sh
t/t7506-status-submodule.sh