2011-08-04 18:39:11 +08:00
|
|
|
#ifndef SEQUENCER_H
|
|
|
|
#define SEQUENCER_H
|
|
|
|
|
2018-01-24 20:34:22 +08:00
|
|
|
const char *git_path_commit_editmsg(void);
|
2016-10-14 21:17:12 +08:00
|
|
|
const char *git_path_seq_dir(void);
|
2011-08-04 18:39:11 +08:00
|
|
|
|
2013-02-12 18:17:35 +08:00
|
|
|
#define APPEND_SIGNOFF_DEDUP (1u << 0)
|
|
|
|
|
2012-01-12 02:15:57 +08:00
|
|
|
enum replay_action {
|
|
|
|
REPLAY_REVERT,
|
2017-01-02 23:26:28 +08:00
|
|
|
REPLAY_PICK,
|
|
|
|
REPLAY_INTERACTIVE_REBASE
|
2012-01-12 02:15:57 +08:00
|
|
|
};
|
|
|
|
|
2017-12-13 19:46:21 +08:00
|
|
|
enum commit_msg_cleanup_mode {
|
|
|
|
COMMIT_MSG_CLEANUP_SPACE,
|
|
|
|
COMMIT_MSG_CLEANUP_NONE,
|
|
|
|
COMMIT_MSG_CLEANUP_SCISSORS,
|
|
|
|
COMMIT_MSG_CLEANUP_ALL
|
|
|
|
};
|
|
|
|
|
2012-01-12 02:15:57 +08:00
|
|
|
struct replay_opts {
|
|
|
|
enum replay_action action;
|
|
|
|
|
|
|
|
/* Boolean options */
|
|
|
|
int edit;
|
|
|
|
int record_origin;
|
|
|
|
int no_commit;
|
|
|
|
int signoff;
|
|
|
|
int allow_ff;
|
|
|
|
int allow_rerere_auto;
|
2012-04-12 04:21:53 +08:00
|
|
|
int allow_empty;
|
2012-08-02 18:38:51 +08:00
|
|
|
int allow_empty_message;
|
git-cherry-pick: Add keep-redundant-commits option
The git-cherry-pick --allow-empty command by default only preserves empty
commits that were originally empty, i.e only those commits for which
<commit>^{tree} and <commit>^^{tree} are equal. By default commits which are
non-empty, but were made empty by the inclusion of a prior commit on the current
history are filtered out. This option allows us to override that behavior and
include redundant commits as empty commits in the change history.
Note that this patch changes the default behavior of git cherry-pick slightly.
Prior to this patch all commits in a cherry-pick sequence were applied and git
commit was run. The implication here was that, if a commit was redundant, and
the commit did not trigger the fast forward logic, the git commit operation, and
therefore the git cherry-pick operation would fail, displaying the cherry pick
advice (i.e. run git commit --allow-empty). With this patch however, such
redundant commits are automatically skipped without stopping, unless
--keep-redundant-commits is specified, in which case, they are automatically
applied as empty commits.
Signed-off-by: Neil Horman <nhorman@tuxdriver.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2012-04-20 22:36:15 +08:00
|
|
|
int keep_redundant_commits;
|
2017-01-02 23:26:53 +08:00
|
|
|
int verbose;
|
2012-01-12 02:15:57 +08:00
|
|
|
|
|
|
|
int mainline;
|
|
|
|
|
2016-10-21 20:24:13 +08:00
|
|
|
char *gpg_sign;
|
2017-12-13 19:46:21 +08:00
|
|
|
enum commit_msg_cleanup_mode default_msg_cleanup;
|
2014-01-24 08:50:58 +08:00
|
|
|
|
2012-01-12 02:15:57 +08:00
|
|
|
/* Merge strategy */
|
2016-10-21 20:24:13 +08:00
|
|
|
char *strategy;
|
|
|
|
char **xopts;
|
2012-01-12 02:15:57 +08:00
|
|
|
size_t xopts_nr, xopts_alloc;
|
|
|
|
|
|
|
|
/* Only used by REPLAY_NONE */
|
|
|
|
struct rev_info *revs;
|
|
|
|
};
|
2016-10-21 20:24:55 +08:00
|
|
|
#define REPLAY_OPTS_INIT { -1 }
|
2012-01-12 02:15:57 +08:00
|
|
|
|
2017-12-13 19:46:21 +08:00
|
|
|
/* Call this to setup defaults before parsing command line options */
|
|
|
|
void sequencer_init_config(struct replay_opts *opts);
|
2012-01-12 02:15:57 +08:00
|
|
|
int sequencer_pick_revisions(struct replay_opts *opts);
|
2016-10-21 20:24:55 +08:00
|
|
|
int sequencer_continue(struct replay_opts *opts);
|
|
|
|
int sequencer_rollback(struct replay_opts *opts);
|
|
|
|
int sequencer_remove_state(struct replay_opts *opts);
|
2012-01-12 02:15:57 +08:00
|
|
|
|
2017-12-06 01:52:32 +08:00
|
|
|
#define TODO_LIST_KEEP_EMPTY (1U << 0)
|
|
|
|
#define TODO_LIST_SHORTEN_IDS (1U << 1)
|
2017-12-06 01:52:34 +08:00
|
|
|
#define TODO_LIST_ABBREVIATE_CMDS (1U << 2)
|
2018-04-25 20:29:03 +08:00
|
|
|
#define TODO_LIST_REBASE_MERGES (1U << 3)
|
2017-12-06 01:52:32 +08:00
|
|
|
int sequencer_make_script(FILE *out, int argc, const char **argv,
|
|
|
|
unsigned flags);
|
2017-07-14 22:44:58 +08:00
|
|
|
|
2017-12-06 01:52:33 +08:00
|
|
|
int sequencer_add_exec_commands(const char *command);
|
2017-12-06 01:52:32 +08:00
|
|
|
int transform_todos(unsigned flags);
|
2017-07-14 22:45:21 +08:00
|
|
|
int check_todo_list(void);
|
2017-07-14 22:45:25 +08:00
|
|
|
int skip_unnecessary_picks(void);
|
2017-07-14 22:45:31 +08:00
|
|
|
int rearrange_squash(void);
|
2017-07-14 22:45:11 +08:00
|
|
|
|
2012-09-14 14:52:03 +08:00
|
|
|
extern const char sign_off_header[];
|
|
|
|
|
2013-02-12 18:17:35 +08:00
|
|
|
void append_signoff(struct strbuf *msgbuf, int ignore_footer, unsigned flag);
|
2014-10-25 02:34:59 +08:00
|
|
|
void append_conflicts_hint(struct strbuf *msgbuf);
|
2017-11-10 19:09:42 +08:00
|
|
|
int message_is_empty(const struct strbuf *sb,
|
|
|
|
enum commit_msg_cleanup_mode cleanup_mode);
|
|
|
|
int template_untouched(const struct strbuf *sb, const char *template_file,
|
|
|
|
enum commit_msg_cleanup_mode cleanup_mode);
|
2017-11-17 19:34:47 +08:00
|
|
|
int update_head_with_reflog(const struct commit *old_head,
|
|
|
|
const struct object_id *new_head,
|
|
|
|
const char *action, const struct strbuf *msg,
|
|
|
|
struct strbuf *err);
|
2017-11-17 19:34:48 +08:00
|
|
|
void commit_post_rewrite(const struct commit *current_head,
|
|
|
|
const struct object_id *new_head);
|
2012-09-14 14:52:03 +08:00
|
|
|
|
2017-11-24 19:07:54 +08:00
|
|
|
#define SUMMARY_INITIAL_COMMIT (1 << 0)
|
|
|
|
#define SUMMARY_SHOW_AUTHOR_DATE (1 << 1)
|
|
|
|
void print_commit_summary(const char *prefix, const struct object_id *oid,
|
|
|
|
unsigned int flags);
|
2011-08-04 18:39:11 +08:00
|
|
|
#endif
|