Skip to content

Commit a8101ec

Browse files
phillipwoodgitster
authored andcommitted
sequencer: factor out parsing of todo commands
Move the code that parses todo commands into a separate function so that it can be shared with "git status" in the next commit. Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent 94f0577 commit a8101ec

2 files changed

Lines changed: 28 additions & 12 deletions

File tree

sequencer.c

Lines changed: 27 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2627,6 +2627,27 @@ static int is_command(enum todo_command command, const char **bol)
26272627
return 0;
26282628
}
26292629

2630+
bool sequencer_parse_todo_command(const char **p, enum todo_command *cmd)
2631+
{
2632+
const char *s = *p;
2633+
2634+
for (int i = 0; i < TODO_COMMENT; i++)
2635+
if (is_command(i, p)) {
2636+
*cmd = i;
2637+
return true;
2638+
}
2639+
2640+
if (starts_with(s, comment_line_str)) {
2641+
*cmd = TODO_COMMENT;
2642+
return true;
2643+
} else if (s[0] == '\n' || (s[0] == '\r' && s[1] == '\n') || !s[0]) {
2644+
*cmd = TODO_COMMENT;
2645+
return true;
2646+
}
2647+
2648+
return false;
2649+
}
2650+
26302651
static int check_label_or_ref_arg(enum todo_command command, const char *arg)
26312652
{
26322653
switch (command) {
@@ -2716,30 +2737,24 @@ static int parse_insn_line(struct repository *r, struct replay_opts *opts,
27162737
{
27172738
struct object_id commit_oid;
27182739
char *end_of_object_name;
2719-
int i, saved, status, padding;
2740+
int saved, status, padding;
27202741

27212742
item->flags = 0;
27222743

27232744
/* left-trim */
27242745
bol += strspn(bol, " \t");
27252746

2726-
if (bol == eol || *bol == '\r' || starts_with_mem(bol, eol - bol, comment_line_str)) {
2727-
item->command = TODO_COMMENT;
2747+
if (!sequencer_parse_todo_command(&bol, &item->command))
2748+
return error(_("invalid command '%.*s'"),
2749+
(int)strcspn(bol, " \t\r\n"), bol);
2750+
2751+
if (item->command == TODO_COMMENT) {
27282752
item->commit = NULL;
27292753
item->arg_offset = bol - buf;
27302754
item->arg_len = eol - bol;
27312755
return 0;
27322756
}
27332757

2734-
for (i = 0; i < TODO_COMMENT; i++)
2735-
if (is_command(i, &bol)) {
2736-
item->command = i;
2737-
break;
2738-
}
2739-
if (i >= TODO_COMMENT)
2740-
return error(_("invalid command '%.*s'"),
2741-
(int)strcspn(bol, " \t\r\n"), bol);
2742-
27432758
/* Eat up extra spaces/ tabs before object name */
27442759
padding = strspn(bol, " \t");
27452760
bol += padding;

sequencer.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,7 @@ int read_author_script(const char *path, char **name, char **email, char **date,
262262
int write_basic_state(struct replay_opts *opts, const char *head_name,
263263
struct commit *onto, const struct object_id *orig_head);
264264
void sequencer_post_commit_cleanup(struct repository *r, int verbose);
265+
bool sequencer_parse_todo_command(const char **p, enum todo_command *cmd);
265266
int sequencer_get_last_command(struct repository* r,
266267
enum replay_action *action);
267268
int sequencer_determine_whence(struct repository *r, enum commit_whence *whence);

0 commit comments

Comments
 (0)