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

Re: [PATCH v1 1/2] sequencer: don't abbreviate a command if it doesn't have a short form

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 30, 2020, 17:50 UTC
Message-ID
<xmqqeet991fj.fsf@gitster.c.googlers.com>
In-Reply-To
<20200330124236.6716-2-alban.gruin@gmail.com>
Alban Gruin <alban.gruin@gmail.com> writes:
Show 7 quoted lines
>  static char command_to_char(const enum todo_command command)
>  {
> -	if (command < TODO_COMMENT && todo_command_info[command].c)
> +	if (command < TODO_COMMENT)
>  		return todo_command_info[command].c;
>  	return comment_line_char;
>  }

This is not a new issue, and it may not even be an issue at all, but it is curious that command_to_string() barfs with "unknown command" when fed an int outside enum todo_command or TODO_COMMENT iteslf, while this returns comment_line_char. Makes a reader wonder if both of them should be dying the same way.

Show 17 quoted lines
> @@ -4963,6 +4963,8 @@ static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_lis
>  		max = num;
>  
>  	for (item = todo_list->items, i = 0; i < max; i++, item++) {
> +		char cmd;
> +
>  		/* if the item is not a command write it and continue */
>  		if (item->command >= TODO_COMMENT) {
>  			strbuf_addf(buf, "%.*s\n", item->arg_len,
> @@ -4971,8 +4973,9 @@ static void todo_list_to_strbuf(struct repository *r, struct todo_list *todo_lis
>  		}
>  
>  		/* add command to the buffer */
> -		if (flags & TODO_LIST_ABBREVIATE_CMDS)
> -			strbuf_addch(buf, command_to_char(item->command));
> +		cmd = command_to_char(item->command);
> +		if (flags & TODO_LIST_ABBREVIATE_CMDS && cmd)

Even though the precedence rule may not require it, for readability's sake, it would be easier to see the association if this is written with an extra set of parentheses, i.e.

		if ((flags & TODO_LIST_ABBREVIATE_CMDS) && cmd)
> +			strbuf_addch(buf, cmd);
>  		else
>  			strbuf_addstr(buf, command_to_string(item->command));

The logic is quite clear. If there is an abbreviation and the user prefers to see it, we use it, but otherwise we'll give the full spelling.

We are sure we will never get TODO_COMMENT here in item->command at this point (the loop would have already continued after adding it to the buffer), so it does not affect us that command_to_string() would die. For that matter, if we made command_to_char() die, just like command_to_string() would, nobody will get hurt and the resulting code would become saner. But obviously it is outside the scope of this fix (#leftoverbits).

Thanks.
Previous: Alban GruinNext: Eric Sunshine
Message 9 of 11 in “git rebase fast-forward fails with abbreviateCommands”
  1. Jan Alexander Steffens (heftig)Mar 27, 2020
  2. Alban GruinMar 27, 2020
  3. Elijah NewrenMar 27, 2020
  4. Jan Alexander Steffens (heftig)Mar 27, 2020
  5. Alban GruinMar 28, 2020
  6. Junio C HamanoMar 27, 2020
  7. 0/2 rebase --merge: fix fast forwarding when `rebase.abbreviateCommands' is setAlban Gruin, Mar 30, 2020
  8. 1/2 sequencer: don't abbreviate a command if it doesn't have a short formAlban Gruin, Mar 30, 2020
  9. Junio C HamanoMar 30, 2020
  10. Eric SunshineMar 30, 2020
  11. 2/2 t3432: test `--merge' with `rebase.abbreviateCommands = true', tooAlban Gruin, Mar 30, 2020

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.