mirror of
https://git.proxmox.com/git/libgit2
synced 2025-12-30 00:01:14 +00:00
Fix broken status EXCLUDE_SUBMODULES logic
The exclude submodules flag was not doing the right thing, in that a file with no diff between the head and the index and just a delete in the workdir could be excluded if submodules were excluded.
This commit is contained in:
parent
4e28e638ea
commit
3a68d7f002
32
src/status.c
32
src/status.c
@ -81,23 +81,33 @@ static unsigned int workdir_delta2status(git_delta_t workdir_status)
|
||||
}
|
||||
|
||||
static bool status_is_included(
|
||||
git_status_list *statuslist,
|
||||
git_status_list *status,
|
||||
git_diff_delta *head2idx,
|
||||
git_diff_delta *idx2wd)
|
||||
{
|
||||
/* if excluding submodules and this is a submodule everywhere */
|
||||
if ((statuslist->opts.flags & GIT_STATUS_OPT_EXCLUDE_SUBMODULES) != 0) {
|
||||
bool in_tree = (head2idx && head2idx->status != GIT_DELTA_ADDED);
|
||||
bool in_index = (head2idx && head2idx->status != GIT_DELTA_DELETED);
|
||||
bool in_wd = (idx2wd && idx2wd->status != GIT_DELTA_DELETED);
|
||||
if (!(status->opts.flags & GIT_STATUS_OPT_EXCLUDE_SUBMODULES))
|
||||
return 1;
|
||||
|
||||
if ((!in_tree || head2idx->old_file.mode == GIT_FILEMODE_COMMIT) &&
|
||||
(!in_index || head2idx->new_file.mode == GIT_FILEMODE_COMMIT) &&
|
||||
(!in_wd || idx2wd->new_file.mode == GIT_FILEMODE_COMMIT))
|
||||
return 0;
|
||||
/* if excluding submodules and this is a submodule everywhere */
|
||||
if (head2idx) {
|
||||
if (head2idx->status != GIT_DELTA_ADDED &&
|
||||
head2idx->old_file.mode != GIT_FILEMODE_COMMIT)
|
||||
return 1;
|
||||
if (head2idx->status != GIT_DELTA_DELETED &&
|
||||
head2idx->new_file.mode != GIT_FILEMODE_COMMIT)
|
||||
return 1;
|
||||
}
|
||||
if (idx2wd) {
|
||||
if (idx2wd->status != GIT_DELTA_ADDED &&
|
||||
idx2wd->old_file.mode != GIT_FILEMODE_COMMIT)
|
||||
return 1;
|
||||
if (idx2wd->status != GIT_DELTA_DELETED &&
|
||||
idx2wd->new_file.mode != GIT_FILEMODE_COMMIT)
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 1;
|
||||
/* only get here if every valid mode is GIT_FILEMODE_COMMIT */
|
||||
return 0;
|
||||
}
|
||||
|
||||
static git_status_t status_compute(
|
||||
|
||||
Loading…
Reference in New Issue
Block a user