Skip to content

Commit 73d66fb

Browse files
committed
Merge branch 'interactive-rebase-current'
This series of branches introduces the git-rebase--helper, a builtin helping to accelerate the interactive rebase dramatically. Signed-off-by: Johannes Schindelin <[email protected]>
2 parents c610988 + d31264c commit 73d66fb

File tree

10 files changed

+673
-336
lines changed

10 files changed

+673
-336
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
/git-read-tree
115115
/git-rebase
116116
/git-rebase--am
117+
/git-rebase--helper
117118
/git-rebase--interactive
118119
/git-rebase--merge
119120
/git-receive-pack

Makefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -933,6 +933,7 @@ BUILTIN_OBJS += builtin/prune.o
933933
BUILTIN_OBJS += builtin/pull.o
934934
BUILTIN_OBJS += builtin/push.o
935935
BUILTIN_OBJS += builtin/read-tree.o
936+
BUILTIN_OBJS += builtin/rebase--helper.o
936937
BUILTIN_OBJS += builtin/receive-pack.o
937938
BUILTIN_OBJS += builtin/reflog.o
938939
BUILTIN_OBJS += builtin/remote.o

builtin.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ extern int cmd_prune_packed(int argc, const char **argv, const char *prefix);
103103
extern int cmd_pull(int argc, const char **argv, const char *prefix);
104104
extern int cmd_push(int argc, const char **argv, const char *prefix);
105105
extern int cmd_read_tree(int argc, const char **argv, const char *prefix);
106+
extern int cmd_rebase__helper(int argc, const char **argv, const char *prefix);
106107
extern int cmd_receive_pack(int argc, const char **argv, const char *prefix);
107108
extern int cmd_reflog(int argc, const char **argv, const char *prefix);
108109
extern int cmd_remote(int argc, const char **argv, const char *prefix);

builtin/rebase--helper.c

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#include "builtin.h"
2+
#include "cache.h"
3+
#include "parse-options.h"
4+
#include "sequencer.h"
5+
6+
static const char * const builtin_rebase_helper_usage[] = {
7+
N_("git rebase--helper [<options>]"),
8+
NULL
9+
};
10+
11+
int cmd_rebase__helper(int argc, const char **argv, const char *prefix)
12+
{
13+
struct replay_opts opts = REPLAY_OPTS_INIT;
14+
int keep_empty = 0;
15+
enum {
16+
CONTINUE = 1, ABORT, MAKE_SCRIPT, SHORTEN_SHA1S, EXPAND_SHA1S,
17+
CHECK_TODO_LIST, SKIP_UNNECESSARY_PICKS, REARRANGE_SQUASH
18+
} command = 0;
19+
struct option options[] = {
20+
OPT_BOOL(0, "ff", &opts.allow_ff, N_("allow fast-forward")),
21+
OPT_BOOL(0, "keep-empty", &keep_empty, N_("keep empty commits")),
22+
OPT_CMDMODE(0, "continue", &command, N_("continue rebase"),
23+
CONTINUE),
24+
OPT_CMDMODE(0, "abort", &command, N_("abort rebase"),
25+
ABORT),
26+
OPT_CMDMODE(0, "make-script", &command,
27+
N_("make rebase script"), MAKE_SCRIPT),
28+
OPT_CMDMODE(0, "shorten-sha1s", &command,
29+
N_("shorten SHA-1s in the todo list"), SHORTEN_SHA1S),
30+
OPT_CMDMODE(0, "expand-sha1s", &command,
31+
N_("expand SHA-1s in the todo list"), EXPAND_SHA1S),
32+
OPT_CMDMODE(0, "check-todo-list", &command,
33+
N_("check the todo list"), CHECK_TODO_LIST),
34+
OPT_CMDMODE(0, "skip-unnecessary-picks", &command,
35+
N_("skip unnecessary picks"), SKIP_UNNECESSARY_PICKS),
36+
OPT_CMDMODE(0, "rearrange-squash", &command,
37+
N_("rearrange fixup/squash lines"), REARRANGE_SQUASH),
38+
OPT_END()
39+
};
40+
41+
git_config(git_default_config, NULL);
42+
43+
opts.action = REPLAY_INTERACTIVE_REBASE;
44+
opts.allow_ff = 1;
45+
opts.allow_empty = 1;
46+
47+
argc = parse_options(argc, argv, NULL, options,
48+
builtin_rebase_helper_usage, PARSE_OPT_KEEP_ARGV0);
49+
50+
if (command == CONTINUE && argc == 1)
51+
return !!sequencer_continue(&opts);
52+
if (command == ABORT && argc == 1)
53+
return !!sequencer_remove_state(&opts);
54+
if (command == MAKE_SCRIPT && argc > 1)
55+
return !!sequencer_make_script(keep_empty, stdout, argc, argv);
56+
if (command == SHORTEN_SHA1S && argc == 1)
57+
return !!transform_todo_ids(1);
58+
if (command == EXPAND_SHA1S && argc == 1)
59+
return !!transform_todo_ids(0);
60+
if (command == CHECK_TODO_LIST && argc == 1)
61+
return !!check_todo_list();
62+
if (command == SKIP_UNNECESSARY_PICKS && argc == 1)
63+
return !!skip_unnecessary_picks();
64+
if (command == REARRANGE_SQUASH && argc == 1)
65+
return !!rearrange_squash();
66+
usage_with_options(builtin_rebase_helper_usage, options);
67+
}

0 commit comments

Comments
 (0)