merge(3p/git): Merge git upstream at v2.26.2
This commit is contained in:
commit
5229c9b232
1006 changed files with 149006 additions and 60819 deletions
40
third_party/git/builtin/merge.c
vendored
40
third_party/git/builtin/merge.c
vendored
|
@ -62,6 +62,7 @@ static int show_diffstat = 1, shortlog_len = -1, squash;
|
|||
static int option_commit = -1;
|
||||
static int option_edit = -1;
|
||||
static int allow_trivial = 1, have_message, verify_signatures;
|
||||
static int check_trust_level = 1;
|
||||
static int overwrite_ignore = 1;
|
||||
static struct strbuf merge_msg = STRBUF_INIT;
|
||||
static struct strategy **use_strategies;
|
||||
|
@ -81,7 +82,7 @@ static int show_progress = -1;
|
|||
static int default_to_upstream = 1;
|
||||
static int signoff;
|
||||
static const char *sign_commit;
|
||||
static int verify_msg = 1;
|
||||
static int no_verify;
|
||||
|
||||
static struct strategy all_strategy[] = {
|
||||
{ "recursive", DEFAULT_TWOHEAD | NO_TRIVIAL },
|
||||
|
@ -287,7 +288,7 @@ static struct option builtin_merge_options[] = {
|
|||
N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
|
||||
OPT_BOOL(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")),
|
||||
OPT_BOOL(0, "signoff", &signoff, N_("add Signed-off-by:")),
|
||||
OPT_BOOL(0, "verify", &verify_msg, N_("verify commit-msg hook")),
|
||||
OPT_BOOL(0, "no-verify", &no_verify, N_("bypass pre-merge-commit and commit-msg hooks")),
|
||||
OPT_END()
|
||||
};
|
||||
|
||||
|
@ -631,6 +632,8 @@ static int git_merge_config(const char *k, const char *v, void *cb)
|
|||
} else if (!strcmp(k, "commit.gpgsign")) {
|
||||
sign_commit = git_config_bool(k, v) ? "" : NULL;
|
||||
return 0;
|
||||
} else if (!strcmp(k, "gpg.mintrustlevel")) {
|
||||
check_trust_level = 0;
|
||||
}
|
||||
|
||||
status = fmt_merge_msg_config(k, v, cb);
|
||||
|
@ -688,16 +691,13 @@ static int try_merge_strategy(const char *strategy, struct commit_list *common,
|
|||
struct commit_list *remoteheads,
|
||||
struct commit *head)
|
||||
{
|
||||
struct lock_file lock = LOCK_INIT;
|
||||
const char *head_arg = "HEAD";
|
||||
|
||||
hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
|
||||
refresh_cache(REFRESH_QUIET);
|
||||
if (write_locked_index(&the_index, &lock,
|
||||
COMMIT_LOCK | SKIP_IF_UNCHANGED))
|
||||
if (refresh_and_write_cache(REFRESH_QUIET, SKIP_IF_UNCHANGED, 0) < 0)
|
||||
return error(_("Unable to write index."));
|
||||
|
||||
if (!strcmp(strategy, "recursive") || !strcmp(strategy, "subtree")) {
|
||||
struct lock_file lock = LOCK_INIT;
|
||||
int clean, x;
|
||||
struct commit *result;
|
||||
struct commit_list *reversed = NULL;
|
||||
|
@ -816,6 +816,18 @@ static void write_merge_heads(struct commit_list *);
|
|||
static void prepare_to_commit(struct commit_list *remoteheads)
|
||||
{
|
||||
struct strbuf msg = STRBUF_INIT;
|
||||
const char *index_file = get_index_file();
|
||||
|
||||
if (!no_verify && run_commit_hook(0 < option_edit, index_file, "pre-merge-commit", NULL))
|
||||
abort_commit(remoteheads, NULL);
|
||||
/*
|
||||
* Re-read the index as pre-merge-commit hook could have updated it,
|
||||
* and write it out as a tree. We must do this before we invoke
|
||||
* the editor and after we invoke run_status above.
|
||||
*/
|
||||
if (find_hook("pre-merge-commit"))
|
||||
discard_cache();
|
||||
read_cache_from(index_file);
|
||||
strbuf_addbuf(&msg, &merge_msg);
|
||||
if (squash)
|
||||
BUG("the control must not reach here under --squash");
|
||||
|
@ -842,7 +854,7 @@ static void prepare_to_commit(struct commit_list *remoteheads)
|
|||
abort_commit(remoteheads, NULL);
|
||||
}
|
||||
|
||||
if (verify_msg && run_commit_hook(0 < option_edit, get_index_file(),
|
||||
if (!no_verify && run_commit_hook(0 < option_edit, get_index_file(),
|
||||
"commit-msg",
|
||||
git_path_merge_msg(the_repository), NULL))
|
||||
abort_commit(remoteheads, NULL);
|
||||
|
@ -860,12 +872,8 @@ static int merge_trivial(struct commit *head, struct commit_list *remoteheads)
|
|||
{
|
||||
struct object_id result_tree, result_commit;
|
||||
struct commit_list *parents, **pptr = &parents;
|
||||
struct lock_file lock = LOCK_INIT;
|
||||
|
||||
hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
|
||||
refresh_cache(REFRESH_QUIET);
|
||||
if (write_locked_index(&the_index, &lock,
|
||||
COMMIT_LOCK | SKIP_IF_UNCHANGED))
|
||||
if (refresh_and_write_cache(REFRESH_QUIET, SKIP_IF_UNCHANGED, 0) < 0)
|
||||
return error(_("Unable to write index."));
|
||||
|
||||
write_tree_trivial(&result_tree);
|
||||
|
@ -1392,7 +1400,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
|||
die(_("Can merge only exactly one commit into empty head"));
|
||||
|
||||
if (verify_signatures)
|
||||
verify_merge_signature(remoteheads->item, verbosity);
|
||||
verify_merge_signature(remoteheads->item, verbosity,
|
||||
check_trust_level);
|
||||
|
||||
remote_head_oid = &remoteheads->item->object.oid;
|
||||
read_empty(remote_head_oid, 0);
|
||||
|
@ -1415,7 +1424,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
|
|||
|
||||
if (verify_signatures) {
|
||||
for (p = remoteheads; p; p = p->next) {
|
||||
verify_merge_signature(p->item, verbosity);
|
||||
verify_merge_signature(p->item, verbosity,
|
||||
check_trust_level);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue