diff options
| author | Elijah Newren <newren@gmail.com> | 2024-06-19 03:00:13 +0000 |
|---|---|---|
| committer | Junio C Hamano <gitster@pobox.com> | 2024-06-20 10:35:24 -0700 |
| commit | e79bdb426c7033cf431cd5cb628196fd19303da0 (patch) | |
| tree | 90e92e38f574cb23eeae7ca6c396bad62bda377a /merge-ort.c | |
| parent | d63586cb314731c851f28e14fc8012988467e2da (diff) | |
| download | git-e79bdb426c7033cf431cd5cb628196fd19303da0.tar.gz | |
merge-ort: extract handling of priv member into reusable function
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>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'merge-ort.c')
| -rw-r--r-- | merge-ort.c | 27 |
1 files changed, 22 insertions, 5 deletions
diff --git a/merge-ort.c b/merge-ort.c index eaede6cead..700ddfccb9 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 @@ redo: /* 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); } /* |
