From: Srujith Poojary Date: Sat, 31 Oct 2026 19:37:50 GMT Subject: Re: [PATCH v2] Submodule: use the submodule repository to abbreviate commits Message-ID: In-Reply-To: On Sun, Nov 1, 2026 at 12:39 AM Okhuomon Ajayi wrote: > > Hi Srujith, > > On Sat, Oct 31, 2026 at 7:57 PM Srujith A Poojary via GitGitGadget > wrote: > > + struct repository *repo = sub ? sub : o->repo; > > Thanks, v2 looks good to me. > > > Submodule: use the submodule repository to abbreviate commits > > One small nit: "git log --no-merges submodule.c" shows the area is > always written in lowercase ("submodule:"), so "submodule: use the > submodule repository to abbreviate commits" would match. > > Thanks, > Okhuomon > > On Sat, Oct 31, 2026 at 7:57 PM 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 > > --- > > [Outreachy PATCH] t4041: use submodule repository for commit > > abbreviations > > > > Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2288%2Fpoojarysrujith%2Fmicroproject-git-libification-v2 > > Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2288/poojarysrujith/microproject-git-libification-v2 > > Pull-Request: https://github.com/gitgitgadget/git/pull/2288 > > > > Range-diff vs v1: > > > > 1: 7b2af1b46a ! 1: 3133cd3017 [Outreachy PATCH] t4041: use submodule repository for commit abbreviations > > @@ Metadata > > Author: Srujith A Poojary > > > > ## Commit message ## > > - [Outreachy PATCH] t4041: use submodule repository for commit abbreviations > > + Submodule: use the submodule repository to abbreviate commits > > > > - Use the submodule repository when abbreviating commit IDs in > > - submodule diff headers, so uniqueness is checked against the > > - correct object database. > > + 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 ## > > @@ submodule.c: 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; > > +@@ submodule.c: 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); > > -+ if (sub) > > -+ strbuf_repo_add_unique_abbrev(&sb, sub, one, DEFAULT_ABBREV); > > -+ else > > -+ 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); > > -+ if (sub) > > -+ strbuf_repo_add_unique_abbrev(&sb, sub, two, DEFAULT_ABBREV); > > -+ else > > -+ 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 > > > > > > 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 > > > > base-commit: 50fe5cc63f9cd6e89b87a2c9ccf96a444f4cfdb7 > > -- > > gitgitgadget Hi Okhuomon, Thanks for pointing that out. I've corrected the subject to use lowercase `submodule` and submitted v3. Regards, Srujith > >