aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2026-02-09 20:24:52 +0100
committerJunio C Hamano <gitster@pobox.com>2026-02-10 08:16:14 -0800
commitaf5706f033466b2a4f17d83168bf0bd021197c1d (patch)
tree4a32d8a3b5aa0716ab6ec197e2264213862865a2
parent67ad42147a7acc2af6074753ebd03d904476118f (diff)
downloadgit-af5706f033466b2a4f17d83168bf0bd021197c1d.tar.xz
xdiff-interface: stop using the_repository
Use the algorithm-agnostic is_null_oid() and push the dependency of read_mmblob() on the_repository->objects to its callers. This allows it to be used with arbitrary object databases. Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--apply.c6
-rw-r--r--builtin/checkout.c6
-rw-r--r--builtin/merge-file.c2
-rw-r--r--merge-ort.c6
-rw-r--r--notes-merge.c6
-rw-r--r--xdiff-interface.c8
-rw-r--r--xdiff-interface.h5
7 files changed, 21 insertions, 18 deletions
diff --git a/apply.c b/apply.c
index 3de4aa4d2e..ea90ed16be 100644
--- a/apply.c
+++ b/apply.c
@@ -3568,9 +3568,9 @@ static int three_way_merge(struct apply_state *state,
else if (oideq(base, theirs) || oideq(ours, theirs))
return resolve_to(image, ours);
- read_mmblob(&base_file, base);
- read_mmblob(&our_file, ours);
- read_mmblob(&their_file, theirs);
+ read_mmblob(&base_file, the_repository->objects, base);
+ read_mmblob(&our_file, the_repository->objects, ours);
+ read_mmblob(&their_file, the_repository->objects, theirs);
merge_opts.variant = state->merge_variant;
status = ll_merge(&result, path,
&base_file, "base",
diff --git a/builtin/checkout.c b/builtin/checkout.c
index 0ba4f03f2e..f7b313816e 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -294,9 +294,9 @@ static int checkout_merged(int pos, const struct checkout *state,
if (is_null_oid(&threeway[1]) || is_null_oid(&threeway[2]))
return error(_("path '%s' does not have necessary versions"), path);
- read_mmblob(&ancestor, &threeway[0]);
- read_mmblob(&ours, &threeway[1]);
- read_mmblob(&theirs, &threeway[2]);
+ read_mmblob(&ancestor, the_repository->objects, &threeway[0]);
+ read_mmblob(&ours, the_repository->objects, &threeway[1]);
+ read_mmblob(&theirs, the_repository->objects, &threeway[2]);
repo_config_get_bool(the_repository, "merge.renormalize", &renormalize);
ll_opts.renormalize = renormalize;
diff --git a/builtin/merge-file.c b/builtin/merge-file.c
index 46775d0c79..c5dbd028fd 100644
--- a/builtin/merge-file.c
+++ b/builtin/merge-file.c
@@ -128,7 +128,7 @@ int cmd_merge_file(int argc,
ret = error(_("object '%s' does not exist"),
argv[i]);
else if (!oideq(&oid, the_hash_algo->empty_blob))
- read_mmblob(mmf, &oid);
+ read_mmblob(mmf, the_repository->objects, &oid);
else
read_mmfile(mmf, "/dev/null");
} else if (read_mmfile(mmf, fname)) {
diff --git a/merge-ort.c b/merge-ort.c
index e80e4f735a..a4103d56ed 100644
--- a/merge-ort.c
+++ b/merge-ort.c
@@ -2136,9 +2136,9 @@ static int merge_3way(struct merge_options *opt,
name2 = mkpathdup("%s:%s", opt->branch2, pathnames[2]);
}
- read_mmblob(&orig, o);
- read_mmblob(&src1, a);
- read_mmblob(&src2, b);
+ read_mmblob(&orig, the_repository->objects, o);
+ read_mmblob(&src1, the_repository->objects, a);
+ read_mmblob(&src2, the_repository->objects, b);
merge_status = ll_merge(result_buf, path, &orig, base,
&src1, name1, &src2, name2,
diff --git a/notes-merge.c b/notes-merge.c
index 586939939f..47e9d7580a 100644
--- a/notes-merge.c
+++ b/notes-merge.c
@@ -359,9 +359,9 @@ static int ll_merge_in_worktree(struct notes_merge_options *o,
mmfile_t base, local, remote;
enum ll_merge_result status;
- read_mmblob(&base, &p->base);
- read_mmblob(&local, &p->local);
- read_mmblob(&remote, &p->remote);
+ read_mmblob(&base, the_repository->objects, &p->base);
+ read_mmblob(&local, the_repository->objects, &p->local);
+ read_mmblob(&remote, the_repository->objects, &p->remote);
status = ll_merge(&result_buf, oid_to_hex(&p->obj), &base, NULL,
&local, o->local_ref, &remote, o->remote_ref,
diff --git a/xdiff-interface.c b/xdiff-interface.c
index 1a35556380..f043330f2a 100644
--- a/xdiff-interface.c
+++ b/xdiff-interface.c
@@ -1,4 +1,3 @@
-#define USE_THE_REPOSITORY_VARIABLE
#define DISABLE_SIGN_COMPARE_WARNINGS
#include "git-compat-util.h"
@@ -177,18 +176,19 @@ int read_mmfile(mmfile_t *ptr, const char *filename)
return 0;
}
-void read_mmblob(mmfile_t *ptr, const struct object_id *oid)
+void read_mmblob(mmfile_t *ptr, struct object_database *odb,
+ const struct object_id *oid)
{
unsigned long size;
enum object_type type;
- if (oideq(oid, null_oid(the_hash_algo))) {
+ if (is_null_oid(oid)) {
ptr->ptr = xstrdup("");
ptr->size = 0;
return;
}
- ptr->ptr = odb_read_object(the_repository->objects, oid, &type, &size);
+ ptr->ptr = odb_read_object(odb, oid, &type, &size);
if (!ptr->ptr || type != OBJ_BLOB)
die("unable to read blob object %s", oid_to_hex(oid));
ptr->size = size;
diff --git a/xdiff-interface.h b/xdiff-interface.h
index dfc55daddf..fbc4ceec40 100644
--- a/xdiff-interface.h
+++ b/xdiff-interface.h
@@ -4,6 +4,8 @@
#include "hash.h"
#include "xdiff/xdiff.h"
+struct object_database;
+
/*
* xdiff isn't equipped to handle content over a gigabyte;
* we make the cutoff 1GB - 1MB to give some breathing
@@ -45,7 +47,8 @@ int xdi_diff_outf(mmfile_t *mf1, mmfile_t *mf2,
void *consume_callback_data,
xpparam_t const *xpp, xdemitconf_t const *xecfg);
int read_mmfile(mmfile_t *ptr, const char *filename);
-void read_mmblob(mmfile_t *ptr, const struct object_id *oid);
+void read_mmblob(mmfile_t *ptr, struct object_database *odb,
+ const struct object_id *oid);
int buffer_is_binary(const char *ptr, unsigned long size);
void xdiff_set_find_func(xdemitconf_t *xecfg, const char *line, int cflags);