In a previous commit, the ORT merge backend learned how to use the bulk-checkin mechanism to emit a single pack containing any new objects created during the merge. This functionality was implemented by setting up a new ODB transaction, and finalizing it at the end of the merge via `process_entries()`. In a future commit, we will extend this functionality to the new `git replay` command, which needs to see objects from previous steps in order to replay each commit. As a step towards implementing this, teach the ORT backend to flush the ODB transaction at the end of each step in `process_entries()`, and then finalize the result with `end_odb_transaction()` when calling `merge_finalize()`. For normal `merge-tree --write-pack` invocations, this produces no functional change: the pack is written out at the end of `process_entries()`, and then the `end_odb_transaction()` call is a noop. Signed-off-by: Taylor Blau <me@xxxxxxxxxxxx> --- merge-ort.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/merge-ort.c b/merge-ort.c index 523577d71e..7b352451cc 100644 --- a/merge-ort.c +++ b/merge-ort.c @@ -4354,7 +4354,7 @@ static int process_entries(struct merge_options *opt, ret = -1; if (opt->write_pack) - end_odb_transaction(); + flush_odb_transaction(); cleanup: string_list_clear(&plist, 0); @@ -4726,6 +4726,9 @@ void merge_switch_to_result(struct merge_options *opt, void merge_finalize(struct merge_options *opt, struct merge_result *result) { + if (opt->write_pack) + end_odb_transaction(); + if (opt->renormalize) git_attr_set_direction(GIT_ATTR_CHECKIN); assert(opt->priv == NULL); -- 2.42.0.446.g0b9ef90488