mirror of
https://github.com/git/git.git
synced 2026-03-04 14:37:35 +01:00
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 <sam@sambostock.ca> Signed-off-by: Junio C Hamano <gitster@pobox.com>
42 lines
1.0 KiB
C
42 lines
1.0 KiB
C
/*
|
|
* Implementation of git-merge-ours.sh as builtin
|
|
*
|
|
* Copyright (c) 2007 Thomas Harning Jr
|
|
* Original:
|
|
* Original Copyright (c) 2005 Junio C Hamano
|
|
*
|
|
* Pretend we resolved the heads, but declare our tree trumps everybody else.
|
|
*/
|
|
|
|
#include "git-compat-util.h"
|
|
#include "builtin.h"
|
|
#include "config.h"
|
|
#include "environment.h"
|
|
#include "diff.h"
|
|
|
|
static const char builtin_merge_ours_usage[] =
|
|
"git merge-ours <base>... -- HEAD <remote>...";
|
|
|
|
int cmd_merge_ours(int argc,
|
|
const char **argv,
|
|
const char *prefix UNUSED,
|
|
struct repository *repo)
|
|
{
|
|
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
|
|
* through.
|
|
*/
|
|
if (repo_read_index(repo) < 0)
|
|
die_errno("read_cache failed");
|
|
if (index_differs_from(repo, "HEAD", NULL, 0))
|
|
return 2;
|
|
return 0;
|
|
}
|