git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 2/3] sequencer: factor out todo command name parsing

From
PGPhillip Wood via GitGitGadget <gitgitgadget@gmail.com>
Date
Jun 27, 2019, 14:12 UTC
Message-ID
<c3885c0b8f55957695650c2d1e25f9036d7e80dd.1561644762.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.275.v2.git.gitgitgadget@gmail.com>
From: Phillip Wood <phillip.wood@dunelm.org.uk>

Factor out the code that parses the name of the command at the start of each line in the todo file into its own function so that it can be used in the next commit.

As I don't want to burden other callers with having to pass in a pointer to the end of the line the test for an abbreviated command is changed. This change should not affect the behavior. Instead of testing `eol == bol + 1` the new code checks for the end of the line by testing for '\n', '\r' or '\0' following the abbreviated name. To avoid reading past the end of an empty string it also checks that there is actually a single character abbreviation before testing if it matches. This prevents it from matching '\0' as the abbreviated name and then trying to read another character.

Signed-off-by: Phillip Wood <phillip.wood@dunelm.org.uk>
---
 sequencer.c | 19 +++++++++++++------
 1 file changed, 13 insertions(+), 6 deletions(-)
diff --git a/sequencer.c b/sequencer.c
index 919e3153f5..793f86bf9a 100644
--- a/sequencer.c
+++ b/sequencer.c
@@ -2076,6 +2076,18 @@ const char *todo_item_get_arg(struct todo_list *todo_list,
 	return todo_list->buf.buf + item->arg_offset;
 }
 
+static int is_command(enum todo_command command, const char **bol)
+{
+	const char *str = todo_command_info[command].str;
+	const char nick = todo_command_info[command].c;
+	const char *p = *bol + 1;
+
+	return skip_prefix(*bol, str, bol) ||
+		((nick && **bol == nick) &&
+		 (*p == ' ' || *p == '\t' || *p == '\n' || *p == '\r' || !*p) &&
+		 (*bol = p));
+}
+
 static int parse_insn_line(struct repository *r, struct todo_item *item,
 			   const char *buf, const char *bol, char *eol)
 {
@@ -2097,12 +2109,7 @@ static int parse_insn_line(struct repository *r, struct todo_item *item,
 	}
 
 	for (i = 0; i < TODO_COMMENT; i++)
-		if (skip_prefix(bol, todo_command_info[i].str, &bol)) {
-			item->command = i;
-			break;
-		} else if ((bol + 1 == eol || bol[1] == ' ' || bol[1] == '\t') &&
-			   *bol == todo_command_info[i].c) {
-			bol++;
+		if (is_command(i, &bol)) {
 			item->command = i;
 			break;
 		}
-- 
gitgitgadget
Previous: Junio C HamanoNext: Junio C Hamano
Message 15 of 17 in “Wip/quieter sequencer status parsing”
  1. 0/3 Wip/quieter sequencer status parsingPhillip Wood via GitGitGadget, Jun 25, 2019
  2. 1/3 sequencer: always allow tab after command namePhillip Wood via GitGitGadget, Jun 25, 2019
  3. 2/3 sequencer: factor out todo command name parsingPhillip Wood via GitGitGadget, Jun 25, 2019
  4. René ScharfeJun 25, 2019
  5. Phillip WoodJun 25, 2019
  6. 3/3 status: do not report errors in sequencer/todoPhillip Wood via GitGitGadget, Jun 25, 2019
  7. Johannes SchindelinJun 25, 2019
  8. Junio C HamanoJun 25, 2019
  9. Phillip WoodJun 26, 2019
  10. Phillip WoodJul 1, 2019
  11. Phillip WoodJun 25, 2019
  12. 0/3 Quieter sequencer status parsingPhillip Wood via GitGitGadget, Jun 27, 2019
  13. 1/3 sequencer: always allow tab after command namePhillip Wood via GitGitGadget, Jun 27, 2019
  14. Junio C HamanoJun 27, 2019
  15. 2/3 sequencer: factor out todo command name parsingPhillip Wood via GitGitGadget, Jun 27, 2019
  16. Junio C HamanoJun 27, 2019
  17. 3/3 status: do not report errors in sequencer/todoPhillip Wood via GitGitGadget, Jun 27, 2019

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.