From: "Elijah Newren via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Kristoffer Haugsbakk <kristofferhaugsbakk@fastmail.com>,
Patrick Steinhardt <ps@pks.im>, Elijah Newren <newren@gmail.com>,
Elijah Newren <newren@gmail.com>
Subject: [PATCH v2 0/6] Avoid the_repository in merge-ort and replay
Date: Fri, 20 Feb 2026 01:59:42 +0000 [thread overview]
Message-ID: <pull.2048.v2.git.1771552788.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2048.git.1771406115.gitgitgadget@gmail.com>
Changes since v1:
* Add a preparatory patch removing the_repository check from blob
prefetching in both merge-ort and diff*; it's no longer necessary
* Fix casing mismatch
* Simplify the hammer a bit based on the new first patch, but add some
simple comments explaining it
Remove explicit uses of the_repository and the_hash_algo from merge-ort, and
since this has now been done multiple times for both merge-ort and replay,
implement a small measure to prevent them from returning to either merge-ort
or replay.
See
https://lore.kernel.org/git/CABPp-BH7E1Bh2g0vR3T4NEsv34DvFQPzMuJSsqtOAaWY-fFCxg@mail.gmail.com/
and
https://lore.kernel.org/git/CABPp-BFuwvqiCTCCpoyT6em9_1-qrgPWHWhrufQ3UuZ+Kfkb6A@mail.gmail.com/
for recent discussions on these.
As noted in the comments on v1, I actually do not know why
prefetch_for_content_merges() needs to use the_repository. When I introduced
it back in 2bff554b23e8 (merge-ort: add prefetching for content merges,
2021-06-22), I was just looking at diffcore_std() and trying to mimic how it
did the prefetch, and it has such a comparison. If anyone knows why
diffcore_std() needs to compare against the_repository, I'd love to hear...
Series overview: Patches 1-3: Mostly mechanical removal of existing uses
Patches 4-5: Simple hammer to prevent the problem from returning
Elijah Newren (6):
merge,diff: remove the_repository check before prefetching blobs
merge-ort: pass repository to write_tree()
merge-ort: replace the_repository with opt->repo
merge-ort: replace the_hash_algo with opt->repo->hash_algo
merge-ort: prevent the_repository from coming back
replay: prevent the_repository from coming back
diff.c | 2 +-
diffcore-break.c | 2 +-
diffcore-rename.c | 4 +-
merge-ort.c | 94 +++++++++++++++++++++++++----------------------
replay.c | 6 +++
5 files changed, 61 insertions(+), 47 deletions(-)
base-commit: 73fd77805fc6406f31c36212846d9e2541d19321
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-2048%2Fnewren%2Favoid_the_repository-v2
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-2048/newren/avoid_the_repository-v2
Pull-Request: https://github.com/gitgitgadget/git/pull/2048
Range-diff vs v1:
-: ---------- > 1: 7155a0da6f merge,diff: remove the_repository check before prefetching blobs
1: 620c4ea38b = 2: 911cba991b merge-ort: pass repository to write_tree()
2: abba4bd762 ! 3: 68af47ed18 merge-ort: replace the_repository with opt->repo
@@ merge-ort.c: static void prefetch_for_content_merges(struct merge_options *opt,
struct string_list_item *e;
struct oid_array to_fetch = OID_ARRAY_INIT;
-- if (opt->repo != the_repository || !repo_has_promisor_remote(the_repository))
-+ if (opt->repo != the_repository || !repo_has_promisor_remote(opt->repo))
+- if (!repo_has_promisor_remote(the_repository))
++ if (!repo_has_promisor_remote(opt->repo))
return;
for (e = &plist->items[plist->nr-1]; e >= plist->items; --e) {
3: 36c2713ceb ! 4: bfa68716af merge-ort: replace the_hash_algo with opt->repo->hash_algo
@@ Metadata
## Commit message ##
merge-ort: replace the_hash_algo with opt->repo->hash_algo
+ We have a perfectly valid repository available and do not need to use
+ the_hash_algo (a shorthand for the_repository->hash_algo), so use the
+ known repository instead.
+
Signed-off-by: Elijah Newren <newren@gmail.com>
## merge-ort.c ##
4: 46c24e0d05 ! 5: 932d945c9b merge-ort: prevent the_repository from coming back
@@ Metadata
## Commit message ##
merge-ort: prevent the_repository from coming back
- There are two things preventing us from removing our usage of
- USE_THE_REPOSITORY_VARIABLE: one necessary use of the_repository in
- prefetch_for_content_merges(), and the use of DEFAULT_ABBREV. We have
- removed all other uses of the_repository in merge-ort before (multiple
- times), but without removing that definition, they keep coming back.
+ Due to the use of DEFAULT_ABBREV, we cannot get rid of our usage of
+ USE_THE_REPOSITORY_VARIABLE. However, we have removed all other uses of
+ the_repository in merge-ort a few times. But they keep coming back.
Define the_repository to make it a compilation error so that they don't
- come back any more, with a special carve-out for
- prefetch_for_content_merges().
+ come back any more.
Signed-off-by: Elijah Newren <newren@gmail.com>
@@ merge-ort.c
#include "unpack-trees.h"
#include "xdiff-interface.h"
++/*
++ * We technically need USE_THE_REPOSITORY_VARIABLE above for DEFAULT_ABBREV,
++ * but do not want more uses of the_repository. Prevent them.
++ *
++ * opt->repo is available; use it instead.
++ */
+#define the_repository DO_NOT_USE_THE_REPOSITORY
+
/*
* We have many arrays of size 3. Whenever we have such an array, the
* indices refer to one of the sides of the three-way merge. This is so
-@@ merge-ort.c: static int process_entry(struct merge_options *opt,
- return 0;
- }
-
-+#undef the_repository
-+
- static void prefetch_for_content_merges(struct merge_options *opt,
- struct string_list *plist)
- {
-@@ merge-ort.c: static void prefetch_for_content_merges(struct merge_options *opt,
- oid_array_clear(&to_fetch);
- }
-
-+#define the_repository DO_NOT_USE_the_repository
-+
- static int process_entries(struct merge_options *opt,
- struct object_id *result_oid)
- {
5: d75a71aef9 ! 6: 67db46f34f replay: prevent the_repository from coming back
@@ replay.c
#include "strmap.h"
#include "tree.h"
++/*
++ * We technically need USE_THE_REPOSITORY_VARIABLE for DEFAULT_ABBREV, but
++ * do not want to use the_repository.
++ */
+#define the_repository DO_NOT_USE_THE_REPOSITORY
+
static const char *short_commit_name(struct repository *repo,
--
gitgitgadget
next prev parent reply other threads:[~2026-02-20 1:59 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-18 9:15 [PATCH 0/5] Avoid the_repository in merge-ort and replay Elijah Newren via GitGitGadget
2026-02-18 9:15 ` [PATCH 1/5] merge-ort: pass repository to write_tree() Elijah Newren via GitGitGadget
2026-02-18 9:15 ` [PATCH 2/5] merge-ort: replace the_repository with opt->repo Elijah Newren via GitGitGadget
2026-02-18 9:15 ` [PATCH 3/5] merge-ort: replace the_hash_algo with opt->repo->hash_algo Elijah Newren via GitGitGadget
2026-02-19 15:27 ` Patrick Steinhardt
2026-02-19 17:54 ` Elijah Newren
2026-02-18 9:15 ` [PATCH 4/5] merge-ort: prevent the_repository from coming back Elijah Newren via GitGitGadget
2026-02-19 9:48 ` Kristoffer Haugsbakk
2026-02-19 16:00 ` Elijah Newren
2026-02-19 15:27 ` Patrick Steinhardt
2026-02-19 18:42 ` Elijah Newren
2026-02-19 20:30 ` Junio C Hamano
2026-02-19 20:53 ` Elijah Newren
2026-02-18 9:15 ` [PATCH 5/5] replay: " Elijah Newren via GitGitGadget
2026-02-19 15:27 ` Patrick Steinhardt
2026-02-20 1:59 ` Elijah Newren via GitGitGadget [this message]
2026-02-20 1:59 ` [PATCH v2 1/6] merge,diff: remove the_repository check before prefetching blobs Elijah Newren via GitGitGadget
2026-02-20 8:19 ` Patrick Steinhardt
2026-02-20 18:51 ` Elijah Newren
2026-02-20 1:59 ` [PATCH v2 2/6] merge-ort: pass repository to write_tree() Elijah Newren via GitGitGadget
2026-02-20 1:59 ` [PATCH v2 3/6] merge-ort: replace the_repository with opt->repo Elijah Newren via GitGitGadget
2026-02-20 1:59 ` [PATCH v2 4/6] merge-ort: replace the_hash_algo with opt->repo->hash_algo Elijah Newren via GitGitGadget
2026-02-20 1:59 ` [PATCH v2 5/6] merge-ort: prevent the_repository from coming back Elijah Newren via GitGitGadget
2026-02-20 1:59 ` [PATCH v2 6/6] replay: " Elijah Newren via GitGitGadget
2026-02-21 23:59 ` [PATCH v3 0/6] Avoid the_repository in merge-ort and replay Elijah Newren via GitGitGadget
2026-02-21 23:59 ` [PATCH v3 1/6] merge,diff: remove the_repository check before prefetching blobs Elijah Newren via GitGitGadget
2026-02-21 23:59 ` [PATCH v3 2/6] merge-ort: pass repository to write_tree() Elijah Newren via GitGitGadget
2026-02-21 23:59 ` [PATCH v3 3/6] merge-ort: replace the_repository with opt->repo Elijah Newren via GitGitGadget
2026-02-21 23:59 ` [PATCH v3 4/6] merge-ort: replace the_hash_algo with opt->repo->hash_algo Elijah Newren via GitGitGadget
2026-02-21 23:59 ` [PATCH v3 5/6] merge-ort: prevent the_repository from coming back Elijah Newren via GitGitGadget
2026-02-22 2:38 ` [PATCH v3 0/6] Avoid the_repository in merge-ort and replay Junio C Hamano
2026-02-22 5:03 ` Elijah Newren
2026-02-23 0:42 ` Derrick Stolee
2026-02-24 10:00 ` Patrick Steinhardt
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=pull.2048.v2.git.1771552788.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=kristofferhaugsbakk@fastmail.com \
--cc=newren@gmail.com \
--cc=ps@pks.im \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox