• Brandon Williams's avatar
    wt-status: actually ignore submodules when requested · c6d8ccf3
    Brandon Williams authored
    Since ff6f1f56 (submodule-config: lazy-load a repository's .gitmodules
    file, 2017-08-03) rebase interactive fails if there are any submodules
    with unstaged changes which have been configured with a value for
    'submodule.<name>.ignore' in the repository's config.
    
    This is due to how configured values of 'submodule.<name>.ignore' are
    handled in addition to a change in how the submodule config is loaded.
    When the diff machinery hits a submodule (gitlink as well as a
    corresponding entry in the submodule subsystem) it will read the value
    of 'submodule.<name>.ignore' stored in the repository's config and if
    the config is present it will clear the 'IGNORE_SUBMODULES' (which is
    the flag explicitly requested by rebase interactive),
    'IGNORE_UNTRACKED_IN_SUBMODULES', and 'IGNORE_DIRTY_SUBMODULES' diff
    flags and then set one of them based on the configured value.
    
    Historically this wasn't a problem because the submodule subsystem
    wasn't initialized because the .gitmodules file wasn't explicitly loaded
    by the rebase interactive command.  So when the diff machinery hit a
    submodule it would skip over reading any configured values of
    'submodule.<name>.ignore'.
    
    In order to preserve the behavior of submodules being ignored by rebase
    interactive, also set the 'OVERRIDE_SUBMODULE_CONFIG' diff flag when
    submodules are requested to be ignored when checking for unstaged
    changes.
    Reported-by: default avatarOrgad Shaneh <orgads@gmail.com>
    Signed-off-by: default avatarBrandon Williams <bmwill@google.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    c6d8ccf3
wt-status.c 63.3 KB