THIS IS A TEST INSTANCE ONLY! REPOSITORIES CAN BE DELETED AT ANY TIME!

Git Source Code Mirror - This is a publish-only repository and all pull requests are ignored. Please follow Documentation/SubmittingPatches procedure for any of your improvements.
git
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

213 lines
6.5KB

  1. #ifndef SEQUENCER_H
  2. #define SEQUENCER_H
  3. #include "cache.h"
  4. #include "strbuf.h"
  5. struct commit;
  6. struct repository;
  7. const char *git_path_commit_editmsg(void);
  8. const char *git_path_seq_dir(void);
  9. const char *rebase_path_todo(void);
  10. const char *rebase_path_todo_backup(void);
  11. #define APPEND_SIGNOFF_DEDUP (1u << 0)
  12. enum replay_action {
  13. REPLAY_REVERT,
  14. REPLAY_PICK,
  15. REPLAY_INTERACTIVE_REBASE
  16. };
  17. enum commit_msg_cleanup_mode {
  18. COMMIT_MSG_CLEANUP_SPACE,
  19. COMMIT_MSG_CLEANUP_NONE,
  20. COMMIT_MSG_CLEANUP_SCISSORS,
  21. COMMIT_MSG_CLEANUP_ALL
  22. };
  23. struct replay_opts {
  24. enum replay_action action;
  25. /* Boolean options */
  26. int edit;
  27. int record_origin;
  28. int no_commit;
  29. int signoff;
  30. int allow_ff;
  31. int allow_rerere_auto;
  32. int allow_empty;
  33. int allow_empty_message;
  34. int keep_redundant_commits;
  35. int verbose;
  36. int quiet;
  37. int reschedule_failed_exec;
  38. int mainline;
  39. char *gpg_sign;
  40. enum commit_msg_cleanup_mode default_msg_cleanup;
  41. int explicit_cleanup;
  42. /* Merge strategy */
  43. char *strategy;
  44. char **xopts;
  45. size_t xopts_nr, xopts_alloc;
  46. /* Used by fixup/squash */
  47. struct strbuf current_fixups;
  48. int current_fixup_count;
  49. /* placeholder commit for -i --root */
  50. struct object_id squash_onto;
  51. int have_squash_onto;
  52. /* Only used by REPLAY_NONE */
  53. struct rev_info *revs;
  54. };
  55. #define REPLAY_OPTS_INIT { .action = -1, .current_fixups = STRBUF_INIT }
  56. /*
  57. * Note that ordering matters in this enum. Not only must it match the mapping
  58. * of todo_command_info (in sequencer.c), it is also divided into several
  59. * sections that matter. When adding new commands, make sure you add it in the
  60. * right section.
  61. */
  62. enum todo_command {
  63. /* commands that handle commits */
  64. TODO_PICK = 0,
  65. TODO_REVERT,
  66. TODO_EDIT,
  67. TODO_REWORD,
  68. TODO_FIXUP,
  69. TODO_SQUASH,
  70. /* commands that do something else than handling a single commit */
  71. TODO_EXEC,
  72. TODO_BREAK,
  73. TODO_LABEL,
  74. TODO_RESET,
  75. TODO_MERGE,
  76. /* commands that do nothing but are counted for reporting progress */
  77. TODO_NOOP,
  78. TODO_DROP,
  79. /* comments (not counted for reporting progress) */
  80. TODO_COMMENT
  81. };
  82. struct todo_item {
  83. enum todo_command command;
  84. struct commit *commit;
  85. unsigned int flags;
  86. int arg_len;
  87. /* The offset of the command and its argument in the strbuf */
  88. size_t offset_in_buf, arg_offset;
  89. };
  90. struct todo_list {
  91. struct strbuf buf;
  92. struct todo_item *items;
  93. int nr, alloc, current;
  94. int done_nr, total_nr;
  95. struct stat_data stat;
  96. };
  97. #define TODO_LIST_INIT { STRBUF_INIT }
  98. int todo_list_parse_insn_buffer(struct repository *r, char *buf,
  99. struct todo_list *todo_list);
  100. int todo_list_write_to_file(struct repository *r, struct todo_list *todo_list,
  101. const char *file, const char *shortrevisions,
  102. const char *shortonto, int num, unsigned flags);
  103. void todo_list_release(struct todo_list *todo_list);
  104. const char *todo_item_get_arg(struct todo_list *todo_list,
  105. struct todo_item *item);
  106. /* Call this to setup defaults before parsing command line options */
  107. void sequencer_init_config(struct replay_opts *opts);
  108. int sequencer_pick_revisions(struct repository *repo,
  109. struct replay_opts *opts);
  110. int sequencer_continue(struct repository *repo, struct replay_opts *opts);
  111. int sequencer_rollback(struct repository *repo, struct replay_opts *opts);
  112. int sequencer_skip(struct repository *repo, struct replay_opts *opts);
  113. int sequencer_remove_state(struct replay_opts *opts);
  114. #define TODO_LIST_KEEP_EMPTY (1U << 0)
  115. #define TODO_LIST_SHORTEN_IDS (1U << 1)
  116. #define TODO_LIST_ABBREVIATE_CMDS (1U << 2)
  117. #define TODO_LIST_REBASE_MERGES (1U << 3)
  118. /*
  119. * When rebasing merges, commits that do have the base commit as ancestor
  120. * ("cousins") are *not* rebased onto the new base by default. If those
  121. * commits should be rebased onto the new base, this flag needs to be passed.
  122. */
  123. #define TODO_LIST_REBASE_COUSINS (1U << 4)
  124. #define TODO_LIST_APPEND_TODO_HELP (1U << 5)
  125. /*
  126. * When generating a script that rebases merges with `--root` *and* with
  127. * `--onto`, we do not want to re-generate the root commits.
  128. */
  129. #define TODO_LIST_ROOT_WITH_ONTO (1U << 6)
  130. int sequencer_make_script(struct repository *r, struct strbuf *out, int argc,
  131. const char **argv, unsigned flags);
  132. void todo_list_add_exec_commands(struct todo_list *todo_list,
  133. struct string_list *commands);
  134. int check_todo_list_from_file(struct repository *r);
  135. int complete_action(struct repository *r, struct replay_opts *opts, unsigned flags,
  136. const char *shortrevisions, const char *onto_name,
  137. struct commit *onto, const char *orig_head, struct string_list *commands,
  138. unsigned autosquash, struct todo_list *todo_list);
  139. int todo_list_rearrange_squash(struct todo_list *todo_list);
  140. /*
  141. * Append a signoff to the commit message in "msgbuf". The ignore_footer
  142. * parameter specifies the number of bytes at the end of msgbuf that should
  143. * not be considered at all. I.e., they are not checked for existing trailers,
  144. * and the new signoff will be spliced into the buffer before those bytes.
  145. */
  146. void append_signoff(struct strbuf *msgbuf, size_t ignore_footer, unsigned flag);
  147. void append_conflicts_hint(struct index_state *istate,
  148. struct strbuf *msgbuf, enum commit_msg_cleanup_mode cleanup_mode);
  149. enum commit_msg_cleanup_mode get_cleanup_mode(const char *cleanup_arg,
  150. int use_editor);
  151. void cleanup_message(struct strbuf *msgbuf,
  152. enum commit_msg_cleanup_mode cleanup_mode, int verbose);
  153. int message_is_empty(const struct strbuf *sb,
  154. enum commit_msg_cleanup_mode cleanup_mode);
  155. int template_untouched(const struct strbuf *sb, const char *template_file,
  156. enum commit_msg_cleanup_mode cleanup_mode);
  157. int update_head_with_reflog(const struct commit *old_head,
  158. const struct object_id *new_head,
  159. const char *action, const struct strbuf *msg,
  160. struct strbuf *err);
  161. void commit_post_rewrite(struct repository *r,
  162. const struct commit *current_head,
  163. const struct object_id *new_head);
  164. int prepare_branch_to_be_rebased(struct repository *r, struct replay_opts *opts,
  165. const char *commit);
  166. #define SUMMARY_INITIAL_COMMIT (1 << 0)
  167. #define SUMMARY_SHOW_AUTHOR_DATE (1 << 1)
  168. void print_commit_summary(struct repository *repo,
  169. const char *prefix,
  170. const struct object_id *oid,
  171. unsigned int flags);
  172. int read_author_script(const char *path, char **name, char **email, char **date,
  173. int allow_missing);
  174. #endif
  175. void parse_strategy_opts(struct replay_opts *opts, char *raw_opts);
  176. int write_basic_state(struct replay_opts *opts, const char *head_name,
  177. struct commit *onto, const char *orig_head);
  178. void sequencer_post_commit_cleanup(struct repository *r, int verbose);
  179. int sequencer_get_last_command(struct repository* r,
  180. enum replay_action *action);