Skip to content

Commit 7edee32

Browse files
novalisgitster
authored andcommitted
git rm submodule: succeed if .gitmodules index stat info is zero
The bug was that ie_match_stat() was used to compare if the stat info for the file was compatible with the stat info in the index, rather using ie_modified() to check if the file was in fact different from the version in the index. A version of this (with deinit instead of rm) was reported here: https://lore.kernel.org/git/CAPOqYV+C-P9M2zcUBBkD2LALPm4K3sxSut+BjAkZ9T1AKLEr+A@mail.gmail.com/ It seems that in that case, the user's clone command left the index with empty stat info. The mailing list was unable to reproduce this. But we (Two Sigma) hit the bug while using some plumbing commands, so I'm fixing it. I manually confirmed that the fix also repairs deinit in this scenario. Signed-off-by: David Turner <[email protected]> Reported-by: Thomas Bétous <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent a0ba800 commit 7edee32

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

submodule.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ int is_staging_gitmodules_ok(struct index_state *istate)
8282
if ((pos >= 0) && (pos < istate->cache_nr)) {
8383
struct stat st;
8484
if (lstat(GITMODULES_FILE, &st) == 0 &&
85-
ie_match_stat(istate, istate->cache[pos], &st, 0) & DATA_CHANGED)
85+
ie_modified(istate, istate->cache[pos], &st, 0) & DATA_CHANGED)
8686
return 0;
8787
}
8888

t/t3600-rm.sh

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,6 +425,13 @@ test_expect_success 'rm will error out on a modified .gitmodules file unless sta
425425
git status -s -uno >actual &&
426426
test_cmp expect actual
427427
'
428+
test_expect_success 'rm will not error out on .gitmodules file with zero stat data' '
429+
git reset --hard &&
430+
git submodule update &&
431+
git read-tree HEAD &&
432+
git rm submod &&
433+
test_path_is_missing submod
434+
'
428435

429436
test_expect_success 'rm issues a warning when section is not found in .gitmodules' '
430437
git reset --hard &&

0 commit comments

Comments
 (0)