[PATCH v2 1/7] merge-ort: extract handling of priv member into reusable function
- From
Elijah Newren via GitGitGadget <gitgitgadget@gmail.com>
- Date
- Jun 19, 2024, 03:00 UTC
- Message-ID
- <5c50c0b3aadbefc7973a2e8d77890808c95875d6.1718766019.git.gitgitgadget@gmail.com>
- In-Reply-To
- <pull.1748.v2.git.1718766019.gitgitgadget@gmail.com>
From: Elijah Newren <newren@gmail.com>
In preparation for a subsequent commit which will ensure we do not forget to maintain our invariants for the priv member in error codepaths, extract the necessary functionality out into a separate function. This change is cosmetic at this point, and introduces no changes beyond an extra assertion sanity check.
Signed-off-by: Elijah Newren <newren@gmail.com> --- merge-ort.c | 27 ++++++++++++++++++++++----- 1 file changed, 22 insertions(+), 5 deletions(-)
diff --git a/merge-ort.c b/merge-ort.c index eaede6cead9..700ddfccb90 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -5000,6 +5000,26 @@ static void merge_check_renames_reusable(struct merge_result *result, /*** Function Grouping: merge_incore_*() and their internal variants ***/ +static void move_opt_priv_to_result_priv(struct merge_options *opt, + struct merge_result *result) +{ + /* + * opt->priv and result->priv are a bit weird. opt->priv contains + * information that we can re-use in subsequent merge operations to + * enable our cached renames optimization. The best way to provide + * that to subsequent merges is putting it in result->priv. + * However, putting it directly there would mean retrofitting lots + * of functions in this file to also take a merge_result pointer, + * which is ugly and annoying. So, we just make sure at the end of + * the merge (the outer merge if there are internal recursive ones) + * to move it. + */ + assert(opt->priv && !result->priv); + result->priv = opt->priv; + result->_properly_initialized = RESULT_INITIALIZED; + opt->priv = NULL; +} + /* * Originally from merge_trees_internal(); heavily adapted, though. */ @@ -5060,11 +5080,8 @@ static void merge_ort_nonrecursive_internal(struct merge_options *opt, /* existence of conflicted entries implies unclean */ result->clean &= strmap_empty(&opt->priv->conflicted); } - if (!opt->priv->call_depth) { - result->priv = opt->priv; - result->_properly_initialized = RESULT_INITIALIZED; - opt->priv = NULL; - } + if (!opt->priv->call_depth) + move_opt_priv_to_result_priv(opt, result); } /*
-- gitgitgadget