4 #include "parse-options.h"
6 #include "rebase-interactive.h"
8 static const char * const builtin_rebase_helper_usage
[] = {
9 N_("git rebase--helper [<options>]"),
13 int cmd_rebase__helper(int argc
, const char **argv
, const char *prefix
)
15 struct replay_opts opts
= REPLAY_OPTS_INIT
;
16 unsigned flags
= 0, keep_empty
= 0, rebase_merges
= 0, autosquash
= 0;
17 int abbreviate_commands
= 0, rebase_cousins
= -1;
19 CONTINUE
= 1, ABORT
, MAKE_SCRIPT
, SHORTEN_OIDS
, EXPAND_OIDS
,
20 CHECK_TODO_LIST
, SKIP_UNNECESSARY_PICKS
, REARRANGE_SQUASH
,
21 ADD_EXEC
, APPEND_TODO_HELP
, EDIT_TODO
, PREPARE_BRANCH
,
22 CHECKOUT_ONTO
, COMPLETE_ACTION
24 struct option options
[] = {
25 OPT_BOOL(0, "ff", &opts
.allow_ff
, N_("allow fast-forward")),
26 OPT_BOOL(0, "keep-empty", &keep_empty
, N_("keep empty commits")),
27 OPT_BOOL(0, "allow-empty-message", &opts
.allow_empty_message
,
28 N_("allow commits with empty messages")),
29 OPT_BOOL(0, "rebase-merges", &rebase_merges
, N_("rebase merge commits")),
30 OPT_BOOL(0, "rebase-cousins", &rebase_cousins
,
31 N_("keep original branch points of cousins")),
32 OPT_BOOL(0, "autosquash", &autosquash
,
33 N_("move commits that begin with squash!/fixup!")),
34 OPT__VERBOSE(&opts
.verbose
, N_("be verbose")),
35 OPT_CMDMODE(0, "continue", &command
, N_("continue rebase"),
37 OPT_CMDMODE(0, "abort", &command
, N_("abort rebase"),
39 OPT_CMDMODE(0, "make-script", &command
,
40 N_("make rebase script"), MAKE_SCRIPT
),
41 OPT_CMDMODE(0, "shorten-ids", &command
,
42 N_("shorten commit ids in the todo list"), SHORTEN_OIDS
),
43 OPT_CMDMODE(0, "expand-ids", &command
,
44 N_("expand commit ids in the todo list"), EXPAND_OIDS
),
45 OPT_CMDMODE(0, "check-todo-list", &command
,
46 N_("check the todo list"), CHECK_TODO_LIST
),
47 OPT_CMDMODE(0, "skip-unnecessary-picks", &command
,
48 N_("skip unnecessary picks"), SKIP_UNNECESSARY_PICKS
),
49 OPT_CMDMODE(0, "rearrange-squash", &command
,
50 N_("rearrange fixup/squash lines"), REARRANGE_SQUASH
),
51 OPT_CMDMODE(0, "add-exec-commands", &command
,
52 N_("insert exec commands in todo list"), ADD_EXEC
),
53 OPT_CMDMODE(0, "append-todo-help", &command
,
54 N_("insert the help in the todo list"), APPEND_TODO_HELP
),
55 OPT_CMDMODE(0, "edit-todo", &command
,
56 N_("edit the todo list during an interactive rebase"),
58 OPT_CMDMODE(0, "prepare-branch", &command
,
59 N_("prepare the branch to be rebased"), PREPARE_BRANCH
),
60 OPT_CMDMODE(0, "checkout-onto", &command
,
61 N_("checkout a commit"), CHECKOUT_ONTO
),
62 OPT_CMDMODE(0, "complete-action", &command
,
63 N_("complete the action"), COMPLETE_ACTION
),
67 sequencer_init_config(&opts
);
68 git_config_get_bool("rebase.abbreviatecommands", &abbreviate_commands
);
70 opts
.action
= REPLAY_INTERACTIVE_REBASE
;
74 argc
= parse_options(argc
, argv
, NULL
, options
,
75 builtin_rebase_helper_usage
, PARSE_OPT_KEEP_ARGV0
);
77 flags
|= keep_empty
? TODO_LIST_KEEP_EMPTY
: 0;
78 flags
|= abbreviate_commands
? TODO_LIST_ABBREVIATE_CMDS
: 0;
79 flags
|= rebase_merges
? TODO_LIST_REBASE_MERGES
: 0;
80 flags
|= rebase_cousins
> 0 ? TODO_LIST_REBASE_COUSINS
: 0;
81 flags
|= command
== SHORTEN_OIDS
? TODO_LIST_SHORTEN_IDS
: 0;
83 if (rebase_cousins
>= 0 && !rebase_merges
)
84 warning(_("--[no-]rebase-cousins has no effect without "
87 if (command
== CONTINUE
&& argc
== 1)
88 return !!sequencer_continue(&opts
);
89 if (command
== ABORT
&& argc
== 1)
90 return !!sequencer_remove_state(&opts
);
91 if (command
== MAKE_SCRIPT
&& argc
> 1)
92 return !!sequencer_make_script(stdout
, argc
, argv
, flags
);
93 if ((command
== SHORTEN_OIDS
|| command
== EXPAND_OIDS
) && argc
== 1)
94 return !!transform_todos(flags
);
95 if (command
== CHECK_TODO_LIST
&& argc
== 1)
96 return !!check_todo_list();
97 if (command
== SKIP_UNNECESSARY_PICKS
&& argc
== 1) {
99 int ret
= skip_unnecessary_picks(&oid
);
102 puts(oid_to_hex(&oid
));
105 if (command
== REARRANGE_SQUASH
&& argc
== 1)
106 return !!rearrange_squash();
107 if (command
== ADD_EXEC
&& argc
== 2)
108 return !!sequencer_add_exec_commands(argv
[1]);
109 if (command
== APPEND_TODO_HELP
&& argc
== 1)
110 return !!append_todo_help_to_file(0, keep_empty
);
111 if (command
== EDIT_TODO
&& argc
== 1)
112 return !!edit_todo_list(flags
);
113 if (command
== PREPARE_BRANCH
&& argc
== 2)
114 return !!prepare_branch_to_be_rebased(&opts
, argv
[1]);
115 if (command
== CHECKOUT_ONTO
&& argc
== 4)
116 return !!checkout_onto(&opts
, argv
[1], argv
[2], argv
[3]);
117 if (command
== COMPLETE_ACTION
&& argc
== 6)
118 return !!complete_action(&opts
, flags
, argv
[1], argv
[2], argv
[3],
119 argv
[4], argv
[5], autosquash
);
121 usage_with_options(builtin_rebase_helper_usage
, options
);