Skip to content

Commit ea0af2f

Browse files
To1negitster
authored andcommitted
replay: refactor enum replay_mode into a bool
In 2760ee4 (replay: add --revert mode to reverse commit changes, 2026-03-26) the enum `replay_mode` was introduced. This has two possible values: - The value `REPLAY_MODE_REVERT` is used when option `--revert` is passed to git-replay(1). When using this value the commits are processed in reverse order and the inverse of the changes are applied. - The value `REPLAY_MODE_PICK` is used when either option `--onto` or `--advance` is used. In both cases the commits are processed in normal order, and the changes are applied as-is. Since there are only two possible values of this enum, simplify the code by converting the enum into a bool. This avoids adding code paths that check for invalid values of the enum, and shortens code where the value is checked with a ternary operator. Signed-off-by: Toon Claes <toon@iotcl.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 1ff279f commit ea0af2f

1 file changed

Lines changed: 25 additions & 34 deletions

File tree

replay.c

Lines changed: 25 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,6 @@
1818
*/
1919
#define the_repository DO_NOT_USE_THE_REPOSITORY
2020

21-
enum replay_mode {
22-
REPLAY_MODE_PICK,
23-
REPLAY_MODE_REVERT,
24-
};
25-
2621
static const char *short_commit_name(struct repository *repo,
2722
struct commit *commit)
2823
{
@@ -81,7 +76,7 @@ static struct commit *create_commit(struct repository *repo,
8176
struct tree *tree,
8277
struct commit *based_on,
8378
struct commit *parent,
84-
enum replay_mode mode)
79+
bool reverse)
8580
{
8681
struct object_id ret;
8782
struct object *obj = NULL;
@@ -98,15 +93,13 @@ static struct commit *create_commit(struct repository *repo,
9893

9994
commit_list_insert(parent, &parents);
10095
extra = read_commit_extra_headers(based_on, exclude_gpgsig);
101-
if (mode == REPLAY_MODE_REVERT) {
96+
if (reverse) {
10297
generate_revert_message(&msg, based_on, repo);
10398
/* For revert, use current user as author (NULL = use default) */
104-
} else if (mode == REPLAY_MODE_PICK) {
99+
} else {
105100
find_commit_subject(message, &orig_message);
106101
strbuf_addstr(&msg, orig_message);
107102
author = get_author(message);
108-
} else {
109-
BUG("unexpected replay mode %d", mode);
110103
}
111104
reset_ident_date();
112105
if (commit_tree_extended(msg.buf, msg.len, &tree->object.oid, parents,
@@ -269,7 +262,7 @@ static struct commit *pick_regular_commit(struct repository *repo,
269262
struct commit *onto,
270263
struct merge_options *merge_opt,
271264
struct merge_result *result,
272-
enum replay_mode mode,
265+
bool reverse,
273266
enum replay_empty_commit_action empty)
274267
{
275268
struct commit *base, *replayed_base;
@@ -287,7 +280,21 @@ static struct commit *pick_regular_commit(struct repository *repo,
287280
replayed_base_tree = repo_get_commit_tree(repo, replayed_base);
288281
pickme_tree = repo_get_commit_tree(repo, pickme);
289282

290-
if (mode == REPLAY_MODE_PICK) {
283+
if (reverse) {
284+
/* Revert: swap base and pickme to reverse the diff */
285+
const char *pickme_name = short_commit_name(repo, pickme);
286+
merge_opt->branch1 = short_commit_name(repo, replayed_base);
287+
merge_opt->branch2 = xstrfmt("parent of %s", pickme_name);
288+
merge_opt->ancestor = pickme_name;
289+
290+
merge_incore_nonrecursive(merge_opt,
291+
pickme_tree,
292+
replayed_base_tree,
293+
base_tree,
294+
result);
295+
296+
free((char *)merge_opt->branch2);
297+
} else {
291298
/* Cherry-pick: normal order */
292299
merge_opt->branch1 = short_commit_name(repo, replayed_base);
293300
merge_opt->branch2 = short_commit_name(repo, pickme);
@@ -303,22 +310,6 @@ static struct commit *pick_regular_commit(struct repository *repo,
303310
result);
304311

305312
free((char *)merge_opt->ancestor);
306-
} else if (mode == REPLAY_MODE_REVERT) {
307-
/* Revert: swap base and pickme to reverse the diff */
308-
const char *pickme_name = short_commit_name(repo, pickme);
309-
merge_opt->branch1 = short_commit_name(repo, replayed_base);
310-
merge_opt->branch2 = xstrfmt("parent of %s", pickme_name);
311-
merge_opt->ancestor = pickme_name;
312-
313-
merge_incore_nonrecursive(merge_opt,
314-
pickme_tree,
315-
replayed_base_tree,
316-
base_tree,
317-
result);
318-
319-
free((char *)merge_opt->branch2);
320-
} else {
321-
BUG("unexpected replay mode %d", mode);
322313
}
323314
merge_opt->ancestor = NULL;
324315
merge_opt->branch2 = NULL;
@@ -341,7 +332,7 @@ static struct commit *pick_regular_commit(struct repository *repo,
341332
}
342333
}
343334

344-
return create_commit(repo, result->tree, pickme, replayed_base, mode);
335+
return create_commit(repo, result->tree, pickme, replayed_base, reverse);
345336
}
346337

347338
void replay_result_release(struct replay_result *result)
@@ -381,13 +372,13 @@ int replay_revisions(struct rev_info *revs,
381372
char *revert;
382373
const char *ref;
383374
struct object_id old_oid;
384-
enum replay_mode mode = REPLAY_MODE_PICK;
375+
bool reverse;
385376
int ret;
386377

387378
advance = xstrdup_or_null(opts->advance);
388379
revert = xstrdup_or_null(opts->revert);
389-
if (revert)
390-
mode = REPLAY_MODE_REVERT;
380+
reverse = !!revert;
381+
391382
set_up_replay_mode(revs->repo, &revs->cmdline, opts->onto,
392383
&detached_head, &advance, &revert, &onto, &update_refs);
393384

@@ -430,8 +421,8 @@ int replay_revisions(struct rev_info *revs,
430421
die(_("replaying merge commits is not supported yet!"));
431422

432423
last_commit = pick_regular_commit(revs->repo, commit, replayed_commits,
433-
mode == REPLAY_MODE_REVERT ? last_commit : onto,
434-
&merge_opt, &result, mode, opts->empty);
424+
reverse ? last_commit : onto,
425+
&merge_opt, &result, reverse, opts->empty);
435426
if (!last_commit)
436427
break;
437428

0 commit comments

Comments
 (0)