From: "Victoria Dye via GitGitGadget" <gitgitgadget@gmail.com> To: git@vger.kernel.org Cc: derrickstolee@github.com, newren@gmail.com, gitster@pobox.com, Victoria Dye <vdye@github.com>, Victoria Dye <vdye@github.com> Subject: [PATCH 5/7] merge-recursive: add merge function arg to 'merge_recursive_generic' Date: Mon, 25 Apr 2022 17:49:15 +0000 [thread overview] Message-ID: <80c25c7587484ca32afcfd6cc054eab78dd1348a.1650908958.git.gitgitgadget@gmail.com> (raw) In-Reply-To: <pull.1171.git.1650908957.gitgitgadget@gmail.com> From: Victoria Dye <vdye@github.com> Replace the hardcoded 'merge_recursive()' function used by the 'merge_recursive_generic()' with a caller-specific merge function. This will allow us to use 'merge_ort_recursive()' (and therefore avoid the index expansion of 'merge_recursive()') in commands that perform merges with 'merge_recursive_generic()', such as 'git stash pop'. Note that this patch is strictly a refactor; all callers still use 'merge_recursive()', and any changing to 'merge_ort_recursive()' will be done in a later commit. Signed-off-by: Victoria Dye <vdye@github.com> --- builtin/am.c | 2 +- builtin/merge-recursive.c | 2 +- builtin/stash.c | 2 +- merge-ort.c | 3 ++- merge-recursive.c | 4 ++-- merge-recursive.h | 9 ++++++++- 6 files changed, 15 insertions(+), 7 deletions(-) diff --git a/builtin/am.c b/builtin/am.c index 0f4111bafa0..6d01185d122 100644 --- a/builtin/am.c +++ b/builtin/am.c @@ -1614,7 +1614,7 @@ static int fall_back_threeway(const struct am_state *state, const char *index_pa if (state->quiet) o.verbosity = 0; - if (merge_recursive_generic(&o, &our_tree, &their_tree, 1, bases, &result)) { + if (merge_recursive_generic(&o, &our_tree, &their_tree, 1, bases, merge_recursive, &result)) { repo_rerere(the_repository, state->allow_rerere_autoupdate); free(their_tree_name); return error(_("Failed to merge in the changes.")); diff --git a/builtin/merge-recursive.c b/builtin/merge-recursive.c index b9acbf5d342..687ed1e527b 100644 --- a/builtin/merge-recursive.c +++ b/builtin/merge-recursive.c @@ -81,7 +81,7 @@ int cmd_merge_recursive(int argc, const char **argv, const char *prefix) if (o.verbosity >= 3) printf(_("Merging %s with %s\n"), o.branch1, o.branch2); - failed = merge_recursive_generic(&o, &h1, &h2, bases_count, bases, &result); + failed = merge_recursive_generic(&o, &h1, &h2, bases_count, bases, merge_recursive, &result); free(better1); free(better2); diff --git a/builtin/stash.c b/builtin/stash.c index 1bfba532044..16171eb1dab 100644 --- a/builtin/stash.c +++ b/builtin/stash.c @@ -554,7 +554,7 @@ static int do_apply_stash(const char *prefix, struct stash_info *info, bases[0] = &info->b_tree; ret = merge_recursive_generic(&o, &c_tree, &info->w_tree, 1, bases, - &result); + merge_recursive, &result); if (ret) { rerere(0); diff --git a/merge-ort.c b/merge-ort.c index 8545354dafd..4bccdfcf355 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -4737,7 +4737,8 @@ void merge_incore_recursive(struct merge_options *opt, trace2_region_enter("merge", "incore_recursive", opt->repo); /* We set the ancestor label based on the merge_bases */ - assert(opt->ancestor == NULL); + assert(opt->ancestor == NULL || + !strcmp(opt->ancestor, "constructed merge base")); trace2_region_enter("merge", "merge_start", opt->repo); merge_start(opt, result); diff --git a/merge-recursive.c b/merge-recursive.c index 1ee6364e8b1..2088f5c5fb3 100644 --- a/merge-recursive.c +++ b/merge-recursive.c @@ -3806,6 +3806,7 @@ int merge_recursive_generic(struct merge_options *opt, const struct object_id *merge, int num_merge_bases, const struct object_id **merge_bases, + recursive_merge_fn_t merge_fn, struct commit **result) { int clean; @@ -3829,8 +3830,7 @@ int merge_recursive_generic(struct merge_options *opt, } repo_hold_locked_index(opt->repo, &lock, LOCK_DIE_ON_ERROR); - clean = merge_recursive(opt, head_commit, next_commit, ca, - result); + clean = merge_fn(opt, head_commit, next_commit, ca, result); if (clean < 0) { rollback_lock_file(&lock); return clean; diff --git a/merge-recursive.h b/merge-recursive.h index b88000e3c25..6a21f2da538 100644 --- a/merge-recursive.h +++ b/merge-recursive.h @@ -53,6 +53,12 @@ struct merge_options { struct merge_options_internal *priv; }; +typedef int (*recursive_merge_fn_t)(struct merge_options *opt, + struct commit *h1, + struct commit *h2, + struct commit_list *merge_bases, + struct commit **result); + void init_merge_options(struct merge_options *opt, struct repository *repo); /* parse the option in s and update the relevant field of opt */ @@ -105,7 +111,7 @@ int merge_recursive(struct merge_options *opt, /* * merge_recursive_generic can operate on trees instead of commits, by - * wrapping the trees into virtual commits, and calling merge_recursive(). + * wrapping the trees into virtual commits, and calling the provided merge_fn. * It also writes out the in-memory index to disk if the merge is successful. * * Outputs: @@ -120,6 +126,7 @@ int merge_recursive_generic(struct merge_options *opt, const struct object_id *merge, int num_merge_bases, const struct object_id **merge_bases, + recursive_merge_fn_t merge_fn, struct commit **result); #endif -- gitgitgadget
next prev parent reply other threads:[~2022-04-25 17:50 UTC|newest] Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-04-25 17:49 [PATCH 0/7] Sparse index: integrate with 'git stash' Victoria Dye via GitGitGadget 2022-04-25 17:49 ` [PATCH 1/7] stash: expand sparse-checkout compatibility testing Victoria Dye via GitGitGadget 2022-04-25 17:49 ` [PATCH 2/7] stash: integrate with sparse index Victoria Dye via GitGitGadget 2022-04-25 21:34 ` Junio C Hamano 2022-04-26 12:53 ` Derrick Stolee 2022-04-26 15:26 ` Victoria Dye 2022-04-26 16:21 ` Junio C Hamano 2022-04-25 17:49 ` [PATCH 3/7] sparse-index: expose 'is_sparse_index_allowed()' Victoria Dye via GitGitGadget 2022-04-25 17:49 ` [PATCH 4/7] read-cache: set sparsity when index is new Victoria Dye via GitGitGadget 2022-04-25 21:35 ` Junio C Hamano 2022-04-25 17:49 ` Victoria Dye via GitGitGadget [this message] 2022-04-25 21:38 ` [PATCH 5/7] merge-recursive: add merge function arg to 'merge_recursive_generic' Junio C Hamano 2022-04-26 12:57 ` Derrick Stolee 2022-04-25 17:49 ` [PATCH 6/7] stash: merge applied stash with merge-ort Victoria Dye via GitGitGadget 2022-04-26 13:02 ` Derrick Stolee 2022-04-25 17:49 ` [PATCH 7/7] unpack-trees: preserve index sparsity Victoria Dye via GitGitGadget 2022-04-26 12:49 ` [PATCH 0/7] Sparse index: integrate with 'git stash' Derrick Stolee 2022-04-26 13:09 ` Derrick Stolee 2022-04-27 18:16 ` [PATCH v2 " Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 1/7] stash: expand sparse-checkout compatibility testing Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 2/7] stash: integrate with sparse index Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 3/7] sparse-index: expose 'is_sparse_index_allowed()' Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 4/7] read-cache: set sparsity when index is new Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 5/7] merge-recursive: add merge function arg to 'merge_recursive_generic' Victoria Dye via GitGitGadget 2022-05-06 7:23 ` Elijah Newren 2022-05-09 19:24 ` Victoria Dye 2022-05-10 7:06 ` Elijah Newren 2022-04-27 18:16 ` [PATCH v2 6/7] stash: merge applied stash with merge-ort Victoria Dye via GitGitGadget 2022-04-27 18:16 ` [PATCH v2 7/7] unpack-trees: preserve index sparsity Victoria Dye via GitGitGadget 2022-05-06 7:46 ` [PATCH v2 0/7] Sparse index: integrate with 'git stash' Elijah Newren 2022-05-10 23:32 ` [PATCH v3 0/6] " Victoria Dye via GitGitGadget 2022-05-10 23:32 ` [PATCH v3 1/6] stash: expand sparse-checkout compatibility testing Victoria Dye via GitGitGadget 2022-05-10 23:32 ` [PATCH v3 2/6] stash: integrate with sparse index Victoria Dye via GitGitGadget 2022-05-10 23:32 ` [PATCH v3 3/6] sparse-index: expose 'is_sparse_index_allowed()' Victoria Dye via GitGitGadget 2022-05-10 23:32 ` [PATCH v3 4/6] read-cache: set sparsity when index is new Victoria Dye via GitGitGadget 2022-05-10 23:32 ` [PATCH v3 5/6] stash: apply stash using 'merge_ort_nonrecursive()' Victoria Dye via GitGitGadget 2022-05-11 0:26 ` Junio C Hamano 2022-05-12 1:01 ` Jonathan Tan 2022-05-12 14:52 ` Elijah Newren 2022-05-12 16:55 ` Jonathan Tan 2022-05-12 14:51 ` Elijah Newren 2022-05-10 23:32 ` [PATCH v3 6/6] unpack-trees: preserve index sparsity Victoria Dye via GitGitGadget
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 List information: http://vger.kernel.org/majordomo-info.html * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=80c25c7587484ca32afcfd6cc054eab78dd1348a.1650908958.git.gitgitgadget@gmail.com \ --to=gitgitgadget@gmail.com \ --cc=derrickstolee@github.com \ --cc=git@vger.kernel.org \ --cc=gitster@pobox.com \ --cc=newren@gmail.com \ --cc=vdye@github.com \ --subject='Re: [PATCH 5/7] merge-recursive: add merge function arg to '\''merge_recursive_generic'\''' \ /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
Code repositories for project(s) associated with this inbox: https://80x24.org/mirrors/git.git This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).