From ba447e9cec47ca5b1cc8cfeae8ca90bc962c54fa Mon Sep 17 00:00:00 2001 From: Sam Bostock Date: Fri, 6 Feb 2026 19:16:22 +0000 Subject: merge-ours: drop USE_THE_REPOSITORY_VARIABLE The merge-ours built-in uses the `the_repository` global to access the repository. The project is moving away from this global in favor of the `repo` parameter that is passed to each built-in command. Since merge-ours is registered with RUN_SETUP, `repo` is guaranteed to be non-NULL and can be used directly. Drop the USE_THE_REPOSITORY_VARIABLE macro and use `repo` throughout. While at it, remove a stray double blank line between the #include block and the usage string. Signed-off-by: Sam Bostock Signed-off-by: Junio C Hamano --- builtin/merge-ours.c | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/builtin/merge-ours.c b/builtin/merge-ours.c index 97b8a792c7..2312e58ab3 100644 --- a/builtin/merge-ours.c +++ b/builtin/merge-ours.c @@ -8,20 +8,17 @@ * Pretend we resolved the heads, but declare our tree trumps everybody else. */ -#define USE_THE_REPOSITORY_VARIABLE - #include "git-compat-util.h" #include "builtin.h" #include "diff.h" - static const char builtin_merge_ours_usage[] = "git merge-ours ... -- HEAD ..."; int cmd_merge_ours(int argc, const char **argv, const char *prefix UNUSED, - struct repository *repo UNUSED) + struct repository *repo) { show_usage_if_asked(argc, argv, builtin_merge_ours_usage); @@ -30,9 +27,9 @@ int cmd_merge_ours(int argc, * commit. The index must match HEAD, or this merge cannot go * through. */ - if (repo_read_index(the_repository) < 0) + if (repo_read_index(repo) < 0) die_errno("read_cache failed"); - if (index_differs_from(the_repository, "HEAD", NULL, 0)) + if (index_differs_from(repo, "HEAD", NULL, 0)) return 2; return 0; } -- cgit v1.3 From fb1b786ebfab18b851ce1fa94d5063daf11f647f Mon Sep 17 00:00:00 2001 From: Sam Bostock Date: Fri, 6 Feb 2026 19:16:23 +0000 Subject: merge-ours: integrate with sparse-index The merge-ours built-in opens the index to compare it against HEAD. The machinery used to do this (i.e. run_diff_index()) is capable of working with a sparse index, but the start-up sequence of this command does not take the necessary steps, so we end up expanding the index fully before doing the comparison. In order to convince sparse-index.c:is_sparse_index_allowed() to return true, we need to: - Read basic configuration with git_default_config so that global variables like core_apply_sparse_checkout are populated. merge-ours currently does not read configuration at all. - Set command_requires_full_index to 0. With that, the command can work without expanding the index fully before doing its work. Signed-off-by: Sam Bostock Signed-off-by: Junio C Hamano --- builtin/merge-ours.c | 6 ++++++ t/t1092-sparse-checkout-compatibility.sh | 14 ++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/builtin/merge-ours.c b/builtin/merge-ours.c index 2312e58ab3..405b2989f7 100644 --- a/builtin/merge-ours.c +++ b/builtin/merge-ours.c @@ -10,6 +10,8 @@ #include "git-compat-util.h" #include "builtin.h" +#include "config.h" +#include "environment.h" #include "diff.h" static const char builtin_merge_ours_usage[] = @@ -22,6 +24,10 @@ int cmd_merge_ours(int argc, { show_usage_if_asked(argc, argv, builtin_merge_ours_usage); + repo_config(repo, git_default_config, NULL); + prepare_repo_settings(repo); + repo->settings.command_requires_full_index = 0; + /* * The contents of the current index becomes the tree we * commit. The index must match HEAD, or this merge cannot go diff --git a/t/t1092-sparse-checkout-compatibility.sh b/t/t1092-sparse-checkout-compatibility.sh index b0f691c151..d98cb4ac11 100755 --- a/t/t1092-sparse-checkout-compatibility.sh +++ b/t/t1092-sparse-checkout-compatibility.sh @@ -2559,4 +2559,18 @@ test_expect_success 'cat-file --batch' ' ensure_expanded cat-file --batch