From: Srujith Poojary Date: Mon, 02 Nov 2026 19:49:42 GMT Subject: Re: [PATCH v4 1/2] submodule: use the submodule repository to abbreviate commits Message-ID: In-Reply-To: On Tue, Nov 3, 2026 at 1:10 AM Srujith A Poojary via GitGitGadget wrote: > > From: Srujith A Poojary > > The commit IDs shown in a submodule diff header belong to the > submodule's object database. However, strbuf_add_unique_abbrev() > uses the_repository, so it checks the superproject's object > database when abbreviating those IDs. > > Use the submodule repository when it is available, and fall back > to the repository from the diff options when it is not. > > Signed-off-by: Srujith A Poojary > --- > submodule.c | 5 +++-- > t/t4041-diff-submodule-option.sh | 18 ++++++++++++++++++ > 2 files changed, 21 insertions(+), 2 deletions(-) > > diff --git a/submodule.c b/submodule.c > index 6fcb606f7e..1302c11ddf 100644 > --- a/submodule.c > +++ b/submodule.c > @@ -543,6 +543,7 @@ static void show_submodule_header(struct diff_options *o, > struct commit **left, struct commit **right, > struct commit_list **merge_bases) > { > + struct repository *repo = sub ? sub : o->repo; > const char *message = NULL; > struct strbuf sb = STRBUF_INIT; > int fast_forward = 0, fast_backward = 0; > @@ -599,9 +600,9 @@ static void show_submodule_header(struct diff_options *o, > > output_header: > strbuf_addf(&sb, "Submodule %s ", path); > - strbuf_add_unique_abbrev(&sb, one, DEFAULT_ABBREV); > + strbuf_repo_add_unique_abbrev(&sb, repo, one, DEFAULT_ABBREV); > strbuf_addstr(&sb, (fast_backward || fast_forward) ? ".." : "..."); > - strbuf_add_unique_abbrev(&sb, two, DEFAULT_ABBREV); > + strbuf_repo_add_unique_abbrev(&sb, repo, two, DEFAULT_ABBREV); > if (message) > strbuf_addf(&sb, " %s\n", message); > else > diff --git a/t/t4041-diff-submodule-option.sh b/t/t4041-diff-submodule-option.sh > index 4dd4954260..e80472af32 100755 > --- a/t/t4041-diff-submodule-option.sh > +++ b/t/t4041-diff-submodule-option.sh > @@ -14,6 +14,24 @@ export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME > > . ./test-lib.sh > > +test_expect_success SHA1 'submodule commit abbreviation uses submodule object database' ' > + test_when_finished "rm -rf collision-super" && > + git init -q collision-super && > + git init -q collision-super/sm1 && > + printf "0\n1\n2\n3\n4\n5\n6\n7\n8\n9\n\nb1rwzyc3\n" >collision-super/sm1/a0blgqsjc && > + git -C collision-super/sm1 add a0blgqsjc && > + tree=$(git -C collision-super/sm1 write-tree) && > + commit1=$(GIT_AUTHOR_DATE="1112911993 -0700" GIT_COMMITTER_DATE="1112911993 -0700" git -C collision-super/sm1 commit-tree "$tree" -m a2onsxbvj) && > + commit2=$(printf "child\n" | GIT_AUTHOR_DATE="1112912053 -0700" GIT_COMMITTER_DATE="1112912053 -0700" git -C collision-super/sm1 commit-tree "$tree" -p "$commit1") && > + git -C collision-super/sm1 checkout -q "$commit2" && > + git -C collision-super update-index --add --cacheinfo 160000,"$commit1",sm1 && > + git -C collision-super commit -q -m "Add submodule" && > + git -C collision-super diff --submodule=log >actual && > + printf "Submodule sm1 0000000000e..%s:\n > child\n" \ > + "$(git -C collision-super/sm1 rev-parse --short "$commit2")" >expected && > + test_cmp expected actual > +' > + > # Test non-UTF-8 encoding in case iconv is available. > if test_have_prereq ICONV > then > -- > gitgitgadget > Hi Junio, Thanks for the suggestion. I've updated the t4041 test to use `test_oid_cache` with separate expected abbreviations for SHA-1 and SHA-256. I've also removed the SHA1-only prerequisite so that the test runs with both hash algorithms. I tested the updated test script using both configurations: - SHA-1: all 48 tests passed. - SHA-256: all 48 tests passed. I've updated the commit message, added the Signed-off-by trailer, and submitted the revised v4 patch series. The updated patch series is available here: https://lore.kernel.org/git/pull.2288.v4.git.1793648490.gitgitgadget@gmail.com/ Thanks for the suggestion and review. Regards, Srujith